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