From patchwork Tue May 19 15:27:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Morten_Br=C3=B8rup?= X-Patchwork-Id: 70448 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0CD21A0093; Tue, 19 May 2020 17:27:44 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B46CC1D6AA; Tue, 19 May 2020 17:27:38 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by dpdk.org (Postfix) with ESMTP id AB00F1D68E for ; Tue, 19 May 2020 17:27:36 +0200 (CEST) Received: from dkrd2.smartsharesys.local ([192.168.4.12]) by smartserver.smartsharesystems.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 19 May 2020 17:27:36 +0200 From: =?utf-8?q?Morten_Br=C3=B8rup?= To: olivier.matz@6wind.com, konstantin.ananyev@intel.com, Honnappa.Nagarahalli@arm.com, nd@arm.com Cc: dev@dpdk.org, =?utf-8?q?Morten_Br=C3=B8rup?= Date: Tue, 19 May 2020 15:27:24 +0000 Message-Id: <20200519152725.63486-2-mb@smartsharesystems.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200519152725.63486-1-mb@smartsharesystems.com> References: <20200513153111.37063-1-mb@smartsharesystems.com> <20200519152725.63486-1-mb@smartsharesystems.com> MIME-Version: 1.0 X-OriginalArrivalTime: 19 May 2020 15:27:36.0269 (UTC) FILETIME=[0628EFD0:01D62DF2] Subject: [dpdk-dev] [PATCH 1/2] ring: coding style cleanup X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Fix coding style violations that checkpatch will complain about. Add missing "int" after "unsigned". Add missing spaces around "+=" and "+". Remove superfluous type cast of numerical constant. Suggested-by: Konstantin Ananyev Signed-off-by: Morten Brørup Acked-by: Konstantin Ananyev --- lib/librte_ring/rte_ring.c | 4 ++-- lib/librte_ring/rte_ring.h | 42 ++++++++++++++++----------------- lib/librte_ring/rte_ring_elem.h | 10 ++++---- lib/librte_ring/rte_ring_hts.h | 8 +++---- lib/librte_ring/rte_ring_rts.h | 8 +++---- 5 files changed, 36 insertions(+), 36 deletions(-) diff --git a/lib/librte_ring/rte_ring.c b/lib/librte_ring/rte_ring.c index ebe5ccf0d..6e0ac5097 100644 --- a/lib/librte_ring/rte_ring.c +++ b/lib/librte_ring/rte_ring.c @@ -174,8 +174,8 @@ get_sync_type(uint32_t flags, enum rte_ring_sync_type *prod_st, } int -rte_ring_init(struct rte_ring *r, const char *name, unsigned count, - unsigned flags) +rte_ring_init(struct rte_ring *r, const char *name, unsigned int count, + unsigned int flags) { int ret; diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h index 86faede81..9078e7c24 100644 --- a/lib/librte_ring/rte_ring.h +++ b/lib/librte_ring/rte_ring.h @@ -55,7 +55,7 @@ extern "C" { * - The memory size needed for the ring on success. * - -EINVAL if count is not a power of 2. */ -ssize_t rte_ring_get_memsize(unsigned count); +ssize_t rte_ring_get_memsize(unsigned int count); /** * Initialize a ring structure. @@ -109,8 +109,8 @@ ssize_t rte_ring_get_memsize(unsigned count); * @return * 0 on success, or a negative value on error. */ -int rte_ring_init(struct rte_ring *r, const char *name, unsigned count, - unsigned flags); +int rte_ring_init(struct rte_ring *r, const char *name, unsigned int count, + unsigned int flags); /** * Create a new ring named *name* in memory. @@ -169,8 +169,8 @@ int rte_ring_init(struct rte_ring *r, const char *name, unsigned count, * - EEXIST - a memzone with the same name already exists * - ENOMEM - no appropriate memory area found in which to create memzone */ -struct rte_ring *rte_ring_create(const char *name, unsigned count, - int socket_id, unsigned flags); +struct rte_ring *rte_ring_create(const char *name, unsigned int count, + int socket_id, unsigned int flags); /** * De-allocate all memory used by the ring. @@ -199,11 +199,11 @@ void rte_ring_dump(FILE *f, const struct rte_ring *r); uint32_t idx = prod_head & (r)->mask; \ obj_type *ring = (obj_type *)ring_start; \ if (likely(idx + n < size)) { \ - for (i = 0; i < (n & ((~(unsigned)0x3))); i+=4, idx+=4) { \ + for (i = 0; i < (n & ~0x3); i += 4, idx += 4) { \ ring[idx] = obj_table[i]; \ - ring[idx+1] = obj_table[i+1]; \ - ring[idx+2] = obj_table[i+2]; \ - ring[idx+3] = obj_table[i+3]; \ + ring[idx + 1] = obj_table[i + 1]; \ + ring[idx + 2] = obj_table[i + 2]; \ + ring[idx + 3] = obj_table[i + 3]; \ } \ switch (n & 0x3) { \ case 3: \ @@ -230,11 +230,11 @@ void rte_ring_dump(FILE *f, const struct rte_ring *r); const uint32_t size = (r)->size; \ obj_type *ring = (obj_type *)ring_start; \ if (likely(idx + n < size)) { \ - for (i = 0; i < (n & (~(unsigned)0x3)); i+=4, idx+=4) {\ + for (i = 0; i < (n & ~0x3); i += 4, idx += 4) {\ obj_table[i] = ring[idx]; \ - obj_table[i+1] = ring[idx+1]; \ - obj_table[i+2] = ring[idx+2]; \ - obj_table[i+3] = ring[idx+3]; \ + obj_table[i + 1] = ring[idx + 1]; \ + obj_table[i + 2] = ring[idx + 2]; \ + obj_table[i + 3] = ring[idx + 3]; \ } \ switch (n & 0x3) { \ case 3: \ @@ -683,7 +683,7 @@ rte_ring_reset(struct rte_ring *r); * @return * The number of entries in the ring. */ -static inline unsigned +static inline unsigned int rte_ring_count(const struct rte_ring *r) { uint32_t prod_tail = r->prod.tail; @@ -700,7 +700,7 @@ rte_ring_count(const struct rte_ring *r) * @return * The number of free entries in the ring. */ -static inline unsigned +static inline unsigned int rte_ring_free_count(const struct rte_ring *r) { return r->capacity - rte_ring_count(r); @@ -860,7 +860,7 @@ struct rte_ring *rte_ring_lookup(const char *name); * @return * - n: Actual number of objects enqueued. */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mp_enqueue_burst(struct rte_ring *r, void * const *obj_table, unsigned int n, unsigned int *free_space) { @@ -883,7 +883,7 @@ rte_ring_mp_enqueue_burst(struct rte_ring *r, void * const *obj_table, * @return * - n: Actual number of objects enqueued. */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_sp_enqueue_burst(struct rte_ring *r, void * const *obj_table, unsigned int n, unsigned int *free_space) { @@ -910,7 +910,7 @@ rte_ring_sp_enqueue_burst(struct rte_ring *r, void * const *obj_table, * @return * - n: Actual number of objects enqueued. */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_enqueue_burst(struct rte_ring *r, void * const *obj_table, unsigned int n, unsigned int *free_space) { @@ -954,7 +954,7 @@ rte_ring_enqueue_burst(struct rte_ring *r, void * const *obj_table, * @return * - n: Actual number of objects dequeued, 0 if ring is empty */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mc_dequeue_burst(struct rte_ring *r, void **obj_table, unsigned int n, unsigned int *available) { @@ -979,7 +979,7 @@ rte_ring_mc_dequeue_burst(struct rte_ring *r, void **obj_table, * @return * - n: Actual number of objects dequeued, 0 if ring is empty */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_sc_dequeue_burst(struct rte_ring *r, void **obj_table, unsigned int n, unsigned int *available) { @@ -1006,7 +1006,7 @@ rte_ring_sc_dequeue_burst(struct rte_ring *r, void **obj_table, * @return * - Number of objects dequeued */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_dequeue_burst(struct rte_ring *r, void **obj_table, unsigned int n, unsigned int *available) { diff --git a/lib/librte_ring/rte_ring_elem.h b/lib/librte_ring/rte_ring_elem.h index a5a4c46f9..6b4643ef2 100644 --- a/lib/librte_ring/rte_ring_elem.h +++ b/lib/librte_ring/rte_ring_elem.h @@ -889,7 +889,7 @@ rte_ring_dequeue_elem(struct rte_ring *r, void *obj_p, unsigned int esize) * @return * - n: Actual number of objects enqueued. */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mp_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, unsigned int esize, unsigned int n, unsigned int *free_space) { @@ -918,7 +918,7 @@ rte_ring_mp_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, * @return * - n: Actual number of objects enqueued. */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_sp_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, unsigned int esize, unsigned int n, unsigned int *free_space) { @@ -949,7 +949,7 @@ rte_ring_sp_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, * @return * - n: Actual number of objects enqueued. */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, unsigned int esize, unsigned int n, unsigned int *free_space) { @@ -1001,7 +1001,7 @@ rte_ring_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, * @return * - n: Actual number of objects dequeued, 0 if ring is empty */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mc_dequeue_burst_elem(struct rte_ring *r, void *obj_table, unsigned int esize, unsigned int n, unsigned int *available) { @@ -1030,7 +1030,7 @@ rte_ring_mc_dequeue_burst_elem(struct rte_ring *r, void *obj_table, * @return * - n: Actual number of objects dequeued, 0 if ring is empty */ -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_sc_dequeue_burst_elem(struct rte_ring *r, void *obj_table, unsigned int esize, unsigned int n, unsigned int *available) { diff --git a/lib/librte_ring/rte_ring_hts.h b/lib/librte_ring/rte_ring_hts.h index c7701defc..359b15771 100644 --- a/lib/librte_ring/rte_ring_hts.h +++ b/lib/librte_ring/rte_ring_hts.h @@ -189,7 +189,7 @@ rte_ring_mc_hts_dequeue_bulk_elem(struct rte_ring *r, void *obj_table, * - n: Actual number of objects enqueued. */ __rte_experimental -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mp_hts_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, unsigned int esize, unsigned int n, unsigned int *free_space) { @@ -219,7 +219,7 @@ rte_ring_mp_hts_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, * - n: Actual number of objects dequeued, 0 if ring is empty */ __rte_experimental -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mc_hts_dequeue_burst_elem(struct rte_ring *r, void *obj_table, unsigned int esize, unsigned int n, unsigned int *available) { @@ -291,7 +291,7 @@ rte_ring_mc_hts_dequeue_bulk(struct rte_ring *r, void **obj_table, * - n: Actual number of objects enqueued. */ __rte_experimental -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mp_hts_enqueue_burst(struct rte_ring *r, void * const *obj_table, unsigned int n, unsigned int *free_space) { @@ -317,7 +317,7 @@ rte_ring_mp_hts_enqueue_burst(struct rte_ring *r, void * const *obj_table, * - n: Actual number of objects dequeued, 0 if ring is empty */ __rte_experimental -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mc_hts_dequeue_burst(struct rte_ring *r, void **obj_table, unsigned int n, unsigned int *available) { diff --git a/lib/librte_ring/rte_ring_rts.h b/lib/librte_ring/rte_ring_rts.h index d40e9994f..afc12abe2 100644 --- a/lib/librte_ring/rte_ring_rts.h +++ b/lib/librte_ring/rte_ring_rts.h @@ -216,7 +216,7 @@ rte_ring_mc_rts_dequeue_bulk_elem(struct rte_ring *r, void *obj_table, * - n: Actual number of objects enqueued. */ __rte_experimental -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mp_rts_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, unsigned int esize, unsigned int n, unsigned int *free_space) { @@ -246,7 +246,7 @@ rte_ring_mp_rts_enqueue_burst_elem(struct rte_ring *r, const void *obj_table, * - n: Actual number of objects dequeued, 0 if ring is empty */ __rte_experimental -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mc_rts_dequeue_burst_elem(struct rte_ring *r, void *obj_table, unsigned int esize, unsigned int n, unsigned int *available) { @@ -318,7 +318,7 @@ rte_ring_mc_rts_dequeue_bulk(struct rte_ring *r, void **obj_table, * - n: Actual number of objects enqueued. */ __rte_experimental -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mp_rts_enqueue_burst(struct rte_ring *r, void * const *obj_table, unsigned int n, unsigned int *free_space) { @@ -344,7 +344,7 @@ rte_ring_mp_rts_enqueue_burst(struct rte_ring *r, void * const *obj_table, * - n: Actual number of objects dequeued, 0 if ring is empty */ __rte_experimental -static __rte_always_inline unsigned +static __rte_always_inline unsigned int rte_ring_mc_rts_dequeue_burst(struct rte_ring *r, void **obj_table, unsigned int n, unsigned int *available) { From patchwork Tue May 19 15:27:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Morten_Br=C3=B8rup?= X-Patchwork-Id: 70449 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A66C4A0093; Tue, 19 May 2020 17:27:54 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 60CF71D6AF; Tue, 19 May 2020 17:27:41 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by dpdk.org (Postfix) with ESMTP id 72CE41D69E for ; Tue, 19 May 2020 17:27:38 +0200 (CEST) Received: from dkrd2.smartsharesys.local ([192.168.4.12]) by smartserver.smartsharesystems.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 19 May 2020 17:27:37 +0200 From: =?utf-8?q?Morten_Br=C3=B8rup?= To: olivier.matz@6wind.com, konstantin.ananyev@intel.com, Honnappa.Nagarahalli@arm.com, nd@arm.com Cc: dev@dpdk.org, =?utf-8?q?Morten_Br=C3=B8rup?= Date: Tue, 19 May 2020 15:27:25 +0000 Message-Id: <20200519152725.63486-3-mb@smartsharesystems.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200519152725.63486-1-mb@smartsharesystems.com> References: <20200513153111.37063-1-mb@smartsharesystems.com> <20200519152725.63486-1-mb@smartsharesystems.com> MIME-Version: 1.0 X-OriginalArrivalTime: 19 May 2020 15:27:37.0800 (UTC) FILETIME=[07128C80:01D62DF2] Subject: [dpdk-dev] [PATCH 2/2] ring: empty optimization X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Testing if the ring is empty is as simple as comparing the producer and consumer pointers. In theory, this optimization reduces the number of potential cache misses from 3 to 2 by not having to read r->mask in rte_ring_count(). The modification of this function were also discussed in the RFC here: https://mails.dpdk.org/archives/dev/2020-April/165752.html Signed-off-by: Morten Brørup Acked-by: Konstantin Ananyev --- lib/librte_ring/rte_ring.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h index 9078e7c24..f67141482 100644 --- a/lib/librte_ring/rte_ring.h +++ b/lib/librte_ring/rte_ring.h @@ -733,7 +733,9 @@ rte_ring_full(const struct rte_ring *r) static inline int rte_ring_empty(const struct rte_ring *r) { - return rte_ring_count(r) == 0; + uint32_t prod_tail = r->prod.tail; + uint32_t cons_tail = r->cons.tail; + return cons_tail == prod_tail; } /**