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=-9.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 976A0C4363D for ; Fri, 25 Sep 2020 11:48:36 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 27C9D2083B for ; Fri, 25 Sep 2020 11:48:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hcV6z67z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27C9D2083B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=mMPKP7iAYFRx3KC7+YgPj7Modmc5s/KEgNe11PR+/uA=; b=hcV6z67zMuXXZhEbfqMteIRIf Er/xxURU2RKNn/drcl25DxhTPKwDpJPUHvNWXaJVcryRl/pDRbNnimWOf+RCmoZhre6Eu9AB0ngjn WomT9WHRK1kmwbOcvsyuN5vBYfGeEBomHpc1mK6XcfhF9w2TW6/gc4z0TwOH3RN1rIFgyzc8Cq5Gy nglSUDRWJTBFwASRe1KzTCPm3Cxxru866/rQQG3DYHLE7Iz2Hcaf2MSqLXglwHgXElLJs43t10y5g rG4S66amzeDu68LDVCkfNJ3Sdm3gt9eGKsek2OSIJdfT1RSFb5TDVYYvQfcQkjNIS2BKRycumuhyb gLc3hauHw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLmC0-00015Q-Ha; Fri, 25 Sep 2020 11:47:12 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLmBx-00014K-U3 for linux-arm-kernel@lists.infradead.org; Fri, 25 Sep 2020 11:47:10 +0000 Received: from gaia (unknown [31.124.44.166]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A4A792083B; Fri, 25 Sep 2020 11:47:06 +0000 (UTC) Date: Fri, 25 Sep 2020 12:47:04 +0100 From: Catalin Marinas To: Andrey Konovalov Subject: Re: [PATCH v3 26/39] arm64: mte: Add in-kernel tag fault handler Message-ID: <20200925114703.GI4846@gaia> References: <17ec8af55dc0a4d3ade679feb0858f0df4c80d27.1600987622.git.andreyknvl@google.com> <20200925104933.GD4846@gaia> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200925_074710_060287_2DCCD939 X-CRM114-Status: GOOD ( 24.87 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Linux ARM , Marco Elver , Elena Petrova , Kevin Brodsky , Will Deacon , Branislav Rankov , kasan-dev , LKML , Linux Memory Management List , Alexander Potapenko , Evgenii Stepanov , Andrey Ryabinin , Andrew Morton , Vincenzo Frascino , Dmitry Vyukov Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Sep 25, 2020 at 01:26:02PM +0200, Andrey Konovalov wrote: > On Fri, Sep 25, 2020 at 12:49 PM Catalin Marinas > wrote: > > > diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c > > > index a3bd189602df..d110f382dacf 100644 > > > --- a/arch/arm64/mm/fault.c > > > +++ b/arch/arm64/mm/fault.c > > > @@ -33,6 +33,7 @@ > > > #include > > > #include > > > #include > > > +#include > > > #include > > > #include > > > #include > > > @@ -294,6 +295,11 @@ static void die_kernel_fault(const char *msg, unsigned long addr, > > > do_exit(SIGKILL); > > > } > > > > > > +static void report_tag_fault(unsigned long addr, unsigned int esr, > > > + struct pt_regs *regs) > > > +{ > > > +} > > > > Do we need to introduce report_tag_fault() in this patch? It's fine but > > add a note in the commit log that it will be populated in a subsequent > > patch. > > I did, see the last line of the commit description. Sorry, I missed that. > > > + > > > static void __do_kernel_fault(unsigned long addr, unsigned int esr, > > > struct pt_regs *regs) > > > { > > > @@ -641,10 +647,40 @@ static int do_sea(unsigned long addr, unsigned int esr, struct pt_regs *regs) > > > return 0; > > > } > > > > > > +static void do_tag_recovery(unsigned long addr, unsigned int esr, > > > + struct pt_regs *regs) > > > +{ > > > + static bool reported = false; > > > + > > > + if (!READ_ONCE(reported)) { > > > + report_tag_fault(addr, esr, regs); > > > + WRITE_ONCE(reported, true); > > > + } > > > > I don't mind the READ_ONCE/WRITE_ONCE here but not sure what they help > > with. > > The fault can happen on multiple cores at the same time, right? In > that case without READ/WRITE_ONCE() we'll have a data-race here. READ/WRITE_ONCE won't magically solve such races. If two CPUs enter simultaneously in do_tag_recovery(), they'd both read 'reported' as false and both print the fault info. If you really care about this race, you need to atomically both read and update the variable with an xchg() or cmpxchg(). -- Catalin _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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=-8.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham 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 0FE39C4727D for ; Fri, 25 Sep 2020 11:47:12 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 97573221EB for ; Fri, 25 Sep 2020 11:47:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 97573221EB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id F1B9390000C; Fri, 25 Sep 2020 07:47:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id ECB458E0001; Fri, 25 Sep 2020 07:47:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DE19C90000C; Fri, 25 Sep 2020 07:47:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0234.hostedemail.com [216.40.44.234]) by kanga.kvack.org (Postfix) with ESMTP id C74C78E0001 for ; Fri, 25 Sep 2020 07:47:10 -0400 (EDT) Received: from smtpin05.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 8FD27180AD802 for ; Fri, 25 Sep 2020 11:47:10 +0000 (UTC) X-FDA: 77301407820.05.dad68_050879e27167 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin05.hostedemail.com (Postfix) with ESMTP id 65F7F18030097 for ; Fri, 25 Sep 2020 11:47:10 +0000 (UTC) X-HE-Tag: dad68_050879e27167 X-Filterd-Recvd-Size: 4140 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by imf15.hostedemail.com (Postfix) with ESMTP for ; Fri, 25 Sep 2020 11:47:09 +0000 (UTC) Received: from gaia (unknown [31.124.44.166]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A4A792083B; Fri, 25 Sep 2020 11:47:06 +0000 (UTC) Date: Fri, 25 Sep 2020 12:47:04 +0100 From: Catalin Marinas To: Andrey Konovalov Cc: Dmitry Vyukov , Vincenzo Frascino , kasan-dev , Andrey Ryabinin , Alexander Potapenko , Marco Elver , Evgenii Stepanov , Elena Petrova , Branislav Rankov , Kevin Brodsky , Will Deacon , Andrew Morton , Linux ARM , Linux Memory Management List , LKML Subject: Re: [PATCH v3 26/39] arm64: mte: Add in-kernel tag fault handler Message-ID: <20200925114703.GI4846@gaia> References: <17ec8af55dc0a4d3ade679feb0858f0df4c80d27.1600987622.git.andreyknvl@google.com> <20200925104933.GD4846@gaia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) 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 Fri, Sep 25, 2020 at 01:26:02PM +0200, Andrey Konovalov wrote: > On Fri, Sep 25, 2020 at 12:49 PM Catalin Marinas > wrote: > > > diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c > > > index a3bd189602df..d110f382dacf 100644 > > > --- a/arch/arm64/mm/fault.c > > > +++ b/arch/arm64/mm/fault.c > > > @@ -33,6 +33,7 @@ > > > #include > > > #include > > > #include > > > +#include > > > #include > > > #include > > > #include > > > @@ -294,6 +295,11 @@ static void die_kernel_fault(const char *msg, unsigned long addr, > > > do_exit(SIGKILL); > > > } > > > > > > +static void report_tag_fault(unsigned long addr, unsigned int esr, > > > + struct pt_regs *regs) > > > +{ > > > +} > > > > Do we need to introduce report_tag_fault() in this patch? It's fine but > > add a note in the commit log that it will be populated in a subsequent > > patch. > > I did, see the last line of the commit description. Sorry, I missed that. > > > + > > > static void __do_kernel_fault(unsigned long addr, unsigned int esr, > > > struct pt_regs *regs) > > > { > > > @@ -641,10 +647,40 @@ static int do_sea(unsigned long addr, unsigned int esr, struct pt_regs *regs) > > > return 0; > > > } > > > > > > +static void do_tag_recovery(unsigned long addr, unsigned int esr, > > > + struct pt_regs *regs) > > > +{ > > > + static bool reported = false; > > > + > > > + if (!READ_ONCE(reported)) { > > > + report_tag_fault(addr, esr, regs); > > > + WRITE_ONCE(reported, true); > > > + } > > > > I don't mind the READ_ONCE/WRITE_ONCE here but not sure what they help > > with. > > The fault can happen on multiple cores at the same time, right? In > that case without READ/WRITE_ONCE() we'll have a data-race here. READ/WRITE_ONCE won't magically solve such races. If two CPUs enter simultaneously in do_tag_recovery(), they'd both read 'reported' as false and both print the fault info. If you really care about this race, you need to atomically both read and update the variable with an xchg() or cmpxchg(). -- Catalin