From: Andi Kleen <andi@firstfloor.org>
To: npiggin@kernel.dk, akpm@linux-foundation.org,
torvalds@linux-foundation.org, gregkh@suse.de,
ak@linux.intel.com, linux-kernel@vger.kernel.org,
stable@kernel.org
Subject: [PATCH] [125/223] radix-tree: fix RCU bug
Date: Mon, 13 Dec 2010 00:47:06 +0100 (CET) [thread overview]
Message-ID: <20101212234706.E5860B27BF@basil.firstfloor.org> (raw)
In-Reply-To: <201012131244.547034648@firstfloor.org>
2.6.35-longterm review patch. If anyone has any objections, please let me know.
------------------
From: Nick Piggin <npiggin@kernel.dk>
commit 27d20fddc8af539464fc3ba499d6a830054c3bd6 upstream.
Salman Qazi describes the following radix-tree bug:
In the following case, we get can get a deadlock:
0. The radix tree contains two items, one has the index 0.
1. The reader (in this case find_get_pages) takes the rcu_read_lock.
2. The reader acquires slot(s) for item(s) including the index 0 item.
3. The non-zero index item is deleted, and as a consequence the other item is
moved to the root of the tree. The place where it used to be is queued for
deletion after the readers finish.
3b. The zero item is deleted, removing it from the direct slot, it remains in
the rcu-delayed indirect node.
4. The reader looks at the index 0 slot, and finds that the page has 0 ref
count
5. The reader looks at it again, hoping that the item will either be freed or
the ref count will increase. This never happens, as the slot it is looking
at will never be updated. Also, this slot can never be reclaimed because
the reader is holding rcu_read_lock and is in an infinite loop.
The fix is to re-use the same "indirect" pointer case that requires a slot
lookup retry into a general "retry the lookup" bit.
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Reported-by: Salman Qazi <sqazi@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
include/linux/radix-tree.h | 36 ++++++++++----------
lib/radix-tree.c | 78 +++++++++++++++++++++++++++++++--------------
mm/filemap.c | 26 +++++----------
3 files changed, 84 insertions(+), 56 deletions(-)
Index: linux/include/linux/radix-tree.h
===================================================================
--- linux.orig/include/linux/radix-tree.h
+++ linux/include/linux/radix-tree.h
@@ -36,17 +36,6 @@
* RCU.
*/
#define RADIX_TREE_INDIRECT_PTR 1
-#define RADIX_TREE_RETRY ((void *)-1UL)
-
-static inline void *radix_tree_ptr_to_indirect(void *ptr)
-{
- return (void *)((unsigned long)ptr | RADIX_TREE_INDIRECT_PTR);
-}
-
-static inline void *radix_tree_indirect_to_ptr(void *ptr)
-{
- return (void *)((unsigned long)ptr & ~RADIX_TREE_INDIRECT_PTR);
-}
static inline int radix_tree_is_indirect_ptr(void *ptr)
{
@@ -138,16 +127,29 @@ do { \
* removed.
*
* For use with radix_tree_lookup_slot(). Caller must hold tree at least read
- * locked across slot lookup and dereference. More likely, will be used with
- * radix_tree_replace_slot(), as well, so caller will hold tree write locked.
+ * locked across slot lookup and dereference. Not required if write lock is
+ * held (ie. items cannot be concurrently inserted).
+ *
+ * radix_tree_deref_retry must be used to confirm validity of the pointer if
+ * only the read lock is held.
*/
static inline void *radix_tree_deref_slot(void **pslot)
{
- void *ret = rcu_dereference(*pslot);
- if (unlikely(radix_tree_is_indirect_ptr(ret)))
- ret = RADIX_TREE_RETRY;
- return ret;
+ return rcu_dereference(*pslot);
}
+
+/**
+ * radix_tree_deref_retry - check radix_tree_deref_slot
+ * @arg: pointer returned by radix_tree_deref_slot
+ * Returns: 0 if retry is not required, otherwise retry is required
+ *
+ * radix_tree_deref_retry must be used with radix_tree_deref_slot.
+ */
+static inline int radix_tree_deref_retry(void *arg)
+{
+ return unlikely((unsigned long)arg & RADIX_TREE_INDIRECT_PTR);
+}
+
/**
* radix_tree_replace_slot - replace item in a slot
* @pslot: pointer to slot, returned by radix_tree_lookup_slot
Index: linux/lib/radix-tree.c
===================================================================
--- linux.orig/lib/radix-tree.c
+++ linux/lib/radix-tree.c
@@ -82,6 +82,16 @@ struct radix_tree_preload {
};
static DEFINE_PER_CPU(struct radix_tree_preload, radix_tree_preloads) = { 0, };
+static inline void *ptr_to_indirect(void *ptr)
+{
+ return (void *)((unsigned long)ptr | RADIX_TREE_INDIRECT_PTR);
+}
+
+static inline void *indirect_to_ptr(void *ptr)
+{
+ return (void *)((unsigned long)ptr & ~RADIX_TREE_INDIRECT_PTR);
+}
+
static inline gfp_t root_gfp_mask(struct radix_tree_root *root)
{
return root->gfp_mask & __GFP_BITS_MASK;
@@ -263,7 +273,7 @@ static int radix_tree_extend(struct radi
return -ENOMEM;
/* Increase the height. */
- node->slots[0] = radix_tree_indirect_to_ptr(root->rnode);
+ node->slots[0] = indirect_to_ptr(root->rnode);
/* Propagate the aggregated tag info into the new root */
for (tag = 0; tag < RADIX_TREE_MAX_TAGS; tag++) {
@@ -274,7 +284,7 @@ static int radix_tree_extend(struct radi
newheight = root->height+1;
node->height = newheight;
node->count = 1;
- node = radix_tree_ptr_to_indirect(node);
+ node = ptr_to_indirect(node);
rcu_assign_pointer(root->rnode, node);
root->height = newheight;
} while (height > root->height);
@@ -307,7 +317,7 @@ int radix_tree_insert(struct radix_tree_
return error;
}
- slot = radix_tree_indirect_to_ptr(root->rnode);
+ slot = indirect_to_ptr(root->rnode);
height = root->height;
shift = (height-1) * RADIX_TREE_MAP_SHIFT;
@@ -323,8 +333,7 @@ int radix_tree_insert(struct radix_tree_
rcu_assign_pointer(node->slots[offset], slot);
node->count++;
} else
- rcu_assign_pointer(root->rnode,
- radix_tree_ptr_to_indirect(slot));
+ rcu_assign_pointer(root->rnode, ptr_to_indirect(slot));
}
/* Go a level down */
@@ -372,7 +381,7 @@ static void *radix_tree_lookup_element(s
return NULL;
return is_slot ? (void *)&root->rnode : node;
}
- node = radix_tree_indirect_to_ptr(node);
+ node = indirect_to_ptr(node);
height = node->height;
if (index > radix_tree_maxindex(height))
@@ -391,7 +400,7 @@ static void *radix_tree_lookup_element(s
height--;
} while (height > 0);
- return is_slot ? (void *)slot:node;
+ return is_slot ? (void *)slot : indirect_to_ptr(node);
}
/**
@@ -453,7 +462,7 @@ void *radix_tree_tag_set(struct radix_tr
height = root->height;
BUG_ON(index > radix_tree_maxindex(height));
- slot = radix_tree_indirect_to_ptr(root->rnode);
+ slot = indirect_to_ptr(root->rnode);
shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
while (height > 0) {
@@ -507,7 +516,7 @@ void *radix_tree_tag_clear(struct radix_
shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
pathp->node = NULL;
- slot = radix_tree_indirect_to_ptr(root->rnode);
+ slot = indirect_to_ptr(root->rnode);
while (height > 0) {
int offset;
@@ -577,7 +586,7 @@ int radix_tree_tag_get(struct radix_tree
if (!radix_tree_is_indirect_ptr(node))
return (index == 0);
- node = radix_tree_indirect_to_ptr(node);
+ node = indirect_to_ptr(node);
height = node->height;
if (index > radix_tree_maxindex(height))
@@ -767,7 +776,7 @@ radix_tree_gang_lookup(struct radix_tree
results[0] = node;
return 1;
}
- node = radix_tree_indirect_to_ptr(node);
+ node = indirect_to_ptr(node);
max_index = radix_tree_maxindex(node->height);
@@ -835,7 +844,7 @@ radix_tree_gang_lookup_slot(struct radix
results[0] = (void **)&root->rnode;
return 1;
}
- node = radix_tree_indirect_to_ptr(node);
+ node = indirect_to_ptr(node);
max_index = radix_tree_maxindex(node->height);
@@ -960,7 +969,7 @@ radix_tree_gang_lookup_tag(struct radix_
results[0] = node;
return 1;
}
- node = radix_tree_indirect_to_ptr(node);
+ node = indirect_to_ptr(node);
max_index = radix_tree_maxindex(node->height);
@@ -979,7 +988,8 @@ radix_tree_gang_lookup_tag(struct radix_
slot = *(((void ***)results)[ret + i]);
if (!slot)
continue;
- results[ret + nr_found] = rcu_dereference_raw(slot);
+ results[ret + nr_found] =
+ indirect_to_ptr(rcu_dereference_raw(slot));
nr_found++;
}
ret += nr_found;
@@ -1029,7 +1039,7 @@ radix_tree_gang_lookup_tag_slot(struct r
results[0] = (void **)&root->rnode;
return 1;
}
- node = radix_tree_indirect_to_ptr(node);
+ node = indirect_to_ptr(node);
max_index = radix_tree_maxindex(node->height);
@@ -1065,7 +1075,7 @@ static inline void radix_tree_shrink(str
void *newptr;
BUG_ON(!radix_tree_is_indirect_ptr(to_free));
- to_free = radix_tree_indirect_to_ptr(to_free);
+ to_free = indirect_to_ptr(to_free);
/*
* The candidate node has more than one child, or its child
@@ -1078,16 +1088,39 @@ static inline void radix_tree_shrink(str
/*
* We don't need rcu_assign_pointer(), since we are simply
- * moving the node from one part of the tree to another. If
- * it was safe to dereference the old pointer to it
+ * moving the node from one part of the tree to another: if it
+ * was safe to dereference the old pointer to it
* (to_free->slots[0]), it will be safe to dereference the new
- * one (root->rnode).
+ * one (root->rnode) as far as dependent read barriers go.
*/
newptr = to_free->slots[0];
if (root->height > 1)
- newptr = radix_tree_ptr_to_indirect(newptr);
+ newptr = ptr_to_indirect(newptr);
root->rnode = newptr;
root->height--;
+
+ /*
+ * We have a dilemma here. The node's slot[0] must not be
+ * NULLed in case there are concurrent lookups expecting to
+ * find the item. However if this was a bottom-level node,
+ * then it may be subject to the slot pointer being visible
+ * to callers dereferencing it. If item corresponding to
+ * slot[0] is subsequently deleted, these callers would expect
+ * their slot to become empty sooner or later.
+ *
+ * For example, lockless pagecache will look up a slot, deref
+ * the page pointer, and if the page is 0 refcount it means it
+ * was concurrently deleted from pagecache so try the deref
+ * again. Fortunately there is already a requirement for logic
+ * to retry the entire slot lookup -- the indirect pointer
+ * problem (replacing direct root node with an indirect pointer
+ * also results in a stale slot). So tag the slot as indirect
+ * to force callers to retry.
+ */
+ if (root->height == 0)
+ *((unsigned long *)&to_free->slots[0]) |=
+ RADIX_TREE_INDIRECT_PTR;
+
radix_tree_node_free(to_free);
}
}
@@ -1124,7 +1157,7 @@ void *radix_tree_delete(struct radix_tre
root->rnode = NULL;
goto out;
}
- slot = radix_tree_indirect_to_ptr(slot);
+ slot = indirect_to_ptr(slot);
shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
pathp->node = NULL;
@@ -1166,8 +1199,7 @@ void *radix_tree_delete(struct radix_tre
radix_tree_node_free(to_free);
if (pathp->node->count) {
- if (pathp->node ==
- radix_tree_indirect_to_ptr(root->rnode))
+ if (pathp->node == indirect_to_ptr(root->rnode))
radix_tree_shrink(root);
goto out;
}
Index: linux/mm/filemap.c
===================================================================
--- linux.orig/mm/filemap.c
+++ linux/mm/filemap.c
@@ -631,7 +631,9 @@ repeat:
pagep = radix_tree_lookup_slot(&mapping->page_tree, offset);
if (pagep) {
page = radix_tree_deref_slot(pagep);
- if (unlikely(!page || page == RADIX_TREE_RETRY))
+ if (unlikely(!page))
+ goto out;
+ if (radix_tree_deref_retry(page))
goto repeat;
if (!page_cache_get_speculative(page))
@@ -647,6 +649,7 @@ repeat:
goto repeat;
}
}
+out:
rcu_read_unlock();
return page;
@@ -764,12 +767,11 @@ repeat:
page = radix_tree_deref_slot((void **)pages[i]);
if (unlikely(!page))
continue;
- /*
- * this can only trigger if nr_found == 1, making livelock
- * a non issue.
- */
- if (unlikely(page == RADIX_TREE_RETRY))
+ if (radix_tree_deref_retry(page)) {
+ if (ret)
+ start = pages[ret-1]->index;
goto restart;
+ }
if (!page_cache_get_speculative(page))
goto repeat;
@@ -817,11 +819,7 @@ repeat:
page = radix_tree_deref_slot((void **)pages[i]);
if (unlikely(!page))
continue;
- /*
- * this can only trigger if nr_found == 1, making livelock
- * a non issue.
- */
- if (unlikely(page == RADIX_TREE_RETRY))
+ if (radix_tree_deref_retry(page))
goto restart;
if (page->mapping == NULL || page->index != index)
@@ -874,11 +872,7 @@ repeat:
page = radix_tree_deref_slot((void **)pages[i]);
if (unlikely(!page))
continue;
- /*
- * this can only trigger if nr_found == 1, making livelock
- * a non issue.
- */
- if (unlikely(page == RADIX_TREE_RETRY))
+ if (radix_tree_deref_retry(page))
goto restart;
if (!page_cache_get_speculative(page))
next prev parent reply other threads:[~2010-12-13 0:07 UTC|newest]
Thread overview: 251+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-12 23:44 [PATCH] [0/223] 2.6.35.10 longterm review Andi Kleen
2010-12-12 23:44 ` [PATCH] [1/223] block: Ensure physical block size is unsigned int Andi Kleen
2010-12-12 23:44 ` [PATCH] [2/223] block: Fix race during disk initialization Andi Kleen
2010-12-12 23:44 ` [PATCH] [3/223] block: limit vec count in bio_kmalloc() and bio_alloc_map_data() Andi Kleen
2010-12-12 23:44 ` [PATCH] [4/223] block: take care not to overflow when calculating total iov length Andi Kleen
2010-12-12 23:44 ` [PATCH] [5/223] block: check for proper length of iov entries in blk_rq_map_user_iov() Andi Kleen
2010-12-12 23:45 ` [PATCH] [6/223] drm/radeon/kms: don't disable shared encoders on pre-DCE3 display blocks Andi Kleen
2010-12-12 23:45 ` [PATCH] [7/223] jme: Fix PHY power-off error Andi Kleen
2010-12-12 23:45 ` [PATCH] [8/223] irda: Fix parameter extraction stack overflow Andi Kleen
2010-12-12 23:45 ` [PATCH] [9/223] irda: Fix heap memory corruption in iriap.c Andi Kleen
2010-12-12 23:45 ` [PATCH] [10/223] cfg80211: fix BSS double-unlinking Andi Kleen
2010-12-12 23:45 ` [PATCH] [11/223] cfg80211: fix locking Andi Kleen
2010-12-12 23:45 ` [PATCH] [12/223] cfg80211: fix regression on processing country IEs Andi Kleen
2010-12-12 23:45 ` [PATCH] [13/223] mac80211: fix channel assumption for association done work Andi Kleen
2010-12-12 23:45 ` [PATCH] [14/223] mac80211: fix offchannel assumption upon association Andi Kleen
2010-12-12 23:45 ` [PATCH] [15/223] mac80211: Fix signal strength average initialization for CQM events Andi Kleen
2010-12-12 23:45 ` [PATCH] [16/223] mac80211: add helper for reseting the connection monitor Andi Kleen
2010-12-12 23:45 ` [PATCH] [17/223] mac80211: reset connection idle when going offchannel Andi Kleen
2010-12-12 23:45 ` [PATCH] [18/223] mac80211: make the beacon monitor available externally Andi Kleen
2010-12-12 23:45 ` [PATCH] [19/223] mac80211: send last 3/5 probe requests as unicast Andi Kleen
2010-12-12 23:45 ` [PATCH] [20/223] mac80211: disable beacon monitor while going offchannel Andi Kleen
2010-12-12 23:45 ` [PATCH] [21/223] mac80211: use correct station flags lock Andi Kleen
2010-12-12 23:45 ` [PATCH] [22/223] mac80211: clear txflags for ps-filtered frames Andi Kleen
2010-12-12 23:45 ` [PATCH] [23/223] mac80211: reset probe send counter upon connection timer reset Andi Kleen
2010-12-12 23:45 ` [PATCH] [24/223] mac80211: Fix ibss station got expired immediately Andi Kleen
2010-12-12 23:45 ` [PATCH] [25/223] mac80211: don't sanitize invalid rates Andi Kleen
2010-12-12 23:45 ` [PATCH] [26/223] mac80211: delete AddBA response timer Andi Kleen
2010-12-12 23:45 ` [PATCH] [27/223] isdn/gigaset: fix bas_gigaset AT read error handling Andi Kleen
2010-12-12 23:45 ` [PATCH] [28/223] isdn/gigaset: correct bas_gigaset rx buffer handling Andi Kleen
2010-12-12 23:45 ` [PATCH] [29/223] isdn/gigaset: bas_gigaset locking fix Andi Kleen
2010-12-12 23:45 ` [PATCH] [30/223] i2c-pca-platform: Change device name of request_irq Andi Kleen
2010-12-12 23:45 ` [PATCH] [31/223] viafb: fix i2c_transfer error handling Andi Kleen
2010-12-12 23:45 ` [PATCH] [32/223] drm/radeon/kms: register an i2c adapter name for the dp aux bus Andi Kleen
2010-12-12 23:45 ` [PATCH] [33/223] ALSA: hda - Fix wrong SPDIF NID assignment for CA0110 Andi Kleen
2010-12-12 23:45 ` [PATCH] [34/223] ALSA: hda - Add some workarounds for Creative IBG Andi Kleen
2010-12-12 23:45 ` [PATCH] [35/223] ALSA: OSS mixer emulation - fix locking Andi Kleen
2010-12-12 23:45 ` [PATCH] [37/223] powerpc: Fix call to subpage_protection() Andi Kleen
2010-12-12 23:45 ` [PATCH] [38/223] SUNRPC: After calling xprt_release(), we must restart from call_reserve Andi Kleen
2010-12-13 23:01 ` Trond Myklebust
2010-12-14 10:48 ` Andi Kleen
2010-12-12 23:45 ` [PATCH] [39/223] microblaze: Fix build with make 3.82 Andi Kleen
2010-12-12 23:45 ` [PATCH] [40/223] NFSv4: Don't call nfs4_reclaim_complete() on receiving NFS4ERR_STALE_CLIENTID Andi Kleen
2010-12-12 23:45 ` [PATCH] [41/223] NFSv4: Don't call nfs4_state_mark_reclaim_reboot() from error handlers Andi Kleen
2010-12-12 23:45 ` [PATCH] [42/223] NFSv4: Fix open recovery Andi Kleen
2010-12-12 23:45 ` [PATCH] [43/223] NFS: Don't SIGBUS if nfs_vm_page_mkwrite races with a cache invalidation Andi Kleen
2010-12-12 23:45 ` [PATCH] [44/223] drm/radeon/kms: MC vram map needs to be >= pci aperture size Andi Kleen
2010-12-12 23:45 ` [PATCH] [45/223] drm/radeon/kms: properly compute group_size on 6xx/7xx Andi Kleen
2010-12-12 23:45 ` [PATCH] [46/223] drm/radeon/kms: make sure blit addr masks are 64 bit Andi Kleen
2010-12-12 23:45 ` [PATCH] [47/223] drm/radeon/kms: fix handling of tex lookup disable in cs checker on r2xx Andi Kleen
2010-12-12 23:45 ` [PATCH] [48/223] drm/i915: Free hardware status page on unload when physically mapped Andi Kleen
2010-12-12 23:45 ` [PATCH] [49/223] drm/i915: diasable clock gating for the panel power sequencer Andi Kleen
2010-12-12 23:45 ` [PATCH] [50/223] drm/i915/overlay: Ensure that the reg_bo is in the GTT prior to writing Andi Kleen
2010-12-12 23:45 ` [PATCH] [51/223] pcnet_cs: add new_id Andi Kleen
2010-12-12 23:45 ` [PATCH] [52/223] SH: Add missing consts to sys_execve() declaration Andi Kleen
2010-12-12 23:45 ` [PATCH] [53/223] reiserfs: fix inode mutex - reiserfs lock misordering Andi Kleen
2010-12-12 23:45 ` [PATCH] [54/223] reiserfs: don't acquire lock recursively in reiserfs_acl_chmod Andi Kleen
2010-12-12 23:45 ` [PATCH] [55/223] staging: rt2870: Add new USB ID for Belkin F6D4050 v1 Andi Kleen
2010-12-12 23:45 ` [PATCH] [56/223] Staging: asus_oled: fix up some sysfs attribute permissions Andi Kleen
2010-12-12 23:45 ` [PATCH] [57/223] Staging: asus_oled: fix up my fixup for " Andi Kleen
2010-12-12 23:45 ` [PATCH] [58/223] ALSA: hda: Use hp-laptop quirk to enable headphones automute for Asus A52J Andi Kleen
2010-12-12 23:45 ` [PATCH] [59/223] Staging: line6: fix up some sysfs attribute permissions Andi Kleen
2010-12-12 23:45 ` [PATCH] [60/223] hpet: fix unwanted interrupt due to stale irq status bit Andi Kleen
2010-12-12 23:45 ` [PATCH] [61/223] hpet: unmap unused I/O space Andi Kleen
2010-12-12 23:46 ` [PATCH] [62/223] olpc_battery: Fix endian neutral breakage for s16 values Andi Kleen
2010-12-12 23:46 ` [PATCH] [63/223] percpu: fix list_head init bug in __percpu_counter_init() Andi Kleen
2010-12-12 23:46 ` [PATCH] [64/223] hostfs: fix UML crash: remove f_spare from hostfs Andi Kleen
2010-12-12 23:51 ` Richard Weinberger
2010-12-12 23:57 ` Andi Kleen
2010-12-12 23:46 ` [PATCH] [65/223] ipmi: proper spinlock initialization Andi Kleen
2010-12-12 23:46 ` [PATCH] [66/223] um: remove PAGE_SIZE alignment in linker script causing kernel segfault Andi Kleen
2010-12-12 23:46 ` [PATCH] [67/223] um: fix global timer issue when using CONFIG_NO_HZ Andi Kleen
2010-12-12 23:46 ` [PATCH] [68/223] numa: fix slab_node(MPOL_BIND) Andi Kleen
2010-12-12 23:46 ` [PATCH] [69/223] hwmon: (lm85) Fix ADT7468 frequency table Andi Kleen
2010-12-12 23:46 ` [PATCH] [70/223] oprofile: Fix the hang while taking the cpu offline Andi Kleen
2010-12-12 23:46 ` [PATCH] [71/223] mm: fix return value of scan_lru_pages in memory unplug Andi Kleen
2010-12-12 23:46 ` [PATCH] [72/223] mm, page-allocator: do not check the state of a non-existant buddy during free Andi Kleen
2010-12-12 23:46 ` [PATCH] [73/223] mm: fix is_mem_section_removable() page_order BUG_ON check Andi Kleen
2010-12-12 23:46 ` [PATCH] [74/223] agp/intel: Also add B43.1 to list of supported devices Andi Kleen
2010-12-12 23:46 ` [PATCH] [75/223] b43: Fix warning at drivers/mmc/core/core.c:237 in mmc_wait_for_cmd Andi Kleen
2010-12-12 23:46 ` [PATCH] [76/223] wireless: b43: fix error path in SDIO Andi Kleen
2010-12-12 23:46 ` [PATCH] [77/223] ssb: b43-pci-bridge: Add new vendor for BCM4318 Andi Kleen
2010-12-12 23:46 ` [PATCH] [78/223] drivers/misc/ad525x_dpot.c: fix typo in spi write16 and write24 transfer counts Andi Kleen
2010-12-12 23:46 ` [PATCH] [79/223] sgi-xpc: XPC fails to discover partitions with all nasids above 128 Andi Kleen
2010-12-12 23:46 ` [PATCH] [80/223] xen: ensure that all event channels start off bound to VCPU 0 Andi Kleen
2010-12-12 23:46 ` [PATCH] [81/223] xen: don't bother to stop other cpus on shutdown/reboot Andi Kleen
2010-12-12 23:46 ` [PATCH] [82/223] ipc: initialize structure memory to zero for compat functions Andi Kleen
2010-12-12 23:46 ` [PATCH] [83/223] ipc: shm: fix information leak to userland Andi Kleen
2010-12-12 23:46 ` [PATCH] [84/223] net: NETIF_F_HW_CSUM does not imply FCoE CRC offload Andi Kleen
2010-12-12 23:46 ` [PATCH] [85/223] drivers/char/vt_ioctl.c: fix VT_OPENQRY error value Andi Kleen
2010-12-12 23:46 ` [PATCH] [86/223] viafb: use proper register for colour when doing fill ops Andi Kleen
2010-12-12 23:46 ` [PATCH] [87/223] sata_via: apply magic FIFO fix to vt6420 too Andi Kleen
2010-12-12 23:46 ` [PATCH] [88/223] eCryptfs: Clear LOOKUP_OPEN flag when creating lower file Andi Kleen
2010-12-12 23:46 ` [PATCH] [89/223] ecryptfs: call vfs_setxattr() in ecryptfs_setxattr() Andi Kleen
2010-12-12 23:46 ` [PATCH] [90/223] md/raid1: really fix recovery looping when single good device fails Andi Kleen
2010-12-12 23:46 ` [PATCH] [91/223] md: fix return value of rdev_size_change() Andi Kleen
2010-12-12 23:46 ` [PATCH] [92/223] ALSA: hda: Use BIOS auto-parsing instead of existing model quirk for MEDION MD2 Andi Kleen
2010-12-12 23:46 ` [PATCH] [93/223] tty: prevent DOS in the flush_to_ldisc Andi Kleen
2010-12-12 23:46 ` [PATCH] [94/223] TTY: restore tty_ldisc_wait_idle Andi Kleen
2010-12-12 23:46 ` [PATCH] [95/223] tty_ldisc: Fix BUG() on hangup Andi Kleen
2010-12-12 23:46 ` [PATCH] [96/223] TTY: ldisc, fix open flag handling Andi Kleen
2010-12-12 23:46 ` [PATCH] [97/223] TTY: don't allow reopen when ldisc is changing Andi Kleen
2010-12-12 23:46 ` [PATCH] [98/223] TTY: open/hangup race fixup Andi Kleen
2010-12-13 9:26 ` Jiri Slaby
2010-12-13 9:48 ` Andi Kleen
2010-12-12 23:46 ` [PATCH] [99/223] usbnet: fix usb_autopm_get_interface failure(v1) Andi Kleen
2010-12-12 23:46 ` [PATCH] [100/223] HID: Fix for problems with eGalax/DWAV multi-touch-screen Andi Kleen
2010-12-12 23:46 ` [PATCH] [101/223] gspca - sonixj: Fix a regression of sensors hv7131r and mi0360 Andi Kleen
2010-12-12 23:46 ` [PATCH] [102/223] hdpvr: Add missing URB_NO_TRANSFER_DMA_MAP flag Andi Kleen
2010-12-12 23:46 ` [PATCH] [103/223] drivers/media/video/cx23885/cx23885-core.c: fix cx23885_dev_checkrevision() Andi Kleen
2010-12-12 23:46 ` [PATCH] [104/223] KVM: Write protect memory after slot swap Andi Kleen
2010-12-13 8:43 ` Avi Kivity
2010-12-13 8:58 ` Andi Kleen
2010-12-13 9:00 ` Avi Kivity
2010-12-13 9:03 ` Andi Kleen
2010-12-13 9:08 ` Avi Kivity
2010-12-13 9:12 ` Andi Kleen
2010-12-13 9:16 ` Avi Kivity
2010-12-13 9:45 ` Andi Kleen
2010-12-13 16:56 ` Paul Gortmaker
2010-12-13 17:08 ` Avi Kivity
2010-12-13 17:29 ` [stable] " Greg KH
2010-12-13 17:36 ` Paul Gortmaker
2010-12-14 10:57 ` Avi Kivity
2010-12-13 9:13 ` Paolo Ciarrocchi
2010-12-13 9:19 ` Avi Kivity
2010-12-13 9:20 ` Paolo Ciarrocchi
2010-12-12 23:46 ` [PATCH] [105/223] KVM: x86: fix information leak to userland Andi Kleen
2010-12-12 23:46 ` [PATCH] [106/223] KVM: Correct ordering of ldt reload wrt fs/gs reload Andi Kleen
2010-12-12 23:46 ` [PATCH] [107/223] ASoC: Remove volatility from WM8900 POWER1 register Andi Kleen
2010-12-12 23:46 ` [PATCH] [108/223] ASoC: wm8961 - clear WM8961_DACSLOPE bit for normal mode Andi Kleen
2010-12-12 23:46 ` [PATCH] [109/223] ASoC: wm8961 - clear WM8961_MCLKDIV bit for freq <= 16500000 Andi Kleen
2010-12-12 23:46 ` [PATCH] [110/223] firewire: ohci: fix buffer overflow in AR split packet handling Andi Kleen
2010-12-12 23:46 ` [PATCH] [111/223] firewire: ohci: fix race " Andi Kleen
2010-12-12 23:46 ` [PATCH] [112/223] ALSA: hda - Fixed ALC887-VD initial error Andi Kleen
2010-12-12 23:46 ` [PATCH] [113/223] ALSA: ac97: Apply quirk for Dell Latitude D610 binding Master and Headphone controls Andi Kleen
2010-12-12 23:46 ` [PATCH] [114/223] ALSA: HDA: Add fixup pins for Ideapad Y550 Andi Kleen
2010-12-12 23:46 ` [PATCH] [115/223] ALSA: hda - Added fixup for Lenovo Y550P Andi Kleen
2010-12-12 23:46 ` [PATCH] [116/223] ALSA: hda: Add speaker pin to automute Acer Aspire 8943G Andi Kleen
2010-12-12 23:46 ` [PATCH] [117/223] ALSA: hda: Add Samsung R720 SSID for subwoofer pin fixup Andi Kleen
2010-12-12 23:46 ` [PATCH] [118/223] ALSA: hda - Use ALC_INIT_DEFAULT for really default initialization Andi Kleen
2010-12-12 23:47 ` [PATCH] [119/223] ALSA: hda - Fix ALC660-VD/ALC861-VD capture/playback mixers Andi Kleen
2010-12-12 23:47 ` [PATCH] [120/223] ALSA: HDA: Add an extra DAC for Realtek ALC887-VD Andi Kleen
2010-12-12 23:47 ` [PATCH] [121/223] ALSA: Fix SNDCTL_DSP_RESET ioctl for OSS emulation Andi Kleen
2010-12-12 23:47 ` [PATCH] [122/223] ALSA: hda: Use "alienware" model quirk for another SSID Andi Kleen
2010-12-12 23:47 ` [PATCH] [123/223] netfilter: nf_conntrack: allow nf_ct_alloc_hashtable() to get highmem pages Andi Kleen
2010-12-12 23:47 ` [PATCH] [124/223] netfilter: NF_HOOK_COND has wrong conditional Andi Kleen
2010-12-12 23:47 ` Andi Kleen [this message]
2010-12-12 23:47 ` [PATCH] [126/223] latencytop: fix per task accumulator Andi Kleen
2010-12-12 23:47 ` [PATCH] [127/223] mm/vfs: revalidate page->mapping in do_generic_file_read() Andi Kleen
2010-12-12 23:47 ` [PATCH] [128/223] bio: take care not overflow page count when mapping/copying user data Andi Kleen
2010-12-12 23:47 ` [PATCH] [129/223] drm/radeon/kms/atom: set sane defaults in atombios_get_encoder_mode() Andi Kleen
2010-12-12 23:47 ` [PATCH] [130/223] drm/radeon/kms: fix typos in disabled vbios code Andi Kleen
2010-12-12 23:47 ` [PATCH] [131/223] drm/radeon/kms: add workaround for dce3 ddc line vbios bug Andi Kleen
2010-12-12 23:47 ` [PATCH] [132/223] drm/radeon/kms: Fix retrying ttm_bo_init() after it failed once Andi Kleen
2010-12-12 23:47 ` [PATCH] [133/223] drm/radeon/kms: fix interlaced and doublescan handling Andi Kleen
2010-12-12 23:47 ` [PATCH] [134/223] exec: make argv/envp memory visible to oom-killer Andi Kleen
2010-12-13 11:18 ` Oleg Nesterov
2010-12-13 15:10 ` Andi Kleen
2010-12-12 23:47 ` [PATCH] [135/223] exec: copy-and-paste the fixes into compat_do_execve() paths Andi Kleen
2010-12-12 23:47 ` [PATCH] [136/223] drm/i915/sdvo: Always add a 30ms delay to make SDVO TV detection reliable Andi Kleen
2010-12-12 23:47 ` [PATCH] [137/223] intel-gtt: fix gtt_total_entries detection Andi Kleen
2010-12-12 23:47 ` [PATCH] [138/223] sched: fix RCU lockdep splat from task_group() Andi Kleen
2010-12-12 23:47 ` [PATCH] [139/223] libata: fix NULL sdev dereference race in atapi_qc_complete() Andi Kleen
2010-12-12 23:47 ` [PATCH] [140/223] PCI: fix size checks for mmap() on /proc/bus/pci files Andi Kleen
2010-12-12 23:47 ` [PATCH] [141/223] PCI: fix offset check for sysfs mmapped files Andi Kleen
2010-12-12 23:47 ` [PATCH] [142/223] xHCI: fix wMaxPacketSize mask Andi Kleen
2010-12-12 23:47 ` [PATCH] [143/223] xhci: Fix reset-device and configure-endpoint commands Andi Kleen
2010-12-12 23:47 ` [PATCH] [144/223] xhci: Setup array of USB 2.0 and USB 3.0 ports Andi Kleen
2010-12-12 23:47 ` [PATCH] [145/223] xhci: Don't let the USB core disable SuperSpeed ports Andi Kleen
2010-12-12 23:47 ` [PATCH] [146/223] USB: gadget: AT91: fix typo in atmel_usba_udc driver Andi Kleen
2010-12-12 23:47 ` [PATCH] [147/223] usb: musb: fix kernel oops when loading musb_hdrc module for the 2nd time Andi Kleen
2010-12-12 23:47 ` [PATCH] [148/223] USB: ftdi_sio: add device IDs for Milkymist One JTAG/serial Andi Kleen
2010-12-12 23:47 ` [PATCH] [149/223] USB: option: fix when the driver is loaded incorrectly for some Huawei devices Andi Kleen
2010-12-12 23:47 ` [PATCH] [150/223] usb: misc: sisusbvga: fix information leak to userland Andi Kleen
2010-12-12 23:47 ` [PATCH] [151/223] usb: misc: iowarrior: " Andi Kleen
2010-12-12 23:47 ` [PATCH] [152/223] usb: core: " Andi Kleen
2010-12-12 23:47 ` [PATCH] [153/223] Staging: rt2870: Add USB ID for Buffalo Airstation WLI-UC-GN Andi Kleen
2010-12-12 23:47 ` [PATCH] [154/223] USB: EHCI: fix obscure race in ehci_endpoint_disable Andi Kleen
2010-12-12 23:47 ` [PATCH] [155/223] USB: storage: sierra_ms: fix sysfs file attribute Andi Kleen
2010-12-12 23:47 ` [PATCH] [156/223] USB: atm: ueagle-atm: fix up some permissions on the sysfs files Andi Kleen
2010-12-12 23:47 ` [PATCH] [157/223] USB: misc: cypress_cy7c63: fix up some sysfs attribute permissions Andi Kleen
2010-12-12 23:47 ` [PATCH] [158/223] USB: misc: usbled: " Andi Kleen
2010-12-12 23:47 ` [PATCH] [159/223] USB: misc: trancevibrator: fix up a sysfs attribute permission Andi Kleen
2010-12-12 23:47 ` [PATCH] [160/223] USB: misc: usbsevseg: fix up some sysfs attribute permissions Andi Kleen
2010-12-12 23:47 ` [PATCH] [161/223] USB: ftdi_sio: Add ID for RT Systems USB-29B radio cable Andi Kleen
2010-12-12 23:47 ` [PATCH] [162/223] USB: serial: ftdi_sio: Vardaan USB RS422/485 converter PID added Andi Kleen
2010-12-12 23:47 ` [PATCH] [163/223] USB: fix autosuspend bug in usb-serial Andi Kleen
2010-12-12 23:47 ` [PATCH] [164/223] e1000: fix screaming IRQ Andi Kleen
2010-12-12 23:47 ` [PATCH] [165/223] ACPI battery: support percentage battery remaining capacity Andi Kleen
2010-12-12 23:47 ` [PATCH] [166/223] acpi-cpufreq: fix a memleak when unloading driver Andi Kleen
2010-12-12 23:47 ` [PATCH] [167/223] ACPI: debugfs custom_method open to non-root Andi Kleen
2010-12-13 6:33 ` Brown, Len
2010-12-13 8:57 ` Andi Kleen
2010-12-13 17:01 ` Paul Gortmaker
2010-12-12 23:47 ` [PATCH] [168/223] PNPACPI: cope with invalid device IDs Andi Kleen
2010-12-12 23:47 ` [PATCH] [169/223] saa7134: Fix autodetect for Behold A7 and H7 TV cards Andi Kleen
2010-12-12 23:47 ` [PATCH] [170/223] fuse: fix attributes after open(O_TRUNC) Andi Kleen
2010-12-12 23:47 ` [PATCH] [171/223] cs5535-gpio: apply CS5536 errata workaround for GPIOs Andi Kleen
2010-12-12 23:47 ` [PATCH] [172/223] do_exit(): make sure that we run with get_fs() == USER_DS Andi Kleen
2010-12-12 23:47 ` [PATCH] [173/223] cifs: fix another memleak, in cifs_root_iget Andi Kleen
2010-12-12 23:47 ` [PATCH] [174/223] uml: disable winch irq before freeing handler data Andi Kleen
2010-12-12 23:48 ` [PATCH] [175/223] backlight: grab ops_lock before testing bd->ops Andi Kleen
2010-12-12 23:48 ` [PATCH] [176/223] nommu: yield CPU while disposing VM Andi Kleen
2010-12-12 23:48 ` [PATCH] [177/223] x86: Ignore trap bits on single step exceptions Andi Kleen
2010-12-12 23:48 ` [PATCH] [178/223] mmc: fix rmmod race for hosts using card-detection polling Andi Kleen
2010-12-12 23:48 ` [PATCH] [179/223] DECnet: don't leak uninitialized stack byte Andi Kleen
2010-12-12 23:48 ` [PATCH] [180/223] perf_events: Fix perf_counter_mmap() hook in mprotect() Andi Kleen
2010-12-12 23:48 ` [PATCH] [181/223] ARM: 6464/2: fix spinlock recursion in adjust_pte() Andi Kleen
2010-12-12 23:48 ` [PATCH] [182/223] ARM: 6489/1: thumb2: fix incorrect optimisation in usracc Andi Kleen
2010-12-12 23:48 ` [PATCH] [183/223] ARM: 6482/2: Fix find_next_zero_bit and related assembly Andi Kleen
2010-12-12 23:48 ` [PATCH] [184/223] leds: fix bug with reading NAS SS4200 dmi code Andi Kleen
2010-12-12 23:48 ` [PATCH] [185/223] Staging: udlfb: fix up some sysfs attribute permissions Andi Kleen
2010-12-12 23:48 ` [PATCH] [186/223] Staging: iio: adis16220: " Andi Kleen
2010-12-12 23:48 ` [PATCH] [187/223] Staging: iio: adis16220: fix up my fixup for " Andi Kleen
2010-12-12 23:48 ` [PATCH] [188/223] Staging: samsung-laptop: fix up " Andi Kleen
2010-12-12 23:48 ` [PATCH] [189/223] Staging: samsung-laptop: fix up my fixup for " Andi Kleen
2010-12-12 23:48 ` [PATCH] [190/223] Staging: frontier: fix up " Andi Kleen
2010-12-12 23:48 ` [PATCH] [191/223] staging: rtl8187se: Change panic to warn when RF switch turned off Andi Kleen
2010-12-12 23:48 ` [PATCH] [192/223] Staging: batman-adv: ensure that eth_type_trans gets linear memory Andi Kleen
2010-12-12 23:48 ` [PATCH] [193/223] perf: Fix inherit vs. context rotation bug Andi Kleen
2010-12-12 23:48 ` [PATCH] [194/223] ARM: 6456/1: Fix for building DEBUG with sa11xx_base.c as a module Andi Kleen
2010-12-12 23:48 ` [PATCH] [195/223] PM / Hibernate: Fix memory corruption related to swap Andi Kleen
2010-12-12 23:48 ` [PATCH] [196/223] wmi: use memcmp instead of strncmp to compare GUIDs Andi Kleen
2010-12-12 23:48 ` [PATCH] [197/223] nohz/s390: fix arch_needs_cpu() return value on offline cpus Andi Kleen
2010-12-12 23:48 ` [PATCH] [198/223] genirq: Fix incorrect proc spurious output Andi Kleen
2010-12-12 23:48 ` [PATCH] [199/223] net: Truncate recvfrom and sendto length to INT_MAX Andi Kleen
2010-12-12 23:48 ` [PATCH] [200/223] net: Limit socket I/O iovec total " Andi Kleen
2010-12-12 23:48 ` [PATCH] [201/223] Input: i8042 - add Sony VAIO VPCZ122GX to nomux list Andi Kleen
2010-12-12 23:48 ` [PATCH] [202/223] omap: dma: Fix buffering disable bit setting for omap24xx Andi Kleen
2010-12-12 23:48 ` [PATCH] [203/223] OMAP3: DMA: Errata i541: sDMA FIFO draining does not finish Andi Kleen
2010-12-12 23:48 ` [PATCH] [204/223] memory corruption in X.25 facilities parsing Andi Kleen
2010-12-12 23:48 ` [PATCH] [205/223] net: optimize Berkeley Packet Filter (BPF) processing Andi Kleen
2010-12-12 23:48 ` [PATCH] [206/223] filter: make sure filters dont read uninitialized memory Andi Kleen
2010-12-12 23:48 ` [PATCH] [207/223] can-bcm: fix minor heap overflow Andi Kleen
2010-12-12 23:48 ` [PATCH] [208/223] x25: Prevent crashing when parsing bad X.25 facilities Andi Kleen
2010-12-12 23:48 ` [PATCH] [209/223] crypto: padlock - Fix AES-CBC handling on odd-block-sized input Andi Kleen
2010-12-12 23:48 ` [PATCH] [210/223] econet: disallow NULL remote addr for sendmsg(), fixes CVE-2010-3849 Andi Kleen
2010-12-12 23:48 ` [PATCH] [211/223] econet: fix CVE-2010-3850 Andi Kleen
2010-12-12 23:48 ` [PATCH] [212/223] econet: fix CVE-2010-3848 Andi Kleen
2010-12-12 23:48 ` [PATCH] [213/223] rds: Integer overflow in RDS cmsg handling Andi Kleen
2010-12-12 23:48 ` [PATCH] [214/223] cfg80211: fix extension channel checks to initiate communication Andi Kleen
2010-12-12 23:48 ` [PATCH] [215/223] r8169: fix rx checksum offload Andi Kleen
2010-12-12 23:48 ` [PATCH] [216/223] r8169: (re)init phy on resume Andi Kleen
2010-12-12 23:48 ` [PATCH] [217/223] r8169: fix checksum broken Andi Kleen
2010-12-12 23:48 ` [PATCH] [218/223] nmi: fix clock comparator revalidation Andi Kleen
2010-12-12 23:48 ` [PATCH] [219/223] Rename 'pipe_info()' to 'get_pipe_info()' Andi Kleen
2010-12-12 23:48 ` [PATCH] [220/223] Export 'get_pipe_info()' to other users Andi Kleen
2010-12-12 23:48 ` [PATCH] [221/223] Un-inline get_pipe_info() helper function Andi Kleen
2010-12-12 23:48 ` [PATCH] [222/223] Fix pktcdvd ioctl dev_minor range check Andi Kleen
2010-12-12 23:48 ` [PATCH] [223/223] Bump release to 2.6.35.10 Andi Kleen
2010-12-16 17:42 ` [PATCH] [0/223] 2.6.35.10 longterm review Randy Dunlap
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101212234706.E5860B27BF@basil.firstfloor.org \
--to=andi@firstfloor.org \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=npiggin@kernel.dk \
--cc=stable@kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome