Skip to content

Commit ebff5fa

Browse files
committed
Revert "i915: Update VGA arbiter support for newer devices"
This reverts commit 81b5c7b. Adding drm/i915 into the vga arbiter chain means that X (in a piece of well-meant paranoia) will do a get/put on the vga decoding around _every_ accel call down into the ddx. Which results in some nice performance disasters [1]. This really breaks userspace, by disabling DRI for everyone, and stops OpenGL from working, this isn't limited to just the i915 but both the integrated and discrete GPUs on multi-gpu systems, in other words this causes untold worlds of pain, Ville tried to come up with a Great Hack to fiddle the required VGA I/O ops behind everyone's back using stop_machine, but that didn't really work out [2]. Given that we're fairly late in the -rc stage for such games let's just revert this all. One thing we might want to keep is to delay the disabling of the vga decoding until the fbdev emulation and the fbcon screen is set up. If we kill vga mem decoding beforehand fbcon can end up with a white square in the top-left corner it tried to save from the vga memory for a seamless transition. And we have bug reports on older platforms which seem to match these symptoms. But again that's something to play around with in -next. References: [1] http://lists.x.org/archives/xorg-devel/2013-September/037763.html References: [2] http://www.spinics.net/lists/intel-gfx/msg34062.html Cc: Alex Williamson <[email protected]> Cc: Ville Syrjälä <[email protected]> Cc: Chris Wilson <[email protected]> Signed-off-by: Daniel Vetter <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
1 parent e1264eb commit ebff5fa

File tree

3 files changed

+3
-38
lines changed

3 files changed

+3
-38
lines changed

drivers/gpu/drm/i915/i915_dma.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,12 +1290,9 @@ static int i915_load_modeset_init(struct drm_device *dev)
12901290
* then we do not take part in VGA arbitration and the
12911291
* vga_client_register() fails with -ENODEV.
12921292
*/
1293-
if (!HAS_PCH_SPLIT(dev)) {
1294-
ret = vga_client_register(dev->pdev, dev, NULL,
1295-
i915_vga_set_decode);
1296-
if (ret && ret != -ENODEV)
1297-
goto out;
1298-
}
1293+
ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode);
1294+
if (ret && ret != -ENODEV)
1295+
goto out;
12991296

13001297
intel_register_dsm_handler();
13011298

drivers/gpu/drm/i915/intel_display.c

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10038,36 +10038,13 @@ static void i915_disable_vga(struct drm_device *dev)
1003810038
outb(SR01, VGA_SR_INDEX);
1003910039
sr1 = inb(VGA_SR_DATA);
1004010040
outb(sr1 | 1<<5, VGA_SR_DATA);
10041-
10042-
/* Disable VGA memory on Intel HD */
10043-
if (HAS_PCH_SPLIT(dev)) {
10044-
outb(inb(VGA_MSR_READ) & ~VGA_MSR_MEM_EN, VGA_MSR_WRITE);
10045-
vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
10046-
VGA_RSRC_NORMAL_IO |
10047-
VGA_RSRC_NORMAL_MEM);
10048-
}
10049-
1005010041
vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
1005110042
udelay(300);
1005210043

1005310044
I915_WRITE(vga_reg, VGA_DISP_DISABLE);
1005410045
POSTING_READ(vga_reg);
1005510046
}
1005610047

10057-
static void i915_enable_vga(struct drm_device *dev)
10058-
{
10059-
/* Enable VGA memory on Intel HD */
10060-
if (HAS_PCH_SPLIT(dev)) {
10061-
vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
10062-
outb(inb(VGA_MSR_READ) | VGA_MSR_MEM_EN, VGA_MSR_WRITE);
10063-
vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
10064-
VGA_RSRC_LEGACY_MEM |
10065-
VGA_RSRC_NORMAL_IO |
10066-
VGA_RSRC_NORMAL_MEM);
10067-
vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
10068-
}
10069-
}
10070-
1007110048
void intel_modeset_init_hw(struct drm_device *dev)
1007210049
{
1007310050
intel_init_power_well(dev);
@@ -10559,8 +10536,6 @@ void intel_modeset_cleanup(struct drm_device *dev)
1055910536

1056010537
intel_disable_fbc(dev);
1056110538

10562-
i915_enable_vga(dev);
10563-
1056410539
intel_disable_gt_powersave(dev);
1056510540

1056610541
ironlake_teardown_rc6(dev);

include/linux/vgaarb.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,8 @@ struct pci_dev;
6565
* out of the arbitration process (and can be safe to take
6666
* interrupts at any time.
6767
*/
68-
#if defined(CONFIG_VGA_ARB)
6968
extern void vga_set_legacy_decoding(struct pci_dev *pdev,
7069
unsigned int decodes);
71-
#else
72-
static inline void vga_set_legacy_decoding(struct pci_dev *pdev,
73-
unsigned int decodes)
74-
{
75-
}
76-
#endif
7770

7871
/**
7972
* vga_get - acquire & locks VGA resources

0 commit comments

Comments
 (0)