X-Git-Url: http://git.onelab.eu/?p=ipfw.git;a=blobdiff_plain;f=dummynet2%2Finclude%2Fsys%2Fsystm.h;fp=dummynet2%2Finclude%2Fsys%2Fsystm.h;h=e98335e7908a4b5ebab3d5e982481f86502826c7;hp=db8ef7a429263588b2d1dd5e437b8422bef1837d;hb=28a7fe9d930667786b902af6697c01eb87694173;hpb=2a8b6c544cf5ea3c84f763144c7ecfa79daea969 diff --git a/dummynet2/include/sys/systm.h b/dummynet2/include/sys/systm.h index db8ef7a..e98335e 100644 --- a/dummynet2/include/sys/systm.h +++ b/dummynet2/include/sys/systm.h @@ -15,11 +15,16 @@ #endif #define callout timer_list static __inline int -callout_reset(struct callout *co, int ticks, void (*fn)(void *), void *arg) +callout_reset_on(struct callout *co, int ticks, void (*fn)(void *), void *arg, int cpu) { co->expires = jiffies + ticks; co->function = (void (*)(unsigned long))fn; co->data = (unsigned long)arg; + /* + * Linux 2.6.31 and above has add_timer_on(co, cpu), + * otherwise add_timer() always schedules a callout on the same + * CPU used the first time, so we don't need more. + */ add_timer(co); return 0; } @@ -71,14 +76,14 @@ VOID ipfw_dpc( * timer is called only once a sec, this won't hurt that much. */ static __inline int -callout_reset(struct callout *co, int ticks, void (*fn)(void *), void *arg) +callout_reset_on(struct callout *co, int ticks, void (*fn)(void *), void *arg, int cpu) { if(fn == &dummynet) { if(co->dpcinitialized == 0) { KeInitializeDpc(&co->timerdpc, dummynet_dpc, NULL); - KeSetTargetProcessorDpc(&co->timerdpc, 0); + KeSetTargetProcessorDpc(&co->timerdpc, cpu); co->dpcinitialized = 1; } }