Rusty Russell wrote: > The first patch simply changes the GDTs to be a straight per-cpu > variable. I notice that you did a similar thing with your patches, but > this is simpler and avoids wasting space in the UP case. It's a bit > tricky since we've never referred to per-cpu vars from asm before, but > since we're only referring to the pre-setup versions, it's ok. > The current mechanism was specifically introduced by James Bottomley a while back; I guess to deal with Voyager strangeness. As far as setting up the PDA in head.S goes, it turns out to be very easy without having to access any per-cpu data, since the whole CPU bringup stuff depends on static variables anyway. > The second patch changes gs to be the per-cpu offset, and by > implication, avoids using it altogether on UP. This avoids a special > "pda" structure, instead allowing all per-cpu variables to be accessed > this way. It avoids __thread, which I gave up after creating a horribly > complicated patch which still didn't quite work, and was no more > efficient if we want the kernel to run under Xen anyway. > > I really think this is the way to go, and I'll start work on merging > now. Hm, now is not really a good time. I'm still trying to get Xen basically working, and the percpu PDA stuff isn't really necessary for that. The PDA stuff was enough of a problem in itself... Also, the PDA patches are in -mm, so that's probably a better base for your patches. J