xen/pt: Fix flawed conversion to realize()

The conversion of xen_pt_initfn() to xen_pt_realize() blindly replaced
XEN_PT_ERR() by error_setg().  Several error conditions that did not
fail xen_pt_initfn() now fail xen_pt_realize().  Unsurprisingly, the
cleanup on these errors looks highly suspicious.

Revert the inappropriate replacements.

Fixes: 5a11d0f754
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Anthony Perard <anthony.perard@citrix.com>
Cc: Paul Durrant <paul@xen.org>
Cc: xen-devel@lists.xenproject.org
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Paul Durrant <paul@xen.org>
Message-Id: <20200422130719.28225-10-armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2020-04-22 15:07:14 +02:00
parent 843c4cfcf4
commit c61d1d9e49

View File

@ -858,8 +858,8 @@ static void xen_pt_realize(PCIDevice *d, Error **errp)
rc = xc_physdev_map_pirq(xen_xc, xen_domid, machine_irq, &pirq); rc = xc_physdev_map_pirq(xen_xc, xen_domid, machine_irq, &pirq);
if (rc < 0) { if (rc < 0) {
error_setg_errno(errp, errno, "Mapping machine irq %u to" XEN_PT_ERR(d, "Mapping machine irq %u to pirq %i failed, (err: %d)\n",
" pirq %i failed", machine_irq, pirq); machine_irq, pirq, errno);
/* Disable PCI intx assertion (turn on bit10 of devctl) */ /* Disable PCI intx assertion (turn on bit10 of devctl) */
cmd |= PCI_COMMAND_INTX_DISABLE; cmd |= PCI_COMMAND_INTX_DISABLE;
@ -880,8 +880,8 @@ static void xen_pt_realize(PCIDevice *d, Error **errp)
PCI_SLOT(d->devfn), PCI_SLOT(d->devfn),
e_intx); e_intx);
if (rc < 0) { if (rc < 0) {
error_setg_errno(errp, errno, "Binding of interrupt %u failed", XEN_PT_ERR(d, "Binding of interrupt %i failed! (err: %d)\n",
e_intx); e_intx, errno);
/* Disable PCI intx assertion (turn on bit10 of devctl) */ /* Disable PCI intx assertion (turn on bit10 of devctl) */
cmd |= PCI_COMMAND_INTX_DISABLE; cmd |= PCI_COMMAND_INTX_DISABLE;
@ -889,8 +889,8 @@ static void xen_pt_realize(PCIDevice *d, Error **errp)
if (xen_pt_mapped_machine_irq[machine_irq] == 0) { if (xen_pt_mapped_machine_irq[machine_irq] == 0) {
if (xc_physdev_unmap_pirq(xen_xc, xen_domid, machine_irq)) { if (xc_physdev_unmap_pirq(xen_xc, xen_domid, machine_irq)) {
error_setg_errno(errp, errno, "Unmapping of machine" XEN_PT_ERR(d, "Unmapping of machine interrupt %i failed!"
" interrupt %u failed", machine_irq); " (err: %d)\n", machine_irq, errno);
} }
} }
s->machine_irq = 0; s->machine_irq = 0;