@@ -1193,8 +1193,12 @@ int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
1193
1193
return rval ;
1194
1194
1195
1195
done_free_sp :
1196
- /* ref: INIT */
1197
- kref_put (& sp -> cmd_kref , qla2x00_sp_release );
1196
+ /*
1197
+ * use qla24xx_async_gnl_sp_done to purge all pending gnl request.
1198
+ * kref_put is call behind the scene.
1199
+ */
1200
+ sp -> u .iocb_cmd .u .mbx .in_mb [0 ] = MBS_COMMAND_ERROR ;
1201
+ qla24xx_async_gnl_sp_done (sp , QLA_COMMAND_ERROR );
1198
1202
fcport -> flags &= ~(FCF_ASYNC_SENT );
1199
1203
done :
1200
1204
fcport -> flags &= ~(FCF_ASYNC_ACTIVE );
@@ -2665,6 +2669,40 @@ qla83xx_nic_core_fw_load(scsi_qla_host_t *vha)
2665
2669
return rval ;
2666
2670
}
2667
2671
2672
+ static void qla_enable_fce_trace (scsi_qla_host_t * vha )
2673
+ {
2674
+ int rval ;
2675
+ struct qla_hw_data * ha = vha -> hw ;
2676
+
2677
+ if (ha -> fce ) {
2678
+ ha -> flags .fce_enabled = 1 ;
2679
+ memset (ha -> fce , 0 , fce_calc_size (ha -> fce_bufs ));
2680
+ rval = qla2x00_enable_fce_trace (vha ,
2681
+ ha -> fce_dma , ha -> fce_bufs , ha -> fce_mb , & ha -> fce_bufs );
2682
+
2683
+ if (rval ) {
2684
+ ql_log (ql_log_warn , vha , 0x8033 ,
2685
+ "Unable to reinitialize FCE (%d).\n" , rval );
2686
+ ha -> flags .fce_enabled = 0 ;
2687
+ }
2688
+ }
2689
+ }
2690
+
2691
+ static void qla_enable_eft_trace (scsi_qla_host_t * vha )
2692
+ {
2693
+ int rval ;
2694
+ struct qla_hw_data * ha = vha -> hw ;
2695
+
2696
+ if (ha -> eft ) {
2697
+ memset (ha -> eft , 0 , EFT_SIZE );
2698
+ rval = qla2x00_enable_eft_trace (vha , ha -> eft_dma , EFT_NUM_BUFFERS );
2699
+
2700
+ if (rval ) {
2701
+ ql_log (ql_log_warn , vha , 0x8034 ,
2702
+ "Unable to reinitialize EFT (%d).\n" , rval );
2703
+ }
2704
+ }
2705
+ }
2668
2706
/*
2669
2707
* qla2x00_initialize_adapter
2670
2708
* Initialize board.
@@ -3668,9 +3706,8 @@ qla24xx_chip_diag(scsi_qla_host_t *vha)
3668
3706
}
3669
3707
3670
3708
static void
3671
- qla2x00_init_fce_trace (scsi_qla_host_t * vha )
3709
+ qla2x00_alloc_fce_trace (scsi_qla_host_t * vha )
3672
3710
{
3673
- int rval ;
3674
3711
dma_addr_t tc_dma ;
3675
3712
void * tc ;
3676
3713
struct qla_hw_data * ha = vha -> hw ;
@@ -3699,27 +3736,17 @@ qla2x00_init_fce_trace(scsi_qla_host_t *vha)
3699
3736
return ;
3700
3737
}
3701
3738
3702
- rval = qla2x00_enable_fce_trace (vha , tc_dma , FCE_NUM_BUFFERS ,
3703
- ha -> fce_mb , & ha -> fce_bufs );
3704
- if (rval ) {
3705
- ql_log (ql_log_warn , vha , 0x00bf ,
3706
- "Unable to initialize FCE (%d).\n" , rval );
3707
- dma_free_coherent (& ha -> pdev -> dev , FCE_SIZE , tc , tc_dma );
3708
- return ;
3709
- }
3710
-
3711
3739
ql_dbg (ql_dbg_init , vha , 0x00c0 ,
3712
3740
"Allocated (%d KB) for FCE...\n" , FCE_SIZE / 1024 );
3713
3741
3714
- ha -> flags .fce_enabled = 1 ;
3715
3742
ha -> fce_dma = tc_dma ;
3716
3743
ha -> fce = tc ;
3744
+ ha -> fce_bufs = FCE_NUM_BUFFERS ;
3717
3745
}
3718
3746
3719
3747
static void
3720
- qla2x00_init_eft_trace (scsi_qla_host_t * vha )
3748
+ qla2x00_alloc_eft_trace (scsi_qla_host_t * vha )
3721
3749
{
3722
- int rval ;
3723
3750
dma_addr_t tc_dma ;
3724
3751
void * tc ;
3725
3752
struct qla_hw_data * ha = vha -> hw ;
@@ -3744,28 +3771,13 @@ qla2x00_init_eft_trace(scsi_qla_host_t *vha)
3744
3771
return ;
3745
3772
}
3746
3773
3747
- rval = qla2x00_enable_eft_trace (vha , tc_dma , EFT_NUM_BUFFERS );
3748
- if (rval ) {
3749
- ql_log (ql_log_warn , vha , 0x00c2 ,
3750
- "Unable to initialize EFT (%d).\n" , rval );
3751
- dma_free_coherent (& ha -> pdev -> dev , EFT_SIZE , tc , tc_dma );
3752
- return ;
3753
- }
3754
-
3755
3774
ql_dbg (ql_dbg_init , vha , 0x00c3 ,
3756
3775
"Allocated (%d KB) EFT ...\n" , EFT_SIZE / 1024 );
3757
3776
3758
3777
ha -> eft_dma = tc_dma ;
3759
3778
ha -> eft = tc ;
3760
3779
}
3761
3780
3762
- static void
3763
- qla2x00_alloc_offload_mem (scsi_qla_host_t * vha )
3764
- {
3765
- qla2x00_init_fce_trace (vha );
3766
- qla2x00_init_eft_trace (vha );
3767
- }
3768
-
3769
3781
void
3770
3782
qla2x00_alloc_fw_dump (scsi_qla_host_t * vha )
3771
3783
{
@@ -3820,10 +3832,10 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *vha)
3820
3832
if (ha -> tgt .atio_ring )
3821
3833
mq_size += ha -> tgt .atio_q_length * sizeof (request_t );
3822
3834
3823
- qla2x00_init_fce_trace (vha );
3835
+ qla2x00_alloc_fce_trace (vha );
3824
3836
if (ha -> fce )
3825
3837
fce_size = sizeof (struct qla2xxx_fce_chain ) + FCE_SIZE ;
3826
- qla2x00_init_eft_trace (vha );
3838
+ qla2x00_alloc_eft_trace (vha );
3827
3839
if (ha -> eft )
3828
3840
eft_size = EFT_SIZE ;
3829
3841
}
@@ -4253,7 +4265,6 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
4253
4265
struct qla_hw_data * ha = vha -> hw ;
4254
4266
struct device_reg_2xxx __iomem * reg = & ha -> iobase -> isp ;
4255
4267
unsigned long flags ;
4256
- uint16_t fw_major_version ;
4257
4268
int done_once = 0 ;
4258
4269
4259
4270
if (IS_P3P_TYPE (ha )) {
@@ -4320,7 +4331,6 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
4320
4331
goto failed ;
4321
4332
4322
4333
enable_82xx_npiv :
4323
- fw_major_version = ha -> fw_major_version ;
4324
4334
if (IS_P3P_TYPE (ha ))
4325
4335
qla82xx_check_md_needed (vha );
4326
4336
else
@@ -4349,12 +4359,11 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
4349
4359
if (rval != QLA_SUCCESS )
4350
4360
goto failed ;
4351
4361
4352
- if (!fw_major_version && !(IS_P3P_TYPE (ha )))
4353
- qla2x00_alloc_offload_mem (vha );
4354
-
4355
4362
if (ql2xallocfwdump && !(IS_P3P_TYPE (ha )))
4356
4363
qla2x00_alloc_fw_dump (vha );
4357
4364
4365
+ qla_enable_fce_trace (vha );
4366
+ qla_enable_eft_trace (vha );
4358
4367
} else {
4359
4368
goto failed ;
4360
4369
}
@@ -7487,12 +7496,12 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha)
7487
7496
int
7488
7497
qla2x00_abort_isp (scsi_qla_host_t * vha )
7489
7498
{
7490
- int rval ;
7491
7499
uint8_t status = 0 ;
7492
7500
struct qla_hw_data * ha = vha -> hw ;
7493
7501
struct scsi_qla_host * vp , * tvp ;
7494
7502
struct req_que * req = ha -> req_q_map [0 ];
7495
7503
unsigned long flags ;
7504
+ fc_port_t * fcport ;
7496
7505
7497
7506
if (vha -> flags .online ) {
7498
7507
qla2x00_abort_isp_cleanup (vha );
@@ -7561,6 +7570,15 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
7561
7570
"ISP Abort - ISP reg disconnect post nvmram config, exiting.\n" );
7562
7571
return status ;
7563
7572
}
7573
+
7574
+ /* User may have updated [fcp|nvme] prefer in flash */
7575
+ list_for_each_entry (fcport , & vha -> vp_fcports , list ) {
7576
+ if (NVME_PRIORITY (ha , fcport ))
7577
+ fcport -> do_prli_nvme = 1 ;
7578
+ else
7579
+ fcport -> do_prli_nvme = 0 ;
7580
+ }
7581
+
7564
7582
if (!qla2x00_restart_isp (vha )) {
7565
7583
clear_bit (RESET_MARKER_NEEDED , & vha -> dpc_flags );
7566
7584
@@ -7581,31 +7599,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
7581
7599
7582
7600
if (IS_QLA81XX (ha ) || IS_QLA8031 (ha ))
7583
7601
qla2x00_get_fw_version (vha );
7584
- if (ha -> fce ) {
7585
- ha -> flags .fce_enabled = 1 ;
7586
- memset (ha -> fce , 0 ,
7587
- fce_calc_size (ha -> fce_bufs ));
7588
- rval = qla2x00_enable_fce_trace (vha ,
7589
- ha -> fce_dma , ha -> fce_bufs , ha -> fce_mb ,
7590
- & ha -> fce_bufs );
7591
- if (rval ) {
7592
- ql_log (ql_log_warn , vha , 0x8033 ,
7593
- "Unable to reinitialize FCE "
7594
- "(%d).\n" , rval );
7595
- ha -> flags .fce_enabled = 0 ;
7596
- }
7597
- }
7598
7602
7599
- if (ha -> eft ) {
7600
- memset (ha -> eft , 0 , EFT_SIZE );
7601
- rval = qla2x00_enable_eft_trace (vha ,
7602
- ha -> eft_dma , EFT_NUM_BUFFERS );
7603
- if (rval ) {
7604
- ql_log (ql_log_warn , vha , 0x8034 ,
7605
- "Unable to reinitialize EFT "
7606
- "(%d).\n" , rval );
7607
- }
7608
- }
7609
7603
} else { /* failed the ISP abort */
7610
7604
vha -> flags .online = 1 ;
7611
7605
if (test_bit (ISP_ABORT_RETRY , & vha -> dpc_flags )) {
@@ -7655,6 +7649,14 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
7655
7649
atomic_inc (& vp -> vref_count );
7656
7650
spin_unlock_irqrestore (& ha -> vport_slock , flags );
7657
7651
7652
+ /* User may have updated [fcp|nvme] prefer in flash */
7653
+ list_for_each_entry (fcport , & vp -> vp_fcports , list ) {
7654
+ if (NVME_PRIORITY (ha , fcport ))
7655
+ fcport -> do_prli_nvme = 1 ;
7656
+ else
7657
+ fcport -> do_prli_nvme = 0 ;
7658
+ }
7659
+
7658
7660
qla2x00_vp_abort_isp (vp );
7659
7661
7660
7662
spin_lock_irqsave (& ha -> vport_slock , flags );
0 commit comments