diff -r 63c5e25ba2a6 sys/sys/pcpu.h --- a/sys/sys/pcpu.h Tue Jul 06 19:43:40 2010 +0000 +++ b/sys/sys/pcpu.h Fri Jul 09 13:06:47 2010 +1000 @@ -109,7 +109,19 @@ /* * Utility macros. */ -#define DPCPU_SUM(n, var) __extension__ \ +#define DPCPU_SUM(n) __extension__ \ +({ \ + u_int _i; \ + __typeof(DPCPU_PTR(n)) sum; \ + \ + sum = 0; \ + CPU_FOREACH(_i) { \ + sum += DPCPU_ID_PTR(_i, n); \ + } \ + sum; \ +}) + +#define DPCPU_MEMBERSUM(n, var) __extension__ \ ({ \ u_int _i; \ __typeof((DPCPU_PTR(n))->var) sum; \ @@ -121,6 +133,24 @@ sum; \ }) +#define DPCPU_ZERO(n, size) \ +{ \ + u_int _i; \ + \ + CPU_FOREACH(_i) { \ + bzero(DPCPU_ID_PTR(_i, n), size); \ + } \ +} + +#define DPCPU_MEMBERZERO(n, var, size) \ +{ \ + u_int _i; \ + \ + CPU_FOREACH(_i) { \ + bzero(DPCPU_ID_PTR(_i, n)->var, size); \ + } \ +} + /* * XXXUPS remove as soon as we have per cpu variable * linker sets and can define rm_queue in _rm_lock.h