[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/pv: Clean up cr3 handling in arch_set_info_guest()
>>> On 21.12.18 at 14:46, <andrew.cooper3@xxxxxxxxxx> wrote: > All of this code lives inside CONFIG_PV which means gfn == mfn, and the > fill_ro_mpt() calls clearly show that the value is used untranslated. > > Change cr3_gfn to a suitably typed cr3_mfn, and replace get_page_from_gfn() > with a straight mfn_to_page/get_page sequence, to avoid the implication that > translation is going on. > > No functional change. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > --- > CC: Jan Beulich <JBeulich@xxxxxxxx> > CC: Wei Liu <wei.liu2@xxxxxxxxxx> > CC: Roger Pau Monné <roger.pau@xxxxxxxxxx> > CC: Stefano Stabellini <sstabellini@xxxxxxxxxx> > CC: Julien Grall <julien.grall@xxxxxxx> > > Julien: This should simplify your "xen: Switch parameter in > get_page_from_gfn > to use typesafe gfn" patch. In particular, I did a doubletake at > fill_ro_mpt(_mfn(gfn_x(cr3_gfn))); when reviewing it. > --- > xen/arch/x86/domain.c | 22 +++++++++++----------- > 1 file changed, 11 insertions(+), 11 deletions(-) > > diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c > index 32dc4253..da94ab4 100644 > --- a/xen/arch/x86/domain.c > +++ b/xen/arch/x86/domain.c > @@ -827,8 +827,8 @@ int arch_set_info_guest( > unsigned long flags; > bool compat; > #ifdef CONFIG_PV > - unsigned long cr3_gfn; > - struct page_info *cr3_page; > + mfn_t cr3_mfn; > + struct page_info *cr3_page = NULL; > unsigned long cr4; > int rc = 0; > #endif > @@ -1091,12 +1091,12 @@ int arch_set_info_guest( > set_bit(_VPF_in_reset, &v->pause_flags); > > if ( !compat ) > - cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[3]); > + cr3_mfn = _mfn(xen_cr3_to_pfn(c.nat->ctrlreg[3])); > else > - cr3_gfn = compat_cr3_to_pfn(c.cmp->ctrlreg[3]); > - cr3_page = get_page_from_gfn(d, cr3_gfn, NULL, P2M_ALLOC); > + cr3_mfn = _mfn(compat_cr3_to_pfn(c.cmp->ctrlreg[3])); > > - if ( !cr3_page ) > + if ( !mfn_valid(cr3_mfn) || > + !(cr3_page = mfn_to_page(cr3_mfn), get_page(cr3_page, d)) ) I'd prefer if the comma operator was used really only when there's no alternative. Here I think if ( !mfn_valid(cr3_mfn) || !get_page(cr3_page = mfn_to_page(cr3_mfn), d) ) is quite a bit easier to read. > @@ -1137,10 +1137,10 @@ int arch_set_info_guest( > v->arch.guest_table = pagetable_from_page(cr3_page); > if ( c.nat->ctrlreg[1] ) > { > - cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[1]); > - cr3_page = get_page_from_gfn(d, cr3_gfn, NULL, P2M_ALLOC); > + cr3_mfn = _mfn(xen_cr3_to_pfn(c.nat->ctrlreg[1])); > > - if ( !cr3_page ) > + if ( !mfn_valid(cr3_mfn) || > + !(cr3_page = mfn_to_page(cr3_mfn), get_page(cr3_page, d)) ) Same here and then Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Or wait - in the discussion with Roger you've indicated you'd switch to get_page_from_mfn() anyway, which would eliminate the comma expression altogether, and the need for the newly added initializer as well. The R-b above applies to that adjustment as well. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |