Lines Matching refs:pp
73 * PAGE_SE_MUTEX(pp) returns the address of the appropriate mutex
90 #define PAGE_IO_MUTEX(pp) \
91 &pio_mutex[(((uintptr_t)pp) >> PIO_SHIFT) & (PIO_TABLE_SIZE - 1)]
97 extern pad_mutex_t *pse_mutex; /* Locks protecting pp->p_selock */
100 #define PAGE_SE_MUTEX(pp) &pse_mutex[ \
101 ((((uintptr_t)(pp) >> pse_shift) ^ ((uintptr_t)(pp))) >> 7) & \
243 page_lock(page_t *pp, se_t se, kmutex_t *lock, reclaim_t reclaim)
245 return (page_lock_es(pp, se, lock, reclaim, 0));
294 page_lock_es(page_t *pp, se_t se, kmutex_t *lock, reclaim_t reclaim, int es)
297 kmutex_t *pse = PAGE_SE_MUTEX(pp);
313 if (PP_RETIRED(pp) && !(es & SE_RETIRED)) {
319 if (se == SE_SHARED && es == 1 && pp->p_selock == 0) {
323 if ((reclaim == P_RECLAIM) && (PP_ISFREE(pp))) {
358 if (!(es & SE_EXCL_WANTED) && (pp->p_selock & SE_EWANTED)) {
365 } else if ((pp->p_selock & ~SE_EWANTED) == 0) {
369 pp->p_selock = SE_WRITER;
375 pp->p_selock |= SE_EWANTED;
381 if (pp->p_selock >= 0) {
382 if ((pp->p_selock & SE_EWANTED) == 0) {
383 pp->p_selock += SE_READER;
390 if ((pp->p_selock & ~SE_EWANTED) == SE_DELETED) {
411 cv_wait(&pp->p_cv, pse);
416 * blocked. If we are willing to depend on "pp"
440 ((PP_ISFREE(pp)) && PAGE_EXCL(pp)) : 1);
455 if (!page_reclaim(pp, lock)) {
461 page_downgrade(pp);
478 page_lock_clr_exclwanted(page_t *pp)
480 kmutex_t *pse = PAGE_SE_MUTEX(pp);
483 pp->p_selock &= ~SE_EWANTED;
484 if (CV_HAS_WAITERS(&pp->p_cv))
485 cv_broadcast(&pp->p_cv);
503 page_try_reclaim_lock(page_t *pp, se_t se, int es)
505 kmutex_t *pse = PAGE_SE_MUTEX(pp);
510 old = pp->p_selock;
515 if (PP_RETIRED(pp) && !(es & SE_RETIRED)) {
526 if (!PP_ISFREE(pp)) {
532 pp->p_selock = old + SE_READER;
556 pp->p_selock = SE_WRITER;
563 pp->p_selock |= SE_EWANTED;
574 page_trylock(page_t *pp, se_t se)
576 kmutex_t *pse = PAGE_SE_MUTEX(pp);
579 if (pp->p_selock & SE_EWANTED || PP_RETIRED(pp) ||
580 (se == SE_SHARED && PP_PR_NOSHARE(pp))) {
592 if (pp->p_selock == 0) {
594 pp->p_selock = SE_WRITER;
599 if (pp->p_selock >= 0) {
600 pp->p_selock += SE_READER;
616 page_unlock_nocapture(page_t *pp)
618 kmutex_t *pse = PAGE_SE_MUTEX(pp);
623 old = pp->p_selock;
625 pp->p_selock = old & ~SE_READER;
626 if (CV_HAS_WAITERS(&pp->p_cv))
627 cv_broadcast(&pp->p_cv);
629 panic("page_unlock_nocapture: page %p is deleted", (void *)pp);
632 pp->p_selock &= SE_EWANTED;
633 if (CV_HAS_WAITERS(&pp->p_cv))
634 cv_broadcast(&pp->p_cv);
636 pp->p_selock = old - SE_READER;
639 (void *)pp);
650 page_unlock(page_t *pp)
652 kmutex_t *pse = PAGE_SE_MUTEX(pp);
657 old = pp->p_selock;
659 pp->p_selock = old & ~SE_READER;
660 if (CV_HAS_WAITERS(&pp->p_cv))
661 cv_broadcast(&pp->p_cv);
663 panic("page_unlock: page %p is deleted", (void *)pp);
666 pp->p_selock &= SE_EWANTED;
667 if (CV_HAS_WAITERS(&pp->p_cv))
668 cv_broadcast(&pp->p_cv);
670 pp->p_selock = old - SE_READER;
672 panic("page_unlock: page %p is not locked", (void *)pp);
675 if (pp->p_selock == 0) {
682 if ((pp->p_toxic & PR_CAPTURE) &&
684 !PP_RETIRED(pp)) {
686 pp->p_selock = SE_WRITER;
688 page_unlock_capture(pp);
707 page_tryupgrade(page_t *pp)
709 kmutex_t *pse = PAGE_SE_MUTEX(pp);
712 if (!(pp->p_selock & SE_EWANTED)) {
714 if (pp->p_selock == SE_READER) {
717 pp->p_selock = SE_WRITER;
731 page_downgrade(page_t *pp)
733 kmutex_t *pse = PAGE_SE_MUTEX(pp);
736 ASSERT((pp->p_selock & ~SE_EWANTED) != SE_DELETED);
737 ASSERT(PAGE_EXCL(pp));
740 excl_waiting = pp->p_selock & SE_EWANTED;
742 pp->p_selock = SE_READER | excl_waiting;
743 if (CV_HAS_WAITERS(&pp->p_cv))
744 cv_broadcast(&pp->p_cv);
749 page_lock_delete(page_t *pp)
751 kmutex_t *pse = PAGE_SE_MUTEX(pp);
753 ASSERT(PAGE_EXCL(pp));
754 ASSERT(pp->p_vnode == NULL);
755 ASSERT(pp->p_offset == (u_offset_t)-1);
756 ASSERT(!PP_ISFREE(pp));
760 pp->p_selock = SE_DELETED;
761 if (CV_HAS_WAITERS(&pp->p_cv))
762 cv_broadcast(&pp->p_cv);
767 page_deleted(page_t *pp)
769 return (pp->p_selock == SE_DELETED);
776 page_iolock_init(page_t *pp)
778 pp->p_iolock_state = 0;
779 cv_init(&pp->p_io_cv, NULL, CV_DEFAULT, NULL);
786 page_io_lock(page_t *pp)
790 pio = PAGE_IO_MUTEX(pp);
792 while (pp->p_iolock_state & PAGE_IO_INUSE) {
793 cv_wait(&(pp->p_io_cv), pio);
795 pp->p_iolock_state |= PAGE_IO_INUSE;
803 page_io_unlock(page_t *pp)
807 pio = PAGE_IO_MUTEX(pp);
809 cv_broadcast(&pp->p_io_cv);
810 pp->p_iolock_state &= ~PAGE_IO_INUSE;
819 page_io_trylock(page_t *pp)
823 if (pp->p_iolock_state & PAGE_IO_INUSE)
826 pio = PAGE_IO_MUTEX(pp);
829 if (pp->p_iolock_state & PAGE_IO_INUSE) {
833 pp->p_iolock_state |= PAGE_IO_INUSE;
843 page_io_wait(page_t *pp)
847 pio = PAGE_IO_MUTEX(pp);
849 while (pp->p_iolock_state & PAGE_IO_INUSE) {
850 cv_wait(&(pp->p_io_cv), pio);
859 page_io_locked(page_t *pp)
861 return (pp->p_iolock_state & PAGE_IO_INUSE);
869 page_iolock_assert(page_t *pp)
871 return (page_io_locked(pp));
905 page_se_mutex(page_t *pp)
907 return (PAGE_SE_MUTEX(pp));
931 * If NULL is returned pp's p_szc is guaranteed to be 0. If non NULL is
932 * returned pp's p_szc may be any value.
935 page_szc_lock(page_t *pp)
941 uint_t pszc = pp->p_szc;
943 ASSERT(pp != NULL);
944 ASSERT(PAGE_LOCKED(pp));
945 ASSERT(!PP_ISFREE(pp));
946 ASSERT(pp->p_vnode != NULL);
947 ASSERT(!IS_SWAPFSVP(pp->p_vnode));
948 ASSERT(!PP_ISKAS(pp));
958 rootpp = PP_GROUPLEADER(pp, pszc);
963 * since p_szc can only decrease if pp == rootpp
966 * If location of pp's root didn't change after we took
969 if (pp == rootpp || (rszc = rootpp->p_szc) == pszc) {
979 szc = pp->p_szc;
1002 page_szc_lock_assert(page_t *pp)
1004 page_t *rootpp = PP_PAGEROOT(pp);