another couple questions regarding wait queues

Robert P. J. Day rpjday at
Sat Jun 22 03:38:14 EDT 2013

  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.

	... 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:

        wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)

and i don't see why that wouldn't have worked just fine. thoughts?



Robert P. J. Day                                 Ottawa, Ontario, CANADA


More information about the Kernelnewbies mailing list