[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <d22105ed-01e8-4abd-ade9-86686f48d221@kernel.org>
Date: Mon, 12 Jan 2026 08:19:51 +0100
From: "Christophe Leroy (CS GROUP)" <chleroy@...nel.org>
To: adubey <adubey@...p.linux.ibm.com>,
Saket Kumar Bhaskar <skb99@...ux.ibm.com>
Cc: adubey@...ux.ibm.com, bpf@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org,
linux-kselftest@...r.kernel.org, linux-kernel@...r.kernel.org,
hbathini@...ux.ibm.com, sachinpb@...ux.ibm.com, venkat88@...ux.ibm.com,
andrii@...nel.org, eddyz87@...il.com, mykolal@...com, ast@...nel.org,
daniel@...earbox.net, martin.lau@...ux.dev, song@...nel.org,
yonghong.song@...ux.dev, john.fastabend@...il.com, kpsingh@...nel.org,
sdf@...ichev.me, haoluo@...gle.com, jolsa@...nel.org, naveen@...nel.org,
maddy@...ux.ibm.com, mpe@...erman.id.au, npiggin@...il.com,
memxor@...il.com, iii@...ux.ibm.com, shuah@...nel.org
Subject: Re: [PATCH 5/6] powerpc64/bpf: Support exceptions
Le 12/01/2026 à 07:58, adubey a écrit :
> [Vous ne recevez pas souvent de courriers de adubey@...p.linux.ibm.com.
> D?couvrez pourquoi ceci est important ? https://aka.ms/
> LearnAboutSenderIdentification ]
>
> On 2026-01-12 11:21, Saket Kumar Bhaskar wrote:
>> On Mon, Jan 05, 2026 at 04:22:11PM +0530, adubey@...ux.ibm.com wrote:
>>> From: Abhishek Dubey <adubey@...ux.ibm.com>
>>>
>>> The modified prologue/epilogue generation code now
>>> enables exception-callback to use the stack frame of
>>> the program marked as exception boundary, where callee
>>> saved registers are stored.
>>>
>>> As per ppc64 ABIv2 documentation[1], r14-r31 are callee
>>> saved registers. BPF programs on ppc64 already saves
>>> r26-r31 registers. Saving the remaining set of callee
>>> saved registers(r14-r25) is handled in the next patch.
>>>
>>> [1]
>>> https://eur01.safelinks.protection.outlook.com/?
>>> url=https%3A%2F%2Fftp.rtems.org%2Fpub%2Frtems%2Fpeople%2Fsebh%2FABI64BitOpenPOWERv1.1_16July2015_pub.pdf&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7Cdecf1943ac9949608edb08de51a7f357%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C639037978954052961%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=uCfpmnY2bQT7yD3esp8nkyLPGfEzpK9UoCgV2sm0j80%3D&reserved=0
>>>
>>> Following is exceptions selftest result on ppc64le:
>>>
>>> # ./test_progs -t exceptions
>>> #100/1 exceptions/exception_throw_always_1:OK
>>> #100/2 exceptions/exception_throw_always_2:OK
>>> #100/3 exceptions/exception_throw_unwind_1:OK
>>> #100/4 exceptions/exception_throw_unwind_2:OK
>>> #100/5 exceptions/exception_throw_default:OK
>>> #100/6 exceptions/exception_throw_default_value:OK
>>> #100/7 exceptions/exception_tail_call:OK
>>> #100/8 exceptions/exception_ext:OK
>>> #100/9 exceptions/exception_ext_mod_cb_runtime:OK
>>> #100/10 exceptions/exception_throw_subprog:OK
>>> #100/11 exceptions/exception_assert_nz_gfunc:OK
>>> #100/12 exceptions/exception_assert_zero_gfunc:OK
>>> #100/13 exceptions/exception_assert_neg_gfunc:OK
>>> #100/14 exceptions/exception_assert_pos_gfunc:OK
>>> #100/15 exceptions/exception_assert_negeq_gfunc:OK
>>> #100/16 exceptions/exception_assert_poseq_gfunc:OK
>>> #100/17 exceptions/exception_assert_nz_gfunc_with:OK
>>> #100/18 exceptions/exception_assert_zero_gfunc_with:OK
>>> #100/19 exceptions/exception_assert_neg_gfunc_with:OK
>>> #100/20 exceptions/exception_assert_pos_gfunc_with:OK
>>> #100/21 exceptions/exception_assert_negeq_gfunc_with:OK
>>> #100/22 exceptions/exception_assert_poseq_gfunc_with:OK
>>> #100/23 exceptions/exception_bad_assert_nz_gfunc:OK
>>> #100/24 exceptions/exception_bad_assert_zero_gfunc:OK
>>> #100/25 exceptions/exception_bad_assert_neg_gfunc:OK
>>> #100/26 exceptions/exception_bad_assert_pos_gfunc:OK
>>> #100/27 exceptions/exception_bad_assert_negeq_gfunc:OK
>>> #100/28 exceptions/exception_bad_assert_poseq_gfunc:OK
>>> #100/29 exceptions/exception_bad_assert_nz_gfunc_with:OK
>>> #100/30 exceptions/exception_bad_assert_zero_gfunc_with:OK
>>> #100/31 exceptions/exception_bad_assert_neg_gfunc_with:OK
>>> #100/32 exceptions/exception_bad_assert_pos_gfunc_with:OK
>>> #100/33 exceptions/exception_bad_assert_negeq_gfunc_with:OK
>>> #100/34 exceptions/exception_bad_assert_poseq_gfunc_with:OK
>>> #100/35 exceptions/exception_assert_range:OK
>>> #100/36 exceptions/exception_assert_range_with:OK
>>> #100/37 exceptions/exception_bad_assert_range:OK
>>> #100/38 exceptions/exception_bad_assert_range_with:OK
>>> #100/39 exceptions/non-throwing fentry -> exception_cb:OK
>>> #100/40 exceptions/throwing fentry -> exception_cb:OK
>>> #100/41 exceptions/non-throwing fexit -> exception_cb:OK
>>> #100/42 exceptions/throwing fexit -> exception_cb:OK
>>> #100/43 exceptions/throwing extension (with custom cb) ->
>>> exception_cb:OK
>>> #100/44 exceptions/throwing extension -> global func in
>>> exception_cb:OK
>>> #100/45 exceptions/exception_ext_mod_cb_runtime:OK
>>> #100/46 exceptions/throwing extension (with custom cb) -> global func
>>> in exception_cb:OK
>>> #100/47 exceptions/exception_ext:OK
>>> #100/48 exceptions/non-throwing fentry -> non-throwing subprog:OK
>>> #100/49 exceptions/throwing fentry -> non-throwing subprog:OK
>>> #100/50 exceptions/non-throwing fentry -> throwing subprog:OK
>>> #100/51 exceptions/throwing fentry -> throwing subprog:OK
>>> #100/52 exceptions/non-throwing fexit -> non-throwing subprog:OK
>>> #100/53 exceptions/throwing fexit -> non-throwing subprog:OK
>>> #100/54 exceptions/non-throwing fexit -> throwing subprog:OK
>>> #100/55 exceptions/throwing fexit -> throwing subprog:OK
>>> #100/56 exceptions/non-throwing fmod_ret -> non-throwing subprog:OK
>>> #100/57 exceptions/non-throwing fmod_ret -> non-throwing global
>>> subprog:OK
>>> #100/58 exceptions/non-throwing extension -> non-throwing subprog:OK
>>> #100/59 exceptions/non-throwing extension -> throwing subprog:OK
>>> #100/60 exceptions/non-throwing extension -> non-throwing subprog:OK
>>> #100/61 exceptions/non-throwing extension -> throwing global
>>> subprog:OK
>>> #100/62 exceptions/throwing extension -> throwing global subprog:OK
>>> #100/63 exceptions/throwing extension -> non-throwing global
>>> subprog:OK
>>> #100/64 exceptions/non-throwing extension -> main subprog:OK
>>> #100/65 exceptions/throwing extension -> main subprog:OK
>>> #100/66 exceptions/reject_exception_cb_type_1:OK
>>> #100/67 exceptions/reject_exception_cb_type_2:OK
>>> #100/68 exceptions/reject_exception_cb_type_3:OK
>>> #100/69 exceptions/reject_exception_cb_type_4:OK
>>> #100/70 exceptions/reject_async_callback_throw:OK
>>> #100/71 exceptions/reject_with_lock:OK
>>> #100/72 exceptions/reject_subprog_with_lock:OK
>>> #100/73 exceptions/reject_with_rcu_read_lock:OK
>>> #100/74 exceptions/reject_subprog_with_rcu_read_lock:OK
>>> #100/75 exceptions/reject_with_rbtree_add_throw:OK
>>> #100/76 exceptions/reject_with_reference:OK
>>> #100/77 exceptions/reject_with_cb_reference:OK
>>> #100/78 exceptions/reject_with_cb:OK
>>> #100/79 exceptions/reject_with_subprog_reference:OK
>>> #100/80 exceptions/reject_throwing_exception_cb:OK
>>> #100/81 exceptions/reject_exception_cb_call_global_func:OK
>>> #100/82 exceptions/reject_exception_cb_call_static_func:OK
>>> #100/83 exceptions/reject_multiple_exception_cb:OK
>>> #100/84 exceptions/reject_exception_throw_cb:OK
>>> #100/85 exceptions/reject_exception_throw_cb_diff:OK
>>> #100/86 exceptions/reject_set_exception_cb_bad_ret1:OK
>>> #100/87 exceptions/reject_set_exception_cb_bad_ret2:OK
>>> #100/88 exceptions/check_assert_eq_int_min:OK
>>> #100/89 exceptions/check_assert_eq_int_max:OK
>>> #100/90 exceptions/check_assert_eq_zero:OK
>>> #100/91 exceptions/check_assert_eq_llong_min:OK
>>> #100/92 exceptions/check_assert_eq_llong_max:OK
>>> #100/93 exceptions/check_assert_lt_pos:OK
>>> #100/94 exceptions/check_assert_lt_zero:OK
>>> #100/95 exceptions/check_assert_lt_neg:OK
>>> #100/96 exceptions/check_assert_le_pos:OK
>>> #100/97 exceptions/check_assert_le_zero:OK
>>> #100/98 exceptions/check_assert_le_neg:OK
>>> #100/99 exceptions/check_assert_gt_pos:OK
>>> #100/100 exceptions/check_assert_gt_zero:OK
>>> #100/101 exceptions/check_assert_gt_neg:OK
>>> #100/102 exceptions/check_assert_ge_pos:OK
>>> #100/103 exceptions/check_assert_ge_zero:OK
>>> #100/104 exceptions/check_assert_ge_neg:OK
>>> #100/105 exceptions/check_assert_range_s64:OK
>>> #100/106 exceptions/check_assert_range_u64:OK
>>> #100/107 exceptions/check_assert_single_range_s64:OK
>>> #100/108 exceptions/check_assert_single_range_u64:OK
>>> #100/109 exceptions/check_assert_generic:OK
>>> #100/110 exceptions/check_assert_with_return:OK
>>> #100 exceptions:OK
>>> Summary: 1/110 PASSED, 0 SKIPPED, 0 FAILED
>>>
>> It would be great to include this selftest output in the cover letter
>> instead, since it makes the git log excessively long.
>>
>> Thanks,
>> Saket
>
> Major contributors in the community routinely include test case results
> in commit messages, and this is not viewed as problematic.
> Eg: bpf-next : e59997d9052599feb17419289f2a57ed300e1dfa,
This is a merge commit, the message comes from the cover letter of the
series:
https://lore.kernel.org/all/20240201125225.72796-1-puranjay12@gmail.com/
> 6c17a882d3804dce1c66e1fec25f96d39a184067
In this one the list of tests is rather small compared to the entire
commit message.
So I also recommend to move this big list of tests in the cover letter.
Christophe
Powered by blists - more mailing lists