linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Rik van Riel <riel@surriel.com>
To: Dave Hansen <dave.hansen@intel.com>, linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org, x86@kernel.org, kernel-team@meta.com,
	 dave.hansen@linux.intel.com, luto@kernel.org,
	peterz@infradead.org,  tglx@linutronix.de, mingo@redhat.com,
	bp@alien8.de, hpa@zytor.com,  nadav.amit@gmail.com,
	Yu-cheng Yu <yu-cheng.yu@intel.com>
Subject: Re: [RFC v2 7/9] x86/mm: Introduce Remote Action Request
Date: Tue, 03 Jun 2025 16:08:37 -0400	[thread overview]
Message-ID: <513b0698bab160228c642598ba6cc7abdad1b694.camel@surriel.com> (raw)
In-Reply-To: <2385d4ed-48d5-4d50-ae95-dbeb23432b71@intel.com>

On Wed, 2025-05-21 at 09:38 -0700, Dave Hansen wrote:
> 
> > +static void wait_for_done(unsigned long idx, int target_cpu)
> > +{
> > +	u8 status;
> > +	u8 *rar_actions = per_cpu(rar_action, target_cpu);
> > +
> > +	status = READ_ONCE(rar_actions[idx]);
> > +
> > +	while ((status != RAR_ACTION_OK) && (status !=
> > RAR_ACTION_FAIL)) {
> 
> Should this be:
> 
> 	while (status == RAR_ACTION_START) {
> 	...
> 
> ? That would more clearly link it to set_action_entry() and would
> also
> be shorter.
> 
That is a very good question. The old RAR code
suggests there might be some intermediate state
when the target CPU works on processing the
RAR entry, but the current documentation only
shows RAR_SUCCESS, RAR_PENDING, and RAR_FAILURE
as possible values.

Lets try with status == RAR_ACTION_PENDING.

> > 
> > +void rar_cpu_init(void)
> > +{
> > +	u64 r;
> > +	u8 *bitmap;
> > +	int this_cpu = smp_processor_id();
> > +
> > +	cpumask_clear(&per_cpu(rar_cpu_mask, this_cpu));
> > +
> > +	rdmsrl(MSR_IA32_RAR_INFO, r);
> > +	pr_info_once("RAR: support %lld payloads\n", r >> 32);
> 
> Doesn't this need to get coordinated or checked against
> RAR_MAX_PAYLOADS?

I just added that in, and also applied all the cleanups
from your email.

> 
> > +	// reserved bits!!! r |= (RAR_VECTOR & 0xff);
> 
> Is this just some cruft from testing?
> 
I'm kind of guessing the old code might have used this
value to specify which IRQ vector to use for RAR, but
modern microcode hardcodes the RAR_VECTOR value.

> > +	wrmsrl(MSR_IA32_RAR_CTRL, r);
> > +}
> > +
> > +/*
> > + * This is a modified version of smp_call_function_many() of
> > kernel/smp.c,
> > + * without a function pointer, because the RAR handler is the
> > ucode.
> > + */
> 
> It doesn't look _that_ much like smp_call_function_many(). I don't
> see
> much that can be consolidated.

Agreed. It looks even less like it after some more
simplifications.

> 
> > +	/* No online cpus?  We're done. */
> > +	if (cpu >= nr_cpu_ids)
> > +		return;
> 
> This little idiom _is_ in smp_call_function_many_cond(). I wonder if
> it
> can be refactored out.

Removing the arch_send_rar_single_ipi fast path
gets rid of this code completely.

Once we cpumask_and with the cpu_online_mask,
the cpumask_weight should end up as 0 if no
online CPUs are in the mask.

Thank you for all the cleanup suggestions.
I've tried to address them all for v3.


-- 
All Rights Reversed.


  parent reply	other threads:[~2025-06-03 20:09 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-20  1:02 [RFC v2 PATCH 0/9] Intel RAR TLB invalidation Rik van Riel
2025-05-20  1:02 ` [RFC v2 1/9] x86/mm: Introduce MSR_IA32_CORE_CAPABILITIES Rik van Riel
2025-05-21 14:57   ` Dave Hansen
2025-05-22 15:10   ` Sean Christopherson
2025-05-20  1:02 ` [RFC v2 2/9] x86/mm: Introduce Remote Action Request MSRs Rik van Riel
2025-05-21 11:49   ` Borislav Petkov
2025-05-20  1:02 ` [RFC v2 3/9] x86/mm: enable BROADCAST_TLB_FLUSH on Intel, too Rik van Riel
2025-05-20  1:02 ` [RFC v2 4/9] x86/mm: Introduce X86_FEATURE_RAR Rik van Riel
2025-05-21 11:53   ` Borislav Petkov
2025-05-21 13:57     ` Rik van Riel
2025-05-21 14:53       ` Borislav Petkov
2025-05-21 16:06         ` Rik van Riel
2025-05-21 19:39           ` Borislav Petkov
2025-05-20  1:02 ` [RFC v2 5/9] x86/mm: Change cpa_flush() to call flush_kernel_range() directly Rik van Riel
2025-05-21 11:54   ` Borislav Petkov
2025-05-21 15:16   ` Dave Hansen
2025-05-20  1:02 ` [RFC v2 6/9] x86/apic: Introduce Remote Action Request Operations Rik van Riel
2025-05-20  9:16   ` Ingo Molnar
2025-06-04  0:11     ` Rik van Riel
2025-05-21 15:28   ` Dave Hansen
2025-05-21 15:59     ` Rik van Riel
2025-05-20  1:02 ` [RFC v2 7/9] x86/mm: Introduce Remote Action Request Rik van Riel
2025-05-20  9:28   ` Ingo Molnar
2025-05-20 12:57     ` Rik van Riel
2025-05-24  9:22       ` Ingo Molnar
2025-05-20 11:29   ` Nadav Amit
2025-05-20 13:00     ` Rik van Riel
2025-05-20 20:26       ` Nadav Amit
2025-05-20 20:31         ` Rik van Riel
2025-05-21 16:38   ` Dave Hansen
2025-05-21 19:06     ` Thomas Gleixner
2025-06-03 20:08     ` Rik van Riel [this message]
2025-05-20  1:02 ` [RFC v2 8/9] x86/mm: use RAR for kernel TLB flushes Rik van Riel
2025-05-20  1:02 ` [RFC v2 9/9] x86/mm: userspace & pageout flushing using Intel RAR Rik van Riel
2025-05-20  2:48   ` [RFC v2.1 " Rik van Riel

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=513b0698bab160228c642598ba6cc7abdad1b694.camel@surriel.com \
    --to=riel@surriel.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=kernel-team@meta.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=nadav.amit@gmail.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=yu-cheng.yu@intel.com \
    /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