From nobody Sat Apr 19 22:32:52 2025 X-Original-To: dev-commits-src-main@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 4Zg5xJ6TRrz5tZMT; Sat, 19 Apr 2025 22:32:52 +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 4Zg5xJ5ts4z3nyM; Sat, 19 Apr 2025 22:32:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745101972; 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=PX62b4q3B9L1D7dE0Uo1MWt9Z8dWLzhj1Fe2g9WHWxE=; b=IDJpCTwMC880EBU/QrL8DQHBzcWNEGOp4EqQbIEnvd7rYRpuw75ZExAcJu9OMaRkRvrS+I FFgWAIq4IFi5WBTHOUmkKwqLpeBCxHkOQ4tMY1Tf3Og1m2rbwFhD8EeSJuTCe1WfIAjD7S i4a4R98+7T0Xrhqz80YA1s6FAdocbIkuLyaYgLsJjwk0JMCla3acoEHBAMj/ZPYDO91mNV sDWfJTYdgPuVTy4gvnCYYkwwBV5pY9XJxNPq+XZxf8u8wWzREk4oVvArGySnUVpaQ1FJ9B OrXmDIzdgyB4E2Fvf6+ekcPk6C/dXOy9rnyJq0FOodvaQMScABZoQ1dLUl27Bw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1745101972; a=rsa-sha256; cv=none; b=KtHrz5OtbCFNvUIr+iK7S1Pp/Y7ysz5O4ej0Ay547Mx73mqq52bU3PDU9LJ1JFiTVdW+rl U1Gy46DjYy7RNL6UE+ETthH3e1vvuyxX7iLXhbr0aI/DZhSoz9InrTygMSlR6tXrnsUk1f IM2Emviq5pODWfwHQ/0acXieAaY4ShaFiMqGcJsvN4ZG0oL4cvWN7cDtDRGeIs7HOyfSGA 8JMWg0/2QImh8wWDCSIYSCrGW2G//oNIwPQq/2cQiTtJcr8QfRz5IqW7QWHn4rMlYToVmr x9MAtVTnzgUhw3jaAM9yssqcmT3NQWrgsZvTiO5Nz1UdhYK01ZZUVokvst1jqA== 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=1745101972; 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=PX62b4q3B9L1D7dE0Uo1MWt9Z8dWLzhj1Fe2g9WHWxE=; b=RIjBurd/dvqhGzmnoOGww80Vu/t89cU+iH3G/ZhHpuR2j5OKBDwLwcetzHfOS8ntx+SYcv B59f6FMJbVbriEHL2XEv+t5sfxkUb99MyPO8NtkUov0tRUnlFeTFkW9LEUHun3rt+AuNkI 3U/Qr0hd/AoMz25DUyiLnpNUyKcFbQHGACloHWKBptolDog8OS4EicRqQdMFPlGVWE/iUE R6YJAig0HpiV3mNIsVjkyXOpdHyHY4R47uQYfRHAuMSqyZ5WeoEl18R3rVwYA8AhDJ1kkS kemGeOhxU+gWfqEbGGIqyRxYxa/YkFbWHGeLfNUvYjUl55Zy2w4KixMioBGSzg== 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 4Zg5xJ4rvXzfNW; Sat, 19 Apr 2025 22:32:52 +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 53JMWqxE084359; Sat, 19 Apr 2025 22:32:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53JMWqSY084356; Sat, 19 Apr 2025 22:32:52 GMT (envelope-from git) Date: Sat, 19 Apr 2025 22:32:52 GMT Message-Id: <202504192232.53JMWqSY084356@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: e1f3f15192c1 - main - agp: use iterators to speed up lookups List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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: e1f3f15192c135817aff96a19161e946ba9eb9f3 Auto-Submitted: auto-generated The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=e1f3f15192c135817aff96a19161e946ba9eb9f3 commit e1f3f15192c135817aff96a19161e946ba9eb9f3 Author: Doug Moore AuthorDate: 2025-04-19 22:29:47 +0000 Commit: Doug Moore CommitDate: 2025-04-19 22:29:47 +0000 agp: use iterators to speed up lookups agp_generic_bind_memory and agp_generic_unbind_memory do pctrie lookups for ranges of consecutive pages. Use iterators to improved the expected performance of those searches. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D49917 --- sys/dev/agp/agp.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sys/dev/agp/agp.c b/sys/dev/agp/agp.c index 8db1e13f08de..b4fe186e4903 100644 --- a/sys/dev/agp/agp.c +++ b/sys/dev/agp/agp.c @@ -56,6 +56,7 @@ #include #include #include +#include #include #include @@ -539,6 +540,7 @@ int agp_generic_bind_memory(device_t dev, struct agp_memory *mem, vm_offset_t offset) { + struct pctrie_iter pages; struct agp_softc *sc = device_get_softc(dev); vm_offset_t i, j, k; vm_page_t m; @@ -571,7 +573,7 @@ agp_generic_bind_memory(device_t dev, struct agp_memory *mem, AGP_DPF("found page pa=%#jx\n", (uintmax_t)VM_PAGE_TO_PHYS(m)); } VM_OBJECT_WUNLOCK(mem->am_obj); - + vm_page_iter_init(&pages, mem->am_obj); mtx_lock(&sc->as_lock); if (mem->am_is_bound) { @@ -588,7 +590,7 @@ agp_generic_bind_memory(device_t dev, struct agp_memory *mem, */ VM_OBJECT_WLOCK(mem->am_obj); for (i = 0; i < mem->am_size; i += PAGE_SIZE) { - m = vm_page_lookup(mem->am_obj, OFF_TO_IDX(i)); + m = vm_radix_iter_lookup(&pages, OFF_TO_IDX(i)); /* * Install entries in the GATT, making sure that if @@ -609,6 +611,7 @@ agp_generic_bind_memory(device_t dev, struct agp_memory *mem, */ for (k = 0; k < i + j; k += AGP_PAGE_SIZE) AGP_UNBIND_PAGE(dev, offset + k); + pctrie_iter_reset(&pages); goto bad; } } @@ -631,7 +634,7 @@ bad: mtx_unlock(&sc->as_lock); VM_OBJECT_ASSERT_WLOCKED(mem->am_obj); for (k = 0; k < mem->am_size; k += PAGE_SIZE) { - m = vm_page_lookup(mem->am_obj, OFF_TO_IDX(k)); + m = vm_radix_iter_lookup(&pages, OFF_TO_IDX(k)); if (k >= i) vm_page_xunbusy(m); vm_page_unwire(m, PQ_INACTIVE); @@ -644,6 +647,7 @@ bad: int agp_generic_unbind_memory(device_t dev, struct agp_memory *mem) { + struct pctrie_iter pages; struct agp_softc *sc = device_get_softc(dev); vm_page_t m; int i; @@ -665,9 +669,10 @@ agp_generic_unbind_memory(device_t dev, struct agp_memory *mem) AGP_FLUSH_TLB(dev); + vm_page_iter_init(&pages, mem->am_obj); VM_OBJECT_WLOCK(mem->am_obj); for (i = 0; i < mem->am_size; i += PAGE_SIZE) { - m = vm_page_lookup(mem->am_obj, atop(i)); + m = vm_radix_iter_lookup(&pages, atop(i)); vm_page_unwire(m, PQ_INACTIVE); } VM_OBJECT_WUNLOCK(mem->am_obj);