File drm-link_drm_into_nouveau.diff of Package nouveau

--- drm/linux-core/Makefile.kernel
+++ drm/linux-core/Makefile.kernel
@@ -52,7 +52,9 @@
 xgi-objs    += xgi_ioc32.o
 endif
 
-obj-m			+= drm.o
+# Changed to not build drm.ko but link drm into nouveau.ko:
+nouveau-objs            += $(drm-objs)
+
 obj-$(CONFIG_DRM_TDFX)	+= tdfx.o
 obj-$(CONFIG_DRM_R128)	+= r128.o
 obj-$(CONFIG_DRM_RADEON)+= radeon.o
--- drm/linux-core/drm_drv.c
+++ drm/linux-core/drm_drv.c
@@ -462,7 +462,7 @@
 	.open = drm_stub_open
 };
 
-static int __init drm_core_init(void)
+int __init drm_core_init(void)
 {
 	int ret;
 	struct sysinfo si;
@@ -525,7 +525,7 @@
 	return ret;
 }
 
-static void __exit drm_core_exit(void)
+void __exit drm_core_exit(void)
 {
 	remove_proc_entry("dri", NULL);
 	drm_sysfs_destroy();
@@ -535,8 +535,6 @@
 	idr_destroy(&drm_minors_idr);
 }
 
-module_init(drm_core_init);
-module_exit(drm_core_exit);
 
 /**
  * Get version information
--- drm/linux-core/nouveau_drv.c
+++ drm/linux-core/nouveau_drv.c
@@ -101,8 +101,14 @@
 	return drm_get_dev(pdev, ent, &driver);
 }
 
+int __init drm_core_init(void);
+void __exit drm_core_exit(void);
+
 static int __init nouveau_init(void)
 {
+	int ret = drm_core_init();
+	if (ret)
+		return ret;
 	driver.num_ioctls = nouveau_max_ioctl;
 	return drm_init(&driver, pciidlist);
 }
@@ -110,6 +116,7 @@
 static void __exit nouveau_exit(void)
 {
 	drm_exit(&driver);
+	drm_core_exit();
 }
 
 module_init(nouveau_init);
openSUSE Build Service is sponsored by