[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 01/12] x86/paging: introduce paging_set_allocation
On Fri, Jul 29, 2016 at 05:47:24PM +0100, Andrew Cooper wrote: > On 29/07/16 17:28, Roger Pau Monne wrote: > > diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c > > index 107fc8c..1b270df 100644 > > --- a/xen/arch/x86/mm/paging.c > > +++ b/xen/arch/x86/mm/paging.c > > @@ -953,6 +953,22 @@ void paging_write_p2m_entry(struct p2m_domain *p2m, > > unsigned long gfn, > > safe_write_pte(p, new); > > } > > > > +int paging_set_allocation(struct domain *d, unsigned long pages) > > +{ > > + int rc; > > + > > + ASSERT(paging_mode_enabled(d)); > > + > > + paging_lock(d); > > + if ( hap_enabled(d) ) > > + rc = hap_set_allocation(d, pages, NULL); > > + else > > + rc = sh_set_allocation(d, pages, NULL); > > (without looking at the rest of the series) Your NMI is probably a > watchdog timeout from this call, as passing NULL means "non-preemptible". I don't think so, the NMI I saw happened while the guest was booting. > As this is for the construction of dom0, it would be better to take a > preemptible pointer, loop in construct_dom0(), with a > process_pending_softirqs() call in between. Now fixed. > > + paging_unlock(d); > > + > > + return rc; > > +} > > + > > /* > > * Local variables: > > * mode: C > > diff --git a/xen/arch/x86/mm/shadow/common.c > > b/xen/arch/x86/mm/shadow/common.c > > index c22362f..452e22e 100644 > > --- a/xen/arch/x86/mm/shadow/common.c > > +++ b/xen/arch/x86/mm/shadow/common.c > > @@ -1604,9 +1604,8 @@ shadow_free_p2m_page(struct domain *d, struct > > page_info *pg) > > * Input will be rounded up to at least shadow_min_acceptable_pages(), > > * plus space for the p2m table. > > * Returns 0 for success, non-zero for failure. */ > > -static unsigned int sh_set_allocation(struct domain *d, > > - unsigned int pages, > > - int *preempted) > > +unsigned int sh_set_allocation(struct domain *d, unsigned int pages, > > + int *preempted) > > { > > struct page_info *sp; > > unsigned int lower_bound; > > diff --git a/xen/include/asm-x86/hap.h b/xen/include/asm-x86/hap.h > > index c613836..e3c9c98 100644 > > --- a/xen/include/asm-x86/hap.h > > +++ b/xen/include/asm-x86/hap.h > > @@ -46,7 +46,8 @@ int hap_track_dirty_vram(struct domain *d, > > XEN_GUEST_HANDLE_64(uint8) dirty_bitmap); > > > > extern const struct paging_mode *hap_paging_get_mode(struct vcpu *); > > -void hap_set_alloc_for_pvh_dom0(struct domain *d, unsigned long num_pages); > > +unsigned int hap_set_allocation(struct domain *d, unsigned int pages, > > + int *preempted); > > I also note from this change that there is an unsigned long => unsigned > int truncation in the internals of *_set_allocation(). This should > definitely be fixed, although possibly wants to be a separate change. Right, let me take a stab at this. Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |