2525#include "nvme.h"
2626#include "fabrics.h"
2727#include <linux/nvme-auth.h>
28- #include <linux/nvme-keyring.h>
2928
3029#define CREATE_TRACE_POINTS
3130#include "trace.h"
@@ -483,6 +482,7 @@ EXPORT_SYMBOL_GPL(nvme_cancel_tagset);
483482
484483void nvme_cancel_admin_tagset (struct nvme_ctrl * ctrl )
485484{
485+ nvme_stop_keep_alive (ctrl );
486486 if (ctrl -> admin_tagset ) {
487487 blk_mq_tagset_busy_iter (ctrl -> admin_tagset ,
488488 nvme_cancel_request , ctrl );
@@ -3200,6 +3200,8 @@ int nvme_init_ctrl_finish(struct nvme_ctrl *ctrl, bool was_suspended)
32003200 clear_bit (NVME_CTRL_DIRTY_CAPABILITY , & ctrl -> flags );
32013201 ctrl -> identified = true;
32023202
3203+ nvme_start_keep_alive (ctrl );
3204+
32033205 return 0 ;
32043206}
32053207EXPORT_SYMBOL_GPL (nvme_init_ctrl_finish );
@@ -4074,8 +4076,21 @@ static void nvme_get_fw_slot_info(struct nvme_ctrl *ctrl)
40744076 return ;
40754077
40764078 if (nvme_get_log (ctrl , NVME_NSID_ALL , NVME_LOG_FW_SLOT , 0 , NVME_CSI_NVM ,
4077- log , sizeof (* log ), 0 ))
4079+ log , sizeof (* log ), 0 )) {
40784080 dev_warn (ctrl -> device , "Get FW SLOT INFO log error\n" );
4081+ goto out_free_log ;
4082+ }
4083+
4084+ if (log -> afi & 0x70 || !(log -> afi & 0x7 )) {
4085+ dev_info (ctrl -> device ,
4086+ "Firmware is activated after next Controller Level Reset\n" );
4087+ goto out_free_log ;
4088+ }
4089+
4090+ memcpy (ctrl -> subsys -> firmware_rev , & log -> frs [(log -> afi & 0x7 ) - 1 ],
4091+ sizeof (ctrl -> subsys -> firmware_rev ));
4092+
4093+ out_free_log :
40794094 kfree (log );
40804095}
40814096
@@ -4333,7 +4348,6 @@ void nvme_stop_ctrl(struct nvme_ctrl *ctrl)
43334348{
43344349 nvme_mpath_stop (ctrl );
43354350 nvme_auth_stop (ctrl );
4336- nvme_stop_keep_alive (ctrl );
43374351 nvme_stop_failfast_work (ctrl );
43384352 flush_work (& ctrl -> async_event_work );
43394353 cancel_work_sync (& ctrl -> fw_act_work );
@@ -4344,8 +4358,6 @@ EXPORT_SYMBOL_GPL(nvme_stop_ctrl);
43444358
43454359void nvme_start_ctrl (struct nvme_ctrl * ctrl )
43464360{
4347- nvme_start_keep_alive (ctrl );
4348-
43494361 nvme_enable_aen (ctrl );
43504362
43514363 /*
@@ -4724,16 +4736,11 @@ static int __init nvme_core_init(void)
47244736 result = PTR_ERR (nvme_ns_chr_class );
47254737 goto unregister_generic_ns ;
47264738 }
4727- result = nvme_keyring_init ();
4728- if (result )
4729- goto destroy_ns_chr ;
47304739 result = nvme_init_auth ();
47314740 if (result )
4732- goto keyring_exit ;
4741+ goto destroy_ns_chr ;
47334742 return 0 ;
47344743
4735- keyring_exit :
4736- nvme_keyring_exit ();
47374744destroy_ns_chr :
47384745 class_destroy (nvme_ns_chr_class );
47394746unregister_generic_ns :
@@ -4757,7 +4764,6 @@ static int __init nvme_core_init(void)
47574764static void __exit nvme_core_exit (void )
47584765{
47594766 nvme_exit_auth ();
4760- nvme_keyring_exit ();
47614767 class_destroy (nvme_ns_chr_class );
47624768 class_destroy (nvme_subsys_class );
47634769 class_destroy (nvme_class );
0 commit comments