Re: 2.6.9-rc3-mm2

Rusty Russell
2004-10-15T01:37:56Z

On Wed, 2004-10-06 at 00:07, Dominik Karall wrote:
> On Monday 04 October 2004 11:02, Andrew Morton wrote:
> > ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc3/2.6
> >.9-rc3-mm2/
>
> some more scheduling/preempt problems. following patches were applied:
> ---
> 25/include/linux/netfilter_ipv4/ip_conntrack.h~conntrack-preempt-safety-fix
> Mon Oct 4 14:36:19 2004
> +++ 25-akpm/include/linux/netfilter_ipv4/ip_conntrack.h Mon Oct 4 14:37:02
> 2004
> @@ -311,10 +311,11 @@ struct ip_conntrack_stat
> unsigned int expect_delete;
> };
>
> -#define CONNTRACK_STAT_INC(count) \
> - do { \
> - per_cpu(ip_conntrack_stat, get_cpu()).count++; \
> - put_cpu(); \
> +#define CONNTRACK_STAT_INC(count) \
> + do { \
> + preempt_disable(); \
> + per_cpu(ip_conntrack_stat, smp_processor_id()).count++; \
> + preempt_disable(); \
> } while (0)

Please, please please! Never use per_cpu(XXX, smp_processor_id())! In
this case, it's "get_cpu_var(ip_conntrack_stat).count++; put_cpu(),
although I think this code should only be called in a softirq, so a
simple "__get_cpu_var(ip_conntrack_stat).count++;" is sufficient.

Rusty.
--
Anyone who quotes me in their signature is an idiot -- Rusty Russell