--- common.orig/lib/modules/fglrx/build_mod/firegl_public.c 2008-10-01 10:38:13.000000000 +0200 +++ common/lib/modules/fglrx/build_mod/firegl_public.c 2008-10-01 10:40:19.000000000 +0200 @@ -2669,7 +2669,11 @@ /*Some kernel developer removed the export of symbol "flush_tlb_page" on 2.6.25 x86_64 SMP kernel. Define a simple version here.*/ #if defined(__x86_64__) && defined(CONFIG_SMP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) + on_each_cpu(KCL_flush_tlb_one, &va, 1); +#else on_each_cpu(KCL_flush_tlb_one, &va, 1, 1); +#endif #else flush_tlb_page(vma, va); #endif @@ -3077,7 +3081,11 @@ { #ifdef CONFIG_SMP /* write back invalidate all other CPUs (exported by kernel) */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) + if (smp_call_function(deferred_flush, NULL, 0) != 0) +#else if (smp_call_function(deferred_flush, NULL, 1, 0) != 0) +#endif panic("timed out waiting for the other CPUs!\n"); /* invalidate this CPU */ @@ -4796,8 +4804,12 @@ void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) { #ifdef CONFIG_SMP +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) + smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 1 ); +#else smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 0, 1 ); #endif +#endif } #ifdef FIREGL_USWC_SUPPORT @@ -4910,7 +4922,11 @@ } #ifdef CONFIG_SMP +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) + if (smp_call_function(KCL_setup_pat, NULL, 1) != 0) +#else if (smp_call_function(KCL_setup_pat, NULL, 0, 1) != 0) +#endif return 0; #endif KCL_setup_pat(NULL); @@ -4929,7 +4945,11 @@ } #ifdef CONFIG_SMP +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) + if (smp_call_function(KCL_setup_pat, NULL, 1) != 0) +#else if (smp_call_function(KCL_restore_pat, NULL, 0, 1) != 0) +#endif return; #endif KCL_restore_pat(NULL);