The patch titled Subject: llist: move cpu_relax after cmpxchg has been removed from the -mm tree. Its filename was llist-move-cpu_relax-after-cmpxchg.patch This patch was dropped because it was merged into mainline or a subsystem tree The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ From: Huang Ying <ying.huang@xxxxxxxxx> Subject: llist: move cpu_relax after cmpxchg If the first cmpxchg call succeeds, it is not necessary to use cpu_relax before cmpxchg. So cpu_relax in a busy loop involving cmpxchg should go after cmpxchg instead of before that. This patch fixes this in llist. Signed-off-by: Huang Ying <ying.huang@xxxxxxxxx> Acked-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Andi Kleen <andi@xxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/llist.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff -puN include/linux/llist.h~llist-move-cpu_relax-after-cmpxchg include/linux/llist.h --- a/include/linux/llist.h~llist-move-cpu_relax-after-cmpxchg +++ a/include/linux/llist.h @@ -158,11 +158,14 @@ static inline void llist_add(struct llis CHECK_NMI_SAFE_CMPXCHG(); entry = head->first; - do { + for (;;) { old_entry = entry; new->next = entry; + entry = cmpxchg(&head->first, old_entry, new); + if (entry == old_entry) + break; cpu_relax(); - } while ((entry = cmpxchg(&head->first, old_entry, new)) != old_entry); + } } /** @@ -180,11 +183,14 @@ static inline void llist_add_batch(struc CHECK_NMI_SAFE_CMPXCHG(); entry = head->first; - do { + for (;;) { old_entry = entry; new_last->next = entry; + entry = cmpxchg(&head->first, old_entry, new_first); + if (entry == old_entry) + break; cpu_relax(); - } while ((entry = cmpxchg(&head->first, old_entry, new_first)) != old_entry); + } } /** @@ -208,13 +214,16 @@ static inline struct llist_node *llist_d CHECK_NMI_SAFE_CMPXCHG(); entry = head->first; - do { + for (;;) { if (entry == NULL) return NULL; old_entry = entry; next = entry->next; + entry = cmpxchg(&head->first, old_entry, next); + if (entry == old_entry) + break; cpu_relax(); - } while ((entry = cmpxchg(&head->first, old_entry, next)) != old_entry); + } return entry; } _ Patches currently in -mm which might be from ying.huang@xxxxxxxxx are linux-next.patch lib-bitmapc-quiet-sparse-noise-about-address-space.patch lib-bitmapc-quiet-sparse-noise-about-address-space-fix.patch llist-return-whether-list-is-empty-before-adding-in-llist_add-fix.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html