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=-18.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_IN_DEF_DKIM_WL 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 57372C433DB for ; Wed, 24 Mar 2021 14:05:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2E13A619FF for ; Wed, 24 Mar 2021 14:05:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235956AbhCXOFZ (ORCPT ); Wed, 24 Mar 2021 10:05:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235940AbhCXOFN (ORCPT ); Wed, 24 Mar 2021 10:05:13 -0400 Received: from mail-oi1-x22c.google.com (mail-oi1-x22c.google.com [IPv6:2607:f8b0:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 95289C0613DF for ; Wed, 24 Mar 2021 07:05:13 -0700 (PDT) Received: by mail-oi1-x22c.google.com with SMTP id z15so20893656oic.8 for ; Wed, 24 Mar 2021 07:05:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=OfhOIdD0/JF1R4rl2yl8LbcQIZX0RUkjo+PIbGE7ciE=; b=kIHyqH8JFqLF0l4tVjAXu/sDM7iO8ss5W7oPbFSR+Bn7bdjw8XPZ8DzVZ0pXACYIug qej0C40RTpmUdDOXTstZhp7o/4HIfBz5cmPb7OdHwtnOA1D17xLmO8kfJmUZpflPVgC6 uE+W69lYB6c55FX+05RO8s69fjyyAw+ZxaUGJQiU99Ad6F4PLxJ2iYJgPcpew1hynsfq D3uO41v+JiL2vRWHp1vkjYLUNfx3T1jM9iiCUo0Tj904SMJVraupg67zLibhTU+MIVYm nB5vdFrZq9zkoHPiuSNX2xc4DdZ+vBuSVbLLitsupYGNTzEFGGsjHhxTxjsREvVYkR1k JpPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=OfhOIdD0/JF1R4rl2yl8LbcQIZX0RUkjo+PIbGE7ciE=; b=HyuUVEsDgue0EVNQNNVBbf6NR3384P7sQF/zpezqzYFEC6yq28PdBHl9+cXHCWvelL aLLsNOJDyWfi3h5DInTtON0jcuQx6P6KualG181J4j42i0lwojBXgeN3HL0VRR15glNJ ob5Rs/f93IM8lsYmr+IkCV/WJouozggxsZH+YdEN92vTDwIOyeLyLv4GkfWJrC6B7VRV FjkCR6bTg6lgYqqtAQGX/mMkwmQ7LMJvdWHOOOWWfY7pEFVHhcF2i2yi9isbTgyDZ2WM 4NOZ0EbKH/IS+YrATSaqcaxwQCiHpTa9Z50Kp2DWbKTxLUKV7pjporUthAikzyLGSwjn WgqA== X-Gm-Message-State: AOAM530dy8iCMDqzL9HADyDKyS28BrDtB5733c/wm87hJFSFsf0XZFg1 KPtNeDyJhre464suH1FqbMKgS+P0ol8ohv71s+s8qQ== X-Google-Smtp-Source: ABdhPJxdAYITQjy6PUTtztEnIEr7S6Tr2BKexm3VGKs9O0tMTmBvQVzf6klIwBU1ixhxrhKmArzODSCAgIOrKl1qqew= X-Received: by 2002:aca:44d6:: with SMTP id r205mr2482806oia.172.1616594712647; Wed, 24 Mar 2021 07:05:12 -0700 (PDT) MIME-Version: 1.0 References: <20210324112503.623833-1-elver@google.com> <20210324112503.623833-8-elver@google.com> In-Reply-To: From: Marco Elver Date: Wed, 24 Mar 2021 15:05:01 +0100 Message-ID: Subject: Re: [PATCH v3 07/11] perf: Add breakpoint information to siginfo on SIGTRAP To: Peter Zijlstra Cc: Alexander Shishkin , Arnaldo Carvalho de Melo , Ingo Molnar , Jiri Olsa , Mark Rutland , Namhyung Kim , Thomas Gleixner , Alexander Potapenko , Al Viro , Arnd Bergmann , Christian Brauner , Dmitry Vyukov , Jann Horn , Jens Axboe , Matt Morehouse , Peter Collingbourne , Ian Rogers , kasan-dev , linux-arch , linux-fsdevel , LKML , "the arch/x86 maintainers" , "open list:KERNEL SELFTEST FRAMEWORK" Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org On Wed, 24 Mar 2021 at 15:01, Peter Zijlstra wrote: > > One last try, I'll leave it alone now, I promise :-) This looks like it does what you suggested, thanks! :-) I'll still need to think about it, because of the potential problem with modify-signal-races and what the user's synchronization story would look like then. > --- a/include/linux/perf_event.h > +++ b/include/linux/perf_event.h > @@ -778,6 +778,9 @@ struct perf_event { > void *security; > #endif > struct list_head sb_list; > + > + unsigned long si_uattr; > + unsigned long si_data; > #endif /* CONFIG_PERF_EVENTS */ > }; > > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -5652,13 +5652,17 @@ static long _perf_ioctl(struct perf_even > return perf_event_query_prog_array(event, (void __user *)arg); > > case PERF_EVENT_IOC_MODIFY_ATTRIBUTES: { > + struct perf_event_attr __user *uattr; > struct perf_event_attr new_attr; > - int err = perf_copy_attr((struct perf_event_attr __user *)arg, > - &new_attr); > + int err; > > + uattr = (struct perf_event_attr __user *)arg; > + err = perf_copy_attr(uattr, &new_attr); > if (err) > return err; > > + event->si_uattr = (unsigned long)uattr; > + > return perf_event_modify_attr(event, &new_attr); > } > default: > @@ -6399,7 +6403,12 @@ static void perf_sigtrap(struct perf_eve > clear_siginfo(&info); > info.si_signo = SIGTRAP; > info.si_code = TRAP_PERF; > - info.si_errno = event->attr.type; > + info.si_addr = (void *)event->si_data; > + > + info.si_perf = event->si_uattr; > + if (event->parent) > + info.si_perf = event->parent->si_uattr; > + > force_sig_info(&info); > } > > @@ -6414,8 +6423,8 @@ static void perf_pending_event_disable(s > WRITE_ONCE(event->pending_disable, -1); > > if (event->attr.sigtrap) { > - atomic_set(&event->event_limit, 1); /* rearm event */ > perf_sigtrap(event); > + atomic_set_release(&event->event_limit, 1); /* rearm event */ > return; > } > > @@ -9121,6 +9130,7 @@ static int __perf_event_overflow(struct > if (events && atomic_dec_and_test(&event->event_limit)) { > ret = 1; > event->pending_kill = POLL_HUP; > + event->si_data = data->addr; > > perf_event_disable_inatomic(event); > } > @@ -12011,6 +12021,8 @@ SYSCALL_DEFINE5(perf_event_open, > goto err_task; > } > > + event->si_uattr = (unsigned long)attr_uptr; > + > if (is_sampling_event(event)) { > if (event->pmu->capabilities & PERF_PMU_CAP_NO_INTERRUPT) { > err = -EOPNOTSUPP;