* Re: linux-2.6.17-mm6: can not boot: bad spinlock magic
[not found] <20060706130849.f227ae98.pauldrynoff@gmail.com>
@ 2006-07-06 9:31 ` Andrew Morton
2006-07-06 10:27 ` Paul Drynoff
0 siblings, 1 reply; 2+ messages in thread
From: Andrew Morton @ 2006-07-06 9:31 UTC (permalink / raw)
To: Paul Drynoff; +Cc: linux-kernel, linux-acpi, Brown, Len, Rich Townsend
On Thu, 6 Jul 2006 13:08:49 +0400
Paul Drynoff <pauldrynoff@gmail.com> wrote:
> I tried 2.6.17-mm6, and got durring boot:
> fb0: VGA16 VGA frame buffer device
> BUG: spinlock bad magic on CPU#0, swapper/1
> _raw_spin_lock
> _spin_lock_irqsave
> __down
> __down_faied
> .text.lock.cm_sbs
> acpi_ac_init
> init
> kernel_thread_helper
Thanks. This'll probably help.
From: Andrew Morton <akpm@osdl.org>
cm_sbs_sem is being downed (via acpi_ac_init->acpi_lock_ac_dir) before it is
initialised, with grave results.
- Make it a mutex
- Initialise it
- Make it static
- Clean other stuff up.
Cc: "Brown, Len" <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---
drivers/acpi/cm_sbs.c | 46 ++++++++++++----------------------------
1 file changed, 14 insertions(+), 32 deletions(-)
diff -puN drivers/acpi/cm_sbs.c~acpi-initialise-cm_sbs_sem drivers/acpi/cm_sbs.c
--- a/drivers/acpi/cm_sbs.c~acpi-initialise-cm_sbs_sem
+++ a/drivers/acpi/cm_sbs.c
@@ -39,50 +39,43 @@ ACPI_MODULE_NAME("cm_sbs")
static struct proc_dir_entry *acpi_ac_dir;
static struct proc_dir_entry *acpi_battery_dir;
-static struct semaphore cm_sbs_sem;
+static DEFINE_MUTEX(cm_sbs_mutex);
-static int lock_ac_dir_cnt = 0;
-static int lock_battery_dir_cnt = 0;
+static int lock_ac_dir_cnt;
+static int lock_battery_dir_cnt;
struct proc_dir_entry *acpi_lock_ac_dir(void)
{
-
- down(&cm_sbs_sem);
- if (!acpi_ac_dir) {
+ mutex_lock(&cm_sbs_mutex);
+ if (!acpi_ac_dir)
acpi_ac_dir = proc_mkdir(ACPI_AC_CLASS, acpi_root_dir);
- }
if (acpi_ac_dir) {
lock_ac_dir_cnt++;
} else {
ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
"Cannot create %s\n", ACPI_AC_CLASS));
}
- up(&cm_sbs_sem);
+ mutex_unlock(&cm_sbs_mutex);
return acpi_ac_dir;
}
-
EXPORT_SYMBOL(acpi_lock_ac_dir);
void acpi_unlock_ac_dir(struct proc_dir_entry *acpi_ac_dir_param)
{
-
- down(&cm_sbs_sem);
- if (acpi_ac_dir_param) {
+ mutex_lock(&cm_sbs_mutex);
+ if (acpi_ac_dir_param)
lock_ac_dir_cnt--;
- }
if (lock_ac_dir_cnt == 0 && acpi_ac_dir_param && acpi_ac_dir) {
remove_proc_entry(ACPI_AC_CLASS, acpi_root_dir);
acpi_ac_dir = 0;
}
- up(&cm_sbs_sem);
+ mutex_unlock(&cm_sbs_mutex);
}
-
EXPORT_SYMBOL(acpi_unlock_ac_dir);
struct proc_dir_entry *acpi_lock_battery_dir(void)
{
-
- down(&cm_sbs_sem);
+ mutex_lock(&cm_sbs_mutex);
if (!acpi_battery_dir) {
acpi_battery_dir =
proc_mkdir(ACPI_BATTERY_CLASS, acpi_root_dir);
@@ -93,39 +86,28 @@ struct proc_dir_entry *acpi_lock_battery
ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
"Cannot create %s\n", ACPI_BATTERY_CLASS));
}
- up(&cm_sbs_sem);
+ mutex_unlock(&cm_sbs_mutex);
return acpi_battery_dir;
}
-
EXPORT_SYMBOL(acpi_lock_battery_dir);
void acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir_param)
{
-
- down(&cm_sbs_sem);
- if (acpi_battery_dir_param) {
+ mutex_lock(&cm_sbs_mutex);
+ if (acpi_battery_dir_param)
lock_battery_dir_cnt--;
- }
if (lock_battery_dir_cnt == 0 && acpi_battery_dir_param
&& acpi_battery_dir) {
remove_proc_entry(ACPI_BATTERY_CLASS, acpi_root_dir);
acpi_battery_dir = 0;
}
- up(&cm_sbs_sem);
+ mutex_unlock(&cm_sbs_mutex);
return;
}
-
EXPORT_SYMBOL(acpi_unlock_battery_dir);
static int __init acpi_cm_sbs_init(void)
{
-
- if (acpi_disabled)
- return 0;
-
- init_MUTEX(&cm_sbs_sem);
-
return 0;
}
-
subsys_initcall(acpi_cm_sbs_init);
_
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: linux-2.6.17-mm6: can not boot: bad spinlock magic
2006-07-06 9:31 ` linux-2.6.17-mm6: can not boot: bad spinlock magic Andrew Morton
@ 2006-07-06 10:27 ` Paul Drynoff
0 siblings, 0 replies; 2+ messages in thread
From: Paul Drynoff @ 2006-07-06 10:27 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, linux-acpi, len.brown, rhdt
Thanks for patch, it fixes bug for me.
On Thu, 6 Jul 2006 02:31:31 -0700
Andrew Morton <akpm@osdl.org> wrote:
> Cc: "Brown, Len" <len.brown@intel.com>
> Signed-off-by: Andrew Morton <akpm@osdl.org>
> ---
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-07-06 10:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20060706130849.f227ae98.pauldrynoff@gmail.com>
2006-07-06 9:31 ` linux-2.6.17-mm6: can not boot: bad spinlock magic Andrew Morton
2006-07-06 10:27 ` Paul Drynoff
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox