diff mbox series

[for-rc] RDMA/efa: Add shutdown notifier

Message ID 20240425075143.24683-1-mrgolin@amazon.com (mailing list archive)
State Superseded
Headers show
Series [for-rc] RDMA/efa: Add shutdown notifier | expand

Commit Message

Margolin, Michael April 25, 2024, 7:51 a.m. UTC
Add driver function to stop the device and release any active IRQs as
preparation for shutdown. This should fix issues cased by unexpected AQ
interrupts when booting kernel using kexec and possible data integrity
issues when the system is being shutdown during traffic.

Reviewed-by: Firas Jahjah <firasj@amazon.com>
Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
Signed-off-by: Michael Margolin <mrgolin@amazon.com>
---
 drivers/infiniband/hw/efa/efa_main.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Tao Liu April 25, 2024, 9:59 a.m. UTC | #1
Hi Michael,

Thanks a lot for the patch.

Thanks,
Tao Liu

On Thu, Apr 25, 2024 at 3:52 PM Michael Margolin <mrgolin@amazon.com> wrote:
>
> Add driver function to stop the device and release any active IRQs as
> preparation for shutdown. This should fix issues cased by unexpected AQ
> interrupts when booting kernel using kexec and possible data integrity
> issues when the system is being shutdown during traffic.
>
> Reviewed-by: Firas Jahjah <firasj@amazon.com>
> Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
> Signed-off-by: Michael Margolin <mrgolin@amazon.com>
> ---
>  drivers/infiniband/hw/efa/efa_main.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/drivers/infiniband/hw/efa/efa_main.c b/drivers/infiniband/hw/efa/efa_main.c
> index 5fa3603c80d8..d1a48f988f6c 100644
> --- a/drivers/infiniband/hw/efa/efa_main.c
> +++ b/drivers/infiniband/hw/efa/efa_main.c
> @@ -671,11 +671,22 @@ static void efa_remove(struct pci_dev *pdev)
>         efa_remove_device(pdev);
>  }
>
> +static void efa_shutdown(struct pci_dev *pdev)
> +{
> +       struct efa_dev *dev = pci_get_drvdata(pdev);
> +
> +       efa_destroy_eqs(dev);
> +       efa_com_dev_reset(&dev->edev, EFA_REGS_RESET_SHUTDOWN);
> +       efa_free_irq(dev, &dev->admin_irq);
> +       efa_disable_msix(dev);
> +}
> +
>  static struct pci_driver efa_pci_driver = {
>         .name           = DRV_MODULE_NAME,
>         .id_table       = efa_pci_tbl,
>         .probe          = efa_probe,
>         .remove         = efa_remove,
> +       .shutdown       = efa_shutdown,
>  };
>
>  module_pci_driver(efa_pci_driver);
> --
> 2.40.1
>
Zhu Yanjun April 25, 2024, 11:12 a.m. UTC | #2
On 25.04.24 09:51, Michael Margolin wrote:
> Add driver function to stop the device and release any active IRQs as
> preparation for shutdown. This should fix issues cased by unexpected AQ

s/cased/caused ?

Zhu Yanjun

> interrupts when booting kernel using kexec and possible data integrity
> issues when the system is being shutdown during traffic.
> 
> Reviewed-by: Firas Jahjah <firasj@amazon.com>
> Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
> Signed-off-by: Michael Margolin <mrgolin@amazon.com>
> ---
>   drivers/infiniband/hw/efa/efa_main.c | 11 +++++++++++
>   1 file changed, 11 insertions(+)
> 
> diff --git a/drivers/infiniband/hw/efa/efa_main.c b/drivers/infiniband/hw/efa/efa_main.c
> index 5fa3603c80d8..d1a48f988f6c 100644
> --- a/drivers/infiniband/hw/efa/efa_main.c
> +++ b/drivers/infiniband/hw/efa/efa_main.c
> @@ -671,11 +671,22 @@ static void efa_remove(struct pci_dev *pdev)
>   	efa_remove_device(pdev);
>   }
>   
> +static void efa_shutdown(struct pci_dev *pdev)
> +{
> +	struct efa_dev *dev = pci_get_drvdata(pdev);
> +
> +	efa_destroy_eqs(dev);
> +	efa_com_dev_reset(&dev->edev, EFA_REGS_RESET_SHUTDOWN);
> +	efa_free_irq(dev, &dev->admin_irq);
> +	efa_disable_msix(dev);
> +}
> +
>   static struct pci_driver efa_pci_driver = {
>   	.name           = DRV_MODULE_NAME,
>   	.id_table       = efa_pci_tbl,
>   	.probe          = efa_probe,
>   	.remove         = efa_remove,
> +	.shutdown       = efa_shutdown,
>   };
>   
>   module_pci_driver(efa_pci_driver);
Margolin, Michael April 25, 2024, 5:15 p.m. UTC | #3
On 4/25/2024 2:12 PM, Zhu Yanjun wrote:
> CAUTION: This email originated from outside of the organization. Do 
> not click links or open attachments unless you can confirm the sender 
> and know the content is safe.
>
>
>
> On 25.04.24 09:51, Michael Margolin wrote:
>> Add driver function to stop the device and release any active IRQs as
>> preparation for shutdown. This should fix issues cased by unexpected AQ
>
> s/cased/caused ?
>
> Zhu Yanjun

Right, thanks.


Michael
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/efa/efa_main.c b/drivers/infiniband/hw/efa/efa_main.c
index 5fa3603c80d8..d1a48f988f6c 100644
--- a/drivers/infiniband/hw/efa/efa_main.c
+++ b/drivers/infiniband/hw/efa/efa_main.c
@@ -671,11 +671,22 @@  static void efa_remove(struct pci_dev *pdev)
 	efa_remove_device(pdev);
 }
 
+static void efa_shutdown(struct pci_dev *pdev)
+{
+	struct efa_dev *dev = pci_get_drvdata(pdev);
+
+	efa_destroy_eqs(dev);
+	efa_com_dev_reset(&dev->edev, EFA_REGS_RESET_SHUTDOWN);
+	efa_free_irq(dev, &dev->admin_irq);
+	efa_disable_msix(dev);
+}
+
 static struct pci_driver efa_pci_driver = {
 	.name           = DRV_MODULE_NAME,
 	.id_table       = efa_pci_tbl,
 	.probe          = efa_probe,
 	.remove         = efa_remove,
+	.shutdown       = efa_shutdown,
 };
 
 module_pci_driver(efa_pci_driver);