From nobody Wed Apr 08 14:01:33 2026 X-Original-To: dev-commits-src-branches@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 4frPqy04VRz6Y9wy for ; Wed, 08 Apr 2026 14:01:34 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4frPqx2tsLz3fxk for ; Wed, 08 Apr 2026 14:01:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775656893; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=TEX8CU82LAFXAyF3GLLoYPdjuobU6Y0emRtBTcQBaBo=; b=ZqdV7bwZiLlr/7dDUEDWj4XFVzo5Zr8Wr0R4hJ3MNTEelgpbs0StdafUiwB4bLHxZsvT0f nDnLVTd9H8jd4r6Wy8BA0vfFFtsyXggDFRLk0+JPp007P3I0h6+8/Gj0jUi+zUfZBQ8JEU 4RXrk0IMOrCkIKTZ+C3nWIj1jcouE50//OZex9b1qMizbdaFE5qA+NBrWhR/r38D3IBt/W +iRK9NbAIRUAJ3NDx/e81TPoSJNGq4ibFZ5pCE/JcxjgHPE8TY9uPOl13583yLJhK5/Bb+ Bwh+m4qcI05sYYEMnK2fhOLHnVZNkWuuNETf/vI/0mPZR9Ykf79PAr0SrpR5Fw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775656893; a=rsa-sha256; cv=none; b=Ih4L6QxLAiWf7jDa/TemLlhoBOhil7m/icG1Rh8U3pDRQ9ogDv7jK/Y93XxEXp+PoAjsr4 WYVrlIQRpC48wGWFiWhsi5+n/n9Cgj1iGJY1bWsUoSnORyVOsmzcvWkuhEGbRwnQQ/+qw8 QREeuLCY2G3/3/je2tFRZdVZAsbYBXeFJ1Qi+Cfidx8176NeuFdNhjV2FkSyRZCegExe1+ jLRI4fd6c5NzAUAdp+mcrMQ9KqIzli4fY1TENJ037dnud//nlhK/6Ab5J1xN0444HOb/cp v0FDALpYwk/5BUkngKK+utpgCCFoGeD6foGTAcknQFeYVpNYeAXk6OR2ZubZkA== 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=1775656893; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=TEX8CU82LAFXAyF3GLLoYPdjuobU6Y0emRtBTcQBaBo=; b=czjCe314eAijhb86rNHYIZpNiWQWGEnB1TGZweZvZdyCvWpE+KgzieomgwrBipUT7F+xhd k8OW5buzjWUzK4Bl2sY4kKLlGfFumriYDN7qlikFFIrEc3SBON9cQG88HByEyQlLz4heJ1 YYPKFV26lMye5GyrQaJRKyG3CmdgXSrgMTcsG9Pkv38kuXayJxHWI0uyaBVxScSlHJCADK Qus7vcnvoTWpuFuZvdjTNM6KEbYNqzO+JWSetYOQzNDP91pWgRdJrM6DjnwWno2MvJXERM yMHQrA/76vobJ84ErygriLkhUcklaTAUoyAfPMGDdT+Lw8+m/4MnA4dmWaviBQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4frPqx2NtXzDSP for ; Wed, 08 Apr 2026 14:01:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39eca by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 08 Apr 2026 14:01:33 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Sarah Walker From: Andrew Turner Subject: git: e40964f7123e - stable/15 - arm64: Add MOPS implementation of pagezero() List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: e40964f7123e92ed13e826e904a7b8161f1f3bd2 Auto-Submitted: auto-generated Date: Wed, 08 Apr 2026 14:01:33 +0000 Message-Id: <69d65fbd.39eca.47fea05d@gitrepo.freebsd.org> The branch stable/15 has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=e40964f7123e92ed13e826e904a7b8161f1f3bd2 commit e40964f7123e92ed13e826e904a7b8161f1f3bd2 Author: Sarah Walker AuthorDate: 2026-01-29 17:43:45 +0000 Commit: Andrew Turner CommitDate: 2026-04-08 13:59:53 +0000 arm64: Add MOPS implementation of pagezero() Reimplement pagezero() as ifunc. As pagezero() is only used in pmap.c, move ifunc to that file. Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D54946 (cherry picked from commit 7d7295df9b13b98ac395b206667e7586c602862b) --- sys/arm64/arm64/machdep.c | 10 ---------- sys/arm64/arm64/pmap.c | 22 ++++++++++++++++++++++ sys/arm64/arm64/support.S | 12 ++++++++++++ sys/arm64/include/machdep.h | 1 - 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/sys/arm64/arm64/machdep.c b/sys/arm64/arm64/machdep.c index ffe9acb0cfa4..2addc5af9568 100644 --- a/sys/arm64/arm64/machdep.c +++ b/sys/arm64/arm64/machdep.c @@ -155,13 +155,6 @@ uintptr_t socdev_va __read_mostly; vm_paddr_t efi_systbl_phys; static struct efi_map_header *efihdr; -/* pagezero_* implementations are provided in support.S */ -void pagezero_simple(void *); -void pagezero_cache(void *); - -/* pagezero_simple is default pagezero */ -void (*pagezero)(void *p) = pagezero_simple; - int (*apei_nmi)(void); #if defined(PERTHREAD_SSP_WARNING) @@ -720,9 +713,6 @@ cache_setup(void) /* Same as with above calculations */ dczva_line_shift = DCZID_BS_SIZE(dczid_el0); dczva_line_size = sizeof(int) << dczva_line_shift; - - /* Change pagezero function */ - pagezero = pagezero_cache; } } diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index e865569ac377..0cfc8ae80d70 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -147,6 +147,8 @@ #include #include +#include +#include #include #include #include @@ -529,6 +531,7 @@ static void *bti_dup_range(void *ctx, void *data); static void bti_free_range(void *ctx, void *node); static int pmap_bti_copy(pmap_t dst_pmap, pmap_t src_pmap); static void pmap_bti_deassign_all(pmap_t pmap); +static void pagezero(void *); /* * These load the old table data and store the new value. @@ -10207,3 +10210,22 @@ SYSCTL_OID(_vm_pmap, OID_AUTO, kernel_maps, CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE | CTLFLAG_SKIP, NULL, 0, sysctl_kmaps, "A", "Dump kernel address layout"); + + +void pagezero_simple(void *); +void pagezero_cache(void *); +void pagezero_mops(void *); + +DEFINE_IFUNC(static, void, pagezero, (void *)) +{ + uint32_t dczid_el0; + + dczid_el0 = READ_SPECIALREG(dczid_el0); + + if (elf_hwcap2 & HWCAP2_MOPS) + return (pagezero_mops); + else if ((dczid_el0 & DCZID_DZP) == 0) + return (pagezero_cache); + else + return (pagezero_simple); +} diff --git a/sys/arm64/arm64/support.S b/sys/arm64/arm64/support.S index bf6fc931e4b0..cee0e3b51aaf 100644 --- a/sys/arm64/arm64/support.S +++ b/sys/arm64/arm64/support.S @@ -397,4 +397,16 @@ ENTRY(pagezero_cache) END(pagezero_cache) +/* + * pagezero, MOPS implementation + */ +ENTRY(pagezero_mops) + mov x1, #PAGE_SIZE + .inst 0x19df0420 /* setp [x0]!, x1!, xzr */ + .inst 0x19df4420 /* setm [x0]!, x1!, xzr */ + .inst 0x19df8420 /* sete [x0]!, x1!, xzr */ + ret + +END(pagezero_mops) + GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL) diff --git a/sys/arm64/include/machdep.h b/sys/arm64/include/machdep.h index 4fa80219da42..3606690eb9ba 100644 --- a/sys/arm64/include/machdep.h +++ b/sys/arm64/include/machdep.h @@ -54,7 +54,6 @@ vm_offset_t parse_boot_param(struct arm64_bootparams *abp); void parse_fdt_bootargs(void); #endif int memory_mapping_mode(vm_paddr_t pa); -extern void (*pagezero)(void *); #ifdef SOCDEV_PA /*