From patchwork Tue Aug 23 17:33:00 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 1089182 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.4) with ESMTP id p7NHXMAR001902 for ; Tue, 23 Aug 2011 17:33:22 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755748Ab1HWRdR (ORCPT ); Tue, 23 Aug 2011 13:33:17 -0400 Received: from david.siemens.de ([192.35.17.14]:31129 "EHLO david.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755610Ab1HWRdJ (ORCPT ); Tue, 23 Aug 2011 13:33:09 -0400 Received: from mail1.siemens.de (localhost [127.0.0.1]) by david.siemens.de (8.13.6/8.13.6) with ESMTP id p7NHX5e6015219; Tue, 23 Aug 2011 19:33:05 +0200 Received: from mchn199C.mchp.siemens.de ([139.25.109.49]) by mail1.siemens.de (8.13.6/8.13.6) with ESMTP id p7NHX4tO016941; Tue, 23 Aug 2011 19:33:05 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org, "Michael S. Tsirkin" , Alex Williamson Subject: [PATCH v3 4/7] pci-assign: Refactor calc_assigned_dev_id Date: Tue, 23 Aug 2011 19:33:00 +0200 Message-Id: X-Mailer: git-send-email 1.7.3.4 In-Reply-To: References: In-Reply-To: References: Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Tue, 23 Aug 2011 17:33:22 +0000 (UTC) Make calc_assigned_dev_id pick up all required bits from the device passed to it. Signed-off-by: Jan Kiszka --- hw/device-assignment.c | 25 +++++++++---------------- hw/device-assignment.h | 6 +++--- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/hw/device-assignment.c b/hw/device-assignment.c index ca13e76..e41b1a1 100644 --- a/hw/device-assignment.c +++ b/hw/device-assignment.c @@ -850,9 +850,10 @@ static void free_assigned_device(AssignedDevice *dev) free_dev_irq_entries(dev); } -static uint32_t calc_assigned_dev_id(uint16_t seg, uint8_t bus, uint8_t devfn) +static uint32_t calc_assigned_dev_id(AssignedDevice *dev) { - return (uint32_t)seg << 16 | (uint32_t)bus << 8 | (uint32_t)devfn; + return (uint32_t)dev->h_segnr << 16 | (uint32_t)dev->h_busnr << 8 | + (uint32_t)dev->h_devfn; } static void assign_failed_examine(AssignedDevice *dev) @@ -916,8 +917,7 @@ static int assign_device(AssignedDevice *dev) } memset(&assigned_dev_data, 0, sizeof(assigned_dev_data)); - assigned_dev_data.assigned_dev_id = - calc_assigned_dev_id(dev->h_segnr, dev->h_busnr, dev->h_devfn); + assigned_dev_data.assigned_dev_id = calc_assigned_dev_id(dev); assigned_dev_data.segnr = dev->h_segnr; assigned_dev_data.busnr = dev->h_busnr; assigned_dev_data.devfn = dev->h_devfn; @@ -974,8 +974,7 @@ static int assign_irq(AssignedDevice *dev) return r; memset(&assigned_irq_data, 0, sizeof(assigned_irq_data)); - assigned_irq_data.assigned_dev_id = - calc_assigned_dev_id(dev->h_segnr, dev->h_busnr, dev->h_devfn); + assigned_irq_data.assigned_dev_id = calc_assigned_dev_id(dev); assigned_irq_data.guest_irq = irq; assigned_irq_data.host_irq = dev->real_device.irq; if (dev->irq_requested_type) { @@ -1014,8 +1013,7 @@ static void deassign_device(AssignedDevice *dev) int r; memset(&assigned_dev_data, 0, sizeof(assigned_dev_data)); - assigned_dev_data.assigned_dev_id = - calc_assigned_dev_id(dev->h_segnr, dev->h_busnr, dev->h_devfn); + assigned_dev_data.assigned_dev_id = calc_assigned_dev_id(dev); r = kvm_deassign_pci_device(kvm_state, &assigned_dev_data); if (r < 0) @@ -1069,9 +1067,7 @@ static void assigned_dev_update_msi(PCIDevice *pci_dev, unsigned int ctrl_pos) int r; memset(&assigned_irq_data, 0, sizeof assigned_irq_data); - assigned_irq_data.assigned_dev_id = - calc_assigned_dev_id(assigned_dev->h_segnr, assigned_dev->h_busnr, - (uint8_t)assigned_dev->h_devfn); + assigned_irq_data.assigned_dev_id = calc_assigned_dev_id(assigned_dev); /* Some guests gratuitously disable MSI even if they're not using it, * try to catch this by only deassigning irqs if the guest is using @@ -1156,8 +1152,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev) fprintf(stderr, "MSI-X entry number is zero!\n"); return -EINVAL; } - msix_nr.assigned_dev_id = calc_assigned_dev_id(adev->h_segnr, adev->h_busnr, - (uint8_t)adev->h_devfn); + msix_nr.assigned_dev_id = calc_assigned_dev_id(adev); msix_nr.entry_nr = entries_nr; r = kvm_assign_set_msix_nr(kvm_state, &msix_nr); if (r != 0) { @@ -1224,9 +1219,7 @@ static void assigned_dev_update_msix(PCIDevice *pci_dev, unsigned int ctrl_pos) int r; memset(&assigned_irq_data, 0, sizeof assigned_irq_data); - assigned_irq_data.assigned_dev_id = - calc_assigned_dev_id(assigned_dev->h_segnr, assigned_dev->h_busnr, - (uint8_t)assigned_dev->h_devfn); + assigned_irq_data.assigned_dev_id = calc_assigned_dev_id(assigned_dev); /* Some guests gratuitously disable MSIX even if they're not using it, * try to catch this by only deassigning irqs if the guest is using diff --git a/hw/device-assignment.h b/hw/device-assignment.h index 3a3d99d..06a1fb3 100644 --- a/hw/device-assignment.h +++ b/hw/device-assignment.h @@ -90,9 +90,9 @@ typedef struct AssignedDevice { PCIDevRegions real_device; int run; int girq; - unsigned int h_segnr; - unsigned char h_busnr; - unsigned int h_devfn; + uint16_t h_segnr; + uint8_t h_busnr; + uint8_t h_devfn; int irq_requested_type; int bound; struct {