drm_device_t *dev);
int (*info_unregister)(int minor);
struct class_simple *drm_class;
+ int *info_count;
};
extern struct drm_stub_info DRM(stub_info);
static void __exit drm_exit (void)
{
+ DRM_DEBUG( "\n" );
if (DRM(fb_loaded)==1)
{
int i;
DRM(stub_root) = DRM(proc_init)(dev, i, DRM(stub_root),
&DRM(stub_list)[i]
.dev_root);
+ *DRM(stub_info).info_count++;
return i;
}
}
DRM(stub_list)[minor].fops = NULL;
DRM(proc_cleanup)(minor, DRM(stub_root),
DRM(stub_list)[minor].dev_root);
- if (minor) {
+
+ *DRM(stub_info).info_count--;
+
+ if ((*DRM(stub_info).info_count)!=0) {
inter_module_put("drm");
} else {
inter_module_unregister("drm");
DRM(stub_info).info_register = i->info_register;
DRM(stub_info).info_unregister = i->info_unregister;
DRM(stub_info).drm_class = i->drm_class;
+ DRM(stub_info).info_count = i->info_count;
DRM_DEBUG("already registered\n");
- } else if (DRM(stub_info).drm_class == NULL) {
+ } else if (*DRM(stub_info).info_count == 0) {
DRM(stub_info).drm_class = class_simple_create(THIS_MODULE, "drm");
if (IS_ERR(DRM(stub_info).drm_class)) {
printk (KERN_ERR "Error creating drm class.\n");
return -1;
}
+int DRM(stub_count);
+
/** Stub information */
struct drm_stub_info DRM(stub_info) = {
.info_register = DRM(stub_getminor),
.info_unregister = DRM(stub_putminor),
.drm_class = NULL,
+ .info_count = &DRM(stub_count),
};
drm_device_t *dev);
int (*info_unregister)(int minor);
struct class_simple *drm_class;
+ int *info_count;
};
extern struct drm_stub_info DRM(stub_info);
static void __exit drm_exit (void)
{
+ DRM_DEBUG( "\n" );
if (DRM(fb_loaded)==1)
{
int i;
DRM(stub_root) = DRM(proc_init)(dev, i, DRM(stub_root),
&DRM(stub_list)[i]
.dev_root);
+ *DRM(stub_info).info_count++;
return i;
}
}
DRM(stub_list)[minor].fops = NULL;
DRM(proc_cleanup)(minor, DRM(stub_root),
DRM(stub_list)[minor].dev_root);
- if (minor) {
+
+ *DRM(stub_info).info_count--;
+
+ if ((*DRM(stub_info).info_count)!=0) {
inter_module_put("drm");
} else {
inter_module_unregister("drm");
DRM(stub_info).info_register = i->info_register;
DRM(stub_info).info_unregister = i->info_unregister;
DRM(stub_info).drm_class = i->drm_class;
+ DRM(stub_info).info_count = i->info_count;
DRM_DEBUG("already registered\n");
- } else if (DRM(stub_info).drm_class == NULL) {
+ } else if (*DRM(stub_info).info_count == 0) {
DRM(stub_info).drm_class = class_simple_create(THIS_MODULE, "drm");
if (IS_ERR(DRM(stub_info).drm_class)) {
printk (KERN_ERR "Error creating drm class.\n");
return -1;
}
+int DRM(stub_count);
+
/** Stub information */
struct drm_stub_info DRM(stub_info) = {
.info_register = DRM(stub_getminor),
.info_unregister = DRM(stub_putminor),
.drm_class = NULL,
+ .info_count = &DRM(stub_count),
};