Messages in this thread | | | Date | Sat, 15 Dec 2007 18:03:19 +0100 | From | Eric Dumazet <> | Subject | Re: [PATCH 3/3] [UDP6]: Counter increment on BH mode |
| |
Herbert Xu a écrit : > Ob Tue, Dec 04, 2007 at 12:17:23AM +1100, Herbert Xu wrote: >> Never mind, we already have that in local_t and as Alexey correctly >> points out, USER is still going to be the expensive variant with the >> preempt_disable (well until BH gets threaded). So how about this patch? > > I didn't hear any objections so here is the patch again. > > [SNMP]: Fix SNMP counters with PREEMPT > > The SNMP macros use raw_smp_processor_id() in process context > which is illegal because the process may be preempted and then > migrated to another CPU. > > This patch makes it use get_cpu/put_cpu to disable preemption. > > Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> > > Cheers, #define SNMP_INC_STATS_USER(mib, field) \ - (per_cpu_ptr(mib[1], raw_smp_processor_id())->mibs[field]++) + do { \ + per_cpu_ptr(mib[1], get_cpu())->mibs[field]++; \ + put_cpu(); \ + } while (0) #define SNMP_INC_STATS(mib, field) \ (per_cpu_ptr(mib[!in_softirq()], raw_smp_processor_id())->mibs[field]++)
How come you change SNMP_INC_STATS_USER() but not SNMP_INC_STATS() ?
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |