[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH RFC 1 8/8] xen/pt: Check for return values for x
From: |
Stefano Stabellini |
Subject: |
Re: [Qemu-devel] [PATCH RFC 1 8/8] xen/pt: Check for return values for xen_host_pci_[get|set] in init |
Date: |
Wed, 1 Jul 2015 15:06:33 +0100 |
User-agent: |
Alpine 2.02 (DEB 1266 2009-07-14) |
On Mon, 29 Jun 2015, Konrad Rzeszutek Wilk wrote:
> and if we have failures we call xen_pt_destroy introduced in
> 'xen/pt: Move bulk of xen_pt_unregister_device in its own routine.'
> and free all of the allocated structures.
>
> Signed-off-by: Konrad Rzeszutek Wilk <address@hidden>
Acked-by: Stefano Stabellini <address@hidden>
> hw/xen/xen_pt.c | 32 +++++++++++++++++++++-----------
> 1 file changed, 21 insertions(+), 11 deletions(-)
>
> diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
> index 589c6c6..ce202e9 100644
> --- a/hw/xen/xen_pt.c
> +++ b/hw/xen/xen_pt.c
> @@ -779,10 +779,11 @@ static int xen_pt_initfn(PCIDevice *d)
> }
>
> /* Initialize virtualized PCI configuration (Extended 256 Bytes) */
> - if (xen_host_pci_get_block(&s->real_device, 0, d->config,
> - PCI_CONFIG_SPACE_SIZE) < 0) {
> - xen_host_pci_device_put(&s->real_device);
> - return -1;
> + rc = xen_host_pci_get_block(&s->real_device, 0, d->config,
> + PCI_CONFIG_SPACE_SIZE);
> + if (rc < 0) {
> + XEN_PT_ERR(d,"Could not read PCI_CONFIG space! (rc:%d)\n", rc);
> + goto err_out;
> }
>
> s->memory_listener = xen_pt_memory_listener;
> @@ -792,17 +793,18 @@ static int xen_pt_initfn(PCIDevice *d)
> xen_pt_register_regions(s, &cmd);
>
> /* reinitialize each config register to be emulated */
> - if (xen_pt_config_init(s)) {
> + rc = xen_pt_config_init(s);
> + if (rc) {
> XEN_PT_ERR(d, "PCI Config space initialisation failed.\n");
> - xen_host_pci_device_put(&s->real_device);
> - return -1;
> + goto err_out;
> }
>
> /* Bind interrupt */
> - if (xen_host_pci_get_byte(&s->real_device, PCI_INTERRUPT_PIN,
> - &machine_irq /* temp scratch */)) {
> + rc = xen_host_pci_get_byte(&s->real_device, PCI_INTERRUPT_PIN,
> + &machine_irq /* temp scratch */);
> + if (rc) {
> XEN_PT_ERR(d, "Failed to read PCI_INTERRUPT_PIN! (rc:%d)\n", rc);
> - machine_irq = 0;
> + goto err_out;
> }
> if (!machine_irq) {
> XEN_PT_LOG(d, "no pin interrupt\n");
> @@ -859,12 +861,15 @@ out:
> rc = xen_host_pci_get_word(&s->real_device, PCI_COMMAND, &val);
> if (rc) {
> XEN_PT_ERR(d, "Failed to read PCI_COMMAND! (rc: %d)\n", rc);
> + goto err_out;
> }
> else {
> val |= cmd;
> - if (xen_host_pci_set_word(&s->real_device, PCI_COMMAND, val)) {
> + rc = xen_host_pci_set_word(&s->real_device, PCI_COMMAND, val);
> + if (rc) {
> XEN_PT_ERR(d, "Failed to write PCI_COMMAND val=0x%x!(rc:
> %d)\n",
> val, rc);
> + goto err_out;
> }
> }
> }
> @@ -877,6 +882,11 @@ out:
> s->hostaddr.bus, s->hostaddr.slot, s->hostaddr.function);
>
> return 0;
> +
> +err_out:
> + xen_pt_destroy(d);
> + assert(rc);
> + return rc;
> }
>
> static void xen_pt_unregister_device(PCIDevice *d)
> --
> 2.1.0
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH RFC 1 8/8] xen/pt: Check for return values for xen_host_pci_[get|set] in init,
Stefano Stabellini <=