Lines Matching refs:slock

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