initializing chip->wq in cfi_cmdset_0002.c
David Byron
dbyron at hheld.com
Sat Jul 1 14:18:02 EDT 2006
I'm using cfi_cmdset_0002.c to access a flash chip and I ran into an oops
from trying to dereference a null pointer. I found a fix for it, but I feel
like there must be something I don't understand. Seems like other folks
would have run into this as well.
The crash comes with the call to wake_up(&chip->wq) on the last line of
put_chip. I can't see anywhere that this data structure is initialized. I
looked at some of the other cfi_cmdset* files and decided that
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c
b/drivers/mtd/chips/cfi_cmdset_0002.c
index 9885726..8a390b3 100644
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
@@ -320,6 +320,7 @@ #endif
cfi->chips[i].word_write_time =
1<<cfi->cfiq->WordWriteTimeoutTyp;
cfi->chips[i].buffer_write_time =
1<<cfi->cfiq->BufWriteTimeoutTyp;
cfi->chips[i].erase_time =
1<<cfi->cfiq->BlockEraseTimeoutTyp;
+ init_waitqueue_head(&cfi->chips[i].wq);
}
map->fldrv = &cfi_amdstd_chipdrv;
was a good place to initialize. It fixes the oops for me. Can someone
confirm that this makes sense?
Thanks much.
-DB
More information about the linux-mtd
mailing list