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 7B9BEC433EF for ; Sun, 19 Jun 2022 23:38:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7B9536B0072; Sun, 19 Jun 2022 19:38:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 768EE6B0073; Sun, 19 Jun 2022 19:38:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 631FA6B0074; Sun, 19 Jun 2022 19:38:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 501756B0072 for ; Sun, 19 Jun 2022 19:38:20 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay12.hostedemail.com (Postfix) with ESMTP id 1FB4E120119 for ; Sun, 19 Jun 2022 23:38:20 +0000 (UTC) X-FDA: 79596601560.14.C445E4A Received: from mail-lj1-f173.google.com (mail-lj1-f173.google.com [209.85.208.173]) by imf19.hostedemail.com (Postfix) with ESMTP id B2C061A0002 for ; Sun, 19 Jun 2022 23:38:19 +0000 (UTC) Received: by mail-lj1-f173.google.com with SMTP id j22so3509675ljg.0 for ; Sun, 19 Jun 2022 16:38:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shutemov-name.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=5wbxuLf0qXQzSxMY2PUkol4aa/X/GJBgeigo9VpDstk=; b=V6VYfk+wZY/WdtyFDvQGT+uCsNvT25Ac7QoIU62efffylc24tJrjFQWL/7KlTFeKtM VvWs2+c6CVUiq6V6zvNtNRJQ+WXY7ltdlNe7gAspvm62mG+RZVOwSxgL1bg7H23MkRcE NrVjkBGoVC4LeGBgLKeDuRnN8NLXFr0lcLKtHm/KiFBhtew0/IXJXz2AVJr7zAUl1vHU Q60UUj+4lZz6oMlDq/+es8PUXhh0TqCY0gF+ud/ZL8o++HjIrL9A97TEmc+aaWZnr/ng 5wdS4DoqGBUyqASoMw5FgWpSV80xp4mMRZsTVxOpzCXaReYkm0BFfwfEF2kSycXMTAP0 LwKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=5wbxuLf0qXQzSxMY2PUkol4aa/X/GJBgeigo9VpDstk=; b=NitfDbktxOQ8CoDb/oBjVpDBDoT88xVhHusCJGe1fAuG7DIZ6fccD73fB/e5gOXT4z JHmAqa9Ny1EqBCdcNFbMtY8tZ7/7VjwZ6RmXKCdB8d8driQtfF6ZHWpWwpBfKxMe10cN BI/Jn31sG750WLkYiH1D4w/6h9wNwPdeeSYdcGYqFtldCIzrYvi22Z5q7JqeV8lD4ckW jh9wxgV0I5BHr1mDxByFBlwFynfXUlIBNITl4CGOUKEuUv58+gP791kAWDpIhZNhohq2 qA8eepAlMYCWWNyweR176oQRofxlikh+tfz7sTbcsqE/Oy0XfXKEy5+GbO5cO+6eeswF EUvw== X-Gm-Message-State: AJIora/pVZJzUM7vmlLLGaPlZbKQ0mHBGMngxKjB86kcjPCgQUxYHpdw B3m4Kij7inAmEv6vPXOAWw7hKA== X-Google-Smtp-Source: AGRyM1vFaOZ4Zgxq+10xBD3dM5r/wv1lezKMOYgUJVmLzU+ORJIC9B7O/RcxcdgF/Zn/FWwFO6oYXg== X-Received: by 2002:a2e:a807:0:b0:25a:673b:5ae8 with SMTP id l7-20020a2ea807000000b0025a673b5ae8mr3263062ljq.68.1655681897980; Sun, 19 Jun 2022 16:38:17 -0700 (PDT) Received: from box.localdomain ([86.57.175.117]) by smtp.gmail.com with ESMTPSA id m3-20020a05651202e300b0047f647414eesm624555lfq.229.2022.06.19.16.38.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jun 2022 16:38:16 -0700 (PDT) Received: by box.localdomain (Postfix, from userid 1000) id CA5F61036C1; Mon, 20 Jun 2022 02:40:27 +0300 (+03) Date: Mon, 20 Jun 2022 02:40:27 +0300 From: "Kirill A. Shutemov" To: "Kirill A. Shutemov" Cc: Michal Hocko , Dave Hansen , Andy Lutomirski , Peter Zijlstra , x86@kernel.org, Kostya Serebryany , Andrey Ryabinin , Andrey Konovalov , Alexander Potapenko , Dmitry Vyukov , "H . J . Lu" , Andi Kleen , Rick Edgecombe , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCHv3 6/8] x86/mm: Provide ARCH_GET_UNTAG_MASK and ARCH_ENABLE_TAGGED_ADDR Message-ID: <20220619234027.4irpbqxcygauvrso@box.shutemov.name> References: <20220610143527.22974-1-kirill.shutemov@linux.intel.com> <20220610143527.22974-7-kirill.shutemov@linux.intel.com> <20220616170510.gpm5pjd4yzk7hfsx@black.fi.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220616170510.gpm5pjd4yzk7hfsx@black.fi.intel.com> ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=shutemov-name.20210112.gappssmtp.com header.s=20210112 header.b=V6VYfk+w; dmarc=none; spf=none (imf19.hostedemail.com: domain of kirill@shutemov.name has no SPF policy when checking 209.85.208.173) smtp.mailfrom=kirill@shutemov.name ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655681899; 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=5wbxuLf0qXQzSxMY2PUkol4aa/X/GJBgeigo9VpDstk=; b=vja8oiPg9+CExX3Irp9wXWcNbap2qC1xW6Weja+VKh5K+spYi5iMdbRLhpmEX1cpiAgrnw ZWgT3Dp6vFZWaWY1PMenCnoJdjqRcBustP1hf4h/Ltv9+4mXDO+TXLQAXPG6i8G3iqSA2L N9EuyvRQAa/yxfY6AaelOjdtQsBrgj0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1655681899; a=rsa-sha256; cv=none; b=4dUnX54IuWSlNZSsRFhVhf3+rOTX0N2AukR9lZz1to6b1x8mbVUQtkl4+9WlV4dLXQQpbx qIQ02rWrp3fzjUzW23lU4cP2QoLDFPReutsr4TmGclN2kScsOhKT3EVWr5jlCQ1KeVgoyd 2NU+60dws4AFGLzhA4q5gt1c0qGLdTY= X-Rspamd-Queue-Id: B2C061A0002 Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=shutemov-name.20210112.gappssmtp.com header.s=20210112 header.b=V6VYfk+w; dmarc=none; spf=none (imf19.hostedemail.com: domain of kirill@shutemov.name has no SPF policy when checking 209.85.208.173) smtp.mailfrom=kirill@shutemov.name X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: 674rhsx6hiz4wruqk4nkyygme4kzjge3 X-HE-Tag: 1655681899-356970 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 Thu, Jun 16, 2022 at 08:05:10PM +0300, Kirill A. Shutemov wrote: > On Mon, Jun 13, 2022 at 04:42:57PM +0200, Michal Hocko wrote: > > On Fri 10-06-22 17:35:25, Kirill A. Shutemov wrote: > > [...] > > > diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c > > > index 1962008fe743..93c8eba1a66d 100644 > > > --- a/arch/x86/kernel/process_64.c > > > +++ b/arch/x86/kernel/process_64.c > > > @@ -742,6 +742,32 @@ static long prctl_map_vdso(const struct vdso_image *image, unsigned long addr) > > > } > > > #endif > > > > > > +static int prctl_enable_tagged_addr(unsigned long nr_bits) > > > +{ > > > + struct mm_struct *mm = current->mm; > > > + > > > + /* Already enabled? */ > > > + if (mm->context.lam_cr3_mask) > > > + return -EBUSY; > > > + > > > + /* LAM has to be enabled before spawning threads */ > > > + if (get_nr_threads(current) > 1) > > > + return -EBUSY; > > > > This will not be sufficient in general. You can have mm shared with a > > process without CLONE_THREAD. So you would also need to check also > > MMF_MULTIPROCESS. But I do remember that general get_nr_threads is quite > > tricky to use properly. Make sure to CC Oleg Nesterov for more details. > > > > Also how does this work when the mm is shared with a kernel thread? > > It seems we need to check mm_count to exclude kernel threads that use the > mm. But I expect it to produce bunch of false-positives. > > Or we can make all CPUs to do > > switch_mm(current->mm, current->mm, current); > > and get LAM bits updated regardless what mm it runs. It would also remove > limitation that LAM can only be enabled when there's no threads. > > But I feel that is a bad idea, but I have no clue why. :P Below is what I meant. Maybe it's not that bad. I donno. Any opinions? diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 56822d313b96..69e6b11efa62 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -752,6 +752,16 @@ static bool lam_u48_allowed(void) return find_vma(mm, DEFAULT_MAP_WINDOW) == NULL; } +static void enable_lam_func(void *mm) +{ + struct mm_struct *loaded_mm = this_cpu_read(cpu_tlbstate.loaded_mm); + + if (loaded_mm != mm) + return; + + switch_mm(loaded_mm, loaded_mm, current); +} + static int prctl_enable_tagged_addr(unsigned long nr_bits) { struct mm_struct *mm = current->mm; @@ -760,10 +770,6 @@ static int prctl_enable_tagged_addr(unsigned long nr_bits) if (mm->context.lam_cr3_mask) return -EBUSY; - /* LAM has to be enabled before spawning threads */ - if (get_nr_threads(current) > 1) - return -EBUSY; - if (!nr_bits) { return -EINVAL; } else if (nr_bits <= 6) { @@ -785,8 +791,8 @@ static int prctl_enable_tagged_addr(unsigned long nr_bits) return -EINVAL; } - /* Update CR3 to get LAM active */ - switch_mm(current->mm, current->mm, current); + on_each_cpu_mask(mm_cpumask(mm), enable_lam_func, mm, true); + return 0; } -- Kirill A. Shutemov