ATI Proprietary driver 13.12 installation fails in openSUSE 13.1

I am posting this only for reference, in case anyone else has the same problem. I tried installing the newest fglrx driver (13.12) and the install failed. I am running kernel-default-3.12.6 but I don’t think the kernel is the problem.

The 13.11.beta.v9.4 driver installs and works perfectly. I have already filed a bug report with AMD concerning this. It can be found at: Bug 981 – fglrx 13.12 will not install while 13.11.bet.v9.4 will on kernel-default-3.12.6

Here is the pertinent part of the fglrx-install log file, in case it might be of use to anyone:


make[1]: Entering directory `/usr/src/linux-3.12.6-1.g080d0df-obj/x86_64/default'
  CC [M]  /lib/modules/fglrx/build_mod/2.6.x/firegl_public.o
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function ‘KCL_GetEffectiveUid’:
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1758:5: error: incompatible types when returning type ‘kuid_t’ but ‘KCL_TYPE_Uid’ was expected
     return current_euid();
     ^
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1762:1: warning: control reaches end of non-void function -Wreturn-type]
 }
 ^
make[4]: *** [/lib/modules/fglrx/build_mod/2.6.x/firegl_public.o] Error 1
make[3]: *** [_module_/lib/modules/fglrx/build_mod/2.6.x] Error 2

I had the same problem: http://forums.opensuse.org/english/get-technical-help-here/hardware/493644-amd-drivers-13-12-opensuse-13-1-a.html there’s a possible workaround in that thread, I haven’t tried it yet however.

The link within the forum you linked to is for “pre-built” rpm versions of the driver. It’s not a work-around. I should have mentioned in my original post that I only tried the non-distro-specific, or generic, install. I did not try building an rpm with the installer. I have not had good luck with the pre-builts and did not check. It’s quite possible that building a pre-built rpm is possible with the installer.

I am happy with the beta for now.

Sebastan Siebert’s script contains the following patch:

diff -rup fglrx.orig/firegl_public.c fglrx/firegl_public.c
--- fglrx.orig/firegl_public.c    2013-12-20 01:37:15.155648294 +0100
+++ fglrx/firegl_public.c    2013-12-21 01:02:47.201517242 +0100
@@ -1754,11 +1754,17 @@ KCL_TYPE_Pid ATI_API_CALL KCL_GetTgid(vo
  */
 KCL_TYPE_Uid ATI_API_CALL KCL_GetEffectiveUid(void)
 {
+#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS
+    return __kuid_val(current_euid());
+#else
+
 #ifdef current_euid
     return current_euid();
 #else
     return current->euid;
 #endif
+
+#endif
 }
 
 /** /brief Delay execution for the specified number of microseconds
diff -rup fglrx.orig/kcl_acpi.c fglrx/kcl_acpi.c
--- fglrx.orig/kcl_acpi.c    2013-12-20 01:13:55.000000000 +0100
+++ fglrx/kcl_acpi.c    2013-12-21 01:06:00.158734992 +0100
@@ -792,7 +792,9 @@ static unsigned int KCL_ACPI_SearchHandl
 unsigned int ATI_API_CALL KCL_ACPI_GetHandles(kcl_match_info_t *pInfo)
 {
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12)
-    #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
+    #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)
+        pInfo->video_handle = pInfo->pcidev->dev.acpi_node.companion;
+    #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
         pInfo->video_handle = pInfo->pcidev->dev.acpi_node.handle;
     #elif LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)
         pInfo->video_handle = pInfo->pcidev->dev.archdata.acpi_handle;
@@ -996,6 +998,10 @@ int ATI_API_CALL KCL_ACPI_ParseTable(cha
     {
         return KCL_ACPI_ERROR;
     }    
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,1)
+    ((acpi_tbl_table_handler)handler)(hdr);
+#else
     ((acpi_table_handler)handler)(hdr);
+#endif
     return KCL_ACPI_OK;
 }



So apply this, and fglrx 13.12 should compile.

Thanks. It worked well. Many thanks to Sebastian Siebert also.