[Intel-gfx] [PATCH 02/10] drm/i915: Cleanup phys status page too

2015-12-14 Thread ville . syrjala
From: Ville Syrjälä 

Restore the lost phys status page cleanup.

Fixes the following splat with DMA_API_DEBUG=y:

WARNING: CPU: 0 PID: 21615 at ../lib/dma-debug.c:974 
dma_debug_device_change+0x190/0x1f0()
pci :00:02.0: DMA-API: device driver has pending DMA allocations while 
released from device [count=1]
   One of leaked entries details: [device 
address=0x23163000] [size=4096 bytes] [mapped with DMA_BIDIRECTIONAL] 
[mapped as coherent]
Modules linked in: i915(-) i2c_algo_bit drm_kms_helper syscopyarea sysfillrect 
sysimgblt fb_sys_fops drm sha256_generic hmac drbg ctr ccm sch_fq_codel 
binfmt_misc joydev mousedev arc4 ath5k iTCO_wdt mac80211 smsc_ircc2 ath 
snd_intel8x0m snd_intel8x0 snd_ac97_codec ac97_bus psmouse snd_pcm input_leds 
i2c_i801 pcspkr snd_timer cfg80211 snd soundcore i2c_core ehci_pci 
firewire_ohci ehci_hcd firewire_core lpc_ich 8139too rfkill crc_itu_t mfd_core 
mii usbcore rng_core intel_agp intel_gtt usb_common agpgart irda crc_ccitt 
fujitsu_laptop led_class parport_pc video parport evdev backlight
CPU: 0 PID: 21615 Comm: rmmod Tainted: G U  4.4.0-rc4-mgm-ovl+ #4
Hardware name: FUJITSU SIEMENS LIFEBOOK S6120/FJNB16C, BIOS Version 1.26  
05/10/2004
 e31a3de0 e31a3de0 e31a3d9c c128d4bd e31a3dd0 c1045a0c c15e00c4 e31a3dfc
 546f c15dfad2 03ce c12b3740 03ce c12b3740  0001
 f61fb8a0 e31a3de8 c1045a83 0009 e31a3de0 c15e00c4 e31a3dfc e31a3e4c
Call Trace:
 [] dump_stack+0x16/0x19
 [] warn_slowpath_common+0x8c/0xd0
 [] ? dma_debug_device_change+0x190/0x1f0
 [] ? dma_debug_device_change+0x190/0x1f0
 [] warn_slowpath_fmt+0x33/0x40
 [] dma_debug_device_change+0x190/0x1f0
 [] notifier_call_chain+0x59/0x70
 [] __blocking_notifier_call_chain+0x3f/0x80
 [] blocking_notifier_call_chain+0x1f/0x30
 [] __device_release_driver+0xc3/0xf0
 [] driver_detach+0x97/0xa0
 [] bus_remove_driver+0x40/0x90
 [] driver_unregister+0x28/0x60
 [] ? trace_hardirqs_on_caller+0x12c/0x1d0
 [] pci_unregister_driver+0x18/0x80
 [] drm_pci_exit+0x87/0xb0 [drm]
 [] i915_exit+0x1b/0x1ee [i915]
 [] SyS_delete_module+0x14c/0x210
 [] ? trace_hardirqs_on_caller+0x12c/0x1d0
 [] ? fput+0xd/0x10
 [] do_fast_syscall_32+0xa4/0x450
 [] sysenter_past_esp+0x3b/0x5d
---[ end trace c2ecbc77760f10a0 ]---
Mapped at:
 [] debug_dma_alloc_coherent+0x33/0x90
 [] drm_pci_alloc+0x18c/0x1e0 [drm]
 [] intel_init_ring_buffer+0x2af/0x490 [i915]
 [] intel_init_render_ring_buffer+0x130/0x750 [i915]
 [] i915_gem_init_rings+0x1e/0x110 [i915]

Cc: Chris Wilson 
Fixes: 5c6c600 ("drm/i915: Remove DRI1 ring accessors and API")
Signed-off-by: Ville Syrjälä 
---
 drivers/gpu/drm/i915/intel_ringbuffer.c | 22 +++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c 
b/drivers/gpu/drm/i915/intel_ringbuffer.c
index eefce9a3e9c8..0c005a3dc57f 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -1899,6 +1899,17 @@ i915_dispatch_execbuffer(struct drm_i915_gem_request 
*req,
return 0;
 }
 
+static void cleanup_phys_status_page(struct intel_engine_cs *ring)
+{
+   struct drm_i915_private *dev_priv = to_i915(ring->dev);
+
+   if (!dev_priv->status_page_dmah)
+   return;
+
+   drm_pci_free(ring->dev, dev_priv->status_page_dmah);
+   ring->status_page.page_addr = NULL;
+}
+
 static void cleanup_status_page(struct intel_engine_cs *ring)
 {
struct drm_i915_gem_object *obj;
@@ -1915,9 +1926,9 @@ static void cleanup_status_page(struct intel_engine_cs 
*ring)
 
 static int init_status_page(struct intel_engine_cs *ring)
 {
-   struct drm_i915_gem_object *obj;
+   struct drm_i915_gem_object *obj = ring->status_page.obj;
 
-   if ((obj = ring->status_page.obj) == NULL) {
+   if (obj == NULL) {
unsigned flags;
int ret;
 
@@ -2208,7 +2219,12 @@ void intel_cleanup_ring_buffer(struct intel_engine_cs 
*ring)
if (ring->cleanup)
ring->cleanup(ring);
 
-   cleanup_status_page(ring);
+   if (I915_NEED_GFX_HWS(ring->dev)) {
+   cleanup_status_page(ring);
+   } else {
+   BUG_ON(ring->id != RCS);
+   cleanup_phys_status_page(ring);
+   }
 
i915_cmd_parser_fini_ring(ring);
i915_gem_batch_pool_fini(>batch_pool);
-- 
2.4.10

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 02/10] drm/i915: Cleanup phys status page too

2015-12-14 Thread Chris Wilson
On Mon, Dec 14, 2015 at 06:23:41PM +0200, ville.syrj...@linux.intel.com wrote:
> From: Ville Syrjälä 
> 
> Restore the lost phys status page cleanup.
> 
> Fixes the following splat with DMA_API_DEBUG=y:
> 
> WARNING: CPU: 0 PID: 21615 at ../lib/dma-debug.c:974 
> dma_debug_device_change+0x190/0x1f0()
> pci :00:02.0: DMA-API: device driver has pending DMA allocations while 
> released from device [count=1]
>One of leaked entries details: [device 
> address=0x23163000] [size=4096 bytes] [mapped with DMA_BIDIRECTIONAL] 
> [mapped as coherent]
> Modules linked in: i915(-) i2c_algo_bit drm_kms_helper syscopyarea 
> sysfillrect sysimgblt fb_sys_fops drm sha256_generic hmac drbg ctr ccm 
> sch_fq_codel binfmt_misc joydev mousedev arc4 ath5k iTCO_wdt mac80211 
> smsc_ircc2 ath snd_intel8x0m snd_intel8x0 snd_ac97_codec ac97_bus psmouse 
> snd_pcm input_leds i2c_i801 pcspkr snd_timer cfg80211 snd soundcore i2c_core 
> ehci_pci firewire_ohci ehci_hcd firewire_core lpc_ich 8139too rfkill 
> crc_itu_t mfd_core mii usbcore rng_core intel_agp intel_gtt usb_common 
> agpgart irda crc_ccitt fujitsu_laptop led_class parport_pc video parport 
> evdev backlight
> CPU: 0 PID: 21615 Comm: rmmod Tainted: G U  4.4.0-rc4-mgm-ovl+ #4
> Hardware name: FUJITSU SIEMENS LIFEBOOK S6120/FJNB16C, BIOS Version 1.26  
> 05/10/2004
>  e31a3de0 e31a3de0 e31a3d9c c128d4bd e31a3dd0 c1045a0c c15e00c4 e31a3dfc
>  546f c15dfad2 03ce c12b3740 03ce c12b3740  0001
>  f61fb8a0 e31a3de8 c1045a83 0009 e31a3de0 c15e00c4 e31a3dfc e31a3e4c
> Call Trace:
>  [] dump_stack+0x16/0x19
>  [] warn_slowpath_common+0x8c/0xd0
>  [] ? dma_debug_device_change+0x190/0x1f0
>  [] ? dma_debug_device_change+0x190/0x1f0
>  [] warn_slowpath_fmt+0x33/0x40
>  [] dma_debug_device_change+0x190/0x1f0
>  [] notifier_call_chain+0x59/0x70
>  [] __blocking_notifier_call_chain+0x3f/0x80
>  [] blocking_notifier_call_chain+0x1f/0x30
>  [] __device_release_driver+0xc3/0xf0
>  [] driver_detach+0x97/0xa0
>  [] bus_remove_driver+0x40/0x90
>  [] driver_unregister+0x28/0x60
>  [] ? trace_hardirqs_on_caller+0x12c/0x1d0
>  [] pci_unregister_driver+0x18/0x80
>  [] drm_pci_exit+0x87/0xb0 [drm]
>  [] i915_exit+0x1b/0x1ee [i915]
>  [] SyS_delete_module+0x14c/0x210
>  [] ? trace_hardirqs_on_caller+0x12c/0x1d0
>  [] ? fput+0xd/0x10
>  [] do_fast_syscall_32+0xa4/0x450
>  [] sysenter_past_esp+0x3b/0x5d
> ---[ end trace c2ecbc77760f10a0 ]---
> Mapped at:
>  [] debug_dma_alloc_coherent+0x33/0x90
>  [] drm_pci_alloc+0x18c/0x1e0 [drm]
>  [] intel_init_ring_buffer+0x2af/0x490 [i915]
>  [] intel_init_render_ring_buffer+0x130/0x750 [i915]
>  [] i915_gem_init_rings+0x1e/0x110 [i915]
> 
> Cc: Chris Wilson 
> Fixes: 5c6c600 ("drm/i915: Remove DRI1 ring accessors and API")
> Signed-off-by: Ville Syrjälä 

Looks symmetrical (so I can't justify tyidying up the split :)
Reviewed-by: Chris Wilson 
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx