A physically mapped hardware status page is allocated at driver load time but was never freed. Call the existing code to free this page at driver unload time on hardware which uses this kind.
Signed-off-by: Keith Packard keithp@keithp.com --- drivers/gpu/drm/i915/i915_dma.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 9d67b48..98bf1f0 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -2305,6 +2305,9 @@ int i915_driver_unload(struct drm_device *dev) intel_cleanup_overlay(dev); }
+ if (!I915_NEED_GFX_HWS(dev)) + i915_free_hws(dev); + intel_teardown_mchbar(dev);
pci_dev_put(dev_priv->bridge_dev);
On Wed, 2010-10-06 at 21:24 -0700, Keith Packard wrote:
A physically mapped hardware status page is allocated at driver load time but was never freed. Call the existing code to free this page at driver unload time on hardware which uses this kind.
the free_hws gets called after we disappear the mmio mapping for the registers. it then writes a register after killing the hws, and oopses.
Dave.
Signed-off-by: Keith Packard keithp@keithp.com
drivers/gpu/drm/i915/i915_dma.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 9d67b48..98bf1f0 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -2305,6 +2305,9 @@ int i915_driver_unload(struct drm_device *dev) intel_cleanup_overlay(dev); }
if (!I915_NEED_GFX_HWS(dev))
i915_free_hws(dev);
intel_teardown_mchbar(dev);
pci_dev_put(dev_priv->bridge_dev);
On Thu, 07 Oct 2010 15:43:43 +1000, Dave Airlie airlied@redhat.com wrote:
On Wed, 2010-10-06 at 21:24 -0700, Keith Packard wrote:
A physically mapped hardware status page is allocated at driver load time but was never freed. Call the existing code to free this page at driver unload time on hardware which uses this kind.
the free_hws gets called after we disappear the mmio mapping for the registers. it then writes a register after killing the hws, and oopses.
Right, freeing the hws page is a definite oversight. It looks like we should only be doing so on the KMS-only path anyway which neatly pulls the call before the mmio teardown.
Applied with the amendment to -next. -Chris
dri-devel@lists.freedesktop.org