@@ -87,6 +87,7 @@ static void ena_tx_timeout(struct net_device *dev)
8787 if (test_and_set_bit (ENA_FLAG_TRIGGER_RESET , & adapter -> flags ))
8888 return ;
8989
90+ adapter -> reset_reason = ENA_REGS_RESET_OS_NETDEV_WD ;
9091 u64_stats_update_begin (& adapter -> syncp );
9192 adapter -> dev_stats .tx_timeout ++ ;
9293 u64_stats_update_end (& adapter -> syncp );
@@ -670,6 +671,7 @@ static int validate_tx_req_id(struct ena_ring *tx_ring, u16 req_id)
670671 u64_stats_update_end (& tx_ring -> syncp );
671672
672673 /* Trigger device reset */
674+ tx_ring -> adapter -> reset_reason = ENA_REGS_RESET_INV_TX_REQ_ID ;
673675 set_bit (ENA_FLAG_TRIGGER_RESET , & tx_ring -> adapter -> flags );
674676 return - EFAULT ;
675677}
@@ -1055,6 +1057,7 @@ static int ena_clean_rx_irq(struct ena_ring *rx_ring, struct napi_struct *napi,
10551057 u64_stats_update_end (& rx_ring -> syncp );
10561058
10571059 /* Too many desc from the device. Trigger reset */
1060+ adapter -> reset_reason = ENA_REGS_RESET_TOO_MANY_RX_DESCS ;
10581061 set_bit (ENA_FLAG_TRIGGER_RESET , & adapter -> flags );
10591062
10601063 return 0 ;
@@ -1720,7 +1723,7 @@ static void ena_down(struct ena_adapter *adapter)
17201723 if (test_bit (ENA_FLAG_TRIGGER_RESET , & adapter -> flags )) {
17211724 int rc ;
17221725
1723- rc = ena_com_dev_reset (adapter -> ena_dev );
1726+ rc = ena_com_dev_reset (adapter -> ena_dev , adapter -> reset_reason );
17241727 if (rc )
17251728 dev_err (& adapter -> pdev -> dev , "Device reset failed\n" );
17261729 }
@@ -2353,7 +2356,7 @@ static int ena_device_init(struct ena_com_dev *ena_dev, struct pci_dev *pdev,
23532356 readless_supported = !(pdev -> revision & ENA_MMIO_DISABLE_REG_READ );
23542357 ena_com_set_mmio_read_mode (ena_dev , readless_supported );
23552358
2356- rc = ena_com_dev_reset (ena_dev );
2359+ rc = ena_com_dev_reset (ena_dev , ENA_REGS_RESET_NORMAL );
23572360 if (rc ) {
23582361 dev_err (dev , "Can not reset device\n" );
23592362 goto err_mmio_read_less ;
@@ -2512,6 +2515,7 @@ static void ena_fw_reset_device(struct work_struct *work)
25122515
25132516 ena_com_mmio_reg_read_request_destroy (ena_dev );
25142517
2518+ adapter -> reset_reason = ENA_REGS_RESET_NORMAL ;
25152519 clear_bit (ENA_FLAG_TRIGGER_RESET , & adapter -> flags );
25162520
25172521 /* Finish with the destroy part. Start the init part */
@@ -2591,6 +2595,8 @@ static int check_missing_comp_in_queue(struct ena_adapter *adapter,
25912595 "The number of lost tx completions is above the threshold (%d > %d). Reset the device\n" ,
25922596 missed_tx ,
25932597 adapter -> missing_tx_completion_threshold );
2598+ adapter -> reset_reason =
2599+ ENA_REGS_RESET_MISS_TX_CMPL ;
25942600 set_bit (ENA_FLAG_TRIGGER_RESET , & adapter -> flags );
25952601 return - EIO ;
25962602 }
@@ -2705,6 +2711,7 @@ static void check_for_missing_keep_alive(struct ena_adapter *adapter)
27052711 u64_stats_update_begin (& adapter -> syncp );
27062712 adapter -> dev_stats .wd_expired ++ ;
27072713 u64_stats_update_end (& adapter -> syncp );
2714+ adapter -> reset_reason = ENA_REGS_RESET_KEEP_ALIVE_TO ;
27082715 set_bit (ENA_FLAG_TRIGGER_RESET , & adapter -> flags );
27092716 }
27102717}
@@ -2717,6 +2724,7 @@ static void check_for_admin_com_state(struct ena_adapter *adapter)
27172724 u64_stats_update_begin (& adapter -> syncp );
27182725 adapter -> dev_stats .admin_q_pause ++ ;
27192726 u64_stats_update_end (& adapter -> syncp );
2727+ adapter -> reset_reason = ENA_REGS_RESET_ADMIN_TO ;
27202728 set_bit (ENA_FLAG_TRIGGER_RESET , & adapter -> flags );
27212729 }
27222730}
@@ -3121,6 +3129,7 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
31213129 ena_set_conf_feat_params (adapter , & get_feat_ctx );
31223130
31233131 adapter -> msg_enable = netif_msg_init (debug , DEFAULT_MSG_ENABLE );
3132+ adapter -> reset_reason = ENA_REGS_RESET_NORMAL ;
31243133
31253134 adapter -> tx_ring_size = queue_size ;
31263135 adapter -> rx_ring_size = queue_size ;
@@ -3205,7 +3214,7 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
32053214 ena_com_delete_debug_area (ena_dev );
32063215 ena_com_rss_destroy (ena_dev );
32073216err_free_msix :
3208- ena_com_dev_reset (ena_dev );
3217+ ena_com_dev_reset (ena_dev , ENA_REGS_RESET_INIT_ERR );
32093218 ena_free_mgmnt_irq (adapter );
32103219 pci_free_irq_vectors (adapter -> pdev );
32113220err_worker_destroy :
@@ -3288,7 +3297,7 @@ static void ena_remove(struct pci_dev *pdev)
32883297
32893298 /* Reset the device only if the device is running. */
32903299 if (test_bit (ENA_FLAG_DEVICE_RUNNING , & adapter -> flags ))
3291- ena_com_dev_reset (ena_dev );
3300+ ena_com_dev_reset (ena_dev , adapter -> reset_reason );
32923301
32933302 ena_free_mgmnt_irq (adapter );
32943303
0 commit comments