ATI fglrx driver patch for Xen kernel
ATI RadeonシリーズのLinux用のドライバは、そのままXenカーネル用にコンパイルしてinsmodしてXを起動すると、カーネルまで巻き込んでハングアップしてしまう。
ネットを探し回っていろいろといじってみた結果、以下のパッチを当てるとうまく動くようになった。
パッチを当てる対象はバージョン8.30.3
参考:
http://hg.recoil.org/xen-gl.hg
diff -Naru build_mod/firegl_public.c build_mod.xen/firegl_public.c
--- build_mod/firegl_public.c 2006-10-26 22:39:30.000000000 +0900
+++ build_mod.xen/firegl_public.c 2006-11-16 22:47:57.000000000 +0900
@@ -36,6 +36,7 @@
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,71)
#if !defined(CONFIG_X86_PC)
+#if !defined(CONFIG_X86_XEN)
#if !defined(CONFIG_X86_64)
#if !defined(CONFIG_X86_VOYAGER)
#if !defined(CONFIG_X86_NUMAQ)
@@ -52,6 +53,7 @@
#endif
#endif
#endif
+#endif
#endif /* LINUX_VERSION_CODE */
/* The dirty-page-tracking patch included in NLD 9 SMP kernels defines
diff -Naru build_mod/firegl_public.h build_mod.xen/firegl_public.h
--- build_mod/firegl_public.h 2006-10-26 22:39:30.000000000 +0900
+++ build_mod.xen/firegl_public.h 2006-11-16 22:48:06.000000000 +0900
@@ -32,8 +32,13 @@
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
+#ifdef CONFIG_XEN
+#define REMAP_PAGE_RANGE_FN io_remap_pfn_range
+#define REMAP_PAGE_RANGE_STR "io_remap_pfn_range"
+#else
#define REMAP_PAGE_RANGE_FN remap_pfn_range
#define REMAP_PAGE_RANGE_STR "remap_pfn_range"
+#endif
#define REMAP_PAGE_RANGE_OFF(offset) ((offset) >> PAGE_SHIFT)
#else /* LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,9) */
@@ -44,12 +49,21 @@
#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9) */
+#ifdef CONFIG_XEN
+#define REMAP_PAGE_RANGE(vma,offset) \
+ REMAP_PAGE_RANGE_FN((vma), \
+ (vma)->vm_start, \
+ REMAP_PAGE_RANGE_OFF(offset), \
+ (vma)->vm_end - (vma)->vm_start, \
+ (vma)->vm_page_prot)
+#else
#define REMAP_PAGE_RANGE(vma,offset) \
REMAP_PAGE_RANGE_FN(FGL_VMA_API_PASS \
(vma)->vm_start, \
REMAP_PAGE_RANGE_OFF(offset), \
(vma)->vm_end - (vma)->vm_start, \
(vma)->vm_page_prot)
+#endif
/* Page table macros */
diff -Naru build_mod/make.sh build_mod.xen/make.sh
--- build_mod/make.sh 2006-10-26 22:39:30.000000000 +0900
+++ build_mod.xen/make.sh 2006-11-16 22:47:57.000000000 +0900
@@ -788,10 +788,15 @@
pgprot_t prot;
return (
+#ifdef CONFIG_X86_XEN
+ io_remap_page_range(
+ vma,
+#else
remap_page_range(
#ifdef FGL_LINUX253P1_VMA_API
vma,
#endif
+#endif
from, to, size, prot)
);
}
Usage:
$ # Download driver installer from ATI(AMD)'s website $ sh ati-driver-installer-8.30.3.run --extract $ cd fglrx-install/common/lib/modules/fglrx/build_mod $ patch -p1 < THE_PATCH_ABOVE.patch $ cp ../../../../../arch/x86/lib/modules/fglrx/build_mod/libfglrx_ip.a.GCC* ./ $ sh make.sh