On 04/04/2025 13:31, Ilya Maximets wrote:
> On 4/4/25 12:17 PM, Eelco Chaudron wrote:
>>
>>
>> On 2 Apr 2025, at 9:32, Roi Dayan wrote:
>>
>>> Calling dpif_probe_feature() should return if supported or not
>>> without relation to the dpif name.
>>> Remove the redundant recheck of drop support.
>>> TC is supporting drop action from the following commit.
>>> [1] 002682727e6e ("netdev-offload-tc: Add drop action support.")
>>
>> Hi Roi,
>>
>> This is for drop support, not explicit drop support with reasoning,
>> so just removing this code will not work.
> 
> Hmm, the cited commit is also not correct.  It only adds support
> for OVS action to TC translation, but doesn't cover the TC to OVS
> action convertion back.  So, after a flow dump we'll have recirc(0)
> instead of drop and OVS will be in a constant revalidation cycle,
> removing and re-inserting this rule.
> 
> This doesn't happen for userspace datapath (for which this commit
> was added) because userspace datapath doesn't actually dump offloaded
> flows back.  But also, I'm not sure if it's even possible to run
> userspace datapath + tc offload without extra changes.
> 
> Best regards, Ilya Maximets.
> 
>> Also, this patch is failing quite some regressions.
>>
>> //Eelco
>>
>> PS: It might be a good idea to enable testing on your local GitHub repo
>> and push your patches there first. That way, you can make sure your
>> changes are tested before sending them upstream!
>>
>>


Thanks for the comments and suggestions. I think I only tested "make check".
I'll check the other tests and also pushed to github to get a better view and
change what's needed locally as well.
I'll go over your suggestions.

>>> Signed-off-by: Roi Dayan <r...@nvidia.com>
>>> Reviewed-by: Eli Britstein <el...@nvidia.com>
>>> ---
>>>  lib/dpif.c             |  7 -------
>>>  lib/dpif.h             |  1 -
>>>  ofproto/ofproto-dpif.c | 31 ++-----------------------------
>>>  3 files changed, 2 insertions(+), 37 deletions(-)
>>>
>>> diff --git a/lib/dpif.c b/lib/dpif.c
>>> index c22a47c3c15e..58ef90a5ded0 100644
>>> --- a/lib/dpif.c
>>> +++ b/lib/dpif.c
>>> @@ -1936,13 +1936,6 @@ dpif_supports_tnl_push_pop(const struct dpif *dpif)
>>>      return dpif_is_netdev(dpif);
>>>  }
>>>
>>> -bool
>>> -dpif_may_support_explicit_drop_action(const struct dpif *dpif)
>>> -{
>>> -    /* TC does not support offloading this action. */
>>> -    return dpif_is_netdev(dpif) || !netdev_is_flow_api_enabled();
>>> -}
>>> -
>>>  bool
>>>  dpif_supports_lb_output_action(const struct dpif *dpif)
>>>  {
>>> diff --git a/lib/dpif.h b/lib/dpif.h
>>> index a764e8a592bd..8dc5da45b3ef 100644
>>> --- a/lib/dpif.h
>>> +++ b/lib/dpif.h
>>> @@ -940,7 +940,6 @@ int dpif_get_pmds_for_port(const struct dpif * dpif, 
>>> odp_port_t port_no,
>>>
>>>  char *dpif_get_dp_version(const struct dpif *);
>>>  bool dpif_supports_tnl_push_pop(const struct dpif *);
>>> -bool dpif_may_support_explicit_drop_action(const struct dpif *);
>>>  bool dpif_synced_dp_layers(struct dpif *);
>>>
>>>  /* Log functions. */
>>> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
>>> index 7637d93de73e..b8b32b5778e7 100644
>>> --- a/ofproto/ofproto-dpif.c
>>> +++ b/ofproto/ofproto-dpif.c
>>> @@ -223,7 +223,6 @@ static void ct_zone_config_init(struct dpif_backer 
>>> *backer);
>>>  static void ct_zone_config_uninit(struct dpif_backer *backer);
>>>  static void ct_zone_timeout_policy_sweep(struct dpif_backer *backer);
>>>  static void ct_zone_limits_commit(struct dpif_backer *backer);
>>> -static bool recheck_support_explicit_drop_action(struct dpif_backer 
>>> *backer);
>>>
>>>  static inline struct ofproto_dpif *
>>>  ofproto_dpif_cast(const struct ofproto *ofproto)
>>> @@ -394,10 +393,6 @@ type_run(const char *type)
>>>          udpif_set_threads(backer->udpif, n_handlers, n_revalidators);
>>>      }
>>>
>>> -    if (recheck_support_explicit_drop_action(backer)) {
>>> -        backer->need_revalidate = REV_RECONFIGURE;
>>> -    }
>>> -
>>>      if (backer->need_revalidate) {
>>>          struct ofproto_dpif *ofproto;
>>>          struct simap_node *node;
>>> @@ -1420,8 +1415,8 @@ check_drop_action(struct dpif_backer *backer)
>>>      ofpbuf_use_stack(&actions, &actbuf, sizeof actbuf);
>>>      nl_msg_put_u32(&actions, OVS_ACTION_ATTR_DROP, XLATE_OK);
>>>
>>> -    supported = dpif_may_support_explicit_drop_action(backer->dpif) &&
>>> -                dpif_probe_feature(backer->dpif, "drop", &key, &actions, 
>>> NULL);
>>> +    supported = dpif_probe_feature(backer->dpif, "drop", &key, &actions,
>>> +                                   NULL);
>>>
>>>      VLOG_INFO("%s: Datapath %s explicit drop action",
>>>                dpif_name(backer->dpif),
>>> @@ -1757,28 +1752,6 @@ check_support(struct dpif_backer *backer)
>>>      backer->rt_support.odp.nd_ext = check_nd_extensions(backer);
>>>  }
>>>
>>> -/* TC does not support offloading the explicit drop action. As such we 
>>> need to
>>> - * re-probe the datapath if hw-offload has been modified.
>>> - * Note: We don't support true --> false transition as that requires a 
>>> restart.
>>> - * See netdev_set_flow_api_enabled(). */
>>> -static bool
>>> -recheck_support_explicit_drop_action(struct dpif_backer *backer)
>>> -{
>>> -    bool explicit_drop_action;
>>> -
>>> -    atomic_read_relaxed(&backer->rt_support.explicit_drop_action,
>>> -                        &explicit_drop_action);
>>> -
>>> -    if (explicit_drop_action
>>> -        && !dpif_may_support_explicit_drop_action(backer->dpif)) {
>>> -        ovs_assert(!check_drop_action(backer));
>>> -        atomic_store_relaxed(&backer->rt_support.explicit_drop_action, 
>>> false);
>>> -        return true;
>>> -    }
>>> -
>>> -    return false;
>>> -}
>>> -
>>>  static int
>>>  construct(struct ofproto *ofproto_)
>>>  {
>>> -- 
>>> 2.21.0
>>
> 

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to