[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: fglrx 8.18.6 (and former probably) not working with 2.6.14 on amd64



Thorsten Müller wrote:
The fglrx drivers won't work on kernel 2.6.14 on an amd64 architecture.
I narrowed it down to changes in linux/ioctl32.h from 2.6.13.* to 2.6.14.
The declaration of the already deprecated functions/macros [...]
was deleted, which leads to an
undifined symbol register_ioctl32_conversion
undifined symbol unregister_ioctl32_conversion

I really think kernel modules shouldn't be allowed to build when there are undefined symbols during compilation. I'm not sure if this is a "feature" of the kernel build system or fglrx's makefiles... I'll have a look if I find some time.

Regarding this specific problem, apparently these two functions were already no-ops in 2.6.13, so we just need to stop calling them on kernels that don't have them. The attached patch should do the trick, please test.

--
Ciao, Flavio
--- firegl_public.c-orig	2005-10-24 18:21:59.000000000 +0200
+++ firegl_public.c	2005-11-03 15:55:30.000000000 +0100
@@ -2221,12 +2221,20 @@
 #ifdef __x86_64__
 int ATI_API_CALL __ke_register_ioctl32_conversion(unsigned int cmd, int (*handler)(unsigned int, unsigned int, unsigned long, struct file*))
 {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
+    return 0;
+#else
     return register_ioctl32_conversion(cmd, handler);
+#endif
 }
 
 void ATI_API_CALL __ke_unregister_ioctl32_conversion(unsigned int cmd)
 {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
+    return;
+#else
     unregister_ioctl32_conversion(cmd);
+#endif
 }
 #endif