Re: [PATCH 6.1.y v2] gpio: xilinx: Convert gpio_lock to raw spinlock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ Sasha's backport helper bot ]

Hi,

The upstream commit SHA1 provided is correct: 9860370c2172704b6b4f0075a0c2a29fd84af96a


Status in newer kernel trees:
6.12.y | Not found
6.6.y | Not found
6.1.y | Not found

Note: The patch differs from the upstream commit:
---
1:  9860370c21727 ! 1:  849f99ff428f2 gpio: xilinx: Convert gpio_lock to raw spinlock
    @@ Metadata
      ## Commit message ##
         gpio: xilinx: Convert gpio_lock to raw spinlock
     
    +    [ Upstream commit 9860370c2172704b6b4f0075a0c2a29fd84af96a ]
    +
         irq_chip functions may be called in raw spinlock context. Therefore, we
         must also use a raw spinlock for our own internal locking.
     
    @@ Commit message
         Cc: stable@xxxxxxxxxxxxxxx
         Link: https://lore.kernel.org/r/20250110163354.2012654-1-sean.anderson@xxxxxxxxx
         Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx>
    +    [ resolved conflicts ]
    +    Signed-off-by: Sean Anderson <sean.anderson@xxxxxxxxx>
     
      ## drivers/gpio/gpio-xilinx.c ##
     @@ drivers/gpio/gpio-xilinx.c: struct xgpio_instance {
    @@ drivers/gpio/gpio-xilinx.c: struct xgpio_instance {
     -	spinlock_t gpio_lock;	/* For serializing operations */
     +	raw_spinlock_t gpio_lock;	/* For serializing operations */
      	int irq;
    + 	struct irq_chip irqchip;
      	DECLARE_BITMAP(enable, 64);
    - 	DECLARE_BITMAP(rising_edge, 64);
     @@ drivers/gpio/gpio-xilinx.c: static void xgpio_set(struct gpio_chip *gc, unsigned int gpio, int val)
      	struct xgpio_instance *chip = gpiochip_get_data(gc);
      	int bit = xgpio_to_bit(chip, gpio);
    @@ drivers/gpio/gpio-xilinx.c: static void xgpio_irq_mask(struct irq_data *irq_data
      	}
     -	spin_unlock_irqrestore(&chip->gpio_lock, flags);
     +	raw_spin_unlock_irqrestore(&chip->gpio_lock, flags);
    - 
    - 	gpiochip_disable_irq(&chip->gc, irq_offset);
      }
    -@@ drivers/gpio/gpio-xilinx.c: static void xgpio_irq_unmask(struct irq_data *irq_data)
      
    - 	gpiochip_enable_irq(&chip->gc, irq_offset);
    + /**
    +@@ drivers/gpio/gpio-xilinx.c: static void xgpio_irq_unmask(struct irq_data *irq_data)
    + 	u32 old_enable = xgpio_get_value32(chip->enable, bit);
    + 	u32 mask = BIT(bit / 32), val;
      
     -	spin_lock_irqsave(&chip->gpio_lock, flags);
     +	raw_spin_lock_irqsave(&chip->gpio_lock, flags);
---

Results of testing on various branches:

| Branch                    | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-6.1.y        |  Success    |  Success   |




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux