All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Singh, Jasvinder" <jasvinder.singh@intel.com>
To: "Dumitrescu, Cristian" <cristian.dumitrescu@intel.com>,
	"dev@dpdk.org" <dev@dpdk.org>
Cc: "Pattan, Reshma" <reshma.pattan@intel.com>
Subject: Re: [PATCH] mbuf: implement generic format for sched field
Date: Thu, 29 Nov 2018 10:42:42 +0000	[thread overview]
Message-ID: <54CBAA185211B4429112C315DA58FF6D33666245@IRSMSX103.ger.corp.intel.com> (raw)
In-Reply-To: <3EB4FA525960D640B5BDFFD6A3D891268E800A9E@IRSMSX108.ger.corp.intel.com>



<snip>
> 
> > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
> > index 3dbc6695e..98428bd21 100644
> > --- a/lib/librte_mbuf/rte_mbuf.h
> > +++ b/lib/librte_mbuf/rte_mbuf.h
> > @@ -575,12 +575,10 @@ struct rte_mbuf {
> >  				 */
> >  			} fdir;	/**< Filter identifier if FDIR enabled */
> >  			struct {
> > -				uint32_t lo;
> > -				uint32_t hi;
> > -				/**< The event eth Tx adapter uses this field
> > -				 * to store Tx queue id.
> > -				 * @see
> > rte_event_eth_tx_adapter_txq_set()
> > -				 */
> > +				uint32_t queue_id;   /**< Queue ID. */
> > +				uint8_t traffic_class;   /**< Traffic class ID. */
> 
> We should add comment here that traffic class 0 is the highest priority traffic
> class.

Will add the suggested comment.

> 
> > +				uint8_t color;   /**< Color. */
> 
> We should create a new file rte_color.h in a common place
> (librte_eal/common/include) to consolidate the color definition, which is
> currently replicated in too many places, such as: rte_meter.h, rte_mtr.h,
> rte_tm.h.
> 
> We should include the rte_color.h file here (and in the above header files)
> 
> We should also document the link between this field and the color enum type
> (@see ...).

Replacing the existing color definition with the above suggested one in rte_meter.h (librte_meter)
would be ABI break. We can do it separately through different patch.

> 
> > +				uint16_t reserved;   /**< Reserved. */
> >  			} sched;          /**< Hierarchical scheduler */
> >  			/**< User defined tags. See
> > rte_distributor_process() */
> >  			uint32_t usr;
> 
> We should also add trivial inline functions to read/write these mbuf fields as
> part of this header file. We want to discourage people from accessing these
> fields directly.
> 
> Besides the functions to read/write each field individually, we should also
> have a function to read all the sched fields in one operation, as well as another
> one to write all the sched fields in one operation.

Will create inline functions for reading and writing each field separately and jointly.  
> 
> > diff --git a/lib/librte_pipeline/rte_table_action.c
> > b/lib/librte_pipeline/rte_table_action.c
> > index 7c7c8dd82..99f2d779b 100644
> > --- a/lib/librte_pipeline/rte_table_action.c
> > +++ b/lib/librte_pipeline/rte_table_action.c
> > @@ -108,12 +108,12 @@ mtr_cfg_check(struct rte_table_action_mtr_config
> > *mtr)
> >  }
> >
> >  #define MBUF_SCHED_QUEUE_TC_COLOR(queue, tc, color)        \
> > -	((uint16_t)((((uint64_t)(queue)) & 0x3) |          \
> > -	((((uint64_t)(tc)) & 0x3) << 2) |                  \
> > -	((((uint64_t)(color)) & 0x3) << 4)))
> > +	((uint64_t)((((uint64_t)(queue)) & 0xffffffff) |          \
> > +	((((uint64_t)(tc)) & 0xff) << 32) |                  \
> > +	((((uint64_t)(color)) & 0xff) << 40)))
> >
> >  #define MBUF_SCHED_COLOR(sched, color)                     \
> > -	(((sched) & (~0x30LLU)) | ((color) << 4))
> > +	((uint64_t)((sched) & (~0xff000000LLU)) | (((uint64_t)(color)) <<
> > +40))
> >
> 
> Given the read/write mbuf->sched field functions, the above two macros are
> no longer needed.

Will remove this.

> >  struct mtr_trtcm_data {
> >  	struct rte_meter_trtcm trtcm;
> > @@ -176,7 +176,7 @@ mtr_data_size(struct rte_table_action_mtr_config
> > *mtr)
> >  struct dscp_table_entry_data {
> >  	enum rte_meter_color color;
> >  	uint16_t tc;
> > -	uint16_t queue_tc_color;
> > +	uint32_t queue;
> >  };
> >
> >  struct dscp_table_data {
> > @@ -368,7 +368,6 @@ tm_cfg_check(struct rte_table_action_tm_config
> > *tm)
> >  }
> >
> >  struct tm_data {
> > -	uint16_t queue_tc_color;
> >  	uint16_t subport;
> >  	uint32_t pipe;
> >  } __attribute__((__packed__));
> > @@ -397,26 +396,40 @@ tm_apply(struct tm_data *data,
> >  		return status;
> >
> >  	/* Apply */
> > -	data->queue_tc_color = 0;
> >  	data->subport = (uint16_t) p->subport_id;
> >  	data->pipe = p->pipe_id;
> >
> >  	return 0;
> >  }
> >
> > +static uint32_t
> > +tm_sched_qindex(struct tm_data *data,
> > +	struct dscp_table_entry_data *dscp,
> > +	struct rte_table_action_tm_config *cfg) {
> > +
> > +	uint32_t result;
> > +
> > +	result = data->subport * cfg->n_pipes_per_subport + data->pipe;
> 
> Since n_subports_per_pipe and n_pipes_per_subport are enforced to be
> power of 2, we should replace multiplication/division with shift left/right. We
> probably need to store log2 correspondents in the action context.

Thanks. Will store log2 component in action context and use them in run time for shift operations.

> > +	result = result * RTE_TABLE_ACTION_TC_MAX + dscp->tc;
> > +	result = result * RTE_TABLE_ACTION_TC_QUEUE_MAX + dscp-
> > >queue;
> > +
> > +	return result;
> > +}
> > +
> >  static __rte_always_inline void
> >  pkt_work_tm(struct rte_mbuf *mbuf,
> >  	struct tm_data *data,
> >  	struct dscp_table_data *dscp_table,
> > -	uint32_t dscp)
> > +	uint32_t dscp,
> > +	struct rte_table_action_tm_config *cfg)
> >  {
> >  	struct dscp_table_entry_data *dscp_entry = &dscp_table-
> > >entry[dscp];
> > -	struct tm_data *sched_ptr = (struct tm_data *) &mbuf->hash.sched;
> > -	struct tm_data sched;
> > +	uint64_t *sched_ptr = (uint64_t *) &mbuf->hash.sched;
> > +	uint32_t queue = tm_sched_qindex(data, dscp_entry, cfg);
> >
> > -	sched = *data;
> > -	sched.queue_tc_color = dscp_entry->queue_tc_color;
> > -	*sched_ptr = sched;
> > +	*sched_ptr = MBUF_SCHED_QUEUE_TC_COLOR(queue,
> > +			dscp_entry->tc,
> > +			dscp_entry->color);
> >  }
> >
> >  /**
> > @@ -2580,17 +2593,13 @@ rte_table_action_dscp_table_update(struct
> > rte_table_action *action,
> >  			&action->dscp_table.entry[i];
> >  		struct rte_table_action_dscp_table_entry *entry =
> >  			&table->entry[i];
> > -		uint16_t queue_tc_color =
> > -			MBUF_SCHED_QUEUE_TC_COLOR(entry-
> > >tc_queue_id,
> > -				entry->tc_id,
> > -				entry->color);
> >
> >  		if ((dscp_mask & (1LLU << i)) == 0)
> >  			continue;
> >
> >  		data->color = entry->color;
> >  		data->tc = entry->tc_id;
> > -		data->queue_tc_color = queue_tc_color;
> > +		data->queue = entry->tc_queue_id;
> >  	}
> >
> >  	return 0;
> > @@ -2882,7 +2891,8 @@ pkt_work(struct rte_mbuf *mbuf,
> >  		pkt_work_tm(mbuf,
> >  			data,
> >  			&action->dscp_table,
> > -			dscp);
> > +			dscp,
> > +			&cfg->tm);
> >  	}
> >
> >  	if (cfg->action_mask & (1LLU << RTE_TABLE_ACTION_DECAP)) { @@
> > -3108,22 +3118,26 @@ pkt4_work(struct rte_mbuf **mbufs,
> >  		pkt_work_tm(mbuf0,
> >  			data0,
> >  			&action->dscp_table,
> > -			dscp0);
> > +			dscp0,
> > +			&cfg->tm);
> >
> >  		pkt_work_tm(mbuf1,
> >  			data1,
> >  			&action->dscp_table,
> > -			dscp1);
> > +			dscp1,
> > +			&cfg->tm);
> >
> >  		pkt_work_tm(mbuf2,
> >  			data2,
> >  			&action->dscp_table,
> > -			dscp2);
> > +			dscp2,
> > +			&cfg->tm);
> >
> >  		pkt_work_tm(mbuf3,
> >  			data3,
> >  			&action->dscp_table,
> > -			dscp3);
> > +			dscp3,
> > +			&cfg->tm);
> >  	}
> >
> >  	if (cfg->action_mask & (1LLU << RTE_TABLE_ACTION_DECAP)) { diff
> > --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile index
> > 46c53ed71..644fd9d15 100644
> > --- a/lib/librte_sched/Makefile
> > +++ b/lib/librte_sched/Makefile
> > @@ -18,7 +18,7 @@ LDLIBS += -lrte_timer
> >
> >  EXPORT_MAP := rte_sched_version.map
> >
> > -LIBABIVER := 1
> > +LIBABIVER := 2
> >
> >  #
> >  # all source are stored in SRCS-y
> > diff --git a/lib/librte_sched/rte_sched.c
> > b/lib/librte_sched/rte_sched.c index 587d5e602..7bf4d6400 100644
> > --- a/lib/librte_sched/rte_sched.c
> > +++ b/lib/librte_sched/rte_sched.c
> > @@ -128,22 +128,6 @@ 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 {
> > -	uint16_t queue:2;                /**< Queue ID (0 .. 3) */
> > -	uint16_t traffic_class:2;        /**< Traffic class ID (0 .. 3)*/
> > -	uint32_t color:2;                /**< Color */
> > -	uint16_t unused:10;
> > -	uint16_t subport;                /**< Subport ID */
> > -	uint32_t pipe;		         /**< Pipe ID */
> > -};
> > -
> >  struct rte_sched_grinder {
> >  	/* Pipe cache */
> >  	uint16_t pcache_qmask[RTE_SCHED_GRINDER_PCACHE_SIZE];
> > @@ -241,16 +225,12 @@ enum rte_sched_port_array {
> >  	e_RTE_SCHED_PORT_ARRAY_TOTAL,
> >  };
> >
> > -#ifdef RTE_SCHED_COLLECT_STATS
> > -
> >  static inline uint32_t
> >  rte_sched_port_queues_per_subport(struct rte_sched_port *port)  {
> >  	return RTE_SCHED_QUEUES_PER_PIPE * port-
> > >n_pipes_per_subport;
> >  }
> >
> > -#endif
> > -
> >  static inline uint32_t
> >  rte_sched_port_queues_per_port(struct rte_sched_port *port)  { @@
> > -1006,44 +986,50 @@ rte_sched_port_pipe_profile_add(struct
> > rte_sched_port *port,
> >  	return 0;
> >  }
> >
> > +static inline uint32_t
> > +rte_sched_port_qindex(struct rte_sched_port *port,
> > +	uint32_t subport,
> > +	uint32_t pipe,
> > +	uint32_t traffic_class,
> > +	uint32_t queue)
> > +{
> > +	uint32_t result;
> > +
> > +	result = subport * port->n_pipes_per_subport + pipe;
> 
> Since n_subports_per_pipe and n_pipes_per_subport are enforced to be
> power of 2, we should replace multiplication/division with shift left/right.

Will replace with shift operation using log2 of n_subports_per_pipe and n_pipes_per_subport.


> > +	result = result * RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE +
> > traffic_class;
> > +	result = result * RTE_SCHED_QUEUES_PER_TRAFFIC_CLASS + queue;
> > +
> > +	return result;
> > +}
> > +
> >  void
> > -rte_sched_port_pkt_write(struct rte_mbuf *pkt,
> > +rte_sched_port_pkt_write(struct rte_sched_port *port,
> > +			 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;
> > -
> > -	RTE_BUILD_BUG_ON(sizeof(*sched) > sizeof(pkt->hash.sched));
> > -
> > -	sched->color = (uint32_t) color;
> > -	sched->subport = subport;
> > -	sched->pipe = pipe;
> > -	sched->traffic_class = traffic_class;
> > -	sched->queue = queue;
> > +	pkt->hash.sched.traffic_class = traffic_class;
> > +	pkt->hash.sched.queue_id = rte_sched_port_qindex(port, subport,
> > pipe,
> > +			traffic_class, queue);
> > +	pkt->hash.sched.color = (uint8_t) color;
> >  }
> >
> >  void
> > -rte_sched_port_pkt_read_tree_path(const struct rte_mbuf *pkt,
> > +rte_sched_port_pkt_read_tree_path(struct rte_sched_port *port,
> > +				  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;
> > +	*subport = pkt->hash.sched.queue_id /
> > rte_sched_port_queues_per_subport(port);
> > +	*pipe = pkt->hash.sched.queue_id /
> > RTE_SCHED_QUEUES_PER_PIPE;
> 
> Since n_subports_per_pipe and n_pipes_per_subport are enforced to be
> power of 2, we should replace multiplication/division with shift left/right.


Will do that.

> > +	*traffic_class = pkt->hash.sched.traffic_class;
> > +	*queue = pkt->hash.sched.queue_id %
> > RTE_SCHED_QUEUES_PER_TRAFFIC_CLASS;
> 
> Since RTE_SCHED_QUEUES_PER_TRAFFIC_CLASS is enforced to be a power of
> 2, please replace modulo with bitwise AND of
> (RTE_SCHED_QUEUES_PER_TRAFFIC_CLASS - 1).
> 
> >  }


Will do that.

> >  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;
> > +	return (enum rte_meter_color) pkt->hash.sched.color;
> >  }
> 
> Should use the mbuf->sched.color read function to be added in rte_mbuf.h.

Yes. Will change this.

> >  int
> > @@ -1100,18 +1086,6 @@ rte_sched_queue_read_stats(struct
> > rte_sched_port *port,
> >  	return 0;
> >  }
> >
> > -static inline uint32_t
> > -rte_sched_port_qindex(struct rte_sched_port *port, uint32_t subport,
> > uint32_t pipe, uint32_t traffic_class, uint32_t queue) -{
> > -	uint32_t result;
> > -
> > -	result = subport * port->n_pipes_per_subport + pipe;
> > -	result = result * RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE +
> > traffic_class;
> > -	result = result * RTE_SCHED_QUEUES_PER_TRAFFIC_CLASS + queue;
> > -
> > -	return result;
> > -
> 
> Since n_subports_per_pipe and n_pipes_per_subport are enforced to be
> power of 2, we should replace multiplication/division with shift left/right.

Will change this as well.


> }
> > -
> >  #ifdef RTE_SCHED_DEBUG
> >
> >  static inline int
> > @@ -1272,11 +1246,8 @@ rte_sched_port_enqueue_qptrs_prefetch0(struct
> > rte_sched_port *port,
> >  #ifdef RTE_SCHED_COLLECT_STATS
> >  	struct rte_sched_queue_extra *qe;
> >  #endif
> > -	uint32_t subport, pipe, traffic_class, queue, qindex;
> > -
> > -	rte_sched_port_pkt_read_tree_path(pkt, &subport, &pipe,
> > &traffic_class, &queue);
> > +	uint32_t qindex = pkt->hash.sched.queue_id;
> 
> Let's use the read function for this mbuf field.

Yes.

> >
> > -	qindex = rte_sched_port_qindex(port, subport, pipe, traffic_class,
> > queue);
> >  	q = port->queue + qindex;
> >  	rte_prefetch0(q);
> >  #ifdef RTE_SCHED_COLLECT_STATS
> > diff --git a/lib/librte_sched/rte_sched.h
> > b/lib/librte_sched/rte_sched.h index 84fa896de..4d9f869eb 100644
> > --- a/lib/librte_sched/rte_sched.h
> > +++ b/lib/librte_sched/rte_sched.h
> > @@ -355,6 +355,8 @@ rte_sched_queue_read_stats(struct rte_sched_port
> > *port,
> >   * Scheduler hierarchy path write to packet descriptor. Typically
> >   * called by the packet classification stage.
> >   *
> > + * @param port
> > + *   Handle to port scheduler instance
> >   * @param pkt
> >   *   Packet descriptor handle
> >   * @param subport
> > @@ -369,7 +371,8 @@ rte_sched_queue_read_stats(struct rte_sched_port
> > *port,
> >   *   Packet color set
> >   */
> >  void
> > -rte_sched_port_pkt_write(struct rte_mbuf *pkt,
> > +rte_sched_port_pkt_write(struct rte_sched_port *port,
> > +			 struct rte_mbuf *pkt,
> >  			 uint32_t subport, uint32_t pipe, uint32_t traffic_class,
> >  			 uint32_t queue, enum rte_meter_color color);
> >
> > @@ -379,6 +382,8 @@ rte_sched_port_pkt_write(struct rte_mbuf *pkt,
> >   * enqueue operation. The subport, pipe, traffic class and queue
> >   * parameters need to be pre-allocated by the caller.
> >   *
> > +  * @param port
> > + *   Handle to port scheduler instance
> >   * @param pkt
> >   *   Packet descriptor handle
> >   * @param subport
> > @@ -392,7 +397,8 @@ rte_sched_port_pkt_write(struct rte_mbuf *pkt,
> >   *
> >   */
> >  void
> > -rte_sched_port_pkt_read_tree_path(const struct rte_mbuf *pkt,
> > +rte_sched_port_pkt_read_tree_path(struct rte_sched_port *port,
> > +				  const struct rte_mbuf *pkt,
> >  				  uint32_t *subport, uint32_t *pipe,
> >  				  uint32_t *traffic_class, uint32_t *queue);
> >
> 
> <snip>
> 
> Regards,
> Cristian



We will work on the suggested changes and send another version. Thank you, Cristian.
 

  reply	other threads:[~2018-11-29 10:42 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-23 16:54 [PATCH] mbuf: implement generic format for sched field Jasvinder Singh
2018-11-26 11:37 ` Dumitrescu, Cristian
2018-11-29 10:42   ` Singh, Jasvinder [this message]
2018-12-04 17:39     ` Dumitrescu, Cristian
2018-12-05 12:22       ` Singh, Jasvinder
2018-12-01 14:22 ` Jerin Jacob
2018-12-05 11:15   ` Singh, Jasvinder
2018-12-10 17:49   ` Dumitrescu, Cristian
2018-12-07 14:31 ` [PATCH v2 1/3] " Reshma Pattan
2018-12-11 19:02   ` Dumitrescu, Cristian
2018-12-12 18:17   ` Dumitrescu, Cristian
2018-12-13  8:51   ` Rao, Nikhil
2018-12-13 18:08   ` [PATCH v3 1/2] eal: add new rte color definition Reshma Pattan
2018-12-13 18:08     ` [PATCH v3 2/2] mbuf: implement generic format for sched field Reshma Pattan
2018-12-14 22:52       ` Dumitrescu, Cristian
2018-12-20  8:32         ` Olivier Matz
2018-12-20 11:19           ` Dumitrescu, Cristian
2018-12-14 22:19     ` [PATCH v3 1/2] eal: add new rte color definition Dumitrescu, Cristian
2018-12-17 20:35     ` Thomas Monjalon
2018-12-18 15:40     ` [PATCH v4 1/2] meter: " Reshma Pattan
2018-12-18 15:40       ` [PATCH v4 2/2] mbuf: implement generic format for sched field Reshma Pattan
2018-12-19 15:34       ` [PATCH v5 1/2] meter: add new rte color definition Reshma Pattan
2018-12-19 15:34         ` [PATCH v5 2/2] mbuf: implement generic format for sched field Reshma Pattan
2018-12-19 15:42         ` [PATCH v6 1/2] meter: add new rte color definition Reshma Pattan
2018-12-19 15:42           ` [PATCH v6 2/2] mbuf: implement generic format for sched field Reshma Pattan
2018-12-19 18:14             ` Ananyev, Konstantin
2018-12-20  8:29             ` Olivier Matz
2018-12-20 11:28               ` Dumitrescu, Cristian
2018-12-20 12:41                 ` Olivier Matz
2018-12-20 12:16           ` [PATCH v7 1/2] meter: add new rte color definition Reshma Pattan
2018-12-20 12:16             ` [PATCH v7 2/2] mbuf: implement generic format for sched field Reshma Pattan
2018-12-20 12:43               ` Olivier Matz
2018-12-20 19:11                 ` Dumitrescu, Cristian
2018-12-20 14:55               ` Rao, Nikhil
2019-01-15 22:37               ` Stephen Hemminger
2019-01-16  9:19                 ` Pattan, Reshma
2019-01-16  9:33                   ` Dumitrescu, Cristian
2019-01-16 10:09                     ` Singh, Jasvinder
2019-01-15 23:11               ` Stephen Hemminger
2019-01-16  8:41                 ` Thomas Monjalon
2018-12-07 14:31 ` [PATCH v2 2/3] eal: add new rte color definition Reshma Pattan
2018-12-10 18:24   ` Dumitrescu, Cristian
2018-12-14 23:35   ` Ananyev, Konstantin
2018-12-15  0:16     ` Dumitrescu, Cristian
2018-12-17 11:21       ` Ananyev, Konstantin
2018-12-17 17:15         ` Pattan, Reshma
2018-12-17 18:51           ` Dumitrescu, Cristian
2018-12-17 23:11             ` Thomas Monjalon
2018-12-18 10:30               ` Dumitrescu, Cristian
2018-12-18 11:18               ` Dumitrescu, Cristian
2018-12-18 12:38                 ` Thomas Monjalon
2018-12-18 13:19                   ` Dumitrescu, Cristian
2018-12-18 13:39                     ` Thomas Monjalon
2018-12-18 17:07                       ` Ananyev, Konstantin
2018-12-18 19:34                         ` Dumitrescu, Cristian
2018-12-18 20:19                           ` Thomas Monjalon
2018-12-19 10:47                             ` Dumitrescu, Cristian
2018-12-19 10:50                               ` Thomas Monjalon
2018-12-19 10:52                             ` Ananyev, Konstantin
2018-12-19 10:49                           ` Ananyev, Konstantin
2018-12-19 11:04                             ` Dumitrescu, Cristian
2018-12-18 10:15             ` Ananyev, Konstantin
2018-12-18 10:25               ` Pattan, Reshma
2018-12-18 10:38                 ` Ananyev, Konstantin
2018-12-18 10:41                   ` Pattan, Reshma
2018-12-18 10:52                     ` Singh, Jasvinder
2018-12-18 12:10                       ` Ananyev, Konstantin
2018-12-15 14:15     ` Mattias Rönnblom
2018-12-17  7:27       ` Pattan, Reshma
2018-12-17  9:41       ` Dumitrescu, Cristian
2018-12-17 19:36         ` Mattias Rönnblom
2018-12-17 23:24           ` Ferruh Yigit
2018-12-07 14:31 ` [PATCH v2 3/3] doc: add deprecation notice to remove rte meter color Reshma Pattan
2018-12-11 14:58   ` Dumitrescu, Cristian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54CBAA185211B4429112C315DA58FF6D33666245@IRSMSX103.ger.corp.intel.com \
    --to=jasvinder.singh@intel.com \
    --cc=cristian.dumitrescu@intel.com \
    --cc=dev@dpdk.org \
    --cc=reshma.pattan@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.