From nobody Wed Jun 11 20:21:53 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 4bHcWj3pstz5yQXT; Wed, 11 Jun 2025 20:21:53 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bHcWj3CLZz42HH; Wed, 11 Jun 2025 20:21:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1749673313; 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=elzK3URtkRRKhRPC8n8N7HmwT0SWyjJbsCvA1XRAcDU=; b=azBdLB4liMAOUHyebdRGoAruuAYDDGuwFjI/tmkYFAZ6Ksf9jKmDbSlXVU+NuasBYRhRGp Vflq+ZYlth6gdwSkED3maQXACZDz/6MqjxWGsjmkOzhwGH7tCK4thfw9jhS2qs+UMvxRoZ Je5DoIQ2tGlrBmHRFahy/TKSv5aW0CeAfWlVPbhivX85LSIvIRswkI//ociXyCBgZAu1bo 3nzuj9brEnnP4CzznKLpmElJwmb06RNXfvZ/nBXQRNsWQEe1sXsLQxkPxYleE4lq6rMnwM qOdvi4aMziU7+p1Xes55Iab0nv5ikdw0tYWdGIlcIPKI4olJYWvvZ9/KqbUDOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1749673313; 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=elzK3URtkRRKhRPC8n8N7HmwT0SWyjJbsCvA1XRAcDU=; b=UlJC9O+/C0gjp8vTNDlXCKzEhPP+Wn8S20guBnXmcO7E6TN/jmlFWGHwnruaykzQJhXFNO kC6g3l5bqmlKgbk/2Ovno02T9OARvAjoXWknPkVU1K+qayazJlz7pz69mXQ/UqnNyogW5y Qjtd6HGyYibqyxsTGVLfTLczS5A3cdyc+fTZTWH0WSjJT2+h9Rn1DaEpoMy2ri1DVH+7gA 9vDs5NmipSB3sEWpyB0vQXPSCrTBFHWObsZN9+rfMGdTMZTK7LnaTCYAgBv6T5v68NYTXp QjU+d+pFW/KiLEJZXf26m/9YWufZfUG7s1PcnOqx1Ili8dmJLjg6WrvcnaFISg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1749673313; a=rsa-sha256; cv=none; b=Ayso6vmXY+7AX/0e5R/RIUUyATTlxi53m28OenthVplAqLpkooje5nNzPtrMXmHF5eRaot 0+sS6/cBlmDZ3Ub8RDrj2icrjZsYjgZOqTxmNXJ080zPcVM7kd9CsxDR+iYLCW1dy77AEw KyJ4vAHkIJZoRtQXzAxx0hpBrqL8br9qZDsyF8x0e7QpSblCCzg4E769E9SeRoc08lQ+N6 BUzyLXWJ5Pf4ssGFC9tt5+fhmQL0awhu9vsf1eK69ZqlOjwP8qB+YJwNyziSpX7aAihaS+ TP+FhMIYJhCpskVOIqpsEjF324XddRkqY70rWPMG/TyIvRl5JsqgP3OvYwwQsQ== 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 4bHcWj2pPjzjTZ; Wed, 11 Jun 2025 20:21:53 +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 55BKLrn3025440; Wed, 11 Jun 2025 20:21:53 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55BKLroa025437; Wed, 11 Jun 2025 20:21:53 GMT (envelope-from git) Date: Wed, 11 Jun 2025 20:21:53 GMT Message-Id: <202506112021.55BKLroa025437@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alan Cox Subject: git: 797020a76406 - main - vm: retire vm_page_lock() 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: alc X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 797020a76406a8e7a4afbd3706884b58a6e4b4ec Auto-Submitted: auto-generated The branch main has been updated by alc: URL: https://cgit.FreeBSD.org/src/commit/?id=797020a76406a8e7a4afbd3706884b58a6e4b4ec commit 797020a76406a8e7a4afbd3706884b58a6e4b4ec Author: Alan Cox AuthorDate: 2025-06-10 07:23:23 +0000 Commit: Alan Cox CommitDate: 2025-06-11 20:19:41 +0000 vm: retire vm_page_lock() vm_page_lock() and its underlying array of locks, pa_lock[], have been replaced throughout the virtual memory system by either atomics or busy-style, per-page synchronization. The Linux KPI support contained the only remaining use cases. Eliminate or update them as appropriate to each case. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D50767 --- sys/amd64/include/vmparam.h | 4 -- sys/compat/linuxkpi/common/include/linux/highmem.h | 2 - sys/compat/linuxkpi/common/include/linux/mm.h | 4 +- sys/powerpc/aim/mmu_oea64.c | 2 +- sys/powerpc/include/vmparam.h | 6 --- sys/vm/vm_object.c | 1 - sys/vm/vm_page.c | 41 --------------------- sys/vm/vm_page.h | 43 ---------------------- sys/vm/vm_param.h | 8 ---- 9 files changed, 3 insertions(+), 108 deletions(-) diff --git a/sys/amd64/include/vmparam.h b/sys/amd64/include/vmparam.h index 026da4b460e2..0cd9bb4fa7a4 100644 --- a/sys/amd64/include/vmparam.h +++ b/sys/amd64/include/vmparam.h @@ -149,10 +149,6 @@ #define VM_LEVEL_0_ORDER 9 #endif -#ifdef SMP -#define PA_LOCK_COUNT 256 -#endif - /* * Kernel physical load address for non-UEFI boot and for legacy UEFI loader. * Newer UEFI loader loads kernel anywhere below 4G, with memory allocated diff --git a/sys/compat/linuxkpi/common/include/linux/highmem.h b/sys/compat/linuxkpi/common/include/linux/highmem.h index 8b5255c1869c..58a9cdcdf60f 100644 --- a/sys/compat/linuxkpi/common/include/linux/highmem.h +++ b/sys/compat/linuxkpi/common/include/linux/highmem.h @@ -79,9 +79,7 @@ kmap_atomic_prot(struct page *page, pgprot_t prot) vm_memattr_t attr = pgprot2cachemode(prot); if (attr != VM_MEMATTR_DEFAULT) { - vm_page_lock(page); page->flags |= PG_FICTITIOUS; - vm_page_unlock(page); pmap_page_set_memattr(page, attr); } return (kmap(page)); diff --git a/sys/compat/linuxkpi/common/include/linux/mm.h b/sys/compat/linuxkpi/common/include/linux/mm.h index 068dbb627c82..156b00a0c0f0 100644 --- a/sys/compat/linuxkpi/common/include/linux/mm.h +++ b/sys/compat/linuxkpi/common/include/linux/mm.h @@ -406,14 +406,14 @@ vmalloc_to_page(const void *addr) static inline int trylock_page(struct page *page) { - return (vm_page_trylock(page)); + return (vm_page_tryxbusy(page)); } static inline void unlock_page(struct page *page) { - vm_page_unlock(page); + vm_page_xunbusy(page); } extern int is_vmalloc_addr(const void *addr); diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c index e24f591498dd..40dd232f47c1 100644 --- a/sys/powerpc/aim/mmu_oea64.c +++ b/sys/powerpc/aim/mmu_oea64.c @@ -122,7 +122,7 @@ uintptr_t moea64_get_unique_vsid(void); * */ -#define PV_LOCK_COUNT PA_LOCK_COUNT +#define PV_LOCK_COUNT MAXCPU static struct mtx_padalign pv_lock[PV_LOCK_COUNT]; /* diff --git a/sys/powerpc/include/vmparam.h b/sys/powerpc/include/vmparam.h index a612acbef239..67fce74ade55 100644 --- a/sys/powerpc/include/vmparam.h +++ b/sys/powerpc/include/vmparam.h @@ -216,12 +216,6 @@ extern int vm_level_0_order; #define VM_LEVEL_0_ORDER_MAX 12 #endif -#ifdef __powerpc64__ -#ifdef SMP -#define PA_LOCK_COUNT 256 -#endif -#endif - #ifndef VM_INITIAL_PAGEIN #define VM_INITIAL_PAGEIN 16 #endif diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 0e429b58aa1c..f0769102aca1 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -1005,7 +1005,6 @@ vm_object_page_clean_flush(struct pctrie_iter *pages, vm_page_t p, vm_page_t ma[vm_pageout_page_count]; int count, runlen; - vm_page_lock_assert(p, MA_NOTOWNED); vm_page_assert_xbusied(p); ma[0] = p; runlen = vm_radix_iter_lookup_range(pages, p->pindex + 1, diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 128a1ef7ca54..b00f775de6e7 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -114,8 +114,6 @@ struct vm_domain vm_dom[MAXMEMDOM]; DPCPU_DEFINE_STATIC(struct vm_batchqueue, pqbatch[MAXMEMDOM][PQ_COUNT]); -struct mtx_padalign __exclusive_cache_line pa_lock[PA_LOCK_COUNT]; - struct mtx_padalign __exclusive_cache_line vm_domainset_lock; /* The following fields are protected by the domainset lock. */ domainset_t __exclusive_cache_line vm_min_domains; @@ -586,8 +584,6 @@ vm_page_startup(vm_offset_t vaddr) * Initialize the page and queue locks. */ mtx_init(&vm_domainset_lock, "vm domainset lock", NULL, MTX_DEF); - for (i = 0; i < PA_LOCK_COUNT; i++) - mtx_init(&pa_lock[i], "vm page", NULL, MTX_DEF); for (i = 0; i < vm_ndomains; i++) vm_page_domain_init(i); @@ -5809,43 +5805,6 @@ vm_page_valid(vm_page_t m) vm_page_bits_set(m, &m->valid, VM_PAGE_BITS_ALL); } -void -vm_page_lock_KBI(vm_page_t m, const char *file, int line) -{ - - mtx_lock_flags_(vm_page_lockptr(m), 0, file, line); -} - -void -vm_page_unlock_KBI(vm_page_t m, const char *file, int line) -{ - - mtx_unlock_flags_(vm_page_lockptr(m), 0, file, line); -} - -int -vm_page_trylock_KBI(vm_page_t m, const char *file, int line) -{ - - return (mtx_trylock_flags_(vm_page_lockptr(m), 0, file, line)); -} - -#if defined(INVARIANTS) || defined(INVARIANT_SUPPORT) -void -vm_page_assert_locked_KBI(vm_page_t m, const char *file, int line) -{ - - vm_page_lock_assert_KBI(m, MA_OWNED, file, line); -} - -void -vm_page_lock_assert_KBI(vm_page_t m, int a, const char *file, int line) -{ - - mtx_assert_(vm_page_lockptr(m), a, file, line); -} -#endif - #ifdef INVARIANTS void vm_page_object_busy_assert(vm_page_t m) diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index 4f82a69ebe25..062cf00b5b33 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -336,8 +336,6 @@ SLIST_HEAD(spglist, vm_page); extern vm_page_t bogus_page; #endif /* _KERNEL */ -extern struct mtx_padalign pa_lock[]; - #if defined(__arm__) #define PDRSHIFT PDR_SHIFT #elif !defined(PDRSHIFT) @@ -345,40 +343,6 @@ extern struct mtx_padalign pa_lock[]; #endif #define pa_index(pa) ((pa) >> PDRSHIFT) -#define PA_LOCKPTR(pa) ((struct mtx *)(&pa_lock[pa_index(pa) % PA_LOCK_COUNT])) -#define PA_LOCKOBJPTR(pa) ((struct lock_object *)PA_LOCKPTR((pa))) -#define PA_LOCK(pa) mtx_lock(PA_LOCKPTR(pa)) -#define PA_TRYLOCK(pa) mtx_trylock(PA_LOCKPTR(pa)) -#define PA_UNLOCK(pa) mtx_unlock(PA_LOCKPTR(pa)) -#define PA_UNLOCK_COND(pa) \ - do { \ - if ((pa) != 0) { \ - PA_UNLOCK((pa)); \ - (pa) = 0; \ - } \ - } while (0) - -#define PA_LOCK_ASSERT(pa, a) mtx_assert(PA_LOCKPTR(pa), (a)) - -#if defined(KLD_MODULE) && !defined(KLD_TIED) -#define vm_page_lock(m) vm_page_lock_KBI((m), LOCK_FILE, LOCK_LINE) -#define vm_page_unlock(m) vm_page_unlock_KBI((m), LOCK_FILE, LOCK_LINE) -#define vm_page_trylock(m) vm_page_trylock_KBI((m), LOCK_FILE, LOCK_LINE) -#else /* !KLD_MODULE */ -#define vm_page_lockptr(m) (PA_LOCKPTR(VM_PAGE_TO_PHYS((m)))) -#define vm_page_lock(m) mtx_lock(vm_page_lockptr((m))) -#define vm_page_unlock(m) mtx_unlock(vm_page_lockptr((m))) -#define vm_page_trylock(m) mtx_trylock(vm_page_lockptr((m))) -#endif -#if defined(INVARIANTS) -#define vm_page_assert_locked(m) \ - vm_page_assert_locked_KBI((m), __FILE__, __LINE__) -#define vm_page_lock_assert(m, a) \ - vm_page_lock_assert_KBI((m), (a), __FILE__, __LINE__) -#else -#define vm_page_assert_locked(m) -#define vm_page_lock_assert(m, a) -#endif /* * The vm_page's aflags are updated using atomic operations. To set or clear @@ -713,13 +677,6 @@ vm_page_bits_t vm_page_bits(int base, int size); void vm_page_zero_invalid(vm_page_t m, boolean_t setvalid); void vm_page_dirty_KBI(vm_page_t m); -void vm_page_lock_KBI(vm_page_t m, const char *file, int line); -void vm_page_unlock_KBI(vm_page_t m, const char *file, int line); -int vm_page_trylock_KBI(vm_page_t m, const char *file, int line); -#if defined(INVARIANTS) || defined(INVARIANT_SUPPORT) -void vm_page_assert_locked_KBI(vm_page_t m, const char *file, int line); -void vm_page_lock_assert_KBI(vm_page_t m, int a, const char *file, int line); -#endif #define vm_page_busy_fetch(m) atomic_load_int(&(m)->busy_lock) diff --git a/sys/vm/vm_param.h b/sys/vm/vm_param.h index c18dfef97ed4..51b7fdadbf88 100644 --- a/sys/vm/vm_param.h +++ b/sys/vm/vm_param.h @@ -112,14 +112,6 @@ struct xswdev { #define KERN_OUT_OF_BOUNDS 9 #define KERN_RESTART 10 -#ifndef PA_LOCK_COUNT -#ifdef SMP -#define PA_LOCK_COUNT 32 -#else -#define PA_LOCK_COUNT 1 -#endif /* !SMP */ -#endif /* !PA_LOCK_COUNT */ - #ifndef KSTACK_MAX_PAGES #define KSTACK_MAX_PAGES 32 #endif