Lines Matching refs:slock
1248 struct devmap_softlock *slock, in devmap_softlock_enter() argument
1254 mutex_enter(&(slock->lock)); in devmap_softlock_enter()
1257 while (slock->softlocked) { in devmap_softlock_enter()
1258 if (cv_wait_sig(&(slock)->cv, &(slock)->lock) == 0) { in devmap_softlock_enter()
1260 mutex_exit(&(slock->lock)); in devmap_softlock_enter()
1264 slock->softlocked -= npages; /* -ve count => locked */ in devmap_softlock_enter()
1268 while (slock->softlocked < 0) in devmap_softlock_enter()
1269 if (cv_wait_sig(&(slock)->cv, &(slock)->lock) == 0) { in devmap_softlock_enter()
1271 mutex_exit(&(slock->lock)); in devmap_softlock_enter()
1274 slock->softlocked += npages; /* +ve count => f_invals */ in devmap_softlock_enter()
1279 mutex_exit(&(slock->lock)); in devmap_softlock_enter()
1284 struct devmap_softlock *slock, in devmap_softlock_exit() argument
1288 if (slock == NULL) in devmap_softlock_exit()
1290 mutex_enter(&(slock->lock)); in devmap_softlock_exit()
1293 ASSERT(-slock->softlocked >= npages); in devmap_softlock_exit()
1294 slock->softlocked += npages; /* -ve count is softlocked */ in devmap_softlock_exit()
1295 if (slock->softlocked == 0) in devmap_softlock_exit()
1296 cv_signal(&slock->cv); in devmap_softlock_exit()
1300 ASSERT(slock->softlocked >= npages); in devmap_softlock_exit()
1301 slock->softlocked -= npages; in devmap_softlock_exit()
1302 if (slock->softlocked == 0) in devmap_softlock_exit()
1303 cv_signal(&slock->cv); in devmap_softlock_exit()
1308 mutex_exit(&(slock->lock)); in devmap_softlock_exit()
1606 struct devmap_softlock *slock = NULL; in segdev_fault() local
1744 slock = dhpp->dh_softlock; in segdev_fault()
1767 if (err = devmap_softlock_enter(slock, slpage, type)) in segdev_fault()
1856 devmap_softlock_exit(slock, in segdev_fault()
1859 devmap_softlock_exit(slock, slpage, type); in segdev_fault()
1886 devmap_softlock_exit(slock, slpage, type); in segdev_fault()
2905 struct devmap_softlock *slock; in devmap_softlock_init() local
2914 for (slock = devmap_slist; slock != NULL; slock = slock->next) in devmap_softlock_init()
2915 if ((slock->dev == dev) && (slock->id == id)) in devmap_softlock_init()
2918 if (slock == NULL) { in devmap_softlock_init()
2919 slock = tmp; in devmap_softlock_init()
2920 slock->dev = dev; in devmap_softlock_init()
2921 slock->id = id; in devmap_softlock_init()
2922 mutex_init(&slock->lock, NULL, MUTEX_DEFAULT, NULL); in devmap_softlock_init()
2923 cv_init(&slock->cv, NULL, CV_DEFAULT, NULL); in devmap_softlock_init()
2924 slock->next = devmap_slist; in devmap_softlock_init()
2925 devmap_slist = slock; in devmap_softlock_init()
2929 mutex_enter(&slock->lock); in devmap_softlock_init()
2930 slock->refcnt++; in devmap_softlock_init()
2931 mutex_exit(&slock->lock); in devmap_softlock_init()
2934 return (slock); in devmap_softlock_init()
2944 struct devmap_softlock *slock = dhp->dh_softlock; in devmap_softlock_rele() local
2952 mutex_enter(&slock->lock); in devmap_softlock_rele()
2954 ASSERT(slock->refcnt > 0); in devmap_softlock_rele()
2956 slock->refcnt--; in devmap_softlock_rele()
2961 if (slock->refcnt == 0) { in devmap_softlock_rele()
2962 slock->softlocked = 0; in devmap_softlock_rele()
2963 cv_signal(&slock->cv); in devmap_softlock_rele()
2965 if (devmap_slist == slock) in devmap_softlock_rele()
2966 devmap_slist = slock->next; in devmap_softlock_rele()
2971 if (tmp == slock) { in devmap_softlock_rele()
2978 mutex_exit(&slock->lock); in devmap_softlock_rele()
2979 mutex_destroy(&slock->lock); in devmap_softlock_rele()
2980 cv_destroy(&slock->cv); in devmap_softlock_rele()
2981 kmem_free(slock, sizeof (struct devmap_softlock)); in devmap_softlock_rele()
2983 mutex_exit(&slock->lock); in devmap_softlock_rele()
3143 struct devmap_softlock *slock = NULL; in devmap_setup() local
3241 if (slock == NULL) in devmap_setup()
3242 slock = dhp->dh_softlock; in devmap_setup()
3243 if (slock != dhp->dh_softlock) { in devmap_setup()