Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp702708rdg; Thu, 12 Oct 2023 20:13:58 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGAG9dBrqjeax/7u4FSo9WQ9gd3Ne0jsGxUsJXesmTouaiKmn/6emaYWzi85G2l83I4mGvx X-Received: by 2002:a17:902:d4c2:b0:1c8:a68e:7ff with SMTP id o2-20020a170902d4c200b001c8a68e07ffmr16954910plg.60.1697166838466; Thu, 12 Oct 2023 20:13:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697166838; cv=none; d=google.com; s=arc-20160816; b=VQZgb+WNU1gCZvBp6yUnO0yp/d4PJZLbZ71C7EvggkNgVXwxd7K0tI8IT2CkpLvje0 pdC8NPPRhz/WdvljuQV/xh/BzGQpODU9j632bhDnPm/wJtFgTyKqf0rjd2iEedePJOgQ CJozet3tSxpYXXIHiOgb83a9NtLCVOBHx3iUfQc4BmUb5cVOkQV1zXqls0LOxNOgnZXs Ig1H7gZkNFmLltHw/RAK4BgVi9GCTsN7niKc0k4o4AyXZlOCKQwnjv+LFbIh89Jxsbxa R2cxI7AcM2Si5Q0yVOMpyf6JEUhnr8apzMeNjNmph6cbMIeazC++UVrbw0vcWJChjLAZ 2JjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=Oh9GrgKa9j4l+aRPCooNGk8I84arXkGHoVeRTOb15Bc=; fh=Sj9B1MGoOCSruYCHXRLWLcSwkcUVCjXL2SMe1/u74nI=; b=kMCJ+MN6xEmUCWo/wDa1fhl/NiaEBUWPdF26rVK61/A44lnl+usUecidyXxPDkdvk/ HLFSzWXgwlfamQTYB41Mi4mvMBMu79+i4DZ0m5tVMfqtYHhCO374CP93PDu3b5EHAv3n cxowJ7ju2ZM8erMvkNda+vhVNlC9CaG4SLcSZm962/VT2k0tdNYzVtTZqBs3zDA6v26T GukwBlArPjcczUZ6KtO28jHEUurdvNxZY2G8wCKfy0otze5AM5exKrgQYV3OlVzLzcxV G9/a306jmVpcx6zjBGOnx7qGq5so3ZGd75XOXN/rVUKnYTdyoPz58dLmQsvOeAslQHG/ 0mHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@vmn-com-au.20230601.gappssmtp.com header.s=20230601 header.b=DSXt9k9q; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=vmn.com.au Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id n11-20020a170902968b00b001b9f55d28a2si3435849plp.205.2023.10.12.20.13.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Oct 2023 20:13:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@vmn-com-au.20230601.gappssmtp.com header.s=20230601 header.b=DSXt9k9q; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=vmn.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 0B9E78030B65; Thu, 12 Oct 2023 20:13:57 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229521AbjJMDNo (ORCPT + 99 others); Thu, 12 Oct 2023 23:13:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49564 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229436AbjJMDNm (ORCPT ); Thu, 12 Oct 2023 23:13:42 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D05AEB7 for ; Thu, 12 Oct 2023 20:13:38 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-53de0d1dc46so2843515a12.3 for ; Thu, 12 Oct 2023 20:13:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vmn-com-au.20230601.gappssmtp.com; s=20230601; t=1697166817; x=1697771617; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Oh9GrgKa9j4l+aRPCooNGk8I84arXkGHoVeRTOb15Bc=; b=DSXt9k9q9EKnm5nRqQihLdlzTVvEQENvJfLAeYzF9nr2GxafYdXWEWQmFrSD6LRMt/ 8afJJvn4PaOV4WU6iNyqiCCRRvScsAYxAgbCMe5tSKxolPpwSlAjwOZtvWVFDqZ4ohT6 wuhwT2JsUL8VT28kKhdTbCepnWEl8N/plb3Vs54aNnq24DLXJdUc/Ypd97+xS6ZM3J6b DPE3sg/52sn94H8+FbKsUEFVkAjuK0X0FBihEyvyYHkM9FKOMngNu/TulyLfz17hhb+F kHaDVQx4uXViueMtvuS0rQQDDCU10TH0BndHY+okOJ3O3IfWftWqz1e2WtfDrgInWhFa 60Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697166817; x=1697771617; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Oh9GrgKa9j4l+aRPCooNGk8I84arXkGHoVeRTOb15Bc=; b=EuHR/ENimy7AmRIBO1sfnzByix7Hdon/pO/IHGMFG3mYM8J97uuAOiPfVMJKfoMDg8 iOhAerKEj89BsyceV5DhawXDSaGrnPeufu5Vo6XfvRMgc0SJJ4WotQikC+Umb7JGs86w MUjU/KAIS8OZURYDr7zV20nbdH296Oz9ltLvAIZY1XJcQusFYroY1GXlFbiFTVWzCzKm SWsjYuLPFUvhE4k0Qj2EZsZc+Hx3GFl631L7dIXMlsgoz2gD4vSeD20kOkubaB1cKLi6 UQaPMhFbdbGR1AcszYkea9w17M5Ws9YkTG/7hOS99UbbYKosqRmEASFSxBsCh8zGu6To tmNg== X-Gm-Message-State: AOJu0YyMgx1gROcs60UYg6Lo4jbch7GapSTUCKXunPT4h83sZc53YQWy iyYlubMzcKgJoAuPhA2VnQnZ0RbM3P9FHIEKvHItbw== X-Received: by 2002:a17:906:2d1:b0:9b2:b765:8802 with SMTP id 17-20020a17090602d100b009b2b7658802mr25418604ejk.40.1697166816430; Thu, 12 Oct 2023 20:13:36 -0700 (PDT) MIME-Version: 1.0 References: <20231005123413.GA488417@alecto.usersys.redhat.com> <20231012114550.152846-1-asavkov@redhat.com> In-Reply-To: <20231012114550.152846-1-asavkov@redhat.com> From: Rod Webster Date: Fri, 13 Oct 2023 13:13:25 +1000 Message-ID: Subject: Re: [RFC PATCH bpf-next] bpf: change syscall_nr type to int in struct syscall_tp_t To: Artem Savkov Cc: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , bpf@vger.kernel.org, netdev@vger.kernel.org, Steven Rostedt , Masami Hiramatsu , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Thomas Gleixner , linux-rt-users@vger.kernel.org, Jiri Olsa Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 12 Oct 2023 20:13:57 -0700 (PDT) For the novice with the RT kernel, Could somebody tell me what kernel this bug was first introduced in and what kernel we need to install to get the fix? This could be the issue we have been experiencing in the Linuxcnc community with excessive RT network latency (mostly with realtek NIC's). I had flagged Lazy preemption as being the possible changes causing this issue. I thought Lazy Preemption was added Circa kernel 5.09 as it affected Debian Bullseye on Kernel 5.10 which coincided with when we first observed the problem. Thanks in anticipation. Rod Webster Rod Webster 1300 896 832 +61 435 765 611 VMN=C2=AE www.vmn.com.au Sole Queensland Distributor On Thu, 12 Oct 2023 at 21:46, Artem Savkov wrote: > > linux-rt-devel tree contains a patch (b1773eac3f29c ("sched: Add support > for lazy preemption")) that adds an extra member to struct trace_entry. > This causes the offset of args field in struct trace_event_raw_sys_enter > be different from the one in struct syscall_trace_enter: > > struct trace_event_raw_sys_enter { > struct trace_entry ent; /* 0 12 *= / > > /* XXX last struct has 3 bytes of padding */ > /* XXX 4 bytes hole, try to pack */ > > long int id; /* 16 8 *= / > long unsigned int args[6]; /* 24 48 *= / > /* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */ > char __data[]; /* 72 0 *= / > > /* size: 72, cachelines: 2, members: 4 */ > /* sum members: 68, holes: 1, sum holes: 4 */ > /* paddings: 1, sum paddings: 3 */ > /* last cacheline: 8 bytes */ > }; > > struct syscall_trace_enter { > struct trace_entry ent; /* 0 12 *= / > > /* XXX last struct has 3 bytes of padding */ > > int nr; /* 12 4 *= / > long unsigned int args[]; /* 16 0 *= / > > /* size: 16, cachelines: 1, members: 3 */ > /* paddings: 1, sum paddings: 3 */ > /* last cacheline: 16 bytes */ > }; > > This, in turn, causes perf_event_set_bpf_prog() fail while running bpf > test_profiler testcase because max_ctx_offset is calculated based on the > former struct, while off on the latter: > > 10488 if (is_tracepoint || is_syscall_tp) { > 10489 int off =3D trace_event_get_offsets(event->tp_eve= nt); > 10490 > 10491 if (prog->aux->max_ctx_offset > off) > 10492 return -EACCES; > 10493 } > > What bpf program is actually getting is a pointer to struct > syscall_tp_t, defined in kernel/trace/trace_syscalls.c. This patch fixes > the problem by aligning struct syscall_tp_t with with struct > syscall_trace_(enter|exit) and changing the tests to use these structs > to dereference context. > > Signed-off-by: Artem Savkov > --- > kernel/trace/trace_syscalls.c | 4 ++-- > tools/testing/selftests/bpf/progs/profiler.inc.h | 2 +- > tools/testing/selftests/bpf/progs/test_vmlinux.c | 4 ++-- > 3 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.= c > index de753403cdafb..9c581d6da843a 100644 > --- a/kernel/trace/trace_syscalls.c > +++ b/kernel/trace/trace_syscalls.c > @@ -556,7 +556,7 @@ static int perf_call_bpf_enter(struct trace_event_cal= l *call, struct pt_regs *re > { > struct syscall_tp_t { > struct trace_entry ent; > - unsigned long syscall_nr; > + int syscall_nr; > unsigned long args[SYSCALL_DEFINE_MAXARGS]; > } __aligned(8) param; > int i; > @@ -661,7 +661,7 @@ static int perf_call_bpf_exit(struct trace_event_call= *call, struct pt_regs *reg > { > struct syscall_tp_t { > struct trace_entry ent; > - unsigned long syscall_nr; > + int syscall_nr; > unsigned long ret; > } __aligned(8) param; > > diff --git a/tools/testing/selftests/bpf/progs/profiler.inc.h b/tools/tes= ting/selftests/bpf/progs/profiler.inc.h > index f799d87e87002..897061930cb76 100644 > --- a/tools/testing/selftests/bpf/progs/profiler.inc.h > +++ b/tools/testing/selftests/bpf/progs/profiler.inc.h > @@ -609,7 +609,7 @@ ssize_t BPF_KPROBE(kprobe__proc_sys_write, > } > > SEC("tracepoint/syscalls/sys_enter_kill") > -int tracepoint__syscalls__sys_enter_kill(struct trace_event_raw_sys_ente= r* ctx) > +int tracepoint__syscalls__sys_enter_kill(struct syscall_trace_enter* ctx= ) > { > struct bpf_func_stats_ctx stats_ctx; > > diff --git a/tools/testing/selftests/bpf/progs/test_vmlinux.c b/tools/tes= ting/selftests/bpf/progs/test_vmlinux.c > index 4b8e37f7fd06c..78b23934d9f8f 100644 > --- a/tools/testing/selftests/bpf/progs/test_vmlinux.c > +++ b/tools/testing/selftests/bpf/progs/test_vmlinux.c > @@ -16,12 +16,12 @@ bool kprobe_called =3D false; > bool fentry_called =3D false; > > SEC("tp/syscalls/sys_enter_nanosleep") > -int handle__tp(struct trace_event_raw_sys_enter *args) > +int handle__tp(struct syscall_trace_enter *args) > { > struct __kernel_timespec *ts; > long tv_nsec; > > - if (args->id !=3D __NR_nanosleep) > + if (args->nr !=3D __NR_nanosleep) > return 0; > > ts =3D (void *)args->args[0]; > -- > 2.41.0 > >