[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V7 07/11] vpci/header: emulate PCI_COMMAND register for guests
On 26.07.22 18:30, Jan Beulich wrote: Hello Jan On 19.07.2022 19:42, Oleksandr Tyshchenko wrote:--- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -443,11 +443,27 @@ static int modify_bars(const struct pci_dev *pdev, uint16_t cmd, bool rom_only) return 0; }+/* TODO: Add proper emulation for all bits of the command register. */static void cf_check cmd_write( const struct pci_dev *pdev, unsigned int reg, uint32_t cmd, void *data) { uint16_t current_cmd = pci_conf_read16(pdev->sbdf, reg);+ if ( !is_hardware_domain(pdev->domain) )+ { + struct vpci_header *header = data; + + header->guest_cmd = cmd; +#ifdef CONFIG_HAS_PCI_MSI + if ( pdev->vpci->msi->enabled || pdev->vpci->msix->enabled ) + /* + * Guest wants to enable INTx, but it can't be enabled + * if MSI/MSI-X enabled. + */ + cmd |= PCI_COMMAND_INTX_DISABLE; +#endif + } + /* * Let Dom0 play with all the bits directly except for the memory * decoding one. @@ -464,6 +480,19 @@ static void cf_check cmd_write( pci_conf_write16(pdev->sbdf, reg, cmd); }+static uint32_t cf_check cmd_read(+ const struct pci_dev *pdev, unsigned int reg, void *data) +{ + if ( !is_hardware_domain(pdev->domain) ) + { + struct vpci_header *header = data; + + return header->guest_cmd; + } + + return pci_conf_read16(pdev->sbdf, reg); +}This function wants the same leading comment as cmd_write(). ok I also think you better wouldn't give the guest the impression that r/o bits can actually be written to (but getting this right may well fall under the TODO). ok Jan -- Regards, Oleksandr Tyshchenko
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |