Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp513430yba; Mon, 1 Apr 2019 10:48:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqxOUzOUcBEAEvA2SE3U1nimq6jtwAF/DnBjKQBZO4v/N0DnFUAtqjPkz/tBRsdNrGQd0upW X-Received: by 2002:a63:7154:: with SMTP id b20mr54667163pgn.359.1554140922250; Mon, 01 Apr 2019 10:48:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554140922; cv=none; d=google.com; s=arc-20160816; b=HH7ix4LQoBKQN9MlPQzj9pFIWztLpRO1eDblfWc457NmZQS8YszQiCOMV8IvKW7Pem 4dtT9FH/y6yFS0DNlTKJlvr3RtNq1CkWkRvYwVAWz0wVyY9pNbyfReSpXRAcckso46Sv 5SgZ75D5rN3ZFa4m47IJeNf68obGWb6Jooy8RMCbdYrBiVbe6Z7Pp9wwaKCAqCMB6Z4F G+FSwqEq+EXzeyP2CYojB+EGZEmOy9Blv9GvfCtfCPMKUglqFx8ToWHk8acJO36BbybK nDKrmeUgRAbMYHusiPgc7MwDMP6DLRiXIZsgHZSL18RThj79vVtoWQrKmH8zddJE52LQ hQ6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=4z0z3O65PPoyoI32hYtQcHe4JWd4bLq4+xQOMeAJRm4=; b=t2nTcf5wBgUsfbIDiaAyz+Db+JDjTORklwOXnWf/sLwQdeQdeLD0ViU1oX5H8gGLG+ 2OrxCFmqEoDF2/O/zm1V6jpfoRSd3YaVQhOVbof/Cw03J2sCH562OiDi1SZraBbYB+yv TqH6mcAIXCoVeoj1Pl72GF+QNEBmmJQgUdr/0FvEZPqdTMPNF2eXb0zx7TvIEzFB8eZ3 umacMOLVjYF2fsVsQ9Fqu0aPp9NxJZD1cyEtPeHEbmgzp18LqberkPIPE+LrzgQzDTYm wCahs865VXCSflJi6IyUa53EFqDmaAfg2Ge5Pl5Ppj/twc1Fm+h75svZQDxmU5YJxioE GNVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2KrujjA7; 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 w1si4668944ply.420.2019.04.01.10.48.26; Mon, 01 Apr 2019 10:48:42 -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; dkim=pass header.i=@kernel.org header.s=default header.b=2KrujjA7; 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 S2387398AbfDARbw (ORCPT + 99 others); Mon, 1 Apr 2019 13:31:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:39462 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733298AbfDARbs (ORCPT ); Mon, 1 Apr 2019 13:31:48 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 470772171F; Mon, 1 Apr 2019 17:31:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554139906; bh=OF4dM8P3MVzxC/xfOACHe4gewX+htnhSCLrfdsPUH0Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2KrujjA7DfybqBHdeBAd1zd3tQNgjdAYHt3h3a8iouyBjl146T8BbJJdFYcGoMwr3 kDTZ+iE2tFhrLjHp1HokdVS7lBGCLQy3AqtUcGVUyMs9lkSbwUYWzVkIH1VvtF2Ibg Yj/gQgSgVRheRxwiB9sPIdH2mJdciqSrD9ubw+Mc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Markus Metzger , Alexander Shishkin , "Peter Zijlstra (Intel)" , Arnaldo Carvalho de Melo , Arnaldo Carvalho de Melo , David Ahern , Jiri Olsa , Linus Torvalds , Namhyung Kim , Stephane Eranian , Thomas Gleixner , Vince Weaver , vince@deater.net, Ingo Molnar , Sasha Levin Subject: [PATCH 4.4 050/131] perf: Synchronously free aux pages in case of allocation failure Date: Mon, 1 Apr 2019 19:02:00 +0200 Message-Id: <20190401170056.493312319@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190401170051.645954551@linuxfoundation.org> References: <20190401170051.645954551@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 45c815f06b80031659c63d7b93e580015d6024dd ] We are currently using asynchronous deallocation in the error path in AUX mmap code, which is unnecessary and also presents a problem for users that wish to probe for the biggest possible buffer size they can get: they'll get -EINVAL on all subsequent attemts to allocate a smaller buffer before the asynchronous deallocation callback frees up the pages from the previous unsuccessful attempt. Currently, gdb does that for allocating AUX buffers for Intel PT traces. More specifically, overwrite mode of AUX pmus that don't support hardware sg (some implementations of Intel PT, for instance) is limited to only one contiguous high order allocation for its buffer and there is no way of knowing its size without trying. This patch changes error path freeing to be synchronous as there won't be any contenders for the AUX pages at that point. Reported-by: Markus Metzger Signed-off-by: Alexander Shishkin Signed-off-by: Peter Zijlstra (Intel) Cc: Arnaldo Carvalho de Melo Cc: Arnaldo Carvalho de Melo Cc: David Ahern Cc: Jiri Olsa Cc: Linus Torvalds Cc: Namhyung Kim Cc: Peter Zijlstra Cc: Stephane Eranian Cc: Thomas Gleixner Cc: Vince Weaver Cc: vince@deater.net Link: http://lkml.kernel.org/r/1453216469-9509-1-git-send-email-alexander.shishkin@linux.intel.com Signed-off-by: Ingo Molnar Signed-off-by: Sasha Levin --- kernel/events/ring_buffer.c | 40 ++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c index 358bb53c1e74..94dc6b0763ab 100644 --- a/kernel/events/ring_buffer.c +++ b/kernel/events/ring_buffer.c @@ -468,6 +468,25 @@ static void rb_free_aux_page(struct ring_buffer *rb, int idx) __free_page(page); } +static void __rb_free_aux(struct ring_buffer *rb) +{ + int pg; + + if (rb->aux_priv) { + rb->free_aux(rb->aux_priv); + rb->free_aux = NULL; + rb->aux_priv = NULL; + } + + if (rb->aux_nr_pages) { + for (pg = 0; pg < rb->aux_nr_pages; pg++) + rb_free_aux_page(rb, pg); + + kfree(rb->aux_pages); + rb->aux_nr_pages = 0; + } +} + int rb_alloc_aux(struct ring_buffer *rb, struct perf_event *event, pgoff_t pgoff, int nr_pages, long watermark, int flags) { @@ -556,30 +575,11 @@ int rb_alloc_aux(struct ring_buffer *rb, struct perf_event *event, if (!ret) rb->aux_pgoff = pgoff; else - rb_free_aux(rb); + __rb_free_aux(rb); return ret; } -static void __rb_free_aux(struct ring_buffer *rb) -{ - int pg; - - if (rb->aux_priv) { - rb->free_aux(rb->aux_priv); - rb->free_aux = NULL; - rb->aux_priv = NULL; - } - - if (rb->aux_nr_pages) { - for (pg = 0; pg < rb->aux_nr_pages; pg++) - rb_free_aux_page(rb, pg); - - kfree(rb->aux_pages); - rb->aux_nr_pages = 0; - } -} - void rb_free_aux(struct ring_buffer *rb) { if (atomic_dec_and_test(&rb->aux_refcount)) -- 2.19.1