> -----Original Message----- > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of > alanrobertson...@gmail.com > Sent: Tuesday, January 16, 2018 3:32 PM > To: Dumitrescu, Cristian <cristian.dumitre...@intel.com> > Cc: dev@dpdk.org; Alan Robertson <ar7...@att.com>; Alan Robertson > <alan.robert...@att.com> > Subject: [dpdk-dev] [PATCH v2] Allow -ve frame_overhead values > > From: Alan Robertson <ar7...@att.com> > > When forwarding traffic across a TDM network the ethernet header will > be replaced with a ML-PPP one thereby reducing the size of the packet. > > Signed-off-by: Alan Robertson <alan.robert...@att.com> > --- > lib/librte_sched/rte_sched.c | 14 +++++++++++++- > lib/librte_sched/rte_sched.h | 5 +++-- > 2 files changed, 16 insertions(+), 3 deletions(-) > > diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c > index ad2f7c6d5..c971fd0d4 100644 > --- a/lib/librte_sched/rte_sched.c > +++ b/lib/librte_sched/rte_sched.c > @@ -187,7 +187,7 @@ struct rte_sched_port { > uint32_t n_pipes_per_subport; > uint32_t rate; > uint32_t mtu; > - uint32_t frame_overhead; > + int32_t frame_overhead; > uint16_t qsize[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE]; > uint32_t n_pipe_profiles; > uint32_t pipe_tc3_rate_max; > @@ -1591,6 +1591,10 @@ grinder_credits_check(struct rte_sched_port > *port, uint32_t pos) > uint32_t pipe_tc_credits = pipe->tc_credits[tc_index]; > int enough_credits; > > +#ifdef RTE_SCHED_DEBUG > + assert((int)(pkt->pkt_len + port->frame_overhead) > 0); > +#endif /* RTE_SCHED_DEBUG */ > + > /* Check queue credits */ > enough_credits = (pkt_len <= subport_tb_credits) && > (pkt_len <= subport_tc_credits) && > @@ -1629,6 +1633,10 @@ grinder_credits_check(struct rte_sched_port > *port, uint32_t pos) > uint32_t pipe_tc_ov_credits = pipe_tc_ov_mask1[tc_index]; > int enough_credits; > > +#ifdef RTE_SCHED_DEBUG > + assert((int)(pkt->pkt_len + port->frame_overhead) > 0); > +#endif /* RTE_SCHED_DEBUG */ > + > /* Check pipe and subport credits */ > enough_credits = (pkt_len <= subport_tb_credits) && > (pkt_len <= subport_tc_credits) && > @@ -1663,6 +1671,10 @@ grinder_schedule(struct rte_sched_port *port, > uint32_t pos) > if (!grinder_credits_check(port, pos)) > return 0; > > +#ifdef RTE_SCHED_DEBUG > + assert((int)(pkt->pkt_len + port->frame_overhead) > 0); > +#endif /* RTE_SCHED_DEBUG */ > + > /* Advance port time */ > port->time += pkt_len; > > diff --git a/lib/librte_sched/rte_sched.h b/lib/librte_sched/rte_sched.h > index 5d2a688dc..3e135c1e5 100644 > --- a/lib/librte_sched/rte_sched.h > +++ b/lib/librte_sched/rte_sched.h > @@ -190,8 +190,9 @@ struct rte_sched_port_params { > uint32_t mtu; /**< Maximum Ethernet frame size > * (measured in bytes). > * Should not include the framing > overhead. */ > - uint32_t frame_overhead; /**< Framing overhead per packet > - * (measured in bytes) */ > + int32_t frame_overhead; > + /**< Framing overhead per packet (measured in bytes). > + * Can have negative value. */ > uint32_t n_subports_per_port; /**< Number of subports */ > uint32_t n_pipes_per_subport; /**< Number of pipes per subport > */ > uint16_t qsize[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE]; > -- > 2.11.0 >
Hi Alan, This patch is straightforward now, but it has build failures, do you plan to send a v3 to fix them? Essentially, you need to replace assert() calls from your code with RTE_ASSERT/RTE_VERIFY from rte_debug.h. Also, I don't see the point in having the assert in grinder_credits_check(), as this is purely a check on packet length, not credits. IMO we should have the assert in grinder_schedule() as the first instruction, before the call to grinder_credits_check(), as this is a sort of validating the inputs into the scheduling decision. Thanks, Cristian