[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Overlaped PIO with multiple ioreq_server (Xen4.6.1)
On 09/05/2016 18:14, Paul Durrant wrote: >> -----Original Message----- >> From: Paul Durrant >> Sent: 09 May 2016 17:02 >> To: Paul Durrant; Paolo Bonzini; Martin Cerveny >> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx; George Dunlap >> Subject: RE: [Xen-devel] Overlaped PIO with multiple ioreq_server >> (Xen4.6.1) >> >>> -----Original Message----- >>> From: Xen-devel [mailto:xen-devel-bounces@xxxxxxxxxxxxx] On Behalf Of >>> Paul Durrant >>> Sent: 09 May 2016 14:00 >>> To: Paolo Bonzini; Martin Cerveny >>> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx; George Dunlap >>> Subject: Re: [Xen-devel] Overlaped PIO with multiple ioreq_server >>> (Xen4.6.1) >>> >>>> -----Original Message----- >>>> From: Paolo Bonzini [mailto:pbonzini@xxxxxxxxxx] >>>> Sent: 09 May 2016 13:56 >>>> To: Paul Durrant; Martin Cerveny >>>> Cc: George Dunlap; xen-devel@xxxxxxxxxxxxxxxxxxx >>>> Subject: Re: [Xen-devel] Overlaped PIO with multiple ioreq_server >>>> (Xen4.6.1) >>>> >>>> >>>> >>>> On 28/04/2016 13:25, Paul Durrant wrote: >>>>>> Maybe you are lucky, qemu is registered before your own demu >>>>>> emulator. >>>>> >>>>> I guess I was lucky. >>>> >>>> Yeah, QEMU has been doing that since 2013 (commit 3bb28b7, "memory: >>>> Provide separate handling of unassigned io ports accesses", 2013-09-05). >>>> >>>>>> I used for testing your "demu" 2 years ago, now extending Citrix >>>>>> "vgpu", all was fine up to xen 4.5.2 (with qemu 2.0.2) but >>>>>> problem begin when I switched to 4.6.1 (with qemu 2.2.1), but it >>>>>> maybe lucky timing in registration. >>>>> >>>>> I think Xen should really be spotting range overlaps like this, but >>>>> the QEMU<->Xen interface will clearly need to be fixed to avoid the >>>>> over-claiming of I/O ports like this. >>>> >>>> If the handling of unassigned I/O ports is sane in Xen (in QEMU they >>>> return all ones and discard writes), >>> >>> Yes, it does exactly that. >>> >>>> it would be okay to make the >>>> background 0-65535 range conditional on !xen_enabled(). See >>>> memory_map_init() in QEMU's exec.c file. >>>> >>> >>> Cool. Thanks for the tip. Will have a look at that now. >>> >> >> Looks like creation of the background range is required. (Well, when I simply >> #if 0-ed out creating it QEMU crashed on invocation). So, I guess I need to >> be >> able to spot, from the memory listener callback in Xen, when a background >> range is being added so it can be ignored. Same actually goes for memory as >> well as I/O, since Xen will handle access to unimplemented MMIO ranges in a >> similar fashion. >> > > In fact, this patch seems to do the trick for I/O: > > diff --git a/xen-hvm.c b/xen-hvm.c > index 039680a..8ab44f0 100644 > --- a/xen-hvm.c > +++ b/xen-hvm.c > @@ -510,8 +510,12 @@ static void xen_io_add(MemoryListener *listener, > MemoryRegionSection *section) > { > XenIOState *state = container_of(listener, XenIOState, io_listener); > + MemoryRegion *mr = section->mr; > > - memory_region_ref(section->mr); > + if (mr->ops == &unassigned_io_ops) > + return; > + > + memory_region_ref(mr); > > xen_map_io_section(xen_xc, xen_domid, state->ioservid, section); > } > @@ -520,10 +524,14 @@ static void xen_io_del(MemoryListener *listener, > MemoryRegionSection *section) > { > XenIOState *state = container_of(listener, XenIOState, io_listener); > + MemoryRegion *mr = section->mr; > + > + if (mr->ops == &unassigned_io_ops) > + return; > > xen_unmap_io_section(xen_xc, xen_domid, state->ioservid, section); > > - memory_region_unref(section->mr); > + memory_region_unref(mr); > } Looks good, feel free to Cc me if you send it to qemu-devel (though I'll let Anthony merge it). Paolo _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |