net/sched: Enable tc skb ext allocation on chain miss only when needed
Currently tc skb extension is used to send miss info from tc to ovs datapath module, and driver to tc. For the tc to ovs miss it is currently always allocated even if it will not be used by ovs datapath (as it depends on a requested feature). Export the static key which is used by openvswitch module to guard this code path as well, so it will be skipped if ovs datapath doesn't need it. Enable this code path once ovs datapath needs it. Signed-off-by: Paul Blakey <paulb@nvidia.com> Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
ed8c8f605c
commit
35d39fecbc
@@ -37,6 +37,7 @@
|
||||
#include <net/genetlink.h>
|
||||
#include <net/net_namespace.h>
|
||||
#include <net/netns/generic.h>
|
||||
#include <net/pkt_cls.h>
|
||||
|
||||
#include "datapath.h"
|
||||
#include "flow.h"
|
||||
@@ -1601,8 +1602,6 @@ static void ovs_dp_reset_user_features(struct sk_buff *skb,
|
||||
dp->user_features = 0;
|
||||
}
|
||||
|
||||
DEFINE_STATIC_KEY_FALSE(tc_recirc_sharing_support);
|
||||
|
||||
static int ovs_dp_set_upcall_portids(struct datapath *dp,
|
||||
const struct nlattr *ids)
|
||||
{
|
||||
@@ -1657,7 +1656,7 @@ u32 ovs_dp_get_upcall_portid(const struct datapath *dp, uint32_t cpu_id)
|
||||
|
||||
static int ovs_dp_change(struct datapath *dp, struct nlattr *a[])
|
||||
{
|
||||
u32 user_features = 0;
|
||||
u32 user_features = 0, old_features = dp->user_features;
|
||||
int err;
|
||||
|
||||
if (a[OVS_DP_ATTR_USER_FEATURES]) {
|
||||
@@ -1696,10 +1695,12 @@ static int ovs_dp_change(struct datapath *dp, struct nlattr *a[])
|
||||
return err;
|
||||
}
|
||||
|
||||
if (dp->user_features & OVS_DP_F_TC_RECIRC_SHARING)
|
||||
static_branch_enable(&tc_recirc_sharing_support);
|
||||
else
|
||||
static_branch_disable(&tc_recirc_sharing_support);
|
||||
if ((dp->user_features & OVS_DP_F_TC_RECIRC_SHARING) &&
|
||||
!(old_features & OVS_DP_F_TC_RECIRC_SHARING))
|
||||
tc_skb_ext_tc_enable();
|
||||
else if (!(dp->user_features & OVS_DP_F_TC_RECIRC_SHARING) &&
|
||||
(old_features & OVS_DP_F_TC_RECIRC_SHARING))
|
||||
tc_skb_ext_tc_disable();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1839,6 +1840,9 @@ static void __dp_destroy(struct datapath *dp)
|
||||
struct flow_table *table = &dp->table;
|
||||
int i;
|
||||
|
||||
if (dp->user_features & OVS_DP_F_TC_RECIRC_SHARING)
|
||||
tc_skb_ext_tc_disable();
|
||||
|
||||
for (i = 0; i < DP_VPORT_HASH_BUCKETS; i++) {
|
||||
struct vport *vport;
|
||||
struct hlist_node *n;
|
||||
|
||||
Reference in New Issue
Block a user