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 D1DA8C76196 for ; Mon, 3 Apr 2023 06:19:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3B2086B0072; Mon, 3 Apr 2023 02:19:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 361EF6B0074; Mon, 3 Apr 2023 02:19:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 22AE56B0075; Mon, 3 Apr 2023 02:19:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 158ED6B0072 for ; Mon, 3 Apr 2023 02:19:14 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id D59C6A040D for ; Mon, 3 Apr 2023 06:19:13 +0000 (UTC) X-FDA: 80639077386.02.C364BC8 Received: from mail-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.44]) by imf08.hostedemail.com (Postfix) with ESMTP id F37ED160017 for ; Mon, 3 Apr 2023 06:19:11 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=CqHxYRI1; spf=pass (imf08.hostedemail.com: domain of dvyukov@google.com designates 209.85.167.44 as permitted sender) smtp.mailfrom=dvyukov@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1680502752; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FtfYUGGzvOVDt8VC72QnbE6YtkKoeRK0CEDvg4zStaw=; b=Vnxt7BvD80ht0XmNd2uc4n3l3Fq0Tmjtv632PyOP6dVZfryK0Jz21IVfFlnD/Mf+HtPduI TZL3dZ8nH0XDjxlHgO9m7y915bOt2eC1zp2y7heKq0cBMe9bIvNeQdtgYs//Vvpi7zSUvD w+DfpcRnbiBOfGcsR7Egb+fpEXCrxTE= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=CqHxYRI1; spf=pass (imf08.hostedemail.com: domain of dvyukov@google.com designates 209.85.167.44 as permitted sender) smtp.mailfrom=dvyukov@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1680502752; a=rsa-sha256; cv=none; b=znt1soPTqXb1Y5NCxQ3jqIGAwQIGO8KGBNnPC/Lx4iyzcS7aq7rOidt9AZ6BqP52QCOAUx FETw3602ifJhDtuWgqMM1U54+ysIJhrUhgETC6E7TJSCyTTrQxq2PKRMzVMU4jZyrV1Gac /TdugsGC4JRtfZWIrpDEGMgcG8kalHI= Received: by mail-lf1-f44.google.com with SMTP id g17so36586540lfv.4 for ; Sun, 02 Apr 2023 23:19:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1680502750; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=FtfYUGGzvOVDt8VC72QnbE6YtkKoeRK0CEDvg4zStaw=; b=CqHxYRI10GUkHVGULUwc/sQqQ4jrT/AVO/sjSurrGVuqgV1zfTpcaxh2v7e201fGDn 1ykRIVjEMLd8RflamoNXiEwA9xACGxAHjLhY4145h+fbXZOySvBjLeZbN2XlfmapErFn BaE4p4fAbVl/6kIDpksd8HE+KtCYuAN4IC10TP1gv6TW/VG0WtY0zomfGa0gL4AYwMug 2UxCdApwx7MK4Z2gfb/sGzThlXEfAo6MvIDSpiQ67Mu4qNoXo1YtjBrZSJSccaIOB1hD ddl4Iyaal0/fVbCi4/XsNuGqdQ5WxLUBfvPGGZDd3ZDYFato8YxYQUJ/TBLtK9nuiPoO NIjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680502750; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=FtfYUGGzvOVDt8VC72QnbE6YtkKoeRK0CEDvg4zStaw=; b=o/T26KVjyLRnzDxaEzykcApLOF1AehdbGhrqGGLNmPfGl+SKmuCLl4dneyOZ59yg1I asO3Ov4AN7luvZ0fNcxr8XyyOA1YeYOK9U8bsnk5/wEx3Y4UjWmFqqERG9yGyS3hdO+b +t4DsznQ22tK3pwpgr66XkwvS6quCw5psDICUAnp+wEvh+vLQY6TFAeiX36ZOuTZ7ZvB 86N0GOYoC6IYG49n+d1xf5RRCaoq2UTReJ7Wt3EGmUYrfxoImUFBPQeqPkYHUct83sLS AGnnEn+RSHovv6Y3xvbceQPuyuamWqUbwvqYdsliV8wrYn0KHsHCUThM+TzrS4xBnmFP 4PNQ== X-Gm-Message-State: AAQBX9cZmyR7wGAAd5OkciBl9gdy0Rg+6SLREmtwseeaP364IEGuYqeS Jb+/UoqR5443crRcuAt6VAuPl7ib96MWDDSYOAPWiw== X-Google-Smtp-Source: AKy350YD/mmG5u8j8DaJxn3BqkvXFQ3SUbFqw8b35JcIR1GilpgWQtU1qnGQ+s8W6hEoX9eW1TRLSflsfK92lYJ/Ju0= X-Received: by 2002:a05:6512:15b:b0:4ea:fa77:e436 with SMTP id m27-20020a056512015b00b004eafa77e436mr10145433lfo.6.1680502749951; Sun, 02 Apr 2023 23:19:09 -0700 (PDT) MIME-Version: 1.0 References: <20230312112612.31869-1-kirill.shutemov@linux.intel.com> <20230312112612.31869-12-kirill.shutemov@linux.intel.com> In-Reply-To: <20230312112612.31869-12-kirill.shutemov@linux.intel.com> From: Dmitry Vyukov Date: Mon, 3 Apr 2023 08:18:57 +0200 Message-ID: Subject: Re: [PATCHv16 11/17] x86/mm/iommu/sva: Make LAM and SVA mutually exclusive To: "Kirill A. Shutemov" Cc: Dave Hansen , Andy Lutomirski , Peter Zijlstra , x86@kernel.org, Kostya Serebryany , Andrey Ryabinin , Andrey Konovalov , Alexander Potapenko , Taras Madan , "H . J . Lu" , Andi Kleen , Rick Edgecombe , Bharata B Rao , Jacob Pan , Ashok Raj , Linus Torvalds , linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: im9cyubsagbcfub5dmtc35wkhifbwtya X-Rspam-User: X-Rspamd-Queue-Id: F37ED160017 X-Rspamd-Server: rspam06 X-HE-Tag: 1680502751-465429 X-HE-Meta: U2FsdGVkX18Hj1UgAUpRf2sEYjAt/VaQhFApSzVLPimX0VsjpbjsndhlopI5W0GE2gFtwmG81nytG+VVLpilrtRv+DS5LuB9dRbeAEPKrTpf/R8/bLlmV69/5MDnbydFL8Z1BwjJeK2EM79GMkOnXMdIkhUIBwdacLA5NKxUapMtVUARVriGncXuvvc2rvT65kUZv7Q8gWHAj27kX7V2f3JfUwXxMDGK+oJqBZH7hiPxWOd30RIu4ipTkV2etJRlWOyQQrxdZ0O5gqbnhzd6oEWD7Xw+y50a7qChJ2XuITUHK9eEAyL1/Nd0lSeQJtUBqOg304ywO9p8mXsp9UaDNyVm95s7B8ztcT/Kd4Gt3mnHOOlv6Aic3Pj7Eh0XtKrX1WCpbSVm7fU4noh/Aup49JQ/0fLaUfT5Qeavtqd8f7c+iOAB/F8IKosp7P9d1sIKElns/U0blaeoo0rwW74qB9i+rUs8M98ekAwmxwAMkjeFu3aiK7AivBF8Y70TCF2PPDj/HZTW1sd063p8A84ApwJO+sj1LcHF65D3e2CuSObz7uZ84U7aRPFa92aHQUSa6Nwgn8hPeu5rBozrpjiwo+4MAt97+6WMCxdvp9JfcO39Ff1TlUytLUQO2YhAZIE05ZHazJ3JZ3RPgCt5Y8gjMGZGTVENg/BeKgnmX4haK/pvTs5xl+j7oPtgcaKmgIcWAYJvTL5fkJY9lTGfFqdPDUxB3CHkzEtNiugI0Gnh6XY9dR1ceH6u9ONi4hNHjRNrLtXDQ7XX+W3kWRT546rzb1hQWlBIC8Z9Ge61S4OA5D7s59+18ZOdwSKhcnkLYKJhD4fMqADiSerCWCaQYwFmtLVQRTmVohqBs5iYESBCUYVCykLH7BpocIUBB+tP/dD2iw79ADPvAig90WJOHnli0x/8VBl9T8Xj1Qj5xysY0xTAB2iKHKsJroy64NELSiLrVyPmiZ1f8I6BBewnFJD 31mgg4xD 4QNVQuvYbckA+ICdphu7Gw8mAImmy/q25jKENgWpIxDsubSsbYaS6orK1oWl4X9/9nkHfhv8qndnnQ3qBFKVxwE0W8kVUhJ2tuasmo2nGkfgOmT1uHVBNjDY7Sh9bzbwUmbSRk9Bq/qfJbxunyN0hB6CEMZia8OuZ7b/VdphrW7gn+N3DmoIcNrZ88wCXdzuIgCB3INZIHwNJomH0XWt7urhx2dze5RLNrwDw0JlYOLSaQiaZ4uB96UaLSUgdpyjcYNw5puPtmFzDXntGHfmU56a9LuoaVIqwNLwSnEMa3tm84tLh2rT9q/YTNUwWO6jHKHJNtgJc39821Qp4FeFB5IZiwbWnUsnEYToYQq+oejFiLdDqRCwzrKoTp1SrD7aEgE4MWKuM49LWJwwWFWvI1Z1fmQ== 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: On Sun, 12 Mar 2023 at 12:27, Kirill A. Shutemov wrote: > > IOMMU and SVA-capable devices know nothing about LAM and only expect > canonical addresses. An attempt to pass down tagged pointer will lead > to address translation failure. > > By default do not allow to enable both LAM and use SVA in the same > process. > > The new ARCH_FORCE_TAGGED_SVA arch_prctl() overrides the limitation. > By using the arch_prctl() userspace takes responsibility to never pass > tagged address to the device. > > Signed-off-by: Kirill A. Shutemov > Reviewed-by: Ashok Raj > Reviewed-by: Jacob Pan > Acked-by: Peter Zijlstra (Intel) > --- > arch/x86/include/asm/mmu.h | 2 ++ > arch/x86/include/asm/mmu_context.h | 6 ++++++ > arch/x86/include/uapi/asm/prctl.h | 1 + > arch/x86/kernel/process_64.c | 7 +++++++ > drivers/iommu/iommu-sva.c | 4 ++++ > include/linux/mmu_context.h | 7 +++++++ > 6 files changed, 27 insertions(+) > > diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h > index e80762e998ce..0da5c227f490 100644 > --- a/arch/x86/include/asm/mmu.h > +++ b/arch/x86/include/asm/mmu.h > @@ -14,6 +14,8 @@ > #define MM_CONTEXT_HAS_VSYSCALL 1 > /* Do not allow changing LAM mode */ > #define MM_CONTEXT_LOCK_LAM 2 > +/* Allow LAM and SVA coexisting */ > +#define MM_CONTEXT_FORCE_TAGGED_SVA 3 > > /* > * x86 has arch-specific MMU state beyond what lives in mm_struct. > diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h > index 06eaaf75d572..4c396e9a384f 100644 > --- a/arch/x86/include/asm/mmu_context.h > +++ b/arch/x86/include/asm/mmu_context.h > @@ -115,6 +115,12 @@ static inline void mm_reset_untag_mask(struct mm_struct *mm) > mm->context.untag_mask = -1UL; > } > > +#define arch_pgtable_dma_compat arch_pgtable_dma_compat > +static inline bool arch_pgtable_dma_compat(struct mm_struct *mm) > +{ > + return !mm_lam_cr3_mask(mm) || > + test_bit(MM_CONTEXT_FORCE_TAGGED_SVA, &mm->context.flags); > +} > #else > > static inline unsigned long mm_lam_cr3_mask(struct mm_struct *mm) > diff --git a/arch/x86/include/uapi/asm/prctl.h b/arch/x86/include/uapi/asm/prctl.h > index a31e27b95b19..eb290d89cb32 100644 > --- a/arch/x86/include/uapi/asm/prctl.h > +++ b/arch/x86/include/uapi/asm/prctl.h > @@ -23,5 +23,6 @@ > #define ARCH_GET_UNTAG_MASK 0x4001 > #define ARCH_ENABLE_TAGGED_ADDR 0x4002 > #define ARCH_GET_MAX_TAG_BITS 0x4003 > +#define ARCH_FORCE_TAGGED_SVA 0x4004 > > #endif /* _ASM_X86_PRCTL_H */ > diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c > index 88aae519c8f8..eda826a956df 100644 > --- a/arch/x86/kernel/process_64.c > +++ b/arch/x86/kernel/process_64.c > @@ -756,6 +756,10 @@ static int prctl_enable_tagged_addr(struct mm_struct *mm, unsigned long nr_bits) > if (current->mm != mm) > return -EINVAL; > > + if (mm_valid_pasid(mm) && > + !test_bit(MM_CONTEXT_FORCE_TAGGED_SVA, &mm->context.flags)) > + return -EINTR; > + > if (mmap_write_lock_killable(mm)) > return -EINTR; > > @@ -878,6 +882,9 @@ long do_arch_prctl_64(struct task_struct *task, int option, unsigned long arg2) > (unsigned long __user *)arg2); > case ARCH_ENABLE_TAGGED_ADDR: > return prctl_enable_tagged_addr(task->mm, arg2); > + case ARCH_FORCE_TAGGED_SVA: > + set_bit(MM_CONTEXT_FORCE_TAGGED_SVA, &task->mm->context.flags); Hi Kirill, ARCH_ENABLE_TAGGED_ADDR checks that task->mm == current->mm, shouldn't ARCH_FORCE_TAGGED_SVA check that as well? Also it looks like currently to enable both LAM and SVA. LAM enabling checks for SVA, but SVA doesn't and both are not mutually exclusive. > + return 0; > case ARCH_GET_MAX_TAG_BITS: > if (!cpu_feature_enabled(X86_FEATURE_LAM)) > return put_user(0, (unsigned long __user *)arg2); > diff --git a/drivers/iommu/iommu-sva.c b/drivers/iommu/iommu-sva.c > index 4ee2929f0d7a..dd76a1a09cf7 100644 > --- a/drivers/iommu/iommu-sva.c > +++ b/drivers/iommu/iommu-sva.c > @@ -2,6 +2,7 @@ > /* > * Helpers for IOMMU drivers implementing SVA > */ > +#include > #include > #include > #include > @@ -32,6 +33,9 @@ int iommu_sva_alloc_pasid(struct mm_struct *mm, ioasid_t min, ioasid_t max) > min == 0 || max < min) > return -EINVAL; > > + if (!arch_pgtable_dma_compat(mm)) > + return -EBUSY; > + > mutex_lock(&iommu_sva_lock); > /* Is a PASID already associated with this mm? */ > if (mm_valid_pasid(mm)) { > diff --git a/include/linux/mmu_context.h b/include/linux/mmu_context.h > index 14b9c1fa05c4..f2b7a3f04099 100644 > --- a/include/linux/mmu_context.h > +++ b/include/linux/mmu_context.h > @@ -35,4 +35,11 @@ static inline unsigned long mm_untag_mask(struct mm_struct *mm) > } > #endif > > +#ifndef arch_pgtable_dma_compat > +static inline bool arch_pgtable_dma_compat(struct mm_struct *mm) > +{ > + return true; > +} > +#endif > + > #endif > -- > 2.39.2 >