Only in src/sys/amd64/amd64: db_trace.c.orig Only in src/sys/amd64/amd64: exception.S.orig Only in src/sys/amd64/amd64: machdep.c.orig Only in src/sys/amd64/amd64: support.S.orig Only in src/sys/amd64/amd64: trap.c.orig Only in src/sys/amd64/include: atomic.h.orig diff -ur src.old/sys/amd64/include/cpufunc.h src/sys/amd64/include/cpufunc.h --- src.old/sys/amd64/include/cpufunc.h Sat Apr 29 18:55:51 2006 +++ src/sys/amd64/include/cpufunc.h Sun Apr 30 21:44:09 2006 @@ -127,6 +127,13 @@ __asm __volatile("sti"); } +static __inline int +prefetch(void *p) +{ + __asm __volatile("prefetch (%0)" : : "r"(p)); + return (1); +} + #ifdef _KERNEL #define HAVE_INLINE_FFS Only in src/sys/ddb: ddb.h.orig Only in src/sys/kern: subr_pcpu.c.orig Only in src/sys/sys: pcpu.h.orig diff -ur src.old/sys/sys/queue.h src/sys/sys/queue.h --- src.old/sys/sys/queue.h Sat Apr 29 18:56:59 2006 +++ src/sys/sys/queue.h Sun Apr 30 21:43:13 2006 @@ -34,6 +34,7 @@ #define _SYS_QUEUE_H_ #include +#include /* * This file defines four types of data structures: singly-linked lists, @@ -159,7 +160,7 @@ #define SLIST_FOREACH(var, head, field) \ for ((var) = SLIST_FIRST((head)); \ (var); \ - (var) = SLIST_NEXT((var), field)) + (var) = SLIST_NEXT((var), field), (var) && prefetch(SLIST_NEXT((var), field))) #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = SLIST_FIRST((head)); \ @@ -240,7 +241,7 @@ #define STAILQ_FOREACH(var, head, field) \ for((var) = STAILQ_FIRST((head)); \ (var); \ - (var) = STAILQ_NEXT((var), field)) + (var) = STAILQ_NEXT((var), field), (var) && prefetch(STAILQ_NEXT((var), field))) #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ @@ -358,7 +359,7 @@ #define LIST_FOREACH(var, head, field) \ for ((var) = LIST_FIRST((head)); \ (var); \ - (var) = LIST_NEXT((var), field)) + (var) = LIST_NEXT((var), field), (var) && prefetch(LIST_NEXT((var), field))) #define LIST_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = LIST_FIRST((head)); \ @@ -448,7 +449,7 @@ #define TAILQ_FOREACH(var, head, field) \ for ((var) = TAILQ_FIRST((head)); \ (var); \ - (var) = TAILQ_NEXT((var), field)) + (var) = TAILQ_NEXT((var), field), (var) && prefetch(TAILQ_NEXT((var), field))) #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = TAILQ_FIRST((head)); \ Only in src/sys/vm: vm_page.c.orig Only in src/sys/vm: vm_page.h.orig Only in src/sys/vm: vm_pageq.c.orig