hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/scsi/qedi/qedi_main.c
....@@ -69,6 +69,7 @@
6969 static void qedi_recovery_handler(struct work_struct *work);
7070 static void qedi_schedule_hw_err_handler(void *dev,
7171 enum qed_hw_err_type err_type);
72
+static int qedi_suspend(struct pci_dev *pdev, pm_message_t state);
7273
7374 static int qedi_iscsi_event_cb(void *context, u8 fw_event_code, void *fw_handle)
7475 {
....@@ -1980,8 +1981,9 @@
19801981 struct qedi_percpu_s *p = this_cpu_ptr(&qedi_percpu);
19811982 struct qedi_work *work, *tmp;
19821983 struct task_struct *thread;
1984
+ unsigned long flags;
19831985
1984
- spin_lock_bh(&p->p_work_lock);
1986
+ spin_lock_irqsave(&p->p_work_lock, flags);
19851987 thread = p->iothread;
19861988 p->iothread = NULL;
19871989
....@@ -1992,7 +1994,7 @@
19921994 kfree(work);
19931995 }
19941996
1995
- spin_unlock_bh(&p->p_work_lock);
1997
+ spin_unlock_irqrestore(&p->p_work_lock, flags);
19961998 if (thread)
19971999 kthread_stop(thread);
19982000 return 0;
....@@ -2456,6 +2458,9 @@
24562458 qedi_ops->ll2->stop(qedi->cdev);
24572459 }
24582460
2461
+ cancel_delayed_work_sync(&qedi->recovery_work);
2462
+ cancel_delayed_work_sync(&qedi->board_disable_work);
2463
+
24592464 qedi_free_iscsi_pf_param(qedi);
24602465
24612466 rval = qedi_ops->common->update_drv_state(qedi->cdev, false);
....@@ -2512,6 +2517,22 @@
25122517 if (test_and_set_bit(QEDI_IN_SHUTDOWN, &qedi->flags))
25132518 return;
25142519 __qedi_remove(pdev, QEDI_MODE_SHUTDOWN);
2520
+}
2521
+
2522
+static int qedi_suspend(struct pci_dev *pdev, pm_message_t state)
2523
+{
2524
+ struct qedi_ctx *qedi;
2525
+
2526
+ if (!pdev) {
2527
+ QEDI_ERR(NULL, "pdev is NULL.\n");
2528
+ return -ENODEV;
2529
+ }
2530
+
2531
+ qedi = pci_get_drvdata(pdev);
2532
+
2533
+ QEDI_ERR(&qedi->dbg_ctx, "%s: Device does not support suspend operation\n", __func__);
2534
+
2535
+ return -EPERM;
25152536 }
25162537
25172538 static int __qedi_probe(struct pci_dev *pdev, int mode)
....@@ -2872,6 +2893,7 @@
28722893 .remove = qedi_remove,
28732894 .shutdown = qedi_shutdown,
28742895 .err_handler = &qedi_err_handler,
2896
+ .suspend = qedi_suspend,
28752897 };
28762898
28772899 static int __init qedi_init(void)