Lines Matching refs:ctd

379 #define	EVSENDP(ctd, flag) \  argument
380 ((ctd->cond_contract.ct_ev_info | ctd->cond_contract.ct_ev_crit) & flag)
382 #define EVINFOP(ctd, flag) \ argument
383 ((ctd->cond_contract.ct_ev_crit & flag) == 0)
652 cont_device_t *ctd; in ctmpl_device_create() local
685 ctd = contract_device_create(template->ctmpl_data, in ctmpl_device_create()
688 if (ctd == NULL) { in ctmpl_device_create()
696 mutex_enter(&ctd->cond_contract.ct_lock); in ctmpl_device_create()
697 *ctidp = ctd->cond_contract.ct_id; in ctmpl_device_create()
698 mutex_exit(&ctd->cond_contract.ct_lock); in ctmpl_device_create()
753 cont_device_t *ctd = ct->ct_data; in contract_device_free() local
755 ASSERT(ctd->cond_minor); in contract_device_free()
756 ASSERT(strlen(ctd->cond_minor) < MAXPATHLEN); in contract_device_free()
757 kmem_free(ctd->cond_minor, strlen(ctd->cond_minor) + 1); in contract_device_free()
759 ASSERT(ctd->cond_devt != DDI_DEV_T_ANY && in contract_device_free()
760 ctd->cond_devt != DDI_DEV_T_NONE && ctd->cond_devt != NODEV); in contract_device_free()
762 ASSERT(ctd->cond_spec == S_IFBLK || ctd->cond_spec == S_IFCHR); in contract_device_free()
764 ASSERT(!(ctd->cond_aset & ~CT_DEV_ALLEVENT)); in contract_device_free()
765 ASSERT(ctd->cond_noneg == 0 || ctd->cond_noneg == 1); in contract_device_free()
767 ASSERT(!(ctd->cond_currev_type & ~CT_DEV_ALLEVENT)); in contract_device_free()
768 ASSERT(!(ctd->cond_currev_ack & ~(CT_ACK | CT_NACK))); in contract_device_free()
770 ASSERT((ctd->cond_currev_id > 0) ^ (ctd->cond_currev_type == 0)); in contract_device_free()
771 ASSERT((ctd->cond_currev_id > 0) || (ctd->cond_currev_ack == 0)); in contract_device_free()
773 ASSERT(!list_link_active(&ctd->cond_next)); in contract_device_free()
775 kmem_free(ctd, sizeof (cont_device_t)); in contract_device_free()
808 cont_device_t *ctd; in contract_device_destroy() local
814 ctd = ct->ct_data; in contract_device_destroy()
815 dip = ctd->cond_dip; in contract_device_destroy()
821 ASSERT(!list_link_active(&ctd->cond_next)); in contract_device_destroy()
854 list_remove(&(DEVI(dip)->devi_ct), ctd); in contract_device_destroy()
855 ctd->cond_dip = NULL; /* no longer linked to dip */ in contract_device_destroy()
874 cont_device_t *ctd = ct->ct_data; in contract_device_status() local
886 VERIFY(nvlist_add_uint32(nvl, CTDS_STATE, ctd->cond_state) == 0); in contract_device_status()
887 VERIFY(nvlist_add_uint32(nvl, CTDS_ASET, ctd->cond_aset) == 0); in contract_device_status()
888 VERIFY(nvlist_add_uint32(nvl, CTDS_NONEG, ctd->cond_noneg) == 0); in contract_device_status()
895 ASSERT(ctd->cond_minor); in contract_device_status()
896 VERIFY(nvlist_add_string(nvl, CTDS_MINOR, ctd->cond_minor) == 0); in contract_device_status()
1019 cont_device_t *ctd = ct->ct_data; in contract_device_ack_nack() local
1031 dip = ctd->cond_dip; in contract_device_ack_nack()
1033 ASSERT(ctd->cond_minor); in contract_device_ack_nack()
1034 ASSERT(strlen(ctd->cond_minor) < MAXPATHLEN); in contract_device_ack_nack()
1039 ASSERT(!(ctd->cond_aset & evtype)); in contract_device_ack_nack()
1044 ASSERT(is_sync_neg(ctd->cond_state, evtype)); in contract_device_ack_nack()
1049 ASSERT(!ctd->cond_noneg); in contract_device_ack_nack()
1075 if (ctd->cond_currev_id != evid) { in contract_device_ack_nack()
1083 ASSERT(ctd->cond_currev_type == evtype); in contract_device_ack_nack()
1100 if (ctd->cond_currev_id != evid) { in contract_device_ack_nack()
1118 ASSERT(ctd->cond_currev_type == evtype); in contract_device_ack_nack()
1124 ctd->cond_currev_ack = cmd; in contract_device_ack_nack()
1203 cont_device_t *ctd; in contract_device_create() local
1243 ctd = kmem_zalloc(sizeof (cont_device_t), KM_SLEEP); in contract_device_create()
1249 ctd->cond_minor = minor; in contract_device_create()
1255 ctd->cond_dip = dip; in contract_device_create()
1256 ctd->cond_devt = dev; in contract_device_create()
1257 ctd->cond_spec = spec_type; in contract_device_create()
1263 ctd->cond_state = DEVI_IS_DEVICE_DEGRADED(dip) ? in contract_device_create()
1267 ctd->cond_aset = dtmpl->ctd_aset; in contract_device_create()
1268 ctd->cond_noneg = dtmpl->ctd_noneg; in contract_device_create()
1274 if (contract_ctor(&ctd->cond_contract, device_type, &dtmpl->ctd_ctmpl, in contract_device_create()
1275 ctd, 0, owner, B_TRUE)) { in contract_device_create()
1284 contract_device_free(&ctd->cond_contract); in contract_device_create()
1297 mutex_enter(&ctd->cond_contract.ct_lock); in contract_device_create()
1298 ctd->cond_contract.ct_ntime.ctm_total = CT_DEV_ACKTIME; in contract_device_create()
1299 ctd->cond_contract.ct_qtime.ctm_total = CT_DEV_ACKTIME; in contract_device_create()
1300 ctd->cond_contract.ct_ntime.ctm_start = -1; in contract_device_create()
1301 ctd->cond_contract.ct_qtime.ctm_start = -1; in contract_device_create()
1302 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_create()
1308 contract_hold(&ctd->cond_contract); in contract_device_create()
1310 list_insert_tail(&(DEVI(dip)->devi_ct), ctd); in contract_device_create()
1318 return (ctd); in contract_device_create()
1330 cont_device_t *ctd; in contract_device_open() local
1388 ctd = contract_device_create(dtmpl, dev, spec_type, curproc, &error); in contract_device_open()
1397 if (ctd == NULL) { in contract_device_open()
1406 mutex_enter(&ctd->cond_contract.ct_lock); in contract_device_open()
1407 *ctpp = &ctd->cond_contract; in contract_device_open()
1408 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_open()
1421 cont_device_t *ctd; in wait_for_acks() local
1445 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in wait_for_acks()
1446 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in wait_for_acks()
1448 mutex_enter(&ctd->cond_contract.ct_lock); in wait_for_acks()
1450 ASSERT(ctd->cond_dip == dip); in wait_for_acks()
1452 if (dev != DDI_DEV_T_ANY && dev != ctd->cond_devt) { in wait_for_acks()
1453 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1456 if (dev != DDI_DEV_T_ANY && spec_type != ctd->cond_spec) { in wait_for_acks()
1457 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1462 if (ctd->cond_noneg) { in wait_for_acks()
1463 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1467 ASSERT(ctd->cond_currev_type == evtype); in wait_for_acks()
1468 if (ctd->cond_currev_ack == CT_NACK) { in wait_for_acks()
1471 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1473 } else if (ctd->cond_currev_ack == CT_ACK) { in wait_for_acks()
1478 mutex_exit(&ctd->cond_contract.ct_lock); in wait_for_acks()
1518 cont_device_t *ctd; in set_cond_state() local
1523 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in set_cond_state()
1524 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in set_cond_state()
1525 mutex_enter(&ctd->cond_contract.ct_lock); in set_cond_state()
1526 ASSERT(ctd->cond_dip == dip); in set_cond_state()
1527 ctd->cond_state = state; in set_cond_state()
1528 mutex_exit(&ctd->cond_contract.ct_lock); in set_cond_state()
1587 cont_device_t *ctd; in contract_device_publish() local
1666 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in contract_device_publish()
1667 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in contract_device_publish()
1672 mutex_enter(&ctd->cond_contract.ct_lock); in contract_device_publish()
1674 ASSERT(ctd->cond_dip == dip); in contract_device_publish()
1675 ASSERT(ctd->cond_minor); in contract_device_publish()
1676 ASSERT(strncmp(ctd->cond_minor, path, len) == 0 && in contract_device_publish()
1677 ctd->cond_minor[len] == ':'); in contract_device_publish()
1679 if (dev != DDI_DEV_T_ANY && dev != ctd->cond_devt) { in contract_device_publish()
1680 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1683 if (dev != DDI_DEV_T_ANY && spec_type != ctd->cond_spec) { in contract_device_publish()
1684 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1690 ctid = ctd->cond_contract.ct_id; in contract_device_publish()
1709 if (!negend && !(evtype & ctd->cond_aset)) { in contract_device_publish()
1721 if (!broken && !EVSENDP(ctd, evtype) && in contract_device_publish()
1722 !ctd->cond_neg) { in contract_device_publish()
1725 ctd->cond_contract.ct_id, evtype)); in contract_device_publish()
1726 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1734 ct = &ctd->cond_contract; in contract_device_publish()
1742 ASSERT(ctd->cond_currev_id == 0); in contract_device_publish()
1743 ASSERT(ctd->cond_currev_type == 0); in contract_device_publish()
1744 ASSERT(ctd->cond_currev_ack == 0); in contract_device_publish()
1745 ASSERT(ctd->cond_neg == 0); in contract_device_publish()
1746 if (ctd->cond_noneg) { in contract_device_publish()
1753 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1757 ctd->cond_currev_type = event->cte_type; in contract_device_publish()
1760 ctd->cond_neg = 1; in contract_device_publish()
1765 ASSERT(ctd->cond_currev_id == 0); in contract_device_publish()
1766 ASSERT(ctd->cond_currev_type == 0); in contract_device_publish()
1767 ASSERT(ctd->cond_currev_ack == 0); in contract_device_publish()
1768 ASSERT(ctd->cond_neg == 0); in contract_device_publish()
1770 } else if (EVSENDP(ctd, event->cte_type)) { in contract_device_publish()
1774 ASSERT(ctd->cond_currev_id == 0); in contract_device_publish()
1775 ASSERT(ctd->cond_currev_type == 0); in contract_device_publish()
1776 ASSERT(ctd->cond_currev_ack == 0); in contract_device_publish()
1777 ASSERT(ctd->cond_neg == 0); in contract_device_publish()
1778 event->cte_flags = EVINFOP(ctd, event->cte_type) ? in contract_device_publish()
1780 } else if (ctd->cond_neg) { in contract_device_publish()
1783 ASSERT(ctd->cond_noneg == 0); in contract_device_publish()
1784 nevid = ctd->cond_contract.ct_nevent ? in contract_device_publish()
1785 ctd->cond_contract.ct_nevent->cte_id : 0; in contract_device_publish()
1786 ASSERT(ctd->cond_currev_id == nevid); in contract_device_publish()
1788 ctd->cond_currev_id = 0; in contract_device_publish()
1789 ctd->cond_currev_type = 0; in contract_device_publish()
1790 ctd->cond_currev_ack = 0; in contract_device_publish()
1791 ctd->cond_neg = 0; in contract_device_publish()
1795 ctd->cond_contract.ct_id, event->cte_type)); in contract_device_publish()
1797 ASSERT(ctd->cond_currev_id == 0); in contract_device_publish()
1798 ASSERT(ctd->cond_currev_type == 0); in contract_device_publish()
1799 ASSERT(ctd->cond_currev_ack == 0); in contract_device_publish()
1800 ASSERT(ctd->cond_neg == 0); in contract_device_publish()
1802 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1811 ASSERT(ctd->cond_noneg == 0); in contract_device_publish()
1818 ctd->cond_contract.ct_id) == 0); in contract_device_publish()
1827 if (ctd->cond_neg) { in contract_device_publish()
1828 ASSERT(ctd->cond_contract.ct_ntime.ctm_start == -1); in contract_device_publish()
1829 ASSERT(ctd->cond_contract.ct_qtime.ctm_start == -1); in contract_device_publish()
1830 ctd->cond_contract.ct_ntime.ctm_start = ddi_get_lbolt(); in contract_device_publish()
1831 ctd->cond_contract.ct_qtime.ctm_start = in contract_device_publish()
1832 ctd->cond_contract.ct_ntime.ctm_start; in contract_device_publish()
1840 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
1842 mutex_enter(&ctd->cond_contract.ct_lock); in contract_device_publish()
1844 if (ctd->cond_neg) { in contract_device_publish()
1848 ASSERT(!ctd->cond_noneg); in contract_device_publish()
1851 ctd->cond_currev_id = evid; in contract_device_publish()
1853 ctd->cond_contract.ct_ntime.ctm_start = -1; in contract_device_publish()
1854 ctd->cond_contract.ct_qtime.ctm_start = -1; in contract_device_publish()
1856 mutex_exit(&ctd->cond_contract.ct_lock); in contract_device_publish()
2108 cont_device_t *ctd; in contract_device_remove_dip() local
2115 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; ctd = next) { in contract_device_remove_dip()
2116 next = list_next(&(DEVI(dip)->devi_ct), ctd); in contract_device_remove_dip()
2117 list_remove(&(DEVI(dip)->devi_ct), ctd); in contract_device_remove_dip()
2118 ct = &ctd->cond_contract; in contract_device_remove_dip()
2123 ASSERT(ctd->cond_dip == dip); in contract_device_remove_dip()
2124 ctd->cond_dip = NULL; /* no longer linked to dip */ in contract_device_remove_dip()