vgaarb: Don't disable resources that are not owned
authorAlex Williamson <alex.williamson@redhat.com>
Thu, 15 Aug 2013 22:37:53 +0000 (16:37 -0600)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 3 Sep 2013 17:17:58 +0000 (19:17 +0200)
If a device does not own a resource then we don't need to disable it.
This resolves the case where an Intel IGD device can be configured to
disable decode of VGA memory but we still need the arbiter to handle
VGA I/O port routing.  When the IGD device is in conflict, only
PCI_COMMAND_IO should be disabled since VGA memory does not require
arbitration on this device.

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Cc: Dave Airlie <airlied@redhat.com>
Acked-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/vga/vgaarb.c

index e893f6e1937d7c79e2de772e00d1ed0b9a936e33..ea564711bb8008034e22e347bf27eb1a5399bb50 100644 (file)
@@ -257,9 +257,9 @@ static struct vga_device *__vga_tryget(struct vga_device *vgadev,
                if (!conflict->bridge_has_one_vga) {
                        vga_irq_set_state(conflict, false);
                        flags |= PCI_VGA_STATE_CHANGE_DECODES;
-                       if (lwants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
+                       if (match & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
                                pci_bits |= PCI_COMMAND_MEMORY;
-                       if (lwants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
+                       if (match & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
                                pci_bits |= PCI_COMMAND_IO;
                }
 
@@ -267,11 +267,11 @@ static struct vga_device *__vga_tryget(struct vga_device *vgadev,
                        flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
 
                pci_set_vga_state(conflict->pdev, false, pci_bits, flags);
-               conflict->owns &= ~lwants;
+               conflict->owns &= ~match;
                /* If he also owned non-legacy, that is no longer the case */
-               if (lwants & VGA_RSRC_LEGACY_MEM)
+               if (match & VGA_RSRC_LEGACY_MEM)
                        conflict->owns &= ~VGA_RSRC_NORMAL_MEM;
-               if (lwants & VGA_RSRC_LEGACY_IO)
+               if (match & VGA_RSRC_LEGACY_IO)
                        conflict->owns &= ~VGA_RSRC_NORMAL_IO;
        }