lkml.org 
[lkml]   [2006]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: broken local_t on i386
Date
On Monday 12 June 2006 18:54, Christoph Lameter wrote:
> On Mon, 12 Jun 2006, Andi Kleen wrote:
>
> > > #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()))
> >
> > It is also affected by your race. The inc would only be atomic if the counter
> > was in the PDA, but standard per cpu data isn't. So it has to follow
> > a pointer and then it could already have switched.
>
> I thought the above would refer to a PDA memory area that is specially
> mapped by each processor? That is the only thing that would get this
> working right because we would map to a different PDA if the process
> would be mapped to a different processor.

It does, but the per cpu data that everybody uses doesn't reside in the PDA
because it wasn't possible to make this work with binutils

It would require a relocation relative to another symbol which isn't
really supported.

At some point I considered using runtime patching to work around
this limitation, but it would be some work and relatively complex.

So the PDA just contains a pointer to the real per CPU area and it's
added. Unfortunately it's three instructions or so and not atomic
(mov, add, reference)

>
> > Fix would be to disable preemption. I don't think it needs cli/sti
> > on non preemptible kernels.
>
> Yuck. The advantage of local.t was that it does not need any of these
> tricks. What is the point of local.t if one needs to disable preemption?

No atomic operations. Preemption just requires to increase a counter
in thread info.

Also on non preemptive kernels - which are the majority - it's a single
instruction on x86. I guess preempt users can live with a bit more
overhead ...

-Andi

-
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/

\
 
 \ /
  Last update: 2006-06-12 19:09    [W:1.706 / U:0.064 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site