Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2651891pxb; Tue, 23 Feb 2021 12:02:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJySe1A12qmbbJTScxJyevgpgpGH+6yLaO4BAD3oF7I3fL+tBCJfMJIcygb2oFsMdd+1cj++ X-Received: by 2002:a17:906:4142:: with SMTP id l2mr11465747ejk.444.1614110563623; Tue, 23 Feb 2021 12:02:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614110563; cv=none; d=google.com; s=arc-20160816; b=TtNjgkSJfZqi4NfHfghru9gxr1gZwGj2gJsjqQO95utDjGUjEn8SQqkWVQU2kSTGKz srOGsu/NnSql8LgAlwc7ZpTuPPKAKMe/HmFGbcRK+i957vVmw52mLFJs4x9S46abEH5o YJkHbTkdothSsd9r5zmJU0USNHy0OSuzu2kHh0iO4QEU1fS8RDgUAuzx2j8BRnrrr4xy mBTBWp9E+fB4VeHir20GlbhRwRu8SXbhuvtiDwVeTKfwTNqHz2+kUqgUq+d43zcHIuiu r791lgfiMzIWAX4EayZY963VQ7rW0K4LoPHeo+Bc67Y6wHiicNl7Mo0seo6EjuPkFxBO wSBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:sender:dkim-signature; bh=M7IgukK9IFY6YerKyONO0wWjLsd7r1LevWvp+F7nZVo=; b=sfHlshhwMvFtSedg+fO7T73QEt29GCTqfcLppUrN72rap9WVkM8CKh6HjuxrpI5eFp DDqSfsTf8mQyNB7nuHZZUux4tlzebIENFITMDEkzMo+HfwryfREy97yiN0XH0NhPrH0s Ni6ADIq7YwKJ25R/wHrkd6lOCmg8dWRu1KxkUXykq/9ayMtW43rEYEp7aR+Nbpp6eaJR VzaAJwAlkgEZa190Gfra7FBwhDOPzecYdZKMYfQLEhDxkGO1HuLUg4LdTLqp2WvhYOI1 G3DoMIKV5QTqSdSuPWEmxciCfie/9V8yuiMYOtveyQ7nDzPDjhUOCIaxND9BGW0ECWF3 dHow== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=pvodb754; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id jx14si7375282ejc.739.2021.02.23.12.02.19; Tue, 23 Feb 2021 12:02:43 -0800 (PST) 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=pass header.i=@google.com header.s=20161025 header.b=pvodb754; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233020AbhBWOgo (ORCPT + 99 others); Tue, 23 Feb 2021 09:36:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232525AbhBWOgH (ORCPT ); Tue, 23 Feb 2021 09:36:07 -0500 Received: from mail-lf1-x149.google.com (mail-lf1-x149.google.com [IPv6:2a00:1450:4864:20::149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CB095C0617AB for ; Tue, 23 Feb 2021 06:34:53 -0800 (PST) Received: by mail-lf1-x149.google.com with SMTP id r79so386631lff.20 for ; Tue, 23 Feb 2021 06:34:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=M7IgukK9IFY6YerKyONO0wWjLsd7r1LevWvp+F7nZVo=; b=pvodb754jpNQprcBsG3I7muKaw7xW8mdWXHhqvdCBF+9SX6xY5KgLkbFo76yqevNdU +yb12QsncW2TTwVyTUPh6nnTYlzOCftmsKEavW7GHCtKH3vUcovHiz4eIrzn9yyz9X1J IPiVVFsG72pQjAuidovMBM4zzqXTfF2w7FZyuKmqTvsmYrPgVGO2QHe6f8C/iL4QidZm 4nAVcfpfn9Br37gkIZTslmRqxbJKJvCAJ8BaKVv4Fpxm+XYG9VlYz9BrL71DcGsqWFb1 wjPoK7V1dSFb9VXzpYsDRlSusnnuW9wzqcK8k0nqgtGxVfXkAEhps93dGXNTK8w+xZFV 8KhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=M7IgukK9IFY6YerKyONO0wWjLsd7r1LevWvp+F7nZVo=; b=FD0bIvsQA/Mp3gmf20n0/+ONSIi/VeYPMp3IM8gKYTwYJMZ8f0ZHepq+UndM1zh6lW Nm247MAKhLfU1Bfz6HrPnX3bRFCG/Sm6hzTHi8qHZyLIfc7S8xwZjXZrt6vSeDuoXME+ xOHyGh932ItcbXZBi9v9Xg6S0CAzFKYAwGEHf/mFsKQaa50kbAcoJufr4R0cthtMh1v/ /erDdDvOlhcYlkVzYdwX/iSKLtkh+n4xb0U/tKHnRIc0ixGGuPtyKcgRSuzG1lcu03bu pUxsV4EDsQf5UGrmjmUnR8gfYRvWkIF5QCUJDsQf4ddhyWTHtJyCb6+bzYGp3scga/CV piiA== X-Gm-Message-State: AOAM531iEDGWjQmpOOuJWD1jjQh6opd4srnK6kyE8ETsOFzNfmaSI93D BztFj+ZDzOLIzyJVMM1+6+8mr3HVsg== Sender: "elver via sendgmr" X-Received: from elver.muc.corp.google.com ([2a00:79e0:15:13:855b:f924:6e71:3d5d]) (user=elver job=sendgmr) by 2002:ac2:5184:: with SMTP id u4mr11572002lfi.487.1614090892105; Tue, 23 Feb 2021 06:34:52 -0800 (PST) Date: Tue, 23 Feb 2021 15:34:25 +0100 In-Reply-To: <20210223143426.2412737-1-elver@google.com> Message-Id: <20210223143426.2412737-4-elver@google.com> Mime-Version: 1.0 References: <20210223143426.2412737-1-elver@google.com> X-Mailer: git-send-email 2.30.0.617.g56c4b15f3c-goog Subject: [PATCH RFC 3/4] perf/core: Add support for SIGTRAP on perf events From: Marco Elver To: elver@google.com, peterz@infradead.org, alexander.shishkin@linux.intel.com, acme@kernel.org, mingo@redhat.com, jolsa@redhat.com, mark.rutland@arm.com, namhyung@kernel.org, tglx@linutronix.de Cc: glider@google.com, viro@zeniv.linux.org.uk, arnd@arndb.de, christian@brauner.io, dvyukov@google.com, jannh@google.com, axboe@kernel.dk, mascasa@google.com, pcc@google.com, irogers@google.com, kasan-dev@googlegroups.com, linux-arch@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, x86@kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Adds bit perf_event_attr::sigtrap, which can be set to cause events to send SIGTRAP (with si_code TRAP_PERF) to the task where the event occurred. To distinguish perf events and allow user space to decode si_perf (if set), the event type is set in si_errno. The primary motivation is to support synchronous signals on perf events in the task where an event (such as breakpoints) triggered. Link: https://lore.kernel.org/lkml/YBv3rAT566k+6zjg@hirez.programming.kicks-ass.net/ Suggested-by: Peter Zijlstra Signed-off-by: Marco Elver --- include/uapi/linux/perf_event.h | 3 ++- kernel/events/core.c | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h index ad15e40d7f5d..b9cc6829a40c 100644 --- a/include/uapi/linux/perf_event.h +++ b/include/uapi/linux/perf_event.h @@ -389,7 +389,8 @@ struct perf_event_attr { cgroup : 1, /* include cgroup events */ text_poke : 1, /* include text poke events */ build_id : 1, /* use build id in mmap2 events */ - __reserved_1 : 29; + sigtrap : 1, /* send synchronous SIGTRAP on event */ + __reserved_1 : 28; union { __u32 wakeup_events; /* wakeup every n events */ diff --git a/kernel/events/core.c b/kernel/events/core.c index 37a8297be164..8718763045fd 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -6288,6 +6288,17 @@ void perf_event_wakeup(struct perf_event *event) } } +static void perf_sigtrap(struct perf_event *event) +{ + struct kernel_siginfo info; + + clear_siginfo(&info); + info.si_signo = SIGTRAP; + info.si_code = TRAP_PERF; + info.si_errno = event->attr.type; + force_sig_info(&info); +} + static void perf_pending_event_disable(struct perf_event *event) { int cpu = READ_ONCE(event->pending_disable); @@ -6297,6 +6308,13 @@ static void perf_pending_event_disable(struct perf_event *event) if (cpu == smp_processor_id()) { WRITE_ONCE(event->pending_disable, -1); + + if (event->attr.sigtrap) { + atomic_inc(&event->event_limit); /* rearm event */ + perf_sigtrap(event); + return; + } + perf_event_disable_local(event); return; } @@ -11325,6 +11343,9 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, event->state = PERF_EVENT_STATE_INACTIVE; + if (event->attr.sigtrap) + atomic_set(&event->event_limit, 1); + if (task) { event->attach_state = PERF_ATTACH_TASK; /* -- 2.30.0.617.g56c4b15f3c-goog