> >+ > >+ /* Set up GDT entry for 16bit stack */ > >+ stk16_off = (u32)&per_cpu(cpu_16bit_stack, cpu); > >+ gdt = per_cpu(cpu_gdt_table, cpu); > >+ *(__u64 *)(&gdt[GDT_ENTRY_ESPFIX_SS]) |= > >+ ((((__u64)stk16_off) << 16) & 0x000000ffffff0000ULL) | > >+ ((((__u64)stk16_off) << 32) & 0xff00000000000000ULL) | > >+ (CPU_16BIT_STACK_SIZE - 1); > > > > This should use pack_descriptor(). I'd never got around to changing it, > but it really should. I fixed it now in the original patch > >+ /* Complete percpu area setup early, before calling printk(), > >+ since it may end up using it indirectly. */ > >+ setup_percpu_for_this_cpu(cpu); > >+ > > > > I managed to get all this done in head.S before going into C code; is > that not still possible? Or is there a later patch to do this. Why write in assembler what you can write in C? -Andi