pci_set_vga_state returns an error code, which so far has been ignored. Pass
this code through __vga_tryget (via ERR_PTR).

Signed-off-by: Simon Richter <[email protected]>
---
 drivers/pci/vgaarb.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c
index 5c2719cb1bfa..322c028539f0 100644
--- a/drivers/pci/vgaarb.c
+++ b/drivers/pci/vgaarb.c
@@ -215,6 +215,7 @@ static struct vga_device *__vga_tryget(struct vga_device 
*vgadev,
        struct vga_device *conflict;
        unsigned int pci_bits;
        u32 flags = 0;
+       int err = 0;
 
        /*
         * Account for "normal" resources to lock. If we decode the legacy,
@@ -307,7 +308,9 @@ static struct vga_device *__vga_tryget(struct vga_device 
*vgadev,
                if (change_bridge)
                        flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
 
-               pci_set_vga_state(conflict->pdev, false, pci_bits, flags);
+               err = pci_set_vga_state(conflict->pdev, false, pci_bits, flags);
+               if (unlikely(err))
+                       return ERR_PTR(err);
                conflict->owns &= ~match;
 
                /* If we disabled normal decoding, reflect it in owns */
@@ -337,7 +340,9 @@ static struct vga_device *__vga_tryget(struct vga_device 
*vgadev,
        if (wants & VGA_RSRC_LEGACY_MASK)
                flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
 
-       pci_set_vga_state(vgadev->pdev, true, pci_bits, flags);
+       err = pci_set_vga_state(vgadev->pdev, true, pci_bits, flags);
+       if (unlikely(err))
+               return ERR_PTR(err);
 
        vgadev->owns |= wants;
 lock_them:
@@ -455,6 +460,11 @@ int vga_get(struct pci_dev *pdev, unsigned int rsrc, int 
interruptible)
                }
                conflict = __vga_tryget(vgadev, rsrc);
                spin_unlock_irqrestore(&vga_lock, flags);
+               if (IS_ERR(conflict))
+               {
+                       rc = PTR_ERR(conflict);
+                       break;
+               }
                if (conflict == NULL)
                        break;
 
-- 
2.47.3

Reply via email to