[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Bootstrap in mini-os



Jayaraman, Bhaskar, le Fri 27 Jun 2008 02:55:58 +0800, a écrit :
> 1] I have been looking through its sources and I wanted to know what is the 
> bootstrap code comprised of in Mini-os.

Things start from arch/x86/x86_32.S:_start, then see function
start_kernel.

> 2] The start_info pages seem to contain bootstrap pages in them and also the 
> mini-os kernel text loads itself at virtual address 0x00 as directed by the 
> lds script so does the bootstrap code come from Xen loader.

No, everything is contained in the mini-os source. All Xen does is
mapping the ELF at the virtual address given in the lds, and setup a
bootstrap page table.

> 3] Also I guess the start pfn begins after the bootstrap pfn as mentioned 
> here??

See the documentation about day0 in start_info doc in xen/include/public/xen.h
In mini-os, what is called "start_pfn" is just the first pfn which is
available for data/heap/whatever.

>  /* First page follows page table pages and 3 more pages (store page etc) */
>     start_pfn = PFN_UP(to_phys(start_info.pt_base)) +
>                 start_info.nr_pt_frames + 3;
> 
> If so why is the text virtual address being deducted from bootstrap page in 
> to_phys ??

Because what is calculated above is not anything virtual, it's a PFN,
which are always numbered from 0, and thus you need to subtract the
VIRT_START offset.

> 4] So kernel text will reside before bootstrap code?

bootstrap code is _in_ the kernel. Have a look at an objdump -D of mini-os.

> Which is why I'm curious to know if this is part of bootloader code.

It is not.

> 5] What is being achieved by deducting the kernel text virtual address from 
> the bootstrap virtual address?

What the macro says: going down from virtual address to physical
address.

> I mean why do we not want to account for that space while organizing mini-os 
> memory?

Because it's easier to think of pages as starting from 0, wherever they
are virtually mapped.

> 6] Why are we Oring 7 with shared info page while mapping it with the 
> hypervisor?
> HYPERVISOR_update_va_mapping(
>                 (unsigned long)shared_info, __pte(pa | 7), UVMF_INVLPG)

7 == _PAGE_PRESENT | _PAGE_RW | _PAGE_USER.

I guess a cleanup patch would indeed consist in replacing 7 with the OR
above.

> 7] Will this virtual address be listed in the mfn_list, the page frame list 
> for this VM before this hypercall?

mfn_list does not reference virtual addresses, it lists MFNs. See the
comment in x86_32.S:

/* Unpleasant -- the PTE that maps this page is actually overwritten */
/* to map the real shared-info page! :-)     

The MFN which was previously mapped at that place will still be
referenced in the mfn_list and Xen will still consider it to be
allocated to Mini-OS. Mini-OS could very well project it somewhere else,
but it doesn't for simplicity (not a big loss).

Samuel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.