[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/2] x86/hvm/emulate: make sure rep I/O emulation does not cross GFN boundaries
>>> On 10.08.18 at 16:48, <paul.durrant@xxxxxxxxxx> wrote: > When emulating a rep I/O operation it is possible that the ioreq will > describe a single operation that spans multiple GFNs. This is fine as long > as all those GFNs fall within an MMIO region covered by a single device > model, but unfortunately the higher levels of the emulation code do not > guarantee that. This is something that should almost certainly be fixed, > but in the meantime this patch makes sure that MMIO is truncated at GFN > boundaries and hence the appropriate device model is re-evaluated for each > target GFN. > > NOTE: This patch does not deal with the case of a single MMIO operation > spanning a GFN boundary. That is more complex to deal with and is > deferred to a subsequent patch. > > Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> with a type change request: > --- a/xen/arch/x86/hvm/emulate.c > +++ b/xen/arch/x86/hvm/emulate.c > @@ -184,6 +184,25 @@ static int hvmemul_do_io( > hvmtrace_io_assist(&p); > } > > + /* > + * Make sure that we truncate rep MMIO at any GFN boundary. This is > + * necessary to ensure that the correct device model is targetted > + * or that we correctly handle a rep op spanning MMIO and RAM. > + */ > + if ( unlikely(p.count > 1) && p.type == IOREQ_TYPE_COPY ) > + { > + unsigned long off = p.addr & ~PAGE_MASK; If this was "unsigned int", all calculations below could be slightly cheaper 32-bit ones and ... > + if ( PAGE_SIZE - off < p.size ) /* single rep spans GFN */ > + p.count = 1; > + else > + p.count = min_t(unsigned long, ... this could be just min(), as long as ... > + p.count, > + ((p.df ? (off + p.size) : (PAGE_SIZE - off)) / ... the 3rd arg of the ?: gets cast to unsigned int. If you agree, I'd be fine doing the adjustments while committing. 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 |