Hello!
This problem is found in 3.0 kernel.
In i915_dma_cleanup function(drivers/gpu/drm/i915/i915_dma.c module) I found
following:
?135static int i915_dma_cleanup(struct drm_device * dev)
?136{
.......
?152 ???????/* Clear the HWS virtual address at teardown */
?153 ???????if (I915_NEED_GFX_HWS(dev))
?154 ???????????????i915_free_hws(dev);
.......
?157}
2102int i915_driver_unload(struct drm_device *dev)
2103{
........
2174 ???????????????if (!I915_NEED_GFX_HWS(dev))
2175 ???????????????????????i915_free_hws(dev);
........
2190}
I.e. in one case i915_free_hws function is called when (I915_NEED_GFX_HWS(dev))
condition is true(i915_dma_cleanup), but in other case it called when
(!I915_NEED_GFX_HWS(dev)) condition is true(in i915_driver_unload function).
This is intentional?
Corresponding init function is called only when (!I915_NEED_GFX_HWS(dev))
condition is true(in i915_driver_load function). Therefore I guess that if
condition is wrong in i915_dma_cleanup function.
Thanks,
Dmitry