summarylogtreecommitdiffstats
path: root/4.2-amd-from_crimson_15.11.patch
diff options
context:
space:
mode:
authorVi0L02015-12-22 18:47:41 +0100
committerVi0L02015-12-22 18:47:41 +0100
commit64fb977e6c29ee79b0e9f01a84224c9c485d18c3 (patch)
treeec98aad855802cbdf2010430c071504f0a7c5943 /4.2-amd-from_crimson_15.11.patch
parent6273ae5dff3692ae7cc297c3fbb14221c9e7b763 (diff)
downloadaur-64fb977e6c29ee79b0e9f01a84224c9c485d18c3.tar.gz
gcc49 no more + 4.4 kernel + grsec initial support
Diffstat (limited to '4.2-amd-from_crimson_15.11.patch')
-rw-r--r--4.2-amd-from_crimson_15.11.patch447
1 files changed, 447 insertions, 0 deletions
diff --git a/4.2-amd-from_crimson_15.11.patch b/4.2-amd-from_crimson_15.11.patch
new file mode 100644
index 000000000000..cd957917b1bf
--- /dev/null
+++ b/4.2-amd-from_crimson_15.11.patch
@@ -0,0 +1,447 @@
+diff -uNr 15.12/common/lib/modules/fglrx//build_mod/firegl_public.c 15.12b/common/lib/modules/fglrx//build_mod/firegl_public.c
+--- 15.12/common/lib/modules/fglrx//build_mod/firegl_public.c 2015-09-09 00:57:14.000000000 +0200
++++ 15.12b/common/lib/modules/fglrx//build_mod/firegl_public.c 2015-11-21 00:35:38.000000000 +0100
+@@ -191,9 +191,17 @@
+ #include <linux/string.h>
+ #include <linux/gfp.h>
+ #include <linux/swap.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
+ #include "asm/i387.h"
++#else
++#include <asm/fpu/api.h>
++#endif
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
+ #include <asm/fpu-internal.h>
++#else
++#include <asm/fpu/internal.h>
++#endif
+ #endif
+
+ #include "firegl_public.h"
+@@ -1742,7 +1750,11 @@
+ unsigned long new, int size)
+ {
+ #ifndef __HAVE_ARCH_CMPXCHG
++#if defined(__i386__)
+ return __fgl_cmpxchg(ptr,old,new,size);
++#elif defined(__x86_64__)
++ return cmpxchg((unsigned long*)ptr,old,new);
++#endif
+ #else
+ /* On kernel version 2.6.34 passing a variable or unsupported size
+ * argument to the __cmpxchg macro causes the default-clause of a
+@@ -3503,10 +3515,12 @@
+ KCL_PUB_InterruptHandlerWrap,
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
+ ((useMSI) ? (SA_INTERRUPT) : (SA_SHIRQ)),
+-#else
++#elif LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)
+ //when MSI enabled. keep irq disabled when calling the action handler,
+ //exclude this IRQ from irq balancing (only on one CPU)
+- ((useMSI) ? (IRQF_DISABLED) : (IRQF_SHARED)),
++ ((useMSI) ? (IRQF_DISABLED) : (IRQF_SHARED)),
++#else
++ ((useMSI) ? (0x0) : (IRQF_SHARED)),
+ #endif
+ dev_name,
+ context);
+@@ -5031,7 +5045,7 @@
+ orig_level = kasSetExecutionLevel(kasContext.exec_level_ih);
+
+ ret = kasContext.callback_wrapper_ret(ih_routine, ih_context);
+- KCL_DEBUG1(FN_FIREGL_KAS,"Interrupt handler returned 0x%08X\n", ret);
++ KCL_DEBUG1(FN_FIREGL_KAS,"Interrupt handler returned 0x%08X\n", ret);
+
+ kasSetExecutionLevel(orig_level);
+ spin_unlock(&kasContext.lock_ih);
+@@ -6436,21 +6450,36 @@
+ struct fpu *fpu = &tsk->thread.fpu;
+
+ if(static_cpu_has(X86_FEATURE_XSAVE)) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
+ fpu_xsave(fpu);
+ if (!(fpu->state->xsave.xsave_hdr.xstate_bv & XSTATE_FP))
+- return 1;
++#else
++ copy_xregs_to_kernel(&fpu->state.xsave);
++ if (!(fpu->state.xsave.header.xfeatures & XSTATE_FP))
++#endif
++ return 1;
+ } else if (static_cpu_has(X86_FEATURE_FXSR)) {
+- fpu_fxsave(fpu);
+- } else {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
++ fpu_fxsave(fpu);
++#else
++ copy_fxregs_to_kernel(fpu);
++#endif
++} else {
+ asm volatile("fnsave %[fx]; fwait"
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
+ : [fx] "=m" (fpu->state->fsave));
+- return 0;
++#else
++ : [fx] "=m" (fpu->state.fsave));
++#endif
++ return 0;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
+ if (unlikely(fpu->state->fxsave.swd & X87_FSW_ES)) {
+- asm volatile("fnclex");
+- return 0;
++ asm volatile("fnclex");
++ return 0;
+ }
++#endif
+ return 1;
+ }
+ #endif
+@@ -6462,8 +6491,13 @@
+ void ATI_API_CALL KCL_fpu_begin(void)
+ {
+ #ifdef CONFIG_X86_64
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
+ kernel_fpu_begin();
+ #else
++ preempt_disable();
++ __kernel_fpu_begin();
++#endif
++#else
+ #ifdef TS_USEDFPU
+ struct thread_info *cur_thread = current_thread_info();
+ struct task_struct *cur_task = get_current();
+@@ -6487,8 +6521,12 @@
+ /* The thread structure is changed with the commit below for kernel 3.3:
+ * https://github.com/torvalds/linux/commit/7e16838d94b566a17b65231073d179bc04d590c8
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
+ if (cur_task->thread.fpu.has_fpu)
+ #else
++ if (cur_task->thread.fpu.fpregs_active)
++#endif
++#else
+ if (cur_task->thread.has_fpu)
+ #endif
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)
+@@ -6508,7 +6546,12 @@
+ */
+ void ATI_API_CALL KCL_fpu_end(void)
+ {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
+ kernel_fpu_end();
++#else
++ __kernel_fpu_end();
++ preempt_enable();
++#endif
+ }
+
+ /** Create new directory entry under "/proc/...."
+diff -uNr 15.12/common/lib/modules/fglrx//build_mod/kcl_debug.c 15.12b/common/lib/modules/fglrx//build_mod/kcl_debug.c
+--- 15.12/common/lib/modules/fglrx//build_mod/kcl_debug.c 2015-09-09 00:57:14.000000000 +0200
++++ 15.12b/common/lib/modules/fglrx//build_mod/kcl_debug.c 2015-11-21 00:35:38.000000000 +0100
+@@ -35,10 +35,10 @@
+ #include <linux/kernel.h>
+ #include <linux/sysrq.h>
+ #include <linux/thread_info.h>
+-
++#include "firegl_public.h"
+ #include "kcl_debug.h"
+
+-extern void* ATI_API_CALL KCL_MEM_SmallBufferAllocAtomic(unsigned long size);
++extern void* ATI_API_CALL KCL_MEM_SmallBufferAllocAtomic(kcl_size_t size);
+ extern void ATI_API_CALL KCL_MEM_SmallBufferFree(void* p);
+
+ extern int ATI_API_CALL firegl_debug_dump(void);
+@@ -156,6 +156,47 @@
+ KCL_MEM_SmallBufferFree(buffer);
+ }
+
++/** \brief Print debug information to the OS debug console according to traceMask and debugMask
++ * \param traceMask Bit mask of enabled trace function
++ * \param debugMask Bit mask of enabled debug level. 0-7 total
++ * \param name function name
++ * \param line line number inside the file
++ * \param the print parameter
++ * \param fmt printf-like formatting string
++ * \param ... printf-like parameters
++ */
++void ATI_API_CALL KCL_DEBUG_Print_Trace(unsigned int traceMask, unsigned int debugMask, void* name, int line, long param, const char* fmt, ...)
++{
++ int print = firegl_trace(traceMask, debugMask, name, line, param);
++ if(print)
++ {
++ int len;
++ char* buffer=KCL_MEM_SmallBufferAllocAtomic(MAX_STRING_LENGTH);
++ if(buffer==NULL)
++ return;
++ if(fmt == NULL)
++ {
++ buffer[0] = '\n';
++ buffer[1] = '\0';
++ }
++ else
++ {
++ va_list marker;
++ va_start(marker, fmt);
++ kcl_vsnprintf(buffer,255,fmt, marker);
++ va_end(marker);
++ len = strlen(buffer);
++ if(buffer[len-1] != '\n')
++ {
++ buffer[len]='\n';
++ buffer[len+1]='\0';
++ }
++ }
++ KCL_DEBUG_Print("[fglrx] %s:%d %s", (char*)name, line, buffer);
++ KCL_MEM_SmallBufferFree(buffer);
++ }
++}
++
+ /** \brief Register keyboard handler to dump module internal state
+ * \param enable 1 to register the handler, 0 to unregister it
+ * \return 0
+diff -uNr 15.12/common/lib/modules/fglrx//build_mod/kcl_debug.h 15.12b/common/lib/modules/fglrx//build_mod/kcl_debug.h
+--- 15.12/common/lib/modules/fglrx//build_mod/kcl_debug.h 2015-09-09 00:57:14.000000000 +0200
++++ 15.12b/common/lib/modules/fglrx//build_mod/kcl_debug.h 2015-11-21 00:35:38.000000000 +0100
+@@ -64,17 +64,22 @@
+ FN_GENERIC_MAXIMUM = 0x3f
+ } FN_TRACE;
+
+-extern void ATI_API_CALL firegl_trace(unsigned int traceMask,
++extern int ATI_API_CALL firegl_trace(unsigned int traceMask,
+ unsigned int debugMask,
+ void* name,
+ int line,
+- long param,
+- const char* fmt,
+- ...);
++ long param);
+
+ #define MAX_STRING_LENGTH 512
+
+ void ATI_API_CALL KCL_DEBUG_Print(const char* fmt, ...);
++void ATI_API_CALL KCL_DEBUG_Print_Trace(unsigned int traceMask,
++ unsigned int debugMask,
++ void* name,
++ int line,
++ long param,
++ const char* fmt,
++ ...);
+ int ATI_API_CALL KCL_DEBUG_RegKbdHandler(int enable);
+ int ATI_API_CALL KCL_DEBUG_RegKbdDumpHandler(int enable);
+ void ATI_API_CALL KCL_DEBUG_OsDump(void);
+@@ -211,102 +216,106 @@
+ KCL_DEBUG_Print("<6>[fglrx] " fmt, ##arg)
+
+
+-#define KCL_DEBUG_TRACE(m, p, fmt, arg...) \
+- do \
+- { \
+- firegl_trace(m, \
+- FN_DEBUG_TRACE, \
+- (void*)__FUNCTION__, \
+- (int)(__LINE__), \
+- (long)(p), \
+- fmt, \
+- ##arg); \
++#define KCL_DEBUG_TRACE(m, p, fmt, arg...) \
++ do \
++ { \
++ KCL_DEBUG_Print_Trace(m, \
++ FN_DEBUG_TRACE, \
++ (void*)__FUNCTION__, \
++ (int)(__LINE__), \
++ (long)(p), \
++ fmt, \
++ ##arg); \
+ } while (0)
+
+ #define KCL_DEBUG_TRACEIN KCL_DEBUG_TRACE
+
+-#define KCL_DEBUG_TRACEOUT(m, p, fmt, arg...) \
+- do \
+- { \
+- firegl_trace(m, \
+- FN_DEBUG_TRACEOUT, \
+- (void*)__FUNCTION__, \
+- (int)(__LINE__), \
+- (long)(p), \
+- fmt, \
+- ##arg); \
+- } while (0)
+-
+-#define KCL_DEBUG1(m, fmt, arg...) \
+- do \
+- { \
+- firegl_trace(m, \
+- FN_DEBUG_LEVEL1, \
+- (void*)__FUNCTION__, \
+- (int)__LINE__, \
+- 0, \
+- fmt, \
+- ##arg); \
+- } while (0)
+-
+-#define KCL_DEBUG2(m, fmt, arg...) \
+- do \
+- { \
+- firegl_trace(m, \
+- FN_DEBUG_LEVEL2, \
+- (void*)__FUNCTION__, \
+- (int)__LINE__, \
+- 0, \
+- fmt, \
+- ##arg); \
+- } while (0)
+-
+-#define KCL_DEBUG3(m, fmt, arg...) \
+- do \
+- { \
+- firegl_trace(m, \
+- FN_DEBUG_LEVEL3, \
+- (void*)__FUNCTION__, \
+- (int)__LINE__, \
+- 0, \
+- fmt, \
+- ##arg); \
+- } while (0)
+-
+-#define KCL_DEBUG4(m, fmt, arg...) \
+- do \
+- { \
+- firegl_trace(m, \
+- FN_DEBUG_LEVEL4, \
+- (void*)__FUNCTION__, \
+- (int)__LINE__, \
+- 0, \
+- fmt, \
+- ##arg); \
+- } while (0)
+-
+-#define KCL_DEBUG5(m, fmt, arg...) \
+- do \
+- { \
+- firegl_trace(m, \
+- FN_DEBUG_LEVEL5, \
+- (void*)__FUNCTION__, \
+- (int)__LINE__, \
+- 0, \
+- fmt, \
+- ##arg); \
+- } while (0)
+-
+-#define KCL_DEBUG6(m, fmt, arg...) \
+- do \
+- { \
+- firegl_trace(m, \
+- FN_DEBUG_LEVEL6, \
+- (void*)__FUNCTION__, \
+- (int)__LINE__, \
+- 0, \
+- fmt, \
+- ##arg); \
++#define KCL_DEBUG_TRACEOUT(m, p, fmt, arg...) \
++ do \
++ { \
++ KCL_DEBUG_Print_Trace(m, \
++ FN_DEBUG_TRACEOUT, \
++ (void*)__FUNCTION__, \
++ (int)(__LINE__), \
++ (long)(p), \
++ fmt, \
++ ##arg); \
++ } while (0)
++
++
++#define KCL_DEBUG1(m, fmt, arg...) \
++ do \
++ { \
++ KCL_DEBUG_Print_Trace(m, \
++ FN_DEBUG_LEVEL1, \
++ (void*)__FUNCTION__, \
++ (int)(__LINE__), \
++ 0, \
++ fmt, \
++ ##arg); \
++ } while (0)
++
++#define KCL_DEBUG2(m, fmt, arg...) \
++ do \
++ { \
++ KCL_DEBUG_Print_Trace(m, \
++ FN_DEBUG_LEVEL2, \
++ (void*)__FUNCTION__, \
++ (int)(__LINE__), \
++ 0, \
++ fmt, \
++ ##arg); \
++ } while (0)
++
++#define KCL_DEBUG3(m, fmt, arg...) \
++ do \
++ { \
++ KCL_DEBUG_Print_Trace(m, \
++ FN_DEBUG_LEVEL3, \
++ (void*)__FUNCTION__, \
++ (int)(__LINE__), \
++ 0, \
++ fmt, \
++ ##arg); \
++ } while (0)
++
++
++#define KCL_DEBUG4(m, fmt, arg...) \
++ do \
++ { \
++ KCL_DEBUG_Print_Trace(m, \
++ FN_DEBUG_LEVEL4, \
++ (void*)__FUNCTION__, \
++ (int)(__LINE__), \
++ 0, \
++ fmt, \
++ ##arg); \
++ } while (0)
++
++
++#define KCL_DEBUG5(m, fmt, arg...) \
++ do \
++ { \
++ KCL_DEBUG_Print_Trace(m, \
++ FN_DEBUG_LEVEL5, \
++ (void*)__FUNCTION__, \
++ (int)(__LINE__), \
++ 0, \
++ fmt, \
++ ##arg); \
++ } while (0)
++
++
++#define KCL_DEBUG6(m, fmt, arg...) \
++ do \
++ { \
++ KCL_DEBUG_Print_Trace(m, \
++ FN_DEBUG_LEVEL6, \
++ (void*)__FUNCTION__, \
++ (int)(__LINE__), \
++ 0, \
++ fmt, \
++ ##arg); \
+ } while (0)
+
+ #endif
+diff -uNr 15.12/common/lib/modules/fglrx//build_mod/kcl_str.c 15.12b/common/lib/modules/fglrx//build_mod/kcl_str.c
+--- 15.12/common/lib/modules/fglrx//build_mod/kcl_str.c 2015-09-09 00:57:14.000000000 +0200
++++ 15.12b/common/lib/modules/fglrx//build_mod/kcl_str.c 2015-11-21 00:35:38.000000000 +0100
+@@ -42,6 +42,10 @@
+ #include "kcl_type.h"
+ #include "kcl_str.h"
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0)
++#define strnicmp strncasecmp
++#endif
++
+ /** \brief Fill memory with a constant byte
+ * \param s Pointer to memory
+ * \param c Initializing value