Before this patch, flex_filter->index was always zero when it was read
and used after rte_zmalloc. The corresponding code was therefore moved
into the add and delete parts of the if/else statement.

Fixes: 231d43909a31 ("igb: migrate flex filter to new API")

Signed-off-by: Markus Theil <markus.th...@tu-ilmenau.de>
---
 drivers/net/e1000/igb_ethdev.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 631ace6..91b7e86 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -3913,10 +3913,6 @@ eth_igb_add_del_flex_filter(struct rte_eth_dev *dev,
        }
 
        wufc = E1000_READ_REG(hw, E1000_WUFC);
-       if (flex_filter->index < E1000_MAX_FHFT)
-               reg_off = E1000_FHFT(flex_filter->index);
-       else
-               reg_off = E1000_FHFT_EXT(flex_filter->index - E1000_MAX_FHFT);
 
        if (add) {
                if (eth_igb_flex_filter_lookup(&filter_info->flex_list,
@@ -3946,6 +3942,11 @@ eth_igb_add_del_flex_filter(struct rte_eth_dev *dev,
                        return -ENOSYS;
                }
 
+               if (flex_filter->index < E1000_MAX_FHFT)
+                       reg_off = E1000_FHFT(flex_filter->index);
+               else
+                       reg_off = E1000_FHFT_EXT(flex_filter->index - 
E1000_MAX_FHFT);
+
                E1000_WRITE_REG(hw, E1000_WUFC, wufc | E1000_WUFC_FLEX_HQ |
                                (E1000_WUFC_FLX0 << flex_filter->index));
                queueing = filter->len |
@@ -3974,6 +3975,11 @@ eth_igb_add_del_flex_filter(struct rte_eth_dev *dev,
                        return -ENOENT;
                }
 
+               if (it->index < E1000_MAX_FHFT)
+                       reg_off = E1000_FHFT(it->index);
+               else
+                       reg_off = E1000_FHFT_EXT(it->index - E1000_MAX_FHFT);
+
                for (i = 0; i < E1000_FHFT_SIZE_IN_DWD; i++)
                        E1000_WRITE_REG(hw, reg_off + i * sizeof(uint32_t), 0);
                E1000_WRITE_REG(hw, E1000_WUFC, wufc &
-- 
2.7.4

Reply via email to