DragonFly kernel List (threaded) for 2005-03
question on cdevsw_add mask/match
I'm a little confused as how to correctly specify mask and match for
cdevsw_add() and cdevsw_remove(). There are a number of drivers that
specify mask and match similar to the following
cdevsw_add(&isp_cdevsw, -1, device_get_unit(isp->isp_dev));
(not to single out the QLogic driver ;^) ). The problem with this
specification is on a kldunload, the kernel will spit out the
svd(202)[ffffffff/00000000]: Warning: cdevsw_remove() called while 1 device refs still exist!
because destroy_all_dev() uses the mask (0xffffffff) on dev->si_udev
and compares it to the match value (0) which won't match because
si_udev is a combination of the major and minor numbers (0xca00 in the
above case) and not the unit number.
The question is what is the correct way to specify mask/match? In my
case, 0/0 "works" but I wasn't sure if that specification is correct.