@@ -1593,16 +1593,24 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode)
1593
1593
struct qlcnic_hardware_context * ahw = adapter -> ahw ;
1594
1594
int ret = 0 , loop = 0 , max_sds_rings = adapter -> max_sds_rings ;
1595
1595
1596
- QLCDB (adapter , DRV , "%s loopback test in progress\n" ,
1597
- mode == QLCNIC_ILB_MODE ? "internal" : "external" );
1598
1596
if (ahw -> op_mode == QLCNIC_NON_PRIV_FUNC ) {
1599
- dev_warn ( & adapter -> pdev -> dev ,
1600
- "Loopback test not supported for non privilege function \n" );
1597
+ netdev_warn ( netdev ,
1598
+ "Loopback test not supported in non privileged mode \n" );
1601
1599
return ret ;
1602
1600
}
1603
1601
1604
- if (test_and_set_bit (__QLCNIC_RESETTING , & adapter -> state ))
1602
+ if (test_bit (__QLCNIC_RESETTING , & adapter -> state )) {
1603
+ netdev_info (netdev , "Device is resetting\n" );
1605
1604
return - EBUSY ;
1605
+ }
1606
+
1607
+ if (qlcnic_get_diag_lock (adapter )) {
1608
+ netdev_info (netdev , "Device is in diagnostics mode\n" );
1609
+ return - EBUSY ;
1610
+ }
1611
+
1612
+ netdev_info (netdev , "%s loopback test in progress\n" ,
1613
+ mode == QLCNIC_ILB_MODE ? "internal" : "external" );
1606
1614
1607
1615
ret = qlcnic_83xx_diag_alloc_res (netdev , QLCNIC_LOOPBACK_TEST ,
1608
1616
max_sds_rings );
@@ -1643,7 +1651,7 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode)
1643
1651
1644
1652
fail_diag_alloc :
1645
1653
adapter -> max_sds_rings = max_sds_rings ;
1646
- clear_bit ( __QLCNIC_RESETTING , & adapter -> state );
1654
+ qlcnic_release_diag_lock ( adapter );
1647
1655
return ret ;
1648
1656
}
1649
1657
@@ -3118,8 +3126,10 @@ int qlcnic_83xx_interrupt_test(struct net_device *netdev)
3118
3126
u8 val ;
3119
3127
int ret , max_sds_rings = adapter -> max_sds_rings ;
3120
3128
3121
- if (test_and_set_bit (__QLCNIC_RESETTING , & adapter -> state ))
3122
- return - EIO ;
3129
+ if (qlcnic_get_diag_lock (adapter )) {
3130
+ netdev_info (netdev , "Device in diagnostics mode\n" );
3131
+ return - EBUSY ;
3132
+ }
3123
3133
3124
3134
ret = qlcnic_83xx_diag_alloc_res (netdev , QLCNIC_INTERRUPT_TEST ,
3125
3135
max_sds_rings );
@@ -3161,7 +3171,7 @@ int qlcnic_83xx_interrupt_test(struct net_device *netdev)
3161
3171
3162
3172
fail_diag_irq :
3163
3173
adapter -> max_sds_rings = max_sds_rings ;
3164
- clear_bit ( __QLCNIC_RESETTING , & adapter -> state );
3174
+ qlcnic_release_diag_lock ( adapter );
3165
3175
return ret ;
3166
3176
}
3167
3177
0 commit comments