Message ID | 20210406105105.10141-1-luca.fancellu@arm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | da3b45cbcb0f98f9756cbba0d000c526d215a636 |
Headers | show |
Series | xen/evtchn: Change irq_info lock to raw_spinlock_t | expand |
Hi Luca, On 06/04/2021 11:51, Luca Fancellu wrote: > Unmask operation must be called with interrupt disabled, > on preempt_rt spin_lock_irqsave/spin_unlock_irqrestore > don't disable/enable interrupts, so use raw_* implementation > and change lock variable in struct irq_info from spinlock_t > to raw_spinlock_t > > Cc: stable@vger.kernel.org > Fixes: 25da4618af24 ("xen/events: don't unmask an event channel > when an eoi is pending") > > Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> Reviewed-by: Julien Grall <jgrall@amazon.com> Cheers,
On Tue, Apr 06, 2021 at 11:51:04AM +0100, Luca Fancellu wrote: > Unmask operation must be called with interrupt disabled, > on preempt_rt spin_lock_irqsave/spin_unlock_irqrestore > don't disable/enable interrupts, so use raw_* implementation > and change lock variable in struct irq_info from spinlock_t > to raw_spinlock_t > > Cc: stable@vger.kernel.org > Fixes: 25da4618af24 ("xen/events: don't unmask an event channel > when an eoi is pending") > > Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> Reviewed-by: Wei Liu <wei.liu@kernel.org>
On 4/6/21 6:51 AM, Luca Fancellu wrote: > Unmask operation must be called with interrupt disabled, > on preempt_rt spin_lock_irqsave/spin_unlock_irqrestore > don't disable/enable interrupts, so use raw_* implementation > and change lock variable in struct irq_info from spinlock_t > to raw_spinlock_t > > Cc: stable@vger.kernel.org > Fixes: 25da4618af24 ("xen/events: don't unmask an event channel > when an eoi is pending") > > Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> Applied to for-linus-5.12b -boris
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c index 8236e2364eeb..7bbfd58958bc 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c @@ -110,7 +110,7 @@ struct irq_info { unsigned short eoi_cpu; /* EOI must happen on this cpu-1 */ unsigned int irq_epoch; /* If eoi_cpu valid: irq_epoch of event */ u64 eoi_time; /* Time in jiffies when to EOI. */ - spinlock_t lock; + raw_spinlock_t lock; union { unsigned short virq; @@ -312,7 +312,7 @@ static int xen_irq_info_common_setup(struct irq_info *info, info->evtchn = evtchn; info->cpu = cpu; info->mask_reason = EVT_MASK_REASON_EXPLICIT; - spin_lock_init(&info->lock); + raw_spin_lock_init(&info->lock); ret = set_evtchn_to_irq(evtchn, irq); if (ret < 0) @@ -472,28 +472,28 @@ static void do_mask(struct irq_info *info, u8 reason) { unsigned long flags; - spin_lock_irqsave(&info->lock, flags); + raw_spin_lock_irqsave(&info->lock, flags); if (!info->mask_reason) mask_evtchn(info->evtchn); info->mask_reason |= reason; - spin_unlock_irqrestore(&info->lock, flags); + raw_spin_unlock_irqrestore(&info->lock, flags); } static void do_unmask(struct irq_info *info, u8 reason) { unsigned long flags; - spin_lock_irqsave(&info->lock, flags); + raw_spin_lock_irqsave(&info->lock, flags); info->mask_reason &= ~reason; if (!info->mask_reason) unmask_evtchn(info->evtchn); - spin_unlock_irqrestore(&info->lock, flags); + raw_spin_unlock_irqrestore(&info->lock, flags); } #ifdef CONFIG_X86
Unmask operation must be called with interrupt disabled, on preempt_rt spin_lock_irqsave/spin_unlock_irqrestore don't disable/enable interrupts, so use raw_* implementation and change lock variable in struct irq_info from spinlock_t to raw_spinlock_t Cc: stable@vger.kernel.org Fixes: 25da4618af24 ("xen/events: don't unmask an event channel when an eoi is pending") Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> --- drivers/xen/events/events_base.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)