public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: crash on CONFIG_CFAG12864B=y in 2.6.20-rc3-mm1
@ 2007-02-04 16:12 Miguel Ojeda
  0 siblings, 0 replies; 10+ messages in thread
From: Miguel Ojeda @ 2007-02-04 16:12 UTC (permalink / raw)
  To: dwalker; +Cc: akpm, linux-kernel

Ok, here it is the patch, just a draft.

I have checked the Makefile to ensure that ks0108 was being called before than cfag12864b at boot, still, I'm not sure and I don't know if this will prevent the crash if ks0108 fails to init.

Daniel, please test it.

drivers-add-lcd-support-update10.patch.draft
Signed-off-by: Miguel Ojeda Sandonis <maxextreme@gmail.com>
---
diff --git a/drivers/auxdisplay/cfag12864b.c b/drivers/auxdisplay/cfag12864b.c
index 889583d..cb44cb4 100644
--- a/drivers/auxdisplay/cfag12864b.c
+++ b/drivers/auxdisplay/cfag12864b.c
@@ -312,6 +312,17 @@ EXPORT_SYMBOL_GPL(cfag12864b_disable);
 EXPORT_SYMBOL_GPL(cfag12864b_isenabled);
 
 /*
+ * Is the module inited?
+ */
+
+static unsigned char cfag12864b_inited;
+unsigned char cfag12864b_isinited(void)
+{
+	return cfag12864b_inited;
+}
+EXPORT_SYMBOL_GPL(cfag12864b_isinited);
+
+/*
  * Module Init & Exit
  */
 
@@ -319,6 +330,13 @@ static int __init cfag12864b_init(void)
 {
 	int ret = -EINVAL;
 
+	/* ks0108_init() must be called first */
+	if (!ks0108_isinited()) {
+		printk(KERN_ERR CFAG12864B_NAME ": ERROR: "
+			"ks0108 is not initialized\n");
+		goto none;
+	}
+
 	if (PAGE_SIZE < CFAG12864B_SIZE) {
 		printk(KERN_ERR CFAG12864B_NAME ": ERROR: "
 			"page size (%i) < cfag12864b size (%i)\n",
@@ -354,6 +372,7 @@ static int __init cfag12864b_init(void)
 	cfag12864b_clear();
 	cfag12864b_on();
 
+	cfag12864b_inited = 1;
 	return 0;
 
 cachealloced:
diff --git a/drivers/auxdisplay/cfag12864bfb.c b/drivers/auxdisplay/cfag12864bfb.c
index 94765e7..66fafbb 100644
--- a/drivers/auxdisplay/cfag12864bfb.c
+++ b/drivers/auxdisplay/cfag12864bfb.c
@@ -137,7 +137,14 @@ static struct platform_device *cfag12864
 
 static int __init cfag12864bfb_init(void)
 {
-	int ret;
+	int ret = -EINVAL;
+
+	/* cfag12864b_init() must be called first */
+	if (!cfag12864b_isinited()) {
+		printk(KERN_ERR CFAG12864BFB_NAME ": ERROR: "
+			"cfag12864b is not initialized\n");
+		goto none;
+	}
 
 	if (cfag12864b_enable()) {
 		printk(KERN_ERR CFAG12864BFB_NAME ": ERROR: "
@@ -162,6 +169,7 @@ static int __init cfag12864bfb_init(void
 		}
 	}
 
+none:
 	return ret;
 }
 
diff --git a/drivers/auxdisplay/ks0108.c b/drivers/auxdisplay/ks0108.c
index a637575..e6c3646 100644
--- a/drivers/auxdisplay/ks0108.c
+++ b/drivers/auxdisplay/ks0108.c
@@ -111,6 +111,17 @@ EXPORT_SYMBOL_GPL(ks0108_address);
 EXPORT_SYMBOL_GPL(ks0108_page);
 
 /*
+ * Is the module inited?
+ */
+
+static unsigned char ks0108_inited;
+unsigned char ks0108_isinited(void)
+{
+	return ks0108_inited;
+}
+EXPORT_SYMBOL_GPL(ks0108_isinited);
+
+/*
  * Module Init & Exit
  */
 
@@ -142,6 +153,7 @@ static int __init ks0108_init(void)
 		goto registered;
 	}
 
+	ks0108_inited = 1;
 	return 0;
 
 registered:
diff --git a/include/linux/cfag12864b.h b/include/linux/cfag12864b.h
index 0bc45e6..1605dd8 100644
--- a/include/linux/cfag12864b.h
+++ b/include/linux/cfag12864b.h
@@ -73,5 +73,10 @@ extern void cfag12864b_disable(void);
  */
 extern unsigned char cfag12864b_isenabled(void);
 
+/*
+ * Is the module inited?
+ */
+extern unsigned char cfag12864b_isinited(void);
+
 #endif /* _CFAG12864B_H_ */
 
diff --git a/include/linux/ks0108.h b/include/linux/ks0108.h
index 8047d4b..a2c54ac 100644
--- a/include/linux/ks0108.h
+++ b/include/linux/ks0108.h
@@ -43,4 +43,7 @@ extern void ks0108_address(unsigned char
 /* Set the controller's current page (0..7) */
 extern void ks0108_page(unsigned char page);
 
+/* Is the module inited? */
+extern unsigned char ks0108_isinited(void);
+
 #endif /* _KS0108_H_ */

^ permalink raw reply related	[flat|nested] 10+ messages in thread
* crash on CONFIG_CFAG12864B=y in 2.6.20-rc3-mm1
@ 2007-01-07 16:55 Daniel Walker
  2007-02-01 13:49 ` Miguel Ojeda
  0 siblings, 1 reply; 10+ messages in thread
From: Daniel Walker @ 2007-01-07 16:55 UTC (permalink / raw)
  To: maxextreme; +Cc: akpm, linux-kernel

(forgot to CC LKML)

The options,

CONFIG_CFAG12864B=y
CONFIG_CFAG12864B_RATE=20

causes a crash at boot in 2.6.20-rc3-mm1. I don't have the hardware
associated with the options. It looks like it just doesn't have guards
to detect if the hardware doesn't exists.

Here is the crash,

ks0108: ERROR: parport didn't find 888 port
BUG: unable to handle kernel NULL pointer dereference at virtual address 0000004 printing eip:
c02dbff9
*pde = 00000000
Oops: 0000 [#1]
PREEMPT SMP
last sysfs file:
Modules linked in:
CPU:    3
EIP:    0060:[<c02dbff9>]    Not tainted VLI
EFLAGS: 00010246   (2.6.20-rc3-mm1 #11)
EIP is at ks0108_writecontrol+0x79/0xc0
eax: 00001008   ebx: 0000000a   ecx: 673e2eb8   edx: 00000001
esi: 0000000a   edi: 00000000   ebp: f7c3ff6c   esp: f7c3ff50
ds: 007b   es: 007b   fs: 00d8  gs: 0000  ss: 0068
Process swapper (pid: 1, ti=f7c3e000 task=f7c26a90 task.ti=f7c3e000)
Stack: 00000001 f7552c40 f7c3ff60 c0120e3f 00000000 c049f450 00000000 f7c3ff74
       c02dc159 f7c3ff80 c02dc177 00000000 f7c3ff98 c048feda 00000378 c02d74db
       00000000 00000000 f7c3ffe0 c0478610 c03d9d35 00000004 f7c26a90 c0473fc4
Call Trace:
 [<c01053da>] show_trace_log_lvl+0x1a/0x30
 [<c0105499>] show_stack_log_lvl+0xa9/0xd0
 [<c01056c7>] show_registers+0x207/0x370
 [<c0105949>] die+0x119/0x250
 [<c011d267>] do_page_fault+0x277/0x610
 [<c038e9d4>] error_code+0x7c/0x84
 [<c02dc159>] cfag12864b_e+0x19/0x20
 [<c02dc177>] cfag12864b_page+0x17/0x30
 [<c048feda>] cfag12864b_init+0x8a/0x130
 [<c0478610>] init+0x110/0x250
 [<c0104fd3>] kernel_thread_helper+0x7/0x14
 =======================
Code: 8b 98 ec 00 00 00 0f b6 03 24 df 88 45 f3 80 75 f3 20 0f b6 43 01 20 45 f
EIP: [<c02dbff9>] ks0108_writecontrol+0x79/0xc0 SS:ESP 0068:f7c3ff50
 <0>Kernel panic - not syncing: Attempted to kill init!




^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2007-02-04 16:12 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-04 16:12 crash on CONFIG_CFAG12864B=y in 2.6.20-rc3-mm1 Miguel Ojeda
  -- strict thread matches above, loose matches on Subject: below --
2007-01-07 16:55 Daniel Walker
2007-02-01 13:49 ` Miguel Ojeda
2007-02-01 15:16   ` Miguel Ojeda
2007-02-01 15:16     ` Daniel Walker
2007-02-01 17:13       ` Miguel Ojeda
2007-02-01 17:20         ` Daniel Walker
2007-02-01 17:39           ` Miguel Ojeda
2007-02-01 17:55             ` Daniel Walker
2007-02-01 18:17               ` Miguel Ojeda

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox