helper
dtrace_helper_action_t helper;
if (mdb_vread(&helper, sizeof (helper), haddr) == -1) {
mdb_printf("%p\n", helper.dtha_predicate);
haddr = (uintptr_t)helper.dtha_actions +
dtrace_helper_trace(dtrace_helper_action_t *helper,
ent->dtht_helper = helper;
dtrace_helper_action_t *helper;
if ((helper = helpers->dthps_actions[which]) == NULL)
for (; helper != NULL; helper = helper->dtha_next) {
if ((pred = helper->dtha_predicate) != NULL) {
dtrace_helper_trace(helper, mstate, vstate, 0);
for (i = 0; i < helper->dtha_nactions; i++) {
dtrace_helper_trace(helper,
rval = dtrace_dif_emulate(helper->dtha_actions[i],
dtrace_helper_trace(helper, mstate, vstate,
dtrace_helper_trace(helper, mstate, vstate,
dtrace_helper_trace(helper, mstate, vstate,
dtrace_helper_action_destroy(dtrace_helper_action_t *helper,
if (helper->dtha_predicate != NULL)
dtrace_difo_release(helper->dtha_predicate, vstate);
for (i = 0; i < helper->dtha_nactions; i++) {
ASSERT(helper->dtha_actions[i] != NULL);
dtrace_difo_release(helper->dtha_actions[i], vstate);
kmem_free(helper->dtha_actions,
helper->dtha_nactions * sizeof (dtrace_difo_t *));
kmem_free(helper, sizeof (dtrace_helper_action_t));
dtrace_helper_validate(dtrace_helper_action_t *helper)
if ((dp = helper->dtha_predicate) != NULL)
for (i = 0; i < helper->dtha_nactions; i++)
err += dtrace_difo_validate_helper(helper->dtha_actions[i]);
dtrace_helper_action_t *helper, *last;
helper = kmem_zalloc(sizeof (dtrace_helper_action_t), KM_SLEEP);
helper->dtha_generation = help->dthps_generation;
helper->dtha_predicate = pred->dtp_difo;
helper->dtha_actions = kmem_zalloc(sizeof (dtrace_difo_t *) *
(helper->dtha_nactions = nactions), KM_SLEEP);
helper->dtha_actions[i++] = act->dtad_difo;
if (!dtrace_helper_validate(helper))
help->dthps_actions[which] = helper;
last->dtha_next = helper;
dtrace_helper_action_destroy(helper, vstate);
dtrace_helper_action_t *helper, *new, *last;
if ((helper = help->dthps_actions[i]) == NULL)
for (last = NULL; helper != NULL; helper = helper->dtha_next) {
new->dtha_generation = helper->dtha_generation;
if ((dp = helper->dtha_predicate) != NULL) {
new->dtha_nactions = helper->dtha_nactions;
dtrace_difo_t *dp = helper->dtha_actions[j];
ip_helper_stream_info_t *helper;
helper = kmem_alloc(sizeof (ip_helper_stream_info_t), KM_SLEEP);
DEV_IP), IP_HELPER_STR, kcred, &helper->iphs_handle, li);
kmem_free(helper, sizeof (ip_helper_stream_info_t));
(void) ldi_close(helper->iphs_handle, 0, kcred);
kmem_free(helper, sizeof (ip_helper_stream_info_t));
connp->conn_helper_info = helper;
error = ldi_ioctl(helper->iphs_handle, SIOCSQPTR, (intptr_t)connp,
(void) ldi_close(helper->iphs_handle, 0, kcred);
kmem_free(helper, sizeof (ip_helper_stream_info_t));
struct audio_ops_helper *helper;
helper = kmem_zalloc(sizeof (*helper), KM_SLEEP);
(void) strlcpy(helper->name, name, sizeof (helper->name));
helper->minfo.mi_idnum = 0; /* only for strlog(8) */
helper->minfo.mi_idname = helper->name;
helper->minfo.mi_minpsz = 0;
helper->minfo.mi_maxpsz = 8192;
helper->minfo.mi_hiwat = 65536;
helper->minfo.mi_lowat = 32768;
helper->wqinit.qi_putp = audio_wput;
helper->wqinit.qi_srvp = audio_wsrv;
helper->wqinit.qi_qopen = NULL;
helper->wqinit.qi_qclose = NULL;
helper->wqinit.qi_qadmin = NULL;
helper->wqinit.qi_minfo = &helper->minfo;
helper->wqinit.qi_mstat = NULL;
helper->rqinit.qi_putp = putq;
helper->rqinit.qi_srvp = audio_rsrv;
helper->rqinit.qi_qopen = audio_stropen;
helper->rqinit.qi_qclose = audio_strclose;
helper->rqinit.qi_qadmin = NULL;
helper->rqinit.qi_minfo = &helper->minfo;
helper->rqinit.qi_mstat = NULL;
helper->strtab.st_rdinit = &helper->rqinit;
helper->strtab.st_wrinit = &helper->wqinit;
helper->strtab.st_muxrinit = NULL;
helper->strtab.st_muxwinit = NULL;
helper->cbops.cb_open = audio_open;
helper->cbops.cb_close = audio_close;
helper->cbops.cb_strategy = nodev;
helper->cbops.cb_print = nodev;
helper->cbops.cb_dump = nodev;
helper->cbops.cb_read = audio_read;
helper->cbops.cb_write = audio_write;
helper->cbops.cb_ioctl = audio_ioctl;
helper->cbops.cb_devmap = nodev;
helper->cbops.cb_mmap = nodev;
helper->cbops.cb_segmap = nodev;
helper->cbops.cb_chpoll = audio_chpoll;
helper->cbops.cb_prop_op = ddi_prop_op;
helper->cbops.cb_str = &helper->strtab;
helper->cbops.cb_flag = D_MP | D_64BIT;
helper->cbops.cb_rev = CB_REV;
helper->cbops.cb_aread = nodev;
helper->cbops.cb_awrite = nodev;
devops->devo_cb_ops = &helper->cbops;
ohp = cfg->helper;
for (hp = cfg->helper; hp < endhp; hp++) {
if (hp->helper == MAINHELPER) {
if (hp->helper == MAINHELPER) {
if (panicstr && hp->helper != MAINHELPER)
hp->helper, BZ2_bzErrorString(rc),
hp->helper, BZ2_bzErrorString(rc));
helper_t *hp, *hpend = &dumpcfg.helper[dumpcfg.nhelper];
for (hp = dumpcfg.helper; hp != hpend; hp++) {
if (hp->helper == FREEHELPER) {
hp->helper = CPU->cpu_id;
hp->helper = DONEHELPER;
hp->helper = MAINHELPER;
if (dumpcfg.helper[0].lzbuf == NULL) {
dumpcfg.helper[0].lzbuf =
dumpcfg.helper[1].page;
dumpsys_lzjb_page(dumpcfg.helper, cp);
helper_t *hp, *hpend = &cfg->helper[cfg->nhelper];
for (hp = cfg->helper; hp != hpend; hp++) {
helper_t *hp, *hpend = &dumpcfg.helper[dumpcfg.nhelper];
for (hp = dumpcfg.helper; hp != hpend; hp++) {
hp->helper = DONEHELPER;
hp->helper = FREEHELPER;
for (hp = dumpcfg.helper; hp != hpend; hp++) {
hp->helper = hp - dumpcfg.helper;
int helper; /* bound helper id */
helper_t *helper; /* array of helpers */
if (old->helper != NULL) {
hpend = &old->helper[old->nhelper];
for (hp = old->helper; hp != hpend; hp++) {
kmem_free(old->helper, old->nhelper * sizeof (helper_t));
new->helper = kmem_zalloc(new->nhelper * sizeof (helper_t), KM_SLEEP);
hpend = &new->helper[new->nhelper];
for (hp = new->helper; hp != hpend; hp++) {
if (hp < &new->helper[MINHELPERS]) {
helper_t *endhp = &cfg->helper[cfg->nhelper];