Lines Matching refs:dkp

76 #define	DKTP_DATA		(dkp->dk_tgobjp)->tg_data
77 #define DKTP_EXT (dkp->dk_tgobjp)->tg_ext
99 static int cmdk_create_obj(dev_info_t *dip, struct cmdk *dkp);
100 static void cmdk_destroy_obj(dev_info_t *dip, struct cmdk *dkp);
108 static void cmdk_bbh_reopen(struct cmdk *dkp);
112 static void cmdk_bbh_close(struct cmdk *dkp);
113 static void cmdk_bbh_setalts_idx(struct cmdk *dkp);
168 static void cmdk_setup_pm(dev_info_t *dip, struct cmdk *dkp);
211 static void cmdk_devid_setup(struct cmdk *dkp);
212 static int cmdk_devid_modser(struct cmdk *dkp);
213 static int cmdk_get_modser(struct cmdk *dkp, int ioccmd, char *buf, int len);
214 static int cmdk_devid_fabricate(struct cmdk *dkp);
215 static int cmdk_devid_read(struct cmdk *dkp);
224 cmdk_isopen(struct cmdk *dkp, dev_t dev) in cmdk_isopen() argument
229 ASSERT(MUTEX_HELD((&dkp->dk_mutex))); in cmdk_isopen()
235 if (dkp->dk_open_lyr[part] != 0) in cmdk_isopen()
238 if (dkp->dk_open_reg[otyp] & partbit) in cmdk_isopen()
279 struct cmdk *dkp; in cmdkprobe() local
289 if ((dkp = ddi_get_soft_state(cmdk_state, instance)) == NULL) in cmdkprobe()
292 mutex_init(&dkp->dk_mutex, NULL, MUTEX_DRIVER, NULL); in cmdkprobe()
293 rw_init(&dkp->dk_bbh_mutex, NULL, RW_DRIVER, NULL); in cmdkprobe()
294 dkp->dk_dip = dip; in cmdkprobe()
295 mutex_enter(&dkp->dk_mutex); in cmdkprobe()
297 dkp->dk_dev = makedevice(ddi_driver_major(dip), in cmdkprobe()
301 if (cmdk_create_obj(dip, dkp) != DDI_SUCCESS) { in cmdkprobe()
302 mutex_exit(&dkp->dk_mutex); in cmdkprobe()
303 mutex_destroy(&dkp->dk_mutex); in cmdkprobe()
304 rw_destroy(&dkp->dk_bbh_mutex); in cmdkprobe()
311 cmdk_destroy_obj(dip, dkp); /* dadk/strategy linkage */ in cmdkprobe()
312 mutex_exit(&dkp->dk_mutex); in cmdkprobe()
313 mutex_destroy(&dkp->dk_mutex); in cmdkprobe()
314 rw_destroy(&dkp->dk_bbh_mutex); in cmdkprobe()
319 mutex_exit(&dkp->dk_mutex); in cmdkprobe()
332 struct cmdk *dkp; in cmdkattach() local
345 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdkattach()
348 dkp->dk_pm_level = CMDK_SPINDLE_UNINIT; in cmdkattach()
349 mutex_init(&dkp->dk_mutex, NULL, MUTEX_DRIVER, NULL); in cmdkattach()
351 mutex_enter(&dkp->dk_mutex); in cmdkattach()
369 dkp->dk_flag |= CMDK_TGDK_OPEN; in cmdkattach()
371 cmlb_alloc_handle((cmlb_handle_t *)&dkp->dk_cmlbhandle); in cmdkattach()
380 dkp->dk_cmlbhandle, in cmdkattach()
385 (void) cmlb_validate(dkp->dk_cmlbhandle, 0, 0); in cmdkattach()
388 cmdk_bbh_reopen(dkp); in cmdkattach()
391 cmdk_devid_setup(dkp); in cmdkattach()
398 mutex_exit(&dkp->dk_mutex); in cmdkattach()
411 mutex_init(&dkp->dk_pm_mutex, NULL, MUTEX_DRIVER, NULL); in cmdkattach()
412 cv_init(&dkp->dk_suspend_cv, NULL, CV_DRIVER, NULL); in cmdkattach()
413 cmdk_setup_pm(dip, dkp); in cmdkattach()
418 cmlb_free_handle(&dkp->dk_cmlbhandle); in cmdkattach()
421 cmdk_destroy_obj(dip, dkp); in cmdkattach()
422 rw_destroy(&dkp->dk_bbh_mutex); in cmdkattach()
423 mutex_exit(&dkp->dk_mutex); in cmdkattach()
424 mutex_destroy(&dkp->dk_mutex); in cmdkattach()
433 struct cmdk *dkp; in cmdkdetach() local
458 dkp = ddi_get_soft_state(cmdk_state, instance); in cmdkdetach()
459 if (!dkp) in cmdkdetach()
461 if (dkp->dk_flag & CMDK_OPEN) in cmdkdetach()
466 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdkdetach()
469 mutex_enter(&dkp->dk_mutex); in cmdkdetach()
476 if (dkp->dk_flag & CMDK_TGDK_OPEN) { in cmdkdetach()
477 dkp->dk_flag &= ~CMDK_TGDK_OPEN; in cmdkdetach()
481 cmlb_detach(dkp->dk_cmlbhandle, 0); in cmdkdetach()
482 cmlb_free_handle(&dkp->dk_cmlbhandle); in cmdkdetach()
485 cmdk_destroy_obj(dip, dkp); /* dadk/strategy linkage */ in cmdkdetach()
490 if (dkp->dk_devid) { in cmdkdetach()
491 ddi_devid_free(dkp->dk_devid); in cmdkdetach()
492 dkp->dk_devid = NULL; in cmdkdetach()
495 mutex_exit(&dkp->dk_mutex); in cmdkdetach()
496 mutex_destroy(&dkp->dk_mutex); in cmdkdetach()
497 rw_destroy(&dkp->dk_bbh_mutex); in cmdkdetach()
498 mutex_destroy(&dkp->dk_pm_mutex); in cmdkdetach()
499 cv_destroy(&dkp->dk_suspend_cv); in cmdkdetach()
510 struct cmdk *dkp; in cmdkinfo() local
523 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdkinfo()
525 *result = (void *) dkp->dk_dip; in cmdkinfo()
540 cmdk_setup_pm(dev_info_t *dip, struct cmdk *dkp) in cmdk_setup_pm() argument
556 mutex_enter(&dkp->dk_pm_mutex); in cmdk_setup_pm()
557 dkp->dk_pm_level = CMDK_SPINDLE_ON; in cmdk_setup_pm()
558 dkp->dk_pm_is_enabled = 1; in cmdk_setup_pm()
559 mutex_exit(&dkp->dk_pm_mutex); in cmdk_setup_pm()
561 mutex_enter(&dkp->dk_pm_mutex); in cmdk_setup_pm()
562 dkp->dk_pm_level = CMDK_SPINDLE_OFF; in cmdk_setup_pm()
563 dkp->dk_pm_is_enabled = 0; in cmdk_setup_pm()
564 mutex_exit(&dkp->dk_pm_mutex); in cmdk_setup_pm()
567 mutex_enter(&dkp->dk_pm_mutex); in cmdk_setup_pm()
568 dkp->dk_pm_level = CMDK_SPINDLE_UNINIT; in cmdk_setup_pm()
569 dkp->dk_pm_is_enabled = 0; in cmdk_setup_pm()
570 mutex_exit(&dkp->dk_pm_mutex); in cmdk_setup_pm()
581 struct cmdk *dkp; in cmdksuspend() local
586 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdksuspend()
588 mutex_enter(&dkp->dk_mutex); in cmdksuspend()
589 if (dkp->dk_flag & CMDK_SUSPEND) { in cmdksuspend()
590 mutex_exit(&dkp->dk_mutex); in cmdksuspend()
593 dkp->dk_flag |= CMDK_SUSPEND; in cmdksuspend()
599 dkp->dk_flag &= ~CMDK_SUSPEND; in cmdksuspend()
600 cv_broadcast(&dkp->dk_suspend_cv); in cmdksuspend()
601 mutex_exit(&dkp->dk_mutex); in cmdksuspend()
606 mutex_exit(&dkp->dk_mutex); in cmdksuspend()
617 struct cmdk *dkp; in cmdkresume() local
621 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdkresume()
623 mutex_enter(&dkp->dk_mutex); in cmdkresume()
624 if (!(dkp->dk_flag & CMDK_SUSPEND)) { in cmdkresume()
625 mutex_exit(&dkp->dk_mutex); in cmdkresume()
628 dkp->dk_pm_level = CMDK_SPINDLE_ON; in cmdkresume()
629 dkp->dk_flag &= ~CMDK_SUSPEND; in cmdkresume()
630 cv_broadcast(&dkp->dk_suspend_cv); in cmdkresume()
631 mutex_exit(&dkp->dk_mutex); in cmdkresume()
647 struct cmdk *dkp; in cmdkpower() local
651 if (!(dkp = ddi_get_soft_state(cmdk_state, instance)) || in cmdkpower()
657 mutex_enter(&dkp->dk_pm_mutex); in cmdkpower()
658 if (dkp->dk_pm_is_enabled && dkp->dk_pm_level == level) { in cmdkpower()
659 mutex_exit(&dkp->dk_pm_mutex); in cmdkpower()
662 mutex_exit(&dkp->dk_pm_mutex); in cmdkpower()
669 mutex_enter(&dkp->dk_pm_mutex); in cmdkpower()
670 dkp->dk_pm_level = level; in cmdkpower()
671 mutex_exit(&dkp->dk_pm_mutex); in cmdkpower()
679 struct cmdk *dkp; in cmdk_prop_op() local
686 dkp = ddi_get_soft_state(cmdk_state, ddi_get_instance(dip)); in cmdk_prop_op()
687 if (dkp == NULL) in cmdk_prop_op()
691 return (cmlb_prop_op(dkp->dk_cmlbhandle, in cmdk_prop_op()
703 struct cmdk *dkp; in cmdkdump() local
714 if (!(dkp = ddi_get_soft_state(cmdk_state, instance)) || (blkno < 0)) in cmdkdump()
718 dkp->dk_cmlbhandle, in cmdkdump()
835 struct cmdk *dkp; in cmdkioctl() local
839 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdkioctl()
842 mutex_enter(&dkp->dk_mutex); in cmdkioctl()
843 while (dkp->dk_flag & CMDK_SUSPEND) { in cmdkioctl()
844 cv_wait(&dkp->dk_suspend_cv, &dkp->dk_mutex); in cmdkioctl()
846 mutex_exit(&dkp->dk_mutex); in cmdkioctl()
876 info->dki_cnum = ddi_get_instance(ddi_get_parent(dkp->dk_dip)); in cmdkioctl()
878 ddi_get_name(ddi_get_parent(dkp->dk_dip))); in cmdkioctl()
881 info->dki_unit = ddi_get_instance(dkp->dk_dip); in cmdkioctl()
882 devp = ddi_get_driver_private(dkp->dk_dip); in cmdkioctl()
884 (void) strcpy(info->dki_dname, ddi_driver_name(dkp->dk_dip)); in cmdkioctl()
915 if (cmlb_validate(dkp->dk_cmlbhandle, 0, 0) != 0) in cmdkioctl()
918 if (cmlb_partinfo(dkp->dk_cmlbhandle, CMDKPART(dev), in cmdkioctl()
957 cmdk_bbh_reopen(dkp); in cmdkioctl()
981 rc = cmlb_ioctl(dkp->dk_cmlbhandle, dev, cmd, arg, flag, in cmdkioctl()
984 cmdk_devid_setup(dkp); in cmdkioctl()
1031 struct cmdk *dkp; in cmdkclose() local
1036 if (!(dkp = ddi_get_soft_state(cmdk_state, instance)) || in cmdkclose()
1040 mutex_enter(&dkp->dk_mutex); in cmdkclose()
1043 ASSERT(cmdk_isopen(dkp, dev)); in cmdkclose()
1044 if (!(dkp->dk_flag & CMDK_OPEN)) { in cmdkclose()
1045 mutex_exit(&dkp->dk_mutex); in cmdkclose()
1049 while (dkp->dk_flag & CMDK_SUSPEND) { in cmdkclose()
1050 cv_wait(&dkp->dk_suspend_cv, &dkp->dk_mutex); in cmdkclose()
1058 ASSERT(dkp->dk_open_lyr[part] > 0); in cmdkclose()
1059 if (dkp->dk_open_lyr[part]) in cmdkclose()
1060 dkp->dk_open_lyr[part]--; in cmdkclose()
1062 ASSERT((dkp->dk_open_reg[otyp] & partbit) != 0); in cmdkclose()
1063 dkp->dk_open_reg[otyp] &= ~partbit; in cmdkclose()
1065 dkp->dk_open_exl &= ~partbit; in cmdkclose()
1068 if (dkp->dk_open_lyr[i] != 0) { in cmdkclose()
1075 if (dkp->dk_open_reg[i] != 0) { in cmdkclose()
1080 mutex_exit(&dkp->dk_mutex); in cmdkclose()
1083 cmlb_invalidate(dkp->dk_cmlbhandle, 0); in cmdkclose()
1096 struct cmdk *dkp; in cmdkopen() local
1103 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdkopen()
1109 mutex_enter(&dkp->dk_mutex); in cmdkopen()
1110 while (dkp->dk_flag & CMDK_SUSPEND) { in cmdkopen()
1111 cv_wait(&dkp->dk_suspend_cv, &dkp->dk_mutex); in cmdkopen()
1113 mutex_exit(&dkp->dk_mutex); in cmdkopen()
1119 mutex_enter(&dkp->dk_mutex); in cmdkopen()
1121 if (cmlb_validate(dkp->dk_cmlbhandle, 0, 0) != 0) { in cmdkopen()
1125 mutex_exit(&dkp->dk_mutex); in cmdkopen()
1128 } else if (cmlb_partinfo(dkp->dk_cmlbhandle, part, &p_lblkcnt, in cmdkopen()
1132 mutex_exit(&dkp->dk_mutex); in cmdkopen()
1138 mutex_exit(&dkp->dk_mutex); in cmdkopen()
1144 mutex_exit(&dkp->dk_mutex); in cmdkopen()
1149 if (dkp->dk_open_exl & partbit) in cmdkopen()
1154 if (dkp->dk_open_lyr[part]) in cmdkopen()
1157 if (dkp->dk_open_reg[i] & partbit) in cmdkopen()
1163 dkp->dk_flag |= CMDK_OPEN; in cmdkopen()
1165 dkp->dk_open_lyr[part]++; in cmdkopen()
1167 dkp->dk_open_reg[otyp] |= partbit; in cmdkopen()
1169 dkp->dk_open_exl |= partbit; in cmdkopen()
1171 mutex_exit(&dkp->dk_mutex); in cmdkopen()
1175 mutex_exit(&dkp->dk_mutex); in cmdkopen()
1230 struct cmdk *dkp; in cmdkrw() local
1233 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdkrw()
1236 mutex_enter(&dkp->dk_mutex); in cmdkrw()
1237 while (dkp->dk_flag & CMDK_SUSPEND) { in cmdkrw()
1238 cv_wait(&dkp->dk_suspend_cv, &dkp->dk_mutex); in cmdkrw()
1240 mutex_exit(&dkp->dk_mutex); in cmdkrw()
1249 struct cmdk *dkp; in cmdkarw() local
1252 if (!(dkp = ddi_get_soft_state(cmdk_state, instance))) in cmdkarw()
1255 mutex_enter(&dkp->dk_mutex); in cmdkarw()
1256 while (dkp->dk_flag & CMDK_SUSPEND) { in cmdkarw()
1257 cv_wait(&dkp->dk_suspend_cv, &dkp->dk_mutex); in cmdkarw()
1259 mutex_exit(&dkp->dk_mutex); in cmdkarw()
1271 struct cmdk *dkp; in cmdkstrategy() local
1277 if (cmdk_indump || !(dkp = ddi_get_soft_state(cmdk_state, instance)) || in cmdkstrategy()
1285 mutex_enter(&dkp->dk_mutex); in cmdkstrategy()
1286 ASSERT(cmdk_isopen(dkp, bp->b_edev)); in cmdkstrategy()
1287 while (dkp->dk_flag & CMDK_SUSPEND) { in cmdkstrategy()
1288 cv_wait(&dkp->dk_suspend_cv, &dkp->dk_mutex); in cmdkstrategy()
1290 mutex_exit(&dkp->dk_mutex); in cmdkstrategy()
1299 if (cmlb_partinfo(dkp->dk_cmlbhandle, CMDKPART(bp->b_edev), in cmdkstrategy()
1328 cmdk_create_obj(dev_info_t *dip, struct cmdk *dkp) in cmdk_create_obj() argument
1338 ASSERT(mutex_owned(&dkp->dk_mutex)); in cmdk_create_obj()
1379 dkp->dk_bbh_obj.bbh_data = dkp; in cmdk_create_obj()
1380 dkp->dk_bbh_obj.bbh_ops = &cmdk_bbh_ops; in cmdk_create_obj()
1383 dkp->dk_tgobjp = (opaque_t)dadk_create(); in cmdk_create_obj()
1386 (void) dadk_init(DKTP_DATA, devp, flcobjp, queobjp, &dkp->dk_bbh_obj, in cmdk_create_obj()
1393 cmdk_destroy_obj(dev_info_t *dip, struct cmdk *dkp) in cmdk_destroy_obj() argument
1400 ASSERT(mutex_owned(&dkp->dk_mutex)); in cmdk_destroy_obj()
1402 (void) dadk_free((dkp->dk_tgobjp)); in cmdk_destroy_obj()
1403 dkp->dk_tgobjp = NULL; in cmdk_destroy_obj()
1429 struct cmdk *dkp; in cmdk_lb_rdwr() local
1435 dkp = ddi_get_soft_state(cmdk_state, ddi_get_instance(dip)); in cmdk_lb_rdwr()
1436 if (dkp == NULL) in cmdk_lb_rdwr()
1471 struct cmdk *dkp; in cmdk_lb_getinfo() local
1475 dkp = ddi_get_soft_state(cmdk_state, ddi_get_instance(dip)); in cmdk_lb_getinfo()
1476 if (dkp == NULL) in cmdk_lb_getinfo()
1569 cmdk_devid_setup(struct cmdk *dkp) in cmdk_devid_setup() argument
1576 if (dkp->dk_devid != NULL) in cmdk_devid_setup()
1580 rc = cmdk_devid_modser(dkp); in cmdk_devid_setup()
1583 rc = cmdk_devid_read(dkp); in cmdk_devid_setup()
1587 rc = cmdk_devid_fabricate(dkp); in cmdk_devid_setup()
1592 (void) ddi_devid_register(dkp->dk_dip, dkp->dk_devid); in cmdk_devid_setup()
1601 cmdk_devid_modser(struct cmdk *dkp) in cmdk_devid_modser() argument
1612 modlen = cmdk_get_modser(dkp, DIOCTL_GETMODEL, hwid, CMDK_HWIDLEN); in cmdk_devid_modser()
1618 serlen = cmdk_get_modser(dkp, DIOCTL_GETSERIAL, in cmdk_devid_modser()
1627 rc = ddi_devid_init(dkp->dk_dip, DEVID_ATA_SERIAL, modlen + serlen, in cmdk_devid_modser()
1628 hwid, &dkp->dk_devid); in cmdk_devid_modser()
1642 cmdk_get_modser(struct cmdk *dkp, int ioccmd, char *buf, int len) in cmdk_get_modser() argument
1655 dkp->dk_dev, in cmdk_get_modser()
1689 cmdk_devid_read(struct cmdk *dkp) in cmdk_devid_read() argument
1699 if (cmlb_get_devid_block(dkp->dk_cmlbhandle, &blk, 0)) in cmdk_devid_read()
1730 dkp->dk_devid = kmem_alloc(sz, KM_SLEEP); in cmdk_devid_read()
1731 bcopy(dkdevidp->dkd_devid, dkp->dk_devid, sz); in cmdk_devid_read()
1747 cmdk_devid_fabricate(struct cmdk *dkp) in cmdk_devid_fabricate() argument
1757 if (ddi_devid_init(dkp->dk_dip, DEVID_FAB, 0, NULL, &devid) != in cmdk_devid_fabricate()
1761 if (cmlb_get_devid_block(dkp->dk_cmlbhandle, &blk, 0)) { in cmdk_devid_fabricate()
1796 dkp->dk_devid = devid; in cmdk_devid_fabricate()
1811 cmdk_bbh_free_alts(struct cmdk *dkp) in cmdk_bbh_free_alts() argument
1813 if (dkp->dk_alts_hdl) { in cmdk_bbh_free_alts()
1814 (void) dadk_iob_free(DKTP_DATA, dkp->dk_alts_hdl); in cmdk_bbh_free_alts()
1815 kmem_free(dkp->dk_slc_cnt, in cmdk_bbh_free_alts()
1817 dkp->dk_alts_hdl = NULL; in cmdk_bbh_free_alts()
1822 cmdk_bbh_reopen(struct cmdk *dkp) in cmdk_bbh_reopen() argument
1838 dkp->dk_cmlbhandle, in cmdk_bbh_reopen()
1892 rw_enter(&dkp->dk_bbh_mutex, RW_WRITER); in cmdk_bbh_reopen()
1895 if (dkp->dk_slc_cnt == NULL) { in cmdk_bbh_reopen()
1896 dkp->dk_slc_cnt = kmem_alloc(NDKMAP * in cmdk_bbh_reopen()
1899 dkp->dk_slc_ent = (struct alts_ent **)(dkp->dk_slc_cnt + NDKMAP); in cmdk_bbh_reopen()
1902 if (dkp->dk_alts_hdl) { in cmdk_bbh_reopen()
1903 (void) dadk_iob_free(DKTP_DATA, dkp->dk_alts_hdl); in cmdk_bbh_reopen()
1904 dkp->dk_alts_hdl = NULL; in cmdk_bbh_reopen()
1905 dkp->dk_altused = 0; in cmdk_bbh_reopen()
1909 dkp->dk_alts_hdl = handle; in cmdk_bbh_reopen()
1910 dkp->dk_altused = altused; in cmdk_bbh_reopen()
1922 dkp->dk_cmlbhandle, in cmdk_bbh_reopen()
1932 dkp->dk_slc_cnt[i] = 0; in cmdk_bbh_reopen()
1944 dkp->dk_slc_ent[i] = enttblp + j; in cmdk_bbh_reopen()
1948 dkp->dk_slc_cnt[i] += 1; in cmdk_bbh_reopen()
1952 rw_exit(&dkp->dk_bbh_mutex); in cmdk_bbh_reopen()
1956 rw_enter(&dkp->dk_bbh_mutex, RW_WRITER); in cmdk_bbh_reopen()
1958 if (handle && handle != dkp->dk_alts_hdl) in cmdk_bbh_reopen()
1961 if (dkp->dk_alts_hdl) { in cmdk_bbh_reopen()
1962 (void) dadk_iob_free(DKTP_DATA, dkp->dk_alts_hdl); in cmdk_bbh_reopen()
1963 dkp->dk_alts_hdl = NULL; in cmdk_bbh_reopen()
1966 rw_exit(&dkp->dk_bbh_mutex); in cmdk_bbh_reopen()
2016 struct cmdk *dkp = (struct cmdk *)bbh_data; in cmdk_bbh_gethandle() local
2038 if (!dkp->dk_alts_hdl) { in cmdk_bbh_gethandle()
2042 rw_enter(&dkp->dk_bbh_mutex, RW_READER); in cmdk_bbh_gethandle()
2044 if (dkp->dk_alts_hdl == NULL) { in cmdk_bbh_gethandle()
2045 rw_exit(&dkp->dk_bbh_mutex); in cmdk_bbh_gethandle()
2049 alts_used = dkp->dk_slc_cnt[part]; in cmdk_bbh_gethandle()
2051 rw_exit(&dkp->dk_bbh_mutex); in cmdk_bbh_gethandle()
2054 altp = dkp->dk_slc_ent[part]; in cmdk_bbh_gethandle()
2063 rw_exit(&dkp->dk_bbh_mutex); in cmdk_bbh_gethandle()
2079 rw_exit(&dkp->dk_bbh_mutex); in cmdk_bbh_gethandle()
2097 altp = dkp->dk_slc_ent[part]; in cmdk_bbh_gethandle()
2148 rw_exit(&dkp->dk_bbh_mutex); in cmdk_bbh_gethandle()