kernel/sched/core.c | 18 +++++++++--------- kernel/sched/fair.c | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-)
From: Hongyan Xia <hongyan.xia@transsion.com>
__cfs_bandwidth_used uses struct static_key directly which is
deprecated. Fix.
sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
deprecated, but take the opportunity to move to the new static_branch_*
APIs to be consistent.
No functional change.
Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
---
Changed in RESEND:
- Separate the original series into individual patches. They aren't easy
to review as a series.
- Move sk_dynamic_* to the new API as well.
kernel/sched/core.c | 18 +++++++++---------
kernel/sched/fair.c | 8 ++++----
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 96226707c2f6..5c07d53e43b5 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -7933,15 +7933,15 @@ int sched_dynamic_mode(const char *str)
return -EINVAL;
}
-# define preempt_dynamic_key_enable(f) static_key_enable(&sk_dynamic_##f.key)
-# define preempt_dynamic_key_disable(f) static_key_disable(&sk_dynamic_##f.key)
+# define preempt_dynamic_branch_enable(f) static_branch_enable(&sk_dynamic_##f)
+# define preempt_dynamic_branch_disable(f) static_branch_disable(&sk_dynamic_##f)
# if defined(CONFIG_HAVE_PREEMPT_DYNAMIC_CALL)
# define preempt_dynamic_enable(f) static_call_update(f, f##_dynamic_enabled)
# define preempt_dynamic_disable(f) static_call_update(f, f##_dynamic_disabled)
# elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY)
-# define preempt_dynamic_enable(f) preempt_dynamic_key_enable(f)
-# define preempt_dynamic_disable(f) preempt_dynamic_key_disable(f)
+# define preempt_dynamic_enable(f) preempt_dynamic_branch_enable(f)
+# define preempt_dynamic_disable(f) preempt_dynamic_branch_disable(f)
# else
# error "Unsupported PREEMPT_DYNAMIC mechanism"
# endif
@@ -7959,7 +7959,7 @@ static void __sched_dynamic_update(int mode)
preempt_dynamic_enable(preempt_schedule);
preempt_dynamic_enable(preempt_schedule_notrace);
preempt_dynamic_enable(irqentry_exit_cond_resched);
- preempt_dynamic_key_disable(preempt_lazy);
+ preempt_dynamic_branch_disable(preempt_lazy);
switch (mode) {
case preempt_dynamic_none:
@@ -7968,7 +7968,7 @@ static void __sched_dynamic_update(int mode)
preempt_dynamic_disable(preempt_schedule);
preempt_dynamic_disable(preempt_schedule_notrace);
preempt_dynamic_disable(irqentry_exit_cond_resched);
- preempt_dynamic_key_disable(preempt_lazy);
+ preempt_dynamic_branch_disable(preempt_lazy);
if (mode != preempt_dynamic_mode)
pr_info("Dynamic Preempt: none\n");
break;
@@ -7979,7 +7979,7 @@ static void __sched_dynamic_update(int mode)
preempt_dynamic_disable(preempt_schedule);
preempt_dynamic_disable(preempt_schedule_notrace);
preempt_dynamic_disable(irqentry_exit_cond_resched);
- preempt_dynamic_key_disable(preempt_lazy);
+ preempt_dynamic_branch_disable(preempt_lazy);
if (mode != preempt_dynamic_mode)
pr_info("Dynamic Preempt: voluntary\n");
break;
@@ -7990,7 +7990,7 @@ static void __sched_dynamic_update(int mode)
preempt_dynamic_enable(preempt_schedule);
preempt_dynamic_enable(preempt_schedule_notrace);
preempt_dynamic_enable(irqentry_exit_cond_resched);
- preempt_dynamic_key_disable(preempt_lazy);
+ preempt_dynamic_branch_disable(preempt_lazy);
if (mode != preempt_dynamic_mode)
pr_info("Dynamic Preempt: full\n");
break;
@@ -8001,7 +8001,7 @@ static void __sched_dynamic_update(int mode)
preempt_dynamic_enable(preempt_schedule);
preempt_dynamic_enable(preempt_schedule_notrace);
preempt_dynamic_enable(irqentry_exit_cond_resched);
- preempt_dynamic_key_enable(preempt_lazy);
+ preempt_dynamic_branch_enable(preempt_lazy);
if (mode != preempt_dynamic_mode)
pr_info("Dynamic Preempt: lazy\n");
break;
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 762dd8a4647c..4b65be5ec471 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -6442,21 +6442,21 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued)
#ifdef CONFIG_CFS_BANDWIDTH
#ifdef CONFIG_JUMP_LABEL
-static struct static_key __cfs_bandwidth_used;
+static DEFINE_STATIC_KEY_FALSE(__cfs_bandwidth_used);
static inline bool cfs_bandwidth_used(void)
{
- return static_key_false(&__cfs_bandwidth_used);
+ return static_branch_unlikely(&__cfs_bandwidth_used);
}
void cfs_bandwidth_usage_inc(void)
{
- static_key_slow_inc_cpuslocked(&__cfs_bandwidth_used);
+ static_branch_inc_cpuslocked(&__cfs_bandwidth_used);
}
void cfs_bandwidth_usage_dec(void)
{
- static_key_slow_dec_cpuslocked(&__cfs_bandwidth_used);
+ static_branch_dec_cpuslocked(&__cfs_bandwidth_used);
}
#else /* !CONFIG_JUMP_LABEL: */
static bool cfs_bandwidth_used(void)
--
2.47.3
Hi Hongyan.
On 8/19/26 1:39 PM, Hongyan Xia wrote:
> From: Hongyan Xia <hongyan.xia@transsion.com>
>
> __cfs_bandwidth_used uses struct static_key directly which is
> deprecated. Fix.
A bit of context on why it is deprecated would help.
>
> sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
> deprecated, but take the opportunity to move to the new static_branch_*
> APIs to be consistent.
>
Mark had a series to remove a few of them completely. IIRC only lazy
check will remain.
https://lore.kernel.org/all/20260803191731.3244294-1-mark.rutland@arm.com/
> No functional change.
>
> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
> ---
> Changed in RESEND:
> - Separate the original series into individual patches. They aren't easy
> to review as a series.
> - Move sk_dynamic_* to the new API as well.
>
> kernel/sched/core.c | 18 +++++++++---------
> kernel/sched/fair.c | 8 ++++----
> 2 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 96226707c2f6..5c07d53e43b5 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -7933,15 +7933,15 @@ int sched_dynamic_mode(const char *str)
> return -EINVAL;
> }
>
> -# define preempt_dynamic_key_enable(f) static_key_enable(&sk_dynamic_##f.key)
> -# define preempt_dynamic_key_disable(f) static_key_disable(&sk_dynamic_##f.key)
> +# define preempt_dynamic_branch_enable(f) static_branch_enable(&sk_dynamic_##f)
> +# define preempt_dynamic_branch_disable(f) static_branch_disable(&sk_dynamic_##f)
Also, doc doesn't about mention about static_branch_enable vs static_key_enable.
is static_key_enable also deprecated.
>
> # if defined(CONFIG_HAVE_PREEMPT_DYNAMIC_CALL)
> # define preempt_dynamic_enable(f) static_call_update(f, f##_dynamic_enabled)
> # define preempt_dynamic_disable(f) static_call_update(f, f##_dynamic_disabled)
> # elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY)
> -# define preempt_dynamic_enable(f) preempt_dynamic_key_enable(f)
> -# define preempt_dynamic_disable(f) preempt_dynamic_key_disable(f)
> +# define preempt_dynamic_enable(f) preempt_dynamic_branch_enable(f)
> +# define preempt_dynamic_disable(f) preempt_dynamic_branch_disable(f)
> # else
> # error "Unsupported PREEMPT_DYNAMIC mechanism"
> # endif
> @@ -7959,7 +7959,7 @@ static void __sched_dynamic_update(int mode)
> preempt_dynamic_enable(preempt_schedule);
> preempt_dynamic_enable(preempt_schedule_notrace);
> preempt_dynamic_enable(irqentry_exit_cond_resched);
> - preempt_dynamic_key_disable(preempt_lazy);
> + preempt_dynamic_branch_disable(preempt_lazy);
>
> switch (mode) {
> case preempt_dynamic_none:
> @@ -7968,7 +7968,7 @@ static void __sched_dynamic_update(int mode)
> preempt_dynamic_disable(preempt_schedule);
> preempt_dynamic_disable(preempt_schedule_notrace);
> preempt_dynamic_disable(irqentry_exit_cond_resched);
> - preempt_dynamic_key_disable(preempt_lazy);
> + preempt_dynamic_branch_disable(preempt_lazy);
> if (mode != preempt_dynamic_mode)
> pr_info("Dynamic Preempt: none\n");
> break;
> @@ -7979,7 +7979,7 @@ static void __sched_dynamic_update(int mode)
> preempt_dynamic_disable(preempt_schedule);
> preempt_dynamic_disable(preempt_schedule_notrace);
> preempt_dynamic_disable(irqentry_exit_cond_resched);
> - preempt_dynamic_key_disable(preempt_lazy);
> + preempt_dynamic_branch_disable(preempt_lazy);
> if (mode != preempt_dynamic_mode)
> pr_info("Dynamic Preempt: voluntary\n");
> break;
> @@ -7990,7 +7990,7 @@ static void __sched_dynamic_update(int mode)
> preempt_dynamic_enable(preempt_schedule);
> preempt_dynamic_enable(preempt_schedule_notrace);
> preempt_dynamic_enable(irqentry_exit_cond_resched);
> - preempt_dynamic_key_disable(preempt_lazy);
> + preempt_dynamic_branch_disable(preempt_lazy);
> if (mode != preempt_dynamic_mode)
> pr_info("Dynamic Preempt: full\n");
> break;
> @@ -8001,7 +8001,7 @@ static void __sched_dynamic_update(int mode)
> preempt_dynamic_enable(preempt_schedule);
> preempt_dynamic_enable(preempt_schedule_notrace);
> preempt_dynamic_enable(irqentry_exit_cond_resched);
> - preempt_dynamic_key_enable(preempt_lazy);
> + preempt_dynamic_branch_enable(preempt_lazy);
> if (mode != preempt_dynamic_mode)
> pr_info("Dynamic Preempt: lazy\n");
> break;
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 762dd8a4647c..4b65be5ec471 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -6442,21 +6442,21 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued)
> #ifdef CONFIG_CFS_BANDWIDTH
>
> #ifdef CONFIG_JUMP_LABEL
> -static struct static_key __cfs_bandwidth_used;
> +static DEFINE_STATIC_KEY_FALSE(__cfs_bandwidth_used);
>
> static inline bool cfs_bandwidth_used(void)
> {
> - return static_key_false(&__cfs_bandwidth_used);
> + return static_branch_unlikely(&__cfs_bandwidth_used);
> }
>
We will still have two left.
core.c: if (static_key_false((¶virt_steal_rq_enabled))) {
cputime.c: if (static_key_false(¶virt_steal_enabled)) {
> void cfs_bandwidth_usage_inc(void)
> {
> - static_key_slow_inc_cpuslocked(&__cfs_bandwidth_used);
> + static_branch_inc_cpuslocked(&__cfs_bandwidth_used);
> }
>
> void cfs_bandwidth_usage_dec(void)
> {
> - static_key_slow_dec_cpuslocked(&__cfs_bandwidth_used);
> + static_branch_dec_cpuslocked(&__cfs_bandwidth_used);
> }
> #else /* !CONFIG_JUMP_LABEL: */
> static bool cfs_bandwidth_used(void)
On 8/19/2026 8:19 PM, Shrikanth Hegde wrote:
>
> Hi Hongyan.
>
> On 8/19/26 1:39 PM, Hongyan Xia wrote:
>> From: Hongyan Xia <hongyan.xia@transsion.com>
>>
>> __cfs_bandwidth_used uses struct static_key directly which is
>> deprecated. Fix.
>
> A bit of context on why it is deprecated would help.
Sure. Will add some context in the next rev.
>>
>> sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
>> deprecated, but take the opportunity to move to the new static_branch_*
>> APIs to be consistent.
>>
>
> Mark had a series to remove a few of them completely. IIRC only lazy
> check will remain.
>
> https://apc01.safelinks.protection.outlook.com/?
> url=https%3A%2F%2Flore.kernel.org%2Fall%2F20260803191731.3244294-1-
> mark.rutland%40arm.com%2F&data=05%7C02%7Chongyan.xia%40transsion.com%7C65194a86312643aed75b08defdec3f5a%7C2e8503a62d0143338e366ab7c8cd7ae2%7C0%7C0%7C639227388298975336%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=KbAcWOiQg%2Bir4%2FzKW2KG66IkxSnbq79m2I9IUlLe4os%3D&reserved=0
>
I see. These two do conflict. Would be nice if Mark's patch gets merged
first, then it makes this diff smaller.
>> No functional change.
>>
>> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
>> ---
>> Changed in RESEND:
>> - Separate the original series into individual patches. They aren't easy
>> to review as a series.
>> - Move sk_dynamic_* to the new API as well.
>>
>> kernel/sched/core.c | 18 +++++++++---------
>> kernel/sched/fair.c | 8 ++++----
>> 2 files changed, 13 insertions(+), 13 deletions(-)
>>
>> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
>> index 96226707c2f6..5c07d53e43b5 100644
>> --- a/kernel/sched/core.c
>> +++ b/kernel/sched/core.c
>> @@ -7933,15 +7933,15 @@ int sched_dynamic_mode(const char *str)
>> return -EINVAL;
>> }
>>
>> -# define preempt_dynamic_key_enable(f)
>> static_key_enable(&sk_dynamic_##f.key)
>> -# define preempt_dynamic_key_disable(f)
>> static_key_disable(&sk_dynamic_##f.key)
>> +# define preempt_dynamic_branch_enable(f)
>> static_branch_enable(&sk_dynamic_##f)
>> +# define preempt_dynamic_branch_disable(f)
>> static_branch_disable(&sk_dynamic_##f)
>
> Also, doc doesn't about mention about static_branch_enable vs
> static_key_enable.
> is static_key_enable also deprecated.
Right, like mentioned in the commit message, this change here is a
nice-to-have, not really deprecation. The trend is to move from untyped
static_key_* variants to typed static_branch_* ones, so I took the
opportunity to fix it.
>>
>> # if defined(CONFIG_HAVE_PREEMPT_DYNAMIC_CALL)
>> # define preempt_dynamic_enable(f) static_call_update(f,
>> f##_dynamic_enabled)
>> # define preempt_dynamic_disable(f) static_call_update(f,
>> f##_dynamic_disabled)
>> # elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY)
>> -# define preempt_dynamic_enable(f) preempt_dynamic_key_enable(f)
>> -# define preempt_dynamic_disable(f) preempt_dynamic_key_disable(f)
>> +# define preempt_dynamic_enable(f) preempt_dynamic_branch_enable(f)
>> +# define preempt_dynamic_disable(f) preempt_dynamic_branch_disable(f)
>> # else
>> # error "Unsupported PREEMPT_DYNAMIC mechanism"
>> # endif
>> @@ -7959,7 +7959,7 @@ static void __sched_dynamic_update(int mode)
>> preempt_dynamic_enable(preempt_schedule);
>> preempt_dynamic_enable(preempt_schedule_notrace);
>> preempt_dynamic_enable(irqentry_exit_cond_resched);
>> - preempt_dynamic_key_disable(preempt_lazy);
>> + preempt_dynamic_branch_disable(preempt_lazy);
>>
>> switch (mode) {
>> case preempt_dynamic_none:
>> @@ -7968,7 +7968,7 @@ static void __sched_dynamic_update(int mode)
>> preempt_dynamic_disable(preempt_schedule);
>> preempt_dynamic_disable(preempt_schedule_notrace);
>> preempt_dynamic_disable(irqentry_exit_cond_resched);
>> - preempt_dynamic_key_disable(preempt_lazy);
>> + preempt_dynamic_branch_disable(preempt_lazy);
>> if (mode != preempt_dynamic_mode)
>> pr_info("Dynamic Preempt: none\n");
>> break;
>> @@ -7979,7 +7979,7 @@ static void __sched_dynamic_update(int mode)
>> preempt_dynamic_disable(preempt_schedule);
>> preempt_dynamic_disable(preempt_schedule_notrace);
>> preempt_dynamic_disable(irqentry_exit_cond_resched);
>> - preempt_dynamic_key_disable(preempt_lazy);
>> + preempt_dynamic_branch_disable(preempt_lazy);
>> if (mode != preempt_dynamic_mode)
>> pr_info("Dynamic Preempt: voluntary\n");
>> break;
>> @@ -7990,7 +7990,7 @@ static void __sched_dynamic_update(int mode)
>> preempt_dynamic_enable(preempt_schedule);
>> preempt_dynamic_enable(preempt_schedule_notrace);
>> preempt_dynamic_enable(irqentry_exit_cond_resched);
>> - preempt_dynamic_key_disable(preempt_lazy);
>> + preempt_dynamic_branch_disable(preempt_lazy);
>> if (mode != preempt_dynamic_mode)
>> pr_info("Dynamic Preempt: full\n");
>> break;
>> @@ -8001,7 +8001,7 @@ static void __sched_dynamic_update(int mode)
>> preempt_dynamic_enable(preempt_schedule);
>> preempt_dynamic_enable(preempt_schedule_notrace);
>> preempt_dynamic_enable(irqentry_exit_cond_resched);
>> - preempt_dynamic_key_enable(preempt_lazy);
>> + preempt_dynamic_branch_enable(preempt_lazy);
>> if (mode != preempt_dynamic_mode)
>> pr_info("Dynamic Preempt: lazy\n");
>> break;
>> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
>> index 762dd8a4647c..4b65be5ec471 100644
>> --- a/kernel/sched/fair.c
>> +++ b/kernel/sched/fair.c
>> @@ -6442,21 +6442,21 @@ entity_tick(struct cfs_rq *cfs_rq, struct
>> sched_entity *curr, int queued)
>> #ifdef CONFIG_CFS_BANDWIDTH
>>
>> #ifdef CONFIG_JUMP_LABEL
>> -static struct static_key __cfs_bandwidth_used;
>> +static DEFINE_STATIC_KEY_FALSE(__cfs_bandwidth_used);
>>
>> static inline bool cfs_bandwidth_used(void)
>> {
>> - return static_key_false(&__cfs_bandwidth_used);
>> + return static_branch_unlikely(&__cfs_bandwidth_used);
>> }
>>
>
>
> We will still have two left.
>
> core.c: if (static_key_false((¶virt_steal_rq_enabled))) {
> cputime.c: if (static_key_false(¶virt_steal_enabled)) {
>
That has been sent, at
https://lore.kernel.org/all/20260819081207.12150-1-hongyan.xia@transsion.com/
That touches all archs and may need review from Xen folks, so I split it
into a separate patch.
>> void cfs_bandwidth_usage_inc(void)
>> {
>> - static_key_slow_inc_cpuslocked(&__cfs_bandwidth_used);
>> + static_branch_inc_cpuslocked(&__cfs_bandwidth_used);
>> }
>>
>> void cfs_bandwidth_usage_dec(void)
>> {
>> - static_key_slow_dec_cpuslocked(&__cfs_bandwidth_used);
>> + static_branch_dec_cpuslocked(&__cfs_bandwidth_used);
>> }
>> #else /* !CONFIG_JUMP_LABEL: */
>> static bool cfs_bandwidth_used(void)
>
On Wed, Aug 19, 2026 at 05:49:48PM +0530, Shrikanth Hegde wrote:
> Hi Hongyan.
>
> On 8/19/26 1:39 PM, Hongyan Xia wrote:
> > From: Hongyan Xia <hongyan.xia@transsion.com>
> >
> > __cfs_bandwidth_used uses struct static_key directly which is
> > deprecated. Fix.
>
> A bit of context on why it is deprecated would help.
>
> >
> > sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
> > deprecated, but take the opportunity to move to the new static_branch_*
> > APIs to be consistent.
> >
>
> Mark had a series to remove a few of them completely. IIRC only lazy
> check will remain.
Yeah, I have those pending. I'll smash everything together and see where
the pieces fall post -rc1.
On Wed, Aug 19, 2026 at 08:09:38AM +0000, Hongyan Xia wrote:
> From: Hongyan Xia <hongyan.xia@transsion.com>
>
> __cfs_bandwidth_used uses struct static_key directly which is
> deprecated. Fix.
>
> sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
> deprecated, but take the opportunity to move to the new static_branch_*
> APIs to be consistent.
>
> No functional change.
>
> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
> ---
Your emails are encoded in a Microsoft special quoted-printable that my
scripts don't like.
On 8/19/2026 4:44 PM, Peter Zijlstra wrote:
> On Wed, Aug 19, 2026 at 08:09:38AM +0000, Hongyan Xia wrote:
>> From: Hongyan Xia <hongyan.xia@transsion.com>
>>
>> __cfs_bandwidth_used uses struct static_key directly which is
>> deprecated. Fix.
>>
>> sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
>> deprecated, but take the opportunity to move to the new static_branch_*
>> APIs to be consistent.
>>
>> No functional change.
>>
>> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
>> ---
>
> Your emails are encoded in a Microsoft special quoted-printable that my
> scripts don't like.
Hmm, this patch was sent through the normal git format-patch and
send-email flow, which looks okay on my end and via lore. Do you have
more details so that I can debug and avoid triggering future unhappiness
in your scripts?
On Wed, Aug 19, 2026 at 09:04:03AM +0000, Hongyan Xia wrote:
> On 8/19/2026 4:44 PM, Peter Zijlstra wrote:
> > On Wed, Aug 19, 2026 at 08:09:38AM +0000, Hongyan Xia wrote:
> >> From: Hongyan Xia <hongyan.xia@transsion.com>
> >>
> >> __cfs_bandwidth_used uses struct static_key directly which is
> >> deprecated. Fix.
> >>
> >> sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
> >> deprecated, but take the opportunity to move to the new static_branch_*
> >> APIs to be consistent.
> >>
> >> No functional change.
> >>
> >> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
> >> ---
> >
> > Your emails are encoded in a Microsoft special quoted-printable that my
> > scripts don't like.
>
> Hmm, this patch was sent through the normal git format-patch and
> send-email flow, which looks okay on my end and via lore. Do you have
> more details so that I can debug and avoid triggering future unhappiness
> in your scripts?
I think I fixed the script. But what the thing did was encode '\n' as
=0A=. This is two tokens: "=0A" for the '\n' and then "=$" for a
continuation line.
It does this for every line, including the last line. Marking the last
line as having a continuation resulted in no output, it would just eat
the whole message.
Marking the last line as having a continuation is well, bonkers. But my
script should now be able to deal with it. Still, pretty idiotic
behaviour on whoever mangled that.
Hi Peter,
On 8/19/2026 5:28 PM, Peter Zijlstra wrote:
> On Wed, Aug 19, 2026 at 09:04:03AM +0000, Hongyan Xia wrote:
>> On 8/19/2026 4:44 PM, Peter Zijlstra wrote:
>>> On Wed, Aug 19, 2026 at 08:09:38AM +0000, Hongyan Xia wrote:
>>>> From: Hongyan Xia <hongyan.xia@transsion.com>
>>>>
>>>> __cfs_bandwidth_used uses struct static_key directly which is
>>>> deprecated. Fix.
>>>>
>>>> sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
>>>> deprecated, but take the opportunity to move to the new static_branch_*
>>>> APIs to be consistent.
>>>>
>>>> No functional change.
>>>>
>>>> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
>>>> ---
>>>
>>> Your emails are encoded in a Microsoft special quoted-printable that my
>>> scripts don't like.
>>
>> Hmm, this patch was sent through the normal git format-patch and
>> send-email flow, which looks okay on my end and via lore. Do you have
>> more details so that I can debug and avoid triggering future unhappiness
>> in your scripts?
>
> I think I fixed the script. But what the thing did was encode '\n' as
> =0A=. This is two tokens: "=0A" for the '\n' and then "=$" for a
> continuation line.
>
> It does this for every line, including the last line. Marking the last
> line as having a continuation resulted in no output, it would just eat
> the whole message.
>
> Marking the last line as having a continuation is well, bonkers. But my
> script should now be able to deal with it. Still, pretty idiotic
> behaviour on whoever mangled that.
While working on the latest sched/core, I noticed two of my patches
d92d1a182dc2d5dc5e4418765739f56bcbde806a, and
087b40fe5934e4b8aa80b29b3debbd6542756ffd
have both changed my name into
Author: Hongyan Xia =0A= <hongyan.xia@transsion.com>
While =0A= is certainly a cute last name, I want to ask if this has
anything to do with the Outlook fix you mentioned last time. If not,
I'll see what else could have gone wrong.
On Wed, Sep 02, 2026 at 08:18:04AM +0000, Hongyan Xia wrote:
> Hi Peter,
>
> On 8/19/2026 5:28 PM, Peter Zijlstra wrote:
> > On Wed, Aug 19, 2026 at 09:04:03AM +0000, Hongyan Xia wrote:
> >> On 8/19/2026 4:44 PM, Peter Zijlstra wrote:
> >>> On Wed, Aug 19, 2026 at 08:09:38AM +0000, Hongyan Xia wrote:
> >>>> From: Hongyan Xia <hongyan.xia@transsion.com>
> >>>>
> >>>> __cfs_bandwidth_used uses struct static_key directly which is
> >>>> deprecated. Fix.
> >>>>
> >>>> sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
> >>>> deprecated, but take the opportunity to move to the new static_branch_*
> >>>> APIs to be consistent.
> >>>>
> >>>> No functional change.
> >>>>
> >>>> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
> >>>> ---
> >>>
> >>> Your emails are encoded in a Microsoft special quoted-printable that my
> >>> scripts don't like.
> >>
> >> Hmm, this patch was sent through the normal git format-patch and
> >> send-email flow, which looks okay on my end and via lore. Do you have
> >> more details so that I can debug and avoid triggering future unhappiness
> >> in your scripts?
> >
> > I think I fixed the script. But what the thing did was encode '\n' as
> > =0A=. This is two tokens: "=0A" for the '\n' and then "=$" for a
> > continuation line.
> >
> > It does this for every line, including the last line. Marking the last
> > line as having a continuation resulted in no output, it would just eat
> > the whole message.
> >
> > Marking the last line as having a continuation is well, bonkers. But my
> > script should now be able to deal with it. Still, pretty idiotic
> > behaviour on whoever mangled that.
>
> While working on the latest sched/core, I noticed two of my patches
>
> d92d1a182dc2d5dc5e4418765739f56bcbde806a, and
> 087b40fe5934e4b8aa80b29b3debbd6542756ffd
>
> have both changed my name into
>
> Author: Hongyan Xia =0A= <hongyan.xia@transsion.com>
>
> While =0A= is certainly a cute last name, I want to ask if this has
> anything to do with the Outlook fix you mentioned last time. If not,
> I'll see what else could have gone wrong.
Argh, sorry about that. Sometimes I fail to spot issues like this. Let
me go rebase those patches and fix.
On 8/19/2026 5:28 PM, Peter Zijlstra wrote:
> On Wed, Aug 19, 2026 at 09:04:03AM +0000, Hongyan Xia wrote:
>> On 8/19/2026 4:44 PM, Peter Zijlstra wrote:
>>> On Wed, Aug 19, 2026 at 08:09:38AM +0000, Hongyan Xia wrote:
>>>> From: Hongyan Xia <hongyan.xia@transsion.com>
>>>>
>>>> __cfs_bandwidth_used uses struct static_key directly which is
>>>> deprecated. Fix.
>>>>
>>>> sk_dynamic_* uses static_key_{enable/disable}(), which aren't really
>>>> deprecated, but take the opportunity to move to the new static_branch_*
>>>> APIs to be consistent.
>>>>
>>>> No functional change.
>>>>
>>>> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
>>>> ---
>>>
>>> Your emails are encoded in a Microsoft special quoted-printable that my
>>> scripts don't like.
>>
>> Hmm, this patch was sent through the normal git format-patch and
>> send-email flow, which looks okay on my end and via lore. Do you have
>> more details so that I can debug and avoid triggering future unhappiness
>> in your scripts?
>
> I think I fixed the script. But what the thing did was encode '\n' as
> =0A=. This is two tokens: "=0A" for the '\n' and then "=$" for a
> continuation line.
>
> It does this for every line, including the last line. Marking the last
> line as having a continuation resulted in no output, it would just eat
> the whole message.
>
> Marking the last line as having a continuation is well, bonkers. But my
> script should now be able to deal with it. Still, pretty idiotic
> behaviour on whoever mangled that.
I see it now. I sent this patch again to myself and downloaded the mbox.
No such weird tokens in the original patch but they appear in the mbox I
received.
A quick search suggests this is a known issue, done during email transit
by Microsoft. This is too dumb to be true and I am shocked. Thanks a
million for fixing it on your end.
© 2016 - 2026 Red Hat, Inc.