Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp1189015ybn; Wed, 2 Oct 2019 12:10:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqz5/wopim+AipnU0qGCDj/fc4DESwDst8MzpbEU0j9FIJhZB7ioMXtd+8vhWouyFmSYOYpp X-Received: by 2002:a50:8a21:: with SMTP id i30mr5428485edi.229.1570043420221; Wed, 02 Oct 2019 12:10:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570043420; cv=none; d=google.com; s=arc-20160816; b=pQKMztHpmtYTvXNP8IUTgbLbNyih9Jcu/JAerKvv0dtDXuVqkw6cxm0Y8X2bSWAir2 1TrgBUHirOsdlm6PLSuEvJ3asN70FpoS4HSAmMwfZPyN3G6PMMqWcPFu0uTIuRlqTMHB Cu2Ecb75+CeHD+CHs1xWL3RpS1n0czwowIjy3O1+C4ZWIkwG++2/FoNOC6k2PAmPxzEI +O5OAo1wvcXN5ctcg+mUIfKprrMChZKYElFt9RgGxdVpCGNogRDk3QuVGKiv/lzYkWGj CSJhFx0jOZvm/M6p0cnkd1BxNkXHM1ldn/CdY6qbd6tLQoWJyLjIsVFND3Riz9GPp0kQ 7IYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:subject:message-id:date:cc:to :from:mime-version:content-transfer-encoding:content-disposition; bh=muQlgqVMVofthAnBF8JcK/BGzMUNZypWXMixv2ICU5c=; b=QlhTo8hh23EIP8qZxWmQAoXwWXl2fFWP+sAADPMD7nGMOmPoTSLstgI7qpu8WtdGsg bCaNZsseWzQnveUO6Sby69CzP2Y0gxz9sTnJ7amN43UVhwWk5LQfiJSOPs4iiPyw11yr OpT4Ot9BRukAE5fUmB+MsrxXgQvIUpg7yDMZIqFHc8P7do0UKwSjMLBqCVr4Fr8Ywdol CfxUqTPcCMADPoe+bYv5EYiibtr5Kf3lIBUiskR7ML3sEfP6h/eJ7/VDuh2NWjFPpSC5 LbUY5w8n1qMqr2PcrDQZgzxclTG/HKw3ZR24Woj1RF+nAzZyDP5aKnP4qUoFJsTlrUZ5 4bug== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v26si6360eja.230.2019.10.02.12.09.55; Wed, 02 Oct 2019 12:10:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729533AbfJBTJI (ORCPT + 99 others); Wed, 2 Oct 2019 15:09:08 -0400 Received: from shadbolt.e.decadent.org.uk ([88.96.1.126]:36120 "EHLO shadbolt.e.decadent.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729382AbfJBTIW (ORCPT ); Wed, 2 Oct 2019 15:08:22 -0400 Received: from [192.168.4.242] (helo=deadeye) by shadbolt.decadent.org.uk with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1iFjyo-00035t-BQ; Wed, 02 Oct 2019 20:08:06 +0100 Received: from ben by deadeye with local (Exim 4.92.1) (envelope-from ) id 1iFjyn-0003br-NA; Wed, 02 Oct 2019 20:08:05 +0100 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 From: Ben Hutchings To: linux-kernel@vger.kernel.org, stable@vger.kernel.org CC: akpm@linux-foundation.org, Denis Kirjanov , "Alexander Shishkin" , "Vince Weaver" , namhyung@kernel.org, acme@kernel.org, "Jiri Olsa" , "Linus Torvalds" , "Thomas Gleixner" , "Arnaldo Carvalho de Melo" , "Stephane Eranian" , "Ingo Molnar" , mark.rutland@arm.com, "Peter Zijlstra" , "Yabin Cui" Date: Wed, 02 Oct 2019 20:06:51 +0100 Message-ID: X-Mailer: LinuxStableQueue (scripts by bwh) X-Patchwork-Hint: ignore Subject: [PATCH 3.16 25/87] perf/ring_buffer: Add ordering to rb->nest increment In-Reply-To: X-SA-Exim-Connect-IP: 192.168.4.242 X-SA-Exim-Mail-From: ben@decadent.org.uk X-SA-Exim-Scanned: No (on shadbolt.decadent.org.uk); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.16.75-rc1 review patch. If anyone has any objections, please let me know. ------------------ From: Peter Zijlstra commit 3f9fbe9bd86c534eba2faf5d840fd44c6049f50e upstream. Similar to how decrementing rb->next too early can cause data_head to (temporarily) be observed to go backward, so too can this happen when we increment too late. This barrier() ensures the rb->head load happens after the increment, both the one in the 'goto again' path, as the one from perf_output_get_handle() -- albeit very unlikely to matter for the latter. Suggested-by: Yabin Cui Signed-off-by: Peter Zijlstra (Intel) Cc: Alexander Shishkin Cc: Arnaldo Carvalho de Melo Cc: Jiri Olsa Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Stephane Eranian Cc: Thomas Gleixner Cc: Vince Weaver Cc: acme@kernel.org Cc: mark.rutland@arm.com Cc: namhyung@kernel.org Fixes: ef60777c9abd ("perf: Optimize the perf_output() path by removing IRQ-disables") Link: http://lkml.kernel.org/r/20190517115418.309516009@infradead.org Signed-off-by: Ingo Molnar Signed-off-by: Ben Hutchings --- kernel/events/ring_buffer.c | 9 +++++++++ 1 file changed, 9 insertions(+) --- a/kernel/events/ring_buffer.c +++ b/kernel/events/ring_buffer.c @@ -47,6 +47,15 @@ static void perf_output_put_handle(struc unsigned long head; again: + /* + * In order to avoid publishing a head value that goes backwards, + * we must ensure the load of @rb->head happens after we've + * incremented @rb->nest. + * + * Otherwise we can observe a @rb->head value before one published + * by an IRQ/NMI happening between the load and the increment. + */ + barrier(); head = local_read(&rb->head); /*