All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org,
	Thomas Gleixner <tglx@linutronix.de>,
	"Paul E . McKenney" <paulmck@kernel.org>,
	Boqun Feng <boqun.feng@gmail.com>,
	"H . Peter Anvin" <hpa@zytor.com>, Paul Turner <pjt@google.com>,
	linux-api@vger.kernel.org, Christian Brauner <brauner@kernel.org>,
	Florian Weimer <fw@deneb.enyo.de>,
	David.Laight@aculab.com, carlos@redhat.com,
	Peter Oskolkov <posk@posk.io>,
	Alexander Mikhalitsyn <alexander@mihalicyn.com>,
	Chris Kennelly <ckennelly@google.com>
Subject: Re: [PATCH v5 08/24] sched: Introduce per memory space current virtual cpu id
Date: Wed, 9 Nov 2022 10:09:36 -0500	[thread overview]
Message-ID: <a438952f-7002-1ed6-18a7-708178a97ba4@efficios.com> (raw)
In-Reply-To: <Y2t2DcHHLVB3tDfw@hirez.programming.kicks-ass.net>

On 2022-11-09 04:42, Peter Zijlstra wrote:
> On Thu, Nov 03, 2022 at 04:03:43PM -0400, Mathieu Desnoyers wrote:
> 
>> +void sched_vcpu_exit_signals(struct task_struct *t)
>> +{
>> +	struct mm_struct *mm = t->mm;
>> +	unsigned long flags;
>> +
>> +	if (!mm)
>> +		return;
>> +	local_irq_save(flags);
>> +	mm_vcpu_put(mm, t->mm_vcpu);
>> +	t->mm_vcpu = -1;
>> +	t->mm_vcpu_active = 0;
>> +	local_irq_restore(flags);
>> +}
>> +
>> +void sched_vcpu_before_execve(struct task_struct *t)
>> +{
>> +	struct mm_struct *mm = t->mm;
>> +	unsigned long flags;
>> +
>> +	if (!mm)
>> +		return;
>> +	local_irq_save(flags);
>> +	mm_vcpu_put(mm, t->mm_vcpu);
>> +	t->mm_vcpu = -1;
>> +	t->mm_vcpu_active = 0;
>> +	local_irq_restore(flags);
>> +}
>> +
>> +void sched_vcpu_after_execve(struct task_struct *t)
>> +{
>> +	struct mm_struct *mm = t->mm;
>> +	unsigned long flags;
>> +
>> +	WARN_ON_ONCE((t->flags & PF_KTHREAD) || !t->mm);
>> +
>> +	local_irq_save(flags);
>> +	t->mm_vcpu = mm_vcpu_get(mm);
>> +	t->mm_vcpu_active = 1;
>> +	local_irq_restore(flags);
>> +	rseq_set_notify_resume(t);
>> +}
> 
>> +static inline void mm_vcpu_put(struct mm_struct *mm, int vcpu)
>> +{
>> +	lockdep_assert_irqs_disabled();
>> +	if (vcpu < 0)
>> +		return;
>> +	spin_lock(&mm->vcpu_lock);
>> +	__cpumask_clear_cpu(vcpu, mm_vcpumask(mm));
>> +	spin_unlock(&mm->vcpu_lock);
>> +}
>> +
>> +static inline int mm_vcpu_get(struct mm_struct *mm)
>> +{
>> +	int ret;
>> +
>> +	lockdep_assert_irqs_disabled();
>> +	spin_lock(&mm->vcpu_lock);
>> +	ret = __mm_vcpu_get(mm);
>> +	spin_unlock(&mm->vcpu_lock);
>> +	return ret;
>> +}
> 
> 
> This:
> 
> 	local_irq_disable()
> 	spin_lock()
> 
> thing is a PREEMPT_RT anti-pattern.
> 
> At the very very least this should then be raw_spin_lock(), not in the
> least because you're calling this from under rq->lock, which itself is a
> raw_spin_lock_t.

Very good point, will fix using raw_spinlock_t.

Thanks,

Mathieu

> 

-- 
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com


  reply	other threads:[~2022-11-09 15:09 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-03 20:03 [PATCH v5 00/24] RSEQ node id and virtual cpu id extensions Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 01/24] rseq: Introduce feature size and alignment ELF auxiliary vector entries Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 02/24] rseq: Introduce extensible rseq ABI Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 03/24] rseq: Extend struct rseq with numa node id Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 04/24] selftests/rseq: Use ELF auxiliary vector for extensible rseq Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 05/24] selftests/rseq: Implement rseq numa node id field selftest Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 06/24] lib: Implement find_{first,next,nth}_notandnot_bit, find_first_andnot_bit Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 07/24] cpumask: Implement cpumask_{first,next}_{not,}andnot Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 08/24] sched: Introduce per memory space current virtual cpu id Mathieu Desnoyers
2022-11-08 13:00   ` Peter Zijlstra
2022-11-08 19:45     ` Mathieu Desnoyers
2022-11-08 13:04   ` Peter Zijlstra
2022-11-08 20:07     ` Mathieu Desnoyers
2022-11-09 10:19       ` Peter Zijlstra
2022-11-09  9:28   ` Peter Zijlstra
2022-11-09 15:04     ` Mathieu Desnoyers
2022-11-09  9:42   ` Peter Zijlstra
2022-11-09 15:09     ` Mathieu Desnoyers [this message]
2022-11-11  4:41   ` Andy Lutomirski
2022-11-11 14:18     ` Mathieu Desnoyers
2022-11-14 20:49       ` Sean Christopherson
2022-11-17 17:19         ` Mathieu Desnoyers
2022-11-17 19:10           ` Sean Christopherson
2022-11-17 19:42             ` Mathieu Desnoyers
2022-11-17 21:15               ` Sean Christopherson
2022-11-21 19:00                 ` Mathieu Desnoyers
2022-11-21 19:52                   ` Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 09/24] rseq: Extend struct rseq with per memory space vcpu id Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 10/24] selftests/rseq: Remove RSEQ_SKIP_FASTPATH code Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 11/24] selftests/rseq: Implement rseq vm_vcpu_id field support Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 12/24] selftests/rseq: x86: Template memory ordering and percpu access mode Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 13/24] selftests/rseq: arm: " Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 14/24] selftests/rseq: arm64: " Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 15/24] selftests/rseq: mips: " Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 16/24] selftests/rseq: ppc: " Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 17/24] selftests/rseq: s390: " Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 18/24] selftests/rseq: riscv: " Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 19/24] selftests/rseq: Implement basic percpu ops vm_vcpu_id test Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 20/24] selftests/rseq: Implement parametrized " Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 21/24] selftests/rseq: x86: Implement rseq_load_u32_u32 Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 22/24] selftests/rseq: Implement numa node id vs vm_vcpu_id invariant test Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 23/24] selftests/rseq: parametrized test: Report/abort on negative cpu id Mathieu Desnoyers
2022-11-03 20:03 ` [PATCH v5 24/24] tracing/rseq: Add mm_vcpu_id field to rseq_update Mathieu Desnoyers

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=a438952f-7002-1ed6-18a7-708178a97ba4@efficios.com \
    --to=mathieu.desnoyers@efficios.com \
    --cc=David.Laight@aculab.com \
    --cc=alexander@mihalicyn.com \
    --cc=boqun.feng@gmail.com \
    --cc=brauner@kernel.org \
    --cc=carlos@redhat.com \
    --cc=ckennelly@google.com \
    --cc=fw@deneb.enyo.de \
    --cc=hpa@zytor.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=pjt@google.com \
    --cc=posk@posk.io \
    --cc=tglx@linutronix.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.