2
0

736-02-net-ethernet-mediatek-mtk_ppe-prefer-newly-added-l2-.patch 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. From: Felix Fietkau <[email protected]>
  2. Date: Mon, 20 Mar 2023 15:37:55 +0100
  3. Subject: [PATCH] net: ethernet: mediatek: mtk_ppe: prefer newly added l2
  4. flows over existing ones
  5. When a device is roaming between interfaces and a new flow entry is created,
  6. we should assume that its output device is more up to date than whatever
  7. entry existed already.
  8. Signed-off-by: Felix Fietkau <[email protected]>
  9. ---
  10. --- a/drivers/net/ethernet/mediatek/mtk_ppe.c
  11. +++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
  12. @@ -657,10 +657,20 @@ void mtk_foe_entry_clear(struct mtk_ppe
  13. static int
  14. mtk_foe_entry_commit_l2(struct mtk_ppe *ppe, struct mtk_flow_entry *entry)
  15. {
  16. + struct mtk_flow_entry *prev;
  17. +
  18. entry->type = MTK_FLOW_TYPE_L2;
  19. - return rhashtable_insert_fast(&ppe->l2_flows, &entry->l2_node,
  20. - mtk_flow_l2_ht_params);
  21. + prev = rhashtable_lookup_get_insert_fast(&ppe->l2_flows, &entry->l2_node,
  22. + mtk_flow_l2_ht_params);
  23. + if (likely(!prev))
  24. + return 0;
  25. +
  26. + if (IS_ERR(prev))
  27. + return PTR_ERR(prev);
  28. +
  29. + return rhashtable_replace_fast(&ppe->l2_flows, &prev->l2_node,
  30. + &entry->l2_node, mtk_flow_l2_ht_params);
  31. }
  32. int mtk_foe_entry_commit(struct mtk_ppe *ppe, struct mtk_flow_entry *entry)