Skip to content

Commit

Permalink
pci: avoid losing config updates to MSI/MSIX cap regs
Browse files Browse the repository at this point in the history
Since
commit 95d6580
    msi: Invoke msi/msix_write_config from PCI core
msix config writes are lost, the value written is always 0.

Fix pci_default_write_config to avoid this.

Cc: qemu-stable@nongnu.org
Signed-off-by: Knut Omang <knut.omang@oracle.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
Knut Omang authored and mstsirkin committed Sep 2, 2014
1 parent 0187c79 commit d7efb7e
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions hw/pci/pci.c
Expand Up @@ -1146,9 +1146,10 @@ uint32_t pci_default_read_config(PCIDevice *d,
return le32_to_cpu(val);
}

void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l)
void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val_in, int l)
{
int i, was_irq_disabled = pci_irq_disabled(d);
uint32_t val = val_in;

for (i = 0; i < l; val >>= 8, ++i) {
uint8_t wmask = d->wmask[addr + i];
Expand All @@ -1170,8 +1171,8 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l)
& PCI_COMMAND_MASTER);
}

msi_write_config(d, addr, val, l);
msix_write_config(d, addr, val, l);
msi_write_config(d, addr, val_in, l);
msix_write_config(d, addr, val_in, l);
}

/***********************************************************/
Expand Down

0 comments on commit d7efb7e

Please sign in to comment.