drm: missing init_mm symbol, compatibility fix
authorPekka Paalanen <pq@iki.fi>
Mon, 27 Oct 2008 19:21:15 +0000 (21:21 +0200)
committerPekka Paalanen <pq@iki.fi>
Mon, 27 Oct 2008 19:21:15 +0000 (21:21 +0200)
The drm_compat.c version of kmap_atomic_prot_pfn() uses the macro
pgd_offset_k(), which references the symbol init_mm.
Starting in 2.6.25, init_mm is no longer exported by default.

The only user of kmap_atomic_prot_pfn() is i915, so this should
not hurt anyone, and it allows people to load drm.ko.

Signed-off-by: Pekka Paalanen <pq@iki.fi>
linux-core/drm_compat.h

index c7f72e3..e09be47 100644 (file)
@@ -333,9 +333,24 @@ typedef _Bool                   bool;
 
 
 #if (defined(CONFIG_X86) && defined(CONFIG_X86_32) && defined(CONFIG_HIGHMEM))
+/*
+ * pgd_offset_k() is a macro that uses the symbol init_mm,
+ * check that it is available.
+ */
+#  if ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) || \
+       defined(CONFIG_UNUSED_SYMBOLS))
 #define DRM_KMAP_ATOMIC_PROT_PFN
 extern void *kmap_atomic_prot_pfn(unsigned long pfn, enum km_type type,
                                  pgprot_t protection);
+#  else
+#warning "init_mm is not available on this kernel!"
+static inline void *kmap_atomic_prot_pfn(unsigned long pfn, enum km_type type,
+                                        pgprot_t protection)
+{
+       /* stub */
+       return NULL;
+}
+#  endif /* no init_mm */
 #endif
 
 #if !defined(flush_agp_mappings)