| 1194 | } |
| 1195 | |
| 1196 | static void |
| 1197 | delist_dev_locked(struct cdev *dev) |
| 1198 | { |
| 1199 | struct cdev_priv *cdp; |
| 1200 | struct cdev *child; |
| 1201 | |
| 1202 | dev_lock_assert_locked(); |
| 1203 | cdp = cdev2priv(dev); |
| 1204 | if ((cdp->cdp_flags & CDP_UNREF_DTR) != 0) |
| 1205 | return; |
| 1206 | cdp->cdp_flags |= CDP_UNREF_DTR; |
| 1207 | dev_refl(dev); |
| 1208 | devfs_destroy(dev); |
| 1209 | LIST_FOREACH(child, &dev->si_children, si_siblings) |
| 1210 | delist_dev_locked(child); |
| 1211 | dev_unlock(); |
| 1212 | /* ensure the destroy event is queued in order */ |
| 1213 | notify_destroy(dev); |
| 1214 | dev_lock(); |
| 1215 | } |
| 1216 | |
| 1217 | /* |
| 1218 | * This function will delist a character device and its children from |
no test coverage detected