From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pd0-f181.google.com (mail-pd0-f181.google.com [209.85.192.181]) by dpdk.org (Postfix) with ESMTP id 4D0555A9B for ; Thu, 16 Jul 2015 23:34:34 +0200 (CEST) Received: by pdbqm3 with SMTP id qm3so50427588pdb.0 for ; Thu, 16 Jul 2015 14:34:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=40TB4+Ph2IAD8FzZJaSsJd9r16sNt7fNkas3N+TLsNE=; b=cvRO82QzMawgewY/uZrGb6W2Je7RySBctQmY2Pv4p7mJNAvD6lmjMzlwEX+/PrKOQf dx8juHpOAnklBuK47jzlkur5eZNbfSoTWz08eIqLjcovwJCVVNLXpA/BD5/C4LlZ1tJ3 MRPIuTcsiedGcuxuEh2Sos6eoLOYZFytR+XvfKuTwJ6YAp7x/CbzsLNO3zef8EidOr1M Th2XDH2mbrK5RFl1fuCkSGO+eMHYdyUz+IIO+fAdx7wew17JR36fZjVZ9daxs1M3zjr7 ieVFFOdLneXNlAmUf1zP+foX2gIk+hxzy9e9M7mUuPMN4QYpfh0YS5pfr3f5Qc4msiXd F02g== X-Gm-Message-State: ALoCoQlSILyqhespNEoqTMCOs8EDnQZRv0ctyXF95Dcq0o/XO+XKcJ3+O7s/S8kc1gVu+qk6s04+ X-Received: by 10.70.129.5 with SMTP id ns5mr22943592pdb.134.1437082473344; Thu, 16 Jul 2015 14:34:33 -0700 (PDT) Received: from urahara.home.lan (static-50-53-82-155.bvtn.or.frontiernet.net. [50.53.82.155]) by smtp.gmail.com with ESMTPSA id xz1sm8922081pbc.52.2015.07.16.14.34.32 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 16 Jul 2015 14:34:32 -0700 (PDT) From: Stephen Hemminger To: Cristian Dumitrescu Date: Thu, 16 Jul 2015 14:34:35 -0700 Message-Id: <1437082475-3241-5-git-send-email-stephen@networkplumber.org> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437082475-3241-1-git-send-email-stephen@networkplumber.org> References: <1437082475-3241-1-git-send-email-stephen@networkplumber.org> Cc: dev@dpdk.org Subject: [dpdk-dev] [PATCH v5 4/4] rte_sched: hide structure of port hierarchy X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Jul 2015 21:34:34 -0000 Right now the scheduler hierarchy is encoded as a bitfield that is visible as part of the ABI. This creates an barrier limiting future expansion of the hierarchy. As a transistional step. hide the actual layout of the hierarchy and mark the exposed structure as deprecated. This will allow for expansion in later release. Signed-off-by: Stephen Hemminger --- lib/librte_sched/rte_sched.c | 54 ++++++++++++++++++++++++++++++++++ lib/librte_sched/rte_sched.h | 54 ++++++++++------------------------ lib/librte_sched/rte_sched_version.map | 9 ++++++ 3 files changed, 79 insertions(+), 38 deletions(-) diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c index ec565d2..4593af8 100644 --- a/lib/librte_sched/rte_sched.c +++ b/lib/librte_sched/rte_sched.c @@ -184,6 +184,21 @@ enum grinder_state { e_GRINDER_READ_MBUF }; +/* + * Path through the scheduler hierarchy used by the scheduler enqueue + * operation to identify the destination queue for the current + * packet. Stored in the field pkt.hash.sched of struct rte_mbuf of + * each packet, typically written by the classification stage and read + * by scheduler enqueue. + */ +struct __rte_sched_port_hierarchy { + uint32_t queue:2; /**< Queue ID (0 .. 3) */ + uint32_t traffic_class:2; /**< Traffic class ID (0 .. 3)*/ + uint32_t pipe:20; /**< Pipe ID */ + uint32_t subport:6; /**< Subport ID */ + uint32_t color:2; /**< Color */ +}; + struct rte_sched_grinder { /* Pipe cache */ uint16_t pcache_qmask[RTE_SCHED_GRINDER_PCACHE_SIZE]; @@ -910,6 +925,45 @@ rte_sched_pipe_config(struct rte_sched_port *port, return 0; } +void +rte_sched_port_pkt_write(struct rte_mbuf *pkt, + uint32_t subport, uint32_t pipe, uint32_t traffic_class, + uint32_t queue, enum rte_meter_color color) +{ + struct __rte_sched_port_hierarchy *sched + = (struct __rte_sched_port_hierarchy *) &pkt->hash.sched; + + sched->color = (uint32_t) color; + sched->subport = subport; + sched->pipe = pipe; + sched->traffic_class = traffic_class; + sched->queue = queue; +} + +void +rte_sched_port_pkt_read_tree_path(const struct rte_mbuf *pkt, + uint32_t *subport, uint32_t *pipe, + uint32_t *traffic_class, uint32_t *queue) +{ + const struct __rte_sched_port_hierarchy *sched + = (const struct __rte_sched_port_hierarchy *) &pkt->hash.sched; + + *subport = sched->subport; + *pipe = sched->pipe; + *traffic_class = sched->traffic_class; + *queue = sched->queue; +} + + +enum rte_meter_color +rte_sched_port_pkt_read_color(const struct rte_mbuf *pkt) +{ + const struct __rte_sched_port_hierarchy *sched + = (const struct __rte_sched_port_hierarchy *) &pkt->hash.sched; + + return (enum rte_meter_color) sched->color; +} + int rte_sched_subport_read_stats(struct rte_sched_port *port, uint32_t subport_id, diff --git a/lib/librte_sched/rte_sched.h b/lib/librte_sched/rte_sched.h index 729f8c8..1ead267 100644 --- a/lib/librte_sched/rte_sched.h +++ b/lib/librte_sched/rte_sched.h @@ -195,17 +195,19 @@ struct rte_sched_port_params { #endif }; -/** Path through the scheduler hierarchy used by the scheduler enqueue operation to -identify the destination queue for the current packet. Stored in the field hash.sched -of struct rte_mbuf of each packet, typically written by the classification stage and read by -scheduler enqueue.*/ +/* + * Path through scheduler hierarchy + * + * Note: direct access to internal bitfields is deprecated to allow for future expansion. + * Use rte_sched_port_pkt_read/write API instead + */ struct rte_sched_port_hierarchy { uint32_t queue:2; /**< Queue ID (0 .. 3) */ uint32_t traffic_class:2; /**< Traffic class ID (0 .. 3)*/ uint32_t pipe:20; /**< Pipe ID */ uint32_t subport:6; /**< Subport ID */ uint32_t color:2; /**< Color */ -}; +} __attribute__ ((deprecated)); /* * Configuration @@ -328,11 +330,6 @@ rte_sched_queue_read_stats(struct rte_sched_port *port, struct rte_sched_queue_stats *stats, uint16_t *qlen); -/* - * Run-time - * - ***/ - /** * Scheduler hierarchy path write to packet descriptor. Typically called by the * packet classification stage. @@ -350,18 +347,10 @@ rte_sched_queue_read_stats(struct rte_sched_port *port, * @param color * Packet color set */ -static inline void +void rte_sched_port_pkt_write(struct rte_mbuf *pkt, - uint32_t subport, uint32_t pipe, uint32_t traffic_class, uint32_t queue, enum rte_meter_color color) -{ - struct rte_sched_port_hierarchy *sched = (struct rte_sched_port_hierarchy *) &pkt->hash.sched; - - sched->color = (uint32_t) color; - sched->subport = subport; - sched->pipe = pipe; - sched->traffic_class = traffic_class; - sched->queue = queue; -} + uint32_t subport, uint32_t pipe, uint32_t traffic_class, + uint32_t queue, enum rte_meter_color color); /** * Scheduler hierarchy path read from packet descriptor (struct rte_mbuf). Typically @@ -380,24 +369,13 @@ rte_sched_port_pkt_write(struct rte_mbuf *pkt, * Queue ID within pipe traffic class (0 .. 3) * */ -static inline void -rte_sched_port_pkt_read_tree_path(struct rte_mbuf *pkt, uint32_t *subport, uint32_t *pipe, uint32_t *traffic_class, uint32_t *queue) -{ - struct rte_sched_port_hierarchy *sched = (struct rte_sched_port_hierarchy *) &pkt->hash.sched; - - *subport = sched->subport; - *pipe = sched->pipe; - *traffic_class = sched->traffic_class; - *queue = sched->queue; -} - -static inline enum rte_meter_color -rte_sched_port_pkt_read_color(struct rte_mbuf *pkt) -{ - struct rte_sched_port_hierarchy *sched = (struct rte_sched_port_hierarchy *) &pkt->hash.sched; +void +rte_sched_port_pkt_read_tree_path(const struct rte_mbuf *pkt, + uint32_t *subport, uint32_t *pipe, + uint32_t *traffic_class, uint32_t *queue); - return (enum rte_meter_color) sched->color; -} +enum rte_meter_color +rte_sched_port_pkt_read_color(const struct rte_mbuf *pkt); /** * Hierarchical scheduler port enqueue. Writes up to n_pkts to port scheduler and diff --git a/lib/librte_sched/rte_sched_version.map b/lib/librte_sched/rte_sched_version.map index 9f74e8b..3aa159a 100644 --- a/lib/librte_sched/rte_sched_version.map +++ b/lib/librte_sched/rte_sched_version.map @@ -20,3 +20,12 @@ DPDK_2.0 { local: *; }; + +DPDK_2.1 { + global: + + rte_sched_port_pkt_write; + rte_sched_port_pkt_read_tree_path; + rte_sched_port_pkt_read_color; + +} DPDK_2.0; -- 2.1.4