diff mbox

[13/16] pci-assign: propagate errors from assigned_dev_register_regions()

Message ID 1397118285-11715-14-git-send-email-lersek@redhat.com
State New
Headers show

Commit Message

Laszlo Ersek April 10, 2014, 8:24 a.m. UTC
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
---
 hw/i386/kvm/pci-assign.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

Comments

Eric Blake April 29, 2014, 7:24 p.m. UTC | #1
On 04/10/2014 02:24 AM, Laszlo Ersek wrote:
> Signed-off-by: Laszlo Ersek <lersek@redhat.com>
> ---
>  hw/i386/kvm/pci-assign.c | 23 +++++++++++++----------
>  1 file changed, 13 insertions(+), 10 deletions(-)
> 

> @@ -423,13 +424,13 @@ static int assigned_dev_register_regions(PCIRegion *io_regions,
>                                                      cur_region->resource_fd,
>                                                      (off_t)0);
>  
>              if (pci_dev->v_addrs[i].u.r_virtbase == MAP_FAILED) {
>                  pci_dev->v_addrs[i].u.r_virtbase = NULL;
> -                error_report("%s: Error: Couldn't mmap 0x%" PRIx64 "!",
> -                             __func__, cur_region->base_addr);
> -                return -1;
> +                error_setg_errno(errp, errno, "Couldn't mmap 0x%" PRIx64 "!",

The ! in the message is overkill, I wouldn't mind if someone deletes it,
but it's minor enough to not warrant a respin.

Reviewed-by: Eric Blake <eblake@redhat.com>
diff mbox

Patch

diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c
index 3a904e8..9aa92a1 100644
--- a/hw/i386/kvm/pci-assign.c
+++ b/hw/i386/kvm/pci-assign.c
@@ -392,13 +392,14 @@  static uint8_t pci_find_cap_offset(PCIDevice *d, uint8_t cap, uint8_t start)
         pos += PCI_CAP_LIST_NEXT;
     }
     return 0;
 }
 
-static int assigned_dev_register_regions(PCIRegion *io_regions,
-                                         unsigned long regions_num,
-                                         AssignedDevice *pci_dev)
+static void assigned_dev_register_regions(PCIRegion *io_regions,
+                                          unsigned long regions_num,
+                                          AssignedDevice *pci_dev,
+                                          Error **errp)
 {
     uint32_t i;
     PCIRegion *cur_region = io_regions;
 
     for (i = 0; i < regions_num; i++, cur_region++) {
@@ -423,13 +424,13 @@  static int assigned_dev_register_regions(PCIRegion *io_regions,
                                                     cur_region->resource_fd,
                                                     (off_t)0);
 
             if (pci_dev->v_addrs[i].u.r_virtbase == MAP_FAILED) {
                 pci_dev->v_addrs[i].u.r_virtbase = NULL;
-                error_report("%s: Error: Couldn't mmap 0x%" PRIx64 "!",
-                             __func__, cur_region->base_addr);
-                return -1;
+                error_setg_errno(errp, errno, "Couldn't mmap 0x%" PRIx64 "!",
+                                 cur_region->base_addr);
+                return;
             }
 
             pci_dev->v_addrs[i].r_size = cur_region->size;
             pci_dev->v_addrs[i].e_size = 0;
 
@@ -494,11 +495,10 @@  static int assigned_dev_register_regions(PCIRegion *io_regions,
                              &pci_dev->v_addrs[i].container);
         }
     }
 
     /* success */
-    return 0;
 }
 
 static void get_real_id(const char *devpath, const char *idname, uint16_t *val,
                         Error **errp)
 {
@@ -1794,13 +1794,16 @@  static int assigned_initfn(struct PCIDevice *pci_dev)
             goto out;
         }
     }
 
     /* handle real device's MMIO/PIO BARs */
-    if (assigned_dev_register_regions(dev->real_device.regions,
-                                      dev->real_device.region_number,
-                                      dev)) {
+    assigned_dev_register_regions(dev->real_device.regions,
+                                  dev->real_device.region_number, dev,
+                                  &local_err);
+    if (local_err) {
+        qerror_report_err(local_err);
+        error_free(local_err);
         goto out;
     }
 
     /* handle interrupt routing */
     e_intx = dev->dev.config[PCI_INTERRUPT_PIN] - 1;