This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, next has been updated
via 23e7745272bd405483da737824af25e2e18c8b21 (commit)
via 4be29b50a3de7fed08d427f0fab38ae61548d3e2 (commit)
from 26e0820a7bc833239a8a66bc15d2eab5fd3edb87 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 23e7745272bd405483da737824af25e2e18c8b21
Author: Bill Fischofer <bill.fischofer(a)linaro.org>
Date: Tue Jan 10 09:59:40 2017 -0600
linux-generic: pool: defer ring allocation until pool creation
To avoid excessive memory overhead for pools, defer the allocation of
the pool ring until odp_pool_create() is called. This keeps pool memory
overhead proportional to the number of pools actually in use rather
than the architected maximum number of pools.
This patch addresses Bug https://bugs.linaro.org/show_bug.cgi?id=2765
Signed-off-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Reviewed-by: Petri Savolainen <petri.savolainen(a)nokia.com>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/platform/linux-generic/include/odp_pool_internal.h b/platform/linux-generic/include/odp_pool_internal.h
index 5d7b817..4915bda 100644
--- a/platform/linux-generic/include/odp_pool_internal.h
+++ b/platform/linux-generic/include/odp_pool_internal.h
@@ -69,7 +69,8 @@ typedef struct pool_t {
pool_cache_t local_cache[ODP_THREAD_COUNT_MAX];
- pool_ring_t ring;
+ odp_shm_t ring_shm;
+ pool_ring_t *ring;
} pool_t;
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c
index cae2759..932efe3 100644
--- a/platform/linux-generic/odp_pool.c
+++ b/platform/linux-generic/odp_pool.c
@@ -143,7 +143,7 @@ static void flush_cache(pool_cache_t *cache, pool_t *pool)
uint32_t mask;
uint32_t cache_num, i, data;
- ring = &pool->ring.hdr;
+ ring = &pool->ring->hdr;
mask = pool->ring_mask;
cache_num = cache->num;
@@ -172,6 +172,7 @@ static pool_t *reserve_pool(void)
{
int i;
pool_t *pool;
+ char ring_name[ODP_POOL_NAME_LEN];
for (i = 0; i < ODP_CONFIG_POOLS; i++) {
pool = pool_entry(i);
@@ -180,6 +181,19 @@ static pool_t *reserve_pool(void)
if (pool->reserved == 0) {
pool->reserved = 1;
UNLOCK(&pool->lock);
+ sprintf(ring_name, "pool_ring_%d", i);
+ pool->ring_shm =
+ odp_shm_reserve(ring_name,
+ sizeof(pool_ring_t),
+ ODP_CACHE_LINE_SIZE, 0);
+ if (odp_unlikely(pool->ring_shm == ODP_SHM_INVALID)) {
+ ODP_ERR("Unable to alloc pool ring %d\n", i);
+ LOCK(&pool->lock);
+ pool->reserved = 0;
+ UNLOCK(&pool->lock);
+ break;
+ }
+ pool->ring = odp_shm_addr(pool->ring_shm);
return pool;
}
UNLOCK(&pool->lock);
@@ -214,7 +228,7 @@ static void init_buffers(pool_t *pool)
int type;
uint32_t seg_size;
- ring = &pool->ring.hdr;
+ ring = &pool->ring->hdr;
mask = pool->ring_mask;
type = pool->params.type;
@@ -411,7 +425,7 @@ static odp_pool_t pool_create(const char *name, odp_pool_param_t *params,
pool->uarea_base_addr = odp_shm_addr(pool->uarea_shm);
}
- ring_init(&pool->ring.hdr);
+ ring_init(&pool->ring->hdr);
init_buffers(pool);
return pool->pool_hdl;
@@ -536,6 +550,8 @@ int odp_pool_destroy(odp_pool_t pool_hdl)
odp_shm_free(pool->uarea_shm);
pool->reserved = 0;
+ odp_shm_free(pool->ring_shm);
+ pool->ring = NULL;
UNLOCK(&pool->lock);
return 0;
@@ -592,8 +608,6 @@ int buffer_alloc_multi(pool_t *pool, odp_buffer_t buf[],
pool_cache_t *cache;
uint32_t cache_num, num_ch, num_deq, burst;
- ring = &pool->ring.hdr;
- mask = pool->ring_mask;
cache = local.cache[pool->pool_idx];
cache_num = cache->num;
@@ -620,6 +634,8 @@ int buffer_alloc_multi(pool_t *pool, odp_buffer_t buf[],
* and not uint32_t. */
uint32_t data[burst];
+ ring = &pool->ring->hdr;
+ mask = pool->ring_mask;
burst = ring_deq_multi(ring, mask, data, burst);
cache_num = burst - num_deq;
@@ -671,12 +687,12 @@ static inline void buffer_free_to_pool(uint32_t pool_id,
cache = local.cache[pool_id];
pool = pool_entry(pool_id);
- ring = &pool->ring.hdr;
- mask = pool->ring_mask;
/* Special case of a very large free. Move directly to
* the global pool. */
if (odp_unlikely(num > CONFIG_POOL_CACHE_SIZE)) {
+ ring = &pool->ring->hdr;
+ mask = pool->ring_mask;
for (i = 0; i < num; i++)
ring_enq(ring, mask, (uint32_t)(uintptr_t)buf[i]);
@@ -691,6 +707,9 @@ static inline void buffer_free_to_pool(uint32_t pool_id,
uint32_t index;
int burst = CACHE_BURST;
+ ring = &pool->ring->hdr;
+ mask = pool->ring_mask;
+
if (odp_unlikely(num > CACHE_BURST))
burst = num;
commit 4be29b50a3de7fed08d427f0fab38ae61548d3e2
Author: Christophe Milard <christophe.milard(a)linaro.org>
Date: Wed Dec 21 13:55:56 2016 +0100
linux-gen: _ishm: fixing typos
Fixing a set of iritating typos. just in comments.
Signed-off-by: Christophe Milard <christophe.milard(a)linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/platform/linux-generic/_ishm.c b/platform/linux-generic/_ishm.c
index 8b54be2..f889834 100644
--- a/platform/linux-generic/_ishm.c
+++ b/platform/linux-generic/_ishm.c
@@ -75,7 +75,7 @@
/*
* Maximum number of internal shared memory blocks.
*
- * This the the number of separate ISHM areas that can be reserved concurrently
+ * This is the number of separate ISHM areas that can be reserved concurrently
* (Note that freeing such blocks may take time, or possibly never happen
* if some of the block ownwers never procsync() after free). This number
* should take that into account)
@@ -240,7 +240,7 @@ static void procsync(void);
* Take a piece of the preallocated virtual space to fit "size" bytes.
* (best fit). Size must be rounded up to an integer number of pages size.
* Possibly split the fragment to keep track of remaining space.
- * Returns the allocated fragment (best_fragmnt) and the corresponding address.
+ * Returns the allocated fragment (best_fragment) and the corresponding address.
* External caller must ensure mutex before the call!
*/
static void *alloc_fragment(uintptr_t size, int block_index, intptr_t align,
@@ -286,11 +286,11 @@ static void *alloc_fragment(uintptr_t size, int block_index, intptr_t align,
/*
* if there is room between previous fragment and new one, (due to
- * alignement requirement) then fragment (split) the space between
+ * alignment requirement) then fragment (split) the space between
* the end of the previous fragment and the beginning of the new one:
*/
if (border - (uintptr_t)(*best_fragmnt)->start > 0) {
- /* frangment space, i.e. take a new fragment descriptor... */
+ /* fragment space, i.e. take a new fragment descriptor... */
rem_fragmnt = ishm_ftbl->unused_fragmnts;
if (!rem_fragmnt) {
ODP_ERR("unable to get shmem fragment descriptor!\n.");
@@ -320,7 +320,7 @@ static void *alloc_fragment(uintptr_t size, int block_index, intptr_t align,
if (remainder == 0)
return (*best_fragmnt)->start;
- /* otherwise, frangment space, i.e. take a new fragment descriptor... */
+ /* otherwise, fragment space, i.e. take a new fragment descriptor... */
rem_fragmnt = ishm_ftbl->unused_fragmnts;
if (!rem_fragmnt) {
ODP_ERR("unable to get shmem fragment descriptor!\n.");
@@ -515,7 +515,7 @@ static void delete_file(ishm_block_t *block)
* performs the mapping, possibly allocating a fragment of the pre-reserved
* VA space if the _ODP_ISHM_SINGLE_VA flag was given.
* Sets fd, and returns the mapping address.
- * This funstion will also set the _ODP_ISHM_SINGLE_VA flag if the alignment
+ * This function will also set the _ODP_ISHM_SINGLE_VA flag if the alignment
* requires it
* Mutex must be assured by the caller.
*/
@@ -736,7 +736,7 @@ static void procsync(void)
last = ishm_proctable->nb_entries;
while (i < last) {
- /* if the procecess sequence number doesn't match the main
+ /* if the process sequence number doesn't match the main
* table seq number, this entry is obsolete
*/
block = &ishm_tbl->block[ishm_proctable->entry[i].block_index];
@@ -1065,7 +1065,7 @@ static int block_free(int block_index)
}
/*
- * Free and unmap internal shared memory, intentified by its block number:
+ * Free and unmap internal shared memory, identified by its block number:
* return -1 on error. 0 if OK.
*/
int _odp_ishm_free_by_index(int block_index)
@@ -1081,7 +1081,7 @@ int _odp_ishm_free_by_index(int block_index)
}
/*
- * free and unmap internal shared memory, intentified by its block name:
+ * free and unmap internal shared memory, identified by its block name:
* return -1 on error. 0 if OK.
*/
int _odp_ishm_free_by_name(const char *name)
@@ -1492,8 +1492,8 @@ static int do_odp_ishm_term_local(void)
* Go through the table of visible blocks for this process,
* decreasing the refcnt of each visible blocks, and issuing
* warning for those no longer referenced by any process.
- * Note that non-referenced blocks are nor freeed: this is
- * deliberate as this would imply that the sementic of the
+ * Note that non-referenced blocks are not freed: this is
+ * deliberate as this would imply that the semantic of the
* freeing function would differ depending on whether we run
* with odp_thread as processes or pthreads. With this approach,
* the user should always free the blocks manually, which is
@@ -1699,7 +1699,7 @@ int _odp_ishm_status(const char *title)
fragmnt; fragmnt = fragmnt->next)
nb_unused_frgments++;
- ODP_DBG("ishm: %d fragment used. %d fragements unused. (total=%d)\n",
+ ODP_DBG("ishm: %d fragment used. %d fragments unused. (total=%d)\n",
nb_used_frgments, nb_unused_frgments,
nb_used_frgments + nb_unused_frgments);
-----------------------------------------------------------------------
Summary of changes:
platform/linux-generic/_ishm.c | 24 ++++++++--------
platform/linux-generic/include/odp_pool_internal.h | 3 +-
platform/linux-generic/odp_pool.c | 33 +++++++++++++++++-----
3 files changed, 40 insertions(+), 20 deletions(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, api-next has been updated
via ed3cfdeed1a99f024be2538aac31b71c8eddcf07 (commit)
from 29b05df013426838fe166084fed9f1d56c59ebed (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit ed3cfdeed1a99f024be2538aac31b71c8eddcf07
Author: Bill Fischofer <bill.fischofer(a)linaro.org>
Date: Tue Jan 10 09:59:40 2017 -0600
linux-generic: pool: defer ring allocation until pool creation
To avoid excessive memory overhead for pools, defer the allocation of
the pool ring until odp_pool_create() is called. This keeps pool memory
overhead proportional to the number of pools actually in use rather
than the architected maximum number of pools.
This patch addresses Bug https://bugs.linaro.org/show_bug.cgi?id=2765
Signed-off-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Reviewed-by: Petri Savolainen <petri.savolainen(a)nokia.com>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/platform/linux-generic/include/odp_pool_internal.h b/platform/linux-generic/include/odp_pool_internal.h
index 5d7b817..4915bda 100644
--- a/platform/linux-generic/include/odp_pool_internal.h
+++ b/platform/linux-generic/include/odp_pool_internal.h
@@ -69,7 +69,8 @@ typedef struct pool_t {
pool_cache_t local_cache[ODP_THREAD_COUNT_MAX];
- pool_ring_t ring;
+ odp_shm_t ring_shm;
+ pool_ring_t *ring;
} pool_t;
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c
index cae2759..932efe3 100644
--- a/platform/linux-generic/odp_pool.c
+++ b/platform/linux-generic/odp_pool.c
@@ -143,7 +143,7 @@ static void flush_cache(pool_cache_t *cache, pool_t *pool)
uint32_t mask;
uint32_t cache_num, i, data;
- ring = &pool->ring.hdr;
+ ring = &pool->ring->hdr;
mask = pool->ring_mask;
cache_num = cache->num;
@@ -172,6 +172,7 @@ static pool_t *reserve_pool(void)
{
int i;
pool_t *pool;
+ char ring_name[ODP_POOL_NAME_LEN];
for (i = 0; i < ODP_CONFIG_POOLS; i++) {
pool = pool_entry(i);
@@ -180,6 +181,19 @@ static pool_t *reserve_pool(void)
if (pool->reserved == 0) {
pool->reserved = 1;
UNLOCK(&pool->lock);
+ sprintf(ring_name, "pool_ring_%d", i);
+ pool->ring_shm =
+ odp_shm_reserve(ring_name,
+ sizeof(pool_ring_t),
+ ODP_CACHE_LINE_SIZE, 0);
+ if (odp_unlikely(pool->ring_shm == ODP_SHM_INVALID)) {
+ ODP_ERR("Unable to alloc pool ring %d\n", i);
+ LOCK(&pool->lock);
+ pool->reserved = 0;
+ UNLOCK(&pool->lock);
+ break;
+ }
+ pool->ring = odp_shm_addr(pool->ring_shm);
return pool;
}
UNLOCK(&pool->lock);
@@ -214,7 +228,7 @@ static void init_buffers(pool_t *pool)
int type;
uint32_t seg_size;
- ring = &pool->ring.hdr;
+ ring = &pool->ring->hdr;
mask = pool->ring_mask;
type = pool->params.type;
@@ -411,7 +425,7 @@ static odp_pool_t pool_create(const char *name, odp_pool_param_t *params,
pool->uarea_base_addr = odp_shm_addr(pool->uarea_shm);
}
- ring_init(&pool->ring.hdr);
+ ring_init(&pool->ring->hdr);
init_buffers(pool);
return pool->pool_hdl;
@@ -536,6 +550,8 @@ int odp_pool_destroy(odp_pool_t pool_hdl)
odp_shm_free(pool->uarea_shm);
pool->reserved = 0;
+ odp_shm_free(pool->ring_shm);
+ pool->ring = NULL;
UNLOCK(&pool->lock);
return 0;
@@ -592,8 +608,6 @@ int buffer_alloc_multi(pool_t *pool, odp_buffer_t buf[],
pool_cache_t *cache;
uint32_t cache_num, num_ch, num_deq, burst;
- ring = &pool->ring.hdr;
- mask = pool->ring_mask;
cache = local.cache[pool->pool_idx];
cache_num = cache->num;
@@ -620,6 +634,8 @@ int buffer_alloc_multi(pool_t *pool, odp_buffer_t buf[],
* and not uint32_t. */
uint32_t data[burst];
+ ring = &pool->ring->hdr;
+ mask = pool->ring_mask;
burst = ring_deq_multi(ring, mask, data, burst);
cache_num = burst - num_deq;
@@ -671,12 +687,12 @@ static inline void buffer_free_to_pool(uint32_t pool_id,
cache = local.cache[pool_id];
pool = pool_entry(pool_id);
- ring = &pool->ring.hdr;
- mask = pool->ring_mask;
/* Special case of a very large free. Move directly to
* the global pool. */
if (odp_unlikely(num > CONFIG_POOL_CACHE_SIZE)) {
+ ring = &pool->ring->hdr;
+ mask = pool->ring_mask;
for (i = 0; i < num; i++)
ring_enq(ring, mask, (uint32_t)(uintptr_t)buf[i]);
@@ -691,6 +707,9 @@ static inline void buffer_free_to_pool(uint32_t pool_id,
uint32_t index;
int burst = CACHE_BURST;
+ ring = &pool->ring->hdr;
+ mask = pool->ring_mask;
+
if (odp_unlikely(num > CACHE_BURST))
burst = num;
-----------------------------------------------------------------------
Summary of changes:
platform/linux-generic/include/odp_pool_internal.h | 3 +-
platform/linux-generic/odp_pool.c | 33 +++++++++++++++++-----
2 files changed, 28 insertions(+), 8 deletions(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via 5ffbdadc12513adb3e8847692d51963cab223084 (commit)
from c709c9f1f235551c27f8db14f7c947f334b10d98 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 5ffbdadc12513adb3e8847692d51963cab223084
Author: Bill Fischofer <bill.fischofer(a)linaro.org>
Date: Thu Dec 22 06:43:44 2016 -0600
test: perf: add assert since src_idx cannot be negative
Address Bug https://bugs.linaro.org/show_bug.cgi?id=2790 by adding an
assert. odp_packet_input_index() only returns a negative value if the
packet did not originate on an I/O interface, which is known to be false
here.
Signed-off-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Reviewed-by: Balasubramanian Manoharan <bala.manoharan(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/test/common_plat/performance/odp_l2fwd.c b/test/common_plat/performance/odp_l2fwd.c
index 8dc4dbe..82c3a25 100644
--- a/test/common_plat/performance/odp_l2fwd.c
+++ b/test/common_plat/performance/odp_l2fwd.c
@@ -20,6 +20,7 @@
#include <unistd.h>
#include <errno.h>
#include <inttypes.h>
+#include <assert.h>
#include <test_debug.h>
@@ -353,6 +354,7 @@ static int run_worker_sched_mode(void *arg)
/* packets from the same queue are from the same interface */
src_idx = odp_packet_input_index(pkt_tbl[0]);
+ assert(src_idx >= 0);
dst_idx = gbl_args->dst_port_from_idx[src_idx];
fill_eth_addrs(pkt_tbl, pkts, dst_idx);
-----------------------------------------------------------------------
Summary of changes:
test/common_plat/performance/odp_l2fwd.c | 2 ++
1 file changed, 2 insertions(+)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via c709c9f1f235551c27f8db14f7c947f334b10d98 (commit)
via 5d2595d1b470497c7fa04fe698f79a5f0346e5b8 (commit)
via ad6219e3682d94fb8971261936ace46399ed2085 (commit)
from 47b343a8f508b1dad511a1498999caa876c12eb5 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit c709c9f1f235551c27f8db14f7c947f334b10d98
Author: Maxim Uvarov <maxim.uvarov(a)linaro.org>
Date: Fri Dec 23 22:23:20 2016 +0300
scripts/build-pktio-dpdk: do not download full dpdk git
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
Reviewed-by: Mike Holmes <mike.holmes(a)linaro.org>
diff --git a/scripts/build-pktio-dpdk b/scripts/build-pktio-dpdk
index 280f518..36727dd 100755
--- a/scripts/build-pktio-dpdk
+++ b/scripts/build-pktio-dpdk
@@ -10,9 +10,9 @@ if [ "$?" != "0" ]; then
echo "Error: pcap is not installed. You may need to install libpcap-dev"
fi
-git clone http://dpdk.org/git/dpdk dpdk
+git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v16.07 http://dpdk.org/git/dpdk dpdk
pushd dpdk
-git checkout -b bv16.07 v16.07
+git log --oneline --decorate
#Make and edit DPDK configuration
make config T=${TARGET} O=${TARGET}
commit 5d2595d1b470497c7fa04fe698f79a5f0346e5b8
Author: Maxim Uvarov <maxim.uvarov(a)linaro.org>
Date: Fri Dec 23 22:23:19 2016 +0300
travis: accelerate dpdk cloning
No need to download full history of dpdk for CI runs.
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
Reviewed-by: Mike Holmes <mike.holmes(a)linaro.org>
diff --git a/.travis.yml b/.travis.yml
index 0bab50e..03e61b1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -36,9 +36,9 @@ before_install:
- export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
# DPDK pktio
- TARGET=${TARGET:-"x86_64-native-linuxapp-gcc"}
- - git clone http://dpdk.org/git/dpdk dpdk
+ - git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v16.07 http://dpdk.org/git/dpdk dpdk
- pushd dpdk
- - git checkout -b bv16.07 v16.07
+ - git log --oneline --decorate
- make config T=${TARGET} O=${TARGET}
- pushd ${TARGET}
- sed -ri 's,(CONFIG_RTE_LIBRTE_PMD_PCAP=).*,\1y,' .config
commit ad6219e3682d94fb8971261936ace46399ed2085
Author: Maxim Uvarov <maxim.uvarov(a)linaro.org>
Date: Fri Dec 23 22:23:18 2016 +0300
travis: do not print dpdk build log
print only stderr on building dpdk to have log more
readable for odp things.
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
Reviewed-by: Mike Holmes <mike.holmes(a)linaro.org>
diff --git a/.travis.yml b/.travis.yml
index adf3307..0bab50e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -43,7 +43,7 @@ before_install:
- pushd ${TARGET}
- sed -ri 's,(CONFIG_RTE_LIBRTE_PMD_PCAP=).*,\1y,' .config
- popd
- - make install T=${TARGET} EXTRA_CFLAGS="-fPIC"
+ - make install T=${TARGET} EXTRA_CFLAGS="-fPIC" > /dev/null
- popd
script:
-----------------------------------------------------------------------
Summary of changes:
.travis.yml | 6 +++---
scripts/build-pktio-dpdk | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via b18dc645a68fd0ae50f1a361aa408b3e74e46c0d (commit)
from 29dde30264da8106d64328b0d81eb19dad0065ac (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b18dc645a68fd0ae50f1a361aa408b3e74e46c0d
Author: Joe Savage <joe.savage(a)arm.com>
Date: Wed Jan 4 14:52:35 2017 +0000
helper: fix odph_ipv4_csum functions for L3 offset 0
Fix a bug where odph_ipv4_csum_{valid, update} would interpret an L3
offset of zero as a sign that the packet has no L3 offset.
Signed-off-by: Joe Savage <joe.savage(a)arm.com>
Reviewed-and-tested-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/helper/include/odp/helper/ip.h b/helper/include/odp/helper/ip.h
index 4cfc00f..ba6e675 100644
--- a/helper/include/odp/helper/ip.h
+++ b/helper/include/odp/helper/ip.h
@@ -101,17 +101,18 @@ ODP_STATIC_ASSERT(sizeof(odph_ipv4hdr_t) == ODPH_IPV4HDR_LEN,
*/
static inline int odph_ipv4_csum_valid(odp_packet_t pkt)
{
+ uint32_t offset;
odp_u16be_t res = 0;
uint16_t *w;
int nleft = sizeof(odph_ipv4hdr_t);
odph_ipv4hdr_t ip;
odp_u16be_t chksum;
- if (!odp_packet_l3_offset(pkt))
+ offset = odp_packet_l3_offset(pkt);
+ if (offset == ODP_PACKET_OFFSET_INVALID)
return 0;
- odp_packet_copy_to_mem(pkt, odp_packet_l3_offset(pkt),
- sizeof(odph_ipv4hdr_t), &ip);
+ odp_packet_copy_to_mem(pkt, offset, sizeof(odph_ipv4hdr_t), &ip);
w = (uint16_t *)(void *)&ip;
chksum = ip.chksum;
@@ -137,10 +138,10 @@ static inline odp_u16sum_t odph_ipv4_csum_update(odp_packet_t pkt)
odph_ipv4hdr_t *ip;
int nleft = sizeof(odph_ipv4hdr_t);
- if (!odp_packet_l3_offset(pkt))
+ ip = (odph_ipv4hdr_t *)odp_packet_l3_ptr(pkt, NULL);
+ if (ip == NULL)
return 0;
- ip = (odph_ipv4hdr_t *)odp_packet_l3_ptr(pkt, NULL);
w = (uint16_t *)(void *)ip;
ip->chksum = odph_chksum(w, nleft);
return ip->chksum;
-----------------------------------------------------------------------
Summary of changes:
helper/include/odp/helper/ip.h | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
hooks/post-receive
--