[xorg-x11-server/f18] fix bugs with autobinding output/offload slave from same driver

Dave Airlie airlied at fedoraproject.org
Mon Jan 7 04:54:06 UTC 2013


commit f2aaf74cdd47456a776bc4099ab64000ec69bac1
Author: Dave Airlie <airlied at redhat.com>
Date:   Mon Jan 7 14:50:16 2013 +1000

    fix bugs with autobinding output/offload slave from same driver

 ...fixup-tell-changed-so-randr-clients-can-t.patch |   27 ++++++-----
 xorg-x11-server.spec                               |    5 ++-
 xserver-autobind-hotplug.patch                     |   50 +++++++++++++++-----
 3 files changed, 56 insertions(+), 26 deletions(-)
---
diff --git a/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch b/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
index 9be545f..3a60ba1 100644
--- a/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
+++ b/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
@@ -1,4 +1,4 @@
-From fc08ad50a2ad81f8741939f8e9eacf86b5af6676 Mon Sep 17 00:00:00 2001
+From 6070acd223363941114168968657bcfe71aacd54 Mon Sep 17 00:00:00 2001
 From: Fedora X Ninjas <x at fedoraproject.org>
 Date: Wed, 12 Dec 2012 15:15:38 +1000
 Subject: [PATCH] autoconfig: fixup tell changed so randr clients can tell
@@ -16,7 +16,7 @@ This lets the gnome applet update if a usb device appears/disappears
  8 files changed, 39 insertions(+), 7 deletions(-)
 
 diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
-index 0b735d1..891142d 100644
+index 2b02e79..67d03eb 100644
 --- a/hw/xfree86/common/xf86platformBus.c
 +++ b/hw/xfree86/common/xf86platformBus.c
 @@ -47,6 +47,7 @@
@@ -47,10 +47,10 @@ index 0b735d1..891142d 100644
      return;
  }
 diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
-index 61119b3..a4fdec9 100644
+index 4ad4152..3b22058 100644
 --- a/hw/xfree86/modes/xf86Crtc.c
 +++ b/hw/xfree86/modes/xf86Crtc.c
-@@ -743,10 +743,12 @@ xf86CrtcCloseScreen(ScreenPtr screen)
+@@ -744,10 +744,12 @@ xf86CrtcCloseScreen(ScreenPtr screen)
      /* detach any providers */
      if (config->randr_provider) {
          if (config->randr_provider->offload_sink) {
@@ -63,25 +63,26 @@ index 61119b3..a4fdec9 100644
              DetachOutputGPU(screen);
              config->randr_provider->output_source = NULL;
          }
-@@ -3341,11 +3343,13 @@ void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
-         DetachUnboundGPU(pScrn->pScreen);
+@@ -3348,6 +3350,7 @@ void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
+         unbound = TRUE;
          AttachOffloadGPU(master->pScreen, pScrn->pScreen);
          slave_config->randr_provider->offload_sink = master_provider;
 +        RRSetChanged(master->pScreen);
-     } else if ((master->capabilities & RR_Capability_SourceOutput) &&
+     }
+     if ((master->capabilities & RR_Capability_SourceOutput) &&
                 pScrn->capabilities & RR_Capability_SinkOutput) {
-         /* sink offload */
-         DetachUnboundGPU(pScrn->pScreen);
+@@ -3356,5 +3359,6 @@ void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
+             DetachUnboundGPU(pScrn->pScreen);
          AttachOutputGPU(master->pScreen, pScrn->pScreen);
          slave_config->randr_provider->output_source = master_provider;
 +        RRSetChanged(master->pScreen);
      }
  }
 diff --git a/randr/randr.c b/randr/randr.c
-index da48c3f..5b1957b 100644
+index f0decfc..cb6fce7 100644
 --- a/randr/randr.c
 +++ b/randr/randr.c
-@@ -462,6 +462,28 @@ TellChanged(WindowPtr pWin, pointer value)
+@@ -464,6 +464,28 @@ TellChanged(WindowPtr pWin, pointer value)
      return WT_WALKCHILDREN;
  }
  
@@ -110,7 +111,7 @@ index da48c3f..5b1957b 100644
  /*
   * Something changed; send events and adjust pointer position
   */
-@@ -482,7 +504,7 @@ RRTellChanged(ScreenPtr pScreen)
+@@ -484,7 +506,7 @@ RRTellChanged(ScreenPtr pScreen)
          mastersp = pScrPriv;
      }
  
@@ -187,5 +188,5 @@ index 39340cc..36179ae 100644
  
      RRTellChanged(pScreen);
 -- 
-1.8.0.1
+1.8.1
 
diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec
index 9142025..9ed57a0 100644
--- a/xorg-x11-server.spec
+++ b/xorg-x11-server.spec
@@ -43,7 +43,7 @@
 Summary:   X.Org X11 X server
 Name:      xorg-x11-server
 Version:   1.13.1
-Release:   1%{?gitdate:.%{gitdate}}%{dist}
+Release:   2%{?gitdate:.%{gitdate}}%{dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X
@@ -592,6 +592,9 @@ rm -rf $RPM_BUILD_ROOT
 %{xserver_source_dir}
 
 %changelog
+* Mon Jan 07 2013 Dave Airlie <airlied at redhat.com> 1.13.1-2
+- fix bugs with autobinding output/offload slave from same driver
+
 * Tue Dec 18 2012 Peter Hutterer <peter.hutterer at redhat.com> 1.13.1-1
 - server 1.13.1
 
diff --git a/xserver-autobind-hotplug.patch b/xserver-autobind-hotplug.patch
index 7d05f27..c510791 100644
--- a/xserver-autobind-hotplug.patch
+++ b/xserver-autobind-hotplug.patch
@@ -1,19 +1,41 @@
-From 536626891b60039c0f3f9b4cd96156e9fe810f39 Mon Sep 17 00:00:00 2001
+From 37d51acb3b6a38af1717bfaa7925043c35bfb447 Mon Sep 17 00:00:00 2001
 From: Dave Airlie <airlied at redhat.com>
 Date: Fri, 17 Aug 2012 09:49:24 +1000
-Subject: [PATCH] autobind GPUs to the screen, (v2)
+Subject: [PATCH] autobind GPUs to the screen, (v3)
 
 this is racy and really not what we want for hotplug going forward,
 but until DE support is in GNOME its probably for the best.
 
 v2: fix if config or slave config is NULL
+v3: fix multi useful slaves
 DO NOT UPSTREAM.
 ---
- hw/xfree86/common/xf86Init.c        |   12 ++++++++++++
- hw/xfree86/common/xf86platformBus.c |    3 +++
- hw/xfree86/modes/xf86Crtc.c         |   28 ++++++++++++++++++++++++++++
- 3 files changed, 43 insertions(+)
+ dix/dispatch.c                      |  2 --
+ hw/xfree86/common/xf86Init.c        | 12 ++++++++++++
+ hw/xfree86/common/xf86platformBus.c |  3 +++
+ hw/xfree86/modes/xf86Crtc.c         | 32 ++++++++++++++++++++++++++++++++
+ 4 files changed, 47 insertions(+), 2 deletions(-)
 
+diff --git a/dix/dispatch.c b/dix/dispatch.c
+index 0ce10c2..c2ab8f9 100644
+--- a/dix/dispatch.c
++++ b/dix/dispatch.c
+@@ -3933,7 +3933,6 @@ void
+ AttachOutputGPU(ScreenPtr pScreen, ScreenPtr new)
+ {
+     assert(new->isGPU);
+-    assert(!new->current_master);
+     xorg_list_add(&new->output_head, &pScreen->output_slave_list);
+     new->current_master = pScreen;
+ }
+@@ -3950,7 +3949,6 @@ void
+ AttachOffloadGPU(ScreenPtr pScreen, ScreenPtr new)
+ {
+     assert(new->isGPU);
+-    assert(!new->current_master);
+     xorg_list_add(&new->offload_head, &pScreen->offload_slave_list);
+     new->current_master = pScreen;
+ }
 diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
 index d231ced..89629c1 100644
 --- a/hw/xfree86/common/xf86Init.c
@@ -45,7 +67,7 @@ index d231ced..89629c1 100644
      if (sigio_blocked)
          OsReleaseSIGIO();
 diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
-index a73aea2..3810076 100644
+index 0525e39..82fef32 100644
 --- a/hw/xfree86/common/xf86platformBus.c
 +++ b/hw/xfree86/common/xf86platformBus.c
 @@ -387,6 +387,8 @@ xf86platformProbeDev(DriverPtr drvp)
@@ -66,10 +88,10 @@ index a73aea2..3810076 100644
     return 0;
  }
 diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
-index 8f05c53..ba84e6b 100644
+index 3011f13..34c1848 100644
 --- a/hw/xfree86/modes/xf86Crtc.c
 +++ b/hw/xfree86/modes/xf86Crtc.c
-@@ -3321,3 +3321,31 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn)
+@@ -3323,3 +3323,35 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn)
              crtc->x = crtc->y = 0;
          }
  }
@@ -80,6 +102,7 @@ index 8f05c53..ba84e6b 100644
 +    RRProviderPtr master_provider;
 +    xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(master);
 +    xf86CrtcConfigPtr slave_config = XF86_CRTC_CONFIG_PTR(pScrn);
++    Bool unbound = FALSE;
 +
 +    if (!config || !slave_config)
 +        return;
@@ -91,16 +114,19 @@ index 8f05c53..ba84e6b 100644
 +            /* source offload */
 +            
 +        DetachUnboundGPU(pScrn->pScreen);
++        unbound = TRUE;
 +        AttachOffloadGPU(master->pScreen, pScrn->pScreen);
 +        slave_config->randr_provider->offload_sink = master_provider;
-+    } else if ((master->capabilities & RR_Capability_SourceOutput) &&
++    }
++    if ((master->capabilities & RR_Capability_SourceOutput) &&
 +               pScrn->capabilities & RR_Capability_SinkOutput) {
 +        /* sink offload */
-+        DetachUnboundGPU(pScrn->pScreen);
++        if (!unbound)
++            DetachUnboundGPU(pScrn->pScreen);
 +        AttachOutputGPU(master->pScreen, pScrn->pScreen);
 +        slave_config->randr_provider->output_source = master_provider;
 +    }
 +}
 -- 
-1.7.10.2
+1.8.1
 


More information about the scm-commits mailing list