From nobody Wed Mar 15 20:47:05 2023 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 4PcMrp20Jcz3xmGC; Wed, 15 Mar 2023 20:47:06 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PcMrp1B0Rz3vgn; Wed, 15 Mar 2023 20:47:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1678913226; 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=/7l9xdjH1DyqYcZsbM9gTdOsFouuLf2O4ssd4Y+AXOc=; b=P7vhnb5cv5ZTlikpUxqgj7erFl8nRGpIoWgEooFpy+KgXongePLJk/TwCH4jin9HSBio0C w9CfCyap33kF1vpXuwC9AvelffmNfKFG3S0R516qqZY3Vu+xhhBLea4pBTjqncOsWAChOX kH3BGV3y5l9+aF00SDtO1A7leGbMqOmW2eP2/+hWQETEZYgKQ5AmssMC1WTpAIhLTfLTey SmfXh4BG5eZR4IDOw5JUG7drTzSAhhFgMcCEv9MB/lJ9H4gKBXr+1frnI06ZJi8bTpA3eB kRWhA3B7FmdP9vrQ3X/sMUE9x3IR8HXRv6NtbmIK5lLxXn3520f9reVFmQ5hcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1678913226; 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=/7l9xdjH1DyqYcZsbM9gTdOsFouuLf2O4ssd4Y+AXOc=; b=vSzrVeL2GNNG6H5WrU7fFRyy+l0itGRvS9w9t1xfyBt+NLfZR1R4zuB01F9xy+HNvmv+AD 0rIS1SeRq7oSxVc6wcb0Tgej1wFDDU5KkT7MIy64FYu8AHuf+GJOIr+hX5T5fipuUCiDwN CoAKlWwenoVM0FP3Q6leCSDgS9nS2bgoh4jYrZEf8qT4wOUSkyqMEs4sUJ1/90fDAbpPA5 DDWZNyUI2oiniK7oSKWaKSKZsE/U6XdMGRYOw/yMq5deKKiwUolj+KGSHRexuXJf8Gu+xG /eBGgEJjl4bDEcR/hLlTS5xCIJC723RsksCRKsRxsYkPM7es20qiuKW10mpe9g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1678913226; a=rsa-sha256; cv=none; b=BGdNM8D6vbATzFUMEvcCSSC3Z/OSZkae8hCVyAp/oSA90buaXvHdEuELvQH3C8Osng4s3p a49+n6tg38/+7f3FP1gqtea64KNDoapMytWfOrCXTNmQHFgUl1nrFmSDtvRVWggxDl0tKi clfSxDW2CuZltB0VWDxWnYp+FS24H5Qnuci7Ng/cM90qMrsC6Hu/dQBNz/kwgDYyxeSEVi KWDU9vMN8ECEs8ZbMrsxnp3C2tG5AOzP4LYKwGxB8dSr+QGOAvlBxgltM6zkZfgEruNc7/ ROZfTT+B/Rz8WrMA7mjkKBcmGd4qiqNyinzfIRnBWxu8/NnzWUfPlKsPe/ezVg== 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 4PcMrp00VHzGH7; Wed, 15 Mar 2023 20:47:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 32FKl5Xv051910; Wed, 15 Mar 2023 20:47:05 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 32FKl5PZ051909; Wed, 15 Mar 2023 20:47:05 GMT (envelope-from git) Date: Wed, 15 Mar 2023 20:47:05 GMT Message-Id: <202303152047.32FKl5PZ051909@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Justin Hibbits Subject: git: f2df50925ee9 - releng/13.2 - powerpc/pmap: Add pmap_sync_icache() for radix pmap 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: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/releng/13.2 X-Git-Reftype: branch X-Git-Commit: f2df50925ee95ba201e2006931f0c0fbedd8e1ca Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch releng/13.2 has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=f2df50925ee95ba201e2006931f0c0fbedd8e1ca commit f2df50925ee95ba201e2006931f0c0fbedd8e1ca Author: Justin Hibbits AuthorDate: 2023-03-12 15:46:57 +0000 Commit: Justin Hibbits CommitDate: 2023-03-15 20:31:40 +0000 powerpc/pmap: Add pmap_sync_icache() for radix pmap DTrace pid provider writes to user space to set breakpoints. Failing to sync the icache can lead to SIGTRAP. Radix pmap is the only one missing a pmap_sync_icache() method, so the pid provider would only potentially crash a process on a POWER9 or later system. Approved by: re (cperciva) (cherry picked from commit 6f0b2a235a133a381634ba9a7f5f477c64db9873) (cherry picked from commit ed2c3bda43fbd0bfad9e45c78a59fff8a62422da) --- sys/powerpc/aim/mmu_radix.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c index 34736d5031bd..9f59d524196f 100644 --- a/sys/powerpc/aim/mmu_radix.c +++ b/sys/powerpc/aim/mmu_radix.c @@ -464,6 +464,7 @@ void mmu_radix_remove(pmap_t, vm_offset_t, vm_offset_t); void mmu_radix_remove_all(vm_page_t); void mmu_radix_remove_pages(pmap_t); void mmu_radix_remove_write(vm_page_t); +void mmu_radix_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz); void mmu_radix_unwire(pmap_t, vm_offset_t, vm_offset_t); void mmu_radix_zero_page(vm_page_t); void mmu_radix_zero_page_area(vm_page_t, int, int); @@ -541,6 +542,7 @@ static struct pmap_funcs mmu_radix_methods = { .remove = mmu_radix_remove, .remove_all = mmu_radix_remove_all, .remove_write = mmu_radix_remove_write, + .sync_icache = mmu_radix_sync_icache, .unwire = mmu_radix_unwire, .zero_page = mmu_radix_zero_page, .zero_page_area = mmu_radix_zero_page_area, @@ -5912,6 +5914,25 @@ mmu_radix_unmapdev(vm_offset_t va, vm_size_t size) } } +void +mmu_radix_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz) +{ + vm_paddr_t pa = 0; + int sync_sz; + + while (sz > 0) { + pa = pmap_extract(pm, va); + sync_sz = PAGE_SIZE - (va & PAGE_MASK); + sync_sz = min(sync_sz, sz); + if (pa != 0) { + pa += (va & PAGE_MASK); + __syncicache((void *)PHYS_TO_DMAP(pa), sync_sz); + } + va += sync_sz; + sz -= sync_sz; + } +} + static __inline void pmap_pte_attr(pt_entry_t *pte, uint64_t cache_bits, uint64_t mask) {