Kristian Høgsberg wrote: > On Mon, Aug 17, 2009 at 10:28 AM, Thomas Hellstrom<thellst...@vmware.com> > wrote: > >> The device directory will be the base directory of the >> sysfs representation of other ttm subsystems. >> >> Signed-off-by: Thomas Hellstrom <thellst...@vmware.com> >> --- >> drivers/gpu/drm/ttm/ttm_module.c | 56 >> +++++++++++++++++++++++++++++++++++++- >> 1 files changed, 55 insertions(+), 1 deletions(-) >> >> diff --git a/drivers/gpu/drm/ttm/ttm_module.c >> b/drivers/gpu/drm/ttm/ttm_module.c >> index 59ce819..4197467 100644 >> --- a/drivers/gpu/drm/ttm/ttm_module.c >> +++ b/drivers/gpu/drm/ttm/ttm_module.c >> @@ -29,16 +29,70 @@ >> * Jerome Glisse >> */ >> #include <linux/module.h> >> -#include <ttm/ttm_module.h> >> +#include <linux/device.h> >> +#include <linux/sched.h> >> +#include "ttm/ttm_module.h" >> +#include "drm_sysfs.h" >> + >> +atomic_t device_released; >> + >> +static struct device_type ttm_drm_class_type = { >> + .name = "ttm", >> + /** >> + * Add pm ops here. >> + */ >> +}; >> + >> +static void ttm_drm_class_device_release(struct device *dev) >> +{ >> + atomic_set(&device_released, 1); >> +} >> + >> +static struct device ttm_drm_class_device = { >> + .type = &ttm_drm_class_type, >> + .release = &ttm_drm_class_device_release >> +}; >> + >> +struct kobject *ttm_get_kobj(void) >> +{ >> + struct kobject *kobj = &ttm_drm_class_device.kobj; >> + BUG_ON(kobj == NULL); >> + return kobj; >> +} >> >> static int __init ttm_init(void) >> { >> + int ret; >> + >> + ret = dev_set_name(&ttm_drm_class_device, "ttm"); >> + if (unlikely(ret != 0)) >> + return ret; >> + >> ttm_global_init(); >> + >> + atomic_set(&device_released, 0); >> + ret = drm_class_device_register(&ttm_drm_class_device); >> + if (unlikely(ret != 0)) >> + goto out_no_dev_reg; >> + >> return 0; >> +out_no_dev_reg: >> + atomic_set(&device_released, 1); >> + ttm_global_release(); >> + return ret; >> } >> >> static void __exit ttm_exit(void) >> { >> + DECLARE_WAIT_QUEUE_HEAD_ONSTACK(exit_q); >> + drm_class_device_unregister(&ttm_drm_class_device); >> + >> + /** >> + * Refuse to unload until the TTM device is released. >> + * Not sure this is 100% needed. >> + */ >> + >> + wait_event(exit_q, atomic_read(&device_released) == 1); >> > > How is this supposed to work? You need to make the wait queue public > so that the drm_class_device_release function can wake up waiters on > the queue. The atomic is just a plain integer variable, decreasing it > doesn't wake up anything. > > cheers, > Kristian > >
Ouch. You're right. Will fix. /Thomas >> ttm_global_release(); >> } >> > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > -- > _______________________________________________ > Dri-devel mailing list > Dri-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/dri-devel > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july -- _______________________________________________ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel