VFIO fixes:

- Fix 32bit overflow in handling large PCI BARs (Alex Williamson)
 - Fix interrupt shutdown ordering (Alex Williamson)
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJUsACOAAoJECObm247sIsiyLgQAIVDXjK7CDuJfQ454x1QlE5v
 u9PVkrbwR8nRHvRG35N0W9OtYX6a4UxXLPbEBWgLrRXGxaKAaxV+zjXiIVsOg5ub
 isAU3VDYlG+9Am3Gim5Bs40mCVBFPQP0iJ8SujZ/xNoIGMKmRLfITYo7YWJzdNtZ
 IBUJPUO7zI/rOrJmyBwSqtRi6DtBcI05gfWDTKrNHMjlTS09tPFbwD533Fcpj4es
 AIpnDOYvwszoKMTRtX+9CWW2Iz0lkoOYZuUgsbMJQuP40aWdjyV9cbmOCmFbu2TM
 3QCSLO9PWZ0V+M4t6x3FxVA4W5O+MdQkfKIHp8GttGLer2wAZwvBc6mmIxX6le3p
 O7zf7yvHfSuhyiQRlXjfulHOdXy2vz3um/Fwc4kZf0zq4XcOIyUBBrPzYDqO7wPn
 xAvAyamMLYOzXwHLEsKzKfmU/Hdb8OoVAJtH5DqOSfE9lSFo9D6DJYUfqhyK+2pZ
 MoDgk8a+dmtQx7Br5GdbQgedldUy9WV8vnKaGi71S1oX0I0VG568stRgd3qazK35
 ivpMZiXubhurIRScuMmMK76nE6v2SFWZHdeCxiOqjloW+pqHykanDi0V5QURef6n
 8yHJdtP6BMkvvrG/dCY6QEzSsh72Dkpu2h9VBDSsVbYbE4cfwjLY1cA7czzGjqDA
 SEqUiowxEae/J1Q0re4L
 =OA0W
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/awilliam/tags/vfio-update-20150109.0' into staging

VFIO fixes:
- Fix 32bit overflow in handling large PCI BARs (Alex Williamson)
- Fix interrupt shutdown ordering (Alex Williamson)

# gpg: Signature made Fri 09 Jan 2015 16:23:42 GMT using RSA key ID 3BB08B22
# gpg: Good signature from "Alex Williamson <alex.williamson@redhat.com>"
# gpg:                 aka "Alex Williamson <alex@shazbot.org>"
# gpg:                 aka "Alex Williamson <alwillia@redhat.com>"
# gpg:                 aka "Alex Williamson <alex.l.williamson@gmail.com>"

* remotes/awilliam/tags/vfio-update-20150109.0:
  vfio-pci: Fix interrupt disabling
  vfio-pci: Fix BAR size overflow

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2015-01-10 22:29:09 +00:00
commit 64ea8038ff

View file

@ -2129,16 +2129,19 @@ static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr,
*/
static void vfio_disable_interrupts(VFIOPCIDevice *vdev)
{
switch (vdev->interrupt) {
case VFIO_INT_INTx:
vfio_disable_intx(vdev);
break;
case VFIO_INT_MSI:
vfio_disable_msi(vdev);
break;
case VFIO_INT_MSIX:
/*
* More complicated than it looks. Disabling MSI/X transitions the
* device to INTx mode (if supported). Therefore we need to first
* disable MSI/X and then cleanup by disabling INTx.
*/
if (vdev->interrupt == VFIO_INT_MSIX) {
vfio_disable_msix(vdev);
break;
} else if (vdev->interrupt == VFIO_INT_MSI) {
vfio_disable_msi(vdev);
}
if (vdev->interrupt == VFIO_INT_INTx) {
vfio_disable_intx(vdev);
}
}
@ -2301,7 +2304,7 @@ static void vfio_unmap_bar(VFIOPCIDevice *vdev, int nr)
static void vfio_map_bar(VFIOPCIDevice *vdev, int nr)
{
VFIOBAR *bar = &vdev->bars[nr];
unsigned size = bar->region.size;
uint64_t size = bar->region.size;
char name[64];
uint32_t pci_bar;
uint8_t type;
@ -2351,7 +2354,7 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr)
}
if (vdev->msix && vdev->msix->table_bar == nr) {
unsigned start;
uint64_t start;
start = HOST_PAGE_ALIGN(vdev->msix->table_offset +
(vdev->msix->entries * PCI_MSIX_ENTRY_SIZE));