| 157 | } |
| 158 | |
| 159 | void |
| 160 | dev_rel(struct cdev *dev) |
| 161 | { |
| 162 | int flag = 0; |
| 163 | |
| 164 | dev_lock_assert_unlocked(); |
| 165 | dev_lock(); |
| 166 | dev->si_refcount--; |
| 167 | KASSERT(dev->si_refcount >= 0, |
| 168 | ("dev_rel(%s) gave negative count", devtoname(dev))); |
| 169 | if (dev->si_devsw == NULL && dev->si_refcount == 0) { |
| 170 | LIST_REMOVE(dev, si_list); |
| 171 | flag = 1; |
| 172 | } |
| 173 | dev_unlock(); |
| 174 | if (flag) |
| 175 | devfs_free(dev); |
| 176 | } |
| 177 | |
| 178 | struct cdevsw * |
| 179 | dev_refthread(struct cdev *dev, int *ref) |
no test coverage detected