Re: [RFC PATCH 10/35] Add a new head.S start-of-day file for booting on Xen.

Chris Wright
2006-03-22T18:58:22Z

* Andi Kleen (ak@suse.de) wrote:
> > + /* get vendor info */
> > + xorl %eax,%eax # call CPUID with 0 -> return vendor ID
> > + cpuid
> > + movl %eax,X86_CPUID # save CPUID level
> > + movl %ebx,X86_VENDOR_ID # lo 4 chars
> > + movl %edx,X86_VENDOR_ID+4 # next 4 chars
> > + movl %ecx,X86_VENDOR_ID+8 # last 4 chars
> > +
> > + movl $1,%eax # Use the CPUID instruction to get CPU type
> > + cpuid
> > + movb %al,%cl # save reg for future use
> > + andb $0x0f,%ah # mask processor family
> > + movb %ah,X86
> > + andb $0xf0,%al # mask model
> > + shrb $4,%al
> > + movb %al,X86_MODEL
> > + andb $0x0f,%cl # mask mask revision
> > + movb %cl,X86_MASK
> > + movl %edx,X86_CAPABILITY
>
> Can you make the CPU detection a common subfunction with the normal head.S ?

I don't see why not, prefer to share as much as possible.

> > +/*
> > + * BSS section
> > + */
> > +.section ".bss.page_aligned","w"
> > +ENTRY(swapper_pg_dir)
> > + .fill 1024,4,0
> > +ENTRY(empty_zero_page)
> > + .fill 4096,1,0
> > +
> > +/*
> > + * This starts the data section.
> > + */
> > +.data
> > +
> > + ALIGN
> > + .word 0 # 32 bit align gdt_desc.address
> > + .globl cpu_gdt_descr
> > +cpu_gdt_descr:
> > + .word GDT_SIZE
> > + .long cpu_gdt_table
> > +
> > + .fill NR_CPUS-1,8,0 # space for the other GDT descriptors
> > +
> > +/*
> > + * The Global Descriptor Table contains 28 quadwords, per-CPU.
> > + */
> > + .align PAGE_SIZE_asm
> > +ENTRY(cpu_gdt_table)
>
> GDT and empty_zero_page should be shared (they're identical right?) Put them into a
> new separate common file.

There's still kernel/user cs/ds in gdt, so it's not all zero.

thanks,
-chris