From nobody Tue Feb 10 15:43:33 2026 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 4f9Qnx6bZmz6RW6y for ; Tue, 10 Feb 2026 15:43:33 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4f9Qnx2wqcz3LrY for ; Tue, 10 Feb 2026 15:43:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770738213; 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=dXHljT7EPcDV/gf0Gt9WEuaFvBZgGZg/+9XNEFwpr28=; b=h0QVUAYLbCacYBAsjnrZyShS86TheavHe6nJ18/3ak9Z3gnS0Z2mWAAIVZOq5SaX+uzsHm L/evuUWlpVL9/5bpYrhftqB0gFWTV51qy9//1D45x9kzHL9dpWcFCSSdII7ufkzpMVdknZ A8nPHkODLytf6nDRNir6pe6htRTgjkEIPnCxCVlwlOgLgJixw9wAdMkTlJ1S2XX7frZoVt aDNR9PXo9dbmRF/2UV4RcxwTfpA9R1cSYp4+gTfRPfmD3E339vEJpvn/ZxZFk5qggJAgaE J7Nu+YwJ50DBXq2jLWj5oLlVPQvfVA/7YQBaJhzo/xVwhoD8AeIFsMZhle/Mmw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1770738213; a=rsa-sha256; cv=none; b=psz7tVV9O8hvc+5/Zp62Mvhj2LeFzyb4KnlE/C+Y019OBSknvQvhSFIF1W7GpMk0y2IZ5b eG+aMfJuUIVt/PQDxZ5BEzzAtf6xATc3pnbm3w3wBjBj/okBfZMrZEcbKLuR1e2Hh4gdO0 3ySMbi3sTP4PLeUlWibhCBJTWFNQsmJ+1dxv6zklGC/k+cN3dQVtzYdFpJU8ysLmguihVb gy3W1ucXzw3dVg21ocWqOaZJpJPo0N1vCCE86RX1WneH7CyX4Ue6BIheMmnKPkgW8Ij+to JFoMnYf/o4W78MOVi/ejUj+W8hvexNPtq4cKRE1rNrmKEfSNabXmP9IA9ogEwg== 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=1770738213; 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=dXHljT7EPcDV/gf0Gt9WEuaFvBZgGZg/+9XNEFwpr28=; b=FJRPtJvPBmXFNBrwBAr2tS37Wev3NHeVbm5zLJWjq/UQ7ulKiwy1BcihMBpHRuEYZ9Y/Hp VX/EKgqXqUsO/+N3DGvlyxXejHFjeSChZnapxR7UsVK9XL07am20RnnHNuCx2CaR58YlGk B8ZCpFGZcC3BoRBFLDLRHfiDseh1XpTpe1Dlua45EsWs5foyEk/iDjPbXW62jYkFeW4S2c DlMadMYOLPPskIdcR85UU9fSYOrEEXddjtwgyDrXWmB01s/9k22L6N+O1p8I5hvcCqx5ce VhduW3Vdbt6EE6MqufMnU6y47Syz7vHHeR8/TEbzkxQwR83LXpLp4hLyO2acCA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4f9Qnx2JZbz1NTS for ; Tue, 10 Feb 2026 15:43:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46b58 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 10 Feb 2026 15:43:33 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Sarah Walker From: Andrew Turner Subject: git: 7d7295df9b13 - main - arm64: Add MOPS implementation of pagezero() 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: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7d7295df9b13b98ac395b206667e7586c602862b Auto-Submitted: auto-generated Date: Tue, 10 Feb 2026 15:43:33 +0000 Message-Id: <698b5225.46b58.1276b6c3@gitrepo.freebsd.org> The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=7d7295df9b13b98ac395b206667e7586c602862b commit 7d7295df9b13b98ac395b206667e7586c602862b Author: Sarah Walker AuthorDate: 2026-01-29 17:43:45 +0000 Commit: Andrew Turner CommitDate: 2026-02-10 15:39:56 +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 --- 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 /*