Skip to content

Commit e286bcf

Browse files
Scott Baueraxboe
authored andcommitted
nvme/pci: re-check security protocol support after reset
A device may change capabilities after each reset, e.g. due to a firmware upgrade. We should thus check for Security Send/Receive and OPAL support after each reset. Based on patches from Christoph and Keith. Signed-off-by: Scott Bauer <scott.bauer@intel.com> Signed-off-by: Jens Axboe <axboe@fb.com>
1 parent 7d6d157 commit e286bcf

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

drivers/nvme/host/pci.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,7 +1736,7 @@ static void nvme_pci_free_ctrl(struct nvme_ctrl *ctrl)
17361736
if (dev->ctrl.admin_q)
17371737
blk_put_queue(dev->ctrl.admin_q);
17381738
kfree(dev->queues);
1739-
kfree(dev->ctrl.opal_dev);
1739+
free_opal_dev(dev->ctrl.opal_dev);
17401740
kfree(dev);
17411741
}
17421742

@@ -1786,14 +1786,17 @@ static void nvme_reset_work(struct work_struct *work)
17861786
if (result)
17871787
goto out;
17881788

1789-
if ((dev->ctrl.oacs & NVME_CTRL_OACS_SEC_SUPP) && !dev->ctrl.opal_dev) {
1790-
dev->ctrl.opal_dev =
1791-
init_opal_dev(&dev->ctrl, &nvme_sec_submit);
1789+
if (dev->ctrl.oacs & NVME_CTRL_OACS_SEC_SUPP) {
1790+
if (!dev->ctrl.opal_dev)
1791+
dev->ctrl.opal_dev =
1792+
init_opal_dev(&dev->ctrl, &nvme_sec_submit);
1793+
else if (was_suspend)
1794+
opal_unlock_from_suspend(dev->ctrl.opal_dev);
1795+
} else {
1796+
free_opal_dev(dev->ctrl.opal_dev);
1797+
dev->ctrl.opal_dev = NULL;
17921798
}
17931799

1794-
if (was_suspend)
1795-
opal_unlock_from_suspend(dev->ctrl.opal_dev);
1796-
17971800
result = nvme_setup_io_queues(dev);
17981801
if (result)
17991802
goto out;

0 commit comments

Comments
 (0)