Lines Matching defs:vhc

7477 	mdi_vhci_config_t *vhc;
7482 vhc = kmem_zalloc(sizeof (mdi_vhci_config_t), KM_SLEEP);
7483 vh->vh_config = vhc;
7484 vhcache = &vhc->vhc_vhcache;
7486 vhc->vhc_vhcache_filename = vhclass2vhcache_filename(vh->vh_class);
7488 mutex_init(&vhc->vhc_lock, NULL, MUTEX_DEFAULT, NULL);
7489 cv_init(&vhc->vhc_cv, NULL, CV_DRIVER, NULL);
7528 vhc->vhc_vhcache_filename);
7534 vhc->vhc_cbid = callb_add(stop_vhcache_flush_thread, vhc,
7537 vhc->vhc_path_discovery_boot = mdi_path_discovery_boot;
7538 vhc->vhc_path_discovery_postboot = mdi_path_discovery_postboot;
7547 mdi_vhci_config_t *vhc = vh->vh_config;
7548 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
7553 if (stop_vhcache_async_threads(vhc) != MDI_SUCCESS)
7556 kmem_free(vhc->vhc_vhcache_filename,
7557 strlen(vhc->vhc_vhcache_filename) + 1);
7578 mutex_destroy(&vhc->vhc_lock);
7579 cv_destroy(&vhc->vhc_cv);
7580 kmem_free(vhc, sizeof (mdi_vhci_config_t));
7588 stop_vhcache_async_threads(mdi_vhci_config_t *vhc)
7592 mutex_enter(&vhc->vhc_lock);
7593 vhc->vhc_flags |= MDI_VHC_EXIT;
7594 ASSERT(vhc->vhc_acc_thrcount >= 0);
7595 cv_broadcast(&vhc->vhc_cv);
7597 while ((vhc->vhc_flags & MDI_VHC_VHCACHE_FLUSH_THREAD) ||
7598 vhc->vhc_acc_thrcount != 0) {
7599 mutex_exit(&vhc->vhc_lock);
7601 mutex_enter(&vhc->vhc_lock);
7604 vhc->vhc_flags &= ~MDI_VHC_EXIT;
7606 for (acc = vhc->vhc_acc_list_head; acc != NULL; acc = acc_next) {
7610 vhc->vhc_acc_list_head = NULL;
7611 vhc->vhc_acc_list_tail = NULL;
7612 vhc->vhc_acc_count = 0;
7614 if (vhc->vhc_flags & MDI_VHC_VHCACHE_DIRTY) {
7615 vhc->vhc_flags &= ~MDI_VHC_VHCACHE_DIRTY;
7616 mutex_exit(&vhc->vhc_lock);
7617 if (flush_vhcache(vhc, 0) != MDI_SUCCESS) {
7618 vhcache_dirty(vhc);
7622 mutex_exit(&vhc->vhc_lock);
7624 if (callb_delete(vhc->vhc_cbid) != 0)
7637 mdi_vhci_config_t *vhc = (mdi_vhci_config_t *)arg;
7639 mutex_enter(&vhc->vhc_lock);
7640 vhc->vhc_flags |= MDI_VHC_EXIT;
7641 cv_broadcast(&vhc->vhc_cv);
7643 while (vhc->vhc_flags & MDI_VHC_VHCACHE_FLUSH_THREAD) {
7644 mutex_exit(&vhc->vhc_lock);
7646 mutex_enter(&vhc->vhc_lock);
7649 if (vhc->vhc_flags & MDI_VHC_VHCACHE_DIRTY) {
7650 vhc->vhc_flags &= ~MDI_VHC_VHCACHE_DIRTY;
7651 mutex_exit(&vhc->vhc_lock);
7652 (void) flush_vhcache(vhc, 1);
7654 mutex_exit(&vhc->vhc_lock);
8078 vhcache_phci_add(mdi_vhci_config_t *vhc, mdi_phci_t *ph)
8080 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
8108 mutex_enter(&vhc->vhc_lock);
8109 vhc->vhc_path_discovery_cutoff_time = 0;
8110 mutex_exit(&vhc->vhc_lock);
8114 vhcache_dirty(vhc);
8121 vhcache_phci_remove(mdi_vhci_config_t *vhc, mdi_phci_t *ph)
8123 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
8194 vhcache_pi_add(mdi_vhci_config_t *vhc, struct mdi_pathinfo *pip)
8196 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
8244 vhcache_dirty(vhc);
8251 vhcache_pi_remove(mdi_vhci_config_t *vhc, struct mdi_pathinfo *pip)
8253 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
8277 flush_vhcache(mdi_vhci_config_t *vhc, int force_flag)
8292 if ((nvl = vhcache_to_mainnvl(&vhc->vhc_vhcache)) != NULL) {
8293 err = fwrite_nvlist(vhc->vhc_vhcache_filename, nvl);
8299 mutex_enter(&vhc->vhc_lock);
8302 vhc->vhc_flags |= MDI_VHC_READONLY_FS;
8303 vhc->vhc_flags &= ~(MDI_VHC_VHCACHE_FLUSH_ERROR |
8306 if (!(vhc->vhc_flags & MDI_VHC_VHCACHE_FLUSH_ERROR)) {
8308 vhc->vhc_vhcache_filename);
8309 vhc->vhc_flags |= MDI_VHC_VHCACHE_FLUSH_ERROR;
8313 } else if (vhc->vhc_flags & MDI_VHC_VHCACHE_FLUSH_ERROR) {
8315 "%s: update now ok\n", vhc->vhc_vhcache_filename);
8316 vhc->vhc_flags &= ~MDI_VHC_VHCACHE_FLUSH_ERROR;
8318 mutex_exit(&vhc->vhc_lock);
8330 mdi_vhci_config_t *vhc = (mdi_vhci_config_t *)arg;
8337 CALLB_CPR_INIT(&cprinfo, &vhc->vhc_lock, callb_generic_cpr,
8339 mutex_enter(&vhc->vhc_lock);
8341 while (!(vhc->vhc_flags & MDI_VHC_EXIT) &&
8342 (vhc->vhc_flags & MDI_VHC_VHCACHE_DIRTY)) {
8343 if (ddi_get_lbolt() < vhc->vhc_flush_at_ticks) {
8345 (void) cv_timedwait(&vhc->vhc_cv,
8346 &vhc->vhc_lock, vhc->vhc_flush_at_ticks);
8347 CALLB_CPR_SAFE_END(&cprinfo, &vhc->vhc_lock);
8349 vhc->vhc_flags &= ~MDI_VHC_VHCACHE_DIRTY;
8350 mutex_exit(&vhc->vhc_lock);
8352 if (flush_vhcache(vhc, 0) != MDI_SUCCESS)
8353 vhcache_dirty(vhc);
8355 mutex_enter(&vhc->vhc_lock);
8361 while (!(vhc->vhc_flags & MDI_VHC_EXIT) &&
8362 !(vhc->vhc_flags & MDI_VHC_VHCACHE_DIRTY) &&
8365 (void) cv_timedwait(&vhc->vhc_cv, &vhc->vhc_lock,
8367 CALLB_CPR_SAFE_END(&cprinfo, &vhc->vhc_lock);
8370 if ((vhc->vhc_flags & MDI_VHC_EXIT) ||
8371 !(vhc->vhc_flags & MDI_VHC_VHCACHE_DIRTY))
8376 vhc->vhc_flags &= ~MDI_VHC_VHCACHE_FLUSH_THREAD;
8377 /* CALLB_CPR_EXIT releases the vhc->vhc_lock */
8385 vhcache_dirty(mdi_vhci_config_t *vhc)
8387 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
8398 mutex_enter(&vhc->vhc_lock);
8399 if (vhc->vhc_flags & MDI_VHC_READONLY_FS) {
8400 mutex_exit(&vhc->vhc_lock);
8404 vhc->vhc_flags |= MDI_VHC_VHCACHE_DIRTY;
8405 vhc->vhc_flush_at_ticks = ddi_get_lbolt() +
8407 if (vhc->vhc_flags & MDI_VHC_VHCACHE_FLUSH_THREAD) {
8408 cv_broadcast(&vhc->vhc_cv);
8411 vhc->vhc_flags |= MDI_VHC_VHCACHE_FLUSH_THREAD;
8414 mutex_exit(&vhc->vhc_lock);
8417 (void) thread_create(NULL, 0, vhcache_flush_thread, vhc,
8547 st_bus_config_all_phcis(mdi_vhci_config_t *vhc, uint_t flags,
8550 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
8552 single_threaded_vhconfig_enter(vhc);
8554 single_threaded_vhconfig_exit(vhc);
8716 adjust_sort_vhcache_paths(mdi_vhci_config_t *vhc, char *ct_name, char *ct_addr,
8719 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
8766 vhcache_dirty(vhc);
8773 config_client_paths_sync(mdi_vhci_config_t *vhc, char *ct_name, char *ct_addr,
8780 adjust_sort_vhcache_paths(vhc, ct_name, ct_addr, tok);
8790 mdi_vhci_config_t *vhc = (mdi_vhci_config_t *)arg;
8796 CALLB_CPR_INIT(&cprinfo, &vhc->vhc_lock, callb_generic_cpr,
8802 mutex_enter(&vhc->vhc_lock);
8803 while (!(vhc->vhc_flags & MDI_VHC_EXIT) &&
8804 vhc->vhc_acc_list_head == NULL &&
8807 (void) cv_timedwait(&vhc->vhc_cv, &vhc->vhc_lock,
8809 CALLB_CPR_SAFE_END(&cprinfo, &vhc->vhc_lock);
8812 if ((vhc->vhc_flags & MDI_VHC_EXIT) ||
8813 vhc->vhc_acc_list_head == NULL)
8816 acc = vhc->vhc_acc_list_head;
8817 vhc->vhc_acc_list_head = acc->acc_next;
8818 if (vhc->vhc_acc_list_head == NULL)
8819 vhc->vhc_acc_list_tail = NULL;
8820 vhc->vhc_acc_count--;
8821 mutex_exit(&vhc->vhc_lock);
8823 config_client_paths_sync(vhc, acc->acc_ct_name,
8831 vhc->vhc_acc_thrcount--;
8832 /* CALLB_CPR_EXIT releases the vhc->vhc_lock */
8841 config_client_paths_async(mdi_vhci_config_t *vhc, char *ct_name, char *ct_addr,
8851 config_client_paths_sync(vhc, ct_name, ct_addr, pp_head, tok);
8859 mutex_enter(&vhc->vhc_lock);
8860 for (acc = vhc->vhc_acc_list_head; acc != NULL; acc = acc->acc_next) {
8864 mutex_exit(&vhc->vhc_lock);
8869 if (vhc->vhc_acc_list_head == NULL)
8870 vhc->vhc_acc_list_head = newacc;
8872 vhc->vhc_acc_list_tail->acc_next = newacc;
8873 vhc->vhc_acc_list_tail = newacc;
8874 vhc->vhc_acc_count++;
8875 if (vhc->vhc_acc_count <= vhc->vhc_acc_thrcount) {
8876 cv_broadcast(&vhc->vhc_cv);
8879 vhc->vhc_acc_thrcount++;
8882 mutex_exit(&vhc->vhc_lock);
8885 (void) thread_create(NULL, 0, config_client_paths_thread, vhc,
8918 config_client_paths(mdi_vhci_config_t *vhc, char *ct_name, char *ct_addr)
8920 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
8940 config_client_paths_async(vhc, ct_name, ct_addr, pp_head, &tok);
8959 config_client_paths_async(vhc, ct_name, ct_addr,
8969 adjust_sort_vhcache_paths(vhc, ct_name, ct_addr, &tok);
8975 single_threaded_vhconfig_enter(mdi_vhci_config_t *vhc)
8977 mutex_enter(&vhc->vhc_lock);
8978 while (vhc->vhc_flags & MDI_VHC_SINGLE_THREADED)
8979 cv_wait(&vhc->vhc_cv, &vhc->vhc_lock);
8980 vhc->vhc_flags |= MDI_VHC_SINGLE_THREADED;
8981 mutex_exit(&vhc->vhc_lock);
8985 single_threaded_vhconfig_exit(mdi_vhci_config_t *vhc)
8987 mutex_enter(&vhc->vhc_lock);
8988 vhc->vhc_flags &= ~MDI_VHC_SINGLE_THREADED;
8989 cv_broadcast(&vhc->vhc_cv);
8990 mutex_exit(&vhc->vhc_lock);
9168 mdi_vhci_config_t *vhc = vh->vh_config;
9169 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
9171 single_threaded_vhconfig_enter(vhc);
9176 single_threaded_vhconfig_exit(vhc);
9189 single_threaded_vhconfig_exit(vhc);
9190 vhcache_dirty(vhc);
9198 vhcache_do_discovery(mdi_vhci_config_t *vhc)
9202 mutex_enter(&vhc->vhc_lock);
9204 if (vhc->vhc_path_discovery_boot > 0) {
9205 vhc->vhc_path_discovery_boot--;
9209 if (vhc->vhc_path_discovery_postboot > 0) {
9210 vhc->vhc_path_discovery_postboot--;
9221 ddi_get_lbolt64() >= vhc->vhc_path_discovery_cutoff_time)
9226 mutex_exit(&vhc->vhc_lock);
9239 mdi_vhci_config_t *vhc = vh->vh_config;
9240 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
9243 single_threaded_vhconfig_enter(vhc);
9245 if (vhcache_do_discovery(vhc)) {
9250 mutex_enter(&vhc->vhc_lock);
9251 vhc->vhc_path_discovery_cutoff_time = ddi_get_lbolt64() +
9253 mutex_exit(&vhc->vhc_lock);
9257 single_threaded_vhconfig_exit(vhc);
9291 mdi_vhci_config_t *vhc = vh->vh_config;
9292 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
9329 config_client_paths(vhc, (char *)arg, ct_addr);
9342 st_bus_config_all_phcis(vhc, flags, op,
9349 st_bus_config_all_phcis(vhc, flags, op, -1);
9419 clean_vhcache(mdi_vhci_config_t *vhc)
9421 mdi_vhci_cache_t *vhcache = &vhc->vhc_vhcache;
9468 vhcache_dirty(vhc);