diff mbox series

PCI: microchip: add missing chained_irq enter/exit calls

Message ID 20220511095504.2273799-1-conor.dooley@microchip.com (mailing list archive)
State Accepted
Headers show
Series PCI: microchip: add missing chained_irq enter/exit calls | expand

Commit Message

Conor Dooley May 11, 2022, 9:55 a.m. UTC
Bjorn spotted that two of the chained irq handlers were missing their
chained_irq_enter()/chained_irq_exit() calls, so add them in to avoid
potentially lost interrupts.

Reported by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://lore.kernel.org/linux-pci/87h76b8nxc.wl-maz@kernel.org
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
 drivers/pci/controller/pcie-microchip-host.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Lorenzo Pieralisi May 11, 2022, 12:49 p.m. UTC | #1
"PCI: microchip: Add missing chained_irq_enter()/exit() calls"

Always capitalize the first word in the commit subject sentence
and add brackets to functions calls.

On Wed, May 11, 2022 at 10:55:05AM +0100, Conor Dooley wrote:
> Bjorn spotted that two of the chained irq handlers were missing their

It is clear in the Link/reported-by that Bjorn spotted it, it is a nit
but I'd prefer the commit log to just explain what you are fixing
rather than telling the background story that is already there in
the Link: provided.

I can make these changes for you, just let me know.

Thanks,
Lorenzo

> chained_irq_enter()/chained_irq_exit() calls, so add them in to avoid
> potentially lost interrupts.
> 
> Reported by: Bjorn Helgaas <bhelgaas@google.com>
> Link: https://lore.kernel.org/linux-pci/87h76b8nxc.wl-maz@kernel.org
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
>  drivers/pci/controller/pcie-microchip-host.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/pci/controller/pcie-microchip-host.c b/drivers/pci/controller/pcie-microchip-host.c
> index 29d8e81e4181..8175abed0f05 100644
> --- a/drivers/pci/controller/pcie-microchip-host.c
> +++ b/drivers/pci/controller/pcie-microchip-host.c
> @@ -406,6 +406,7 @@ static void mc_pcie_enable_msi(struct mc_pcie *port, void __iomem *base)
>  static void mc_handle_msi(struct irq_desc *desc)
>  {
>  	struct mc_pcie *port = irq_desc_get_handler_data(desc);
> +	struct irq_chip *chip = irq_desc_get_chip(desc);
>  	struct device *dev = port->dev;
>  	struct mc_msi *msi = &port->msi;
>  	void __iomem *bridge_base_addr =
> @@ -414,6 +415,8 @@ static void mc_handle_msi(struct irq_desc *desc)
>  	u32 bit;
>  	int ret;
>  
> +	chained_irq_enter(chip, desc);
> +
>  	status = readl_relaxed(bridge_base_addr + ISTATUS_LOCAL);
>  	if (status & PM_MSI_INT_MSI_MASK) {
>  		status = readl_relaxed(bridge_base_addr + ISTATUS_MSI);
> @@ -424,6 +427,8 @@ static void mc_handle_msi(struct irq_desc *desc)
>  						    bit);
>  		}
>  	}
> +
> +	chained_irq_exit(chip, desc);
>  }
>  
>  static void mc_msi_bottom_irq_ack(struct irq_data *data)
> @@ -563,6 +568,7 @@ static int mc_allocate_msi_domains(struct mc_pcie *port)
>  static void mc_handle_intx(struct irq_desc *desc)
>  {
>  	struct mc_pcie *port = irq_desc_get_handler_data(desc);
> +	struct irq_chip *chip = irq_desc_get_chip(desc);
>  	struct device *dev = port->dev;
>  	void __iomem *bridge_base_addr =
>  		port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
> @@ -570,6 +576,8 @@ static void mc_handle_intx(struct irq_desc *desc)
>  	u32 bit;
>  	int ret;
>  
> +	chained_irq_enter(chip, desc);
> +
>  	status = readl_relaxed(bridge_base_addr + ISTATUS_LOCAL);
>  	if (status & PM_MSI_INT_INTX_MASK) {
>  		status &= PM_MSI_INT_INTX_MASK;
> @@ -581,6 +589,8 @@ static void mc_handle_intx(struct irq_desc *desc)
>  						    bit);
>  		}
>  	}
> +
> +	chained_irq_exit(chip, desc);
>  }
>  
>  static void mc_ack_intx_irq(struct irq_data *data)
> -- 
> 2.36.1
>
Conor Dooley May 11, 2022, 12:52 p.m. UTC | #2
On 11/05/2022 13:49, Lorenzo Pieralisi wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> "PCI: microchip: Add missing chained_irq_enter()/exit() calls"
> 
> Always capitalize the first word in the commit subject sentence
> and add brackets to functions calls.
> 
> On Wed, May 11, 2022 at 10:55:05AM +0100, Conor Dooley wrote:
>> Bjorn spotted that two of the chained irq handlers were missing their
> 
> It is clear in the Link/reported-by that Bjorn spotted it, it is a nit
> but I'd prefer the commit log to just explain what you are fixing
> rather than telling the background story that is already there in
> the Link: provided.
> 
> I can make these changes for you, just let me know.

Hey Lorenzo,
If you wish - go for it.
Thanks,
Conor.

> 
> Thanks,
> Lorenzo
> 
>> chained_irq_enter()/chained_irq_exit() calls, so add them in to avoid
>> potentially lost interrupts.
>>
>> Reported by: Bjorn Helgaas <bhelgaas@google.com>
>> Link: https://lore.kernel.org/linux-pci/87h76b8nxc.wl-maz@kernel.org
>> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
>> ---
>>   drivers/pci/controller/pcie-microchip-host.c | 10 ++++++++++
>>   1 file changed, 10 insertions(+)
>>
>> diff --git a/drivers/pci/controller/pcie-microchip-host.c b/drivers/pci/controller/pcie-microchip-host.c
>> index 29d8e81e4181..8175abed0f05 100644
>> --- a/drivers/pci/controller/pcie-microchip-host.c
>> +++ b/drivers/pci/controller/pcie-microchip-host.c
>> @@ -406,6 +406,7 @@ static void mc_pcie_enable_msi(struct mc_pcie *port, void __iomem *base)
>>   static void mc_handle_msi(struct irq_desc *desc)
>>   {
>>        struct mc_pcie *port = irq_desc_get_handler_data(desc);
>> +     struct irq_chip *chip = irq_desc_get_chip(desc);
>>        struct device *dev = port->dev;
>>        struct mc_msi *msi = &port->msi;
>>        void __iomem *bridge_base_addr =
>> @@ -414,6 +415,8 @@ static void mc_handle_msi(struct irq_desc *desc)
>>        u32 bit;
>>        int ret;
>>
>> +     chained_irq_enter(chip, desc);
>> +
>>        status = readl_relaxed(bridge_base_addr + ISTATUS_LOCAL);
>>        if (status & PM_MSI_INT_MSI_MASK) {
>>                status = readl_relaxed(bridge_base_addr + ISTATUS_MSI);
>> @@ -424,6 +427,8 @@ static void mc_handle_msi(struct irq_desc *desc)
>>                                                    bit);
>>                }
>>        }
>> +
>> +     chained_irq_exit(chip, desc);
>>   }
>>
>>   static void mc_msi_bottom_irq_ack(struct irq_data *data)
>> @@ -563,6 +568,7 @@ static int mc_allocate_msi_domains(struct mc_pcie *port)
>>   static void mc_handle_intx(struct irq_desc *desc)
>>   {
>>        struct mc_pcie *port = irq_desc_get_handler_data(desc);
>> +     struct irq_chip *chip = irq_desc_get_chip(desc);
>>        struct device *dev = port->dev;
>>        void __iomem *bridge_base_addr =
>>                port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
>> @@ -570,6 +576,8 @@ static void mc_handle_intx(struct irq_desc *desc)
>>        u32 bit;
>>        int ret;
>>
>> +     chained_irq_enter(chip, desc);
>> +
>>        status = readl_relaxed(bridge_base_addr + ISTATUS_LOCAL);
>>        if (status & PM_MSI_INT_INTX_MASK) {
>>                status &= PM_MSI_INT_INTX_MASK;
>> @@ -581,6 +589,8 @@ static void mc_handle_intx(struct irq_desc *desc)
>>                                                    bit);
>>                }
>>        }
>> +
>> +     chained_irq_exit(chip, desc);
>>   }
>>
>>   static void mc_ack_intx_irq(struct irq_data *data)
>> --
>> 2.36.1
>>
Lorenzo Pieralisi May 11, 2022, 1:04 p.m. UTC | #3
On Wed, 11 May 2022 10:55:05 +0100, Conor Dooley wrote:
> Bjorn spotted that two of the chained irq handlers were missing their
> chained_irq_enter()/chained_irq_exit() calls, so add them in to avoid
> potentially lost interrupts.
> 
> Reported by: Bjorn Helgaas <bhelgaas@google.com>
> 
> 
> [...]

Applied to pci/microchip, thanks!

[1/1] PCI: microchip: add missing chained_irq enter/exit calls
      https://git.kernel.org/lpieralisi/pci/c/30097efa33

Thanks,
Lorenzo
diff mbox series

Patch

diff --git a/drivers/pci/controller/pcie-microchip-host.c b/drivers/pci/controller/pcie-microchip-host.c
index 29d8e81e4181..8175abed0f05 100644
--- a/drivers/pci/controller/pcie-microchip-host.c
+++ b/drivers/pci/controller/pcie-microchip-host.c
@@ -406,6 +406,7 @@  static void mc_pcie_enable_msi(struct mc_pcie *port, void __iomem *base)
 static void mc_handle_msi(struct irq_desc *desc)
 {
 	struct mc_pcie *port = irq_desc_get_handler_data(desc);
+	struct irq_chip *chip = irq_desc_get_chip(desc);
 	struct device *dev = port->dev;
 	struct mc_msi *msi = &port->msi;
 	void __iomem *bridge_base_addr =
@@ -414,6 +415,8 @@  static void mc_handle_msi(struct irq_desc *desc)
 	u32 bit;
 	int ret;
 
+	chained_irq_enter(chip, desc);
+
 	status = readl_relaxed(bridge_base_addr + ISTATUS_LOCAL);
 	if (status & PM_MSI_INT_MSI_MASK) {
 		status = readl_relaxed(bridge_base_addr + ISTATUS_MSI);
@@ -424,6 +427,8 @@  static void mc_handle_msi(struct irq_desc *desc)
 						    bit);
 		}
 	}
+
+	chained_irq_exit(chip, desc);
 }
 
 static void mc_msi_bottom_irq_ack(struct irq_data *data)
@@ -563,6 +568,7 @@  static int mc_allocate_msi_domains(struct mc_pcie *port)
 static void mc_handle_intx(struct irq_desc *desc)
 {
 	struct mc_pcie *port = irq_desc_get_handler_data(desc);
+	struct irq_chip *chip = irq_desc_get_chip(desc);
 	struct device *dev = port->dev;
 	void __iomem *bridge_base_addr =
 		port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
@@ -570,6 +576,8 @@  static void mc_handle_intx(struct irq_desc *desc)
 	u32 bit;
 	int ret;
 
+	chained_irq_enter(chip, desc);
+
 	status = readl_relaxed(bridge_base_addr + ISTATUS_LOCAL);
 	if (status & PM_MSI_INT_INTX_MASK) {
 		status &= PM_MSI_INT_INTX_MASK;
@@ -581,6 +589,8 @@  static void mc_handle_intx(struct irq_desc *desc)
 						    bit);
 		}
 	}
+
+	chained_irq_exit(chip, desc);
 }
 
 static void mc_ack_intx_irq(struct irq_data *data)