From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62090C433F5 for ; Fri, 30 Sep 2022 14:48:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 766EB6B0073; Fri, 30 Sep 2022 10:48:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6EFE76B0074; Fri, 30 Sep 2022 10:48:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 51A4C6B0075; Fri, 30 Sep 2022 10:48:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 449076B0073 for ; Fri, 30 Sep 2022 10:48:20 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 1E80B8070A for ; Fri, 30 Sep 2022 14:48:20 +0000 (UTC) X-FDA: 79969032360.01.07AB99B Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by imf07.hostedemail.com (Postfix) with ESMTP id 7B6C04001C for ; Fri, 30 Sep 2022 14:48:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1664549299; x=1696085299; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=qB4U5bOa/1arVPrcJ4ihVr7sZCdAbDGWr0xrXE0IkLk=; b=im8FnUr7Pb6itv91wE7nRzUKFtb21R/vWF93KTFAydUcGXT0s9DTd65v l8sCwSriguhLfmnP/tJ4vtCi9t599H6pnZmmp/ijcrp3q77LZ+A3Cw+cX 3Np1fQfFYDWrghR7E28o8tmQ4ewUtk9v/X+TXPWmcA3eVRvG7KeRmNhjA i700iXqLL80IHI7kE87JfyY5zxUNtXCkbQc2j+7UQw0wRN/5tO/euJA3c yvIRfZG4r+jVUBNrtcFHf7q7qU5p0MeI9X86KACCEax788CCeI/Pn12E4 /k4AZjm8ee6OMtynzhynDSfoHG53Yq5I4V4lBlkXy43Rp13p1sOdp2N5R A==; X-IronPort-AV: E=McAfee;i="6500,9779,10486"; a="281918560" X-IronPort-AV: E=Sophos;i="5.93,358,1654585200"; d="scan'208";a="281918560" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Sep 2022 07:48:09 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10486"; a="653563730" X-IronPort-AV: E=Sophos;i="5.93,358,1654585200"; d="scan'208";a="653563730" Received: from herrerop-mobl1.ger.corp.intel.com (HELO box.shutemov.name) ([10.252.38.128]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Sep 2022 07:48:04 -0700 Received: by box.shutemov.name (Postfix, from userid 1000) id 2B89D104BD6; Fri, 30 Sep 2022 17:48:02 +0300 (+03) From: "Kirill A. Shutemov" To: Dave Hansen , Andy Lutomirski , Peter Zijlstra Cc: x86@kernel.org, Kostya Serebryany , Andrey Ryabinin , Andrey Konovalov , Alexander Potapenko , Taras Madan , Dmitry Vyukov , "H . J . Lu" , Andi Kleen , Rick Edgecombe , Bharata B Rao , Jacob Pan , Ashok Raj , linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: [PATCHv9 00/14] Linear Address Masking enabling Date: Fri, 30 Sep 2022 17:47:44 +0300 Message-Id: <20220930144758.30232-1-kirill.shutemov@linux.intel.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1664549299; a=rsa-sha256; cv=none; b=nXvjwP3xf7K0b0E2o2bxKE1L7AnHoVJCjBg6s4gIDoTyq1hRKzVpPy02OW+EyAKWBCDy9F O6RngLdjsOnfAlpHcj1H/HPvvHfUyPvI5ahk6pVzYcpR+Uvgn1Ei0ZHwEDwxcTRJ5oITDp ZtUaR824vl2zoL/RhsAn0BhgxfeMRMw= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=im8FnUr7; dmarc=fail reason="No valid SPF" header.from=intel.com (policy=none); spf=none (imf07.hostedemail.com: domain of kirill.shutemov@linux.intel.com has no SPF policy when checking 192.55.52.136) smtp.mailfrom=kirill.shutemov@linux.intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1664549299; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=nW7zLAcy8dlZU8ShTq/KZNYPhjWiRVe2AWnMACASx0c=; b=z4oHzav+0vvOQDd1IpUUwnpZSayxIbIdQcv++Ie2pOf9fZs+aKpr0s/O9KG98Eu3+A3UUy wtpn6LgJKgTyA7r5Ok8LLnvhmQvwMvv91wHEfRD4qJF5mJ0NQL7aicPoR2tZsD48GoWrEl 6G/jzo7UVoZ1PAnWZ3GIIBZwwolGyJY= X-Stat-Signature: 6iyozcfnpcgrxoimz5e8p3owxqecsc7j X-Rspamd-Queue-Id: 7B6C04001C X-Rspamd-Server: rspam04 Authentication-Results: imf07.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=im8FnUr7; dmarc=fail reason="No valid SPF" header.from=intel.com (policy=none); spf=none (imf07.hostedemail.com: domain of kirill.shutemov@linux.intel.com has no SPF policy when checking 192.55.52.136) smtp.mailfrom=kirill.shutemov@linux.intel.com X-Rspam-User: X-HE-Tag: 1664549299-809415 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Linear Address Masking[1] (LAM) modifies the checking that is applied to 64-bit linear addresses, allowing software to use of the untranslated address bits for metadata. The capability can be used for efficient address sanitizers (ASAN) implementation and for optimizations in virtual machines. The patchset brings support for LAM for userspace addresses. Only LAM_U57 at this time. Please review and consider applying. git://git.kernel.org/pub/scm/linux/kernel/git/kas/linux.git lam v9: - Fix race between LAM enabling and check that KVM memslot address doesn't have any tags; - Reduce untagged_addr() overhead until the first LAM user; - Clarify SVM vs. LAM semantics; - Use mmap_lock to serialize LAM enabling; v8: - Drop redundant smb_mb() in prctl_enable_tagged_addr(); - Cleanup code around build_cr3(); - Fix commit messages; - Selftests updates; - Acked/Reviewed/Tested-bys from Alexander and Peter; v7: - Drop redundant smb_mb() in prctl_enable_tagged_addr(); - Cleanup code around build_cr3(); - Fix commit message; - Fix indentation; v6: - Rebased onto v6.0-rc1 - LAM_U48 excluded from the patchet. Still available in the git tree; - add ARCH_GET_MAX_TAG_BITS; - Fix build without CONFIG_DEBUG_VM; - Update comments; - Reviewed/Tested-by from Alexander; v5: - Do not use switch_mm() in enable_lam_func() - Use mb()/READ_ONCE() pair on LAM enabling; - Add self-test by Weihong Zhang; - Add comments; v4: - Fix untagged_addr() for LAM_U48; - Remove no-threads restriction on LAM enabling; - Fix mm_struct access from /proc/$PID/arch_status - Fix LAM handling in initialize_tlbstate_and_flush() - Pack tlb_state better; - Comments and commit messages; v3: - Rebased onto v5.19-rc1 - Per-process enabling; - API overhaul (again); - Avoid branches and costly computations in the fast path; - LAM_U48 is in optional patch. v2: - Rebased onto v5.18-rc1 - New arch_prctl(2)-based API - Expose status of LAM (or other thread features) in /proc/$PID/arch_status [1] ISE, Chapter 10. https://cdrdv2.intel.com/v1/dl/getContent/671368 Kirill A. Shutemov (10): x86/mm: Fix CR3_ADDR_MASK x86: CPUID and CR3/CR4 flags for Linear Address Masking mm: Pass down mm_struct to untagged_addr() x86/mm: Handle LAM on context switch x86/uaccess: Provide untagged_addr() and remove tags before address check KVM: Serialize tagged address check against tagging enabling x86/mm: Provide arch_prctl() interface for LAM x86/mm: Reduce untagged_addr() overhead until the first LAM user x86: Expose untagging mask in /proc/$PID/arch_status x86/mm, iommu/sva: Make LAM and SVM mutually exclusive Weihong Zhang (4): selftests/x86/lam: Add malloc and tag-bits test cases for linear-address masking selftests/x86/lam: Add mmap and SYSCALL test cases for linear-address masking selftests/x86/lam: Add io_uring test cases for linear-address masking selftests/x86/lam: Add inherit test cases for linear-address masking arch/arm64/include/asm/memory.h | 4 +- arch/arm64/include/asm/signal.h | 2 +- arch/arm64/include/asm/uaccess.h | 4 +- arch/arm64/kernel/hw_breakpoint.c | 2 +- arch/arm64/kernel/traps.c | 4 +- arch/arm64/mm/fault.c | 10 +- arch/sparc/include/asm/pgtable_64.h | 2 +- arch/sparc/include/asm/uaccess_64.h | 2 + arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/mmu.h | 12 +- arch/x86/include/asm/mmu_context.h | 47 + arch/x86/include/asm/processor-flags.h | 4 +- arch/x86/include/asm/tlbflush.h | 35 + arch/x86/include/asm/uaccess.h | 46 +- arch/x86/include/uapi/asm/prctl.h | 5 + arch/x86/include/uapi/asm/processor-flags.h | 6 + arch/x86/kernel/Makefile | 2 + arch/x86/kernel/fpu/xstate.c | 47 - arch/x86/kernel/proc.c | 60 ++ arch/x86/kernel/process.c | 3 + arch/x86/kernel/process_64.c | 82 +- arch/x86/mm/tlb.c | 48 +- .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 2 +- drivers/gpu/drm/radeon/radeon_gem.c | 2 +- drivers/infiniband/hw/mlx4/mr.c | 2 +- drivers/iommu/iommu-sva-lib.c | 12 + drivers/media/common/videobuf2/frame_vector.c | 2 +- drivers/media/v4l2-core/videobuf-dma-contig.c | 2 +- .../staging/media/atomisp/pci/hmm/hmm_bo.c | 2 +- drivers/tee/tee_shm.c | 2 +- drivers/vfio/vfio_iommu_type1.c | 2 +- fs/proc/task_mmu.c | 2 +- include/linux/mm.h | 11 - include/linux/mmu_context.h | 4 + include/linux/uaccess.h | 15 + lib/strncpy_from_user.c | 2 +- lib/strnlen_user.c | 2 +- mm/gup.c | 6 +- mm/madvise.c | 2 +- mm/mempolicy.c | 6 +- mm/migrate.c | 2 +- mm/mincore.c | 2 +- mm/mlock.c | 4 +- mm/mmap.c | 2 +- mm/mprotect.c | 2 +- mm/mremap.c | 2 +- mm/msync.c | 2 +- tools/testing/selftests/x86/Makefile | 2 +- tools/testing/selftests/x86/lam.c | 916 ++++++++++++++++++ virt/kvm/kvm_main.c | 14 +- 51 files changed, 1331 insertions(+), 125 deletions(-) create mode 100644 arch/x86/kernel/proc.c create mode 100644 tools/testing/selftests/x86/lam.c -- 2.35.1