qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Marcel Apfelbaum <marcel@redhat.com>
To: Mao Zhongyi <maozy.fnst@cn.fujitsu.com>, qemu-devel@nongnu.org
Cc: mst@redhat.com, armbru@redhat.com
Subject: Re: [Qemu-devel] [PATCH v7 7/9] pci: Convert shpc_init() to Error
Date: Fri, 23 Jun 2017 12:56:33 +0300	[thread overview]
Message-ID: <d2663895-14c6-759b-930f-9f7a295723a7@redhat.com> (raw)
In-Reply-To: <971cab75a0b4e011a18de8afb0ed4eedb7810eb6.1498116042.git.maozy.fnst@cn.fujitsu.com>

On 22/06/2017 11:14, Mao Zhongyi wrote:
> In order to propagate error message better, convert shpc_init() to
> Error also convert the pci_bridge_dev_initfn() to realize.
> 
> Cc: mst@redhat.com
> Cc: marcel@redhat.com
> Cc: armbru@redhat.com
> Signed-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com>
> ---
> v7:
> * drop the !local_err assert is really not appropriate,
>    now revert it.            [Marcel Apfelbaum]
> 
>   hw/pci-bridge/pci_bridge_dev.c | 14 ++++++--------
>   hw/pci/shpc.c                  | 11 +++++------
>   hw/pci/slotid_cap.c            | 11 +++++------
>   include/hw/pci/shpc.h          |  3 ++-
>   include/hw/pci/slotid_cap.h    |  3 ++-
>   5 files changed, 20 insertions(+), 22 deletions(-)
> 
> diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c
> index 5dbd933..4373f1d 100644
> --- a/hw/pci-bridge/pci_bridge_dev.c
> +++ b/hw/pci-bridge/pci_bridge_dev.c
> @@ -49,7 +49,7 @@ struct PCIBridgeDev {
>   };
>   typedef struct PCIBridgeDev PCIBridgeDev;
>   
> -static int pci_bridge_dev_initfn(PCIDevice *dev)
> +static void pci_bridge_dev_realize(PCIDevice *dev, Error **errp)
>   {
>       PCIBridge *br = PCI_BRIDGE(dev);
>       PCIBridgeDev *bridge_dev = PCI_BRIDGE_DEV(dev);
> @@ -62,7 +62,7 @@ static int pci_bridge_dev_initfn(PCIDevice *dev)
>           dev->config[PCI_INTERRUPT_PIN] = 0x1;
>           memory_region_init(&bridge_dev->bar, OBJECT(dev), "shpc-bar",
>                              shpc_bar_size(dev));
> -        err = shpc_init(dev, &br->sec_bus, &bridge_dev->bar, 0);
> +        err = shpc_init(dev, &br->sec_bus, &bridge_dev->bar, 0, errp);
>           if (err) {
>               goto shpc_error;
>           }
> @@ -71,7 +71,7 @@ static int pci_bridge_dev_initfn(PCIDevice *dev)
>           bridge_dev->msi = ON_OFF_AUTO_OFF;
>       }
>   
> -    err = slotid_cap_init(dev, 0, bridge_dev->chassis_nr, 0);
> +    err = slotid_cap_init(dev, 0, bridge_dev->chassis_nr, 0, errp);
>       if (err) {
>           goto slotid_error;
>       }
> @@ -87,7 +87,7 @@ static int pci_bridge_dev_initfn(PCIDevice *dev)
>               /* Can't satisfy user's explicit msi=on request, fail */
>               error_append_hint(&local_err, "You have to use msi=auto (default) "
>                       "or msi=off with this machine type.\n");
> -            error_report_err(local_err);
> +            error_propagate(errp, local_err);
>               goto msi_error;
>           }
>           assert(!local_err || bridge_dev->msi == ON_OFF_AUTO_AUTO);
> @@ -101,7 +101,7 @@ static int pci_bridge_dev_initfn(PCIDevice *dev)
>           pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY |
>                            PCI_BASE_ADDRESS_MEM_TYPE_64, &bridge_dev->bar);
>       }
> -    return 0;
> +    return;
>   
>   msi_error:
>       slotid_cap_cleanup(dev);
> @@ -111,8 +111,6 @@ slotid_error:
>       }
>   shpc_error:
>       pci_bridge_exitfn(dev);
> -
> -    return err;
>   }
>   
>   static void pci_bridge_dev_exitfn(PCIDevice *dev)
> @@ -216,7 +214,7 @@ static void pci_bridge_dev_class_init(ObjectClass *klass, void *data)
>       PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
>       HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass);
>   
> -    k->init = pci_bridge_dev_initfn;
> +    k->realize = pci_bridge_dev_realize;
>       k->exit = pci_bridge_dev_exitfn;
>       k->config_write = pci_bridge_dev_write_config;
>       k->vendor_id = PCI_VENDOR_ID_REDHAT;
> diff --git a/hw/pci/shpc.c b/hw/pci/shpc.c
> index d72d5e4..69fc14b 100644
> --- a/hw/pci/shpc.c
> +++ b/hw/pci/shpc.c
> @@ -446,16 +446,14 @@ static void shpc_cap_update_dword(PCIDevice *d)
>   }
>   
>   /* Add SHPC capability to the config space for the device. */
> -static int shpc_cap_add_config(PCIDevice *d)
> +static int shpc_cap_add_config(PCIDevice *d, Error **errp)
>   {
>       uint8_t *config;
>       int config_offset;
> -    Error *local_err = NULL;
>       config_offset = pci_add_capability(d, PCI_CAP_ID_SHPC,
>                                          0, SHPC_CAP_LENGTH,
> -                                       &local_err);
> +                                       errp);
>       if (config_offset < 0) {
> -        error_report_err(local_err);
>           return config_offset;
>       }
>       config = d->config + config_offset;
> @@ -584,13 +582,14 @@ void shpc_device_hot_unplug_request_cb(HotplugHandler *hotplug_dev,
>   }
>   
>   /* Initialize the SHPC structure in bridge's BAR. */
> -int shpc_init(PCIDevice *d, PCIBus *sec_bus, MemoryRegion *bar, unsigned offset)
> +int shpc_init(PCIDevice *d, PCIBus *sec_bus, MemoryRegion *bar,
> +              unsigned offset, Error **errp)
>   {
>       int i, ret;
>       int nslots = SHPC_MAX_SLOTS; /* TODO: qdev property? */
>       SHPCDevice *shpc = d->shpc = g_malloc0(sizeof(*d->shpc));
>       shpc->sec_bus = sec_bus;
> -    ret = shpc_cap_add_config(d);
> +    ret = shpc_cap_add_config(d, errp);
>       if (ret) {
>           g_free(d->shpc);
>           return ret;
> diff --git a/hw/pci/slotid_cap.c b/hw/pci/slotid_cap.c
> index bdca205..36d021b 100644
> --- a/hw/pci/slotid_cap.c
> +++ b/hw/pci/slotid_cap.c
> @@ -9,14 +9,14 @@
>   
>   int slotid_cap_init(PCIDevice *d, int nslots,
>                       uint8_t chassis,
> -                    unsigned offset)
> +                    unsigned offset,
> +                    Error **errp)
>   {
>       int cap;
> -    Error *local_err = NULL;
>   
>       if (!chassis) {
> -        error_report("Bridge chassis not specified. Each bridge is required "
> -                     "to be assigned a unique chassis id > 0.");
> +        error_setg(errp, "Bridge chassis not specified. Each bridge is required"
> +                   " to be assigned a unique chassis id > 0.");
>           return -EINVAL;
>       }
>       if (nslots < 0 || nslots > (PCI_SID_ESR_NSLOTS >> SLOTID_NSLOTS_SHIFT)) {
> @@ -25,9 +25,8 @@ int slotid_cap_init(PCIDevice *d, int nslots,
>       }
>   
>       cap = pci_add_capability(d, PCI_CAP_ID_SLOTID, offset,
> -                             SLOTID_CAP_LENGTH, &local_err);
> +                             SLOTID_CAP_LENGTH, errp);
>       if (cap < 0) {
> -        error_report_err(local_err);
>           return cap;
>       }
>       /* We make each chassis unique, this way each bridge is First in Chassis */
> diff --git a/include/hw/pci/shpc.h b/include/hw/pci/shpc.h
> index 71e836b..ee19fec 100644
> --- a/include/hw/pci/shpc.h
> +++ b/include/hw/pci/shpc.h
> @@ -38,7 +38,8 @@ struct SHPCDevice {
>   
>   void shpc_reset(PCIDevice *d);
>   int shpc_bar_size(PCIDevice *dev);
> -int shpc_init(PCIDevice *dev, PCIBus *sec_bus, MemoryRegion *bar, unsigned off);
> +int shpc_init(PCIDevice *dev, PCIBus *sec_bus, MemoryRegion *bar,
> +              unsigned off, Error **errp);
>   void shpc_cleanup(PCIDevice *dev, MemoryRegion *bar);
>   void shpc_free(PCIDevice *dev);
>   void shpc_cap_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int len);
> diff --git a/include/hw/pci/slotid_cap.h b/include/hw/pci/slotid_cap.h
> index 70db047..a777ea0 100644
> --- a/include/hw/pci/slotid_cap.h
> +++ b/include/hw/pci/slotid_cap.h
> @@ -5,7 +5,8 @@
>   
>   int slotid_cap_init(PCIDevice *dev, int nslots,
>                       uint8_t chassis,
> -                    unsigned offset);
> +                    unsigned offset,
> +                    Error **errp);
>   void slotid_cap_cleanup(PCIDevice *dev);
>   
>   #endif
> 


Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>

Michael might ask you to re-post the whole series.
Thanks,
Marcel

  reply	other threads:[~2017-06-23  9:56 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-20 11:57 [Qemu-devel] [PATCH v6 0/9] Convert to realize and cleanup Mao Zhongyi
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 1/9] pci: Clean up error checking in pci_add_capability() Mao Zhongyi
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 2/9] pci: Add comment for pci_add_capability2() Mao Zhongyi
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 3/9] pci: Fix the wrong assertion Mao Zhongyi
2017-06-21  7:40   ` Marcel Apfelbaum
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 4/9] pci: Make errp the last parameter of pci_add_capability() Mao Zhongyi
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 5/9] pci: Replace pci_add_capability2() with pci_add_capability() Mao Zhongyi
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 6/9] pci: Convert to realize Mao Zhongyi
2017-06-21  7:43   ` Marcel Apfelbaum
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 7/9] pci: Convert shpc_init() to Error Mao Zhongyi
2017-06-22  8:14   ` [Qemu-devel] [PATCH v7 " Mao Zhongyi
2017-06-23  9:56     ` Marcel Apfelbaum [this message]
2017-06-26  1:30       ` Mao Zhongyi
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 8/9] i386/kvm/pci-assign: Fix return type of verify_irqchip_kernel() Mao Zhongyi
2017-06-21  8:02   ` Marcel Apfelbaum
2017-06-20 11:57 ` [Qemu-devel] [PATCH v6 9/9] i386/kvm/pci-assign: Use errp directly rather than local_err Mao Zhongyi
2017-06-21  8:04   ` Marcel Apfelbaum
  -- strict thread matches above, loose matches on Subject: below --
2017-06-27  6:16 [Qemu-devel] [PATCH v7 0/9] Convert to realize and cleanup Mao Zhongyi
2017-06-27  6:16 ` [Qemu-devel] [PATCH v7 7/9] pci: Convert shpc_init() to Error Mao Zhongyi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d2663895-14c6-759b-930f-9f7a295723a7@redhat.com \
    --to=marcel@redhat.com \
    --cc=armbru@redhat.com \
    --cc=maozy.fnst@cn.fujitsu.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).