Linux Input/HID development
 help / color / mirror / Atom feed
* Re: [PATCH bpf-next v1 03/10] bpf: Verifier support for KF_IMPLICIT_ARGS
From: Ihor Solodrai @ 2026-01-13 22:03 UTC (permalink / raw)
  To: Eduard Zingerman, Alexei Starovoitov, Andrii Nakryiko,
	Daniel Borkmann, Martin KaFai Lau
  Cc: Mykyta Yatsenko, Tejun Heo, Alan Maguire, Benjamin Tissoires,
	Jiri Kosina, bpf, linux-kernel, linux-input, sched-ext
In-Reply-To: <952853dd064d5303a7e7ec8e58028e9ee88f2fad.camel@gmail.com>

On 1/13/26 12:39 PM, Eduard Zingerman wrote:
> On Fri, 2026-01-09 at 10:48 -0800, Ihor Solodrai wrote:
>> A kernel function bpf_foo marked with KF_IMPLICIT_ARGS flag is
>> expected to have two associated types in BTF:
>>   * `bpf_foo` with a function prototype that omits implicit arguments
>>   * `bpf_foo_impl` with a function prototype that matches the kernel
>>      declaration of `bpf_foo`, but doesn't have a ksym associated with
>>      its name
>>
>> In order to support kfuncs with implicit arguments, the verifier has
>> to know how to resolve a call of `bpf_foo` to the correct BTF function
>> prototype and address.
>>
>> To implement this, in add_kfunc_call() kfunc flags are checked for
>> KF_IMPLICIT_ARGS. For such kfuncs a BTF func prototype is adjusted to
>> the one found for `bpf_foo_impl` (func_name + "_impl" suffix, by
>> convention) function in BTF.
>>
>> This effectively changes the signature of the `bpf_foo` kfunc in the
>> context of verification: from one without implicit args to the one
>> with full argument list.
>>
>> Whether a kfunc argument is implicit or not is determined by
>> is_kfunc_arg_implicit(). The values of implicit arguments by design
>> are provided by the verifier, and so they can only be of particular
>> types. In this patch the only allowed implicit arg type is a pointer
>> to struct bpf_prog_aux. The __prog args (usually void *) are also
>> considered implicit for backwards compatibility.
>>
>> In order to enable the verifier to correctly set an implicit
>> bpf_prog_aux arg value at runtime, is_kfunc_arg_prog() is extended to
>> check for the arg type. At a point when prog arg is determined in
>> check_kfunc_args() the kfunc with implicit args already has a
>> prototype with full argument list, so the existing value patch
>> mechanism just works.
>>
>> If a new kfunc with KF_IMPLICIT_ARG is declared for an existing kfunc
>> that uses a __prog argument (a legacy case), the prototype
>> substitution works in exactly the same way, assuming the kfunc follows
>> the _impl naming convention. The difference is only in how _impl
>> prototype is added to the BTF, which is not the verifier's
>> concern. See a subsequent resolve_btfids patch for details.
>>
>> In check_kfunc_call() reset the subreg_def of registers holding
>> implicit arguments to correctly track zero extensions.
>>
>> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev>
>> ---
> 
> Overall lgtm.
> 
> [...]
> 
>> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> 
> [...]
> 
>> @@ -14303,6 +14358,17 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn,
>>  	for (i = 0; i < nargs; i++) {
>>  		u32 regno = i + 1;
>>  
>> +		/*
>> +		 * Implicit kfunc arguments are set after main verification pass.
>> +		 * For correct tracking of zero-extensions we have to reset subreg_def for such
>> +		 * args. Otherwise mark_btf_func_reg_size() will be inspecting subreg_def of regs
>> +		 * from an earlier (irrelevant) point in the program, which may lead to an error
>> +		 * in opt_subreg_zext_lo32_rnd_hi32().
>> +		 */
>> +		if (unlikely(KF_IMPLICIT_ARGS & meta.kfunc_flags
>> +				&& is_kfunc_arg_implicit(desc_btf, &args[i])))
>> +			regs[regno].subreg_def = DEF_NOT_SUBREG;
>> +
> 
> Did you try doing this in `mark_reg_not_init()`?
> This function is called for R1-R5 some time prior this hunk.

> Did you try doing this in `mark_reg_not_init()`?

Just tried, it doesn't work because REG0 is considered a caller saved
register, and so it breaks the zext tracking:

        #define CALLER_SAVED_REGS 6
        static const int caller_saved[CALLER_SAVED_REGS] = {
	     BPF_REG_0, BPF_REG_1, BPF_REG_2, BPF_REG_3, BPF_REG_4, BPF_REG_5
        };

        [...]

	for (i = 0; i < CALLER_SAVED_REGS; i++)
		mark_reg_not_init(env, regs, caller_saved[i]);

CI run for the diff below (on top of this series):
https://github.com/kernel-patches/bpf/actions/runs/20972520708


diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index b4e40b87e8fa..8bbcd1466815 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -2784,6 +2784,8 @@ static void __reg_assign_32_into_64(struct bpf_reg_state *reg)
        }
 }
 
+#define DEF_NOT_SUBREG (0)
+
 /* Mark a register as having a completely unknown (scalar) value. */
 static void __mark_reg_unknown_imprecise(struct bpf_reg_state *reg)
 {
@@ -2798,6 +2800,7 @@ static void __mark_reg_unknown_imprecise(struct bpf_reg_state *reg)
        reg->var_off = tnum_unknown;
        reg->frameno = 0;
        reg->precise = false;
+       reg->subreg_def = DEF_NOT_SUBREG;
        __mark_reg_unbounded(reg);
 }
 
@@ -2892,7 +2895,6 @@ static int mark_btf_ld_reg(struct bpf_verifier_env *env,
        }
 }
 
-#define DEF_NOT_SUBREG (0)
 static void init_reg_state(struct bpf_verifier_env *env,
                           struct bpf_func_state *state)
 {
@@ -14363,17 +14365,6 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn,
        for (i = 0; i < nargs; i++) {
                u32 regno = i + 1;
 
-               /*
-                * Implicit kfunc arguments are set after main verification pass.
-                * For correct tracking of zero-extensions we have to reset subreg_def for such
-                * args. Otherwise mark_btf_func_reg_size() will be inspecting subreg_def of regs
-                * from an earlier (irrelevant) point in the program, which may lead to an error
-                * in opt_subreg_zext_lo32_rnd_hi32().
-                */
-               if (unlikely(KF_IMPLICIT_ARGS & meta.kfunc_flags
-                               && is_kfunc_arg_implicit(desc_btf, &args[i])))
-                       regs[regno].subreg_def = DEF_NOT_SUBREG;
-
                t = btf_type_skip_modifiers(desc_btf, args[i].type, NULL);
                if (btf_type_is_ptr(t))
                        mark_btf_func_reg_size(env, regno, sizeof(void *));

---

Resetting all reg args appears to be working however (see below).
CI: https://github.com/kernel-patches/bpf/actions/runs/20973490221

Should I send this as a separate patch?

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 8bbcd1466815..9dfcf3149841 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -2800,7 +2800,6 @@ static void __mark_reg_unknown_imprecise(struct bpf_reg_state *reg)
        reg->var_off = tnum_unknown;
        reg->frameno = 0;
        reg->precise = false;
-       reg->subreg_def = DEF_NOT_SUBREG;
        __mark_reg_unbounded(reg);
 }
 
@@ -14241,6 +14240,11 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn,
        for (i = 0; i < CALLER_SAVED_REGS; i++)
                mark_reg_not_init(env, regs, caller_saved[i]);
 
+       for (i = 0; i < MAX_BPF_FUNC_REG_ARGS; i++) {
+               u32 regno = i + 1;
+               regs[regno].subreg_def = DEF_NOT_SUBREG;
+       }
+
        /* Check return type */
        t = btf_type_skip_modifiers(desc_btf, meta.func_proto->type, NULL);


> What I don't like from structural point of view is:
> - `is_kfunc_arg_implicit()` depends on KF_IMPLICIT_ARGS, but that
>   check is done externally. Hence, the naming is misleading or 'meta'
>   should be passed to `is_kfunc_arg_implicit()`.
> - doing DEF_NOT_SUBREG logically has not much to do with implicit args,
>   so it is a bit confusing that is pre-conditioned like that.
> 
>>  		t = btf_type_skip_modifiers(desc_btf, args[i].type, NULL);
>>  		if (btf_type_is_ptr(t))
>>  			mark_btf_func_reg_size(env, regno, sizeof(void *));


^ permalink raw reply related

* Re: [PATCH bpf-next v1 03/10] bpf: Verifier support for KF_IMPLICIT_ARGS
From: Eduard Zingerman @ 2026-01-13 21:59 UTC (permalink / raw)
  To: Ihor Solodrai, Alexei Starovoitov, Andrii Nakryiko,
	Daniel Borkmann, Martin KaFai Lau
  Cc: Mykyta Yatsenko, Tejun Heo, Alan Maguire, Benjamin Tissoires,
	Jiri Kosina, bpf, linux-kernel, linux-input, sched-ext
In-Reply-To: <20260109184852.1089786-4-ihor.solodrai@linux.dev>

On Fri, 2026-01-09 at 10:48 -0800, Ihor Solodrai wrote:

[...]

> --- a/kernel/bpf/verifier.c
> +++ b/kernel/bpf/verifier.c
> @@ -3271,6 +3271,38 @@ static struct btf *find_kfunc_desc_btf(struct bpf_verifier_env *env, s16 offset)
>  	return btf_vmlinux ?: ERR_PTR(-ENOENT);
>  }
>  
> +#define KF_IMPL_SUFFIX "_impl"
> +
> +static const struct btf_type *find_kfunc_impl_proto(struct bpf_verifier_env *env,
> +						    struct btf *btf,
> +						    const char *func_name)
> +{
> +	char impl_name[KSYM_SYMBOL_LEN];

Oh, as we discussed already, this should use env->tmp_str_buf.

> +	const struct btf_type *func;
> +	s32 impl_id;
> +	int len;
> +
> +	len = snprintf(impl_name, sizeof(impl_name), "%s%s", func_name, KF_IMPL_SUFFIX);
> +	if (len < 0 || len >= sizeof(impl_name)) {
> +		verbose(env, "function name %s%s is too long\n", func_name, KF_IMPL_SUFFIX);
> +		return NULL;
> +	}

[...]

^ permalink raw reply

* Re: [PATCH bpf-next v1 02/10] bpf: Introduce struct bpf_kfunc_meta
From: Eduard Zingerman @ 2026-01-13 21:46 UTC (permalink / raw)
  To: Ihor Solodrai, Alexei Starovoitov, Andrii Nakryiko,
	Daniel Borkmann, Martin KaFai Lau
  Cc: Mykyta Yatsenko, Tejun Heo, Alan Maguire, Benjamin Tissoires,
	Jiri Kosina, bpf, linux-kernel, linux-input, sched-ext
In-Reply-To: <20260109184852.1089786-3-ihor.solodrai@linux.dev>

On Fri, 2026-01-09 at 10:48 -0800, Ihor Solodrai wrote:
> There is code duplication between add_kfunc_call() and
> fetch_kfunc_meta() collecting information about a kfunc from BTF.
> 
> Introduce struct bpf_kfunc_meta to hold common kfunc BTF data and
> implement fetch_kfunc_meta() to fill it in, instead of struct
> bpf_kfunc_call_arg_meta directly.
> 
> Then use these in add_kfunc_call() and (new) fetch_kfunc_arg_meta()
> functions, and fixup previous usages of fetch_kfunc_meta() to
> fetch_kfunc_arg_meta().
> 
> Besides the code dedup, this change enables add_kfunc_call() to access
> kfunc->flags.
> 
> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev>
> ---

Acked-by: Eduard Zingerman <eddyz87@gmail.com>

[...]

^ permalink raw reply

* Re: [PATCH bpf-next v1 01/10] bpf: Refactor btf_kfunc_id_set_contains
From: Eduard Zingerman @ 2026-01-13 21:43 UTC (permalink / raw)
  To: Ihor Solodrai, Alexei Starovoitov, Andrii Nakryiko,
	Daniel Borkmann, Martin KaFai Lau
  Cc: Mykyta Yatsenko, Tejun Heo, Alan Maguire, Benjamin Tissoires,
	Jiri Kosina, bpf, linux-kernel, linux-input, sched-ext
In-Reply-To: <20260109184852.1089786-2-ihor.solodrai@linux.dev>

On Fri, 2026-01-09 at 10:48 -0800, Ihor Solodrai wrote:
> btf_kfunc_id_set_contains() is called by fetch_kfunc_meta() in the BPF
> verifier to get the kfunc flags stored in the .BTF_ids ELF section.
> If it returns NULL instead of a valid pointer, it's interpreted as an
> illegal kfunc usage failing the verification.
> 
> There are two potential reasons for btf_kfunc_id_set_contains() to
> return NULL:
> 
>   1. Provided kfunc BTF id is not present in relevant kfunc id sets.
>   2. The kfunc is not allowed, as determined by the program type
>      specific filter [1].
> 
> The filter functions accept a pointer to `struct bpf_prog`, so they
> might implicitly depend on earlier stages of verification, when
> bpf_prog members are set.
> 
> For example, bpf_qdisc_kfunc_filter() in linux/net/sched/bpf_qdisc.c
> inspects prog->aux->st_ops [2], which is initialized in:
> 
>     check_attach_btf_id() -> check_struct_ops_btf_id()
> 
> So far this hasn't been an issue, because fetch_kfunc_meta() is the
> only caller of btf_kfunc_id_set_contains().
> 
> However in subsequent patches of this series it is necessary to
> inspect kfunc flags earlier in BPF verifier, in the add_kfunc_call().
> 
> To resolve this, refactor btf_kfunc_id_set_contains() into two
> interface functions:
>   * btf_kfunc_flags() that simply returns pointer to kfunc_flags
>     without applying the filters
>   * btf_kfunc_is_allowed() that both checks for kfunc_flags existence
>     (which is a requirement for a kfunc to be allowed) and applies the
>     prog filters
> 
> See [3] for the previous version of this patch.
> 
> [1] https://lore.kernel.org/all/20230519225157.760788-7-aditi.ghag@isovalent.com/
> [2] https://lore.kernel.org/all/20250409214606.2000194-4-ameryhung@gmail.com/
> [3] https://lore.kernel.org/bpf/20251029190113.3323406-3-ihor.solodrai@linux.dev/
> 
> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev>
> ---

Reviewed-by: Eduard Zingerman <eddyz87@gmail.com>

> @@ -8715,6 +8730,26 @@ static int bpf_prog_type_to_kfunc_hook(enum bpf_prog_type prog_type)
>  	}
>  }
>  
> +bool btf_kfunc_is_allowed(const struct btf *btf,
> +			  u32 kfunc_btf_id,
> +			  const struct bpf_prog *prog)
> +{

Nit: I'd just add hook parameter to btf_kfunc_flags():

     u32 *btf_kfunc_flags(const struct btf *btf, u32 kfunc_btf_id, const struct bpf_prog *prog,
                          enum btf_kfunc_hook *hook)

     and allow passing NULL there, thus avoiding duplicating logic for common hook.

> +	enum bpf_prog_type prog_type = resolve_prog_type(prog);
> +	enum btf_kfunc_hook hook;
> +	u32 *kfunc_flags;
> +
> +	kfunc_flags = btf_kfunc_id_set_contains(btf, BTF_KFUNC_HOOK_COMMON, kfunc_btf_id);
> +	if (kfunc_flags && __btf_kfunc_is_allowed(btf, BTF_KFUNC_HOOK_COMMON, kfunc_btf_id, prog))
> +		return true;
> +
> +	hook = bpf_prog_type_to_kfunc_hook(prog_type);
> +	kfunc_flags = btf_kfunc_id_set_contains(btf, hook, kfunc_btf_id);
> +	if (kfunc_flags && __btf_kfunc_is_allowed(btf, hook, kfunc_btf_id, prog))
> +		return true;
> +
> +	return false;
> +}
> +
>  /* Caution:
>   * Reference to the module (obtained using btf_try_get_module) corresponding to
>   * the struct btf *MUST* be held when calling this function from verifier

[...]

^ permalink raw reply

* Re: [PATCH bpf-next v1 03/10] bpf: Verifier support for KF_IMPLICIT_ARGS
From: Eduard Zingerman @ 2026-01-13 20:39 UTC (permalink / raw)
  To: Ihor Solodrai, Alexei Starovoitov, Andrii Nakryiko,
	Daniel Borkmann, Martin KaFai Lau
  Cc: Mykyta Yatsenko, Tejun Heo, Alan Maguire, Benjamin Tissoires,
	Jiri Kosina, bpf, linux-kernel, linux-input, sched-ext
In-Reply-To: <20260109184852.1089786-4-ihor.solodrai@linux.dev>

On Fri, 2026-01-09 at 10:48 -0800, Ihor Solodrai wrote:
> A kernel function bpf_foo marked with KF_IMPLICIT_ARGS flag is
> expected to have two associated types in BTF:
>   * `bpf_foo` with a function prototype that omits implicit arguments
>   * `bpf_foo_impl` with a function prototype that matches the kernel
>      declaration of `bpf_foo`, but doesn't have a ksym associated with
>      its name
> 
> In order to support kfuncs with implicit arguments, the verifier has
> to know how to resolve a call of `bpf_foo` to the correct BTF function
> prototype and address.
> 
> To implement this, in add_kfunc_call() kfunc flags are checked for
> KF_IMPLICIT_ARGS. For such kfuncs a BTF func prototype is adjusted to
> the one found for `bpf_foo_impl` (func_name + "_impl" suffix, by
> convention) function in BTF.
> 
> This effectively changes the signature of the `bpf_foo` kfunc in the
> context of verification: from one without implicit args to the one
> with full argument list.
> 
> Whether a kfunc argument is implicit or not is determined by
> is_kfunc_arg_implicit(). The values of implicit arguments by design
> are provided by the verifier, and so they can only be of particular
> types. In this patch the only allowed implicit arg type is a pointer
> to struct bpf_prog_aux. The __prog args (usually void *) are also
> considered implicit for backwards compatibility.
> 
> In order to enable the verifier to correctly set an implicit
> bpf_prog_aux arg value at runtime, is_kfunc_arg_prog() is extended to
> check for the arg type. At a point when prog arg is determined in
> check_kfunc_args() the kfunc with implicit args already has a
> prototype with full argument list, so the existing value patch
> mechanism just works.
> 
> If a new kfunc with KF_IMPLICIT_ARG is declared for an existing kfunc
> that uses a __prog argument (a legacy case), the prototype
> substitution works in exactly the same way, assuming the kfunc follows
> the _impl naming convention. The difference is only in how _impl
> prototype is added to the BTF, which is not the verifier's
> concern. See a subsequent resolve_btfids patch for details.
> 
> In check_kfunc_call() reset the subreg_def of registers holding
> implicit arguments to correctly track zero extensions.
> 
> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev>
> ---

Overall lgtm.

[...]

> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c

[...]

> @@ -14303,6 +14358,17 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn,
>  	for (i = 0; i < nargs; i++) {
>  		u32 regno = i + 1;
>  
> +		/*
> +		 * Implicit kfunc arguments are set after main verification pass.
> +		 * For correct tracking of zero-extensions we have to reset subreg_def for such
> +		 * args. Otherwise mark_btf_func_reg_size() will be inspecting subreg_def of regs
> +		 * from an earlier (irrelevant) point in the program, which may lead to an error
> +		 * in opt_subreg_zext_lo32_rnd_hi32().
> +		 */
> +		if (unlikely(KF_IMPLICIT_ARGS & meta.kfunc_flags
> +				&& is_kfunc_arg_implicit(desc_btf, &args[i])))
> +			regs[regno].subreg_def = DEF_NOT_SUBREG;
> +

Did you try doing this in `mark_reg_not_init()`?
This function is called for R1-R5 some time prior this hunk.
What I don't like from structural point of view is:
- `is_kfunc_arg_implicit()` depends on KF_IMPLICIT_ARGS, but that
  check is done externally. Hence, the naming is misleading or 'meta'
  should be passed to `is_kfunc_arg_implicit()`.
- doing DEF_NOT_SUBREG logically has not much to do with implicit args,
  so it is a bit confusing that is pre-conditioned like that.

>  		t = btf_type_skip_modifiers(desc_btf, args[i].type, NULL);
>  		if (btf_type_is_ptr(t))
>  			mark_btf_func_reg_size(env, regno, sizeof(void *));

^ permalink raw reply

* Re: [PATCH 2/3] drivers: input: touchscreen: edt-ft5x06: Add FocalTech FT3518
From: Dmitry Baryshkov @ 2026-01-13 19:28 UTC (permalink / raw)
  To: yedaya.ka
  Cc: SzczurekYT, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bjorn Andersson, Konrad Dybcio, linux-input,
	devicetree, linux-kernel, linux-arm-msm
In-Reply-To: <20260113-touchscreen-patches-v1-2-a10957f32dd8@gmail.com>

On Tue, Jan 13, 2026 at 09:12:36PM +0200, Yedaya Katsman via B4 Relay wrote:
> From: Yedaya Katsman <yedaya.ka@gmail.com>
> 
> The driver also works with FT3518, which supports up to 10 touch points.
>  Add compatible data for it.
> 
> Co-developed-by: SzczurekYT <szczurek@szczurek.yt>
> Signed-off-by: SzczurekYT <szczurek@szczurek.yt>

This doesn't look like a name.

> Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
> ---
>  drivers/input/touchscreen/edt-ft5x06.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 

-- 
With best wishes
Dmitry

^ permalink raw reply

* [PATCH 1/3] dt-bindings: input: touchscreen: edt-ft5x06: Add FocalTech FT3518
From: Yedaya Katsman via B4 Relay @ 2026-01-13 19:12 UTC (permalink / raw)
  To: SzczurekYT, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bjorn Andersson, Konrad Dybcio
  Cc: linux-input, devicetree, linux-kernel, linux-arm-msm,
	Yedaya Katsman
In-Reply-To: <20260113-touchscreen-patches-v1-0-a10957f32dd8@gmail.com>

From: Yedaya Katsman <yedaya.ka@gmail.com>

Document FocalTech FT3518 support by adding the compatible.

Co-developed-by: SzczurekYT <szczurek@szczurek.yt>
Signed-off-by: SzczurekYT <szczurek@szczurek.yt>
Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
---
 Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.yaml b/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.yaml
index 7d3edb58f72d84ed19fb87fdd136c97f855aba00..6f90522de8c0afbe2d9d1e04578316350f66ec58 100644
--- a/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.yaml
+++ b/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.yaml
@@ -39,6 +39,7 @@ properties:
       - edt,edt-ft5406
       - edt,edt-ft5506
       - evervision,ev-ft5726
+      - focaltech,ft3518
       - focaltech,ft5426
       - focaltech,ft5452
       - focaltech,ft6236

-- 
2.52.0



^ permalink raw reply related

* [PATCH 0/3] Support FT3518 touchscreen in xiaomi-laurel
From: Yedaya Katsman via B4 Relay @ 2026-01-13 19:12 UTC (permalink / raw)
  To: SzczurekYT, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bjorn Andersson, Konrad Dybcio
  Cc: linux-input, devicetree, linux-kernel, linux-arm-msm,
	Yedaya Katsman

Adds support for the touchscreen in the Xiaomi Mi A3 (xiaomi-laurel)
 smartphone, FocalTech FT3518

Original tree was here:
 Link: https://gitlab.postmarketos.org/SzczurekYT/linux/-/commits/laurel

Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
---
Yedaya Katsman (3):
      dt-bindings: input: touchscreen: edt-ft5x06: Add FocalTech FT3518
      drivers: input: touchscreen: edt-ft5x06: Add FocalTech FT3518
      arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Add Focaltech FT3518 touchscreen

 .../bindings/input/touchscreen/edt-ft5x06.yaml     |  1 +
 .../boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts  | 34 ++++++++++++++++++++++
 drivers/input/touchscreen/edt-ft5x06.c             |  6 ++++
 3 files changed, 41 insertions(+)
---
base-commit: b71e635feefc852405b14620a7fc58c4c80c0f73
change-id: 20260113-touchscreen-patches-beb2526bd5fb

Best regards,
-- 
Yedaya Katsman <yedaya.ka@gmail.com>



^ permalink raw reply

* [PATCH 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Add Focaltech FT3518 touchscreen
From: Yedaya Katsman via B4 Relay @ 2026-01-13 19:12 UTC (permalink / raw)
  To: SzczurekYT, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bjorn Andersson, Konrad Dybcio
  Cc: linux-input, devicetree, linux-kernel, linux-arm-msm,
	Yedaya Katsman
In-Reply-To: <20260113-touchscreen-patches-v1-0-a10957f32dd8@gmail.com>

From: Yedaya Katsman <yedaya.ka@gmail.com>

Add device tree node for the Focaltech FT3518 touchscreen on
Xiaomi Mi A3 (laurel-sprout).

Enable qupv3_id_0 and i2c2 bus that the touchscreen is on.

Co-developed-by: SzczurekYT <szczurek@szczurek.yt>
Signed-off-by: SzczurekYT <szczurek@szczurek.yt>
Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
---
 .../boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts  | 34 ++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts b/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
index 994fb0412fcbdf5466f87a325c48b697a37b514b..97feed708d3b6483eab72cfb0ae39be6f5ae3a11 100644
--- a/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
+++ b/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
@@ -119,6 +119,18 @@ active-config0 {
 			};
 		};
 	};
+
+	ts_vdd_supply: ts-vdd-supply {
+		compatible = "regulator-fixed";
+		regulator-name = "ts_vdd_supply";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+
+		gpio = <&tlmm 83 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		startup-delay-us = <70000>;
+	};
 };
 
 &hsusb_phy1 {
@@ -411,3 +423,25 @@ &usb3 {
 &usb3_dwc3 {
 	extcon = <&extcon_usb>;
 };
+
+&qupv3_id_0 {
+	status = "okay";
+};
+
+&i2c2 {
+	status = "okay";
+
+	touchscreen@38 {
+		compatible = "focaltech,ft3518";
+		reg = <0x38>;
+		interrupt-parent = <&tlmm>;
+		interrupts = <88 IRQ_TYPE_EDGE_FALLING>;
+
+		vcc-supply = <&ts_vdd_supply>;
+
+		reset-gpios = <&tlmm 87 GPIO_ACTIVE_LOW>;
+
+		touchscreen-size-x = <720>;
+		touchscreen-size-y = <1560>;
+	};
+};

-- 
2.52.0



^ permalink raw reply related

* [PATCH 2/3] drivers: input: touchscreen: edt-ft5x06: Add FocalTech FT3518
From: Yedaya Katsman via B4 Relay @ 2026-01-13 19:12 UTC (permalink / raw)
  To: SzczurekYT, Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bjorn Andersson, Konrad Dybcio
  Cc: linux-input, devicetree, linux-kernel, linux-arm-msm,
	Yedaya Katsman
In-Reply-To: <20260113-touchscreen-patches-v1-0-a10957f32dd8@gmail.com>

From: Yedaya Katsman <yedaya.ka@gmail.com>

The driver also works with FT3518, which supports up to 10 touch points.
 Add compatible data for it.

Co-developed-by: SzczurekYT <szczurek@szczurek.yt>
Signed-off-by: SzczurekYT <szczurek@szczurek.yt>
Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
---
 drivers/input/touchscreen/edt-ft5x06.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index bf498bd4dea9651ac939fe137b1c0f05e8557962..d0ab644be0069b5ab29ed037fa090a4279870193 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -1475,6 +1475,10 @@ static const struct edt_i2c_chip_data edt_ft5x06_data = {
 	.max_support_points = 5,
 };
 
+static const struct edt_i2c_chip_data edt_ft3518_data = {
+	.max_support_points = 10,
+};
+
 static const struct edt_i2c_chip_data edt_ft5452_data = {
 	.max_support_points = 5,
 };
@@ -1503,6 +1507,7 @@ static const struct i2c_device_id edt_ft5x06_ts_id[] = {
 	{ .name = "edt-ft5x06", .driver_data = (long)&edt_ft5x06_data },
 	{ .name = "edt-ft5506", .driver_data = (long)&edt_ft5506_data },
 	{ .name = "ev-ft5726", .driver_data = (long)&edt_ft5506_data },
+	{ .name = "ft3518", .driver_data = (long)&edt_ft3518_data },
 	{ .name = "ft5452", .driver_data = (long)&edt_ft5452_data },
 	/* Note no edt- prefix for compatibility with the ft6236.c driver */
 	{ .name = "ft6236", .driver_data = (long)&edt_ft6236_data },
@@ -1519,6 +1524,7 @@ static const struct of_device_id edt_ft5x06_of_match[] = {
 	{ .compatible = "edt,edt-ft5406", .data = &edt_ft5x06_data },
 	{ .compatible = "edt,edt-ft5506", .data = &edt_ft5506_data },
 	{ .compatible = "evervision,ev-ft5726", .data = &edt_ft5506_data },
+	{ .compatible = "focaltech,ft3518", .data = &edt_ft3518_data },
 	{ .compatible = "focaltech,ft5426", .data = &edt_ft5506_data },
 	{ .compatible = "focaltech,ft5452", .data = &edt_ft5452_data },
 	/* Note focaltech vendor prefix for compatibility with ft6236.c */

-- 
2.52.0



^ permalink raw reply related

* Re: [PATCH] HID: i2c-hid: override HID descriptors for some Haptick 5288 touchpads
From: kenkinming2002 @ 2026-01-13 18:08 UTC (permalink / raw)
  To: Benjamin Tissoires; +Cc: jikos, linux-input, linux-kernel
In-Reply-To: <ngcltngjjl5dc4nt5i3ui5pjvemt26kp4iqpbcpbllvwwbonfd@yspyfi423i3w>

On Tue, Jan 13, 2026 at 04:00:35PM +0100, Benjamin Tissoires wrote:
> On second thoughts, maybe we can have the HID descriptor dmi quirk in
> the kernel only. This way, the device should be presented to HID-BPF and
> the HID stack, and if there is something wrong in the descriptor, this
> shouldn't fail dramatically.

Unfortunately, this fail even more badly. The logs are consistent and
short enough that I will include one of them verbatim here but they are
also available on same github repository under logs
https://github.com/kenkinming2002/samsung-i2c-hid-bug-repro.

> [ 1976.296726] i2c_hid:i2c_hid_core_probe: i2c-hid-core.c: HID probe called for i2c 0x2c
> [ 1976.296960] i2c_hid:i2c_hid_fetch_hid_descriptor: i2c_hid_acpi i2c-SPPT2600:00: Using a HID descriptor override
> [ 1976.296965] i2c_hid:i2c_hid_fetch_hid_descriptor: i2c_hid_acpi i2c-SPPT2600:00: HID Descriptor: 1e 00 00 01 e2 01 21 00 24 00 1f 00 25 00 11 00 22 00 23 00 11 09 88 52 06 00 00 00 00 00
> [ 1976.296969] i2c_hid:i2c_hid_init_irq: i2c_hid_acpi i2c-SPPT2600:00: Requesting IRQ: 152
> [ 1976.297217] i2c_hid:i2c_hid_parse: i2c_hid_acpi i2c-SPPT2600:00: entering i2c_hid_parse
> [ 1976.297220] i2c_hid:i2c_hid_start_hwreset: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_start_hwreset
> [ 1976.297222] i2c_hid:i2c_hid_set_power: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_set_power
> [ 1976.297224] i2c_hid:i2c_hid_xfer: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_xfer: cmd=22 00 00 08
> [ 1976.357910] i2c_hid:i2c_hid_xfer: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_xfer: cmd=22 00 00 01
> [ 1976.358600] i2c_hid:i2c_hid_finish_hwreset: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_finish_hwreset: waiting...
> [ 1976.461915] i2c_hid:i2c_hid_finish_hwreset: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_finish_hwreset: finished.
> [ 1976.461925] i2c_hid:i2c_hid_set_power: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_set_power
> [ 1976.461929] i2c_hid:i2c_hid_xfer: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_xfer: cmd=22 00 00 08
> [ 1976.523047] i2c_hid:i2c_hid_parse: i2c_hid_acpi i2c-SPPT2600:00: asking HID report descriptor
> [ 1976.523057] i2c_hid:i2c_hid_xfer: i2c_hid_acpi i2c-SPPT2600:00: i2c_hid_xfer: cmd=21 00
> [ 1976.523723] i2c_hid:i2c_hid_parse: i2c_hid_acpi i2c-SPPT2600:00: Report Descriptor:
> [ 1976.523954] hid-generic 0018:0911:5288.00FC: item fetching failed at offset 0/0
> [ 1976.523970] hid-generic 0018:0911:5288.00FC: probe with driver hid-generic failed with error -22

It seems that the touchpad really does not like us only retrieving the
hid descriptor and not the report descriptor and end up returning an
empty report descriptor. We know that this is the device returning an
empty report descriptor and not me botching up my hid-bpf driver by
looking at the third line from the bottom which comes from the i2c-hid
driver:

> [ 1976.523723] i2c_hid:i2c_hid_parse: i2c_hid_acpi i2c-SPPT2600:00: Report Descriptor:

This would imply that for an user who do not have hid-bpf report
descriptor fix, he would change from having a touchpad that works most
of the time to never which is a horrible regression to have.

Judging by the fact that I seem to be the only person affected that is
on this mailing list and my full disk encryption setup which kinda
triggered this issue might not be the most common, I am okay with
keeping this as a local patch for myself.

On a side note, I have written and compiled a hid-bpf driver but not yet
figure out how to it to load even after installing it with udev-hid-bpf.
There is probably something blatantly obvious I overlooked. That is
besides the point anyway since there is no point in a hid-bpf driver if
the above issue is not fixed. I also do not know how to fill the vid and
pid field for HID_DEVICE from HID_BPF_CONFIG but that seems to me to be
only for some introspection purposes that is not used in runtime.

Thanks.

Yours sincerely,
Ken Kwok

^ permalink raw reply

* Re: [PATCH] Input: adp5589: remove a leftover header file
From: Nuno Sá @ 2026-01-13 16:57 UTC (permalink / raw)
  To: Vladimir Zapolskiy, Dmitry Torokhov
  Cc: Nuno Sá, Laurent Pinchart, Signed-off-by : Lee Jones,
	linux-input
In-Reply-To: <20260113151140.3843753-1-vz@mleia.com>

On Tue, 2026-01-13 at 17:11 +0200, Vladimir Zapolskiy wrote:
> In commit 3bdbd0858df6 ("Input: adp5589: remove the driver") the last user
> of include/linux/input/adp5589.h was removed along with the whole driver,
> thus the header file can be also removed.
> 
> Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
> ---

Thanks!

Reviewed-by: Nuno Sá <nuno.sa@analog.com>

>  include/linux/input/adp5589.h | 180 ----------------------------------
>  1 file changed, 180 deletions(-)
>  delete mode 100644 include/linux/input/adp5589.h
> 
> diff --git a/include/linux/input/adp5589.h b/include/linux/input/adp5589.h
> deleted file mode 100644
> index 0e4742c8c81e..000000000000
> --- a/include/linux/input/adp5589.h
> +++ /dev/null
> @@ -1,180 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-only */
> -/*
> - * Analog Devices ADP5589/ADP5585 I/O Expander and QWERTY Keypad Controller
> - *
> - * Copyright 2010-2011 Analog Devices Inc.
> - */
> -
> -#ifndef _ADP5589_H
> -#define _ADP5589_H
> -
> -/*
> - * ADP5589 specific GPI and Keymap defines
> - */
> -
> -#define ADP5589_KEYMAPSIZE	88
> -
> -#define ADP5589_GPI_PIN_ROW0 97
> -#define ADP5589_GPI_PIN_ROW1 98
> -#define ADP5589_GPI_PIN_ROW2 99
> -#define ADP5589_GPI_PIN_ROW3 100
> -#define ADP5589_GPI_PIN_ROW4 101
> -#define ADP5589_GPI_PIN_ROW5 102
> -#define ADP5589_GPI_PIN_ROW6 103
> -#define ADP5589_GPI_PIN_ROW7 104
> -#define ADP5589_GPI_PIN_COL0 105
> -#define ADP5589_GPI_PIN_COL1 106
> -#define ADP5589_GPI_PIN_COL2 107
> -#define ADP5589_GPI_PIN_COL3 108
> -#define ADP5589_GPI_PIN_COL4 109
> -#define ADP5589_GPI_PIN_COL5 110
> -#define ADP5589_GPI_PIN_COL6 111
> -#define ADP5589_GPI_PIN_COL7 112
> -#define ADP5589_GPI_PIN_COL8 113
> -#define ADP5589_GPI_PIN_COL9 114
> -#define ADP5589_GPI_PIN_COL10 115
> -#define GPI_LOGIC1 116
> -#define GPI_LOGIC2 117
> -
> -#define ADP5589_GPI_PIN_ROW_BASE ADP5589_GPI_PIN_ROW0
> -#define ADP5589_GPI_PIN_ROW_END ADP5589_GPI_PIN_ROW7
> -#define ADP5589_GPI_PIN_COL_BASE ADP5589_GPI_PIN_COL0
> -#define ADP5589_GPI_PIN_COL_END ADP5589_GPI_PIN_COL10
> -
> -#define ADP5589_GPI_PIN_BASE ADP5589_GPI_PIN_ROW_BASE
> -#define ADP5589_GPI_PIN_END ADP5589_GPI_PIN_COL_END
> -
> -#define ADP5589_GPIMAPSIZE_MAX (ADP5589_GPI_PIN_END - ADP5589_GPI_PIN_BASE + 1)
> -
> -/*
> - * ADP5585 specific GPI and Keymap defines
> - */
> -
> -#define ADP5585_KEYMAPSIZE	30
> -
> -#define ADP5585_GPI_PIN_ROW0 37
> -#define ADP5585_GPI_PIN_ROW1 38
> -#define ADP5585_GPI_PIN_ROW2 39
> -#define ADP5585_GPI_PIN_ROW3 40
> -#define ADP5585_GPI_PIN_ROW4 41
> -#define ADP5585_GPI_PIN_ROW5 42
> -#define ADP5585_GPI_PIN_COL0 43
> -#define ADP5585_GPI_PIN_COL1 44
> -#define ADP5585_GPI_PIN_COL2 45
> -#define ADP5585_GPI_PIN_COL3 46
> -#define ADP5585_GPI_PIN_COL4 47
> -#define GPI_LOGIC 48
> -
> -#define ADP5585_GPI_PIN_ROW_BASE ADP5585_GPI_PIN_ROW0
> -#define ADP5585_GPI_PIN_ROW_END ADP5585_GPI_PIN_ROW5
> -#define ADP5585_GPI_PIN_COL_BASE ADP5585_GPI_PIN_COL0
> -#define ADP5585_GPI_PIN_COL_END ADP5585_GPI_PIN_COL4
> -
> -#define ADP5585_GPI_PIN_BASE ADP5585_GPI_PIN_ROW_BASE
> -#define ADP5585_GPI_PIN_END ADP5585_GPI_PIN_COL_END
> -
> -#define ADP5585_GPIMAPSIZE_MAX (ADP5585_GPI_PIN_END - ADP5585_GPI_PIN_BASE + 1)
> -
> -struct adp5589_gpi_map {
> -	unsigned short pin;
> -	unsigned short sw_evt;
> -};
> -
> -/* scan_cycle_time */
> -#define ADP5589_SCAN_CYCLE_10ms		0
> -#define ADP5589_SCAN_CYCLE_20ms		1
> -#define ADP5589_SCAN_CYCLE_30ms		2
> -#define ADP5589_SCAN_CYCLE_40ms		3
> -
> -/* RESET_CFG */
> -#define RESET_PULSE_WIDTH_500us		0
> -#define RESET_PULSE_WIDTH_1ms		1
> -#define RESET_PULSE_WIDTH_2ms		2
> -#define RESET_PULSE_WIDTH_10ms		3
> -
> -#define RESET_TRIG_TIME_0ms		(0 << 2)
> -#define RESET_TRIG_TIME_1000ms		(1 << 2)
> -#define RESET_TRIG_TIME_1500ms		(2 << 2)
> -#define RESET_TRIG_TIME_2000ms		(3 << 2)
> -#define RESET_TRIG_TIME_2500ms		(4 << 2)
> -#define RESET_TRIG_TIME_3000ms		(5 << 2)
> -#define RESET_TRIG_TIME_3500ms		(6 << 2)
> -#define RESET_TRIG_TIME_4000ms		(7 << 2)
> -
> -#define RESET_PASSTHRU_EN		(1 << 5)
> -#define RESET1_POL_HIGH			(1 << 6)
> -#define RESET1_POL_LOW			(0 << 6)
> -#define RESET2_POL_HIGH			(1 << 7)
> -#define RESET2_POL_LOW			(0 << 7)
> -
> -/* ADP5589 Mask Bits:
> - * C C C C C C C C C C C | R R R R R R R R
> - * 1 9 8 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0
> - * 0
> - * ---------------- BIT ------------------
> - * 1 1 1 1 1 1 1 1 1 0 0 | 0 0 0 0 0 0 0 0
> - * 8 7 6 5 4 3 2 1 0 9 8 | 7 6 5 4 3 2 1 0
> - */
> -
> -#define ADP_ROW(x)	(1 << (x))
> -#define ADP_COL(x)	(1 << (x + 8))
> -#define ADP5589_ROW_MASK		0xFF
> -#define ADP5589_COL_MASK		0xFF
> -#define ADP5589_COL_SHIFT		8
> -#define ADP5589_MAX_ROW_NUM		7
> -#define ADP5589_MAX_COL_NUM		10
> -
> -/* ADP5585 Mask Bits:
> - * C C C C C | R R R R R R
> - * 4 3 2 1 0 | 5 4 3 2 1 0
> - *
> - * ---- BIT -- -----------
> - * 1 0 0 0 0 | 0 0 0 0 0 0
> - * 0 9 8 7 6 | 5 4 3 2 1 0
> - */
> -
> -#define ADP5585_ROW_MASK		0x3F
> -#define ADP5585_COL_MASK		0x1F
> -#define ADP5585_ROW_SHIFT		0
> -#define ADP5585_COL_SHIFT		6
> -#define ADP5585_MAX_ROW_NUM		5
> -#define ADP5585_MAX_COL_NUM		4
> -
> -#define ADP5585_ROW(x)	(1 << ((x) & ADP5585_ROW_MASK))
> -#define ADP5585_COL(x)	(1 << (((x) & ADP5585_COL_MASK) + ADP5585_COL_SHIFT))
> -
> -/* Put one of these structures in i2c_board_info platform_data */
> -
> -struct adp5589_kpad_platform_data {
> -	unsigned keypad_en_mask;	/* Keypad (Rows/Columns) enable mask */
> -	const unsigned short *keymap;	/* Pointer to keymap */
> -	unsigned short keymapsize;	/* Keymap size */
> -	bool repeat;			/* Enable key repeat */
> -	bool en_keylock;		/* Enable key lock feature (ADP5589 only)*/
> -	unsigned char unlock_key1;	/* Unlock Key 1 (ADP5589 only) */
> -	unsigned char unlock_key2;	/* Unlock Key 2 (ADP5589 only) */
> -	unsigned char unlock_timer;	/* Time in seconds [0..7] between the two unlock keys
> 0=disable (ADP5589 only) */
> -	unsigned char scan_cycle_time;	/* Time between consecutive scan cycles */
> -	unsigned char reset_cfg;	/* Reset config */
> -	unsigned short reset1_key_1;	/* Reset Key 1 */
> -	unsigned short reset1_key_2;	/* Reset Key 2 */
> -	unsigned short reset1_key_3;	/* Reset Key 3 */
> -	unsigned short reset2_key_1;	/* Reset Key 1 */
> -	unsigned short reset2_key_2;	/* Reset Key 2 */
> -	unsigned debounce_dis_mask;	/* Disable debounce mask */
> -	unsigned pull_dis_mask;		/* Disable all pull resistors mask */
> -	unsigned pullup_en_100k;	/* Pull-Up 100k Enable Mask */
> -	unsigned pullup_en_300k;	/* Pull-Up 300k Enable Mask */
> -	unsigned pulldown_en_300k;	/* Pull-Down 300k Enable Mask */
> -	const struct adp5589_gpi_map *gpimap;
> -	unsigned short gpimapsize;
> -	const struct adp5589_gpio_platform_data *gpio_data;
> -};
> -
> -struct i2c_client; /* forward declaration */
> -
> -struct adp5589_gpio_platform_data {
> -	int	gpio_start;	/* GPIO Chip base # */
> -};
> -
> -#endif

^ permalink raw reply

* Re: [PATCH bpf-next v1 04/10] resolve_btfids: Support for KF_IMPLICIT_ARGS
From: Andrii Nakryiko @ 2026-01-13 16:55 UTC (permalink / raw)
  To: Ihor Solodrai
  Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann,
	Martin KaFai Lau, Eduard Zingerman, Mykyta Yatsenko, Tejun Heo,
	Alan Maguire, Benjamin Tissoires, Jiri Kosina, bpf, linux-kernel,
	linux-input, sched-ext
In-Reply-To: <5bcd3bb1-6ed0-4ad8-9de8-46385de908cb@linux.dev>

On Mon, Jan 12, 2026 at 5:49 PM Ihor Solodrai <ihor.solodrai@linux.dev> wrote:
>
> On 1/12/26 8:51 AM, Andrii Nakryiko wrote:
> > On Fri, Jan 9, 2026 at 5:15 PM Ihor Solodrai <ihor.solodrai@linux.dev> wrote:
> >>
> >> [...]
> >>>>
> >>>> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
> >>>> index df39982f51df..b361e726fa36 100644
> >>>> --- a/tools/bpf/resolve_btfids/main.c
> >>>> +++ b/tools/bpf/resolve_btfids/main.c
> >>>> @@ -152,6 +152,18 @@ struct object {
> >>>>         int nr_typedefs;
> >>>>  };
> >>>>
> >>>> +#define KF_IMPLICIT_ARGS (1 << 16)
> >>>> +#define KF_IMPL_SUFFIX "_impl"
> >>>> +#define MAX_BPF_FUNC_REG_ARGS 5
> >>>> +#define MAX_KFUNCS 256
> >>>> +#define MAX_DECL_TAGS (MAX_KFUNCS * 4)
> >>>
> >>> can't we get that from include/linux/bpf.h? seems like
> >>> resolve_btfids's main.c include internal headers just fine, so why
> >>> duplicate definitions?
> >>
> >> Hi Andrii, thank you for a quick review.
> >>
> >> Including internal include/linux/btf.h directly doesn't work, which is
> >> probably expected.
> >>
> >> resolve_btfids is currently built with:
> >>
> >> HOSTCFLAGS_resolve_btfids += -g \
> >>           -I$(srctree)/tools/include \
> >>           -I$(srctree)/tools/include/uapi \
> >
> > so I don't know if that will solve the issue, but I don't think it
> > makes sense to build resolve_btfids using tools' version of includes.
> > tools/include is mostly for perf's benefit (maybe so that they don't
> > accidentally take some kernel-internal dependency, not sure). But
> > resolve_btfids is built for the kernel during the kernel build, we
> > should have access to full kernel headers. Try changing this and see
> > if build errors go away?
> >
> >>           -I$(LIBBPF_INCLUDE) \
> >>           -I$(SUBCMD_INCLUDE) \
> >>           $(LIBELF_FLAGS) \
> >>           -Wall -Werror
> >>
> >> If I add -I$(srctree)/include option and then
> >>
> >>     #include <linux/btf.h>
> >>
> >> A bunch of build errors happen.
> >>
> >> AFAIU we'd have to create a stripped copy of relevant headers in
> >> tools/include first.  Is that what you're suggesting?
> >
> > see above, the opposite -- just use -I$(srctree)/include directly
>
> Andrii,
>
> I made a low-effort attempt to switch away from tools/include and it
> looks like too much trouble. See a sample splat below.
>
> I think the issue is that resolve_btfids uses a couple of inherently
> user-space things (stdlib, libelf), which themselves may include
> system headers. And there is actually a difference between the kernel
> and tools/include headers. For example, check
>
>   ./include/linux/rbtree.h
> vs
>   ./tools/include/linux/rbtree.h
>
> Maybe we can make it work (with our own local tools/include?), but it
> doesn't look worth it for just a couple of constant #define-s.
>
> Let me know if I am missing something.

No, it's fine, no big deal, at least we know that it's not as simple.
Thanks for trying!

>
>
> $ make
>   INSTALL libsubcmd_headers
>   HOSTCC  /home/isolodrai/workspace/prog-aux/linux/tools/bpf/resolve_btfids/main.o
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:20:33: error: conflicting types for ‘fd_set’; have ‘__kernel_fd_set’
>    20 | typedef __kernel_fd_set         fd_set;
>       |                                 ^~~~~~
> In file included from /usr/include/sys/types.h:179,
>                  from /usr/include/stdlib.h:394,
>                  from main.c:67:
> /usr/include/sys/select.h:70:5: note: previous declaration of ‘fd_set’ with type ‘fd_set’
>    70 |   } fd_set;
>       |     ^~~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:21:33: error: conflicting types for ‘dev_t’; have ‘__kernel_dev_t’ {aka ‘unsigned int’}
>    21 | typedef __kernel_dev_t          dev_t;
>       |                                 ^~~~~
> In file included from /usr/include/stdlib.h:394,
>                  from main.c:67:
> /usr/include/sys/types.h:59:17: note: previous declaration of ‘dev_t’ with type ‘dev_t’ {aka ‘long unsigned int’}
>    59 | typedef __dev_t dev_t;
>       |                 ^~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:25:33: error: conflicting types for ‘nlink_t’; have ‘u32’ {aka ‘unsigned int’}
>    25 | typedef u32                     nlink_t;
>       |                                 ^~~~~~~
> In file included from /usr/include/stdlib.h:394,
>                  from main.c:67:
> /usr/include/sys/types.h:74:19: note: previous declaration of ‘nlink_t’ with type ‘nlink_t’ {aka ‘long unsigned int’}
>    74 | typedef __nlink_t nlink_t;
>       |                   ^~~~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:31:33: error: conflicting types for ‘timer_t’; have ‘__kernel_timer_t’ {aka ‘int’}
>    31 | typedef __kernel_timer_t        timer_t;
>       |                                 ^~~~~~~
> In file included from /usr/include/sys/types.h:130,
>                  from /usr/include/stdlib.h:394,
>                  from main.c:67:
> /usr/include/bits/types/timer_t.h:7:19: note: previous declaration of ‘timer_t’ with type ‘timer_t’ {aka ‘void *’}
>     7 | typedef __timer_t timer_t;
>       |                   ^~~~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:52:33: error: conflicting types for ‘loff_t’; have ‘__kernel_loff_t’ {aka ‘long long int’}
>    52 | typedef __kernel_loff_t         loff_t;
>       |                                 ^~~~~~
> In file included from /usr/include/stdlib.h:394,
>                  from main.c:67:
> /usr/include/sys/types.h:42:18: note: previous declaration of ‘loff_t’ with type ‘loff_t’ {aka ‘long int’}
>    42 | typedef __loff_t loff_t;
>       |                  ^~~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:53:9: error: unknown type name ‘__kernel_uoff_t’
>    53 | typedef __kernel_uoff_t         uoff_t;
>       |         ^~~~~~~~~~~~~~~
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:115:33: error: conflicting types for ‘uint64_t’; have ‘u64’ {aka ‘long long unsigned int’}
>   115 | typedef u64                     uint64_t;
>       |                                 ^~~~~~~~
> In file included from /usr/include/stdint.h:37,
>                  from /usr/lib/gcc/x86_64-redhat-linux/11/include/stdint.h:9,
>                  from /usr/include/libelf.h:32,
>                  from main.c:68:
> /usr/include/bits/stdint-uintn.h:27:20: note: previous declaration of ‘uint64_t’ with type ‘uint64_t’ {aka ‘long unsigned int’}
>    27 | typedef __uint64_t uint64_t;
>       |                    ^~~~~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:116:33: error: conflicting types for ‘u_int64_t’; have ‘u64’ {aka ‘long long unsigned int’}
>   116 | typedef u64                     u_int64_t;
>       |                                 ^~~~~~~~~
> In file included from /usr/include/stdlib.h:394,
>                  from main.c:67:
> /usr/include/sys/types.h:161:20: note: previous declaration of ‘u_int64_t’ with type ‘u_int64_t’ {aka ‘long unsigned int’}
>   161 | typedef __uint64_t u_int64_t;
>       |                    ^~~~~~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:117:33: error: conflicting types for ‘int64_t’; have ‘s64’ {aka ‘long long int’}
>   117 | typedef s64                     int64_t;
>       |                                 ^~~~~~~
> In file included from /usr/include/sys/types.h:155,
>                  from /usr/include/stdlib.h:394,
>                  from main.c:67:
> /usr/include/bits/stdint-intn.h:27:19: note: previous declaration of ‘int64_t’ with type ‘int64_t’ {aka ‘long int’}
>    27 | typedef __int64_t int64_t;
>       |                   ^~~~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:138:13: error: conflicting types for ‘blkcnt_t’; have ‘u64’ {aka ‘long long unsigned int’}
>   138 | typedef u64 blkcnt_t;
>       |             ^~~~~~~~
> In file included from /usr/include/stdlib.h:394,
>                  from main.c:67:
> /usr/include/sys/types.h:192:20: note: previous declaration of ‘blkcnt_t’ with type ‘blkcnt_t’ {aka ‘long int’}
>   192 | typedef __blkcnt_t blkcnt_t;     /* Type to count number of disk blocks.  */
>       |                    ^~~~~~~~
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/uapi/linux/stat.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:7,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/linux/types.h:266:34: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘*’ token
>   266 |         struct task_struct __rcu *task;
>       |                                  ^
> In file included from /home/isolodrai/workspace/prog-aux/linux/include/linux/cache.h:6,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/time.h:5,
>                  from /home/isolodrai/workspace/prog-aux/linux/include/linux/stat.h:19,
>                  from main.c:70:
> /home/isolodrai/workspace/prog-aux/linux/include/vdso/cache.h:5:10: fatal error: asm/cache.h: No such file or directory
>     5 | #include <asm/cache.h>
>       |          ^~~~~~~~~~~~~
> compilation terminated.
> make[1]: *** [/home/isolodrai/workspace/prog-aux/linux/tools/build/Makefile.build:86: /home/isolodrai/workspace/prog-aux/linux/tools/bpf/resolve_btfids/main.o] Error 1
> make: *** [Makefile:81: /home/isolodrai/workspace/prog-aux/linux/tools/bpf/resolve_btfids//resolve_btfids-in.o] Error 2
>
>
> >
> > [...]
> >

^ permalink raw reply

* Re: [PATCH 2/2] Input: ili210x - add support for polling mode
From: Frank Li @ 2026-01-13 16:41 UTC (permalink / raw)
  To: Marek Vasut
  Cc: linux-input, Conor Dooley, Dmitry Torokhov, Job Noorman,
	Krzysztof Kozlowski, Rob Herring, devicetree, linux-kernel,
	linux-renesas-soc
In-Reply-To: <20260112234534.225954-2-marek.vasut+renesas@mailbox.org>

On Tue, Jan 13, 2026 at 12:44:57AM +0100, Marek Vasut wrote:
> There are designs incorporating Ilitek ILI2xxx touch controller that
> do not connect interrupt pin, for example Waveshare 13.3" DSI display.
> To support such systems use polling mode for the input device when I2C
> client does not have interrupt assigned to it.
>
> Factor out ili210x_firmware_update_noirq() to allow conditional scoped
> guard around this code. The scoped guard has to be applied only in case
> the IRQ line is connected, and not applied otherwise.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
> ---
> Cc: Conor Dooley <conor+dt@kernel.org>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Frank Li <Frank.Li@nxp.com>
> Cc: Job Noorman <job@noorman.info>
> Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
> Cc: Rob Herring <robh@kernel.org>
> Cc: devicetree@vger.kernel.org
> Cc: linux-input@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: linux-renesas-soc@vger.kernel.org
> ---
>  drivers/input/touchscreen/ili210x.c | 84 ++++++++++++++++++++---------
>  1 file changed, 60 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c
> index fa38d70aded7b..3220848a4b843 100644
> --- a/drivers/input/touchscreen/ili210x.c
> +++ b/drivers/input/touchscreen/ili210x.c
> @@ -327,9 +327,8 @@ static bool ili210x_report_events(struct ili210x *priv, u8 *touchdata)
>  	return contact;
>  }
>
> -static irqreturn_t ili210x_irq(int irq, void *irq_data)
> +static void ili210x_process_events(struct ili210x *priv)
>  {
> -	struct ili210x *priv = irq_data;
>  	struct i2c_client *client = priv->client;
>  	const struct ili2xxx_chip *chip = priv->chip;
>  	u8 touchdata[ILI210X_DATA_SIZE] = { 0 };
> @@ -356,8 +355,22 @@ static irqreturn_t ili210x_irq(int irq, void *irq_data)
>  				usleep_range(time_delta, time_delta + 1000);
>  		}
>  	} while (!priv->stop && keep_polling);
> +}
> +
> +static irqreturn_t ili210x_irq(int irq, void *irq_data)
> +{
> +	struct ili210x *priv = irq_data;
> +
> +	ili210x_process_events(priv);
>
>  	return IRQ_HANDLED;
> +};
> +
> +static void ili210x_work_i2c_poll(struct input_dev *input)
> +{
> +	struct ili210x *priv = input_get_drvdata(input);
> +
> +	ili210x_process_events(priv);
>  }
>
>  static int ili251x_firmware_update_resolution(struct device *dev)
> @@ -829,12 +842,32 @@ static int ili210x_do_firmware_update(struct ili210x *priv,
>  	return 0;
>  }
>
> +static ssize_t ili210x_firmware_update_noirq(struct device *dev,
> +					     const u8 *fwbuf, u16 ac_end, u16 df_end)
> +{
> +	struct i2c_client *client = to_i2c_client(dev);
> +	struct ili210x *priv = i2c_get_clientdata(client);
> +	const char *fwname = ILI251X_FW_FILENAME;
> +	int error;
> +
> +	dev_dbg(dev, "Firmware update started, firmware=%s\n", fwname);
> +
> +	ili210x_hardware_reset(priv->reset_gpio);
> +
> +	error = ili210x_do_firmware_update(priv, fwbuf, ac_end, df_end);
> +
> +	ili210x_hardware_reset(priv->reset_gpio);
> +
> +	dev_dbg(dev, "Firmware update ended, error=%i\n", error);
> +
> +	return error;
> +}
> +
>  static ssize_t ili210x_firmware_update_store(struct device *dev,
>  					     struct device_attribute *attr,
>  					     const char *buf, size_t count)
>  {
>  	struct i2c_client *client = to_i2c_client(dev);
> -	struct ili210x *priv = i2c_get_clientdata(client);
>  	const char *fwname = ILI251X_FW_FILENAME;
>  	u16 ac_end, df_end;
>  	int error;
> @@ -860,16 +893,12 @@ static ssize_t ili210x_firmware_update_store(struct device *dev,
>  	 * the touch controller to disable the IRQs during update, so we have
>  	 * to do it this way here.
>  	 */
> -	scoped_guard(disable_irq, &client->irq) {
> -		dev_dbg(dev, "Firmware update started, firmware=%s\n", fwname);
> -
> -		ili210x_hardware_reset(priv->reset_gpio);
> -
> -		error = ili210x_do_firmware_update(priv, fwbuf, ac_end, df_end);
> -
> -		ili210x_hardware_reset(priv->reset_gpio);
> -
> -		dev_dbg(dev, "Firmware update ended, error=%i\n", error);
> +	if (!client->irq) {
> +		scoped_guard(disable_irq, &client->irq) {
> +			error = ili210x_firmware_update_noirq(dev, fwbuf, ac_end, df_end);
> +		}
> +	} else {
> +		error = ili210x_firmware_update_noirq(dev, fwbuf, ac_end, df_end);
>  	}
>
>  	return error ?: count;
> @@ -947,11 +976,6 @@ static int ili210x_i2c_probe(struct i2c_client *client)
>  		return -ENODEV;
>  	}
>
> -	if (client->irq <= 0) {
> -		dev_err(dev, "No IRQ!\n");
> -		return -EINVAL;
> -	}
> -
>  	reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
>  	if (IS_ERR(reset_gpio))
>  		return PTR_ERR(reset_gpio);
> @@ -1003,12 +1027,24 @@ static int ili210x_i2c_probe(struct i2c_client *client)
>  		return error;
>  	}
>
> -	error = devm_request_threaded_irq(dev, client->irq, NULL, ili210x_irq,
> -					  IRQF_ONESHOT, client->name, priv);
> -	if (error) {
> -		dev_err(dev, "Unable to request touchscreen IRQ, err: %d\n",
> -			error);
> -		return error;
> +	input_set_drvdata(input, priv);
> +
> +	if (client->irq) {

0 is validated irq number

https://elixir.bootlin.com/linux/v6.19-rc4/source/drivers/base/platform.c#L284

if (irq < 0)

But it is strange that touch don't connect irq line althougth it works,
touch generally is wakeup source of system.

Frank

> +		error = devm_request_threaded_irq(dev, client->irq, NULL, ili210x_irq,
> +						  IRQF_ONESHOT, client->name, priv);
> +		if (error) {
> +			dev_err(dev, "Unable to request touchscreen IRQ, err: %d\n",
> +				error);
> +			return error;
> +		}
> +	} else {
> +		error = input_setup_polling(input, ili210x_work_i2c_poll);
> +		if (error) {
> +			dev_err(dev, "Could not set up polling mode, err: %d\n",
> +				error);
> +			return error;
> +		}
> +		input_set_poll_interval(input, ILI2XXX_POLL_PERIOD);
>  	}
>
>  	error = devm_add_action_or_reset(dev, ili210x_stop, priv);
> --
> 2.51.0
>

^ permalink raw reply

* Re: [PATCH 1/2] dt-bindings: touchscreen: trivial-touch: Drop 'interrupts' requirement for old Ilitek
From: Frank Li @ 2026-01-13 16:35 UTC (permalink / raw)
  To: Marek Vasut
  Cc: linux-input, Conor Dooley, Dmitry Torokhov, Job Noorman,
	Krzysztof Kozlowski, Rob Herring, devicetree, linux-kernel,
	linux-renesas-soc
In-Reply-To: <20260112234534.225954-1-marek.vasut+renesas@mailbox.org>

On Tue, Jan 13, 2026 at 12:44:56AM +0100, Marek Vasut wrote:
> The old Ilitek touch controllers V3 and V6 can operate without
> interrupt line, in polling mode. Drop the 'interrupts' property
> requirement for those four controllers.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
> ---
> Cc: Conor Dooley <conor+dt@kernel.org>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Frank Li <Frank.Li@nxp.com>
> Cc: Job Noorman <job@noorman.info>
> Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
> Cc: Rob Herring <robh@kernel.org>
> Cc: devicetree@vger.kernel.org
> Cc: linux-input@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: linux-renesas-soc@vger.kernel.org
> ---
>  .../input/touchscreen/trivial-touch.yaml      | 20 +++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/input/touchscreen/trivial-touch.yaml b/Documentation/devicetree/bindings/input/touchscreen/trivial-touch.yaml
> index fa27c6754ca4e..a2145a62f9723 100644
> --- a/Documentation/devicetree/bindings/input/touchscreen/trivial-touch.yaml
> +++ b/Documentation/devicetree/bindings/input/touchscreen/trivial-touch.yaml
> @@ -57,13 +57,25 @@ properties:
>
>    wakeup-source: true
>
> -allOf:
> -  - $ref: touchscreen.yaml
> -
>  required:
>    - compatible
>    - reg
> -  - interrupts
> +
> +allOf:
> +  - $ref: touchscreen.yaml
> +  - if:
> +      not:
> +        properties:
> +          compatible:
> +            contains:
> +              enum:
> +                - ilitek,ili210x
> +                - ilitek,ili2117
> +                - ilitek,ili2120
> +                - ilitek,ili251x
> +    then:
> +      required:
> +        - interrupts

Generally, if there are special requirements, move these to dedicated
yaml file to avoid complex if-else in trivial-touch.yaml.

Frank

>
>  unevaluatedProperties: false
>
> --
> 2.51.0
>

^ permalink raw reply

* Re: [PATCH] Input: adp5589: remove a leftover header file
From: Laurent Pinchart @ 2026-01-13 15:44 UTC (permalink / raw)
  To: Vladimir Zapolskiy
  Cc: Dmitry Torokhov, Nuno Sá, Signed-off-by : Lee Jones,
	linux-input
In-Reply-To: <20260113151140.3843753-1-vz@mleia.com>

On Tue, Jan 13, 2026 at 05:11:40PM +0200, Vladimir Zapolskiy wrote:
> In commit 3bdbd0858df6 ("Input: adp5589: remove the driver") the last user
> of include/linux/input/adp5589.h was removed along with the whole driver,
> thus the header file can be also removed.
> 

Maybe add

Fixes: 3bdbd0858df6 ("Input: adp5589: remove the driver")

> Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  include/linux/input/adp5589.h | 180 ----------------------------------
>  1 file changed, 180 deletions(-)
>  delete mode 100644 include/linux/input/adp5589.h
> 
> diff --git a/include/linux/input/adp5589.h b/include/linux/input/adp5589.h
> deleted file mode 100644
> index 0e4742c8c81e..000000000000
> --- a/include/linux/input/adp5589.h
> +++ /dev/null
> @@ -1,180 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-only */
> -/*
> - * Analog Devices ADP5589/ADP5585 I/O Expander and QWERTY Keypad Controller
> - *
> - * Copyright 2010-2011 Analog Devices Inc.
> - */
> -
> -#ifndef _ADP5589_H
> -#define _ADP5589_H
> -
> -/*
> - * ADP5589 specific GPI and Keymap defines
> - */
> -
> -#define ADP5589_KEYMAPSIZE	88
> -
> -#define ADP5589_GPI_PIN_ROW0 97
> -#define ADP5589_GPI_PIN_ROW1 98
> -#define ADP5589_GPI_PIN_ROW2 99
> -#define ADP5589_GPI_PIN_ROW3 100
> -#define ADP5589_GPI_PIN_ROW4 101
> -#define ADP5589_GPI_PIN_ROW5 102
> -#define ADP5589_GPI_PIN_ROW6 103
> -#define ADP5589_GPI_PIN_ROW7 104
> -#define ADP5589_GPI_PIN_COL0 105
> -#define ADP5589_GPI_PIN_COL1 106
> -#define ADP5589_GPI_PIN_COL2 107
> -#define ADP5589_GPI_PIN_COL3 108
> -#define ADP5589_GPI_PIN_COL4 109
> -#define ADP5589_GPI_PIN_COL5 110
> -#define ADP5589_GPI_PIN_COL6 111
> -#define ADP5589_GPI_PIN_COL7 112
> -#define ADP5589_GPI_PIN_COL8 113
> -#define ADP5589_GPI_PIN_COL9 114
> -#define ADP5589_GPI_PIN_COL10 115
> -#define GPI_LOGIC1 116
> -#define GPI_LOGIC2 117
> -
> -#define ADP5589_GPI_PIN_ROW_BASE ADP5589_GPI_PIN_ROW0
> -#define ADP5589_GPI_PIN_ROW_END ADP5589_GPI_PIN_ROW7
> -#define ADP5589_GPI_PIN_COL_BASE ADP5589_GPI_PIN_COL0
> -#define ADP5589_GPI_PIN_COL_END ADP5589_GPI_PIN_COL10
> -
> -#define ADP5589_GPI_PIN_BASE ADP5589_GPI_PIN_ROW_BASE
> -#define ADP5589_GPI_PIN_END ADP5589_GPI_PIN_COL_END
> -
> -#define ADP5589_GPIMAPSIZE_MAX (ADP5589_GPI_PIN_END - ADP5589_GPI_PIN_BASE + 1)
> -
> -/*
> - * ADP5585 specific GPI and Keymap defines
> - */
> -
> -#define ADP5585_KEYMAPSIZE	30
> -
> -#define ADP5585_GPI_PIN_ROW0 37
> -#define ADP5585_GPI_PIN_ROW1 38
> -#define ADP5585_GPI_PIN_ROW2 39
> -#define ADP5585_GPI_PIN_ROW3 40
> -#define ADP5585_GPI_PIN_ROW4 41
> -#define ADP5585_GPI_PIN_ROW5 42
> -#define ADP5585_GPI_PIN_COL0 43
> -#define ADP5585_GPI_PIN_COL1 44
> -#define ADP5585_GPI_PIN_COL2 45
> -#define ADP5585_GPI_PIN_COL3 46
> -#define ADP5585_GPI_PIN_COL4 47
> -#define GPI_LOGIC 48
> -
> -#define ADP5585_GPI_PIN_ROW_BASE ADP5585_GPI_PIN_ROW0
> -#define ADP5585_GPI_PIN_ROW_END ADP5585_GPI_PIN_ROW5
> -#define ADP5585_GPI_PIN_COL_BASE ADP5585_GPI_PIN_COL0
> -#define ADP5585_GPI_PIN_COL_END ADP5585_GPI_PIN_COL4
> -
> -#define ADP5585_GPI_PIN_BASE ADP5585_GPI_PIN_ROW_BASE
> -#define ADP5585_GPI_PIN_END ADP5585_GPI_PIN_COL_END
> -
> -#define ADP5585_GPIMAPSIZE_MAX (ADP5585_GPI_PIN_END - ADP5585_GPI_PIN_BASE + 1)
> -
> -struct adp5589_gpi_map {
> -	unsigned short pin;
> -	unsigned short sw_evt;
> -};
> -
> -/* scan_cycle_time */
> -#define ADP5589_SCAN_CYCLE_10ms		0
> -#define ADP5589_SCAN_CYCLE_20ms		1
> -#define ADP5589_SCAN_CYCLE_30ms		2
> -#define ADP5589_SCAN_CYCLE_40ms		3
> -
> -/* RESET_CFG */
> -#define RESET_PULSE_WIDTH_500us		0
> -#define RESET_PULSE_WIDTH_1ms		1
> -#define RESET_PULSE_WIDTH_2ms		2
> -#define RESET_PULSE_WIDTH_10ms		3
> -
> -#define RESET_TRIG_TIME_0ms		(0 << 2)
> -#define RESET_TRIG_TIME_1000ms		(1 << 2)
> -#define RESET_TRIG_TIME_1500ms		(2 << 2)
> -#define RESET_TRIG_TIME_2000ms		(3 << 2)
> -#define RESET_TRIG_TIME_2500ms		(4 << 2)
> -#define RESET_TRIG_TIME_3000ms		(5 << 2)
> -#define RESET_TRIG_TIME_3500ms		(6 << 2)
> -#define RESET_TRIG_TIME_4000ms		(7 << 2)
> -
> -#define RESET_PASSTHRU_EN		(1 << 5)
> -#define RESET1_POL_HIGH			(1 << 6)
> -#define RESET1_POL_LOW			(0 << 6)
> -#define RESET2_POL_HIGH			(1 << 7)
> -#define RESET2_POL_LOW			(0 << 7)
> -
> -/* ADP5589 Mask Bits:
> - * C C C C C C C C C C C | R R R R R R R R
> - * 1 9 8 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0
> - * 0
> - * ---------------- BIT ------------------
> - * 1 1 1 1 1 1 1 1 1 0 0 | 0 0 0 0 0 0 0 0
> - * 8 7 6 5 4 3 2 1 0 9 8 | 7 6 5 4 3 2 1 0
> - */
> -
> -#define ADP_ROW(x)	(1 << (x))
> -#define ADP_COL(x)	(1 << (x + 8))
> -#define ADP5589_ROW_MASK		0xFF
> -#define ADP5589_COL_MASK		0xFF
> -#define ADP5589_COL_SHIFT		8
> -#define ADP5589_MAX_ROW_NUM		7
> -#define ADP5589_MAX_COL_NUM		10
> -
> -/* ADP5585 Mask Bits:
> - * C C C C C | R R R R R R
> - * 4 3 2 1 0 | 5 4 3 2 1 0
> - *
> - * ---- BIT -- -----------
> - * 1 0 0 0 0 | 0 0 0 0 0 0
> - * 0 9 8 7 6 | 5 4 3 2 1 0
> - */
> -
> -#define ADP5585_ROW_MASK		0x3F
> -#define ADP5585_COL_MASK		0x1F
> -#define ADP5585_ROW_SHIFT		0
> -#define ADP5585_COL_SHIFT		6
> -#define ADP5585_MAX_ROW_NUM		5
> -#define ADP5585_MAX_COL_NUM		4
> -
> -#define ADP5585_ROW(x)	(1 << ((x) & ADP5585_ROW_MASK))
> -#define ADP5585_COL(x)	(1 << (((x) & ADP5585_COL_MASK) + ADP5585_COL_SHIFT))
> -
> -/* Put one of these structures in i2c_board_info platform_data */
> -
> -struct adp5589_kpad_platform_data {
> -	unsigned keypad_en_mask;	/* Keypad (Rows/Columns) enable mask */
> -	const unsigned short *keymap;	/* Pointer to keymap */
> -	unsigned short keymapsize;	/* Keymap size */
> -	bool repeat;			/* Enable key repeat */
> -	bool en_keylock;		/* Enable key lock feature (ADP5589 only)*/
> -	unsigned char unlock_key1;	/* Unlock Key 1 (ADP5589 only) */
> -	unsigned char unlock_key2;	/* Unlock Key 2 (ADP5589 only) */
> -	unsigned char unlock_timer;	/* Time in seconds [0..7] between the two unlock keys 0=disable (ADP5589 only) */
> -	unsigned char scan_cycle_time;	/* Time between consecutive scan cycles */
> -	unsigned char reset_cfg;	/* Reset config */
> -	unsigned short reset1_key_1;	/* Reset Key 1 */
> -	unsigned short reset1_key_2;	/* Reset Key 2 */
> -	unsigned short reset1_key_3;	/* Reset Key 3 */
> -	unsigned short reset2_key_1;	/* Reset Key 1 */
> -	unsigned short reset2_key_2;	/* Reset Key 2 */
> -	unsigned debounce_dis_mask;	/* Disable debounce mask */
> -	unsigned pull_dis_mask;		/* Disable all pull resistors mask */
> -	unsigned pullup_en_100k;	/* Pull-Up 100k Enable Mask */
> -	unsigned pullup_en_300k;	/* Pull-Up 300k Enable Mask */
> -	unsigned pulldown_en_300k;	/* Pull-Down 300k Enable Mask */
> -	const struct adp5589_gpi_map *gpimap;
> -	unsigned short gpimapsize;
> -	const struct adp5589_gpio_platform_data *gpio_data;
> -};
> -
> -struct i2c_client; /* forward declaration */
> -
> -struct adp5589_gpio_platform_data {
> -	int	gpio_start;	/* GPIO Chip base # */
> -};
> -
> -#endif

-- 
Regards,

Laurent Pinchart

^ permalink raw reply

* [PATCH] Input: adp5589: remove a leftover header file
From: Vladimir Zapolskiy @ 2026-01-13 15:11 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Nuno Sá, Laurent Pinchart, Signed-off-by : Lee Jones,
	linux-input

In commit 3bdbd0858df6 ("Input: adp5589: remove the driver") the last user
of include/linux/input/adp5589.h was removed along with the whole driver,
thus the header file can be also removed.

Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
---
 include/linux/input/adp5589.h | 180 ----------------------------------
 1 file changed, 180 deletions(-)
 delete mode 100644 include/linux/input/adp5589.h

diff --git a/include/linux/input/adp5589.h b/include/linux/input/adp5589.h
deleted file mode 100644
index 0e4742c8c81e..000000000000
--- a/include/linux/input/adp5589.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Analog Devices ADP5589/ADP5585 I/O Expander and QWERTY Keypad Controller
- *
- * Copyright 2010-2011 Analog Devices Inc.
- */
-
-#ifndef _ADP5589_H
-#define _ADP5589_H
-
-/*
- * ADP5589 specific GPI and Keymap defines
- */
-
-#define ADP5589_KEYMAPSIZE	88
-
-#define ADP5589_GPI_PIN_ROW0 97
-#define ADP5589_GPI_PIN_ROW1 98
-#define ADP5589_GPI_PIN_ROW2 99
-#define ADP5589_GPI_PIN_ROW3 100
-#define ADP5589_GPI_PIN_ROW4 101
-#define ADP5589_GPI_PIN_ROW5 102
-#define ADP5589_GPI_PIN_ROW6 103
-#define ADP5589_GPI_PIN_ROW7 104
-#define ADP5589_GPI_PIN_COL0 105
-#define ADP5589_GPI_PIN_COL1 106
-#define ADP5589_GPI_PIN_COL2 107
-#define ADP5589_GPI_PIN_COL3 108
-#define ADP5589_GPI_PIN_COL4 109
-#define ADP5589_GPI_PIN_COL5 110
-#define ADP5589_GPI_PIN_COL6 111
-#define ADP5589_GPI_PIN_COL7 112
-#define ADP5589_GPI_PIN_COL8 113
-#define ADP5589_GPI_PIN_COL9 114
-#define ADP5589_GPI_PIN_COL10 115
-#define GPI_LOGIC1 116
-#define GPI_LOGIC2 117
-
-#define ADP5589_GPI_PIN_ROW_BASE ADP5589_GPI_PIN_ROW0
-#define ADP5589_GPI_PIN_ROW_END ADP5589_GPI_PIN_ROW7
-#define ADP5589_GPI_PIN_COL_BASE ADP5589_GPI_PIN_COL0
-#define ADP5589_GPI_PIN_COL_END ADP5589_GPI_PIN_COL10
-
-#define ADP5589_GPI_PIN_BASE ADP5589_GPI_PIN_ROW_BASE
-#define ADP5589_GPI_PIN_END ADP5589_GPI_PIN_COL_END
-
-#define ADP5589_GPIMAPSIZE_MAX (ADP5589_GPI_PIN_END - ADP5589_GPI_PIN_BASE + 1)
-
-/*
- * ADP5585 specific GPI and Keymap defines
- */
-
-#define ADP5585_KEYMAPSIZE	30
-
-#define ADP5585_GPI_PIN_ROW0 37
-#define ADP5585_GPI_PIN_ROW1 38
-#define ADP5585_GPI_PIN_ROW2 39
-#define ADP5585_GPI_PIN_ROW3 40
-#define ADP5585_GPI_PIN_ROW4 41
-#define ADP5585_GPI_PIN_ROW5 42
-#define ADP5585_GPI_PIN_COL0 43
-#define ADP5585_GPI_PIN_COL1 44
-#define ADP5585_GPI_PIN_COL2 45
-#define ADP5585_GPI_PIN_COL3 46
-#define ADP5585_GPI_PIN_COL4 47
-#define GPI_LOGIC 48
-
-#define ADP5585_GPI_PIN_ROW_BASE ADP5585_GPI_PIN_ROW0
-#define ADP5585_GPI_PIN_ROW_END ADP5585_GPI_PIN_ROW5
-#define ADP5585_GPI_PIN_COL_BASE ADP5585_GPI_PIN_COL0
-#define ADP5585_GPI_PIN_COL_END ADP5585_GPI_PIN_COL4
-
-#define ADP5585_GPI_PIN_BASE ADP5585_GPI_PIN_ROW_BASE
-#define ADP5585_GPI_PIN_END ADP5585_GPI_PIN_COL_END
-
-#define ADP5585_GPIMAPSIZE_MAX (ADP5585_GPI_PIN_END - ADP5585_GPI_PIN_BASE + 1)
-
-struct adp5589_gpi_map {
-	unsigned short pin;
-	unsigned short sw_evt;
-};
-
-/* scan_cycle_time */
-#define ADP5589_SCAN_CYCLE_10ms		0
-#define ADP5589_SCAN_CYCLE_20ms		1
-#define ADP5589_SCAN_CYCLE_30ms		2
-#define ADP5589_SCAN_CYCLE_40ms		3
-
-/* RESET_CFG */
-#define RESET_PULSE_WIDTH_500us		0
-#define RESET_PULSE_WIDTH_1ms		1
-#define RESET_PULSE_WIDTH_2ms		2
-#define RESET_PULSE_WIDTH_10ms		3
-
-#define RESET_TRIG_TIME_0ms		(0 << 2)
-#define RESET_TRIG_TIME_1000ms		(1 << 2)
-#define RESET_TRIG_TIME_1500ms		(2 << 2)
-#define RESET_TRIG_TIME_2000ms		(3 << 2)
-#define RESET_TRIG_TIME_2500ms		(4 << 2)
-#define RESET_TRIG_TIME_3000ms		(5 << 2)
-#define RESET_TRIG_TIME_3500ms		(6 << 2)
-#define RESET_TRIG_TIME_4000ms		(7 << 2)
-
-#define RESET_PASSTHRU_EN		(1 << 5)
-#define RESET1_POL_HIGH			(1 << 6)
-#define RESET1_POL_LOW			(0 << 6)
-#define RESET2_POL_HIGH			(1 << 7)
-#define RESET2_POL_LOW			(0 << 7)
-
-/* ADP5589 Mask Bits:
- * C C C C C C C C C C C | R R R R R R R R
- * 1 9 8 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0
- * 0
- * ---------------- BIT ------------------
- * 1 1 1 1 1 1 1 1 1 0 0 | 0 0 0 0 0 0 0 0
- * 8 7 6 5 4 3 2 1 0 9 8 | 7 6 5 4 3 2 1 0
- */
-
-#define ADP_ROW(x)	(1 << (x))
-#define ADP_COL(x)	(1 << (x + 8))
-#define ADP5589_ROW_MASK		0xFF
-#define ADP5589_COL_MASK		0xFF
-#define ADP5589_COL_SHIFT		8
-#define ADP5589_MAX_ROW_NUM		7
-#define ADP5589_MAX_COL_NUM		10
-
-/* ADP5585 Mask Bits:
- * C C C C C | R R R R R R
- * 4 3 2 1 0 | 5 4 3 2 1 0
- *
- * ---- BIT -- -----------
- * 1 0 0 0 0 | 0 0 0 0 0 0
- * 0 9 8 7 6 | 5 4 3 2 1 0
- */
-
-#define ADP5585_ROW_MASK		0x3F
-#define ADP5585_COL_MASK		0x1F
-#define ADP5585_ROW_SHIFT		0
-#define ADP5585_COL_SHIFT		6
-#define ADP5585_MAX_ROW_NUM		5
-#define ADP5585_MAX_COL_NUM		4
-
-#define ADP5585_ROW(x)	(1 << ((x) & ADP5585_ROW_MASK))
-#define ADP5585_COL(x)	(1 << (((x) & ADP5585_COL_MASK) + ADP5585_COL_SHIFT))
-
-/* Put one of these structures in i2c_board_info platform_data */
-
-struct adp5589_kpad_platform_data {
-	unsigned keypad_en_mask;	/* Keypad (Rows/Columns) enable mask */
-	const unsigned short *keymap;	/* Pointer to keymap */
-	unsigned short keymapsize;	/* Keymap size */
-	bool repeat;			/* Enable key repeat */
-	bool en_keylock;		/* Enable key lock feature (ADP5589 only)*/
-	unsigned char unlock_key1;	/* Unlock Key 1 (ADP5589 only) */
-	unsigned char unlock_key2;	/* Unlock Key 2 (ADP5589 only) */
-	unsigned char unlock_timer;	/* Time in seconds [0..7] between the two unlock keys 0=disable (ADP5589 only) */
-	unsigned char scan_cycle_time;	/* Time between consecutive scan cycles */
-	unsigned char reset_cfg;	/* Reset config */
-	unsigned short reset1_key_1;	/* Reset Key 1 */
-	unsigned short reset1_key_2;	/* Reset Key 2 */
-	unsigned short reset1_key_3;	/* Reset Key 3 */
-	unsigned short reset2_key_1;	/* Reset Key 1 */
-	unsigned short reset2_key_2;	/* Reset Key 2 */
-	unsigned debounce_dis_mask;	/* Disable debounce mask */
-	unsigned pull_dis_mask;		/* Disable all pull resistors mask */
-	unsigned pullup_en_100k;	/* Pull-Up 100k Enable Mask */
-	unsigned pullup_en_300k;	/* Pull-Up 300k Enable Mask */
-	unsigned pulldown_en_300k;	/* Pull-Down 300k Enable Mask */
-	const struct adp5589_gpi_map *gpimap;
-	unsigned short gpimapsize;
-	const struct adp5589_gpio_platform_data *gpio_data;
-};
-
-struct i2c_client; /* forward declaration */
-
-struct adp5589_gpio_platform_data {
-	int	gpio_start;	/* GPIO Chip base # */
-};
-
-#endif
-- 
2.51.0


^ permalink raw reply related

* Re: [PATCH] HID: i2c-hid: override HID descriptors for some Haptick 5288 touchpads
From: Benjamin Tissoires @ 2026-01-13 15:00 UTC (permalink / raw)
  To: kenkinming2002; +Cc: jikos, linux-input, linux-kernel
In-Reply-To: <aWZEST09jJlVZOzq@anonymous>

On Jan 13 2026, kenkinming2002@gmail.com wrote:
> On Thu, Jan 08, 2026 at 02:14:29AM +0800, kenkinming2002@gmail.com wrote:
> > > The simplest "solution" following what you are doing is making a HID-BPF
> > > fixup which checks whether the device properly sent the report
> > > descriptor and if not puts the one here. The HID-BPF has the advantage
> > > of being compatible with hid-multitouch so you won't get into troubles
> > > with a separate module.
> > This might be a solution but would that not only fix it just for me? I
> > would have to look into how to do HID-BPF fixup.
> An update, I have looked into HID-BPF but it seems to me that we can
> only fix up the HID report descriptor and not the HID descriptor (this
> descriptor is specific to i2c-hid device) but from my testing both
> descriptor can be corrupted. Specifically, I see messages such as:
> 
>   i2c_hid_acpi i2c-SPPT2600:00: unexpected HID descriptor bcdVersion (0x0209)
>   i2c_hid_acpi i2c-SPPT2600:00: Failed to fetch the HID Descriptor
> 
> appearing in my log.
> 
> For now, I am just going to just apply the patch locally for myself till
> a better solution come up.

On second thoughts, maybe we can have the HID descriptor dmi quirk in
the kernel only. This way, the device should be presented to HID-BPF and
the HID stack, and if there is something wrong in the descriptor, this
shouldn't fail dramatically.

The HID descriptor is something specific to i2c-hid, so it's fine
"fixing" it there. The report descriptor can be fixed later on I think.

Cheers,
Benjamin

> 
> I have finally clean up the pile of garbage I have while investigating
> the problem and put up a proper git repository with relevant script and
> logs at https://github.com/kenkinming2002/samsung-i2c-hid-bug-repro.git.
> 
> Huge thanks to Benjamin and anyway who might have stumbled across this
> patch for your time.
> 
> Yours sincerly,
> Ken Kwok

^ permalink raw reply

* [ardb:x86-pie-v3+i386] [x86]  c25feb76bc: stress-ng.getrandom.ops_per_sec 19.2% regression
From: kernel test robot @ 2026-01-13 13:49 UTC (permalink / raw)
  To: Ard Biesheuvel
  Cc: oe-lkp, lkp, linux-kernel, linux-arch, linux-input, oliver.sang



Hello,

kernel test robot noticed a 19.2% regression of stress-ng.getrandom.ops_per_sec on:


commit: c25feb76bcb9eef1db49b4793195808b5b268bdd ("x86: Use PIE codegen for the relocatable 64-bit kernel")
https://git.kernel.org/cgit/linux/kernel/git/ardb/linux.git x86-pie-v3+i386

testcase: stress-ng
config: x86_64-rhel-9.4
compiler: gcc-14
test machine: 256 threads 2 sockets Intel(R) Xeon(R) 6768P  CPU @ 2.4GHz (Granite Rapids) with 64G memory
parameters:

	nr_threads: 100%
	testtime: 60s
	test: getrandom
	cpufreq_governor: performance


In addition to that, the commit also has significant impact on the following tests:

+------------------+---------------------------------------------------------------------------------------------+
| testcase: change | stress-ng: stress-ng.shm-sysv.ops_per_sec  7.0% regression                                  |
| test machine     | 224 threads 2 sockets Intel(R) Xeon(R) Platinum 8480CTDX (Sapphire Rapids) with 256G memory |
| test parameters  | cpufreq_governor=performance                                                                |
|                  | nr_threads=100%                                                                             |
|                  | test=shm-sysv                                                                               |
|                  | testtime=60s                                                                                |
+------------------+---------------------------------------------------------------------------------------------+


If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202601132133.b925ffea-lkp@intel.com


Details are as below:
-------------------------------------------------------------------------------------------------->


The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20260113/202601132133.b925ffea-lkp@intel.com

=========================================================================================
compiler/cpufreq_governor/kconfig/nr_threads/rootfs/tbox_group/test/testcase/testtime:
  gcc-14/performance/x86_64-rhel-9.4/100%/debian-13-x86_64-20250902.cgz/lkp-gnr-2sp4/getrandom/stress-ng/60s

commit: 
  34e6669c5d ("tools/objtool: Treat indirect ftrace calls as direct calls")
  c25feb76bc ("x86: Use PIE codegen for the relocatable 64-bit kernel")

34e6669c5d74fc8a c25feb76bcb9eef1db49b479319 
---------------- --------------------------- 
         %stddev     %change         %stddev
             \          |                \  
    141205 ± 18%    +121.9%     313389 ± 28%  numa-meminfo.node1.Mapped
    765384 ± 12%     +20.2%     920026 ±  8%  numa-numastat.node1.local_node
     25.36 ± 15%     +43.5%      36.40 ± 23%  sched_debug.cpu.clock.stddev
      1.98         +4655.9%      94.11        vmstat.cpu.sy
     93.03           -99.0%       0.97        vmstat.cpu.us
      0.36            +0.3        0.68 ±  4%  mpstat.cpu.all.irq%
      1.69           +94.9       96.61        mpstat.cpu.all.sys%
     96.01           -95.1        0.89 ±  2%  mpstat.cpu.all.usr%
   1360746 ±  3%     +19.9%    1632180        meminfo.Active
   1359818 ±  3%     +20.0%    1632180        meminfo.Active(anon)
    216996 ± 12%     +87.5%     406839 ± 12%  meminfo.Mapped
    630155 ±  7%     +43.2%     902385 ±  2%  meminfo.Shmem
    117.20          -100.0%       0.00        numa-vmstat.node0.nr_active_file
    117.20          -100.0%       0.00        numa-vmstat.node0.nr_zone_active_file
    114.95          -100.0%       0.00        numa-vmstat.node1.nr_active_file
     35366 ± 18%    +120.8%      78073 ± 29%  numa-vmstat.node1.nr_mapped
    114.95          -100.0%       0.00        numa-vmstat.node1.nr_zone_active_file
    765204 ± 12%     +20.2%     919955 ±  8%  numa-vmstat.node1.numa_local
 3.647e+09           -19.1%  2.952e+09        stress-ng.getrandom.getrandom_bits_per_sec
 8.553e+08           -19.2%  6.911e+08        stress-ng.getrandom.ops
  14264185           -19.2%   11525185        stress-ng.getrandom.ops_per_sec
     22088            -6.9%      20574        stress-ng.time.minor_page_faults
    256.84         +5775.5%      15090        stress-ng.time.system_time
     14971           -99.4%      93.58        stress-ng.time.user_time
      3600            -1.6%       3544        turbostat.Bzy_MHz
     60.00 ± 13%     +17.8%      70.67        turbostat.CoreTmp
      1.19          +110.9%       2.51        turbostat.IPC
     61.17 ± 11%     +15.0%      70.33        turbostat.PkgTmp
    504.27 ± 21%     +28.8%     649.34        turbostat.PkgWatt
      4.92            +4.2%       5.13        turbostat.RAMWatt
    794.46 ± 16%     +21.8%     967.76        turbostat.SysWatt
    340316 ±  3%     +19.9%     408200        proc-vmstat.nr_active_anon
    232.13          -100.0%       0.00        proc-vmstat.nr_active_file
   1083392            +6.3%    1151244        proc-vmstat.nr_file_pages
     54340 ± 12%     +87.3%     101773 ± 12%  proc-vmstat.nr_mapped
      8803 ±  2%      +7.9%       9502 ±  2%  proc-vmstat.nr_page_table_pages
    157880 ±  7%     +43.0%     225732 ±  2%  proc-vmstat.nr_shmem
    340316 ±  3%     +19.9%     408200        proc-vmstat.nr_zone_active_anon
    232.13          -100.0%       0.00        proc-vmstat.nr_zone_active_file
   1389528 ±  3%     +13.6%    1579043        proc-vmstat.numa_hit
   1125848 ±  4%     +16.8%    1315429        proc-vmstat.numa_local
   1455570 ±  3%     +13.7%    1654428        proc-vmstat.pgalloc_normal
 1.936e+10 ± 44%    +254.9%   6.87e+10        perf-stat.i.branch-instructions
  27271249 ± 44%     +23.4%   33659627        perf-stat.i.branch-misses
     13.50 ± 44%      +7.4       20.92 ±  5%  perf-stat.i.cache-miss-rate%
   2495358 ± 45%     +62.1%    4044168 ±  4%  perf-stat.i.cache-misses
 9.015e+11 ± 44%    +148.9%  2.244e+12        perf-stat.i.instructions
      0.99 ± 44%    +152.8%       2.51        perf-stat.i.ipc
      7641 ± 44%     +25.9%       9618        perf-stat.i.minor-faults
      7641 ± 44%     +25.9%       9619        perf-stat.i.page-faults
     10.72 ± 45%      +9.9       20.60 ±  6%  perf-stat.overall.cache-miss-rate%
      0.99 ± 44%    +152.6%       2.51        perf-stat.overall.ipc
 1.904e+10 ± 44%    +254.6%  6.753e+10        perf-stat.ps.branch-instructions
  26960548 ± 44%     +24.2%   33492680        perf-stat.ps.branch-misses
   2478150 ± 45%     +59.6%    3956015 ±  4%  perf-stat.ps.cache-misses
 8.868e+11 ± 44%    +148.7%  2.205e+12        perf-stat.ps.instructions
 5.433e+13 ± 44%    +146.2%  1.338e+14        perf-stat.total.instructions
      0.66 ±223%      +9.5       10.14        perf-profile.calltrace.cycles-pp._copy_to_iter.get_random_bytes_user.__x64_sys_getrandom.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.00           +75.7       75.72        perf-profile.calltrace.cycles-pp.chacha_permute.chacha_block_generic.get_random_bytes_user.__x64_sys_getrandom.do_syscall_64
      0.00           +85.0       84.99        perf-profile.calltrace.cycles-pp.chacha_block_generic.get_random_bytes_user.__x64_sys_getrandom.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.00           +96.6       96.64        perf-profile.calltrace.cycles-pp.get_random_bytes_user.__x64_sys_getrandom.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.00           +97.2       97.20        perf-profile.calltrace.cycles-pp.__x64_sys_getrandom.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.00           +97.4       97.40        perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.00           +97.4       97.44        perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe
      0.00            +0.1        0.08        perf-profile.children.cycles-pp.__x64_sys_clock_gettime
      0.01 ±223%      +0.2        0.22 ±  2%  perf-profile.children.cycles-pp.clock_gettime
      0.68 ±223%      +9.7       10.36        perf-profile.children.cycles-pp._copy_to_iter
      5.00 ±223%     +72.3       77.26        perf-profile.children.cycles-pp.chacha_permute
      5.70 ±223%     +81.2       86.86        perf-profile.children.cycles-pp.chacha_block_generic
      9.37 ±223%     +89.7       99.03        perf-profile.children.cycles-pp.entry_SYSCALL_64_after_hwframe
      9.18 ±223%     +89.8       98.96        perf-profile.children.cycles-pp.do_syscall_64
      8.05 ±223%     +90.2       98.28        perf-profile.children.cycles-pp.__x64_sys_getrandom
      7.80 ±223%     +90.4       98.19        perf-profile.children.cycles-pp.get_random_bytes_user
      0.02 ±223%      +0.1        0.12        perf-profile.self.cycles-pp.perf_mmap__read_head
      0.68 ±223%      +8.8        9.46        perf-profile.self.cycles-pp.chacha_block_generic
      0.66 ±223%      +9.4       10.02        perf-profile.self.cycles-pp._copy_to_iter
      4.99 ±223%     +71.6       76.60        perf-profile.self.cycles-pp.chacha_permute


***************************************************************************************************
lkp-spr-r02: 224 threads 2 sockets Intel(R) Xeon(R) Platinum 8480CTDX (Sapphire Rapids) with 256G memory
=========================================================================================
compiler/cpufreq_governor/kconfig/nr_threads/rootfs/tbox_group/test/testcase/testtime:
  gcc-14/performance/x86_64-rhel-9.4/100%/debian-13-x86_64-20250902.cgz/lkp-spr-r02/shm-sysv/stress-ng/60s

commit: 
  34e6669c5d ("tools/objtool: Treat indirect ftrace calls as direct calls")
  c25feb76bc ("x86: Use PIE codegen for the relocatable 64-bit kernel")

34e6669c5d74fc8a c25feb76bcb9eef1db49b479319 
---------------- --------------------------- 
         %stddev     %change         %stddev
             \          |                \  
    499796 ± 23%     +33.9%     669008 ± 24%  numa-meminfo.node0.AnonPages
     55471 ± 79%    +104.3%     113310 ± 40%  numa-numastat.node1.other_node
     19.54            +4.3       23.85        mpstat.cpu.all.sys%
     23.08           +20.0%      27.70        mpstat.max_utilization_pct
    124946 ± 23%     +33.9%     167294 ± 24%  numa-vmstat.node0.nr_anon_pages
     55471 ± 79%    +104.3%     113310 ± 40%  numa-vmstat.node1.numa_other
     18.25 ±  7%     +36.2%      24.85 ± 22%  perf-sched.sch_delay.max.ms.[unknown].[unknown].[unknown].[unknown].[unknown]
     18.25 ±  7%     +36.2%      24.85 ± 22%  perf-sched.total_sch_delay.max.ms
    364644            -7.9%     335945        vmstat.system.cs
    315205            +2.3%     322604        vmstat.system.in
      5776 ±  3%     -14.4%       4945 ±  3%  perf-c2c.DRAM.local
     10075           -12.2%       8845        perf-c2c.DRAM.remote
      7204           -12.3%       6320        perf-c2c.HITM.remote
     18556           -10.0%      16695        perf-c2c.HITM.total
     14630           +33.8%      19571        sched_debug.cfs_rq:/.avg_vruntime.avg
      7398 ±  9%     +60.0%      11839 ±  7%  sched_debug.cfs_rq:/.avg_vruntime.min
    174.02 ±  4%     +13.5%     197.54 ±  4%  sched_debug.cfs_rq:/.runnable_avg.avg
    173.82 ±  4%     +13.5%     197.28 ±  4%  sched_debug.cfs_rq:/.util_avg.avg
     21.82 ± 16%     +33.9%      29.21 ± 18%  sched_debug.cfs_rq:/.util_est.avg
     78.04 ±  8%     +11.4%      86.91 ±  4%  sched_debug.cfs_rq:/.util_est.stddev
     14610           +33.8%      19544        sched_debug.cfs_rq:/.zero_vruntime.avg
      7398 ±  9%     +59.9%      11829 ±  7%  sched_debug.cfs_rq:/.zero_vruntime.min
      3141           -13.4%       2720 ±  2%  sched_debug.cpu.nr_switches.stddev
    636.20           +21.1%     770.33        turbostat.Avg_MHz
     21.99            +4.6       26.61        turbostat.Busy%
     65.16            -3.2       61.92        turbostat.C1E%
     12.48            -1.4       11.06        turbostat.C6%
     60.39           -10.0%      54.35        turbostat.CPU%c1
      0.38           -11.8%       0.34        turbostat.IPC
   2143617           +12.0%    2400504        turbostat.NMI
    433.52            +2.5%     444.32        turbostat.PkgWatt
     24.67            -2.2%      24.11        turbostat.RAMWatt
    548105            -1.2%     541578        proc-vmstat.nr_active_anon
     94151            +1.6%      95647        proc-vmstat.nr_mapped
     24345 ±  3%      -6.7%      22703 ±  3%  proc-vmstat.nr_page_table_pages
    219544            -2.2%     214606        proc-vmstat.nr_shmem
    548105            -1.2%     541578        proc-vmstat.nr_zone_active_anon
  37786403            -8.1%   34715344        proc-vmstat.numa_hit
  37553119            -8.2%   34480850        proc-vmstat.numa_local
  39821469            -8.1%   36607213        proc-vmstat.pgalloc_normal
  54193632 ±  2%      -5.2%   51380280 ±  2%  proc-vmstat.pgfault
  38799735            -8.3%   35597616        proc-vmstat.pgfree
   5331325            -6.9%    4963469        proc-vmstat.unevictable_pgs_scanned
    199852           +26.7%     253131        stress-ng.shm-sysv.nanosecs_per_shmat_call
    351330           +28.3%     450754        stress-ng.shm-sysv.nanosecs_per_shmdt_call
    182368           +28.1%     233637        stress-ng.shm-sysv.nanosecs_per_shmget_call
    796981            -7.0%     741169        stress-ng.shm-sysv.ops
     13290            -7.0%      12360        stress-ng.shm-sysv.ops_per_sec
     66452            -2.8%      64601        stress-ng.time.involuntary_context_switches
  53480084 ±  2%      -5.3%   50668106 ±  2%  stress-ng.time.minor_page_faults
      4602           +23.3%       5676        stress-ng.time.percent_of_cpu_this_job_got
      2547           +26.1%       3211        stress-ng.time.system_time
    217.53            -8.5%     199.05        stress-ng.time.user_time
  10869031            -7.8%   10016582        stress-ng.time.voluntary_context_switches
      3.02           -13.9%       2.60        perf-stat.i.MPKI
 1.102e+10            +7.4%  1.183e+10        perf-stat.i.branch-instructions
      0.75            -0.1        0.69        perf-stat.i.branch-miss-rate%
  80729871            -1.4%   79583495        perf-stat.i.branch-misses
     31.78            -1.1       30.72        perf-stat.i.cache-miss-rate%
 1.685e+08            -7.9%  1.551e+08        perf-stat.i.cache-misses
 5.318e+08            -4.6%  5.072e+08        perf-stat.i.cache-references
    376543            -7.9%     346811        perf-stat.i.context-switches
      2.58           +12.8%       2.90        perf-stat.i.cpi
 1.443e+11           +21.1%  1.748e+11        perf-stat.i.cpu-cycles
     18797           +15.3%      21669        perf-stat.i.cpu-migrations
    856.11           +31.5%       1125        perf-stat.i.cycles-between-cache-misses
 5.584e+10            +7.2%  5.988e+10        perf-stat.i.instructions
      0.39           -11.2%       0.35        perf-stat.i.ipc
      9.62            -5.8%       9.06 ±  2%  perf-stat.i.metric.K/sec
    876497 ±  2%      -5.3%     829909 ±  2%  perf-stat.i.minor-faults
    902246 ±  2%      -5.4%     853818 ±  2%  perf-stat.i.page-faults
      3.02           -14.2%       2.59        perf-stat.overall.MPKI
      0.73            -0.1        0.67        perf-stat.overall.branch-miss-rate%
     31.68            -1.1       30.57        perf-stat.overall.cache-miss-rate%
      2.58           +12.9%       2.92        perf-stat.overall.cpi
    856.97           +31.6%       1127        perf-stat.overall.cycles-between-cache-misses
      0.39           -11.5%       0.34        perf-stat.overall.ipc
 1.084e+10            +7.4%  1.164e+10        perf-stat.ps.branch-instructions
  79335480            -1.4%   78206975        perf-stat.ps.branch-misses
 1.657e+08            -8.0%  1.525e+08        perf-stat.ps.cache-misses
  5.23e+08            -4.6%  4.988e+08        perf-stat.ps.cache-references
    370379            -7.9%     341116        perf-stat.ps.context-switches
 1.419e+11           +21.1%  1.719e+11        perf-stat.ps.cpu-cycles
     18488           +15.3%      21312        perf-stat.ps.cpu-migrations
 5.492e+10            +7.2%   5.89e+10        perf-stat.ps.instructions
    862011 ±  2%      -5.3%     816105 ±  2%  perf-stat.ps.minor-faults
    887340 ±  2%      -5.4%     839624 ±  2%  perf-stat.ps.page-faults
  3.34e+12            +7.3%  3.584e+12        perf-stat.total.instructions
      8.47            -1.9        6.59        perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe
      8.46            -1.9        6.58        perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe
     30.66            -1.8       28.89        perf-profile.calltrace.cycles-pp.osq_lock.rwsem_down_write_slowpath.down_write.ipcget.__x64_sys_shmget
      7.71            -1.7        6.01        perf-profile.calltrace.cycles-pp.do_exit.do_group_exit.__x64_sys_exit_group.x64_sys_call.do_syscall_64
      7.71            -1.7        6.01        perf-profile.calltrace.cycles-pp.__x64_sys_exit_group.x64_sys_call.do_syscall_64.entry_SYSCALL_64_after_hwframe
      7.71            -1.7        6.01        perf-profile.calltrace.cycles-pp.do_group_exit.__x64_sys_exit_group.x64_sys_call.do_syscall_64.entry_SYSCALL_64_after_hwframe
      7.71            -1.7        6.02        perf-profile.calltrace.cycles-pp.x64_sys_call.do_syscall_64.entry_SYSCALL_64_after_hwframe
      7.46            -1.6        5.82        perf-profile.calltrace.cycles-pp.exit_mm.do_exit.do_group_exit.__x64_sys_exit_group.x64_sys_call
      7.46            -1.6        5.81        perf-profile.calltrace.cycles-pp.__mmput.exit_mm.do_exit.do_group_exit.__x64_sys_exit_group
      7.44            -1.6        5.80 ±  2%  perf-profile.calltrace.cycles-pp.exit_mmap.__mmput.exit_mm.do_exit.do_group_exit
     11.73            -1.6       10.17 ±  2%  perf-profile.calltrace.cycles-pp._Fork
     34.38            -1.5       32.84        perf-profile.calltrace.cycles-pp.shmget
     34.34            -1.5       32.80        perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.shmget
     34.33            -1.5       32.80        perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmget
     34.30            -1.5       32.77        perf-profile.calltrace.cycles-pp.ipcget.__x64_sys_shmget.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmget
     34.31            -1.5       32.78        perf-profile.calltrace.cycles-pp.__x64_sys_shmget.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmget
     11.37            -1.5        9.88 ±  2%  perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe._Fork
     11.37            -1.5        9.88 ±  2%  perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe._Fork
     11.36            -1.5        9.88 ±  2%  perf-profile.calltrace.cycles-pp.__do_sys_clone.do_syscall_64.entry_SYSCALL_64_after_hwframe._Fork
     11.36            -1.5        9.88 ±  2%  perf-profile.calltrace.cycles-pp.kernel_clone.__do_sys_clone.do_syscall_64.entry_SYSCALL_64_after_hwframe._Fork
     10.82            -1.4        9.45 ±  2%  perf-profile.calltrace.cycles-pp.copy_process.kernel_clone.__do_sys_clone.do_syscall_64.entry_SYSCALL_64_after_hwframe
     10.45            -1.3        9.16 ±  2%  perf-profile.calltrace.cycles-pp.dup_mm.copy_process.kernel_clone.__do_sys_clone.do_syscall_64
     32.73            -1.2       31.52        perf-profile.calltrace.cycles-pp.down_write.ipcget.__x64_sys_shmget.do_syscall_64.entry_SYSCALL_64_after_hwframe
     32.60            -1.2       31.41        perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.down_write.ipcget.__x64_sys_shmget.do_syscall_64
      5.21            -1.2        4.03        perf-profile.calltrace.cycles-pp.common_startup_64
      5.18            -1.2        4.01        perf-profile.calltrace.cycles-pp.start_secondary.common_startup_64
      5.18            -1.2        4.01        perf-profile.calltrace.cycles-pp.cpu_startup_entry.start_secondary.common_startup_64
      5.18            -1.2        4.01        perf-profile.calltrace.cycles-pp.do_idle.cpu_startup_entry.start_secondary.common_startup_64
      9.62            -1.2        8.46 ±  2%  perf-profile.calltrace.cycles-pp.dup_mmap.dup_mm.copy_process.kernel_clone.__do_sys_clone
      4.42            -1.0        3.41        perf-profile.calltrace.cycles-pp.cpuidle_idle_call.do_idle.cpu_startup_entry.start_secondary.common_startup_64
      4.24            -1.0        3.26        perf-profile.calltrace.cycles-pp.cpuidle_enter.cpuidle_idle_call.do_idle.cpu_startup_entry.start_secondary
      4.14            -1.0        3.18        perf-profile.calltrace.cycles-pp.cpuidle_enter_state.cpuidle_enter.cpuidle_idle_call.do_idle.cpu_startup_entry
      3.53            -0.8        2.75        perf-profile.calltrace.cycles-pp.free_pgtables.exit_mmap.__mmput.exit_mm.do_exit
      2.79            -0.6        2.18        perf-profile.calltrace.cycles-pp.unlink_anon_vmas.free_pgtables.exit_mmap.__mmput.exit_mm
      2.43 ±  3%      -0.5        1.88 ±  3%  perf-profile.calltrace.cycles-pp.unmap_vmas.exit_mmap.__mmput.exit_mm.do_exit
      2.35 ±  3%      -0.5        1.82 ±  3%  perf-profile.calltrace.cycles-pp.unmap_page_range.unmap_vmas.exit_mmap.__mmput.exit_mm
      2.29 ±  3%      -0.5        1.78 ±  3%  perf-profile.calltrace.cycles-pp.zap_pmd_range.unmap_page_range.unmap_vmas.exit_mmap.__mmput
      2.03 ±  2%      -0.5        1.53        perf-profile.calltrace.cycles-pp.asm_sysvec_apic_timer_interrupt.cpuidle_enter_state.cpuidle_enter.cpuidle_idle_call.do_idle
      2.23 ±  3%      -0.5        1.73 ±  3%  perf-profile.calltrace.cycles-pp.zap_pte_range.zap_pmd_range.unmap_page_range.unmap_vmas.exit_mmap
      1.93 ±  2%      -0.5        1.45        perf-profile.calltrace.cycles-pp.sysvec_apic_timer_interrupt.asm_sysvec_apic_timer_interrupt.cpuidle_enter_state.cpuidle_enter.cpuidle_idle_call
      3.93            -0.5        3.48 ±  2%  perf-profile.calltrace.cycles-pp.anon_vma_clone.anon_vma_fork.dup_mmap.dup_mm.copy_process
      9.37            -0.4        8.93        perf-profile.calltrace.cycles-pp.osq_lock.rwsem_down_write_slowpath.down_write.ksys_shmctl.do_syscall_64
      0.67 ±  2%      -0.4        0.25 ±100%  perf-profile.calltrace.cycles-pp.__vma_start_write.dup_mmap.dup_mm.copy_process.kernel_clone
      1.66            -0.4        1.26        perf-profile.calltrace.cycles-pp.anon_vma_interval_tree_insert.anon_vma_clone.anon_vma_fork.dup_mmap.dup_mm
      1.93            -0.4        1.55 ±  3%  perf-profile.calltrace.cycles-pp.ordered_events__queue.process_simple.reader__read_event.perf_session__process_events.record__finish_output
      1.94            -0.4        1.56 ±  3%  perf-profile.calltrace.cycles-pp.process_simple.reader__read_event.perf_session__process_events.record__finish_output.cmd_record
      1.93            -0.4        1.55 ±  3%  perf-profile.calltrace.cycles-pp.queue_event.ordered_events__queue.process_simple.reader__read_event.perf_session__process_events
      1.63 ±  4%      -0.4        1.26 ±  4%  perf-profile.calltrace.cycles-pp.zap_present_ptes.zap_pte_range.zap_pmd_range.unmap_page_range.unmap_vmas
      1.95            -0.4        1.60        perf-profile.calltrace.cycles-pp.reader__read_event.perf_session__process_events.record__finish_output.cmd_record
      1.95            -0.4        1.60        perf-profile.calltrace.cycles-pp.cmd_record
      1.95            -0.4        1.60        perf-profile.calltrace.cycles-pp.perf_session__process_events.record__finish_output.cmd_record
      1.95            -0.4        1.60        perf-profile.calltrace.cycles-pp.record__finish_output.cmd_record
      1.58 ±  5%      -0.3        1.24 ±  5%  perf-profile.calltrace.cycles-pp.asm_exc_page_fault
      1.43 ±  3%      -0.3        1.09 ±  6%  perf-profile.calltrace.cycles-pp.copy_page_range.dup_mmap.dup_mm.copy_process.kernel_clone
      1.40 ±  3%      -0.3        1.07 ±  7%  perf-profile.calltrace.cycles-pp.copy_p4d_range.copy_page_range.dup_mmap.dup_mm.copy_process
      5.74            -0.3        5.42 ±  2%  perf-profile.calltrace.cycles-pp.anon_vma_fork.dup_mmap.dup_mm.copy_process.kernel_clone
      1.38 ±  5%      -0.3        1.09 ±  5%  perf-profile.calltrace.cycles-pp.exc_page_fault.asm_exc_page_fault
      1.38 ±  5%      -0.3        1.08 ±  5%  perf-profile.calltrace.cycles-pp.do_user_addr_fault.exc_page_fault.asm_exc_page_fault
      0.63 ±  2%      -0.3        0.35 ± 70%  perf-profile.calltrace.cycles-pp.down_write.unlink_anon_vmas.free_pgtables.exit_mmap.__mmput
     10.00            -0.3        9.71        perf-profile.calltrace.cycles-pp.down_write.ksys_shmctl.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmctl
      1.23 ±  3%      -0.3        0.94 ±  7%  perf-profile.calltrace.cycles-pp.copy_pte_range.copy_p4d_range.copy_page_range.dup_mmap.dup_mm
      9.95            -0.3        9.68        perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.down_write.ksys_shmctl.do_syscall_64.entry_SYSCALL_64_after_hwframe
      1.10            -0.3        0.84 ±  2%  perf-profile.calltrace.cycles-pp.__sysvec_apic_timer_interrupt.sysvec_apic_timer_interrupt.asm_sysvec_apic_timer_interrupt.cpuidle_enter_state.cpuidle_enter
      1.08            -0.3        0.82 ±  2%  perf-profile.calltrace.cycles-pp.hrtimer_interrupt.__sysvec_apic_timer_interrupt.sysvec_apic_timer_interrupt.asm_sysvec_apic_timer_interrupt.cpuidle_enter_state
      1.19            -0.2        0.94        perf-profile.calltrace.cycles-pp.intel_idle.cpuidle_enter_state.cpuidle_enter.cpuidle_idle_call.do_idle
      1.15 ±  6%      -0.2        0.91 ±  6%  perf-profile.calltrace.cycles-pp.handle_mm_fault.do_user_addr_fault.exc_page_fault.asm_exc_page_fault
      1.11 ±  6%      -0.2        0.88 ±  6%  perf-profile.calltrace.cycles-pp.__handle_mm_fault.handle_mm_fault.do_user_addr_fault.exc_page_fault.asm_exc_page_fault
      0.88 ±  5%      -0.2        0.66 ±  9%  perf-profile.calltrace.cycles-pp.copy_present_ptes.copy_pte_range.copy_p4d_range.copy_page_range.dup_mmap
      0.98 ±  7%      -0.2        0.78 ±  5%  perf-profile.calltrace.cycles-pp.do_read_fault.do_fault.__handle_mm_fault.handle_mm_fault.do_user_addr_fault
      0.99 ±  7%      -0.2        0.78 ±  5%  perf-profile.calltrace.cycles-pp.do_fault.__handle_mm_fault.handle_mm_fault.do_user_addr_fault.exc_page_fault
      0.94 ±  7%      -0.2        0.75 ±  5%  perf-profile.calltrace.cycles-pp.filemap_map_pages.do_read_fault.do_fault.__handle_mm_fault.handle_mm_fault
      0.80 ±  2%      -0.2        0.61 ±  2%  perf-profile.calltrace.cycles-pp.__hrtimer_run_queues.hrtimer_interrupt.__sysvec_apic_timer_interrupt.sysvec_apic_timer_interrupt.asm_sysvec_apic_timer_interrupt
      0.75            -0.2        0.57        perf-profile.calltrace.cycles-pp.poll_idle.cpuidle_enter_state.cpuidle_enter.cpuidle_idle_call.do_idle
      0.70 ±  2%      -0.2        0.54 ±  2%  perf-profile.calltrace.cycles-pp.tick_nohz_handler.__hrtimer_run_queues.hrtimer_interrupt.__sysvec_apic_timer_interrupt.sysvec_apic_timer_interrupt
      0.88            -0.1        0.73        perf-profile.calltrace.cycles-pp.up_write.ipcget.__x64_sys_shmget.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.79 ±  5%      -0.1        0.65 ±  3%  perf-profile.calltrace.cycles-pp.tlb_finish_mmu.exit_mmap.__mmput.exit_mm.do_exit
      0.78 ±  5%      -0.1        0.64 ±  4%  perf-profile.calltrace.cycles-pp.__tlb_batch_free_encoded_pages.tlb_finish_mmu.exit_mmap.__mmput.exit_mm
      0.77 ±  5%      -0.1        0.64 ±  4%  perf-profile.calltrace.cycles-pp.free_pages_and_swap_cache.__tlb_batch_free_encoded_pages.tlb_finish_mmu.exit_mmap.__mmput
      0.80            -0.1        0.66        perf-profile.calltrace.cycles-pp.rwsem_wake.up_write.ipcget.__x64_sys_shmget.do_syscall_64
      0.79            -0.1        0.68        perf-profile.calltrace.cycles-pp.mm_init.dup_mm.copy_process.kernel_clone.__do_sys_clone
      1.20 ±  2%      +0.2        1.37 ±  3%  perf-profile.calltrace.cycles-pp.down_write.anon_vma_clone.anon_vma_fork.dup_mmap.dup_mm
      0.51            +0.2        0.71        perf-profile.calltrace.cycles-pp.up_write.do_shmat.__x64_sys_shmat.do_syscall_64.entry_SYSCALL_64_after_hwframe
      1.36 ±  2%      +0.2        1.57 ±  3%  perf-profile.calltrace.cycles-pp.down_write.anon_vma_fork.dup_mmap.dup_mm.copy_process
      1.30 ±  2%      +0.2        1.53 ±  3%  perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.down_write.anon_vma_fork.dup_mmap.dup_mm
      0.98 ±  2%      +0.2        1.21 ±  3%  perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.down_write.anon_vma_clone.anon_vma_fork.dup_mmap
      1.42            +0.3        1.68        perf-profile.calltrace.cycles-pp.do_mmap.do_shmat.__x64_sys_shmat.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.98            +0.3        1.26        perf-profile.calltrace.cycles-pp.osq_lock.rwsem_down_write_slowpath.down_write.__shm_close.__mmap_region
      1.19            +0.3        1.48        perf-profile.calltrace.cycles-pp.__mmap_region.do_mmap.do_shmat.__x64_sys_shmat.do_syscall_64
      1.05            +0.3        1.34        perf-profile.calltrace.cycles-pp.__shm_close.__mmap_region.do_mmap.do_shmat.__x64_sys_shmat
      1.03            +0.3        1.33        perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.down_write.__shm_close.__mmap_region.do_mmap
      1.04            +0.3        1.34        perf-profile.calltrace.cycles-pp.down_write.__shm_close.__mmap_region.do_mmap.do_shmat
      0.70 ±  3%      +0.3        1.01 ±  4%  perf-profile.calltrace.cycles-pp.osq_lock.rwsem_down_write_slowpath.down_write.anon_vma_fork.dup_mmap
      0.00            +0.5        0.53        perf-profile.calltrace.cycles-pp.rwsem_wake.up_write.remove_vma.vms_complete_munmap_vmas.do_vmi_align_munmap
      0.00            +0.6        0.56        perf-profile.calltrace.cycles-pp.up_write.remove_vma.vms_complete_munmap_vmas.do_vmi_align_munmap.ksys_shmdt
      0.20 ±122%      +0.6        0.78 ±  3%  perf-profile.calltrace.cycles-pp.osq_lock.rwsem_down_write_slowpath.down_write.anon_vma_clone.anon_vma_fork
      0.00            +0.7        0.68        perf-profile.calltrace.cycles-pp.rwsem_wake.up_write.do_shmat.__x64_sys_shmat.do_syscall_64
      0.80            +0.8        1.57        perf-profile.calltrace.cycles-pp.native_queued_spin_lock_slowpath._raw_spin_lock_irq.rwsem_down_write_slowpath.down_write.ipcget
      0.84            +0.8        1.61        perf-profile.calltrace.cycles-pp._raw_spin_lock_irq.rwsem_down_write_slowpath.down_write.ipcget.__x64_sys_shmget
      1.41            +0.8        2.21        perf-profile.calltrace.cycles-pp.native_queued_spin_lock_slowpath._raw_spin_lock_irq.rwsem_down_write_slowpath.down_write.do_shmat
      1.44            +0.8        2.24        perf-profile.calltrace.cycles-pp._raw_spin_lock_irq.rwsem_down_write_slowpath.down_write.do_shmat.__x64_sys_shmat
      1.16            +1.1        2.28        perf-profile.calltrace.cycles-pp.native_queued_spin_lock_slowpath._raw_spin_lock_irq.rwsem_down_read_slowpath.down_read.ksys_shmctl
      1.34            +1.1        2.48        perf-profile.calltrace.cycles-pp.rwsem_down_read_slowpath.down_read.ksys_shmctl.do_syscall_64.entry_SYSCALL_64_after_hwframe
      1.17            +1.1        2.31        perf-profile.calltrace.cycles-pp._raw_spin_lock_irq.rwsem_down_read_slowpath.down_read.ksys_shmctl.do_syscall_64
      6.63            +1.1        7.78        perf-profile.calltrace.cycles-pp.osq_lock.rwsem_down_write_slowpath.down_write.__shm_close.remove_vma
      1.36            +1.2        2.52        perf-profile.calltrace.cycles-pp.down_read.ksys_shmctl.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmctl
      8.30            +1.3        9.63        perf-profile.calltrace.cycles-pp.shmdt
      8.28            +1.3        9.61        perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.shmdt
      8.28            +1.3        9.61        perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmdt
      7.22            +1.3        8.56        perf-profile.calltrace.cycles-pp.__shm_close.remove_vma.vms_complete_munmap_vmas.do_vmi_align_munmap.ksys_shmdt
      7.15            +1.4        8.51        perf-profile.calltrace.cycles-pp.down_write.__shm_close.remove_vma.vms_complete_munmap_vmas.do_vmi_align_munmap
      7.11            +1.4        8.46        perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.down_write.__shm_close.remove_vma.vms_complete_munmap_vmas
      8.08            +1.4        9.47        perf-profile.calltrace.cycles-pp.ksys_shmdt.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmdt
      7.88            +1.4        9.32        perf-profile.calltrace.cycles-pp.do_vmi_align_munmap.ksys_shmdt.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmdt
      7.78            +1.5        9.24        perf-profile.calltrace.cycles-pp.vms_complete_munmap_vmas.do_vmi_align_munmap.ksys_shmdt.do_syscall_64.entry_SYSCALL_64_after_hwframe
      7.65            +1.5        9.14        perf-profile.calltrace.cycles-pp.remove_vma.vms_complete_munmap_vmas.do_vmi_align_munmap.ksys_shmdt.do_syscall_64
      6.98            +1.5        8.46        perf-profile.calltrace.cycles-pp.osq_lock.rwsem_down_write_slowpath.down_write.do_shmat.__x64_sys_shmat
      0.00            +2.1        2.09        perf-profile.calltrace.cycles-pp.__radix_tree_lookup.ksys_shmctl.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmctl
      8.83            +2.2       11.04        perf-profile.calltrace.cycles-pp.down_write.do_shmat.__x64_sys_shmat.do_syscall_64.entry_SYSCALL_64_after_hwframe
      8.78            +2.2       10.98        perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.down_write.do_shmat.__x64_sys_shmat.do_syscall_64
     13.37            +2.4       15.73        perf-profile.calltrace.cycles-pp.shmctl
     13.33            +2.4       15.70        perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.shmctl
     13.32            +2.4       15.69        perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmctl
     13.09            +2.4       15.50        perf-profile.calltrace.cycles-pp.ksys_shmctl.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmctl
     10.96            +2.7       13.62        perf-profile.calltrace.cycles-pp.shmat
     10.93            +2.7       13.59        perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmat
     10.93            +2.7       13.60        perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.shmat
     10.91            +2.7       13.58        perf-profile.calltrace.cycles-pp.do_shmat.__x64_sys_shmat.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmat
     10.91            +2.7       13.58        perf-profile.calltrace.cycles-pp.__x64_sys_shmat.do_syscall_64.entry_SYSCALL_64_after_hwframe.shmat
      7.93            -1.7        6.19        perf-profile.children.cycles-pp.x64_sys_call
      7.91            -1.7        6.18        perf-profile.children.cycles-pp.__x64_sys_exit_group
      7.91            -1.7        6.18        perf-profile.children.cycles-pp.do_group_exit
      7.91            -1.7        6.17        perf-profile.children.cycles-pp.do_exit
      7.47            -1.6        5.82        perf-profile.children.cycles-pp.exit_mm
      7.46            -1.6        5.82        perf-profile.children.cycles-pp.__mmput
      7.45            -1.6        5.80        perf-profile.children.cycles-pp.exit_mmap
     11.77            -1.6       10.20 ±  2%  perf-profile.children.cycles-pp._Fork
     34.40            -1.5       32.86        perf-profile.children.cycles-pp.shmget
     34.31            -1.5       32.78        perf-profile.children.cycles-pp.__x64_sys_shmget
     34.30            -1.5       32.78        perf-profile.children.cycles-pp.ipcget
     11.36            -1.5        9.88 ±  2%  perf-profile.children.cycles-pp.kernel_clone
     11.36            -1.5        9.88 ±  2%  perf-profile.children.cycles-pp.__do_sys_clone
     10.82            -1.4        9.45 ±  2%  perf-profile.children.cycles-pp.copy_process
     10.45            -1.3        9.16 ±  2%  perf-profile.children.cycles-pp.dup_mm
      5.21            -1.2        4.03        perf-profile.children.cycles-pp.common_startup_64
      5.21            -1.2        4.03        perf-profile.children.cycles-pp.cpu_startup_entry
      5.20            -1.2        4.03        perf-profile.children.cycles-pp.do_idle
      5.18            -1.2        4.01        perf-profile.children.cycles-pp.start_secondary
      9.64            -1.2        8.47 ±  2%  perf-profile.children.cycles-pp.dup_mmap
      4.44            -1.0        3.43        perf-profile.children.cycles-pp.cpuidle_idle_call
      4.26            -1.0        3.28        perf-profile.children.cycles-pp.cpuidle_enter
      4.26            -1.0        3.27        perf-profile.children.cycles-pp.cpuidle_enter_state
      3.57            -0.8        2.78        perf-profile.children.cycles-pp.free_pgtables
      3.03 ±  2%      -0.6        2.38 ±  3%  perf-profile.children.cycles-pp.asm_exc_page_fault
      2.80            -0.6        2.18        perf-profile.children.cycles-pp.unlink_anon_vmas
      2.51 ±  3%      -0.6        1.95 ±  3%  perf-profile.children.cycles-pp.unmap_vmas
      2.43 ±  3%      -0.5        1.89 ±  3%  perf-profile.children.cycles-pp.unmap_page_range
      2.53 ±  2%      -0.5        1.99 ±  4%  perf-profile.children.cycles-pp.exc_page_fault
      2.52 ±  2%      -0.5        1.98 ±  4%  perf-profile.children.cycles-pp.do_user_addr_fault
      2.37 ±  3%      -0.5        1.84 ±  3%  perf-profile.children.cycles-pp.zap_pmd_range
      2.31 ±  3%      -0.5        1.80 ±  3%  perf-profile.children.cycles-pp.zap_pte_range
      2.76 ±  2%      -0.5        2.27        perf-profile.children.cycles-pp.asm_sysvec_apic_timer_interrupt
      2.63 ±  2%      -0.5        2.16        perf-profile.children.cycles-pp.sysvec_apic_timer_interrupt
      3.94            -0.5        3.49 ±  2%  perf-profile.children.cycles-pp.anon_vma_clone
      2.13 ±  3%      -0.4        1.70 ±  4%  perf-profile.children.cycles-pp.handle_mm_fault
      2.06 ±  3%      -0.4        1.64 ±  4%  perf-profile.children.cycles-pp.__handle_mm_fault
      1.67            -0.4        1.28        perf-profile.children.cycles-pp.anon_vma_interval_tree_insert
      1.93            -0.4        1.55 ±  3%  perf-profile.children.cycles-pp.ordered_events__queue
      1.70 ±  4%      -0.4        1.32 ±  4%  perf-profile.children.cycles-pp.zap_present_ptes
      1.94            -0.4        1.56 ±  3%  perf-profile.children.cycles-pp.process_simple
      2.20            -0.4        1.82        perf-profile.children.cycles-pp.rwsem_spin_on_owner
      1.93            -0.4        1.56 ±  3%  perf-profile.children.cycles-pp.queue_event
      2.01            -0.4        1.64        perf-profile.children.cycles-pp.cmd_record
      1.95            -0.4        1.60        perf-profile.children.cycles-pp.reader__read_event
      1.95            -0.4        1.60        perf-profile.children.cycles-pp.perf_session__process_events
      1.95            -0.4        1.60        perf-profile.children.cycles-pp.record__finish_output
      1.43 ±  3%      -0.3        1.09 ±  6%  perf-profile.children.cycles-pp.copy_page_range
      1.67 ±  4%      -0.3        1.34 ±  5%  perf-profile.children.cycles-pp.do_fault
      1.40 ±  3%      -0.3        1.07 ±  7%  perf-profile.children.cycles-pp.copy_p4d_range
      1.14            -0.3        0.81        perf-profile.children.cycles-pp._raw_spin_lock
      5.74            -0.3        5.42 ±  2%  perf-profile.children.cycles-pp.anon_vma_fork
      1.48 ±  4%      -0.3        1.19 ±  5%  perf-profile.children.cycles-pp.do_read_fault
      1.23 ±  4%      -0.3        0.95 ±  7%  perf-profile.children.cycles-pp.copy_pte_range
      1.40 ±  5%      -0.3        1.13 ±  5%  perf-profile.children.cycles-pp.filemap_map_pages
      1.11 ±  2%      -0.3        0.84        perf-profile.children.cycles-pp.__vma_start_write
      1.19            -0.3        0.92        perf-profile.children.cycles-pp.kmem_cache_free
      1.64            -0.3        1.38 ±  2%  perf-profile.children.cycles-pp.__sysvec_apic_timer_interrupt
      1.61            -0.3        1.36 ±  2%  perf-profile.children.cycles-pp.hrtimer_interrupt
      0.99            -0.2        0.74        perf-profile.children.cycles-pp.wake_up_q
      1.19            -0.2        0.95        perf-profile.children.cycles-pp.intel_idle
      0.29            -0.2        0.05        perf-profile.children.cycles-pp.idr_find
      1.10            -0.2        0.87        perf-profile.children.cycles-pp.kmem_cache_alloc_noprof
      0.89 ±  5%      -0.2        0.67 ±  9%  perf-profile.children.cycles-pp.copy_present_ptes
      0.93            -0.2        0.72        perf-profile.children.cycles-pp.try_to_wake_up
      1.10            -0.2        0.89        perf-profile.children.cycles-pp.__schedule
      0.90 ±  5%      -0.2        0.72 ±  6%  perf-profile.children.cycles-pp.next_uptodate_folio
      0.75            -0.2        0.57        perf-profile.children.cycles-pp.poll_idle
      0.97 ±  4%      -0.2        0.79 ±  3%  perf-profile.children.cycles-pp.__tlb_batch_free_encoded_pages
      0.96 ±  4%      -0.2        0.79 ±  3%  perf-profile.children.cycles-pp.free_pages_and_swap_cache
      0.63            -0.2        0.46        perf-profile.children.cycles-pp.shm_add_rss_swap
      1.26            -0.2        1.10 ±  2%  perf-profile.children.cycles-pp.__hrtimer_run_queues
      0.45 ±  9%      -0.2        0.30 ±  3%  perf-profile.children.cycles-pp.ktime_get
      0.63            -0.1        0.48        perf-profile.children.cycles-pp.__anon_vma_interval_tree_remove
      0.63            -0.1        0.49        perf-profile.children.cycles-pp.__vma_enter_locked
      0.80 ±  5%      -0.1        0.66 ±  4%  perf-profile.children.cycles-pp.tlb_finish_mmu
      0.62            -0.1        0.48        perf-profile.children.cycles-pp.newseg
      0.64            -0.1        0.50        perf-profile.children.cycles-pp.vm_area_dup
      0.79            -0.1        0.66        perf-profile.children.cycles-pp.handle_softirqs
      0.49            -0.1        0.35        perf-profile.children.cycles-pp.__pi_memset
      1.15 ±  2%      -0.1        1.02 ±  2%  perf-profile.children.cycles-pp.tick_nohz_handler
      0.74            -0.1        0.61        perf-profile.children.cycles-pp.schedule
      0.70 ±  6%      -0.1        0.57 ±  3%  perf-profile.children.cycles-pp.folios_put_refs
      0.79            -0.1        0.68        perf-profile.children.cycles-pp.mm_init
      0.50            -0.1        0.38        perf-profile.children.cycles-pp.__slab_free
      0.75            -0.1        0.63        perf-profile.children.cycles-pp.__irq_exit_rcu
      0.59 ±  8%      -0.1        0.47 ±  7%  perf-profile.children.cycles-pp.folio_remove_rmap_ptes
      0.41            -0.1        0.30 ±  2%  perf-profile.children.cycles-pp.ret_from_fork
      0.41            -0.1        0.30 ±  2%  perf-profile.children.cycles-pp.ret_from_fork_asm
      0.43            -0.1        0.33 ±  2%  perf-profile.children.cycles-pp.__kmem_cache_alloc_bulk
      0.42            -0.1        0.32        perf-profile.children.cycles-pp.__pcs_replace_empty_main
      0.52            -0.1        0.42        perf-profile.children.cycles-pp.wake_up_new_task
      0.60            -0.1        0.50        perf-profile.children.cycles-pp.schedule_preempt_disabled
      0.49            -0.1        0.39        perf-profile.children.cycles-pp.__memcg_slab_free_hook
      0.43            -0.1        0.32        perf-profile.children.cycles-pp.exit_to_user_mode_loop
      0.55 ±  2%      -0.1        0.45        perf-profile.children.cycles-pp.rcu_core
      0.48            -0.1        0.38        perf-profile.children.cycles-pp.rcu_do_batch
      0.70            -0.1        0.61        perf-profile.children.cycles-pp.pcpu_alloc_noprof
      0.38            -0.1        0.28        perf-profile.children.cycles-pp.task_work_run
      0.17 ± 29%      -0.1        0.08 ±  5%  perf-profile.children.cycles-pp.tick_irq_enter
      0.17 ± 29%      -0.1        0.08 ±  5%  perf-profile.children.cycles-pp.irq_enter_rcu
      0.53            -0.1        0.44        perf-profile.children.cycles-pp.select_task_rq_fair
      0.99 ±  2%      -0.1        0.90 ±  2%  perf-profile.children.cycles-pp.update_process_times
      0.35 ±  2%      -0.1        0.27        perf-profile.children.cycles-pp.__fput
      0.31            -0.1        0.23 ±  3%  perf-profile.children.cycles-pp.__x64_sys_openat
      0.37 ±  2%      -0.1        0.29 ±  2%  perf-profile.children.cycles-pp.__flush_smp_call_function_queue
      0.31 ±  2%      -0.1        0.23 ±  3%  perf-profile.children.cycles-pp.do_sys_openat2
      0.28            -0.1        0.20 ±  2%  perf-profile.children.cycles-pp.do_filp_open
      0.28 ±  2%      -0.1        0.20        perf-profile.children.cycles-pp.path_openat
      0.38            -0.1        0.30 ±  2%  perf-profile.children.cycles-pp.update_sg_wakeup_stats
      0.34            -0.1        0.26        perf-profile.children.cycles-pp.flush_smp_call_function_queue
      0.39            -0.1        0.32        perf-profile.children.cycles-pp.sched_balance_find_dst_group
      0.29            -0.1        0.22 ±  2%  perf-profile.children.cycles-pp.stress_shm_sysv_check
      0.32 ±  3%      -0.1        0.24 ±  4%  perf-profile.children.cycles-pp.__put_anon_vma
      0.32            -0.1        0.25        perf-profile.children.cycles-pp.schedule_idle
      0.34 ±  2%      -0.1        0.27        perf-profile.children.cycles-pp.raw_spin_rq_lock_nested
      0.29 ±  2%      -0.1        0.22 ±  2%  perf-profile.children.cycles-pp.finish_dput
      0.30            -0.1        0.23        perf-profile.children.cycles-pp.mas_find
      0.26 ±  2%      -0.1        0.19 ±  4%  perf-profile.children.cycles-pp.clockevents_program_event
      0.31 ±  2%      -0.1        0.24        perf-profile.children.cycles-pp.sched_ttwu_pending
      0.32            -0.1        0.25        perf-profile.children.cycles-pp.alloc_pages_mpol
      0.30            -0.1        0.23        perf-profile.children.cycles-pp.finish_task_switch
      0.27 ±  2%      -0.1        0.21 ±  2%  perf-profile.children.cycles-pp.native_irq_return_iret
      0.31            -0.1        0.24        perf-profile.children.cycles-pp.__alloc_frozen_pages_noprof
      0.29            -0.1        0.22 ±  2%  perf-profile.children.cycles-pp.__dentry_kill
      0.45            -0.1        0.39 ±  2%  perf-profile.children.cycles-pp.__percpu_counter_init_many
      0.25            -0.1        0.19 ±  3%  perf-profile.children.cycles-pp.___slab_alloc
      0.27            -0.1        0.21 ±  2%  perf-profile.children.cycles-pp.lock_vma_under_rcu
      0.24 ±  4%      -0.1        0.19 ±  5%  perf-profile.children.cycles-pp.wp_page_copy
      0.35            -0.1        0.30        perf-profile.children.cycles-pp.__pick_next_task
      0.24 ±  2%      -0.1        0.18 ±  2%  perf-profile.children.cycles-pp.kernel_wait4
      0.14 ±  2%      -0.1        0.08 ±  4%  perf-profile.children.cycles-pp.shmctl_do_lock
      0.20 ±  3%      -0.1        0.14 ±  2%  perf-profile.children.cycles-pp.kthread
      0.34            -0.1        0.28        perf-profile.children.cycles-pp.pick_next_task_fair
      0.25            -0.1        0.20 ±  2%  perf-profile.children.cycles-pp.alloc_pages_noprof
      0.23 ±  2%      -0.1        0.17 ±  2%  perf-profile.children.cycles-pp.evict
      0.22 ±  2%      -0.1        0.17        perf-profile.children.cycles-pp.do_wait
      0.35 ±  2%      -0.1        0.30        perf-profile.children.cycles-pp.osq_unlock
      0.24 ±  2%      -0.1        0.18 ±  2%  perf-profile.children.cycles-pp.mas_next_slot
      0.23 ±  2%      -0.1        0.18 ±  2%  perf-profile.children.cycles-pp.__percpu_counter_sum
      0.24 ±  5%      -0.1        0.19 ±  5%  perf-profile.children.cycles-pp.set_pte_range
      0.35            -0.1        0.30        perf-profile.children.cycles-pp.__memcg_slab_post_alloc_hook
      0.22            -0.1        0.17        perf-profile.children.cycles-pp.get_page_from_freelist
      0.25            -0.0        0.20        perf-profile.children.cycles-pp.unlink_file_vma_batch_process
      0.25 ±  2%      -0.0        0.20        perf-profile.children.cycles-pp.enqueue_task
      0.18            -0.0        0.13 ±  2%  perf-profile.children.cycles-pp.schedule_tail
      0.23 ±  3%      -0.0        0.18 ±  2%  perf-profile.children.cycles-pp.ttwu_do_activate
      0.24            -0.0        0.19        perf-profile.children.cycles-pp.enqueue_task_fair
      0.19 ±  3%      -0.0        0.14 ±  4%  perf-profile.children.cycles-pp.__pte_offset_map_lock
      0.21 ±  2%      -0.0        0.16        perf-profile.children.cycles-pp._exit
      0.17 ±  2%      -0.0        0.12 ±  3%  perf-profile.children.cycles-pp.fput
      0.18 ±  2%      -0.0        0.14 ±  4%  perf-profile.children.cycles-pp.do_shared_fault
      0.23 ±  2%      -0.0        0.19 ±  3%  perf-profile.children.cycles-pp.wake_q_add
      0.27            -0.0        0.23 ±  2%  perf-profile.children.cycles-pp.sched_balance_rq
      0.20 ±  3%      -0.0        0.16 ±  3%  perf-profile.children.cycles-pp.sync_regs
      0.07 ±  5%      -0.0        0.02 ± 99%  perf-profile.children.cycles-pp.rcu_sched_clock_irq
      0.18 ±  2%      -0.0        0.14 ±  3%  perf-profile.children.cycles-pp.shmem_get_folio_gfp
      0.25            -0.0        0.21        perf-profile.children.cycles-pp.sched_balance_newidle
      0.18 ±  2%      -0.0        0.14 ±  4%  perf-profile.children.cycles-pp.__do_fault
      0.21 ±  5%      -0.0        0.17 ±  7%  perf-profile.children.cycles-pp.__pte_alloc
      0.17            -0.0        0.13 ±  2%  perf-profile.children.cycles-pp.shmem_fault
      0.20 ±  2%      -0.0        0.16 ±  3%  perf-profile.children.cycles-pp.__shmem_file_setup
      0.21 ±  2%      -0.0        0.16 ±  3%  perf-profile.children.cycles-pp.enqueue_entity
      0.22 ±  2%      -0.0        0.18 ±  2%  perf-profile.children.cycles-pp.unlink_file_vma_batch_add
      0.23            -0.0        0.19        perf-profile.children.cycles-pp.update_sg_lb_stats
      0.20 ±  3%      -0.0        0.16 ±  2%  perf-profile.children.cycles-pp.__mmdrop
      0.17 ±  2%      -0.0        0.13 ±  3%  perf-profile.children.cycles-pp.shmem_evict_inode
      0.28            -0.0        0.24        perf-profile.children.cycles-pp.mas_store
      0.15 ±  2%      -0.0        0.11 ±  4%  perf-profile.children.cycles-pp.pthread_rwlock_unlock
      0.18            -0.0        0.14 ±  2%  perf-profile.children.cycles-pp.dequeue_task_fair
      0.06 ±  6%      -0.0        0.02 ± 99%  perf-profile.children.cycles-pp.get_partial_node
      0.16 ±  2%      -0.0        0.12 ±  3%  perf-profile.children.cycles-pp.acct_collect
      0.15 ±  6%      -0.0        0.12 ±  5%  perf-profile.children.cycles-pp.folio_add_file_rmap_ptes
      0.16 ±  2%      -0.0        0.13 ±  3%  perf-profile.children.cycles-pp.ipc_addid
      0.12 ±  5%      -0.0        0.08 ±  5%  perf-profile.children.cycles-pp.worker_thread
      0.17 ±  2%      -0.0        0.13 ±  3%  perf-profile.children.cycles-pp.__rb_erase_color
      0.16 ±  2%      -0.0        0.13        perf-profile.children.cycles-pp.__cond_resched
      0.21 ±  2%      -0.0        0.18        perf-profile.children.cycles-pp.sched_balance_find_src_group
      0.14            -0.0        0.11 ±  4%  perf-profile.children.cycles-pp.rmqueue
      0.15            -0.0        0.12 ±  4%  perf-profile.children.cycles-pp.shmem_undo_range
      0.16            -0.0        0.13 ±  3%  perf-profile.children.cycles-pp.__account_obj_stock
      0.17 ±  2%      -0.0        0.14 ±  3%  perf-profile.children.cycles-pp.obj_cgroup_charge_account
      0.17 ±  2%      -0.0        0.14        perf-profile.children.cycles-pp.dequeue_entities
      0.21            -0.0        0.18        perf-profile.children.cycles-pp.update_sd_lb_stats
      0.11            -0.0        0.08 ±  4%  perf-profile.children.cycles-pp.lookup_fast
      0.15 ±  2%      -0.0        0.12 ±  4%  perf-profile.children.cycles-pp.setproctitle
      0.18 ±  6%      -0.0        0.15 ±  4%  perf-profile.children.cycles-pp.tlb_flush_mmu
      0.12 ±  3%      -0.0        0.09 ±  4%  perf-profile.children.cycles-pp.ttwu_queue_wakelist
      0.14 ±  4%      -0.0        0.11        perf-profile.children.cycles-pp.__rb_insert_augmented
      0.14            -0.0        0.11        perf-profile.children.cycles-pp.new_inode
      0.12            -0.0        0.09        perf-profile.children.cycles-pp.__rmqueue_pcplist
      0.14 ±  3%      -0.0        0.12 ±  4%  perf-profile.children.cycles-pp.dequeue_entity
      0.12 ±  3%      -0.0        0.09 ±  5%  perf-profile.children.cycles-pp.__mt_dup
      0.15 ±  2%      -0.0        0.12 ±  3%  perf-profile.children.cycles-pp.refill_obj_stock
      0.15 ±  2%      -0.0        0.12 ±  3%  perf-profile.children.cycles-pp.try_to_block_task
      0.11            -0.0        0.08 ±  4%  perf-profile.children.cycles-pp.intel_idle_xstate
      0.09 ±  7%      -0.0        0.06 ± 45%  perf-profile.children.cycles-pp.prctl
      0.08 ±  5%      -0.0        0.05        perf-profile.children.cycles-pp.__task_rq_lock
      0.12 ±  3%      -0.0        0.09        perf-profile.children.cycles-pp.__do_wait
      0.08 ±  5%      -0.0        0.06 ±  8%  perf-profile.children.cycles-pp.open_last_lookups
      0.11 ±  3%      -0.0        0.08 ±  5%  perf-profile.children.cycles-pp.link_path_walk
      0.14 ±  5%      -0.0        0.12 ±  4%  perf-profile.children.cycles-pp.__free_frozen_pages
      0.11 ±  5%      -0.0        0.08 ±  8%  perf-profile.children.cycles-pp.pmd_install
      0.12 ±  3%      -0.0        0.09 ±  7%  perf-profile.children.cycles-pp.alloc_thread_stack_node
      0.12 ±  3%      -0.0        0.09 ±  4%  perf-profile.children.cycles-pp.vms_clear_ptes
      0.10 ±  5%      -0.0        0.07        perf-profile.children.cycles-pp.__mmap
      0.11 ±  4%      -0.0        0.09 ±  4%  perf-profile.children.cycles-pp.free_frozen_page_commit
      0.07 ±  5%      -0.0        0.05 ± 45%  perf-profile.children.cycles-pp.strchrnul@plt
      0.14 ±  5%      -0.0        0.12 ±  8%  perf-profile.children.cycles-pp.pte_alloc_one
      0.10 ±  5%      -0.0        0.07 ±  9%  perf-profile.children.cycles-pp.__vmalloc_node_noprof
      0.10 ±  5%      -0.0        0.07 ±  9%  perf-profile.children.cycles-pp.__vmalloc_node_range_noprof
      0.08 ±  6%      -0.0        0.05 ±  7%  perf-profile.children.cycles-pp.do_perf_trace_sched_wakeup_template
      0.11 ±  4%      -0.0        0.09        perf-profile.children.cycles-pp.__shmem_get_inode
      0.12 ±  3%      -0.0        0.10 ±  3%  perf-profile.children.cycles-pp.tlb_remove_table_rcu
      0.09 ±  4%      -0.0        0.07 ±  5%  perf-profile.children.cycles-pp.wait_task_zombie
      0.14            -0.0        0.12 ±  4%  perf-profile.children.cycles-pp.sched_balance_update_blocked_averages
      0.06 ±  7%      -0.0        0.04 ± 44%  perf-profile.children.cycles-pp.inode_init_always_gfp
      0.08 ±  5%      -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.__snprintf_chk@plt
      0.08 ±  4%      -0.0        0.06        perf-profile.children.cycles-pp.__anon_vma_interval_tree_augment_rotate
      0.11 ±  3%      -0.0        0.09        perf-profile.children.cycles-pp.hugetlb_file_setup
      0.08 ±  4%      -0.0        0.06        perf-profile.children.cycles-pp.process_one_work
      0.08 ±  4%      -0.0        0.06        perf-profile.children.cycles-pp.run_posix_cpu_timers
      0.09 ±  4%      -0.0        0.07        perf-profile.children.cycles-pp.__put_user_4
      0.09 ±  4%      -0.0        0.07        perf-profile.children.cycles-pp.stress_set_proc_state
      0.13            -0.0        0.11 ±  3%  perf-profile.children.cycles-pp.update_rq_clock_task
      0.07 ±  5%      -0.0        0.05 ±  7%  perf-profile.children.cycles-pp.smpboot_thread_fn
      0.06 ±  6%      -0.0        0.04 ± 44%  perf-profile.children.cycles-pp.rmqueue_bulk
      0.10            -0.0        0.08        perf-profile.children.cycles-pp.alloc_inode
      0.08            -0.0        0.06        perf-profile.children.cycles-pp.allocate_slab
      0.08            -0.0        0.06        perf-profile.children.cycles-pp.perf_event_mmap
      0.08            -0.0        0.06        perf-profile.children.cycles-pp.update_rq_clock
      0.07            -0.0        0.05        perf-profile.children.cycles-pp.vfs_read
      0.09            -0.0        0.07        perf-profile.children.cycles-pp.mas_wr_node_store
      0.09            -0.0        0.07        perf-profile.children.cycles-pp.shmem_alloc_and_add_folio
      0.25            -0.0        0.23 ±  2%  perf-profile.children.cycles-pp.update_load_avg
      0.08 ±  5%      -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.folio_batch_move_lru
      0.08 ±  5%      -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.release_task
      0.10 ±  4%      -0.0        0.08 ±  4%  perf-profile.children.cycles-pp.vma_interval_tree_remove
      0.09 ±  4%      -0.0        0.07 ±  5%  perf-profile.children.cycles-pp.vm_mmap_pgoff
      0.18 ±  2%      -0.0        0.16 ±  3%  perf-profile.children.cycles-pp.mmap_region
      0.09 ±  5%      -0.0        0.08 ±  6%  perf-profile.children.cycles-pp.free_pcppages_bulk
      0.07 ±  6%      -0.0        0.06 ±  9%  perf-profile.children.cycles-pp.asm_sysvec_call_function_single
      0.08 ±  4%      -0.0        0.06 ±  7%  perf-profile.children.cycles-pp.__madvise
      0.07            -0.0        0.05 ±  7%  perf-profile.children.cycles-pp.perf_iterate_sb
      0.10            -0.0        0.08 ±  4%  perf-profile.children.cycles-pp.sched_balance_domains
      0.07            -0.0        0.05 ±  7%  perf-profile.children.cycles-pp.switch_mm_irqs_off
      0.08            -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.__smp_call_single_queue
      0.08            -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.__snprintf_chk
      0.09            -0.0        0.07 ±  5%  perf-profile.children.cycles-pp.rcu_all_qs
      0.08 ±  5%      -0.0        0.06        perf-profile.children.cycles-pp.mas_dup_alloc
      0.08 ±  5%      -0.0        0.06        perf-profile.children.cycles-pp.vsnprintf
      0.07 ±  5%      -0.0        0.05        perf-profile.children.cycles-pp.__folio_batch_release
      0.07 ±  5%      -0.0        0.05        perf-profile.children.cycles-pp.ksys_read
      0.11 ±  4%      -0.0        0.09 ±  7%  perf-profile.children.cycles-pp.mas_walk
      0.08 ±  6%      -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.lru_add_drain_cpu
      0.07            -0.0        0.05 ±  8%  perf-profile.children.cycles-pp.__page_cache_release
      0.09            -0.0        0.07 ±  6%  perf-profile.children.cycles-pp.entry_SYSCALL_64
      0.07 ±  5%      -0.0        0.05 ±  7%  perf-profile.children.cycles-pp.madvise_do_behavior
      0.08 ±  5%      -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.arch_exit_to_user_mode_prepare
      0.15 ±  2%      -0.0        0.13 ±  2%  perf-profile.children.cycles-pp.shm_destroy
      0.08 ±  6%      -0.0        0.06        perf-profile.children.cycles-pp.__memcg_kmem_charge_page
      0.08 ±  6%      -0.0        0.06        perf-profile.children.cycles-pp.perf_event_mmap_event
      0.07 ±  7%      -0.0        0.05        perf-profile.children.cycles-pp.mod_memcg_lruvec_state
      0.07 ±  5%      -0.0        0.05 ±  8%  perf-profile.children.cycles-pp.exit_notify
      0.07 ±  7%      -0.0        0.05 ±  7%  perf-profile.children.cycles-pp.alloc_pid
      0.08 ±  6%      -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.__wp_page_copy_user
      0.08 ±  6%      -0.0        0.06 ±  6%  perf-profile.children.cycles-pp.copy_mc_enhanced_fast_string
      0.07            -0.0        0.06 ±  8%  perf-profile.children.cycles-pp.__x64_sys_madvise
      0.07            -0.0        0.06 ±  8%  perf-profile.children.cycles-pp.do_madvise
      0.07 ±  7%      -0.0        0.05 ±  8%  perf-profile.children.cycles-pp.mas_next_node
      0.07 ±  5%      -0.0        0.06        perf-profile.children.cycles-pp.vm_normal_page
      0.08 ±  4%      -0.0        0.07        perf-profile.children.cycles-pp.__wake_up_sync_key
      0.10 ±  3%      -0.0        0.09        perf-profile.children.cycles-pp.ksys_write
      0.06 ±  6%      -0.0        0.05        perf-profile.children.cycles-pp.__update_load_avg_cfs_rq
      0.06 ±  6%      -0.0        0.05        perf-profile.children.cycles-pp._find_next_and_bit
      0.06 ±  6%      -0.0        0.05        perf-profile.children.cycles-pp.sched_balance_find_dst_group_cpu
      0.06 ±  6%      -0.0        0.05        perf-profile.children.cycles-pp.shuffle_freelist
      0.09            -0.0        0.08 ±  4%  perf-profile.children.cycles-pp.kfree
      0.07            -0.0        0.06        perf-profile.children.cycles-pp.mas_store_gfp
      0.07            -0.0        0.06        perf-profile.children.cycles-pp.native_sched_clock
      0.08            -0.0        0.07        perf-profile.children.cycles-pp.__wake_up_common
      0.06            -0.0        0.05        perf-profile.children.cycles-pp._find_next_or_bit
      0.06            -0.0        0.05        perf-profile.children.cycles-pp.arch_get_unmapped_area_topdown
      0.06            -0.0        0.05        perf-profile.children.cycles-pp.prep_new_page
      0.06            -0.0        0.05        perf-profile.children.cycles-pp.sched_clock_cpu
      0.06            -0.0        0.05        perf-profile.children.cycles-pp.vms_gather_munmap_vmas
      0.05            +0.0        0.06 ±  6%  perf-profile.children.cycles-pp.on_each_cpu_cond_mask
      0.05            +0.0        0.06 ±  6%  perf-profile.children.cycles-pp.smp_call_function_many_cond
      0.06            +0.0        0.08 ±  4%  perf-profile.children.cycles-pp.up_read
      0.25 ±  4%      +0.0        0.29 ±  5%  perf-profile.children.cycles-pp.task_tick_fair
      2.58            +0.0        2.63        perf-profile.children.cycles-pp.up_write
      0.00            +0.1        0.06 ±  8%  perf-profile.children.cycles-pp.__shm_open
      0.05 ±  7%      +0.1        0.11        perf-profile.children.cycles-pp.ipc_obtain_object_check
      0.05            +0.1        0.11 ±  4%  perf-profile.children.cycles-pp.ipc_obtain_object_idr
      0.00            +0.1        0.06 ±  7%  perf-profile.children.cycles-pp.shm_mmap
      0.04 ± 50%      +0.1        0.11 ±  6%  perf-profile.children.cycles-pp.__mutex_lock
      0.00            +0.1        0.09        perf-profile.children.cycles-pp.radix_tree_next_chunk
      1.95            +0.2        2.12        perf-profile.children.cycles-pp.rwsem_wake
      1.51            +0.2        1.74        perf-profile.children.cycles-pp.do_mmap
      1.43            +0.2        1.68        perf-profile.children.cycles-pp.__mmap_region
      1.33            +0.3        1.63        perf-profile.children.cycles-pp._raw_spin_lock_irqsave
      1.37            +1.1        2.52        perf-profile.children.cycles-pp.rwsem_down_read_slowpath
      1.37            +1.2        2.54        perf-profile.children.cycles-pp.down_read
      8.31            +1.3        9.64        perf-profile.children.cycles-pp.shmdt
     56.16            +1.3       57.51        perf-profile.children.cycles-pp.osq_lock
     87.26            +1.4       88.62        perf-profile.children.cycles-pp.do_syscall_64
     87.27            +1.4       88.63        perf-profile.children.cycles-pp.entry_SYSCALL_64_after_hwframe
      8.08            +1.4        9.47        perf-profile.children.cycles-pp.ksys_shmdt
      7.92            +1.4        9.35        perf-profile.children.cycles-pp.do_vmi_align_munmap
      7.80            +1.4        9.25        perf-profile.children.cycles-pp.remove_vma
      7.80            +1.5        9.26        perf-profile.children.cycles-pp.vms_complete_munmap_vmas
      8.26            +1.6        9.90        perf-profile.children.cycles-pp.__shm_close
      0.18 ±  2%      +2.2        2.36        perf-profile.children.cycles-pp.__radix_tree_lookup
     13.40            +2.4       15.75        perf-profile.children.cycles-pp.shmctl
     13.09            +2.4       15.50        perf-profile.children.cycles-pp.ksys_shmctl
     63.32            +2.6       65.87        perf-profile.children.cycles-pp.down_write
     10.97            +2.7       13.62        perf-profile.children.cycles-pp.shmat
     10.91            +2.7       13.58        perf-profile.children.cycles-pp.__x64_sys_shmat
     10.91            +2.7       13.58        perf-profile.children.cycles-pp.do_shmat
     62.44            +2.7       65.18        perf-profile.children.cycles-pp.rwsem_down_write_slowpath
      4.61            +3.0        7.59        perf-profile.children.cycles-pp._raw_spin_lock_irq
      5.90            +4.4       10.32        perf-profile.children.cycles-pp.native_queued_spin_lock_slowpath
      1.66            -0.4        1.26        perf-profile.self.cycles-pp.anon_vma_interval_tree_insert
      2.17            -0.4        1.80        perf-profile.self.cycles-pp.rwsem_spin_on_owner
      1.92            -0.4        1.54 ±  3%  perf-profile.self.cycles-pp.queue_event
      0.28            -0.3        0.02 ± 99%  perf-profile.self.cycles-pp.idr_find
      0.95            -0.2        0.70        perf-profile.self.cycles-pp._raw_spin_lock
      1.00 ±  2%      -0.2        0.76 ±  4%  perf-profile.self.cycles-pp.zap_present_ptes
      1.19            -0.2        0.95        perf-profile.self.cycles-pp.intel_idle
      0.85 ±  5%      -0.2        0.64 ±  9%  perf-profile.self.cycles-pp.copy_present_ptes
      0.84            -0.2        0.66 ±  2%  perf-profile.self.cycles-pp.down_write
      0.74            -0.2        0.56        perf-profile.self.cycles-pp.poll_idle
      0.83 ±  5%      -0.2        0.67 ±  6%  perf-profile.self.cycles-pp.next_uptodate_folio
      0.42 ±  9%      -0.2        0.27 ±  3%  perf-profile.self.cycles-pp.ktime_get
      0.61            -0.1        0.47        perf-profile.self.cycles-pp.__anon_vma_interval_tree_remove
      0.61            -0.1        0.46 ±  2%  perf-profile.self.cycles-pp.__vma_enter_locked
      0.47            -0.1        0.34        perf-profile.self.cycles-pp.__pi_memset
      0.63            -0.1        0.50 ±  2%  perf-profile.self.cycles-pp.up_write
      0.47 ±  2%      -0.1        0.35 ±  2%  perf-profile.self.cycles-pp.__vma_start_write
      0.57 ±  9%      -0.1        0.45 ±  7%  perf-profile.self.cycles-pp.folio_remove_rmap_ptes
      0.48            -0.1        0.37 ±  2%  perf-profile.self.cycles-pp.__slab_free
      0.47 ±  2%      -0.1        0.37 ±  2%  perf-profile.self.cycles-pp.anon_vma_clone
      0.65            -0.1        0.55        perf-profile.self.cycles-pp._raw_spin_lock_irq
      0.54            -0.1        0.45        perf-profile.self.cycles-pp._raw_spin_lock_irqsave
      0.57 ±  7%      -0.1        0.48 ±  4%  perf-profile.self.cycles-pp.folios_put_refs
      0.41            -0.1        0.32 ±  2%  perf-profile.self.cycles-pp.dup_mmap
      0.32            -0.1        0.24        perf-profile.self.cycles-pp.__kmem_cache_alloc_bulk
      0.33 ±  2%      -0.1        0.26 ±  2%  perf-profile.self.cycles-pp.unlink_anon_vmas
      0.52            -0.1        0.45        perf-profile.self.cycles-pp.rwsem_down_write_slowpath
      0.33            -0.1        0.26        perf-profile.self.cycles-pp.__memcg_slab_free_hook
      0.29 ±  5%      -0.1        0.22 ±  6%  perf-profile.self.cycles-pp.zap_pte_range
      0.27 ±  2%      -0.1        0.21 ±  2%  perf-profile.self.cycles-pp.native_irq_return_iret
      0.32            -0.1        0.26        perf-profile.self.cycles-pp.update_sg_wakeup_stats
      0.30 ±  2%      -0.1        0.24 ±  2%  perf-profile.self.cycles-pp.free_pages_and_swap_cache
      0.35            -0.1        0.29        perf-profile.self.cycles-pp.osq_unlock
      0.20 ±  2%      -0.0        0.15 ±  2%  perf-profile.self.cycles-pp.__percpu_counter_sum
      0.18 ±  2%      -0.0        0.14 ±  2%  perf-profile.self.cycles-pp.lock_vma_under_rcu
      0.23 ±  2%      -0.0        0.19        perf-profile.self.cycles-pp.wake_q_add
      0.25 ±  5%      -0.0        0.20 ±  4%  perf-profile.self.cycles-pp.filemap_map_pages
      0.20 ±  3%      -0.0        0.16 ±  3%  perf-profile.self.cycles-pp.sync_regs
      0.14 ±  5%      -0.0        0.10        perf-profile.self.cycles-pp.wake_up_q
      0.23            -0.0        0.19 ±  2%  perf-profile.self.cycles-pp.kmem_cache_alloc_noprof
      0.18 ±  2%      -0.0        0.14 ±  5%  perf-profile.self.cycles-pp.anon_vma_fork
      0.16 ±  2%      -0.0        0.12 ±  3%  perf-profile.self.cycles-pp.mas_next_slot
      0.20 ±  2%      -0.0        0.16 ±  3%  perf-profile.self.cycles-pp.kmem_cache_free
      0.16 ±  3%      -0.0        0.12 ±  3%  perf-profile.self.cycles-pp.fput
      0.07            -0.0        0.03 ± 70%  perf-profile.self.cycles-pp.__put_anon_vma
      0.10 ±  5%      -0.0        0.06        perf-profile.self.cycles-pp.ipc_addid
      0.06            -0.0        0.02 ± 99%  perf-profile.self.cycles-pp._find_next_and_bit
      0.15 ±  6%      -0.0        0.11 ±  9%  perf-profile.self.cycles-pp.folio_add_file_rmap_ptes
      0.14            -0.0        0.11        perf-profile.self.cycles-pp.cpuidle_enter_state
      0.22 ±  2%      -0.0        0.19        perf-profile.self.cycles-pp.mas_store
      0.15 ±  2%      -0.0        0.12 ±  3%  perf-profile.self.cycles-pp.__rb_erase_color
      0.14 ±  3%      -0.0        0.11 ±  4%  perf-profile.self.cycles-pp.__rb_insert_augmented
      0.17 ±  2%      -0.0        0.14 ±  3%  perf-profile.self.cycles-pp.update_sg_lb_stats
      0.11            -0.0        0.08 ±  4%  perf-profile.self.cycles-pp.intel_idle_xstate
      0.11 ±  3%      -0.0        0.08        perf-profile.self.cycles-pp.try_to_wake_up
      0.12 ±  4%      -0.0        0.09        perf-profile.self.cycles-pp.__schedule
      0.18            -0.0        0.16 ±  3%  perf-profile.self.cycles-pp.__memcg_slab_post_alloc_hook
      0.10 ±  5%      -0.0        0.07 ±  6%  perf-profile.self.cycles-pp.vma_interval_tree_remove
      0.10            -0.0        0.08 ±  4%  perf-profile.self.cycles-pp.___slab_alloc
      0.09            -0.0        0.07 ±  5%  perf-profile.self.cycles-pp.__cond_resched
      0.09 ±  4%      -0.0        0.07 ± 11%  perf-profile.self.cycles-pp.stress_shm_sysv_child
      0.10 ±  4%      -0.0        0.08 ±  5%  perf-profile.self.cycles-pp.mas_walk
      0.08            -0.0        0.06        perf-profile.self.cycles-pp.__anon_vma_interval_tree_augment_rotate
      0.11            -0.0        0.09        perf-profile.self.cycles-pp.acct_collect
      0.08            -0.0        0.06        perf-profile.self.cycles-pp.run_posix_cpu_timers
      0.07            -0.0        0.05        perf-profile.self.cycles-pp.switch_mm_irqs_off
      0.12            -0.0        0.10        perf-profile.self.cycles-pp.ksys_shmdt
      0.11 ±  4%      -0.0        0.09 ±  5%  perf-profile.self.cycles-pp.__account_obj_stock
      0.07            -0.0        0.05 ±  7%  perf-profile.self.cycles-pp.shmem_get_folio_gfp
      0.09 ±  5%      -0.0        0.07 ±  5%  perf-profile.self.cycles-pp.set_pte_range
      0.10 ±  4%      -0.0        0.09 ±  4%  perf-profile.self.cycles-pp.update_rq_clock_task
      0.07 ±  7%      -0.0        0.05 ±  7%  perf-profile.self.cycles-pp.refill_obj_stock
      0.07            -0.0        0.06 ±  6%  perf-profile.self.cycles-pp.native_sched_clock
      0.08            -0.0        0.07        perf-profile.self.cycles-pp.menu_select
      0.06            -0.0        0.05        perf-profile.self.cycles-pp.__update_load_avg_cfs_rq
      0.06            -0.0        0.05        perf-profile.self.cycles-pp.obj_cgroup_charge_account
      0.09            +0.0        0.10        perf-profile.self.cycles-pp.ksys_shmctl
      0.07 ±  5%      +0.0        0.08 ±  4%  perf-profile.self.cycles-pp.rwsem_down_read_slowpath
      0.05            +0.0        0.07        perf-profile.self.cycles-pp.up_read
      0.00            +0.1        0.06 ±  6%  perf-profile.self.cycles-pp.down_read
      0.00            +0.1        0.09        perf-profile.self.cycles-pp.radix_tree_next_chunk
     55.71            +1.3       57.03        perf-profile.self.cycles-pp.osq_lock
      0.17 ±  2%      +2.2        2.34        perf-profile.self.cycles-pp.__radix_tree_lookup
      5.90            +4.4       10.32        perf-profile.self.cycles-pp.native_queued_spin_lock_slowpath





Disclaimer:
Results have been estimated based on internal Intel analysis and are provided
for informational purposes only. Any difference in system hardware or software
design or configuration may affect actual performance.


-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


^ permalink raw reply

* Re: [PATCH] HID: i2c-hid: override HID descriptors for some Haptick 5288 touchpads
From: kenkinming2002 @ 2026-01-13 13:11 UTC (permalink / raw)
  To: Benjamin Tissoires; +Cc: jikos, linux-input, linux-kernel
In-Reply-To: <aV6d5mt2veL-vEvf@anonymous>

On Thu, Jan 08, 2026 at 02:14:29AM +0800, kenkinming2002@gmail.com wrote:
> > The simplest "solution" following what you are doing is making a HID-BPF
> > fixup which checks whether the device properly sent the report
> > descriptor and if not puts the one here. The HID-BPF has the advantage
> > of being compatible with hid-multitouch so you won't get into troubles
> > with a separate module.
> This might be a solution but would that not only fix it just for me? I
> would have to look into how to do HID-BPF fixup.
An update, I have looked into HID-BPF but it seems to me that we can
only fix up the HID report descriptor and not the HID descriptor (this
descriptor is specific to i2c-hid device) but from my testing both
descriptor can be corrupted. Specifically, I see messages such as:

  i2c_hid_acpi i2c-SPPT2600:00: unexpected HID descriptor bcdVersion (0x0209)
  i2c_hid_acpi i2c-SPPT2600:00: Failed to fetch the HID Descriptor

appearing in my log.

For now, I am just going to just apply the patch locally for myself till
a better solution come up.

I have finally clean up the pile of garbage I have while investigating
the problem and put up a proper git repository with relevant script and
logs at https://github.com/kenkinming2002/samsung-i2c-hid-bug-repro.git.

Huge thanks to Benjamin and anyway who might have stumbled across this
patch for your time.

Yours sincerly,
Ken Kwok

^ permalink raw reply

* [PATCH v4 4/6] dt-bindings: power: supply: google,goldfish-battery: Convert to DT schema
From: Kuan-Wei Chiu @ 2026-01-13  9:26 UTC (permalink / raw)
  To: airlied, simona, maarten.lankhorst, mripard, tzimmermann, robh,
	krzk+dt, conor+dt, dmitry.torokhov, sre, gregkh, jirislaby,
	lgirdwood, broonie
  Cc: jserv, eleanor15x, dri-devel, devicetree, linux-kernel,
	linux-input, linux-pm, linux-serial, linux-sound, Kuan-Wei Chiu
In-Reply-To: <20260113092602.3197681-1-visitorckw@gmail.com>

Convert the Android Goldfish Battery binding to DT schema format.
Move the file to the power/supply directory to match the subsystem.
Update the example node name to 'battery' to comply with generic node
naming standards.

Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
---
 .../devicetree/bindings/goldfish/battery.txt  | 17 --------
 .../power/supply/google,goldfish-battery.yaml | 41 +++++++++++++++++++
 2 files changed, 41 insertions(+), 17 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/goldfish/battery.txt
 create mode 100644 Documentation/devicetree/bindings/power/supply/google,goldfish-battery.yaml

diff --git a/Documentation/devicetree/bindings/goldfish/battery.txt b/Documentation/devicetree/bindings/goldfish/battery.txt
deleted file mode 100644
index 4fb613933214..000000000000
--- a/Documentation/devicetree/bindings/goldfish/battery.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Android Goldfish Battery
-
-Android goldfish battery device generated by android emulator.
-
-Required properties:
-
-- compatible : should contain "google,goldfish-battery" to match emulator
-- reg        : <registers mapping>
-- interrupts : <interrupt mapping>
-
-Example:
-
-	goldfish_battery@9020000 {
-		compatible = "google,goldfish-battery";
-		reg = <0x9020000 0x1000>;
-		interrupts = <0x3>;
-	};
diff --git a/Documentation/devicetree/bindings/power/supply/google,goldfish-battery.yaml b/Documentation/devicetree/bindings/power/supply/google,goldfish-battery.yaml
new file mode 100644
index 000000000000..634327c89c88
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/supply/google,goldfish-battery.yaml
@@ -0,0 +1,41 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/power/supply/google,goldfish-battery.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Android Goldfish Battery
+
+maintainers:
+  - Kuan-Wei Chiu <visitorckw@gmail.com>
+
+allOf:
+  - $ref: power-supply.yaml#
+
+description:
+  Android goldfish battery device generated by Android emulator.
+
+properties:
+  compatible:
+    const: google,goldfish-battery
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - interrupts
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    battery@9020000 {
+        compatible = "google,goldfish-battery";
+        reg = <0x9020000 0x1000>;
+        interrupts = <3>;
+    };
-- 
2.52.0.457.g6b5491de43-goog


^ permalink raw reply related

* [PATCH v4 1/6] dt-bindings: serial: google,goldfish-tty: Convert to DT schema
From: Kuan-Wei Chiu @ 2026-01-13  9:25 UTC (permalink / raw)
  To: airlied, simona, maarten.lankhorst, mripard, tzimmermann, robh,
	krzk+dt, conor+dt, dmitry.torokhov, sre, gregkh, jirislaby,
	lgirdwood, broonie
  Cc: jserv, eleanor15x, dri-devel, devicetree, linux-kernel,
	linux-input, linux-pm, linux-serial, linux-sound, Kuan-Wei Chiu,
	Krzysztof Kozlowski
In-Reply-To: <20260113092602.3197681-1-visitorckw@gmail.com>

Convert the Google Goldfish TTY binding to DT schema format.
Move the file to the serial directory to match the subsystem.
Update the example node name to 'serial' to comply with generic node
naming standards.

Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
Changes in v4:
- Use decimal format for interrupts in the example.

 .../devicetree/bindings/goldfish/tty.txt      | 17 --------
 .../bindings/serial/google,goldfish-tty.yaml  | 41 +++++++++++++++++++
 2 files changed, 41 insertions(+), 17 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/goldfish/tty.txt
 create mode 100644 Documentation/devicetree/bindings/serial/google,goldfish-tty.yaml

diff --git a/Documentation/devicetree/bindings/goldfish/tty.txt b/Documentation/devicetree/bindings/goldfish/tty.txt
deleted file mode 100644
index 82648278da77..000000000000
--- a/Documentation/devicetree/bindings/goldfish/tty.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Android Goldfish TTY
-
-Android goldfish tty device generated by android emulator.
-
-Required properties:
-
-- compatible : should contain "google,goldfish-tty" to match emulator
-- reg        : <registers mapping>
-- interrupts : <interrupt mapping>
-
-Example:
-
-	goldfish_tty@1f004000 {
-		compatible = "google,goldfish-tty";
-		reg = <0x1f004000 0x1000>;
-		interrupts = <0xc>;
-	};
diff --git a/Documentation/devicetree/bindings/serial/google,goldfish-tty.yaml b/Documentation/devicetree/bindings/serial/google,goldfish-tty.yaml
new file mode 100644
index 000000000000..0626ce58740c
--- /dev/null
+++ b/Documentation/devicetree/bindings/serial/google,goldfish-tty.yaml
@@ -0,0 +1,41 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/serial/google,goldfish-tty.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Google Goldfish TTY
+
+maintainers:
+  - Kuan-Wei Chiu <visitorckw@gmail.com>
+
+allOf:
+  - $ref: /schemas/serial/serial.yaml#
+
+description:
+  Android goldfish TTY device generated by Android emulator.
+
+properties:
+  compatible:
+    const: google,goldfish-tty
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - interrupts
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    serial@1f004000 {
+        compatible = "google,goldfish-tty";
+        reg = <0x1f004000 0x1000>;
+        interrupts = <12>;
+    };
-- 
2.52.0.457.g6b5491de43-goog


^ permalink raw reply related

* [PATCH v4 0/6] dt-bindings: goldfish: Convert to DT schema
From: Kuan-Wei Chiu @ 2026-01-13  9:25 UTC (permalink / raw)
  To: airlied, simona, maarten.lankhorst, mripard, tzimmermann, robh,
	krzk+dt, conor+dt, dmitry.torokhov, sre, gregkh, jirislaby,
	lgirdwood, broonie
  Cc: jserv, eleanor15x, dri-devel, devicetree, linux-kernel,
	linux-input, linux-pm, linux-serial, linux-sound, Kuan-Wei Chiu

Convert the Android Goldfish emulator platform bindings from text
format to DT schema.

Most of these bindings are currently located in
Documentation/devicetree/bindings/goldfish/. Move them to the
appropriate subsystem directories (serial, input, power, sound, misc)
to align with the kernel directory structure.

Update the examples to use generic node names (e.g., 'serial' instead
of 'goldfish_tty') and fix minor inconsistencies in the original
documentation to comply with current DT specifications.
---
Changes in v4:
- Update 'interrupts' property in examples to use decimal values where
  appropriate, replacing hex values.

Changes in v3:
- Update 'interrupts' property in examples to use decimal values where
  appropriate, replacing hex values.

Changes in v2:
- Add references to generic subsystem schemas (serial, input,
  power-supply) where applicable.
- Update property validation to use 'unevaluatedProperties: false' for
  schemas referencing generic bindings.

v3: https://lore.kernel.org/lkml/20260112185044.1865605-1-visitorckw@gmail.com/
v2: https://lore.kernel.org/lkml/20260108080836.3777829-1-visitorckw@gmail.com/
v1: https://lore.kernel.org/lkml/20251230181031.3191565-1-visitorckw@gmail.com/

Kuan-Wei Chiu (6):
  dt-bindings: serial: google,goldfish-tty: Convert to DT schema
  dt-bindings: misc: google,android-pipe: Convert to DT schema
  dt-bindings: input: google,goldfish-events-keypad: Convert to DT
    schema
  dt-bindings: power: supply: google,goldfish-battery: Convert to DT
    schema
  dt-bindings: sound: google,goldfish-audio: Convert to DT schema
  dt-bindings: display: google,goldfish-fb: Convert to DT schema

 .../bindings/display/google,goldfish-fb.txt   | 17 --------
 .../bindings/display/google,goldfish-fb.yaml  | 38 +++++++++++++++++
 .../devicetree/bindings/goldfish/audio.txt    | 17 --------
 .../devicetree/bindings/goldfish/battery.txt  | 17 --------
 .../devicetree/bindings/goldfish/events.txt   | 17 --------
 .../devicetree/bindings/goldfish/pipe.txt     | 17 --------
 .../devicetree/bindings/goldfish/tty.txt      | 17 --------
 .../input/google,goldfish-events-keypad.yaml  | 41 +++++++++++++++++++
 .../bindings/misc/google,android-pipe.yaml    | 38 +++++++++++++++++
 .../power/supply/google,goldfish-battery.yaml | 41 +++++++++++++++++++
 .../bindings/serial/google,goldfish-tty.yaml  | 41 +++++++++++++++++++
 .../bindings/sound/google,goldfish-audio.yaml | 38 +++++++++++++++++
 12 files changed, 237 insertions(+), 102 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/display/google,goldfish-fb.txt
 create mode 100644 Documentation/devicetree/bindings/display/google,goldfish-fb.yaml
 delete mode 100644 Documentation/devicetree/bindings/goldfish/audio.txt
 delete mode 100644 Documentation/devicetree/bindings/goldfish/battery.txt
 delete mode 100644 Documentation/devicetree/bindings/goldfish/events.txt
 delete mode 100644 Documentation/devicetree/bindings/goldfish/pipe.txt
 delete mode 100644 Documentation/devicetree/bindings/goldfish/tty.txt
 create mode 100644 Documentation/devicetree/bindings/input/google,goldfish-events-keypad.yaml
 create mode 100644 Documentation/devicetree/bindings/misc/google,android-pipe.yaml
 create mode 100644 Documentation/devicetree/bindings/power/supply/google,goldfish-battery.yaml
 create mode 100644 Documentation/devicetree/bindings/serial/google,goldfish-tty.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/google,goldfish-audio.yaml

-- 
2.52.0.457.g6b5491de43-goog


^ permalink raw reply

* [PATCH v4 2/6] dt-bindings: misc: google,android-pipe: Convert to DT schema
From: Kuan-Wei Chiu @ 2026-01-13  9:25 UTC (permalink / raw)
  To: airlied, simona, maarten.lankhorst, mripard, tzimmermann, robh,
	krzk+dt, conor+dt, dmitry.torokhov, sre, gregkh, jirislaby,
	lgirdwood, broonie
  Cc: jserv, eleanor15x, dri-devel, devicetree, linux-kernel,
	linux-input, linux-pm, linux-serial, linux-sound, Kuan-Wei Chiu,
	Krzysztof Kozlowski
In-Reply-To: <20260113092602.3197681-1-visitorckw@gmail.com>

Convert the Android Goldfish QEMU Pipe binding to DT schema format.
Move the file to the misc directory as it represents a miscellaneous
communication device.
Update the example node name to 'pipe' to comply with generic node
naming standards and fix the mismatch between unit address and reg
property in the original example.

Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
Changes in v4:
- Use decimal format for interrupts in the example.

 .../devicetree/bindings/goldfish/pipe.txt     | 17 ---------
 .../bindings/misc/google,android-pipe.yaml    | 38 +++++++++++++++++++
 2 files changed, 38 insertions(+), 17 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/goldfish/pipe.txt
 create mode 100644 Documentation/devicetree/bindings/misc/google,android-pipe.yaml

diff --git a/Documentation/devicetree/bindings/goldfish/pipe.txt b/Documentation/devicetree/bindings/goldfish/pipe.txt
deleted file mode 100644
index 5637ce701788..000000000000
--- a/Documentation/devicetree/bindings/goldfish/pipe.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Android Goldfish QEMU Pipe
-
-Android pipe virtual device generated by android emulator.
-
-Required properties:
-
-- compatible : should contain "google,android-pipe" to match emulator
-- reg        : <registers mapping>
-- interrupts : <interrupt mapping>
-
-Example:
-
-	android_pipe@a010000 {
-		compatible = "google,android-pipe";
-		reg = <ff018000 0x2000>;
-		interrupts = <0x12>;
-	};
diff --git a/Documentation/devicetree/bindings/misc/google,android-pipe.yaml b/Documentation/devicetree/bindings/misc/google,android-pipe.yaml
new file mode 100644
index 000000000000..9e8046fd358d
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/google,android-pipe.yaml
@@ -0,0 +1,38 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/misc/google,android-pipe.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Android Goldfish QEMU Pipe
+
+maintainers:
+  - Kuan-Wei Chiu <visitorckw@gmail.com>
+
+description:
+  Android QEMU pipe virtual device generated by Android emulator.
+
+properties:
+  compatible:
+    const: google,android-pipe
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - interrupts
+
+additionalProperties: false
+
+examples:
+  - |
+    pipe@ff018000 {
+        compatible = "google,android-pipe";
+        reg = <0xff018000 0x2000>;
+        interrupts = <18>;
+    };
-- 
2.52.0.457.g6b5491de43-goog


^ permalink raw reply related

* [PATCH v4 3/6] dt-bindings: input: google,goldfish-events-keypad: Convert to DT schema
From: Kuan-Wei Chiu @ 2026-01-13  9:25 UTC (permalink / raw)
  To: airlied, simona, maarten.lankhorst, mripard, tzimmermann, robh,
	krzk+dt, conor+dt, dmitry.torokhov, sre, gregkh, jirislaby,
	lgirdwood, broonie
  Cc: jserv, eleanor15x, dri-devel, devicetree, linux-kernel,
	linux-input, linux-pm, linux-serial, linux-sound, Kuan-Wei Chiu
In-Reply-To: <20260113092602.3197681-1-visitorckw@gmail.com>

Convert the Android Goldfish Events Keypad binding to DT schema format.
Move the file to the input directory to match the subsystem.
Update the example node name to 'keypad' to comply with generic node
naming standards.

Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
---
 .../devicetree/bindings/goldfish/events.txt   | 17 --------
 .../input/google,goldfish-events-keypad.yaml  | 41 +++++++++++++++++++
 2 files changed, 41 insertions(+), 17 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/goldfish/events.txt
 create mode 100644 Documentation/devicetree/bindings/input/google,goldfish-events-keypad.yaml

diff --git a/Documentation/devicetree/bindings/goldfish/events.txt b/Documentation/devicetree/bindings/goldfish/events.txt
deleted file mode 100644
index 5babf46317a4..000000000000
--- a/Documentation/devicetree/bindings/goldfish/events.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Android Goldfish Events Keypad
-
-Android goldfish events keypad device generated by android emulator.
-
-Required properties:
-
-- compatible : should contain "google,goldfish-events-keypad" to match emulator
-- reg        : <registers mapping>
-- interrupts : <interrupt mapping>
-
-Example:
-
-	goldfish-events@9040000 {
-		compatible = "google,goldfish-events-keypad";
-		reg = <0x9040000 0x1000>;
-		interrupts = <0x5>;
-	};
diff --git a/Documentation/devicetree/bindings/input/google,goldfish-events-keypad.yaml b/Documentation/devicetree/bindings/input/google,goldfish-events-keypad.yaml
new file mode 100644
index 000000000000..4e3a010a70c5
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/google,goldfish-events-keypad.yaml
@@ -0,0 +1,41 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/google,goldfish-events-keypad.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Android Goldfish Events Keypad
+
+maintainers:
+  - Kuan-Wei Chiu <visitorckw@gmail.com>
+
+allOf:
+  - $ref: input.yaml#
+
+description:
+  Android goldfish events keypad device generated by android emulator.
+
+properties:
+  compatible:
+    const: google,goldfish-events-keypad
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - interrupts
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    keypad@9040000 {
+        compatible = "google,goldfish-events-keypad";
+        reg = <0x9040000 0x1000>;
+        interrupts = <5>;
+    };
-- 
2.52.0.457.g6b5491de43-goog


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox