From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E33912E60 for ; Wed, 8 Nov 2023 10:32:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=none Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 1AE3E19E; Wed, 8 Nov 2023 02:32:55 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D59E01477; Wed, 8 Nov 2023 02:33:38 -0800 (PST) Received: from FVFF77S0Q05N (unknown [10.57.37.113]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A03E73F64C; Wed, 8 Nov 2023 02:32:51 -0800 (PST) Date: Wed, 8 Nov 2023 10:32:43 +0000 From: Mark Rutland To: Puranjay Mohan Cc: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Zi Shen Lim , Catalin Marinas , Will Deacon , bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Kumar Kartikeya Dwivedi Subject: Re: [PATCH bpf-next v2 1/1] bpf, arm64: support exceptions Message-ID: References: <20230917000045.56377-1-puranjay12@gmail.com> <20230917000045.56377-2-puranjay12@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Mon, Nov 06, 2023 at 10:04:09AM +0100, Puranjay Mohan wrote: > Hi Mark, > > On Thu, Nov 2, 2023 at 5:59 PM Mark Rutland wrote: > > > > On Sun, Sep 17, 2023 at 12:00:45AM +0000, Puranjay Mohan wrote: > > > Implement arch_bpf_stack_walk() for the ARM64 JIT. This will be used > > > by bpf_throw() to unwind till the program marked as exception boundary and > > > run the callback with the stack of the main program. > > > > > > The prologue generation code has been modified to make the callback > > > program use the stack of the program marked as exception boundary where > > > callee-saved registers are already pushed. > > > > > > As the bpf_throw function never returns, if it clobbers any callee-saved > > > registers, they would remain clobbered. So, the prologue of the > > > exception-boundary program is modified to push R23 and R24 as well, > > > which the callback will then recover in its epilogue. > > > > > > The Procedure Call Standard for the Arm 64-bit Architecture[1] states > > > that registers r19 to r28 should be saved by the callee. BPF programs on > > > ARM64 already save all callee-saved registers except r23 and r24. This > > > patch adds an instruction in prologue of the program to save these > > > two registers and another instruction in the epilogue to recover them. > > > > > > These extra instructions are only added if bpf_throw() used. Otherwise > > > the emitted prologue/epilogue remains unchanged. > > > > > > [1] https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst > > > > > > Signed-off-by: Puranjay Mohan > > > --- > > > > [...] > > > > > +void arch_bpf_stack_walk(bool (*consume_fn)(void *cookie, u64 ip, u64 sp, u64 bp), void *cookie) > > > +{ > > > + struct stack_info stacks[] = { > > > + stackinfo_get_task(current), > > > + }; > > > > Can bpf_throw() only be used by BPF programs that run in task context, or is it > > possible e.g. for those to run within an IRQ handler (or otherwise on the IRQ > > stack)? > > I will get back on this with more information. > > > > > > + > > > + struct unwind_state state = { > > > + .stacks = stacks, > > > + .nr_stacks = ARRAY_SIZE(stacks), > > > + }; > > > + unwind_init_common(&state, current); > > > + state.fp = (unsigned long)__builtin_frame_address(1); > > > + state.pc = (unsigned long)__builtin_return_address(0); > > > + > > > + if (unwind_next_frame_record(&state)) > > > + return; > > > + while (1) { > > > + /* We only use the fp in the exception callback. Pass 0 for sp as it's unavailable*/ > > > + if (!consume_fn(cookie, (u64)state.pc, 0, (u64)state.fp)) > > > + break; > > > + if (unwind_next_frame_record(&state)) > > > + break; > > > + } > > > +} > > > > IIUC you're not using arch_stack_walk() because you need the FP in addition to > > the PC. > > Yes, > > > Is there any other reason you need to open-code this? > > No, > > > > > If not, I'd rather rework the common unwinder so that it's possible to get at > > the FP. I had patches for that a while back: > > > > https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/log/?h=arm64/stacktrace/metadata > > > > ... and I'm happy to rebase that and pull out the minimum necessary to make > > that possible. > > It would be great if you can rebase and push the code, I can rebase this on > your work and not open code this implementation. I've rebased the core of that atop v6.6, and pushed that out to my arm64/stacktrace/kunwind branch: https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/log/?h=arm64/stacktrace/kunwind Once v6.7-rc1 is out, I'll rebase that and post it out (possibly with some of the other patches atop). With that I think you can implement arch_bpf_stack_walk() in stacktrace.c using kunwind_stack_walk() in a similar way to how arch_stack_walk() is implemented in that branch. If BPF only needs a single consume_fn, that can probably be even simpler as you won't need a struct to hold the consume_fn and cookie value. Mark. 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8AD96C4332F for ; Wed, 8 Nov 2023 10:33:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=a8DXfQTzXdoQGz0OI4e9Kn+jqD7VdLHN8vZ9cVEkZZA=; b=oEIntz+TWvIIxs 4BgvYF+ueQVXBBiWUP+eBawNtVUnfYaim2JGsGhJ96SLeyt3xGI24OvD6z8jExVahsBxqKKi7s978 vvPFZkI9Wa5E2vFGzaDyNteyRM440XKAta/fXts4YwXq4DS3cl0ILobcuzdqDh1c2NTZqp2QIKEdQ HtN//VAUc96b0yBU2J8D34C3YX4OI9jav5ASXCtgUwLW83+sUBJ4mgSiSnrONVVlNgfhRGqrUqhQg 2s6QEZNBD56Vww6CwaZsVZI6j/+n1b3Q+Y5hFKv6/hyTsrzP4FlE1M1PZXL64sPv7WqSIBU0d2cAp a0D7PLffzD57fj61Au8w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r0frs-003SHQ-2L; Wed, 08 Nov 2023 10:33:04 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r0frp-003SG1-0D for linux-arm-kernel@lists.infradead.org; Wed, 08 Nov 2023 10:33:03 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D59E01477; Wed, 8 Nov 2023 02:33:38 -0800 (PST) Received: from FVFF77S0Q05N (unknown [10.57.37.113]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A03E73F64C; Wed, 8 Nov 2023 02:32:51 -0800 (PST) Date: Wed, 8 Nov 2023 10:32:43 +0000 From: Mark Rutland To: Puranjay Mohan Cc: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Zi Shen Lim , Catalin Marinas , Will Deacon , bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Kumar Kartikeya Dwivedi Subject: Re: [PATCH bpf-next v2 1/1] bpf, arm64: support exceptions Message-ID: References: <20230917000045.56377-1-puranjay12@gmail.com> <20230917000045.56377-2-puranjay12@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231108_023301_218870_E586D1F9 X-CRM114-Status: GOOD ( 41.51 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBOb3YgMDYsIDIwMjMgYXQgMTA6MDQ6MDlBTSArMDEwMCwgUHVyYW5qYXkgTW9oYW4g d3JvdGU6Cj4gSGkgTWFyaywKPiAKPiBPbiBUaHUsIE5vdiAyLCAyMDIzIGF0IDU6NTnigK9QTSBN YXJrIFJ1dGxhbmQgPG1hcmsucnV0bGFuZEBhcm0uY29tPiB3cm90ZToKPiA+Cj4gPiBPbiBTdW4s IFNlcCAxNywgMjAyMyBhdCAxMjowMDo0NUFNICswMDAwLCBQdXJhbmpheSBNb2hhbiB3cm90ZToK PiA+ID4gSW1wbGVtZW50IGFyY2hfYnBmX3N0YWNrX3dhbGsoKSBmb3IgdGhlIEFSTTY0IEpJVC4g VGhpcyB3aWxsIGJlIHVzZWQKPiA+ID4gYnkgYnBmX3Rocm93KCkgdG8gdW53aW5kIHRpbGwgdGhl IHByb2dyYW0gbWFya2VkIGFzIGV4Y2VwdGlvbiBib3VuZGFyeSBhbmQKPiA+ID4gcnVuIHRoZSBj YWxsYmFjayB3aXRoIHRoZSBzdGFjayBvZiB0aGUgbWFpbiBwcm9ncmFtLgo+ID4gPgo+ID4gPiBU aGUgcHJvbG9ndWUgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkIHRvIG1ha2UgdGhl IGNhbGxiYWNrCj4gPiA+IHByb2dyYW0gdXNlIHRoZSBzdGFjayBvZiB0aGUgcHJvZ3JhbSBtYXJr ZWQgYXMgZXhjZXB0aW9uIGJvdW5kYXJ5IHdoZXJlCj4gPiA+IGNhbGxlZS1zYXZlZCByZWdpc3Rl cnMgYXJlIGFscmVhZHkgcHVzaGVkLgo+ID4gPgo+ID4gPiBBcyB0aGUgYnBmX3Rocm93IGZ1bmN0 aW9uIG5ldmVyIHJldHVybnMsIGlmIGl0IGNsb2JiZXJzIGFueSBjYWxsZWUtc2F2ZWQKPiA+ID4g cmVnaXN0ZXJzLCB0aGV5IHdvdWxkIHJlbWFpbiBjbG9iYmVyZWQuIFNvLCB0aGUgcHJvbG9ndWUg b2YgdGhlCj4gPiA+IGV4Y2VwdGlvbi1ib3VuZGFyeSBwcm9ncmFtIGlzIG1vZGlmaWVkIHRvIHB1 c2ggUjIzIGFuZCBSMjQgYXMgd2VsbCwKPiA+ID4gd2hpY2ggdGhlIGNhbGxiYWNrIHdpbGwgdGhl biByZWNvdmVyIGluIGl0cyBlcGlsb2d1ZS4KPiA+ID4KPiA+ID4gVGhlIFByb2NlZHVyZSBDYWxs IFN0YW5kYXJkIGZvciB0aGUgQXJtIDY0LWJpdCBBcmNoaXRlY3R1cmVbMV0gc3RhdGVzCj4gPiA+ IHRoYXQgcmVnaXN0ZXJzIHIxOSB0byByMjggc2hvdWxkIGJlIHNhdmVkIGJ5IHRoZSBjYWxsZWUu IEJQRiBwcm9ncmFtcyBvbgo+ID4gPiBBUk02NCBhbHJlYWR5IHNhdmUgYWxsIGNhbGxlZS1zYXZl ZCByZWdpc3RlcnMgZXhjZXB0IHIyMyBhbmQgcjI0LiBUaGlzCj4gPiA+IHBhdGNoIGFkZHMgYW4g aW5zdHJ1Y3Rpb24gaW4gcHJvbG9ndWUgb2YgdGhlICBwcm9ncmFtIHRvIHNhdmUgdGhlc2UKPiA+ ID4gdHdvIHJlZ2lzdGVycyBhbmQgYW5vdGhlciBpbnN0cnVjdGlvbiBpbiB0aGUgZXBpbG9ndWUg dG8gcmVjb3ZlciB0aGVtLgo+ID4gPgo+ID4gPiBUaGVzZSBleHRyYSBpbnN0cnVjdGlvbnMgYXJl IG9ubHkgYWRkZWQgaWYgYnBmX3Rocm93KCkgdXNlZC4gT3RoZXJ3aXNlCj4gPiA+IHRoZSBlbWl0 dGVkIHByb2xvZ3VlL2VwaWxvZ3VlIHJlbWFpbnMgdW5jaGFuZ2VkLgo+ID4gPgo+ID4gPiBbMV0g aHR0cHM6Ly9naXRodWIuY29tL0FSTS1zb2Z0d2FyZS9hYmktYWEvYmxvYi9tYWluL2FhcGNzNjQv YWFwY3M2NC5yc3QKPiA+ID4KPiA+ID4gU2lnbmVkLW9mZi1ieTogUHVyYW5qYXkgTW9oYW4gPHB1 cmFuamF5MTJAZ21haWwuY29tPgo+ID4gPiAtLS0KPiA+Cj4gPiBbLi4uXQo+ID4KPiA+ID4gK3Zv aWQgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1 NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSwgdm9pZCAqY29va2llKQo+ID4gPiArewo+ID4gPiArICAg ICBzdHJ1Y3Qgc3RhY2tfaW5mbyBzdGFja3NbXSA9IHsKPiA+ID4gKyAgICAgICAgICAgICBzdGFj a2luZm9fZ2V0X3Rhc2soY3VycmVudCksCj4gPiA+ICsgICAgIH07Cj4gPgo+ID4gQ2FuIGJwZl90 aHJvdygpIG9ubHkgYmUgdXNlZCBieSBCUEYgcHJvZ3JhbXMgdGhhdCBydW4gaW4gdGFzayBjb250 ZXh0LCBvciBpcyBpdAo+ID4gcG9zc2libGUgZS5nLiBmb3IgdGhvc2UgdG8gcnVuIHdpdGhpbiBh biBJUlEgaGFuZGxlciAob3Igb3RoZXJ3aXNlIG9uIHRoZSBJUlEKPiA+IHN0YWNrKT8KPiAKPiBJ IHdpbGwgZ2V0IGJhY2sgb24gdGhpcyB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCj4gCj4gPgo+ID4g PiArCj4gPiA+ICsgICAgIHN0cnVjdCB1bndpbmRfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsgICAg ICAgICAgICAgLnN0YWNrcyA9IHN0YWNrcywKPiA+ID4gKyAgICAgICAgICAgICAubnJfc3RhY2tz ID0gQVJSQVlfU0laRShzdGFja3MpLAo+ID4gPiArICAgICB9Owo+ID4gPiArICAgICB1bndpbmRf aW5pdF9jb21tb24oJnN0YXRlLCBjdXJyZW50KTsKPiA+ID4gKyAgICAgc3RhdGUuZnAgPSAodW5z aWduZWQgbG9uZylfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygxKTsKPiA+ID4gKyAgICAgc3RhdGUu cGMgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7Cj4gPiA+ICsK PiA+ID4gKyAgICAgaWYgKHVud2luZF9uZXh0X2ZyYW1lX3JlY29yZCgmc3RhdGUpKQo+ID4gPiAr ICAgICAgICAgICAgIHJldHVybjsKPiA+ID4gKyAgICAgd2hpbGUgKDEpIHsKPiA+ID4gKyAgICAg ICAgICAgICAvKiBXZSBvbmx5IHVzZSB0aGUgZnAgaW4gdGhlIGV4Y2VwdGlvbiBjYWxsYmFjay4g UGFzcyAwIGZvciBzcCBhcyBpdCdzIHVuYXZhaWxhYmxlKi8KPiA+ID4gKyAgICAgICAgICAgICBp ZiAoIWNvbnN1bWVfZm4oY29va2llLCAodTY0KXN0YXRlLnBjLCAwLCAodTY0KXN0YXRlLmZwKSkK PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gPiArICAgICAgICAgICAgIGlm ICh1bndpbmRfbmV4dF9mcmFtZV9yZWNvcmQoJnN0YXRlKSkKPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwo+ID4gPiArICAgICB9Cj4gPiA+ICt9Cj4gPgo+ID4gSUlVQyB5b3UncmUg bm90IHVzaW5nIGFyY2hfc3RhY2tfd2FsaygpIGJlY2F1c2UgeW91IG5lZWQgdGhlIEZQIGluIGFk ZGl0aW9uIHRvCj4gPiB0aGUgUEMuCj4gCj4gWWVzLAo+IAo+ID4gSXMgdGhlcmUgYW55IG90aGVy IHJlYXNvbiB5b3UgbmVlZCB0byBvcGVuLWNvZGUgdGhpcz8KPiAKPiBObywKPiAKPiA+Cj4gPiBJ ZiBub3QsIEknZCByYXRoZXIgcmV3b3JrIHRoZSBjb21tb24gdW53aW5kZXIgc28gdGhhdCBpdCdz IHBvc3NpYmxlIHRvIGdldCBhdAo+ID4gdGhlIEZQLiBJIGhhZCBwYXRjaGVzIGZvciB0aGF0IGEg d2hpbGUgYmFjazoKPiA+Cj4gPiAgIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51 eC9rZXJuZWwvZ2l0L21hcmsvbGludXguZ2l0L2xvZy8/aD1hcm02NC9zdGFja3RyYWNlL21ldGFk YXRhCj4gPgo+ID4gLi4uIGFuZCBJJ20gaGFwcHkgdG8gcmViYXNlIHRoYXQgYW5kIHB1bGwgb3V0 IHRoZSBtaW5pbXVtIG5lY2Vzc2FyeSB0byBtYWtlCj4gPiB0aGF0IHBvc3NpYmxlLgo+IAo+IEl0 IHdvdWxkIGJlIGdyZWF0IGlmIHlvdSBjYW4gcmViYXNlIGFuZCBwdXNoIHRoZSBjb2RlLCBJIGNh biByZWJhc2UgdGhpcyBvbgo+IHlvdXIgd29yayBhbmQgbm90IG9wZW4gY29kZSB0aGlzIGltcGxl bWVudGF0aW9uLgoKSSd2ZSByZWJhc2VkIHRoZSBjb3JlIG9mIHRoYXQgYXRvcCB2Ni42LCBhbmQg cHVzaGVkIHRoYXQgb3V0IHRvIG15CmFybTY0L3N0YWNrdHJhY2Uva3Vud2luZCBicmFuY2g6Cgog IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21hcmsvbGlu dXguZ2l0L2xvZy8/aD1hcm02NC9zdGFja3RyYWNlL2t1bndpbmQKCk9uY2UgdjYuNy1yYzEgaXMg b3V0LCBJJ2xsIHJlYmFzZSB0aGF0IGFuZCBwb3N0IGl0IG91dCAocG9zc2libHkgd2l0aCBzb21l IG9mCnRoZSBvdGhlciBwYXRjaGVzIGF0b3ApLgoKV2l0aCB0aGF0IEkgdGhpbmsgeW91IGNhbiBp bXBsZW1lbnQgYXJjaF9icGZfc3RhY2tfd2FsaygpIGluIHN0YWNrdHJhY2UuYyB1c2luZwprdW53 aW5kX3N0YWNrX3dhbGsoKSBpbiBhIHNpbWlsYXIgd2F5IHRvIGhvdyBhcmNoX3N0YWNrX3dhbGso KSBpcyBpbXBsZW1lbnRlZAppbiB0aGF0IGJyYW5jaC4KCklmIEJQRiBvbmx5IG5lZWRzIGEgc2lu Z2xlIGNvbnN1bWVfZm4sIHRoYXQgY2FuIHByb2JhYmx5IGJlIGV2ZW4gc2ltcGxlciBhcyB5b3UK d29uJ3QgbmVlZCBhIHN0cnVjdCB0byBob2xkIHRoZSBjb25zdW1lX2ZuIGFuZCBjb29raWUgdmFs dWUuCgpNYXJrLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=