MCPcopy Create free account
hub / github.com/F-Stack/f-stack / i40e_handle_mdd_event

Function i40e_handle_mdd_event

dpdk/drivers/net/i40e/i40e_ethdev.c:6791–6875  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6789}
6790
6791static void
6792i40e_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");

Callers 2

i40e_dev_alarm_handlerFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected