| 6789 | } |
| 6790 | |
| 6791 | static void |
| 6792 | i40e_handle_mdd_event(struct rte_eth_dev *dev) |
| 6793 | { |
| 6794 | #define I40E_MDD_CLEAR32 0xFFFFFFFF |
| 6795 | #define I40E_MDD_CLEAR16 0xFFFF |
| 6796 | struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); |
| 6797 | struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); |
| 6798 | bool mdd_detected = false; |
| 6799 | struct i40e_pf_vf *vf; |
| 6800 | uint32_t reg; |
| 6801 | int i; |
| 6802 | |
| 6803 | /* find what triggered the MDD event */ |
| 6804 | reg = I40E_READ_REG(hw, I40E_GL_MDET_TX); |
| 6805 | if (reg & I40E_GL_MDET_TX_VALID_MASK) { |
| 6806 | uint8_t pf_num = (reg & I40E_GL_MDET_TX_PF_NUM_MASK) >> |
| 6807 | I40E_GL_MDET_TX_PF_NUM_SHIFT; |
| 6808 | uint16_t vf_num = (reg & I40E_GL_MDET_TX_VF_NUM_MASK) >> |
| 6809 | I40E_GL_MDET_TX_VF_NUM_SHIFT; |
| 6810 | uint8_t event = (reg & I40E_GL_MDET_TX_EVENT_MASK) >> |
| 6811 | I40E_GL_MDET_TX_EVENT_SHIFT; |
| 6812 | uint16_t queue = ((reg & I40E_GL_MDET_TX_QUEUE_MASK) >> |
| 6813 | I40E_GL_MDET_TX_QUEUE_SHIFT) - |
| 6814 | hw->func_caps.base_queue; |
| 6815 | PMD_DRV_LOG(WARNING, "Malicious Driver Detection event 0x%02x on TX " |
| 6816 | "queue %d PF number 0x%02x VF number 0x%02x device %s", |
| 6817 | event, queue, pf_num, vf_num, dev->data->name); |
| 6818 | I40E_WRITE_REG(hw, I40E_GL_MDET_TX, I40E_MDD_CLEAR32); |
| 6819 | mdd_detected = true; |
| 6820 | } |
| 6821 | reg = I40E_READ_REG(hw, I40E_GL_MDET_RX); |
| 6822 | if (reg & I40E_GL_MDET_RX_VALID_MASK) { |
| 6823 | uint8_t func = (reg & I40E_GL_MDET_RX_FUNCTION_MASK) >> |
| 6824 | I40E_GL_MDET_RX_FUNCTION_SHIFT; |
| 6825 | uint8_t event = (reg & I40E_GL_MDET_RX_EVENT_MASK) >> |
| 6826 | I40E_GL_MDET_RX_EVENT_SHIFT; |
| 6827 | uint16_t queue = ((reg & I40E_GL_MDET_RX_QUEUE_MASK) >> |
| 6828 | I40E_GL_MDET_RX_QUEUE_SHIFT) - |
| 6829 | hw->func_caps.base_queue; |
| 6830 | |
| 6831 | PMD_DRV_LOG(WARNING, "Malicious Driver Detection event 0x%02x on RX " |
| 6832 | "queue %d of function 0x%02x device %s", |
| 6833 | event, queue, func, dev->data->name); |
| 6834 | I40E_WRITE_REG(hw, I40E_GL_MDET_RX, I40E_MDD_CLEAR32); |
| 6835 | mdd_detected = true; |
| 6836 | } |
| 6837 | |
| 6838 | if (mdd_detected) { |
| 6839 | reg = I40E_READ_REG(hw, I40E_PF_MDET_TX); |
| 6840 | if (reg & I40E_PF_MDET_TX_VALID_MASK) { |
| 6841 | I40E_WRITE_REG(hw, I40E_PF_MDET_TX, I40E_MDD_CLEAR16); |
| 6842 | PMD_DRV_LOG(WARNING, "TX driver issue detected on PF"); |
| 6843 | } |
| 6844 | reg = I40E_READ_REG(hw, I40E_PF_MDET_RX); |
| 6845 | if (reg & I40E_PF_MDET_RX_VALID_MASK) { |
| 6846 | I40E_WRITE_REG(hw, I40E_PF_MDET_RX, |
| 6847 | I40E_MDD_CLEAR16); |
| 6848 | PMD_DRV_LOG(WARNING, "RX driver issue detected on PF"); |
no outgoing calls
no test coverage detected