summaryrefslogtreecommitdiff
path: root/include/net
diff options
context:
space:
mode:
authorAmritha Nambiar <amritha.nambiar@intel.com>2017-10-27 02:35:34 -0700
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2017-10-31 10:45:45 -0700
commit384c181e3780ddc45e70483e29d84495b484730d (patch)
tree8f063cca3ae12f55d566c07115b43ee13b71cfb9 /include/net
parentaa250f1186319f1e0b9b4a1d99022fe32251b8b6 (diff)
net: sched: Identify hardware traffic classes using classid
This patch offloads the classid to hardware and uses the classid reserved in the range :ffe0 - :ffef to identify hardware traffic classes reported via dev->num_tc. tcf_result structure contains the class ID of the class to which the packet belongs and is offloaded to hardware via flower filter. A new helper function is introduced to represent HW traffic classes 0 through 15 using the reserved classid values :ffe0 - :ffef. Signed-off-by: Amritha Nambiar <amritha.nambiar@intel.com> Acked-by: Shannon Nelson <shannon.nelson@oracle.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/pkt_cls.h1
-rw-r--r--include/net/sch_generic.h7
2 files changed, 8 insertions, 0 deletions
diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h
index bf73e1675519..37c5ef766655 100644
--- a/include/net/pkt_cls.h
+++ b/include/net/pkt_cls.h
@@ -666,6 +666,7 @@ struct tc_cls_flower_offload {
struct fl_flow_key *mask;
struct fl_flow_key *key;
struct tcf_exts *exts;
+ u32 classid;
};
enum tc_matchall_command {
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index 07c179dab478..c23e938f5b19 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -411,6 +411,13 @@ qdisc_class_find(const struct Qdisc_class_hash *hash, u32 id)
return NULL;
}
+static inline int tc_classid_to_hwtc(struct net_device *dev, u32 classid)
+{
+ u32 hwtc = TC_H_MIN(classid) - TC_H_MIN_PRIORITY;
+
+ return (hwtc < netdev_get_num_tc(dev)) ? hwtc : -EINVAL;
+}
+
int qdisc_class_hash_init(struct Qdisc_class_hash *);
void qdisc_class_hash_insert(struct Qdisc_class_hash *,
struct Qdisc_class_common *);