[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] start of day, special pages
On Wed, Oct 30, 2013 at 02:11:51PM +0100, Vladimir '??-coder/phcoder' Serbinenko wrote: > On 30.10.2013 14:03, Konrad Rzeszutek Wilk wrote: > > On Wed, Oct 30, 2013 at 01:32:30PM +0100, Vladimir '??-coder/phcoder' > > Serbinenko wrote: > >> Hello, all. I'm writing pvgrub2 ( for those interested > >> http://git.savannah.gnu.org/cgit/grub.git/log/?h=phcoder/newports/xen ) > >> Now I'm able to load pvgrub2 from pvgrub2. Now I'm trying to load > >> NetBSD. Apparently NetBSD assumes that console interface is mapping in > >> start-of-day layout and I paid special care not to map any special pages > >> in start-of-day. Which special pages have to be mapped and where? > >> Accoring to xen.h: > >> * 1. The domain is started within contiguous virtual-memory region. > >> * 2. The contiguous region ends on an aligned 4MB boundary. > >> * 3. This the order of bootstrap elements in the initial virtual region: > >> * a. relocated kernel image > >> * b. initial ram disk [mod_start, mod_len] > >> * c. list of allocated page frames [mfn_list, nr_pages] > >> * (unless relocated due to XEN_ELFNOTE_INIT_P2M) > >> * d. start_info_t structure [register ESI (x86)] > > > > That structure has the information: > > > > > > #ifdef XEN_HAVE_PV_GUEST_ENTRY > > struct start_info { > > /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */ > > char magic[32]; /* "xen-<version>-<platform>". */ > > unsigned long nr_pages; /* Total pages allocated to this domain. */ > > unsigned long shared_info; /* MACHINE address of shared info struct. */ > > uint32_t flags; /* SIF_xxx flags. */ > > xen_pfn_t store_mfn; /* MACHINE page number of shared page. */ > > uint32_t store_evtchn; /* Event channel for store communication. */ > > union { > > struct { > > xen_pfn_t mfn; /* MACHINE page number of console page. > > */ <==== > > uint32_t evtchn; /* Event channel for console page. */ > > } domU; > > struct { > > uint32_t info_off; /* Offset of console_info struct. */ > > uint32_t info_size; /* Size of console_info struct from start.*/ > > } dom0; > > } console; > > /* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME). */ > > unsigned long pt_base; /* VIRTUAL address of page directory. */ > > unsigned long nr_pt_frames; /* Number of bootstrap p.t. frames. */ > > unsigned long mfn_list; /* VIRTUAL address of page-frame list. */ > > unsigned long mod_start; /* VIRTUAL address of pre-loaded module */ > > /* (PFN of pre-loaded module if */ > > /* SIF_MOD_START_PFN set in flags). */ > > unsigned long mod_len; /* Size (bytes) of pre-loaded module. */ > > #define MAX_GUEST_CMDLINE 1024 > > int8_t cmd_line[MAX_GUEST_CMDLINE]; > > /* The pfn range here covers both page table and p->m table frames. */ > > unsigned long first_p2m_pfn;/* 1st pfn forming initial P->M table. */ > > unsigned long nr_p2m_frames;/* # of pfns forming initial P->M table. */ > > }; > > > > You need to consult console.domU.mfn. > > > Yes, I understand that but it's not my question. My question is where I > should map it to when handing off control to another kernel. I have not seen any real docs about that but IIRC pvgrub maps console and xenstore just immediately after start info. Please look for: ... /* Move current console, xenstore and boot MFNs to the allocated * place */ do_exchange(dom, dom->console_pfn, start_info.console.domU.mfn); do_exchange(dom, dom->xenstore_pfn, start_info.store_mfn); ... in xen/stubdom/grub/kexec.c file. In general this file shows how to build properly all boot stuff. You could also check my PV kexec implementation: http://lists.xenproject.org/archives/html/xen-devel/2013-07/msg02613.html Especially check kexec-tools-2.0.3_20120522.patch patch. Most interesting stuff for you is in kexec-tools-2.0.3/kexec/arch/i386/kexec-xen-pv.c file. It is xen-pv loader. xen_pv_load() will show you general overview. Do not worry too much about xenstore and console pages order. It is my arbitrary choice but I needed that in my PV kexec implementation. You will find also there some info how to use early console (check kexec-tools-2.0.3/purgatory/arch/i386/console-x86.c file for more details). If you need more info drop me a line. Daniel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |