[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 5/6] x86/mm: the gva_to_gfn() hook is HVM-only
On 15.12.2020 17:27, Jan Beulich wrote: > As is the adjacent ga_to_gfn() one as well as paging_gva_to_gfn(). > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> > > --- a/xen/arch/x86/mm/p2m.c > +++ b/xen/arch/x86/mm/p2m.c > @@ -1772,7 +1772,6 @@ void np2m_schedule(int dir) > p2m_unlock(p2m); > } > } > -#endif > > unsigned long paging_gva_to_gfn(struct vcpu *v, > unsigned long va, > @@ -1820,6 +1819,8 @@ unsigned long paging_gva_to_gfn(struct v > return hostmode->gva_to_gfn(v, hostp2m, va, pfec); > } > > +#endif /* CONFIG_HVM */ > + > /* > * If the map is non-NULL, we leave this function having acquired an extra > ref > * on mfn_to_page(*mfn). In all cases, *pfec contains appropriate > --- a/xen/arch/x86/mm/shadow/multi.c > +++ b/xen/arch/x86/mm/shadow/multi.c > @@ -3414,6 +3414,7 @@ static bool sh_invlpg(struct vcpu *v, un > return true; > } > > +#ifdef CONFIG_HVM > > static unsigned long > sh_gva_to_gfn(struct vcpu *v, struct p2m_domain *p2m, > @@ -3447,6 +3448,7 @@ sh_gva_to_gfn(struct vcpu *v, struct p2m > return gfn_x(gfn); > } > > +#endif /* CONFIG_HVM */ > > static inline void > sh_update_linear_entries(struct vcpu *v) > @@ -4571,7 +4573,9 @@ int sh_audit_l4_table(struct vcpu *v, mf > const struct paging_mode sh_paging_mode = { > .page_fault = sh_page_fault, > .invlpg = sh_invlpg, > +#ifdef CONFIG_HVM > .gva_to_gfn = sh_gva_to_gfn, > +#endif > .update_cr3 = sh_update_cr3, > .update_paging_modes = shadow_update_paging_modes, > .flush_tlb = shadow_flush_tlb, I've noticed (or really the compiler told me) I forgot to also change none.c: --- a/xen/arch/x86/mm/shadow/none.c +++ b/xen/arch/x86/mm/shadow/none.c @@ -43,12 +43,14 @@ static bool _invlpg(struct vcpu *v, unsi return true; } +#ifdef CONFIG_HVM static unsigned long _gva_to_gfn(struct vcpu *v, struct p2m_domain *p2m, unsigned long va, uint32_t *pfec) { ASSERT_UNREACHABLE(); return gfn_x(INVALID_GFN); } +#endif static void _update_cr3(struct vcpu *v, int do_locking, bool noflush) { @@ -63,7 +65,9 @@ static void _update_paging_modes(struct static const struct paging_mode sh_paging_none = { .page_fault = _page_fault, .invlpg = _invlpg, +#ifdef CONFIG_HVM .gva_to_gfn = _gva_to_gfn, +#endif .update_cr3 = _update_cr3, .update_paging_modes = _update_paging_modes, }; Jan > --- a/xen/include/asm-x86/paging.h > +++ b/xen/include/asm-x86/paging.h > @@ -127,6 +127,7 @@ struct paging_mode { > struct cpu_user_regs *regs); > bool (*invlpg )(struct vcpu *v, > unsigned long linear); > +#ifdef CONFIG_HVM > unsigned long (*gva_to_gfn )(struct vcpu *v, > struct p2m_domain *p2m, > unsigned long va, > @@ -136,6 +137,7 @@ struct paging_mode { > unsigned long cr3, > paddr_t ga, uint32_t *pfec, > unsigned int *page_order); > +#endif > void (*update_cr3 )(struct vcpu *v, int do_locking, > bool noflush); > void (*update_paging_modes )(struct vcpu *v); > @@ -286,6 +288,8 @@ unsigned long paging_gva_to_gfn(struct v > unsigned long va, > uint32_t *pfec); > > +#ifdef CONFIG_HVM > + > /* Translate a guest address using a particular CR3 value. This is used > * to by nested HAP code, to walk the guest-supplied NPT tables as if > * they were pagetables. > @@ -304,6 +308,8 @@ static inline unsigned long paging_ga_to > page_order); > } > > +#endif /* CONFIG_HVM */ > + > /* Update all the things that are derived from the guest's CR3. > * Called when the guest changes CR3; the caller can then use v->arch.cr3 > * as the value to load into the host CR3 to schedule this vcpu */ > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |