On 03.09.2021 12:08, Oleksandr Andrushchenko wrote: > --- a/xen/drivers/vpci/header.c > +++ b/xen/drivers/vpci/header.c > @@ -811,6 +811,16 @@ int vpci_bar_add_handlers(const struct domain *d, struct > pci_dev *pdev) > gprintk(XENLOG_ERR, > "%pp: failed to add BAR handlers for dom%d\n", &pdev->sbdf, > d->domain_id); > + > + /* > + * Reset the command register: it is possible that when passing > + * through a PCI device its memory decoding bits in the command > + * register are already set. Thus, a guest OS may not write to the > + * command register to update memory decoding, so guest mappings > + * (guest's view of the BARs) are left not updated. > + */ > + pci_conf_write16(pdev->sbdf, PCI_COMMAND, 0);
Can you really blindly write 0 here? What about bits that have to be under host control, e.g. INTX_DISABLE? I can see that you may want to hand off with I/O and memory decoding off and bus mastering disabled, but for every other bit (including reserved ones) I'd expect separate justification (in the commit message). Jan