From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45046) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aG6zb-0004Ur-He for qemu-devel@nongnu.org; Mon, 04 Jan 2016 10:24:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aG6zW-0007GF-Tz for qemu-devel@nongnu.org; Mon, 04 Jan 2016 10:24:19 -0500 Received: from smtp02.citrix.com ([66.165.176.63]:11638) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aG6zW-0007Fw-Kv for qemu-devel@nongnu.org; Mon, 04 Jan 2016 10:24:14 -0500 Date: Mon, 4 Jan 2016 15:23:47 +0000 From: Stefano Stabellini In-Reply-To: <1451223640-2569-4-git-send-email-caoj.fnst@cn.fujitsu.com> Message-ID: References: <1451223640-2569-1-git-send-email-caoj.fnst@cn.fujitsu.com> <1451223640-2569-4-git-send-email-caoj.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Subject: Re: [Qemu-devel] [PATCH v2 3/4] Add Error **errp for xen_pt_config_init() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Cao jin Cc: qemu-devel@nongnu.org, stefano.stabellini@eu.citrix.com On Sun, 27 Dec 2015, Cao jin wrote: > To catch the error msg. Also modify the caller > > Signed-off-by: Cao jin > --- > hw/xen/xen_pt.c | 7 ++++--- > hw/xen/xen_pt.h | 2 +- > hw/xen/xen_pt_config_init.c | 48 ++++++++++++++++++++++----------------------- > 3 files changed, 29 insertions(+), 28 deletions(-) > > diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c > index fbce55c..3787c26 100644 > --- a/hw/xen/xen_pt.c > +++ b/hw/xen/xen_pt.c > @@ -824,9 +824,10 @@ static int xen_pt_initfn(PCIDevice *d) > xen_pt_register_regions(s, &cmd); > > /* reinitialize each config register to be emulated */ > - rc = xen_pt_config_init(s); > - if (rc) { > - XEN_PT_ERR(d, "PCI Config space initialisation failed.\n"); > + xen_pt_config_init(s, &local_err); > + if (local_err) { > + error_append_hint(&local_err, "PCI Config space initialisation failed"); > + rc = -1; > goto err_out; > } > > diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h > index dc74d3e..466525f 100644 > --- a/hw/xen/xen_pt.h > +++ b/hw/xen/xen_pt.h > @@ -228,7 +228,7 @@ struct XenPCIPassthroughState { > bool listener_set; > }; > > -int xen_pt_config_init(XenPCIPassthroughState *s); > +void xen_pt_config_init(XenPCIPassthroughState *s, Error **errp); > void xen_pt_config_delete(XenPCIPassthroughState *s); > XenPTRegGroup *xen_pt_find_reg_grp(XenPCIPassthroughState *s, uint32_t address); > XenPTReg *xen_pt_find_reg(XenPTRegGroup *reg_grp, uint32_t address); > diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c > index 3d8686d..096f204 100644 > --- a/hw/xen/xen_pt_config_init.c > +++ b/hw/xen/xen_pt_config_init.c > @@ -1899,8 +1899,9 @@ static uint8_t find_cap_offset(XenPCIPassthroughState *s, uint8_t cap) > return 0; > } > > -static int xen_pt_config_reg_init(XenPCIPassthroughState *s, > - XenPTRegGroup *reg_grp, XenPTRegInfo *reg) > +static void xen_pt_config_reg_init(XenPCIPassthroughState *s, > + XenPTRegGroup *reg_grp, XenPTRegInfo *reg, > + Error **errp) > { > XenPTReg *reg_entry; > uint32_t data = 0; > @@ -1919,12 +1920,13 @@ static int xen_pt_config_reg_init(XenPCIPassthroughState *s, > reg_grp->base_offset + reg->offset, &data); > if (rc < 0) { > g_free(reg_entry); > - return rc; > + error_setg(errp, "Init emulate register fail"); > + return; > } > if (data == XEN_PT_INVALID_REG) { > /* free unused BAR register entry */ > g_free(reg_entry); > - return 0; > + return; > } > /* Sync up the data to dev.config */ > offset = reg_grp->base_offset + reg->offset; > @@ -1942,7 +1944,8 @@ static int xen_pt_config_reg_init(XenPCIPassthroughState *s, > if (rc) { > /* Serious issues when we cannot read the host values! */ > g_free(reg_entry); > - return rc; > + error_setg(errp, "Cannot read host values"); > + return; > } > /* Set bits in emu_mask are the ones we emulate. The dev.config shall > * contain the emulated view of the guest - therefore we flip the mask > @@ -1967,10 +1970,10 @@ static int xen_pt_config_reg_init(XenPCIPassthroughState *s, > val = data; > > if (val & ~size_mask) { > - XEN_PT_ERR(&s->dev,"Offset 0x%04x:0x%04x expands past register size(%d)!\n", > - offset, val, reg->size); > + error_setg(errp, "Offset 0x%04x:0x%04x expands past" > + " register size(%d)!", offset, val, reg->size); > g_free(reg_entry); > - return -ENXIO; > + return; > } > /* This could be just pci_set_long as we don't modify the bits > * past reg->size, but in case this routine is run in parallel or the > @@ -1990,11 +1993,9 @@ static int xen_pt_config_reg_init(XenPCIPassthroughState *s, > } > /* list add register entry */ > QLIST_INSERT_HEAD(®_grp->reg_tbl_list, reg_entry, entries); > - > - return 0; > } > > -int xen_pt_config_init(XenPCIPassthroughState *s) > +void xen_pt_config_init(XenPCIPassthroughState *s, Error **errp) > { > int i, rc; > > @@ -2039,11 +2040,11 @@ int xen_pt_config_init(XenPCIPassthroughState *s) > reg_grp_offset, > ®_grp_entry->size); > if (rc < 0) { > - XEN_PT_LOG(&s->dev, "Failed to initialize %d/%ld, type=0x%x, rc:%d\n", > - i, ARRAY_SIZE(xen_pt_emu_reg_grps), > + error_setg(errp, "Failed to initialize %d/%ld, type=0x%x," > + " rc:%d", i, ARRAY_SIZE(xen_pt_emu_reg_grps), > xen_pt_emu_reg_grps[i].grp_type, rc); > xen_pt_config_delete(s); > - return rc; > + return; > } > } > > @@ -2051,24 +2052,23 @@ int xen_pt_config_init(XenPCIPassthroughState *s) > if (xen_pt_emu_reg_grps[i].emu_regs) { > int j = 0; > XenPTRegInfo *regs = xen_pt_emu_reg_grps[i].emu_regs; > + > /* initialize capability register */ > for (j = 0; regs->size != 0; j++, regs++) { > - /* initialize capability register */ > - rc = xen_pt_config_reg_init(s, reg_grp_entry, regs); > - if (rc < 0) { > - XEN_PT_LOG(&s->dev, "Failed to initialize %d/%ld reg 0x%x in grp_type=0x%x (%d/%ld), rc=%d\n", > - j, ARRAY_SIZE(xen_pt_emu_reg_grps[i].emu_regs), > - regs->offset, xen_pt_emu_reg_grps[i].grp_type, > - i, ARRAY_SIZE(xen_pt_emu_reg_grps), rc); > + xen_pt_config_reg_init(s, reg_grp_entry, regs, errp); > + if (*errp) { errp could theoretically be NULL > + error_append_hint(errp, "Failed to initialize %d/%ld" > + " reg 0x%x in grp_type=0x%x (%d/%ld)", > + j, ARRAY_SIZE(xen_pt_emu_reg_grps[i].emu_regs), > + regs->offset, xen_pt_emu_reg_grps[i].grp_type, > + i, ARRAY_SIZE(xen_pt_emu_reg_grps)); > xen_pt_config_delete(s); > - return rc; > + return; > } > } > } > } > } > - > - return 0; > } > > /* delete all emulate register */ > -- > 2.1.0 > > >