public inbox for linux-rt-users@vger.kernel.org
 help / color / mirror / Atom feed
From: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>
To: "Uwe Kleine-König" <ukleinek@debian.org>,
	"Len Brown" <lenb@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	"Viresh Kumar" <viresh.kumar@linaro.org>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Borislav Petkov" <bp@alien8.de>,
	"Dave Hansen" <dave.hansen@linux.intel.com>
Cc: linux-pm@vger.kernel.org, x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	 linux-rt-users@vger.kernel.org,
	xiao sheng wen <atzlinux@sina.com>
Subject: Re: [PATCH] cpufreq: intel_pstate: Make hwp_notify_lock a raw spinlock
Date: Fri, 27 Sep 2024 03:47:08 -0700	[thread overview]
Message-ID: <229b9ff9ef6cf201b4e56d6ccb03c028c2d8f51f.camel@linux.intel.com> (raw)
In-Reply-To: <20240919081121.10784-2-ukleinek@debian.org>

On Thu, 2024-09-19 at 10:11 +0200, Uwe Kleine-König wrote:
> notify_hwp_interrupt() is called via sysvec_thermal() ->
> smp_thermal_vector() -> intel_thermal_interrupt() in hard irq
> context.
> For this reason it must not use a simple spin_lock that sleeps with
> PREEMPT_RT enabled. So convert it to a raw spinlock.
> 
> Reported-by: xiao sheng wen <atzlinux@sina.com>
> Link: https://bugs.debian.org/1076483
> Signed-off-by: Uwe Kleine-König <ukleinek@debian.org>

Missing Tested-by?

    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>

> ---
> Hello,
> 
> this is deep in x86 land where I have *very* little experience and
> knowledge. Is sysvec_thermal() (defined in arch/x86/kernel/irq.c)
> really
> running in hard irq context? The stacktrace in the Debian bug report
> suggests that.
> 
> So please double check my reasoning before applying this patch.
> 
This is thermal LVT and runs in hard IRQ context. 

> Thanks
> Uwe
> 
>  drivers/cpufreq/intel_pstate.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/cpufreq/intel_pstate.c
> b/drivers/cpufreq/intel_pstate.c
> index aaea9a39eced..b0018f371ea3 100644
> --- a/drivers/cpufreq/intel_pstate.c
> +++ b/drivers/cpufreq/intel_pstate.c
> @@ -1845,7 +1845,7 @@ static void intel_pstate_notify_work(struct
> work_struct *work)
>  	wrmsrl_on_cpu(cpudata->cpu, MSR_HWP_STATUS, 0);
>  }
>  
> -static DEFINE_SPINLOCK(hwp_notify_lock);
> +static DEFINE_RAW_SPINLOCK(hwp_notify_lock);
>  static cpumask_t hwp_intr_enable_mask;
>  
>  #define HWP_GUARANTEED_PERF_CHANGE_STATUS      BIT(0)
> @@ -1868,7 +1868,7 @@ void notify_hwp_interrupt(void)
>  	if (!(value & status_mask))
>  		return;
>  
> -	spin_lock_irqsave(&hwp_notify_lock, flags);
> +	raw_spin_lock_irqsave(&hwp_notify_lock, flags);
>  
>  	if (!cpumask_test_cpu(this_cpu, &hwp_intr_enable_mask))
>  		goto ack_intr;
> @@ -1876,13 +1876,13 @@ void notify_hwp_interrupt(void)
>  	schedule_delayed_work(&all_cpu_data[this_cpu]-
> >hwp_notify_work,
>  			      msecs_to_jiffies(10));
>  
> -	spin_unlock_irqrestore(&hwp_notify_lock, flags);
> +	raw_spin_unlock_irqrestore(&hwp_notify_lock, flags);
>  
>  	return;
>  
>  ack_intr:
>  	wrmsrl_safe(MSR_HWP_STATUS, 0);
> -	spin_unlock_irqrestore(&hwp_notify_lock, flags);
> +	raw_spin_unlock_irqrestore(&hwp_notify_lock, flags);
>  }
>  
>  static void intel_pstate_disable_hwp_interrupt(struct cpudata
> *cpudata)
> @@ -1895,9 +1895,9 @@ static void
> intel_pstate_disable_hwp_interrupt(struct cpudata *cpudata)
>  	/* wrmsrl_on_cpu has to be outside spinlock as this can
> result in IPC */
>  	wrmsrl_on_cpu(cpudata->cpu, MSR_HWP_INTERRUPT, 0x00);
>  
> -	spin_lock_irq(&hwp_notify_lock);
> +	raw_spin_lock_irq(&hwp_notify_lock);
>  	cancel_work = cpumask_test_and_clear_cpu(cpudata->cpu,
> &hwp_intr_enable_mask);
> -	spin_unlock_irq(&hwp_notify_lock);
> +	raw_spin_unlock_irq(&hwp_notify_lock);
>  
>  	if (cancel_work)
>  		cancel_delayed_work_sync(&cpudata->hwp_notify_work);
> @@ -1912,10 +1912,10 @@ static void
> intel_pstate_enable_hwp_interrupt(struct cpudata *cpudata)
>  	if (boot_cpu_has(X86_FEATURE_HWP_NOTIFY)) {
>  		u64 interrupt_mask = HWP_GUARANTEED_PERF_CHANGE_REQ;
>  
> -		spin_lock_irq(&hwp_notify_lock);
> +		raw_spin_lock_irq(&hwp_notify_lock);
>  		INIT_DELAYED_WORK(&cpudata->hwp_notify_work,
> intel_pstate_notify_work);
>  		cpumask_set_cpu(cpudata->cpu,
> &hwp_intr_enable_mask);
> -		spin_unlock_irq(&hwp_notify_lock);
> +		raw_spin_unlock_irq(&hwp_notify_lock);
>  
>  		if
> (cpu_feature_enabled(X86_FEATURE_HWP_HIGHEST_PERF_CHANGE))
>  			interrupt_mask |=
> HWP_HIGHEST_PERF_CHANGE_REQ;
> 
> base-commit: 3621a2c9142bd490af0666c0c02d52d60ce0d2a5


  parent reply	other threads:[~2024-09-27 10:47 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-19  8:11 [PATCH] cpufreq: intel_pstate: Make hwp_notify_lock a raw spinlock Uwe Kleine-König
2024-09-23  1:53 ` xiao sheng wen(肖盛文)
2024-09-26  7:48   ` Uwe Kleine-König
2024-09-27  9:43     ` xiao sheng wen(肖盛文)
2024-09-27 10:47 ` srinivas pandruvada [this message]
2024-09-28 11:51   ` Uwe Kleine-König
2024-10-01  1:44     ` xiao sheng wen(肖盛文)
2024-09-30 10:56 ` Sebastian Andrzej Siewior
2024-10-01 18:39 ` Rafael J. Wysocki
2024-10-02  8:24   ` Uwe Kleine-König
2024-10-02 12:12     ` Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=229b9ff9ef6cf201b4e56d6ccb03c028c2d8f51f.camel@linux.intel.com \
    --to=srinivas.pandruvada@linux.intel.com \
    --cc=atzlinux@sina.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=lenb@kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=rafael@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=ukleinek@debian.org \
    --cc=viresh.kumar@linaro.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox