On Wed, Oct 9, 2013 at 3:31 PM, Dave Airlie airlied@gmail.com wrote:
On Wed, Oct 2, 2013 at 7:23 PM, David Herrmann dh.herrmann@gmail.com wrote:
Hi
This cleans up the bus drivers in DRM. Instead of copying the device alloc/free semantics into each bus driver (drm_{pci,platform,usb}.c) we now have a central place in drm_stub.c.
This introduces drm_dev_{alloc,free,register,unregister}(). They have the same semantics as most other kernel subsystems. *_alloc() allocates a new device and populates the static fields and sub-objects. *_free() frees an unregistered object allocated via *_alloc(). *_register() registers a DRM device and *_unregister() obviously unregisters a DRM device. A *_free() is still needed after calling *_unregister() (same as for "struct device"). No ref-counting is added as it is not required by any driver.
Note that the bus drivers are modified to use the new helpers directly. However, I didn't modify the drivers to use *_unregister() and *_free() directly. Instead, the drm_put_dev() helper was modified to use these. Reason for that is that I have pending patches to make device hotplugging safer regarding mmaps. But these aren't ready, yet. Hopefully I can get them ready for rc5 or rc6.
Tested on nouveau.
Okay I've merged this series, a follow-on to fix the AGP bits like Daniel suggested would be good.
Actually this oopses i915 on startup, I fixed up the lack of passing flags into drm_dev_register, so it can be passed to load, and it seems to work now, I've squashed my fix into the series in my tree
please read/review the series for your learning pleasure.
Dave.