[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] ioemu: passthough: add no_wb option for pci conf write



On Mon, 2009-11-09 at 18:34 +0800, Stefano Stabellini wrote:
> On Mon, 9 Nov 2009, Qing He wrote:
> > The data and address registers is the sole way to update MSI vector and
> > affinity (at least when not using intremap), but the problem here is
> > that QEmu overwrite the hypervisor changes using stale data.
> > 
> > As we know, guest MSI is virtual, this means guest MSI address and data
> > are all emulated, and guest vector has nothing to do with real vector.
> > QEmu needs to map and bind MSI through Xen. via the following two calls:
> > 
> >     xc_physdev_map_pirq_msi
> >     xc_domain_bind_pt_irq
> > 
> > The physical content of MSI data/address is then decided and written by Xen.
> > xc_physdev_map_pirq_msi is also used to update guest MSI, including vector
> > and affinity.
> > 
> > Now come to the pt_pci_write_config logic:
> > 
> >     pci_read_block(&read_val);
> >     reg->u.dw.write(read_val, &val);   // the handler
> >     pci_write_block(val);
> > 
> > Since MSI data/address is fully emulated, val always equals to read_val,
> > i.e. write what is read back to the register. This would be OK for most of
> > the time, however, when the guest changes MSI affinity, something happens
> > between read and write. the handler calls xc_physdev_map_pirq_msi to update
> > the MSI, hypervisor changes the affinity and write a new vector/affinity
> > to the real registers. When the handler returns, pci_write_block(val)
> > overwrites the real registers, all the HV changes are lost, making the
> > MSI fail.
> > 
> 
> If "val always equals to read_val", why do we need to call
> pci_write_block at all?
> 

val == read_val is not necessarily true for registers other than
MSI data/address, but pt_pci_write_config tend to be generic for
all pci config.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.