Re: [PATCH 03/15] x86: remove early_gdt_descr reference

From: Glauber Costa
Date: Mon Jun 09 2008 - 13:27:56 EST


James Bottomley wrote:
On Mon, 2008-06-09 at 12:49 -0300, Glauber Costa wrote:
James Bottomley wrote:
On Mon, 2008-06-09 at 11:16 -0300, Glauber Costa wrote:
since we use switch_to_new_gdt, there is no point
in assigning early_gdt_descr except for the first
assignment, which is done manually.
What makes you think you can do this? If you don't update the early
boot gdt, they all end up using the Boot CPU one. The problem with this
is that there's a time from start_secondary to switch_to_new_gdt where
the per cpu selector (%fs) and the pda selector (%gs) are those of the
boot CPU. The former isn't a problem but the CPU number is in the
latter, and it's used in that path before we get to the initialisation.
You are right, I missed it.

However, it only seem to be used in cpu_init, and very early. Sure there are some users _before_ we load the new gdt, but nothing prevents them to be moved after it. (Of course, this patch is wrong anyway).

And if we do that, we can even take the %fs loading out of head_32.S
Of course, it's only valid if those are indeed the only early users of it.

Is there any other use I'm missing?

Well, %fs loading there is done for the boot CPU. To eliminate that you
have to not only verify that start_secondary doesn't use anything in
per_cpu areas, but also verify that nothing in start_kernel() up until
boot_cpu_init() does ... That's a lot of smp_processor_id() references
to convert.
Yes, after a second look, it would be tricky indeed. But only for cpu0.
For all the others, I still think we could get rid of the problem by switching to the new gdt earlier in cpu_init.

What do you think?

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/