Check that the AGPGART "drm_agp" symbol pointer is valid before
authorJose Fonseca <jrfonseca@users.sourceforge.net>
Sat, 7 Jun 2003 12:30:22 +0000 (12:30 +0000)
committerJose Fonseca <jrfonseca@users.sourceforge.net>
Sat, 7 Jun 2003 12:30:22 +0000 (12:30 +0000)
    initializing the DRM device - this was causing a kernel oops when the
    AGPGART module wasn't loaded.

linux/drm_agp.h
linux/drm_agp_tmp.h

index 27c2b29..251245e 100644 (file)
@@ -70,7 +70,7 @@ typedef struct drm_agp_head {
 
 extern int DRM(agp_acquire)(void);
 extern void DRM(agp_release)(void);
-extern void DRM(agp_enable)(unsigned mode);
+extern void DRM(agp_enable)(unsigned long mode);
 extern agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type);
 extern int DRM(agp_free_memory)(agp_memory *handle);
 extern int DRM(agp_bind_memory)(agp_memory *handle, off_t start);
index c247ec8..2418d79 100644 (file)
@@ -77,7 +77,7 @@ void DRM(agp_release)(void)
 /**
  * Enable the AGP bus.
  */
-void DRM(agp_enable)(unsigned mode)
+void DRM(agp_enable)(unsigned long mode)
 {
        if (drm_agp->enable)
                drm_agp->enable(mode);
@@ -494,6 +494,9 @@ void DRM(agp_init_dev)(drm_device_t *dev)
 {
        drm_agp_head_t *head         = NULL;
 
+       if (!drm_agp)
+               return;
+
        if (!(head = DRM(alloc)(sizeof(*head), DRM_MEM_AGPLISTS)))
                return;
 
@@ -501,6 +504,7 @@ void DRM(agp_init_dev)(drm_device_t *dev)
        drm_agp->copy_info(&head->agp_info);
        if (head->agp_info.chipset == NOT_SUPPORTED) {
                DRM(free)(head, sizeof(*head), DRM_MEM_AGPLISTS);
+               return;
        }
        head->memory = NULL;
 #if LINUX_VERSION_CODE <= 0x020408