Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3892832ybt; Tue, 23 Jun 2020 13:27:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxIMkRVelN/2en1H4LjAOlkJeeevfxeAITecjMfWt+Md2yMofhF6YPA6omvgnU9QxoUafyN X-Received: by 2002:a17:906:9387:: with SMTP id l7mr11884909ejx.274.1592944044729; Tue, 23 Jun 2020 13:27:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592944044; cv=none; d=google.com; s=arc-20160816; b=wur0SYu1SOUazthOIVLdrgkhosiQuqKr6NVh5h5LHvahAHqbTjqLCuEZMvlaURJqVh nG5aK42nyZddFr9hFDZBPBC6I+bMX2QEly3ND6ZfV6rkgdpEXnBj66A962FyF4Q0Cvhr JeEp9i8XLpkd5HZwRF27J0Aygvku1pqKBAJsqza43kplPTddEv6CU3EuTZaxcqMn2RHf UTzS5zdqr2aHwz2GIbl2E+ZF/TZTR9gqmn1MVcY52RwcVL0WM4cVF3pT1yy9bndkQ45X Nz21uoy46BP6gs6G0A4vHBX4lek/61tiMLWkrfqlDzJuVFa1FxRUSIag0TBHn1NhGuhJ z1Fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=nqLuJpwpk0A53PmvRN23yoDtfY4/X7aPFQklmjH025U=; b=wq0sY1UfLqubCTaHM+CwnUOEHW+CgT4oUmoUeQ6VxjiSZMyr0PE4PlPLqnShWS1tll 75yTDsPFFRwxB6P9XngPVMd98eekiAy5dfeDl0O3XQURmt98xQvfleDmIc8TVy+fFZGp vOiJ6iG9kXaYCpW9g6auUNDdSNJdGbXSiAVfJSlgXbRi7U4KdwiHRyQHvBoh1sT9PrFn 6lEs2SZF3j/GPGwyEWumushxus2m2TNsNP2LJXKlwFqFKqGj2MqsHX8MW88UlAHq+yfZ z/ydFyOIQRSTJAuFBnHRdKlyCi3zq2zMdI09fztQIC/pfsQT4Wgf6HMNJ7AslQhsKL6F quUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=casper.20170209 header.b=CbxaxDD6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id mf5si10960968ejb.186.2020.06.23.13.27.01; Tue, 23 Jun 2020 13:27:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@infradead.org header.s=casper.20170209 header.b=CbxaxDD6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390451AbgFWUYg (ORCPT + 99 others); Tue, 23 Jun 2020 16:24:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52892 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390440AbgFWUYc (ORCPT ); Tue, 23 Jun 2020 16:24:32 -0400 Received: from casper.infradead.org (unknown [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18381C061573; Tue, 23 Jun 2020 13:24:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=nqLuJpwpk0A53PmvRN23yoDtfY4/X7aPFQklmjH025U=; b=CbxaxDD6KGmoDKlE+iZHVS3Fdo WX5rKGhFi9UifHi3fhpVS0c3n5ae+3i2Al4d3lCr5Ji04Spo9FmrZxodYVQjX87tiDFWzQrx3PI3I NevvGJ2fT2SJF/sfTRCcx+V5LepSslMyZY/fBaQFFSFYMW3Ds6KLSk62JTmmgEstJ0GAnCI3YQrbA oQX43gmPUSuGcEWq5WZvkMcKClyAU3eITCvusiMPH0bQqyzC/rfkbAk4QryNwCs7993kYRBifyp+h 285p4O1IIgAuQYXB0wrjE+7+M6vZiHzcyqAKwuKVqqEbDx8FaeBrF3IgpcgClmRCjf8NvQOcf0R2V zRHPIfpg==; Received: from j217100.upc-j.chello.nl ([24.132.217.100] helo=worktop.programming.kicks-ass.net) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1jnpSe-0003Y5-I2; Tue, 23 Jun 2020 20:24:04 +0000 Received: by worktop.programming.kicks-ass.net (Postfix, from userid 1000) id 213A9983A87; Tue, 23 Jun 2020 22:24:04 +0200 (CEST) Date: Tue, 23 Jun 2020 22:24:04 +0200 From: Peter Zijlstra To: Marco Elver Cc: "Ahmed S. Darwish" , mingo@kernel.org, will@kernel.org, tglx@linutronix.de, x86@kernel.org, linux-kernel@vger.kernel.org, rostedt@goodmis.org, bigeasy@linutronix.de, davem@davemloft.net, sparclinux@vger.kernel.org, mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org, heiko.carstens@de.ibm.com, linux-s390@vger.kernel.org, linux@armlinux.org.uk Subject: Re: [PATCH v4 7/8] lockdep: Change hardirq{s_enabled,_context} to per-cpu variables Message-ID: <20200623202404.GE2483@worktop.programming.kicks-ass.net> References: <20200623083645.277342609@infradead.org> <20200623083721.512673481@infradead.org> <20200623150031.GA2986783@debian-buster-darwi.lab.linutronix.de> <20200623152450.GM4817@hirez.programming.kicks-ass.net> <20200623161320.GA2996373@debian-buster-darwi.lab.linutronix.de> <20200623163730.GA4800@hirez.programming.kicks-ass.net> <20200623175957.GA106514@elver.google.com> <20200623181232.GB4800@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200623181232.GB4800@hirez.programming.kicks-ass.net> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jun 23, 2020 at 08:12:32PM +0200, Peter Zijlstra wrote: > Fair enough; I'll rip it all up and boot a KCSAN kernel, see what if > anything happens. OK, so the below patch doesn't seem to have any nasty recursion issues here. The only 'problem' is that lockdep now sees report_lock can cause deadlocks. It is completely right about it too, but I don't suspect there's much we can do about it, it's pretty much the standard printk() with scheduler locks held report. --- diff --git a/kernel/kcsan/core.c b/kernel/kcsan/core.c index 15f67949d11e..732623c30359 100644 --- a/kernel/kcsan/core.c +++ b/kernel/kcsan/core.c @@ -397,8 +397,7 @@ kcsan_setup_watchpoint(const volatile void *ptr, size_t size, int type) } if (!kcsan_interrupt_watcher) - /* Use raw to avoid lockdep recursion via IRQ flags tracing. */ - raw_local_irq_save(irq_flags); + local_irq_save(irq_flags); watchpoint = insert_watchpoint((unsigned long)ptr, size, is_write); if (watchpoint == NULL) { @@ -539,7 +538,7 @@ kcsan_setup_watchpoint(const volatile void *ptr, size_t size, int type) kcsan_counter_dec(KCSAN_COUNTER_USED_WATCHPOINTS); out_unlock: if (!kcsan_interrupt_watcher) - raw_local_irq_restore(irq_flags); + local_irq_restore(irq_flags); out: user_access_restore(ua_flags); } diff --git a/kernel/kcsan/report.c b/kernel/kcsan/report.c index ac5f8345bae9..ef31c1d2dac3 100644 --- a/kernel/kcsan/report.c +++ b/kernel/kcsan/report.c @@ -605,14 +605,6 @@ void kcsan_report(const volatile void *ptr, size_t size, int access_type, if (WARN_ON(watchpoint_idx < 0 || watchpoint_idx >= ARRAY_SIZE(other_infos))) goto out; - /* - * With TRACE_IRQFLAGS, lockdep's IRQ trace state becomes corrupted if - * we do not turn off lockdep here; this could happen due to recursion - * into lockdep via KCSAN if we detect a race in utilities used by - * lockdep. - */ - lockdep_off(); - if (prepare_report(&flags, type, &ai, other_info)) { /* * Never report if value_change is FALSE, only if we it is @@ -628,7 +620,6 @@ void kcsan_report(const volatile void *ptr, size_t size, int access_type, release_report(&flags, other_info); } - lockdep_on(); out: kcsan_enable_current(); }