diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2016-08-29 10:39:04 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2016-08-29 10:39:04 -0400 |
commit | d860410d4c6c217af0ec27cbeb0f2160e33019b6 (patch) | |
tree | 949ec7dc7f5a55712d41c8df4fe0e47de44a39c7 | |
parent | 5eebd8f465e284dc49e6af2ba46e2f216bb4dbe9 (diff) | |
download | 4.8-rt-patches-d860410d4c6c217af0ec27cbeb0f2160e33019b6.tar.gz |
ppc: lazy refreshrt-v4.6-3473-g0b86c75db6e7
-rw-r--r-- | patches/powerpc-preempt-lazy-support.patch | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/patches/powerpc-preempt-lazy-support.patch b/patches/powerpc-preempt-lazy-support.patch index 08c9c8af88cd66..3f0b2296d59fe2 100644 --- a/patches/powerpc-preempt-lazy-support.patch +++ b/patches/powerpc-preempt-lazy-support.patch @@ -1,18 +1,14 @@ +From 21f8009a05689304fbc633692c2f0cdca19692af Mon Sep 17 00:00:00 2001 From: Thomas Gleixner <tglx@linutronix.de> Date: Thu, 1 Nov 2012 10:14:11 +0100 -Subject: powerpc: Add support for lazy preemption +Subject: [PATCH] powerpc: Add support for lazy preemption Implement the powerpc pieces for lazy preempt. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> ---- - arch/powerpc/Kconfig | 1 + - arch/powerpc/include/asm/thread_info.h | 11 ++++++++--- - arch/powerpc/kernel/asm-offsets.c | 1 + - arch/powerpc/kernel/entry_32.S | 17 ++++++++++++----- - arch/powerpc/kernel/entry_64.S | 14 +++++++++++--- - 5 files changed, 33 insertions(+), 11 deletions(-) +diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig +index 4f99c5dd9012..16408bc69f22 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -139,6 +139,7 @@ config PPC @@ -23,6 +19,8 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> select HAVE_MOD_ARCH_SPECIFIC select MODULES_USE_ELF_RELA select CLONE_BACKWARDS +diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h +index 8febc3f66d53..4de82a591d45 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h @@ -42,6 +42,8 @@ struct thread_info { @@ -32,9 +30,9 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> + int preempt_lazy_count; /* 0 => preemptable, + <0 => BUG */ unsigned long local_flags; /* private flags for thread */ - - /* low level flags - has atomic operations done on it */ -@@ -82,8 +84,7 @@ static inline struct thread_info *curren + #ifdef CONFIG_LIVEPATCH + unsigned long *livepatch_sp; +@@ -84,8 +86,7 @@ static inline struct thread_info *current_thread_info(void) #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ #define TIF_SIGPENDING 1 /* signal pending */ #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ @@ -44,7 +42,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> #define TIF_32BIT 4 /* 32 bit binary */ #define TIF_RESTORE_TM 5 /* need to restore TM FP/VEC/VSX */ #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */ -@@ -101,6 +102,8 @@ static inline struct thread_info *curren +@@ -103,6 +104,8 @@ static inline struct thread_info *current_thread_info(void) #if defined(CONFIG_PPC64) #define TIF_ELF2ABI 18 /* function descriptors must die! */ #endif @@ -53,7 +51,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> /* as above, but as bit values */ #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) -@@ -119,14 +122,16 @@ static inline struct thread_info *curren +@@ -121,14 +124,16 @@ static inline struct thread_info *current_thread_info(void) #define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT) #define _TIF_EMULATE_STACK_STORE (1<<TIF_EMULATE_STACK_STORE) #define _TIF_NOHZ (1<<TIF_NOHZ) @@ -71,9 +69,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> /* Bits in local_flags */ /* Don't move TLF_NAPPING without adjusting the code in entry_32.S */ +diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c +index c9370d4e36bd..b9dda6411bea 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c -@@ -162,6 +162,7 @@ int main(void) +@@ -166,6 +166,7 @@ int main(void) DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); DEFINE(TI_LOCAL_FLAGS, offsetof(struct thread_info, local_flags)); DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); @@ -81,9 +81,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> DEFINE(TI_TASK, offsetof(struct thread_info, task)); DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); +diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S +index 2405631e91a2..c21b4b42eaa0 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S -@@ -818,7 +818,14 @@ user_exc_return: /* r10 contains MSR_KE +@@ -818,7 +818,14 @@ resume_kernel: cmpwi 0,r0,0 /* if non-zero, just restore regs and return */ bne restore andi. r8,r8,_TIF_NEED_RESCHED @@ -98,7 +100,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> lwz r3,_MSR(r1) andi. r0,r3,MSR_EE /* interrupts off? */ beq restore /* don't schedule if so */ -@@ -829,11 +836,11 @@ user_exc_return: /* r10 contains MSR_KE +@@ -829,11 +836,11 @@ resume_kernel: */ bl trace_hardirqs_off #endif @@ -113,7 +115,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> #ifdef CONFIG_TRACE_IRQFLAGS /* And now, to properly rebalance the above, we tell lockdep they * are being turned back on, which will happen when we return -@@ -1154,7 +1161,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRE +@@ -1154,7 +1161,7 @@ global_dbcr0: #endif /* !(CONFIG_4xx || CONFIG_BOOKE) */ do_work: /* r10 contains MSR_KERNEL here */ @@ -122,7 +124,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> beq do_user_signal do_resched: /* r10 contains MSR_KERNEL here */ -@@ -1175,7 +1182,7 @@ do_resched: /* r10 contains MSR_KERNEL +@@ -1175,7 +1182,7 @@ recheck: MTMSRD(r10) /* disable interrupts */ CURRENT_THREAD_INFO(r9, r1) lwz r9,TI_FLAGS(r9) @@ -131,9 +133,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> bne- do_resched andi. r0,r9,_TIF_USER_WORK_MASK beq restore_user +diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S +index 39a79c89a4b6..2ebaa8d040eb 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S -@@ -644,7 +644,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEG +@@ -645,7 +645,7 @@ _GLOBAL(ret_from_except_lite) bl restore_math b restore #endif @@ -142,7 +146,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> beq 2f bl restore_interrupts SCHEDULE_USER -@@ -706,10 +706,18 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEG +@@ -707,10 +707,18 @@ resume_kernel: #ifdef CONFIG_PREEMPT /* Check if we need to preempt */ @@ -162,7 +166,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> cmpwi cr1,r8,0 ld r0,SOFTE(r1) cmpdi r0,0 -@@ -726,7 +734,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEG +@@ -727,7 +735,7 @@ resume_kernel: /* Re-test flags and eventually loop */ CURRENT_THREAD_INFO(r9, r1) ld r4,TI_FLAGS(r9) @@ -171,3 +175,6 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> bne 1b /* +-- +2.5.0 + |