* devmtx shall be locked on entry. devmtx will be unlocked after * function return. */
| 1459 | * function return. |
| 1460 | */ |
| 1461 | static int |
| 1462 | destroy_dev_sched_cbl(struct cdev *dev, void (*cb)(void *), void *arg) |
| 1463 | { |
| 1464 | struct cdev_priv *cp; |
| 1465 | |
| 1466 | dev_lock_assert_locked(); |
| 1467 | cp = cdev2priv(dev); |
| 1468 | if (cp->cdp_flags & CDP_SCHED_DTR) { |
| 1469 | dev_unlock(); |
| 1470 | return (0); |
| 1471 | } |
| 1472 | dev_refl(dev); |
| 1473 | cp->cdp_flags |= CDP_SCHED_DTR; |
| 1474 | cp->cdp_dtr_cb = cb; |
| 1475 | cp->cdp_dtr_cb_arg = arg; |
| 1476 | TAILQ_INSERT_TAIL(&dev_ddtr, cp, cdp_dtr_list); |
| 1477 | dev_unlock(); |
| 1478 | taskqueue_enqueue(taskqueue_swi_giant, &dev_dtr_task); |
| 1479 | return (1); |
| 1480 | } |
| 1481 | |
| 1482 | int |
| 1483 | destroy_dev_sched_cb(struct cdev *dev, void (*cb)(void *), void *arg) |
no test coverage detected