pauld@cs.washington.edu (Paul Barton-Davis) (06/19/91)
Here's an easy one for someone. I presumed a need to free up any
allocated clist cblocks that have been allocated by my device driver
when I finally close the device. It wasn't clear to me how to do this
from the descriptions of the various put/get clblock options, but
here's what I came up with (the entire close entry point is included):
pc21close (dev, flag)
dev_t dev;
int flag;
{
register int unit;
register int i;
struct cblock *free_block;
int x;
if ((unit = minor (dev)) >= pc21_max)
{
u.u_error = ENODEV;
return;
}
/* mark the board as available
*/
pc21_params[unit].status &= ~PC21_BUSY;
/* remove cblocks from output clist
*/
X x = splcli();
X while ((free_block = getcb (&(pc21_params[unit].output))) !=
X (struct cblock *) NULL)
X putcf (free_block);
X splx (x);
u.u_error = 0;
return;
}
Can someone tell me if the lines marked with an "X" do what I want
them to: get each allocated cblock and return it too the free list ?
Is there a better way to do this, or can I even forget about it
completely ?
Thanks for any advice - I'm hoping this isn't the source of a problem
we're having on a machine running this driver.
--
Paul Barton-Davis <pauld@cs.washington.edu>
Man has survived because he did not know how to realize his wishes.
Now that he can realize them, he must either change them, or perish.