Lines Matching refs:ctd

378 #define	EVSENDP(ctd, flag) \  argument
379 ((ctd->cond_contract.ct_ev_info | ctd->cond_contract.ct_ev_crit) & flag)
381 #define EVINFOP(ctd, flag) \ argument
382 ((ctd->cond_contract.ct_ev_crit & flag) == 0)
650 cont_device_t *ctd; in ctmpl_device_create() local
683 ctd = contract_device_create(template->ctmpl_data, in ctmpl_device_create()
686 if (ctd == NULL) { in ctmpl_device_create()
694 mutex_enter(&ctd->cond_contract.ct_lock); in ctmpl_device_create()
695 *ctidp = ctd->cond_contract.ct_id; in ctmpl_device_create()
696 mutex_exit(&ctd->cond_contract.ct_lock); in ctmpl_device_create()
751 cont_device_t *ctd = ct->ct_data; in contract_device_free() local
753 ASSERT(ctd->cond_minor); in contract_device_free()
754 ASSERT(strlen(ctd->cond_minor) < MAXPATHLEN); in contract_device_free()
755 kmem_free(ctd->cond_minor, strlen(ctd->cond_minor) + 1); in contract_device_free()
757 ASSERT(ctd->cond_devt != DDI_DEV_T_ANY && in contract_device_free()
758 ctd->cond_devt != DDI_DEV_T_NONE && ctd->cond_devt != NODEV); in contract_device_free()
760 ASSERT(ctd->cond_spec == S_IFBLK || ctd->cond_spec == S_IFCHR); in contract_device_free()
762 ASSERT(!(ctd->cond_aset & ~CT_DEV_ALLEVENT)); in contract_device_free()
763 ASSERT(ctd->cond_noneg == 0 || ctd->cond_noneg == 1); in contract_device_free()
765 ASSERT(!(ctd->cond_currev_type & ~CT_DEV_ALLEVENT)); in contract_device_free()
766 ASSERT(!(ctd->cond_currev_ack & ~(CT_ACK | CT_NACK))); in contract_device_free()
768 ASSERT((ctd->cond_currev_id > 0) ^ (ctd->cond_currev_type == 0)); in contract_device_free()
769 ASSERT((ctd->cond_currev_id > 0) || (ctd->cond_currev_ack == 0)); in contract_device_free()
771 ASSERT(!list_link_active(&ctd->cond_next)); in contract_device_free()
773 kmem_free(ctd, sizeof (cont_device_t)); in contract_device_free()
806 cont_device_t *ctd; in contract_device_destroy() local
812 ctd = ct->ct_data; in contract_device_destroy()
813 dip = ctd->cond_dip; in contract_device_destroy()
819 ASSERT(!list_link_active(&ctd->cond_next)); in contract_device_destroy()
852 list_remove(&(DEVI(dip)->devi_ct), ctd); in contract_device_destroy()
853 ctd->cond_dip = NULL; /* no longer linked to dip */ in contract_device_destroy()
872 cont_device_t *ctd = ct->ct_data; in contract_device_status() local
884 VERIFY(nvlist_add_uint32(nvl, CTDS_STATE, ctd->cond_state) == 0); in contract_device_status()
885 VERIFY(nvlist_add_uint32(nvl, CTDS_ASET, ctd->cond_aset) == 0); in contract_device_status()
886 VERIFY(nvlist_add_uint32(nvl, CTDS_NONEG, ctd->cond_noneg) == 0); in contract_device_status()
893 ASSERT(ctd->cond_minor); in contract_device_status()
894 VERIFY(nvlist_add_string(nvl, CTDS_MINOR, ctd->cond_minor) == 0); in contract_device_status()
1018 cont_device_t *ctd = ct->ct_data; in contract_device_ack_nack() local
1030 dip = ctd->cond_dip; in contract_device_ack_nack()
1032 ASSERT(ctd->cond_minor); in contract_device_ack_nack()
1033 ASSERT(strlen(ctd->cond_minor) < MAXPATHLEN); in contract_device_ack_nack()
1038 ASSERT(!(ctd->cond_aset & evtype)); in contract_device_ack_nack()
1043 ASSERT(is_sync_neg(ctd->cond_state, evtype)); in contract_device_ack_nack()
1048 ASSERT(!ctd->cond_noneg); in contract_device_ack_nack()
1074 if (ctd->cond_currev_id != evid) { in contract_device_ack_nack()
1082 ASSERT(ctd->cond_currev_type == evtype); in contract_device_ack_nack()
1099 if (ctd->cond_currev_id != evid) { in contract_device_ack_nack()
1117 ASSERT(ctd->cond_currev_type == evtype); in contract_device_ack_nack()
1123 ctd->cond_currev_ack = cmd; in contract_device_ack_nack()
1202 cont_device_t *ctd; in contract_device_create() local
1242 ctd = kmem_zalloc(sizeof (cont_device_t), KM_SLEEP); in contract_device_create()
1248 ctd->cond_minor = minor; in contract_device_create()
1254 ctd->cond_dip = dip; in contract_device_create()
1255 ctd->cond_devt = dev; in contract_device_create()
1256 ctd->cond_spec = spec_type; in contract_device_create()
1262 ctd->cond_state = DEVI_IS_DEVICE_DEGRADED(dip) ? in contract_device_create()
1266 ctd->cond_aset = dtmpl->ctd_aset; in contract_device_create()
1267 ctd->cond_noneg = dtmpl->ctd_noneg; in contract_device_create()
1273 if (contract_ctor(&ctd->cond_contract, device_type, &dtmpl->ctd_ctmpl, in contract_device_create()
1274 ctd, 0, owner, B_TRUE)) { in contract_device_create()
1283 contract_device_free(&ctd->cond_contract); in contract_device_create()
1296 mutex_enter(&ctd->cond_contract.ct_lock); in contract_device_create()
1297 ctd->cond_contract.ct_ntime.ctm_total = CT_DEV_ACKTIME; in contract_device_create()
1298 ctd->cond_contract.ct_qtime.ctm_total = CT_DEV_ACKTIME; in contract_device_create()
1299 ctd->cond_contract.ct_ntime.ctm_start = -1; in contract_device_create()
1300 ctd->cond_contract.ct_qtime.ctm_start = -1; in contract_device_create()
1301 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_create()
1307 contract_hold(&ctd->cond_contract); in contract_device_create()
1309 list_insert_tail(&(DEVI(dip)->devi_ct), ctd); in contract_device_create()
1317 return (ctd); in contract_device_create()
1329 cont_device_t *ctd; in contract_device_open() local
1387 ctd = contract_device_create(dtmpl, dev, spec_type, curproc, &error); in contract_device_open()
1396 if (ctd == NULL) { in contract_device_open()
1405 mutex_enter(&ctd->cond_contract.ct_lock); in contract_device_open()
1406 *ctpp = &ctd->cond_contract; in contract_device_open()
1407 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_open()
1420 cont_device_t *ctd; in wait_for_acks() local
1444 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in wait_for_acks()
1445 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in wait_for_acks()
1447 mutex_enter(&ctd->cond_contract.ct_lock); in wait_for_acks()
1449 ASSERT(ctd->cond_dip == dip); in wait_for_acks()
1451 if (dev != DDI_DEV_T_ANY && dev != ctd->cond_devt) { in wait_for_acks()
1452 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1455 if (dev != DDI_DEV_T_ANY && spec_type != ctd->cond_spec) { in wait_for_acks()
1456 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1461 if (ctd->cond_noneg) { in wait_for_acks()
1462 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1466 ASSERT(ctd->cond_currev_type == evtype); in wait_for_acks()
1467 if (ctd->cond_currev_ack == CT_NACK) { in wait_for_acks()
1470 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1472 } else if (ctd->cond_currev_ack == CT_ACK) { in wait_for_acks()
1477 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1517 cont_device_t *ctd; in set_cond_state() local
1522 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in set_cond_state()
1523 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in set_cond_state()
1524 mutex_enter(&ctd->cond_contract.ct_lock); in set_cond_state()
1525 ASSERT(ctd->cond_dip == dip); in set_cond_state()
1526 ctd->cond_state = state; in set_cond_state()
1527 mutex_exit(&ctd->cond_contract.ct_lock); in set_cond_state()
1586 cont_device_t *ctd; in contract_device_publish() local
1665 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in contract_device_publish()
1666 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in contract_device_publish()
1671 mutex_enter(&ctd->cond_contract.ct_lock); in contract_device_publish()
1673 ASSERT(ctd->cond_dip == dip); in contract_device_publish()
1674 ASSERT(ctd->cond_minor); in contract_device_publish()
1675 ASSERT(strncmp(ctd->cond_minor, path, len) == 0 && in contract_device_publish()
1676 ctd->cond_minor[len] == ':'); in contract_device_publish()
1678 if (dev != DDI_DEV_T_ANY && dev != ctd->cond_devt) { in contract_device_publish()
1679 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1682 if (dev != DDI_DEV_T_ANY && spec_type != ctd->cond_spec) { in contract_device_publish()
1683 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1689 ctid = ctd->cond_contract.ct_id; in contract_device_publish()
1708 if (!negend && !(evtype & ctd->cond_aset)) { in contract_device_publish()
1720 if (!broken && !EVSENDP(ctd, evtype) && in contract_device_publish()
1721 !ctd->cond_neg) { in contract_device_publish()
1724 ctd->cond_contract.ct_id, evtype)); in contract_device_publish()
1725 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1733 ct = &ctd->cond_contract; in contract_device_publish()
1741 ASSERT(ctd->cond_currev_id == 0); in contract_device_publish()
1742 ASSERT(ctd->cond_currev_type == 0); in contract_device_publish()
1743 ASSERT(ctd->cond_currev_ack == 0); in contract_device_publish()
1744 ASSERT(ctd->cond_neg == 0); in contract_device_publish()
1745 if (ctd->cond_noneg) { in contract_device_publish()
1752 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1756 ctd->cond_currev_type = event->cte_type; in contract_device_publish()
1759 ctd->cond_neg = 1; in contract_device_publish()
1764 ASSERT(ctd->cond_currev_id == 0); in contract_device_publish()
1765 ASSERT(ctd->cond_currev_type == 0); in contract_device_publish()
1766 ASSERT(ctd->cond_currev_ack == 0); in contract_device_publish()
1767 ASSERT(ctd->cond_neg == 0); in contract_device_publish()
1769 } else if (EVSENDP(ctd, event->cte_type)) { in contract_device_publish()
1773 ASSERT(ctd->cond_currev_id == 0); in contract_device_publish()
1774 ASSERT(ctd->cond_currev_type == 0); in contract_device_publish()
1775 ASSERT(ctd->cond_currev_ack == 0); in contract_device_publish()
1776 ASSERT(ctd->cond_neg == 0); in contract_device_publish()
1777 event->cte_flags = EVINFOP(ctd, event->cte_type) ? in contract_device_publish()
1779 } else if (ctd->cond_neg) { in contract_device_publish()
1782 ASSERT(ctd->cond_noneg == 0); in contract_device_publish()
1783 nevid = ctd->cond_contract.ct_nevent ? in contract_device_publish()
1784 ctd->cond_contract.ct_nevent->cte_id : 0; in contract_device_publish()
1785 ASSERT(ctd->cond_currev_id == nevid); in contract_device_publish()
1787 ctd->cond_currev_id = 0; in contract_device_publish()
1788 ctd->cond_currev_type = 0; in contract_device_publish()
1789 ctd->cond_currev_ack = 0; in contract_device_publish()
1790 ctd->cond_neg = 0; in contract_device_publish()
1794 ctd->cond_contract.ct_id, event->cte_type)); in contract_device_publish()
1796 ASSERT(ctd->cond_currev_id == 0); in contract_device_publish()
1797 ASSERT(ctd->cond_currev_type == 0); in contract_device_publish()
1798 ASSERT(ctd->cond_currev_ack == 0); in contract_device_publish()
1799 ASSERT(ctd->cond_neg == 0); in contract_device_publish()
1801 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1810 ASSERT(ctd->cond_noneg == 0); in contract_device_publish()
1817 ctd->cond_contract.ct_id) == 0); in contract_device_publish()
1826 if (ctd->cond_neg) { in contract_device_publish()
1827 ASSERT(ctd->cond_contract.ct_ntime.ctm_start == -1); in contract_device_publish()
1828 ASSERT(ctd->cond_contract.ct_qtime.ctm_start == -1); in contract_device_publish()
1829 ctd->cond_contract.ct_ntime.ctm_start = ddi_get_lbolt(); in contract_device_publish()
1830 ctd->cond_contract.ct_qtime.ctm_start = in contract_device_publish()
1831 ctd->cond_contract.ct_ntime.ctm_start; in contract_device_publish()
1839 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1841 mutex_enter(&ctd->cond_contract.ct_lock); in contract_device_publish()
1843 if (ctd->cond_neg) { in contract_device_publish()
1847 ASSERT(!ctd->cond_noneg); in contract_device_publish()
1850 ctd->cond_currev_id = evid; in contract_device_publish()
1852 ctd->cond_contract.ct_ntime.ctm_start = -1; in contract_device_publish()
1853 ctd->cond_contract.ct_qtime.ctm_start = -1; in contract_device_publish()
1855 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
2107 cont_device_t *ctd; in contract_device_remove_dip() local
2114 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; ctd = next) { in contract_device_remove_dip()
2115 next = list_next(&(DEVI(dip)->devi_ct), ctd); in contract_device_remove_dip()
2116 list_remove(&(DEVI(dip)->devi_ct), ctd); in contract_device_remove_dip()
2117 ct = &ctd->cond_contract; in contract_device_remove_dip()
2122 ASSERT(ctd->cond_dip == dip); in contract_device_remove_dip()
2123 ctd->cond_dip = NULL; /* no longer linked to dip */ in contract_device_remove_dip()