Messages in this thread | | | Date | Sun, 18 Jan 2009 13:52:49 +0900 | From | Tejun Heo <> | Subject | Re: [PATCH 16/17] x86-64: Remove the PDA |
| |
Hello,
Brian Gerst wrote: > Now that the PDA is empty except for the stack canary, it can be removed. > The irqstack is moved to the start of the per-cpu section. If the stack > protector is enabled, the canary overlaps the bottom 48 bytes of the irqstack > on SMP. On UP it is a seperate variable, since it is the only thing referenced > via %gs.
Eh... I don't know. Locating stack canary at hard 40byte offset is a dirty thing to do one way or another. I kind of like doing it directly in the linker script as it makes the dirty nature more obvious and doesn't require hunting down the definition in the first section.
How about something like the following?
#define CANARY_OFFSET 40 #define CANARY_SIZE 8
DECLARE_PER_CPU(unsigned long, stack_canary);
and in linker script,
PERCPU_VADDR_PREALLOC(0, :percpu, CANARY_OFFSET + CANARY_SIZE) per_cpu__stack_canary = __per_cpu_start + CANARY_OFFSET;
> diff --git a/arch/x86/kernel/vmlinux_64.lds.S b/arch/x86/kernel/vmlinux_64.lds.S > index a09abb8..c52af06 100644 > --- a/arch/x86/kernel/vmlinux_64.lds.S > +++ b/arch/x86/kernel/vmlinux_64.lds.S > @@ -4,6 +4,10 @@ > > #define LOAD_OFFSET __START_KERNEL_map > > +#define PER_CPU_SECTIONS \ > + *(.data.percpu.irqstack) \ > + DEFAULT_PER_CPU_SECTIONS > +
Where is this used?
> #define PERCPU_VADDR(vaddr, phdr) \ > PERCPU_PROLOG(vaddr) \ > + *(.data.percpu.first) \ > *(.data.percpu.page_aligned) \ > *(.data.percpu) \ > *(.data.percpu.shared_aligned) \
If this is gonna go in the generic PERCPU script directly, why just not add DEFINE_PER_CPU_FIRST() too?
Thanks.
-- tejun
| |