* [PATCH RT 0/4] [ANNOUNCE] 3.0.65-rt92-rc1 @ 2013-02-19 5:31 Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 1/4] x86/32: Use kmap switch for non highmem as well Steven Rostedt ` (3 more replies) 0 siblings, 4 replies; 7+ messages in thread From: Steven Rostedt @ 2013-02-19 5:31 UTC (permalink / raw) To: linux-kernel, linux-rt-users; +Cc: Thomas Gleixner, Carsten Emde, John Kacur Dear RT Folks, This is the RT stable review cycle of patch 3.0.65-rt92-rc1. Please scream at me if I messed something up. Please test the patches too. The -rc release will be uploaded to kernel.org and will be deleted when the final release is out. This is just a review release (or release candidate). The pre-releases will not be pushed to the git repository, only the final release is. If all goes well, this patch will be converted to the next main release on 2/22/2013. Enjoy, -- Steve To build 3.0.65-rt92-rc1 directly, the following patches should be applied: http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.xz http://www.kernel.org/pub/linux/kernel/v3.0/patch-3.0.65.xz http://www.kernel.org/pub/linux/kernel/projects/rt/3.0/patch-3.0.65-rt92-rc1.patch.xz You can also build from 3.0.65-rt91 by applying the incremental patch: http://www.kernel.org/pub/linux/kernel/projects/rt/3.0/incr/patch-3.0.65-rt91-rt92-rc1.patch.xz Changes from 3.0.65-rt91: --- Steven Rostedt (2): acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t Linux 3.0.65-rt92-rc1 Thomas Gleixner (2): x86/32: Use kmap switch for non highmem as well rcutiny: Use simple waitqueue ---- arch/x86/kernel/process_32.c | 2 +- drivers/acpi/acpica/acglobal.h | 2 +- drivers/acpi/acpica/hwregs.c | 4 ++-- drivers/acpi/acpica/hwxface.c | 4 ++-- drivers/acpi/acpica/utmutex.c | 4 ++-- include/acpi/platform/aclinux.h | 14 ++++++++++++++ include/linux/sched.h | 4 +++- kernel/rcutiny_plugin.h | 9 +++++---- localversion-rt | 2 +- 9 files changed, 31 insertions(+), 14 deletions(-) ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RT 1/4] x86/32: Use kmap switch for non highmem as well 2013-02-19 5:31 [PATCH RT 0/4] [ANNOUNCE] 3.0.65-rt92-rc1 Steven Rostedt @ 2013-02-19 5:31 ` Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 2/4] acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t Steven Rostedt ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Steven Rostedt @ 2013-02-19 5:31 UTC (permalink / raw) To: linux-kernel, linux-rt-users Cc: Thomas Gleixner, Carsten Emde, John Kacur, stable-rt [-- Attachment #1: 0001-x86-32-Use-kmap-switch-for-non-highmem-as-well.patch --] [-- Type: text/plain, Size: 1438 bytes --] From: Thomas Gleixner <tglx@linutronix.de> Even with CONFIG_HIGHMEM=n we need to take care of the "atomic" mappings which are installed via iomap_atomic. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: stable-rt@vger.kernel.org Signed-off-by: Steven Rostedt <rostedt@goodmis.org> --- arch/x86/kernel/process_32.c | 2 +- include/linux/sched.h | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 95f2630..4a0d37f 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -336,7 +336,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) task_thread_info(next_p)->flags & _TIF_WORK_CTXSW_NEXT)) __switch_to_xtra(prev_p, next_p, tss); -#if defined CONFIG_PREEMPT_RT_FULL && defined CONFIG_HIGHMEM +#ifdef CONFIG_PREEMPT_RT_FULL /* * Save @prev's kmap_atomic stack */ diff --git a/include/linux/sched.h b/include/linux/sched.h index 8772834..285ab45 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1602,9 +1602,11 @@ struct task_struct { struct rcu_head put_rcu; int softirq_nestcnt; #endif -#if defined CONFIG_PREEMPT_RT_FULL && defined CONFIG_HIGHMEM +#ifdef CONFIG_PREEMPT_RT_FULL +# if defined CONFIG_HIGHMEM || defined CONFIG_X86_32 int kmap_idx; pte_t kmap_pte[KM_TYPE_NR]; +# endif #endif #ifdef CONFIG_DEBUG_PREEMPT -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH RT 2/4] acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t 2013-02-19 5:31 [PATCH RT 0/4] [ANNOUNCE] 3.0.65-rt92-rc1 Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 1/4] x86/32: Use kmap switch for non highmem as well Steven Rostedt @ 2013-02-19 5:31 ` Steven Rostedt 2013-06-14 15:16 ` Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 3/4] rcutiny: Use simple waitqueue Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 4/4] Linux 3.0.65-rt92-rc1 Steven Rostedt 3 siblings, 1 reply; 7+ messages in thread From: Steven Rostedt @ 2013-02-19 5:31 UTC (permalink / raw) To: linux-kernel, linux-rt-users Cc: Thomas Gleixner, Carsten Emde, John Kacur, John Kacur, Clark Williams, stable-rt [-- Attachment #1: 0002-acpi-rt-Convert-acpi_gbl_hardware-lock-back-to-a-raw.patch --] [-- Type: text/plain, Size: 7450 bytes --] From: Steven Rostedt <rostedt@goodmis.org> We hit the following bug with 3.6-rt: [ 5.898990] BUG: scheduling while atomic: swapper/3/0/0x00000002 [ 5.898991] no locks held by swapper/3/0. [ 5.898993] Modules linked in: [ 5.898996] Pid: 0, comm: swapper/3 Not tainted 3.6.11-rt28.19.el6rt.x86_64.debug #1 [ 5.898997] Call Trace: [ 5.899011] [<ffffffff810804e7>] __schedule_bug+0x67/0x90 [ 5.899028] [<ffffffff81577923>] __schedule+0x793/0x7a0 [ 5.899032] [<ffffffff810b4e40>] ? debug_rt_mutex_print_deadlock+0x50/0x200 [ 5.899034] [<ffffffff81577b89>] schedule+0x29/0x70 [ 5.899036] BUG: scheduling while atomic: swapper/7/0/0x00000002 [ 5.899037] no locks held by swapper/7/0. [ 5.899039] [<ffffffff81578525>] rt_spin_lock_slowlock+0xe5/0x2f0 [ 5.899040] Modules linked in: [ 5.899041] [ 5.899045] [<ffffffff81579a58>] ? _raw_spin_unlock_irqrestore+0x38/0x90 [ 5.899046] Pid: 0, comm: swapper/7 Not tainted 3.6.11-rt28.19.el6rt.x86_64.debug #1 [ 5.899047] Call Trace: [ 5.899049] [<ffffffff81578bc6>] rt_spin_lock+0x16/0x40 [ 5.899052] [<ffffffff810804e7>] __schedule_bug+0x67/0x90 [ 5.899054] [<ffffffff8157d3f0>] ? notifier_call_chain+0x80/0x80 [ 5.899056] [<ffffffff81577923>] __schedule+0x793/0x7a0 [ 5.899059] [<ffffffff812f2034>] acpi_os_acquire_lock+0x1f/0x23 [ 5.899062] [<ffffffff810b4e40>] ? debug_rt_mutex_print_deadlock+0x50/0x200 [ 5.899068] [<ffffffff8130be64>] acpi_write_bit_register+0x33/0xb0 [ 5.899071] [<ffffffff81577b89>] schedule+0x29/0x70 [ 5.899072] [<ffffffff8130be13>] ? acpi_read_bit_register+0x33/0x51 [ 5.899074] [<ffffffff81578525>] rt_spin_lock_slowlock+0xe5/0x2f0 [ 5.899077] [<ffffffff8131d1fc>] acpi_idle_enter_bm+0x8a/0x28e [ 5.899079] [<ffffffff81579a58>] ? _raw_spin_unlock_irqrestore+0x38/0x90 [ 5.899081] [<ffffffff8107e5da>] ? this_cpu_load+0x1a/0x30 [ 5.899083] [<ffffffff81578bc6>] rt_spin_lock+0x16/0x40 [ 5.899087] [<ffffffff8144c759>] cpuidle_enter+0x19/0x20 [ 5.899088] [<ffffffff8157d3f0>] ? notifier_call_chain+0x80/0x80 [ 5.899090] [<ffffffff8144c777>] cpuidle_enter_state+0x17/0x50 [ 5.899092] [<ffffffff812f2034>] acpi_os_acquire_lock+0x1f/0x23 [ 5.899094] [<ffffffff8144d1a1>] cpuidle899101] [<ffffffff8130be13>] ? As the acpi code disables interrupts in acpi_idle_enter_bm, and calls code that grabs the acpi lock, it causes issues as the lock is currently in RT a sleeping lock. The lock was converted from a raw to a sleeping lock due to some previous issues, and tests that showed it didn't seem to matter. Unfortunately, it did matter for one of our boxes. This patch converts the lock back to a raw lock. I've run this code on a few of my own machines, one being my laptop that uses the acpi quite extensively. I've been able to suspend and resume without issues. [ tglx: Made the change exclusive for acpi_gbl_hardware_lock ] Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Cc: John Kacur <jkacur@gmail.com> Cc: Clark Williams <clark@redhat.com> Link: http://lkml.kernel.org/r/1360765565.23152.5.camel@gandalf.local.home Cc: stable-rt@vger.kernel.org Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- drivers/acpi/acpica/acglobal.h | 2 +- drivers/acpi/acpica/hwregs.c | 4 ++-- drivers/acpi/acpica/hwxface.c | 4 ++-- drivers/acpi/acpica/utmutex.c | 4 ++-- include/acpi/platform/aclinux.h | 14 ++++++++++++++ 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h index 73863d8..3d208c8 100644 --- a/drivers/acpi/acpica/acglobal.h +++ b/drivers/acpi/acpica/acglobal.h @@ -230,7 +230,7 @@ ACPI_EXTERN u8 acpi_gbl_global_lock_pending; * interrupt level */ ACPI_EXTERN acpi_spinlock acpi_gbl_gpe_lock; /* For GPE data structs and registers */ -ACPI_EXTERN acpi_spinlock acpi_gbl_hardware_lock; /* For ACPI H/W except GPE registers */ +ACPI_EXTERN acpi_raw_spinlock acpi_gbl_hardware_lock; /* For ACPI H/W except GPE registers */ /***************************************************************************** * diff --git a/drivers/acpi/acpica/hwregs.c b/drivers/acpi/acpica/hwregs.c index 55accb7..1da9213 100644 --- a/drivers/acpi/acpica/hwregs.c +++ b/drivers/acpi/acpica/hwregs.c @@ -263,7 +263,7 @@ acpi_status acpi_hw_clear_acpi_status(void) ACPI_BITMASK_ALL_FIXED_STATUS, ACPI_FORMAT_UINT64(acpi_gbl_xpm1a_status.address))); - lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); + raw_spin_lock_irqsave(acpi_gbl_hardware_lock, lock_flags); /* Clear the fixed events in PM1 A/B */ @@ -278,7 +278,7 @@ acpi_status acpi_hw_clear_acpi_status(void) status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block, NULL); unlock_and_exit: - acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags); + raw_spin_unlock_irqrestore(acpi_gbl_hardware_lock, lock_flags); return_ACPI_STATUS(status); } diff --git a/drivers/acpi/acpica/hwxface.c b/drivers/acpi/acpica/hwxface.c index f75f81a..94a33ce 100644 --- a/drivers/acpi/acpica/hwxface.c +++ b/drivers/acpi/acpica/hwxface.c @@ -386,7 +386,7 @@ acpi_status acpi_write_bit_register(u32 register_id, u32 value) return_ACPI_STATUS(AE_BAD_PARAMETER); } - lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); + raw_spin_lock_irqsave(acpi_gbl_hardware_lock, lock_flags); /* * At this point, we know that the parent register is one of the @@ -447,7 +447,7 @@ acpi_status acpi_write_bit_register(u32 register_id, u32 value) unlock_and_exit: - acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags); + raw_spin_unlock_irqrestore(acpi_gbl_hardware_lock, lock_flags); return_ACPI_STATUS(status); } diff --git a/drivers/acpi/acpica/utmutex.c b/drivers/acpi/acpica/utmutex.c index 7d797e2..b611bf3 100644 --- a/drivers/acpi/acpica/utmutex.c +++ b/drivers/acpi/acpica/utmutex.c @@ -88,7 +88,7 @@ acpi_status acpi_ut_mutex_initialize(void) return_ACPI_STATUS (status); } - status = acpi_os_create_lock (&acpi_gbl_hardware_lock); + status = acpi_os_create_raw_lock (&acpi_gbl_hardware_lock); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } @@ -135,7 +135,7 @@ void acpi_ut_mutex_terminate(void) /* Delete the spinlocks */ acpi_os_delete_lock(acpi_gbl_gpe_lock); - acpi_os_delete_lock(acpi_gbl_hardware_lock); + acpi_os_delete_raw_lock(acpi_gbl_hardware_lock); /* Delete the reader/writer lock */ diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 2ce1be9..17d24de 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h @@ -74,6 +74,7 @@ #define acpi_cache_t struct kmem_cache #define acpi_spinlock spinlock_t * +#define acpi_raw_spinlock raw_spinlock_t * #define acpi_cpu_flags unsigned long #else /* !__KERNEL__ */ @@ -177,6 +178,19 @@ static inline void *acpi_os_acquire_object(acpi_cache_t * cache) lock ? AE_OK : AE_NO_MEMORY; \ }) +#define acpi_os_create_raw_lock(__handle) \ +({ \ + raw_spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock)); \ + \ + if (lock) { \ + *(__handle) = lock; \ + raw_spin_lock_init(*(__handle)); \ + } \ + lock ? AE_OK : AE_NO_MEMORY; \ +}) + +#define acpi_os_delete_raw_lock(__handle) kfree(__handle) + #endif /* __KERNEL__ */ #endif /* __ACLINUX_H__ */ -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH RT 2/4] acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t 2013-02-19 5:31 ` [PATCH RT 2/4] acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t Steven Rostedt @ 2013-06-14 15:16 ` Steven Rostedt 2013-06-14 15:41 ` Sebastian Andrzej Siewior 0 siblings, 1 reply; 7+ messages in thread From: Steven Rostedt @ 2013-06-14 15:16 UTC (permalink / raw) To: linux-kernel, Sebastian Andrzej Siewior Cc: linux-rt-users, Thomas Gleixner, Carsten Emde, John Kacur, Clark Williams, stable-rt Hi Sebastian, Any reason that this patch was dropped for 3.8? We hit this exact same bug recently with a 3.8-rt kernel. -- Steve On Tue, 2013-02-19 at 00:31 -0500, Steven Rostedt wrote: > plain text document attachment > (0002-acpi-rt-Convert-acpi_gbl_hardware-lock-back-to-a-raw.patch) > From: Steven Rostedt <rostedt@goodmis.org> > > We hit the following bug with 3.6-rt: > > [ 5.898990] BUG: scheduling while atomic: swapper/3/0/0x00000002 > [ 5.898991] no locks held by swapper/3/0. > [ 5.898993] Modules linked in: > [ 5.898996] Pid: 0, comm: swapper/3 Not tainted 3.6.11-rt28.19.el6rt.x86_64.debug #1 > [ 5.898997] Call Trace: > [ 5.899011] [<ffffffff810804e7>] __schedule_bug+0x67/0x90 > [ 5.899028] [<ffffffff81577923>] __schedule+0x793/0x7a0 > [ 5.899032] [<ffffffff810b4e40>] ? debug_rt_mutex_print_deadlock+0x50/0x200 > [ 5.899034] [<ffffffff81577b89>] schedule+0x29/0x70 > [ 5.899036] BUG: scheduling while atomic: swapper/7/0/0x00000002 > [ 5.899037] no locks held by swapper/7/0. > [ 5.899039] [<ffffffff81578525>] rt_spin_lock_slowlock+0xe5/0x2f0 > [ 5.899040] Modules linked in: > [ 5.899041] > [ 5.899045] [<ffffffff81579a58>] ? _raw_spin_unlock_irqrestore+0x38/0x90 > [ 5.899046] Pid: 0, comm: swapper/7 Not tainted 3.6.11-rt28.19.el6rt.x86_64.debug #1 > [ 5.899047] Call Trace: > [ 5.899049] [<ffffffff81578bc6>] rt_spin_lock+0x16/0x40 > [ 5.899052] [<ffffffff810804e7>] __schedule_bug+0x67/0x90 > [ 5.899054] [<ffffffff8157d3f0>] ? notifier_call_chain+0x80/0x80 > [ 5.899056] [<ffffffff81577923>] __schedule+0x793/0x7a0 > [ 5.899059] [<ffffffff812f2034>] acpi_os_acquire_lock+0x1f/0x23 > [ 5.899062] [<ffffffff810b4e40>] ? debug_rt_mutex_print_deadlock+0x50/0x200 > [ 5.899068] [<ffffffff8130be64>] acpi_write_bit_register+0x33/0xb0 > [ 5.899071] [<ffffffff81577b89>] schedule+0x29/0x70 > [ 5.899072] [<ffffffff8130be13>] ? acpi_read_bit_register+0x33/0x51 > [ 5.899074] [<ffffffff81578525>] rt_spin_lock_slowlock+0xe5/0x2f0 > [ 5.899077] [<ffffffff8131d1fc>] acpi_idle_enter_bm+0x8a/0x28e > [ 5.899079] [<ffffffff81579a58>] ? _raw_spin_unlock_irqrestore+0x38/0x90 > [ 5.899081] [<ffffffff8107e5da>] ? this_cpu_load+0x1a/0x30 > [ 5.899083] [<ffffffff81578bc6>] rt_spin_lock+0x16/0x40 > [ 5.899087] [<ffffffff8144c759>] cpuidle_enter+0x19/0x20 > [ 5.899088] [<ffffffff8157d3f0>] ? notifier_call_chain+0x80/0x80 > [ 5.899090] [<ffffffff8144c777>] cpuidle_enter_state+0x17/0x50 > [ 5.899092] [<ffffffff812f2034>] acpi_os_acquire_lock+0x1f/0x23 > [ 5.899094] [<ffffffff8144d1a1>] cpuidle899101] [<ffffffff8130be13>] ? > > As the acpi code disables interrupts in acpi_idle_enter_bm, and calls > code that grabs the acpi lock, it causes issues as the lock is currently > in RT a sleeping lock. > > The lock was converted from a raw to a sleeping lock due to some > previous issues, and tests that showed it didn't seem to matter. > Unfortunately, it did matter for one of our boxes. > > This patch converts the lock back to a raw lock. I've run this code on a > few of my own machines, one being my laptop that uses the acpi quite > extensively. I've been able to suspend and resume without issues. > > [ tglx: Made the change exclusive for acpi_gbl_hardware_lock ] > > Signed-off-by: Steven Rostedt <rostedt@goodmis.org> > Cc: John Kacur <jkacur@gmail.com> > Cc: Clark Williams <clark@redhat.com> > Link: http://lkml.kernel.org/r/1360765565.23152.5.camel@gandalf.local.home > Cc: stable-rt@vger.kernel.org > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > --- > drivers/acpi/acpica/acglobal.h | 2 +- > drivers/acpi/acpica/hwregs.c | 4 ++-- > drivers/acpi/acpica/hwxface.c | 4 ++-- > drivers/acpi/acpica/utmutex.c | 4 ++-- > include/acpi/platform/aclinux.h | 14 ++++++++++++++ > 5 files changed, 21 insertions(+), 7 deletions(-) > > diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h > index 73863d8..3d208c8 100644 > --- a/drivers/acpi/acpica/acglobal.h > +++ b/drivers/acpi/acpica/acglobal.h > @@ -230,7 +230,7 @@ ACPI_EXTERN u8 acpi_gbl_global_lock_pending; > * interrupt level > */ > ACPI_EXTERN acpi_spinlock acpi_gbl_gpe_lock; /* For GPE data structs and registers */ > -ACPI_EXTERN acpi_spinlock acpi_gbl_hardware_lock; /* For ACPI H/W except GPE registers */ > +ACPI_EXTERN acpi_raw_spinlock acpi_gbl_hardware_lock; /* For ACPI H/W except GPE registers */ > > /***************************************************************************** > * > diff --git a/drivers/acpi/acpica/hwregs.c b/drivers/acpi/acpica/hwregs.c > index 55accb7..1da9213 100644 > --- a/drivers/acpi/acpica/hwregs.c > +++ b/drivers/acpi/acpica/hwregs.c > @@ -263,7 +263,7 @@ acpi_status acpi_hw_clear_acpi_status(void) > ACPI_BITMASK_ALL_FIXED_STATUS, > ACPI_FORMAT_UINT64(acpi_gbl_xpm1a_status.address))); > > - lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); > + raw_spin_lock_irqsave(acpi_gbl_hardware_lock, lock_flags); > > /* Clear the fixed events in PM1 A/B */ > > @@ -278,7 +278,7 @@ acpi_status acpi_hw_clear_acpi_status(void) > status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block, NULL); > > unlock_and_exit: > - acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags); > + raw_spin_unlock_irqrestore(acpi_gbl_hardware_lock, lock_flags); > return_ACPI_STATUS(status); > } > > diff --git a/drivers/acpi/acpica/hwxface.c b/drivers/acpi/acpica/hwxface.c > index f75f81a..94a33ce 100644 > --- a/drivers/acpi/acpica/hwxface.c > +++ b/drivers/acpi/acpica/hwxface.c > @@ -386,7 +386,7 @@ acpi_status acpi_write_bit_register(u32 register_id, u32 value) > return_ACPI_STATUS(AE_BAD_PARAMETER); > } > > - lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); > + raw_spin_lock_irqsave(acpi_gbl_hardware_lock, lock_flags); > > /* > * At this point, we know that the parent register is one of the > @@ -447,7 +447,7 @@ acpi_status acpi_write_bit_register(u32 register_id, u32 value) > > unlock_and_exit: > > - acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags); > + raw_spin_unlock_irqrestore(acpi_gbl_hardware_lock, lock_flags); > return_ACPI_STATUS(status); > } > > diff --git a/drivers/acpi/acpica/utmutex.c b/drivers/acpi/acpica/utmutex.c > index 7d797e2..b611bf3 100644 > --- a/drivers/acpi/acpica/utmutex.c > +++ b/drivers/acpi/acpica/utmutex.c > @@ -88,7 +88,7 @@ acpi_status acpi_ut_mutex_initialize(void) > return_ACPI_STATUS (status); > } > > - status = acpi_os_create_lock (&acpi_gbl_hardware_lock); > + status = acpi_os_create_raw_lock (&acpi_gbl_hardware_lock); > if (ACPI_FAILURE (status)) { > return_ACPI_STATUS (status); > } > @@ -135,7 +135,7 @@ void acpi_ut_mutex_terminate(void) > /* Delete the spinlocks */ > > acpi_os_delete_lock(acpi_gbl_gpe_lock); > - acpi_os_delete_lock(acpi_gbl_hardware_lock); > + acpi_os_delete_raw_lock(acpi_gbl_hardware_lock); > > /* Delete the reader/writer lock */ > > diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h > index 2ce1be9..17d24de 100644 > --- a/include/acpi/platform/aclinux.h > +++ b/include/acpi/platform/aclinux.h > @@ -74,6 +74,7 @@ > > #define acpi_cache_t struct kmem_cache > #define acpi_spinlock spinlock_t * > +#define acpi_raw_spinlock raw_spinlock_t * > #define acpi_cpu_flags unsigned long > > #else /* !__KERNEL__ */ > @@ -177,6 +178,19 @@ static inline void *acpi_os_acquire_object(acpi_cache_t * cache) > lock ? AE_OK : AE_NO_MEMORY; \ > }) > > +#define acpi_os_create_raw_lock(__handle) \ > +({ \ > + raw_spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock)); \ > + \ > + if (lock) { \ > + *(__handle) = lock; \ > + raw_spin_lock_init(*(__handle)); \ > + } \ > + lock ? AE_OK : AE_NO_MEMORY; \ > +}) > + > +#define acpi_os_delete_raw_lock(__handle) kfree(__handle) > + > #endif /* __KERNEL__ */ > > #endif /* __ACLINUX_H__ */ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RT 2/4] acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t 2013-06-14 15:16 ` Steven Rostedt @ 2013-06-14 15:41 ` Sebastian Andrzej Siewior 0 siblings, 0 replies; 7+ messages in thread From: Sebastian Andrzej Siewior @ 2013-06-14 15:41 UTC (permalink / raw) To: Steven Rostedt Cc: linux-kernel, linux-rt-users, Thomas Gleixner, Carsten Emde, John Kacur, Clark Williams, stable-rt On 06/14/2013 05:16 PM, Steven Rostedt wrote: > Hi Sebastian, Hi Steven, > > Any reason that this patch was dropped for 3.8? We hit this exact same > bug recently with a 3.8-rt kernel. No particular reason. Going through my log of the queue I have to say that it was never in the queue starting v3.8. The only ACPI patches that were dropped are: # ACPI # Dropped those two as they cause a scheduling in atomic failure and # we have no clue why we made those locks raw in the first place. # acpi-make-gbl-hardware-lock-raw.patch # acpi-make-ec-lock-raw-as-well.patch # This one is just a follow up to the raw spin locks # Simple raw spinlock based waitqueue # wait-simple-version.patch # acpi-gpe-use-wait-simple.patch but that wasn't me. In that case I try to bring it back in. > -- Steve Sebastian ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RT 3/4] rcutiny: Use simple waitqueue 2013-02-19 5:31 [PATCH RT 0/4] [ANNOUNCE] 3.0.65-rt92-rc1 Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 1/4] x86/32: Use kmap switch for non highmem as well Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 2/4] acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t Steven Rostedt @ 2013-02-19 5:31 ` Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 4/4] Linux 3.0.65-rt92-rc1 Steven Rostedt 3 siblings, 0 replies; 7+ messages in thread From: Steven Rostedt @ 2013-02-19 5:31 UTC (permalink / raw) To: linux-kernel, linux-rt-users; +Cc: Thomas Gleixner, Carsten Emde, John Kacur [-- Attachment #1: 0003-rcutiny-Use-simple-waitqueue.patch --] [-- Type: text/plain, Size: 1476 bytes --] From: Thomas Gleixner <tglx@linutronix.de> Simple waitqueues can be handled from interrupt disabled contexts. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> --- kernel/rcutiny_plugin.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/kernel/rcutiny_plugin.h b/kernel/rcutiny_plugin.h index f259c67..1cd0c6e 100644 --- a/kernel/rcutiny_plugin.h +++ b/kernel/rcutiny_plugin.h @@ -25,6 +25,7 @@ #include <linux/kthread.h> #include <linux/debugfs.h> #include <linux/seq_file.h> +#include <linux/wait-simple.h> #ifdef CONFIG_RCU_TRACE #define RCU_TRACE(stmt) stmt @@ -736,7 +737,7 @@ void synchronize_rcu(void) } EXPORT_SYMBOL_GPL(synchronize_rcu); -static DECLARE_WAIT_QUEUE_HEAD(sync_rcu_preempt_exp_wq); +static DEFINE_SWAIT_HEAD(sync_rcu_preempt_exp_wq); static unsigned long sync_rcu_preempt_exp_count; static DEFINE_MUTEX(sync_rcu_preempt_exp_mutex); @@ -758,7 +759,7 @@ static int rcu_preempted_readers_exp(void) */ static void rcu_report_exp_done(void) { - wake_up(&sync_rcu_preempt_exp_wq); + swait_wake(&sync_rcu_preempt_exp_wq); } /* @@ -810,8 +811,8 @@ void synchronize_rcu_expedited(void) else { rcu_initiate_boost(); local_irq_restore(flags); - wait_event(sync_rcu_preempt_exp_wq, - !rcu_preempted_readers_exp()); + swait_event(sync_rcu_preempt_exp_wq, + !rcu_preempted_readers_exp()); } /* Clean up and exit. */ -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH RT 4/4] Linux 3.0.65-rt92-rc1 2013-02-19 5:31 [PATCH RT 0/4] [ANNOUNCE] 3.0.65-rt92-rc1 Steven Rostedt ` (2 preceding siblings ...) 2013-02-19 5:31 ` [PATCH RT 3/4] rcutiny: Use simple waitqueue Steven Rostedt @ 2013-02-19 5:31 ` Steven Rostedt 3 siblings, 0 replies; 7+ messages in thread From: Steven Rostedt @ 2013-02-19 5:31 UTC (permalink / raw) To: linux-kernel, linux-rt-users; +Cc: Thomas Gleixner, Carsten Emde, John Kacur [-- Attachment #1: 0004-Linux-3.0.65-rt92-rc1.patch --] [-- Type: text/plain, Size: 287 bytes --] From: Steven Rostedt <srostedt@redhat.com> --- localversion-rt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localversion-rt b/localversion-rt index e95e338..dc0be96 100644 --- a/localversion-rt +++ b/localversion-rt @@ -1 +1 @@ --rt91 +-rt92-rc1 -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-06-14 15:41 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-02-19 5:31 [PATCH RT 0/4] [ANNOUNCE] 3.0.65-rt92-rc1 Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 1/4] x86/32: Use kmap switch for non highmem as well Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 2/4] acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t Steven Rostedt 2013-06-14 15:16 ` Steven Rostedt 2013-06-14 15:41 ` Sebastian Andrzej Siewior 2013-02-19 5:31 ` [PATCH RT 3/4] rcutiny: Use simple waitqueue Steven Rostedt 2013-02-19 5:31 ` [PATCH RT 4/4] Linux 3.0.65-rt92-rc1 Steven Rostedt
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).