--- ati/common/lib/modules/fglrx/build_mod/firegl_public.c 2012-06-22 22:56:42.000000000 +0200 +++ ati/common/lib/modules/fglrx/build_mod/firegl_public.c 2012-08-15 12:43:52.000000000 +0200 @@ -34,6 +34,17 @@ #include #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0) +#define cpu_possible_map (*(cpumask_t *)cpu_possible_mask) +#define cpu_online_map (*(cpumask_t *)cpu_online_mask) +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0) +#define do_mmap vm_mmap +#endif + + + #if !defined(CONFIG_X86) #if !defined(CONFIG_X86_PC) #if !defined(CONFIG_X86_XEN) @@ -188,6 +199,12 @@ #include #include "asm/i387.h" +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0) +#include +#endif + + + #include "firegl_public.h" #include "kcl_osconfig.h" #include "kcl_io.h" @@ -2108,6 +2125,13 @@ } } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0) + #define NO_DO_MMAP + #define do_mmap(a,b,c,d,e,f) vm_mmap(a, b, c, d, e, f) + #define do_munmap(a,b,c) vm_munmap(b, c) +#endif + + unsigned long ATI_API_CALL KCL_MEM_AllocLinearAddrInterval( KCL_IO_FILE_Handle file, unsigned long addr, @@ -2120,9 +2144,14 @@ flags = MAP_SHARED; prot = PROT_READ|PROT_WRITE; +#ifdef NO_DO_MMAP + vaddr = (void *) vm_mmap(file, 0, len, prot, flags, pgoff); +#else + down_write(¤t->mm->mmap_sem); vaddr = (void *) do_mmap(file, 0, len, prot, flags, pgoff); up_write(¤t->mm->mmap_sem); +#endif if (IS_ERR(vaddr)) return 0; else @@ -2132,8 +2161,10 @@ int ATI_API_CALL KCL_MEM_ReleaseLinearAddrInterval(unsigned long addr, unsigned long len) { int retcode = 0; - +#ifndef NO_DO_MMAP down_write(¤t->mm->mmap_sem); +#endif + #ifdef FGL_LINUX_RHEL_MUNMAP_API retcode = do_munmap(current->mm, addr, @@ -2144,7 +2175,9 @@ addr, len); #endif +#ifndef NO_DO_MMAP up_write(¤t->mm->mmap_sem); +#endif return retcode; } @@ -4156,7 +4189,7 @@ { unsigned int p; KCL_DEBUG5(FN_FIREGL_KAS, "%d\n", level_init); - for_each_cpu_mask(p, cpu_possible_map) + for_each_possible_cpu(p) { KCL_DEBUG1(FN_FIREGL_KAS,"Setting initial execution level for CPU # %d\n", p); preempt_disable();