| From 29b6b6cbc841566dc7e2f997ae3c15ffbb0facca Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Fri, 3 Jul 2009 08:44:51 -0500 |
| Subject: [PATCH] powerpc: realtime support |
| |
| commit 92bfe2d63ed46764b0b0a6e9b63bb9e81023ab80 in tip. |
| |
| [PG: dropped entry_64.S changes; they arent in v2.6.33.5-rt25] |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig |
| index ba3948c..209b1b0 100644 |
| --- a/arch/powerpc/Kconfig |
| +++ b/arch/powerpc/Kconfig |
| @@ -81,13 +81,6 @@ config LOCKDEP_SUPPORT |
| bool |
| default y |
| |
| -config RWSEM_GENERIC_SPINLOCK |
| - bool |
| - |
| -config RWSEM_XCHGADD_ALGORITHM |
| - bool |
| - default y |
| - |
| config GENERIC_LOCKBREAK |
| bool |
| default y |
| @@ -256,6 +249,14 @@ config HIGHMEM |
| source kernel/time/Kconfig |
| source kernel/Kconfig.hz |
| source kernel/Kconfig.preempt |
| + |
| +config RWSEM_GENERIC_SPINLOCK |
| + bool |
| + default y |
| + |
| +config RWSEM_XCHGADD_ALGORITHM |
| + bool |
| + |
| source "fs/Kconfig.binfmt" |
| |
| config HUGETLB_PAGE_SIZE_VARIABLE |
| diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c |
| index 049dda6..1925982 100644 |
| --- a/arch/powerpc/kernel/idle.c |
| +++ b/arch/powerpc/kernel/idle.c |
| @@ -96,9 +96,11 @@ void cpu_idle(void) |
| tick_nohz_restart_sched_tick(); |
| if (cpu_should_die()) |
| cpu_die(); |
| - preempt_enable_no_resched(); |
| - schedule(); |
| + local_irq_disable(); |
| + __preempt_enable_no_resched(); |
| + __schedule(); |
| preempt_disable(); |
| + local_irq_enable(); |
| } |
| } |
| |
| diff --git a/arch/powerpc/platforms/chrp/time.c b/arch/powerpc/platforms/chrp/time.c |
| index 054dfe5..8f1d8cd 100644 |
| --- a/arch/powerpc/platforms/chrp/time.c |
| +++ b/arch/powerpc/platforms/chrp/time.c |
| @@ -83,7 +83,12 @@ int chrp_set_rtc_time(struct rtc_time *tmarg) |
| unsigned char save_control, save_freq_select; |
| struct rtc_time tm = *tmarg; |
| |
| +#if CONFIG_PREEMPT_RT |
| + if (!spin_trylock(&rtc_lock)) |
| + return -1; |
| +#else |
| spin_lock(&rtc_lock); |
| +#endif |
| |
| save_control = chrp_cmos_clock_read(RTC_CONTROL); /* tell the clock it's being set */ |
| |
| diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c |
| index 4e6152c..dcf8888 100644 |
| --- a/arch/powerpc/xmon/xmon.c |
| +++ b/arch/powerpc/xmon/xmon.c |
| @@ -358,6 +358,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi) |
| unsigned long timeout; |
| #endif |
| |
| + preempt_disable(); |
| local_irq_save(flags); |
| |
| bp = in_breakpoint_table(regs->nip, &offset); |
| @@ -543,6 +544,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi) |
| insert_cpu_bpts(); |
| |
| local_irq_restore(flags); |
| + preempt_enable(); |
| |
| return cmd != 'X' && cmd != EOF; |
| } |
| -- |
| 1.7.1.1 |
| |