diff options
Diffstat (limited to 'drivers/pci/controller/pci-tegra.c')
| -rw-r--r-- | drivers/pci/controller/pci-tegra.c | 29 | 
1 files changed, 14 insertions, 15 deletions
diff --git a/drivers/pci/controller/pci-tegra.c b/drivers/pci/controller/pci-tegra.c index 467ddc701adc..942ddfca3bf6 100644 --- a/drivers/pci/controller/pci-tegra.c +++ b/drivers/pci/controller/pci-tegra.c @@ -14,6 +14,7 @@   */  #include <linux/clk.h> +#include <linux/cleanup.h>  #include <linux/debugfs.h>  #include <linux/delay.h>  #include <linux/export.h> @@ -270,7 +271,7 @@ struct tegra_msi {  	DECLARE_BITMAP(used, INT_PCI_MSI_NR);  	struct irq_domain *domain;  	struct mutex map_lock; -	spinlock_t mask_lock; +	raw_spinlock_t mask_lock;  	void *virt;  	dma_addr_t phys;  	int irq; @@ -1344,7 +1345,7 @@ static int tegra_pcie_port_get_phys(struct tegra_pcie_port *port)  	unsigned int i;  	int err; -	port->phys = devm_kcalloc(dev, sizeof(phy), port->lanes, GFP_KERNEL); +	port->phys = devm_kcalloc(dev, port->lanes, sizeof(phy), GFP_KERNEL);  	if (!port->phys)  		return -ENOMEM; @@ -1581,14 +1582,13 @@ static void tegra_msi_irq_mask(struct irq_data *d)  	struct tegra_msi *msi = irq_data_get_irq_chip_data(d);  	struct tegra_pcie *pcie = msi_to_pcie(msi);  	unsigned int index = d->hwirq / 32; -	unsigned long flags;  	u32 value; -	spin_lock_irqsave(&msi->mask_lock, flags); -	value = afi_readl(pcie, AFI_MSI_EN_VEC(index)); -	value &= ~BIT(d->hwirq % 32); -	afi_writel(pcie, value, AFI_MSI_EN_VEC(index)); -	spin_unlock_irqrestore(&msi->mask_lock, flags); +	scoped_guard(raw_spinlock_irqsave, &msi->mask_lock) { +		value = afi_readl(pcie, AFI_MSI_EN_VEC(index)); +		value &= ~BIT(d->hwirq % 32); +		afi_writel(pcie, value, AFI_MSI_EN_VEC(index)); +	}  }  static void tegra_msi_irq_unmask(struct irq_data *d) @@ -1596,14 +1596,13 @@ static void tegra_msi_irq_unmask(struct irq_data *d)  	struct tegra_msi *msi = irq_data_get_irq_chip_data(d);  	struct tegra_pcie *pcie = msi_to_pcie(msi);  	unsigned int index = d->hwirq / 32; -	unsigned long flags;  	u32 value; -	spin_lock_irqsave(&msi->mask_lock, flags); -	value = afi_readl(pcie, AFI_MSI_EN_VEC(index)); -	value |= BIT(d->hwirq % 32); -	afi_writel(pcie, value, AFI_MSI_EN_VEC(index)); -	spin_unlock_irqrestore(&msi->mask_lock, flags); +	scoped_guard(raw_spinlock_irqsave, &msi->mask_lock) { +		value = afi_readl(pcie, AFI_MSI_EN_VEC(index)); +		value |= BIT(d->hwirq % 32); +		afi_writel(pcie, value, AFI_MSI_EN_VEC(index)); +	}  }  static void tegra_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) @@ -1711,7 +1710,7 @@ static int tegra_pcie_msi_setup(struct tegra_pcie *pcie)  	int err;  	mutex_init(&msi->map_lock); -	spin_lock_init(&msi->mask_lock); +	raw_spin_lock_init(&msi->mask_lock);  	if (IS_ENABLED(CONFIG_PCI_MSI)) {  		err = tegra_allocate_domains(msi);  | 
