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 X-Spam-Level: X-Spam-Status: No, score=-6.6 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 062DAC388F2 for ; Thu, 22 Oct 2020 06:51:30 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 291C22415A for ; Thu, 22 Oct 2020 06:51:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XW8VcTgN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 291C22415A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 2C3E76B0068; Thu, 22 Oct 2020 02:51:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 274E26B006C; Thu, 22 Oct 2020 02:51:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 13DA46B006E; Thu, 22 Oct 2020 02:51:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0208.hostedemail.com [216.40.44.208]) by kanga.kvack.org (Postfix) with ESMTP id D52BB6B0068 for ; Thu, 22 Oct 2020 02:51:27 -0400 (EDT) Received: from smtpin18.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 61D95181AC9CB for ; Thu, 22 Oct 2020 06:51:27 +0000 (UTC) X-FDA: 77398640214.18.toys07_60173052724e Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin18.hostedemail.com (Postfix) with ESMTP id 3E46D10249193 for ; Thu, 22 Oct 2020 06:51:27 +0000 (UTC) X-HE-Tag: toys07_60173052724e X-Filterd-Recvd-Size: 8276 Received: from mail-ed1-f66.google.com (mail-ed1-f66.google.com [209.85.208.66]) by imf13.hostedemail.com (Postfix) with ESMTP for ; Thu, 22 Oct 2020 06:51:26 +0000 (UTC) Received: by mail-ed1-f66.google.com with SMTP id bc23so646065edb.5 for ; Wed, 21 Oct 2020 23:51:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=83WaSwSjuw+5p/FwjUSXyrPazCj9QLrPDjKBSL0j68I=; b=XW8VcTgNWSBX9ZRx6R0cOXlNGg07ZkU2zI/qkfhZD51+qIvk6yJMY/4ska7xYpkkPs oJUFlge2Pwuv4dmUGr2CwCWLrC2zD6AhVUx19LOsjrn/mrteyyoceldP7qXhlTSdwQk8 QXBXDqVsEEIsCA2jpmZDYl2osBA0hGlO1i6xT1S9Jvgz6AwCoKOgiRlsaxbXgMHH2CQX VKcJB5rugckficd1IZtz/E8S+1NOFAVo0NXtbQEhLGq8vaZphnsir+1nG1M6FonLbEX5 BV5XvDNizbyyuxbEDglljjC1vg1wPvUsfhjJpSOW97XgfW8W18GpgWwEvwmmCyWKkQmN QtGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=83WaSwSjuw+5p/FwjUSXyrPazCj9QLrPDjKBSL0j68I=; b=UJMdChW6Vpc1HUx+sXPOBWs1m8LjAuXJaQcqvFx5DAFWqJxy94V+ARp/p76PKoVnQk HnT9Jpq7ZIX708PSu6hotMwWSaZXuaeLuhASWCeG1B7oDucAGF1arHFbYLA/7fwD5m7y LnI1s7xCu1pmCI7AdfTShjKU5X4Y5CykVdb2UHpcTmGL+23s90e6Jjxf1mFTLC4b2ve+ Cd6IvlCnZohPmESvISOAgOHPCu5JFhEZbwdiOHo/LFZHDyo9Skcac3NnaObzuUdhbAgw g4eS2Hcpe8Tvnlmsud5RcPqt5VncM4/6sDB7VeExjyzPov+9Yf1ueQCwQK8+OpMInpxm cv8g== X-Gm-Message-State: AOAM532Hpwv81rZmehkcHPGbKpAfq/o1q3qa9O2sEIwwpsv2Fjb+m/f7 SLPa1bRwfiT/164JsArMCqo= X-Google-Smtp-Source: ABdhPJwZBzBdphPetBP0IJSt6mlMSX0ojTkIOiLLlGN3oY0PLWU9ycw3CX8yZpK2pF16dZtCPBnLdw== X-Received: by 2002:a50:fe98:: with SMTP id d24mr905626edt.223.1603349485438; Wed, 21 Oct 2020 23:51:25 -0700 (PDT) Received: from auth2-smtp.messagingengine.com (auth2-smtp.messagingengine.com. [66.111.4.228]) by smtp.gmail.com with ESMTPSA id q9sm276282ejd.66.2020.10.21.23.51.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 23:51:24 -0700 (PDT) Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailauth.nyi.internal (Postfix) with ESMTP id 1D42E27C0054; Thu, 22 Oct 2020 02:51:22 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Thu, 22 Oct 2020 02:51:22 -0400 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrjeeigdduudduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvffukfhfgggtuggjsehttdertddttddvnecuhfhrohhmpeeuohhquhhn ucfhvghnghcuoegsohhquhhnrdhfvghnghesghhmrghilhdrtghomheqnecuggftrfgrth htvghrnhepieevheevhfelgeejleehheeghffgvdejfeduieevtddutddtteefiefhffel tddvnecuffhomhgrihhnpegvfhhfihgtihhoshdrtghomhenucfkphepudefuddruddtje drudegjedruddvieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhl fhhrohhmpegsohhquhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqdeile dvgeehtdeigedqudejjeekheehhedvqdgsohhquhhnrdhfvghngheppehgmhgrihhlrdgt ohhmsehfihigmhgvrdhnrghmvg X-ME-Proxy: Received: from localhost (unknown [131.107.147.126]) by mail.messagingengine.com (Postfix) with ESMTPA id F29A93064610; Thu, 22 Oct 2020 02:51:20 -0400 (EDT) Date: Thu, 22 Oct 2020 14:51:00 +0800 From: Boqun Feng To: Mathieu Desnoyers Cc: Peter Zijlstra , linux-kernel , Will Deacon , paulmck , Nicholas Piggin , Andy Lutomirski , Thomas Gleixner , Linus Torvalds , Alan Stern , linux-mm Subject: Re: [PATCH 1/3] sched: fix exit_mm vs membarrier (v4) Message-ID: <20201022065100.GA855403@boqun-archlinux> References: <20201020134715.13909-1-mathieu.desnoyers@efficios.com> <20201020134715.13909-2-mathieu.desnoyers@efficios.com> <20201020143648.GU2628@hirez.programming.kicks-ass.net> <1123875792.30589.1603205998119.JavaMail.zimbra@efficios.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1123875792.30589.1603205998119.JavaMail.zimbra@efficios.com> 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: Hi, On Tue, Oct 20, 2020 at 10:59:58AM -0400, Mathieu Desnoyers wrote: > ----- On Oct 20, 2020, at 10:36 AM, Peter Zijlstra peterz@infradead.org wrote: > > > On Tue, Oct 20, 2020 at 09:47:13AM -0400, Mathieu Desnoyers wrote: > >> +void membarrier_update_current_mm(struct mm_struct *next_mm) > >> +{ > >> + struct rq *rq = this_rq(); > >> + int membarrier_state = 0; > >> + > >> + if (next_mm) > >> + membarrier_state = atomic_read(&next_mm->membarrier_state); > >> + if (READ_ONCE(rq->membarrier_state) == membarrier_state) > >> + return; > >> + WRITE_ONCE(rq->membarrier_state, membarrier_state); > >> +} > > > > This is suspisioucly similar to membarrier_switch_mm(). > > > > Would something like so make sense? > > Very much yes. Do you want me to re-send the series, or you > want to fold this in as you merge it ? > > Thanks, > > Mathieu > > > > > --- > > --- a/kernel/sched/membarrier.c > > +++ b/kernel/sched/membarrier.c > > @@ -206,14 +206,7 @@ void membarrier_exec_mmap(struct mm_stru > > > > void membarrier_update_current_mm(struct mm_struct *next_mm) > > { > > - struct rq *rq = this_rq(); > > - int membarrier_state = 0; > > - > > - if (next_mm) > > - membarrier_state = atomic_read(&next_mm->membarrier_state); > > - if (READ_ONCE(rq->membarrier_state) == membarrier_state) > > - return; > > - WRITE_ONCE(rq->membarrier_state, membarrier_state); > > + membarrier_switch_mm(this_rq(), NULL, next_mm); > > } > > > > static int membarrier_global_expedited(void) > > diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h > > index d2621155393c..3d589c2ffd28 100644 > > --- a/kernel/sched/sched.h > > +++ b/kernel/sched/sched.h > > @@ -2645,12 +2645,14 @@ static inline void membarrier_switch_mm(struct rq *rq, > > struct mm_struct *prev_mm, > > struct mm_struct *next_mm) > > { > > - int membarrier_state; > > + int membarrier_state = 0; > > > > if (prev_mm == next_mm) Unless I'm missing something subtle, in exit_mm(), membarrier_update_current_mm() is called with @next_mm == NULL, and inside membarrier_update_current_mm(), membarrier_switch_mm() is called wiht @prev_mm == NULL. As a result, the branch above is taken, so membarrier_update_current_mm() becomes a nop. I think we should use the previous value of current->mm as the @prev_mm, something like below maybe? void update_current_mm(struct mm_struct *next_mm) { struct mm_struct *prev_mm; unsigned long flags; local_irq_save(flags); prev_mm = current->mm; current->mm = next_mm; membarrier_switch_mm(this_rq(), prev_mm, next_mm); local_irq_restore(flags); } , and replace all settings for "current->mm" in kernel with update_current_mm(). Thoughts? Regards, Boqun > > return; > > > > - membarrier_state = atomic_read(&next_mm->membarrier_state); > > + if (next_mm) > > + membarrier_state = atomic_read(&next_mm->membarrier_state); > > + > > if (READ_ONCE(rq->membarrier_state) == membarrier_state) > > return; > > -- > Mathieu Desnoyers > EfficiOS Inc. > http://www.efficios.com