mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
pci: make each capability DWORD aligned
PCI spec (see e.g. 6.7 Capabilities List in spec rev 3.0) requires that each capability is DWORD aligned. Ensure this when allocating space by rounding size up to 4. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
dc59944bc9
commit
e26631b746
1 changed files with 2 additions and 2 deletions
4
hw/pci.c
4
hw/pci.c
|
@ -1906,7 +1906,7 @@ int pci_add_capability(PCIDevice *pdev, uint8_t cap_id,
|
|||
config[PCI_CAP_LIST_NEXT] = pdev->config[PCI_CAPABILITY_LIST];
|
||||
pdev->config[PCI_CAPABILITY_LIST] = offset;
|
||||
pdev->config[PCI_STATUS] |= PCI_STATUS_CAP_LIST;
|
||||
memset(pdev->used + offset, 0xFF, size);
|
||||
memset(pdev->used + offset, 0xFF, QEMU_ALIGN_UP(size, 4));
|
||||
/* Make capability read-only by default */
|
||||
memset(pdev->wmask + offset, 0, size);
|
||||
/* Check capability by default */
|
||||
|
@ -1926,7 +1926,7 @@ void pci_del_capability(PCIDevice *pdev, uint8_t cap_id, uint8_t size)
|
|||
memset(pdev->w1cmask + offset, 0, size);
|
||||
/* Clear cmask as device-specific registers can't be checked */
|
||||
memset(pdev->cmask + offset, 0, size);
|
||||
memset(pdev->used + offset, 0, size);
|
||||
memset(pdev->used + offset, 0, QEMU_ALIGN_UP(size, 4));
|
||||
|
||||
if (!pdev->config[PCI_CAPABILITY_LIST])
|
||||
pdev->config[PCI_STATUS] &= ~PCI_STATUS_CAP_LIST;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue