[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 7/8] docs: Document start_info changes in Xen 4.2.
On Wed, 2013-01-30 at 17:23 +0000, Konrad Rzeszutek Wilk wrote: > On Tue, Jan 29, 2013 at 09:37:00AM +0000, Ian Campbell wrote: > > On Mon, 2013-01-28 at 18:32 +0000, Konrad Rzeszutek Wilk wrote: > > > The git commit 7a9d7646307b7c872b8dbd7546579acd3b54223d "x86/32-on-64: > > > adjust Dom0 initial page table layout" fixes a bug in the reported > > > value of pt_base versus what is stored in the %cr3 register. This > > > documents this in the start of the world header note. > > > > > > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > > > --- > > > xen/include/public/xen.h | 7 +++++++ > > > 1 file changed, 7 insertions(+) > > > > > > diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h > > > index c50bbfc..1685317 100644 > > > --- a/xen/include/public/xen.h > > > +++ b/xen/include/public/xen.h > > > @@ -705,6 +705,13 @@ typedef struct shared_info shared_info_t; > > > * 8. There is guaranteed to be at least 512kB padding after the final > > > * bootstrap element. If necessary, the bootstrap virtual region is > > > * extended by an extra 4MB to ensure this. > > > + * > > > + * Note: Prior to 7a9d7646307b7c872b8dbd7546579acd3b54223d > > > ("x86/32-on-64: > > > + * adjust Dom0 initial page table layout") the 3.e) contained two > > > different > > > + * values with a 64-bit hypervisor and a 32-bit initial domain kernel. > > > The > > > + * pt_base pointed to the L4 (setup by the hypervisor and not used by > > > + * the guest) and the %cr3 pointed to the L3. This meant an difference of > > > + * one page. > > > */ > > > > 7a9d7646307b7c872b8dbd7546579acd3b54223d is not a Xen revision. I think > > you meant 25833:bb85bbccb1c9. I assume this was a bug fix, in which case > > I would say "Prior to Xen commit xxx:yyyy ("x86/32-on...") a bug caused > > the pt_base (3.e above) to contain ..." > > > > It would be useful to explain clearly the after case too, which I > > suppose is that on 32-on-64 the pt_base now points to what the guest > > kernel should consider to be the base? Would it be relevant to explain > > how to detect this situation and what to do about it? > > > > The difference of one page was just an implementation artefact, rather > > than a meaningful semantic difference? Unless it is relevant to > > detecting the situation I would be inclined not to do it. > > It can be construed either way. If you look at: > > * e. bootstrap page tables [pt_base, CR3 (x86)] > > > It mentions _both_ sources of information - the register and the > contents of pt_base. It could imply that both of them have the same > value (if you read that as an enumeration of where this value is > contained). This comment is written from the context of a 32-bit hypervisor, where this would be true. I think it's just become inaccurate on 32-on-64 due to the trick we play with grafting the guest 3-level tables into a 4-level table. > But if you read the ',' as an 'or', then it is not a > semantic diference as they both could contain drastically diferent > values. > > Implementation wise, we get is that the value that CR3 is different than what: > unsigned long pt_base; /* VIRTUAL address of page directory. */ > > has. In other words, the pt_base is suspect and should be carefully > compared to the %cr3. If they are different, then the user should _NOT_ > touch the pages in between pt_base and %cr3 and mark them as unusable. > > > > > It should also be made clearer that this affected only 32-on-64 dom0 > > kernels and not 32-on-64 domU or 64-bit kernels of any colour. > > Right. How about this: > > commit 489682893ffc8bbbbb12ee820defac17cce762d0 > Author: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > Date: Mon Jan 28 13:20:29 2013 -0500 > > docs: Document start_info changes in Xen 4.2. > > The 25833:bb85bbccb1c9. "x86/32-on-64: adjust Dom0 initial page table > layout" > fixes a bug in the reported value of pt_base versus what is stored in > the %cr3 register. This documents this in the start of the world header > note. > > Also make it crystal clear that pt_base == %cr3. > > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > > diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h > index c50bbfc..3f51cd6 100644 > --- a/xen/include/public/xen.h > +++ b/xen/include/public/xen.h > @@ -693,7 +693,7 @@ typedef struct shared_info shared_info_t; > * 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)] > - * e. bootstrap page tables [pt_base, CR3 (x86)] > + * e. bootstrap page tables [pt_base and CR3 (x86)] > * f. bootstrap stack [register ESP (x86)] > * 4. Bootstrap elements are packed together, but each is 4kB-aligned. > * 5. The initial ram disk may be omitted. > @@ -705,6 +705,15 @@ typedef struct shared_info shared_info_t; > * 8. There is guaranteed to be at least 512kB padding after the final > * bootstrap element. If necessary, the bootstrap virtual region is > * extended by an extra 4MB to ensure this. > + * > + * Note: Prior to 25833:bb85bbccb1c9. ("x86/32-on-64 adjust Dom0 initial page > + * table layout") a bug caused the pt_base (3.e above) to contain a different > + * value than the CR3 register. I don't think this is right, the bug was that the L4 table was in guest space at all and that pt_base pointed to it, wasn't it? The fix was to remove the L4 from guest space altogether, Remember that this is a 32-on-64 guest so the 64-bit hypervisor should be providing the illusion of running on the 32-bit hypervisor, at least so far as it is able (and perhaps the guest reading %cr3 direct is one of those places where it can't) Perhaps Jan can correct our misconceptions on this one. > This only manifested itself on 32-on-64 dom0 > + * kernels and not 32-on-64 domU or 64-bit kernels of any colour. The > + * pt_base pointed to the L4 (setup by the hypervisor and not used by > + * the guest) and the %cr3 pointed to the L3. That sounds backwards, if actual %cr3 pointed to L3 things wouldn't work -- the processor is in long mode (on a compat segment) and so needs 4 level pages. > This meant an difference of > + * one page. The guest should _NOT_ use the pages from pt_base to %cr3 > + * for anything and mark them as reserved/unused. > */ > > #define MAX_GUEST_CMDLINE 1024 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |