net/igb: fix add/delete of flex filters
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") Cc: stable@dpdk.org Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
This commit is contained in:
parent
2764556a84
commit
167e7b9ae5
@ -3914,10 +3914,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,
|
||||
@ -3947,6 +3943,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 |
|
||||
@ -3975,6 +3976,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 &
|
||||
|
Loading…
x
Reference in New Issue
Block a user