lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250117105132.4122940b@gandalf.local.home>
Date: Fri, 17 Jan 2025 10:51:32 -0500
From: Steven Rostedt <rostedt@...dmis.org>
To: Keita Morisaki <keyz@...gle.com>
Cc: mhiramat@...nel.org, mathieu.desnoyers@...icios.com,
 linux-kernel@...r.kernel.org, linux-trace-kernel@...r.kernel.org,
 lpieralisi@...nel.org, sudeep.holla@....com, rafael@...nel.org,
 daniel.lezcano@...aro.org, linux-pm@...r.kernel.org, aarontian@...gle.com,
 yimingtseng@...gle.com
Subject: Re: [PATCH] cpuidle: psci: Add trace for PSCI domain idle

On Fri, 17 Jan 2025 12:01:32 +0800
Keita Morisaki <keyz@...gle.com> wrote:

> @@ -74,7 +75,9 @@ static __cpuidle int __psci_enter_domain_idle_state(struct cpuidle_device *dev,
>  	if (!state)
>  		state = states[idx];
>  
> +	trace_psci_domain_idle(dev->cpu, state, true, s2idle);
>  	ret = psci_cpu_suspend_enter(state) ? -1 : idx;
> +	trace_psci_domain_idle(dev->cpu, state, false, s2idle);

Why not make that into two different events:

+	trace_psci_domain_idle_enter(dev->cpu, state, s2idle);
 	ret = psci_cpu_suspend_enter(state) ? -1 : idx;
+	trace_psci_domain_idle_exit(dev->cpu, state, s2idle);

>  
>  	if (s2idle)
>  		dev_pm_genpd_resume(pd_dev);
> diff --git a/include/trace/events/power.h b/include/trace/events/power.h
> index d2349b6b531a..82ad8bb1c477 100644
> --- a/include/trace/events/power.h
> +++ b/include/trace/events/power.h
> @@ -62,6 +62,31 @@ TRACE_EVENT(cpu_idle_miss,
>  		(unsigned long)__entry->state, (__entry->below)?"below":"above")
>  );
>  
> +TRACE_EVENT(psci_domain_idle,
> +
> +	TP_PROTO(unsigned int cpu_id, unsigned int state, bool enter, bool s2idle),
> +
> +	TP_ARGS(cpu_id, state, enter, s2idle),
> +
> +	TP_STRUCT__entry(
> +		__field(u32,		cpu_id)
> +		__field(u32,		state)
> +		__field(bool,		enter)
> +		__field(bool,		s2idle)
> +	),
> +
> +	TP_fast_assign(
> +		__entry->cpu_id = cpu_id;
> +		__entry->state = state;
> +		__entry->enter = enter;
> +		__entry->s2idle = s2idle;
> +	),
> +
> +	TP_printk("cpu_id=%lu state=0x%lx type=%s, is_s2idle=%s",
> +		  (unsigned long)__entry->cpu_id, (unsigned long)__entry->state,
> +		  (__entry->enter)?"enter":"exit", (__entry->s2idle)?"yes":"no")
> +);
> +

Then make the above into a DECLARE_EVENT_CLASS:

DECLARE_EVENT_CLASS(psci_domain_idle_template,

	TP_PROTO(unsigned int cpu_id, unsigned int state, bool s2idle),

	TP_ARGS(cpu_id, state, s2idle),

	TP_STRUCT__entry(
		__field(u32,		cpu_id)
		__field(u32,		state)
		__field(bool,		s2idle)
	),

	TP_fast_assign(
		__entry->cpu_id = cpu_id;
		__entry->state = state;
		__entry->s2idle = s2idle;
	),

	TP_printk("cpu_id=%lu state=0x%lx type=%s, is_s2idle=%s",
		  (unsigned long)__entry->cpu_id, (unsigned long)__entry->state,
		  (__entry->s2idle)?"yes":"no")
);


DEFINE_EVENT(psci_domain_idle_template, psci_domain_idle_enter,

	TP_PROTO(unsigned int cpu_id, unsigned int state, bool s2idle),

	TP_ARGS(cpu_id, state, s2idle),
);

DEFINE_EVENT(psci_domain_idle_template, psci_domain_idle_exit,

	TP_PROTO(unsigned int cpu_id, unsigned int state, bool s2idle),

	TP_ARGS(cpu_id, state, s2idle),
);

And then you could easily attach synthetic events to them to get the
timings and such.

-- Steve

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ