From nobody Mon Apr 21 04:13:02 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZgsRM2LZjz5sqPQ; Mon, 21 Apr 2025 04:13:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZgsRL72ZDz3bH6; Mon, 21 Apr 2025 04:13:02 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745208783; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Z0AuhYzgDkW6m9tN09SQ0vpw0OXU1IwsFNViZcIzdVw=; b=N/XvdamN2xIAVrJCqFTrx74InJXrkPCvE9+GnzhmvzWvz1/TcVpW01X7rnzaN7H7dvYOyH IwxaDrayHAyYqo8hcB/QqiQpKjHC7o5ojuECJZJKZyn2jx8N7Zrh1KjfmyQNaQDgOsEov6 4w+PZXnchm49M1/WH9vHa1lY9HbTjV+udTqyDVklo1cJT/0H1rwuYF7EtEeECB6xFmCGem 4JNtYMY5DlohaCxSp0EShvlnAwQ/m3PB0z0cVss5af5YRWL6ZpBFB3V8DoZGI07qpKTYFg FwasveyK7DB4KeWVOzhWxa7HrXXQLjyMXTcd7IIIIHrQqeDCubQLevO1MRz3Jg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1745208783; a=rsa-sha256; cv=none; b=Mn5oq2TyzfbcJ+OirQeW1C7FfgB8kZvNzpTN6UU2DuMRjGICwa13THXNbv7KB90DlW8G0A NDM2r2qx+DpblUxnHRTdWWVqvGGpKvs1KPDKNAVBqkKrVbI6d1Q3304KUnX9KmImQdLo3D OOb39bun8y3ag2k8oV5yemYXaXyy6DBQrNqz0MiJe2EZ19tbBqAgK0GkFO4Wg3w7CxknhV lP95wlqstHA3PsQ79klHKMQErlajNdYwKHadWi0Qq6LOlkv8DxoH0JL9gXR2ZGj3j/adI3 OpeCqXdHg48bahGOn0KWBn5OFfHZ6XZNcV2agcDxp8yyrNeGo7G9glIEH8Ds6Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745208783; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Z0AuhYzgDkW6m9tN09SQ0vpw0OXU1IwsFNViZcIzdVw=; b=SMQwzoE5B+6S7MBdC5kIYKUPBZqKhLBFvPB2zBdsbq0HhnfeFVD9W/tpxVpO9tUpScbn74 romonrRyjr3OSHRUnfGA7nZk/qYLvFvLQcj7mW7CZf0ak62hG7tBdTenlPpn6hq6Cq81UJ E4yeq/QeQkpH49EKWOI5HPIzYt9Ksyi0b2rV8DEwi2zGpBXQQZVXWGtcZl7ajuTkbGUJGP YO8HF0RLvEfO8+16jqCPd+kG2GLmu9b4JoZoK6omLed6sN9LXHOQ6gWZdGPTvvGlycl1b/ OV+a4/pF40x7pY5HkuGGOPiEa5f6R4fhmGs5QKOBN38SAgIRuA4Wi/wRSVxyrw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZgsRL5zrTzbBW; Mon, 21 Apr 2025 04:13:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 53L4D2Mc017826; Mon, 21 Apr 2025 04:13:02 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53L4D2kX017823; Mon, 21 Apr 2025 04:13:02 GMT (envelope-from git) Date: Mon, 21 Apr 2025 04:13:02 GMT Message-Id: <202504210413.53L4D2kX017823@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Doug Moore Subject: git: b6cd84ca2d08 - main - powerpc: replace tailq pointers with iterators List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dougm X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b6cd84ca2d08b39e6a51a782ddf2b58293be6cba Auto-Submitted: auto-generated The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=b6cd84ca2d08b39e6a51a782ddf2b58293be6cba commit b6cd84ca2d08b39e6a51a782ddf2b58293be6cba Author: Doug Moore AuthorDate: 2025-04-21 04:04:43 +0000 Commit: Doug Moore CommitDate: 2025-04-21 04:04:43 +0000 powerpc: replace tailq pointers with iterators Change architecture-specific code to use iterators rather than tailq pointers. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D49927 --- sys/powerpc/aim/mmu_oea.c | 16 ++++++++++------ sys/powerpc/aim/mmu_oea64.c | 17 ++++++++++------- sys/powerpc/aim/mmu_radix.c | 31 +++++++++++++++++-------------- sys/powerpc/booke/pmap.c | 15 +++++++++------ 4 files changed, 46 insertions(+), 33 deletions(-) diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c index 7f1f64a51db5..7746b668265d 100644 --- a/sys/powerpc/aim/mmu_oea.c +++ b/sys/powerpc/aim/mmu_oea.c @@ -135,6 +135,7 @@ #include #include #include +#include #include #include @@ -1235,20 +1236,23 @@ void moea_enter_object(pmap_t pm, vm_offset_t start, vm_offset_t end, vm_page_t m_start, vm_prot_t prot) { + struct pctrie_iter pages; + vm_offset_t va; vm_page_t m; - vm_pindex_t diff, psize; VM_OBJECT_ASSERT_LOCKED(m_start->object); - psize = atop(end - start); - m = m_start; + vm_page_iter_limit_init(&pages, m_start->object, + m_start->pindex + atop(end - start)); + m = vm_radix_iter_lookup(&pages, m_start->pindex); rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); - while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { - moea_enter_locked(pm, start + ptoa(diff), m, prot & + while (m != NULL) { + va = start + ptoa(m->pindex - m_start->pindex); + moea_enter_locked(pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), PMAP_ENTER_QUICK_LOCKED, 0); - m = TAILQ_NEXT(m, listq); + m = vm_radix_iter_step(&pages); } rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pm); diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c index 7e23d73557a5..e24f591498dd 100644 --- a/sys/powerpc/aim/mmu_oea64.c +++ b/sys/powerpc/aim/mmu_oea64.c @@ -81,6 +81,7 @@ #include #include #include +#include #include #include @@ -1826,17 +1827,18 @@ void moea64_enter_object(pmap_t pm, vm_offset_t start, vm_offset_t end, vm_page_t m_start, vm_prot_t prot) { + struct pctrie_iter pages; vm_page_t m; - vm_pindex_t diff, psize; vm_offset_t va; int8_t psind; VM_OBJECT_ASSERT_LOCKED(m_start->object); - psize = atop(end - start); - m = m_start; - while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { - va = start + ptoa(diff); + vm_page_iter_limit_init(&pages, m_start->object, + m_start->pindex + atop(end - start)); + m = vm_radix_iter_lookup(&pages, m_start->pindex); + while (m != NULL) { + va = start + ptoa(m->pindex - m_start->pindex); if ((va & HPT_SP_MASK) == 0 && va + HPT_SP_SIZE <= end && m->psind == 1 && moea64_ps_enabled(pm)) psind = 1; @@ -1846,8 +1848,9 @@ moea64_enter_object(pmap_t pm, vm_offset_t start, vm_offset_t end, (VM_PROT_READ | VM_PROT_EXECUTE), PMAP_ENTER_NOSLEEP | PMAP_ENTER_QUICK_LOCKED, psind); if (psind == 1) - m = &m[HPT_SP_SIZE / PAGE_SIZE - 1]; - m = TAILQ_NEXT(m, listq); + m = vm_radix_iter_jump(&pages, HPT_SP_SIZE / PAGE_SIZE); + else + m = vm_radix_iter_step(&pages); } } diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c index 388ab386b35a..cda8dd1c0946 100644 --- a/sys/powerpc/aim/mmu_radix.c +++ b/sys/powerpc/aim/mmu_radix.c @@ -3334,33 +3334,34 @@ void mmu_radix_enter_object(pmap_t pmap, vm_offset_t start, vm_offset_t end, vm_page_t m_start, vm_prot_t prot) { - + struct pctrie_iter pages; struct rwlock *lock; vm_offset_t va; vm_page_t m, mpte; - vm_pindex_t diff, psize; bool invalidate; + VM_OBJECT_ASSERT_LOCKED(m_start->object); CTR6(KTR_PMAP, "%s(%p, %#x, %#x, %p, %#x)", __func__, pmap, start, end, m_start, prot); - invalidate = false; - psize = atop(end - start); mpte = NULL; - m = m_start; + vm_page_iter_limit_init(&pages, m_start->object, + m_start->pindex + atop(end - start)); + m = vm_radix_iter_lookup(&pages, m_start->pindex); lock = NULL; PMAP_LOCK(pmap); - while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { - va = start + ptoa(diff); + while (m != NULL) { + va = start + ptoa(m->pindex - m_start->pindex); if ((va & L3_PAGE_MASK) == 0 && va + L3_PAGE_SIZE <= end && m->psind == 1 && mmu_radix_ps_enabled(pmap) && - pmap_enter_2mpage(pmap, va, m, prot, &lock)) - m = &m[L3_PAGE_SIZE / PAGE_SIZE - 1]; - else + pmap_enter_2mpage(pmap, va, m, prot, &lock)) { + m = vm_radix_iter_jump(&pages, L3_PAGE_SIZE / PAGE_SIZE); + } else { mpte = mmu_radix_enter_quick_locked(pmap, va, m, prot, mpte, &lock, &invalidate); - m = TAILQ_NEXT(m, listq); + m = vm_radix_iter_step(&pages); + } } ptesync(); if (lock != NULL) @@ -4043,6 +4044,7 @@ void mmu_radix_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, vm_pindex_t pindex, vm_size_t size) { + struct pctrie_iter pages; pml3_entry_t *l3e; vm_paddr_t pa, ptepa; vm_page_t p, pdpg; @@ -4059,7 +4061,9 @@ mmu_radix_object_init_pt(pmap_t pmap, vm_offset_t addr, return; if (!vm_object_populate(object, pindex, pindex + atop(size))) return; - p = vm_page_lookup(object, pindex); + vm_page_iter_init(&pages, object); + p = vm_radix_iter_lookup(&pages, pindex); + KASSERT(p->valid == VM_PAGE_BITS_ALL, ("pmap_object_init_pt: invalid page %p", p)); ma = p->md.mdpg_cache_attrs; @@ -4077,15 +4081,14 @@ mmu_radix_object_init_pt(pmap_t pmap, vm_offset_t addr, * the pages are not physically contiguous or have differing * memory attributes. */ - p = TAILQ_NEXT(p, listq); for (pa = ptepa + PAGE_SIZE; pa < ptepa + size; pa += PAGE_SIZE) { + p = vm_radix_iter_next(&pages); KASSERT(p->valid == VM_PAGE_BITS_ALL, ("pmap_object_init_pt: invalid page %p", p)); if (pa != VM_PAGE_TO_PHYS(p) || ma != p->md.mdpg_cache_attrs) return; - p = TAILQ_NEXT(p, listq); } PMAP_LOCK(pmap); diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c index 9f96255ea00e..62fd21d4f073 100644 --- a/sys/powerpc/booke/pmap.c +++ b/sys/powerpc/booke/pmap.c @@ -1457,20 +1457,23 @@ static void mmu_booke_enter_object(pmap_t pmap, vm_offset_t start, vm_offset_t end, vm_page_t m_start, vm_prot_t prot) { + struct pctrie_iter pages; + vm_offset_t va; vm_page_t m; - vm_pindex_t diff, psize; VM_OBJECT_ASSERT_LOCKED(m_start->object); - psize = atop(end - start); - m = m_start; + vm_page_iter_limit_init(&pages, m_start->object, + m_start->pindex + atop(end - start)); + m = vm_radix_iter_lookup(&pages, m_start->pindex); rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); - while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { - mmu_booke_enter_locked(pmap, start + ptoa(diff), m, + while (m != NULL) { + va = start + ptoa(m->pindex - m_start->pindex); + mmu_booke_enter_locked(pmap, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), PMAP_ENTER_NOSLEEP | PMAP_ENTER_QUICK_LOCKED, 0); - m = TAILQ_NEXT(m, listq); + m = vm_radix_iter_step(&pages); } PMAP_UNLOCK(pmap); rw_wunlock(&pvh_global_lock);