Lines Matching defs:pcp

252 	pollcache_t *pcp;
272 pcp = ps->ps_pcache;
274 pcp = curthread->t_pollcache;
276 if (!mutex_owned(&pcp->pc_lock)) {
280 mutex_exit(&pcp->pc_lock);
289 pollcache_t *pcp;
301 pcp = ps->ps_pcache;
303 pcp = curthread->t_pollcache;
305 mutex_enter(&pcp->pc_lock);
335 pollcache_t *pcp;
414 pcp = ps->ps_pcache;
460 pcp = ps->ps_pcache;
461 ASSERT(pcp != NULL);
462 if (pcp->pc_bitmap == NULL) {
463 pcache_create(pcp, nfds);
552 mutex_enter(&pcp->pc_lock);
554 pcp->pc_flag = 0;
557 mutex_exit(&pcp->pc_lock);
565 * one of the VOP_POLL() functions dropped pcp->pc_lock.
569 if (pcp->pc_flag & PC_POLLWAKE)
582 error = cv_timedwait_sig_hrtime(&pcp->pc_cv,
583 &pcp->pc_lock, deadline);
585 mutex_exit(&pcp->pc_lock);
599 mutex_enter(&pcp->pc_lock);
707 pollcache_t *pcp;
711 pcp = ps->ps_pcache;
715 if (pcp == NULL) {
720 if (pcp->pc_bitmap != NULL) {
729 pcache_clean(pcp);
744 mutex_enter(&pcp->pc_no_exit);
745 ASSERT(pcp->pc_busy >= 0);
746 while (pcp->pc_busy > 0)
747 cv_wait(&pcp->pc_busy_cv, &pcp->pc_no_exit);
748 mutex_exit(&pcp->pc_no_exit);
811 pollcache_t *pcp;
864 pcp = pdp->pd_pcache;
872 if (mutex_tryenter(&pcp->pc_lock)) {
873 pollnotify(pcp, pdp->pd_fd);
874 mutex_exit(&pcp->pc_lock);
889 * Solution: Grab the pcp->pc_no_exit lock,
895 mutex_enter(&pcp->pc_no_exit);
896 pcp->pc_busy++; /* prevents exit()'s */
897 mutex_exit(&pcp->pc_no_exit);
900 mutex_enter(&pcp->pc_lock);
901 mutex_exit(&pcp->pc_lock);
902 mutex_enter(&pcp->pc_no_exit);
903 pcp->pc_busy--;
904 if (pcp->pc_busy == 0) {
909 cv_signal(&pcp->pc_busy_cv);
911 mutex_exit(&pcp->pc_no_exit);
959 pollnotify(pollcache_t *pcp, int fd)
961 ASSERT(fd < pcp->pc_mapsize);
962 ASSERT(MUTEX_HELD(&pcp->pc_lock));
963 BT_SET(pcp->pc_bitmap, fd);
964 pcp->pc_flag |= PC_POLLWAKE;
965 cv_broadcast(&pcp->pc_cv);
966 pcache_wake_parents(pcp);
1076 pcache_lookup_fd(pollcache_t *pcp, int fd)
1081 hashindex = POLLHASH(pcp->pc_hashsize, fd);
1082 pdp = pcp->pc_hash[hashindex];
1109 pcache_insert_fd(pollcache_t *pcp, polldat_t *pdp, nfds_t nfds)
1114 if ((pcp->pc_fdcount > pcp->pc_hashsize * POLLHASHTHRESHOLD) ||
1115 (nfds > pcp->pc_hashsize * POLLHASHTHRESHOLD)) {
1116 pcache_grow_hashtbl(pcp, nfds);
1119 hashindex = POLLHASH(pcp->pc_hashsize, fd);
1120 pdp->pd_hashnext = pcp->pc_hash[hashindex];
1121 pcp->pc_hash[hashindex] = pdp;
1122 pcp->pc_fdcount++;
1143 pcache_grow_hashtbl(pollcache_t *pcp, nfds_t nfds)
1153 ASSERT(pcp->pc_hashsize % POLLHASHCHUNKSZ == 0);
1154 oldsize = pcp->pc_hashsize;
1155 oldtbl = pcp->pc_hash;
1156 if (nfds > pcp->pc_hashsize * POLLHASHINC) {
1157 pcp->pc_hashsize = (nfds + POLLHASHCHUNKSZ - 1) &
1160 pcp->pc_hashsize = pcp->pc_hashsize * POLLHASHINC;
1162 pcp->pc_hash = kmem_zalloc(pcp->pc_hashsize * sizeof (polldat_t *),
1167 pcp->pc_fdcount = 0;
1172 pcache_insert_fd(pcp, pdp, nfds);
1180 ASSERT(pcp->pc_fdcount == count);
1184 pcache_grow_map(pollcache_t *pcp, int fd)
1199 ASSERT(mutex_owned(&pcp->pc_lock) == 0);
1200 mutex_enter(&pcp->pc_lock);
1201 bcopy(pcp->pc_bitmap, newmap,
1202 (pcp->pc_mapsize / BT_NBIPUL) * sizeof (ulong_t));
1203 kmem_free(pcp->pc_bitmap,
1204 (pcp->pc_mapsize /BT_NBIPUL) * sizeof (ulong_t));
1205 pcp->pc_bitmap = newmap;
1206 pcp->pc_mapsize = newsize;
1207 mutex_exit(&pcp->pc_lock);
1214 pcache_clean(pollcache_t *pcp)
1221 hashtbl = pcp->pc_hash;
1222 for (i = 0; i < pcp->pc_hashsize; i++) {
1293 pollcache_t *pcp = ps->ps_pcache;
1328 pdp = pcache_lookup_fd(pcp, fd);
1347 pdp->pd_pcache = pcp;
1400 if (fd >= pcp->pc_mapsize) {
1401 pcache_grow_map(pcp, fd);
1403 if (fd > pcp->pc_mapend) {
1404 pcp->pc_mapend = fd;
1434 mutex_enter(&pcp->pc_lock);
1435 BT_SET(pcp->pc_bitmap, fd);
1436 mutex_exit(&pcp->pc_lock);
1448 pollcache_t *pcp = ps->ps_pcache;
1452 ASSERT(fd < pcp->pc_mapsize);
1455 pdp = pcache_lookup_fd(pcp, fd);
1480 mutex_enter(&pcp->pc_lock);
1481 BT_CLEAR(pcp->pc_bitmap, fd);
1482 mutex_exit(&pcp->pc_lock);
1493 mutex_enter(&pcp->pc_lock);
1494 BT_CLEAR(pcp->pc_bitmap, fd);
1495 mutex_exit(&pcp->pc_lock);
1525 pcache_update_xref(pollcache_t *pcp, int fd, ssize_t pos, int which)
1529 pdp = pcache_lookup_fd(pcp, fd);
1545 pollcache_t *pcp = ps->ps_pcache;
1561 pdp = pcache_lookup_fd(pcp, fd);
1566 if (BT_TEST(pcp->pc_bitmap, fd))
1582 pollcache_t *pcp = ps->ps_pcache;
1679 pcache_update_xref(pcp,
1874 pollscanrevents(pollcache_t *pcp, pollfd_t *pollfdp, nfds_t nfds)
1888 ASSERT(BT_TEST(pcp->pc_bitmap, pollfdp[i].fd));
1904 pollcache_t *pcp;
1915 pcp = ps->ps_pcache;
1917 ASSERT(MUTEX_HELD(&pcp->pc_lock));
1922 end = pcp->pc_mapend;
1928 fd = bt_getlowbit(pcp->pc_bitmap, begin, end);
1946 pdp = pcache_lookup_fd(pcp, fd);
2056 BT_SET(pcp->pc_bitmap, fd);
2093 ((pcp->pc_flag & PC_POLLWAKE) == 0)) {
2094 BT_CLEAR(pcp->pc_bitmap, fd);
2137 ASSERT(*fdcntp + fdcnt == pollscanrevents(pcp, pollfdp, nfds));
2231 pollcache_t *pcp;
2237 pcp = ps->ps_pcache;
2238 ASSERT(pcp);
2239 pdp = pcache_lookup_fd(pcp, fd);
2290 pcache_wake_parents(pollcache_t *pcp)
2294 ASSERT(MUTEX_HELD(&pcp->pc_lock));
2296 for (pl = pcp->pc_parents; pl != NULL; pl = pln) {
2355 pollstate_contend(pollstate_t *ps, pollcache_t *pcp)
2366 if (mutex_tryenter(&pcp->pc_lock) != 0) {
2375 desired_pc = pcp;
2439 ps->ps_contend_pc = pcp;
2449 mutex_enter(&pcp->pc_lock);
2460 mutex_exit(&pcp->pc_lock);
2479 pollstate_enter(pollcache_t *pcp)
2500 if (ps->ps_pc_stack[i] == pcp) {
2508 mutex_enter(&pcp->pc_lock);
2509 } else if (mutex_tryenter(&pcp->pc_lock) == 0) {
2510 if (pollstate_contend(ps, pcp) != 0) {
2516 ps->ps_pc_stack[ps->ps_depth++] = pcp;
2521 pollstate_exit(pollcache_t *pcp)
2526 VERIFY(ps->ps_pc_stack[ps->ps_depth - 1] == pcp);
2528 mutex_exit(&pcp->pc_lock);
2542 pollcache_t *pcp = fpip->fp_thread->t_pollstate->ps_pcache;
2544 mutex_enter(&pcp->pc_no_exit);
2545 pcp->pc_busy++; /* prevents exit()'s */
2546 mutex_exit(&pcp->pc_no_exit);
2566 pollcache_t *pcp = ps->ps_pcache;
2571 mutex_enter(&pcp->pc_no_exit);
2572 pcp->pc_busy--;
2573 if (pcp->pc_busy == 0) {
2578 cv_signal(&pcp->pc_busy_cv);
2580 mutex_exit(&pcp->pc_no_exit);
2658 pollcache_t *pcp;
2675 pcp = pdp->pd_pcache;
2676 ASSERT(pcp != NULL);
2677 mutex_enter(&pcp->pc_no_exit);
2678 pcp->pc_busy++; /* prevents exit()'s */
2679 mutex_exit(&pcp->pc_no_exit);
2698 mutex_enter(&pcp->pc_no_exit);
2699 pcp->pc_busy--;
2700 if (pcp->pc_busy == 0) {
2705 cv_signal(&pcp->pc_busy_cv);
2707 mutex_exit(&pcp->pc_no_exit);
2790 pollcache_t *pcp = ps->ps_pcache;
2799 pdp = pcache_lookup_fd(pcp, pollfdp[i].fd);
2831 pollcache_t *pcp = ps->ps_pcache;
2835 hashtbl = pcp->pc_hash;
2836 for (i = 0; i < pcp->pc_hashsize; i++) {
2897 pollcache_t *pcp = ps->ps_pcache;
2904 ASSERT(!BT_TEST(pcp->pc_bitmap, i));
2905 pdp = pcache_lookup_fd(pcp, i);
2941 pcache_create(pollcache_t *pcp, nfds_t nfds)
2951 pcp->pc_bitmap = kmem_zalloc((mapsize / BT_NBIPUL) * sizeof (ulong_t),
2953 pcp->pc_mapsize = mapsize;
2961 pcp->pc_hashsize = POLLHASHCHUNKSZ;
2963 pcp->pc_hashsize = (nfds + POLLHASHCHUNKSZ - 1) &
2966 pcp->pc_hash = kmem_zalloc(pcp->pc_hashsize * sizeof (polldat_t *),
2971 pcache_destroy(pollcache_t *pcp)
2976 hashtbl = pcp->pc_hash;
2977 for (i = 0; i < pcp->pc_hashsize; i++) {
2990 pcp->pc_fdcount--;
2994 ASSERT(pcp->pc_fdcount == 0);
2995 kmem_free(pcp->pc_hash, sizeof (polldat_t *) * pcp->pc_hashsize);
2996 kmem_free(pcp->pc_bitmap,
2997 sizeof (ulong_t) * (pcp->pc_mapsize/BT_NBIPUL));
2998 mutex_destroy(&pcp->pc_no_exit);
2999 mutex_destroy(&pcp->pc_lock);
3000 cv_destroy(&pcp->pc_cv);
3001 cv_destroy(&pcp->pc_busy_cv);
3002 kmem_free(pcp, sizeof (pollcache_t));
3053 pollcache_t *pcp = psp->ps_pcache;
3082 BT_SET(pcp->pc_bitmap, fd);