Dev zeros the dir path before genning
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 14 Nov 2013 20:58:25 +0000 (12:58 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 29 Jan 2014 19:03:26 +0000 (11:03 -0800)
commitb077b6ca6db37b93bfdf597df3d88501d80fb24a
treed1a2280838ea5ef32c66716a1836b4292d1569a6
parentdb3f6ac7ee6b662e100272d7223457a76c5a4942
Dev zeros the dir path before genning

It's useful for devices to be able to get information about the last run
through their gen function when run in a tight loop.  There's no good
way to do pass an arbitrary value back, but we can use the dir to
communicate the result of the previous run.  So long as we handle the
initial case.

Gens communicate via the dir, and dir->qid.path is the last path used in
the previous run.  This works if we can bootstrap it, and passing in
gibberish (on the stack) or ancient versions of dir will mess things up.
So now any caller of a gen in a loop will make sure dir's path is 0.

Also, it's not sufficient to just check for {s,i} == 0 to detect the
"first run" of a gen.  Sometimes (devdirread()), a device will be asked
to gen starting at a higher value of its iterator.  By zeroing dir's
path, a gen can tell if it is in the middle or not of a series of runs.
kern/drivers/dev/dev.c