[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v2 04/11] xen/memory: Fix acquire_resource size semantics
> -----Original Message----- > From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > Sent: 24 September 2020 11:58 > To: paul@xxxxxxx; 'Xen-devel' <xen-devel@xxxxxxxxxxxxxxxxxxxx> > Cc: 'George Dunlap' <George.Dunlap@xxxxxxxxxxxxx>; 'Ian Jackson' > <iwj@xxxxxxxxxxxxxx>; 'Jan Beulich' > <JBeulich@xxxxxxxx>; 'Stefano Stabellini' <sstabellini@xxxxxxxxxx>; 'Wei Liu' > <wl@xxxxxxx>; 'Julien > Grall' <julien@xxxxxxx>; 'Michał Leszczyński' <michal.leszczynski@xxxxxxx>; > 'Hubert Jasudowicz' > <hubert.jasudowicz@xxxxxxx>; 'Tamas K Lengyel' <tamas@xxxxxxxxxxxxx> > Subject: Re: [PATCH v2 04/11] xen/memory: Fix acquire_resource size semantics > > On 24/09/2020 11:06, Paul Durrant wrote: > >> diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c > >> index d1cfc8fb4a..e82307bdae 100644 > >> --- a/xen/arch/x86/mm.c > >> +++ b/xen/arch/x86/mm.c > >> @@ -4591,6 +4591,26 @@ int xenmem_add_to_physmap_one( > >> return rc; > >> } > >> > >> +unsigned int arch_resource_max_frames( > >> + struct domain *d, unsigned int type, unsigned int id) > >> +{ > >> + unsigned int nr = 0; > >> + > >> + switch ( type ) > >> + { > >> +#ifdef CONFIG_HVM > >> + case XENMEM_resource_ioreq_server: > >> + if ( !is_hvm_domain(d) ) > >> + break; > >> + /* One frame for the buf-ioreq ring, and one frame per 128 vcpus. > >> */ > >> + nr = 1 + DIV_ROUND_UP(d->max_vcpus * sizeof(struct ioreq), > >> PAGE_SIZE); > > The buf-ioreq ring is optional > > Yes, but it's position within the resource, and effect on the position > of the ioreq page(s), is not. Oh yes, I was forgetting that this is fixed so... Reviewed-by: Paul Durrant <paul@xxxxxxx> > > > so a caller using this value may still get a resource acquisition failure > > unless the id is used to > actually look up and check the ioreq server in question for the actual > maximum. > > Yes, but that is potentially true of *any* acquisition attempt, even if > the id matches, because maybe someone else has destroyed the ioreq > server, or the domain, in the meantime. > > > What we have is an mmap() where the caller needs to know to not try and > map page 0 for an ioreq server where buf-ioreq doesn't exist. > > This is a direct consequence of: > > #define XENMEM_resource_ioreq_server_frame_bufioreq 0 > #define XENMEM_resource_ioreq_server_frame_ioreq(n) (1 + (n)) > > and in practice, what a qemu/demu/other needs to do to map just the > ioreq frames (in a manner compatible with >127 vcpu HVM domains) is to > query the resource size and map size-1 pages from offset 1. Yes. Paul > > ~Andrew
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |