while i'm immersed in the code, might as well toss out a couple more questions, these related to some code in drivers/mtd/mtdblock.c: ===== static int erase_write (struct mtd_info *mtd, unsigned long pos, int len, const char *buf) { struct erase_info erase; DECLARE_WAITQUEUE(wait, current); wait_queue_head_t wait_q; size_t retlen; int ret; /* * First, let's erase the flash block. */ init_waitqueue_head(&wait_q); ... snip ... ===== this code seems a bit confusing. there are two ways to define both wait queue heads and wait queues -- at compile time, and at run time. above, the wait queue is defined at compile time with: DECLARE_WAITQUEUE(wait, current); which seems fine, but the wait queue head itself uses the *run-time* declaration, which seems unnecessary -- why couldn't that have been declared at compile time as well? is there something subtle going on that i'm just not seeing? wait.h provides: #define DECLARE_WAIT_QUEUE_HEAD(name) \ wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name) and i don't see why that wouldn't have worked just fine. thoughts? rday -- ======================================================================== Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ======================================================================== _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies