Re: [git pull] drm

From: Dave Airlie
Date: Fri Jan 09 2009 - 21:04:34 EST


On Sat, Jan 10, 2009 at 11:13 AM, Richard Purdie
<rpurdie@xxxxxxxxxxxxxxx> wrote:
> On Fri, 2009-01-09 at 18:03 +0000, Richard Purdie wrote:
>> On Fri, 2009-01-09 at 15:07 +0000, Richard Purdie wrote:
>> > I just updated to the latest kernel from git to test some other patches
>> > and after logging into GDM the X server hangs before launching the
>> > desktop (it appears to be trying to run glxinfo) on my Thinkpad T61
>> > (i915 graphics). Bisection shows this happens after applying this
>> > commit:
>> >
>> > On Mon, 2008-12-29 at 08:32 +0000, Dave Airlie wrote:
>> > > commit 7c1c2871a6a3a114853ec6836e9035ac1c0c7f7a
>> > > Author: Dave Airlie <airlied@xxxxxxxxxx>
>> > > Date: Fri Nov 28 14:22:24 2008 +1000
>
> The patch below gets my system working again with the latest kernels.
> Was dropping the drm_addmap() call for i915 intentional or not?

Yes, so now we need to find out what happens in your userspace, when
it hangs is the machine dead?

or can you ssh in? any oops in the logs? can you get a sysrq-t
backtrace for X.org and glxinfo?

Dave.
>
>
> drm: Fix userspace X lockups introduced in 7c1c2871a6a3a114853ec6836e9035ac1c0c7f7a
>
> Add back the drm_addmap() call that was dropped as part of commit
> 7c1c2871a6a3a114853ec6836e9035ac1c0c7f7a for the i915 driver, fixing X
> userspace lockups.
>
> Signed-off-by: Richard Purdie <rpurdie@xxxxxxxxxxxxxxx>
>
> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> index 62a4bf7..db61d89 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -29,6 +29,7 @@
> #include "drmP.h"
> #include "drm.h"
> #include "drm_crtc_helper.h"
> +#include "drm_sarea.h"
> #include "intel_drv.h"
> #include "i915_drm.h"
> #include "i915_drv.h"
> @@ -1007,11 +1008,24 @@ out:
> int i915_master_create(struct drm_device *dev, struct drm_master *master)
> {
> struct drm_i915_master_private *master_priv;
> + unsigned long sareapage;
> + int ret;
>
> master_priv = drm_calloc(1, sizeof(*master_priv), DRM_MEM_DRIVER);
> if (!master_priv)
> return -ENOMEM;
>
> + /* prebuild the SAREA */
> + sareapage = max(SAREA_MAX, PAGE_SIZE);
> + ret = drm_addmap(dev, 0, sareapage, _DRM_SHM, _DRM_CONTAINS_LOCK|_DRM_DRIVER,
> + &master_priv->sarea);
> + if (ret) {
> + DRM_ERROR("SAREA setup failed\n");
> + return ret;
> + }
> +
> + master_priv->sarea_priv = master_priv->sarea->handle + sizeof(struct drm_sarea);
> +
> master->driver_priv = master_priv;
> return 0;
> }
> @@ -1023,6 +1037,9 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
> if (!master_priv)
> return;
>
> + if (master_priv->sarea)
> + drm_rmmap(dev, master_priv->sarea);
> +
> drm_free(master_priv, sizeof(*master_priv), DRM_MEM_DRIVER);
>
> master->driver_priv = NULL;
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/