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:
parent
843c4cfcf4
commit
c61d1d9e49
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user