Re: [PATCH]atomic_inc_return() for i386/x86_64 (Re: RCU issue with SELinux)

From: Kaigai Kohei
Date: Wed Sep 01 2004 - 01:25:30 EST


Hi Andi, thanks for your comment.

> > We can avoid the problem by the simple solution, since SMP
> > on 386 boxes isn't supported. It is to disable interrupt
> > while updating atomic_t variable.
>
> The patch is wrong. A CONFIG_M386 kernel can run on non
> 386 SMP boxes. Your patch would be racy then. The only thing
> that's not supported is a real 386 with multiple CPUs.
>
> You either have to check boot_cpu_data.x86 == 3 at runtime or
> use alternative() like I earlier suggested.

Indeed, the attached patch is implemented according to the suggestion.
The code for legacy-386 is used only when boot_cpu_data.x86 == 3.
This run-time check is done only when CONFIG_M386 is set.
Otherwise, we use 'XADD' operation for atomic_add_return()
as the previous patch.

I don't adopt the alternative(), because the macro doesn't fit for the situation
when arguments for __asm__ are necessary.

Thanks.
--------
Kai Gai <kaigai@xxxxxxxxxxxxx>

Attachment: atomic_inc_return-2.6.8.1.M386.patch
Description: Binary data