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: 5a11d0f7549e24a10e178a9dc8ff5e698031d9a6 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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user