]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
um: chan_kern: use raw spinlock for irqs_to_free_lock
authorJohannes Berg <johannes.berg@intel.com>
Mon, 5 May 2025 08:33:59 +0000 (10:33 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 2 Jun 2025 09:23:22 +0000 (11:23 +0200)
Since this is called deep in the ARCH=um IRQ infrastructure
it must use a raw spinlock. It's not really part of the
driver, but rather the core UML IRQ code.

Link: https://patch.msgid.link/20250505103358.ae7dc659f8b4.I64ca7aece30e0b4b0b5b35ad89cdd63db197c0ce@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
arch/um/drivers/chan_kern.c

index e78a99816c8613a3d1a1111265859492f8ef374b..26442db7d60895c53392c6c73be203862118488c 100644 (file)
@@ -212,7 +212,7 @@ int enable_chan(struct line *line)
  * be permanently disabled.  This is discovered in IRQ context, but
  * the freeing of the IRQ must be done later.
  */
-static DEFINE_SPINLOCK(irqs_to_free_lock);
+static DEFINE_RAW_SPINLOCK(irqs_to_free_lock);
 static LIST_HEAD(irqs_to_free);
 
 void free_irqs(void)
@@ -222,9 +222,9 @@ void free_irqs(void)
        struct list_head *ele;
        unsigned long flags;
 
-       spin_lock_irqsave(&irqs_to_free_lock, flags);
+       raw_spin_lock_irqsave(&irqs_to_free_lock, flags);
        list_splice_init(&irqs_to_free, &list);
-       spin_unlock_irqrestore(&irqs_to_free_lock, flags);
+       raw_spin_unlock_irqrestore(&irqs_to_free_lock, flags);
 
        list_for_each(ele, &list) {
                chan = list_entry(ele, struct chan, free_list);
@@ -246,9 +246,9 @@ static void close_one_chan(struct chan *chan, int delay_free_irq)
                return;
 
        if (delay_free_irq) {
-               spin_lock_irqsave(&irqs_to_free_lock, flags);
+               raw_spin_lock_irqsave(&irqs_to_free_lock, flags);
                list_add(&chan->free_list, &irqs_to_free);
-               spin_unlock_irqrestore(&irqs_to_free_lock, flags);
+               raw_spin_unlock_irqrestore(&irqs_to_free_lock, flags);
        } else {
                if (chan->input && chan->enabled)
                        um_free_irq(chan->line->read_irq, chan);