Re: [lng-odp] ODP crash at buffer_alloc_multi() while inserting into iplookuptable
Can you please compile ODP with debug: ./configure --enable-debug --enable-debug-print --enable-helper-debug-print CFLAGS="-O0" Do you run on x86? It looks like prefix_insert_into_lx() a little bit buggy and there might be recursion forever. Ret is defined as uint8, has to be int. e->cidr does not use upper bit of uint8_t, so it's in range of 0 to 127, but range is not validated. Upper function does not test for error return. Also if you are saying that it worked on 1.16 then 'git bissect' can point to exact commit which broke it. The only commit which touched this file is: commit 5a4502fc6bc53e6503169da3028f456b64811a0b Author: Ilias Apalodimas Date: Tue Jan 16 21:09:35 2018 +0200 linux-gen: align: Fix alignment for typedef definitions * typedef struct { } ODP_ALIGN() test_t; is correct * typedef struct ODP_ALIGN() {} test_t; is correct and preferred from gcc standards * typedef struct {} test_t ODP_ALIGN() discards align Had segfauls on gcc-7 using that Signed-off-by: Ilias Apalodimas Reviewed-by: Bill Fischofer Signed-off-by: Maxim Uvarov Maxim. On 10 September 2018 at 20:01, gyanesh patra wrote: > We tried it as: > #define ENTRY_NUM_SUBTREE (1 << 12) > > But it didn't work. We couldn't increase it anymore without adding more > RAM to system. > One point to consider is that, this same thing was working with ODP 1.16 > code, but with ODP 1.19 version it is not working. > > P Gyanesh Kumar Patra > > > On Mon, Sep 10, 2018 at 12:31 PM Maxim Uvarov > wrote: > >> did you try to increase? >> >> /* The size of one L2\L3 subtree */ >> #define ENTRY_NUM_SUBTREE (1 << 8) >> ./helper/iplookuptable.c >> >> On 10 September 2018 at 18:27, gyanesh patra >> wrote: >> >>> We are using ODP library from an external application. hence i dont have >>> a simple test code to reproduce it. >>> But to give a perspective: >>> - the value size as 12 >>> - the ip prefix is 32 >>> The crash is happening around 159th entry. If the prefix is changed to >>> 16, the crash happens at around 496th entry. >>> >>> Regards, >>> P Gyanesh Kumar Patra >>> >>> >>> On Mon, Sep 10, 2018 at 12:16 PM Maxim Uvarov >>> wrote: >>> do you have some test code to reproduce it? On 10 September 2018 at 18:06, gyanesh patra wrote: > Hi, > ODP is crashing at buffer_alloc_multi() while inserting into > iplookuptable. > > The backtrace is as below: (gdb) bt #0 buffer_alloc_multi > (pool=0x7fffd5420c00, buf_hdr=buf_hdr@entry=0x7fff55fa8bb0, > max_num=max_num@entry=1) at odp_pool.c:700 #1 0x00433083 in > odp_buffer_alloc (pool_hdl=pool_hdl@entry=0x9) at odp_pool.c:861 #2 > 0x00703732 in cache_alloc_new_pool (type=CACHE_TYPE_TRIE, > tbl=) at iplookuptable.c:223 #3 cache_get_buffer > (type=CACHE_TYPE_TRIE, tbl=) at iplookuptable.c:248 #4 > trie_insert_node (nexthop=, cidr=, > ip=, root=, tbl=) at > iplookuptable.c:317 #5 odph_iplookup_table_put_value (tbl= out>, > key=, value=) at iplookuptable.c:686 > > Am i looking at any limitation to iplookuptable implementaion here? If > any > other details are needed, please let us know. > > Regards, > P Gyanesh Kumar Patra > >>
Re: [lng-odp] ODP crash at buffer_alloc_multi() while inserting into iplookuptable
do you have some test code to reproduce it? On 10 September 2018 at 18:06, gyanesh patra wrote: > Hi, > ODP is crashing at buffer_alloc_multi() while inserting into iplookuptable. > > The backtrace is as below: (gdb) bt #0 buffer_alloc_multi > (pool=0x7fffd5420c00, buf_hdr=buf_hdr@entry=0x7fff55fa8bb0, > max_num=max_num@entry=1) at odp_pool.c:700 #1 0x00433083 in > odp_buffer_alloc (pool_hdl=pool_hdl@entry=0x9) at odp_pool.c:861 #2 > 0x00703732 in cache_alloc_new_pool (type=CACHE_TYPE_TRIE, > tbl=) at iplookuptable.c:223 #3 cache_get_buffer > (type=CACHE_TYPE_TRIE, tbl=) at iplookuptable.c:248 #4 > trie_insert_node (nexthop=, cidr=, > ip=, root=, tbl=) at > iplookuptable.c:317 #5 odph_iplookup_table_put_value (tbl=, > key=, value=) at iplookuptable.c:686 > > Am i looking at any limitation to iplookuptable implementaion here? If any > other details are needed, please let us know. > > Regards, > P Gyanesh Kumar Patra >
[lng-odp] ODP crash at buffer_alloc_multi() while inserting into iplookuptable
Hi, ODP is crashing at buffer_alloc_multi() while inserting into iplookuptable. The backtrace is as below: (gdb) bt #0 buffer_alloc_multi (pool=0x7fffd5420c00, buf_hdr=buf_hdr@entry=0x7fff55fa8bb0, max_num=max_num@entry=1) at odp_pool.c:700 #1 0x00433083 in odp_buffer_alloc (pool_hdl=pool_hdl@entry=0x9) at odp_pool.c:861 #2 0x00703732 in cache_alloc_new_pool (type=CACHE_TYPE_TRIE, tbl=) at iplookuptable.c:223 #3 cache_get_buffer (type=CACHE_TYPE_TRIE, tbl=) at iplookuptable.c:248 #4 trie_insert_node (nexthop=, cidr=, ip=, root=, tbl=) at iplookuptable.c:317 #5 odph_iplookup_table_put_value (tbl=, key=, value=) at iplookuptable.c:686 Am i looking at any limitation to iplookuptable implementaion here? If any other details are needed, please let us know. Regards, P Gyanesh Kumar Patra
[lng-odp] [Linaro/odp] 464606: linux-gen: sysinfo: return 0 if hugepages are not ...
Branch: refs/heads/master Home: https://github.com/Linaro/odp Commit: 4646069f0417fc180977100af2bc1f527b2d4f28 https://github.com/Linaro/odp/commit/4646069f0417fc180977100af2bc1f527b2d4f28 Author: Dmitry Eremin-Solenikov Date: 2018-09-10 (Mon, 10 Sep 2018) Changed paths: M platform/linux-generic/odp_system_info.c Log Message: --- linux-gen: sysinfo: return 0 if hugepages are not supported Per API return 0 from odp_sys_huge_page_size_all() if hugepages are not supported/detected. Signed-off-by: Dmitry Eremin-Solenikov Reviewed-by: Bill Fischofer Signed-off-by: Maxim Uvarov Commit: 0c20689a6a78818b5cdb97cfa6c23fa7d866a761 https://github.com/Linaro/odp/commit/0c20689a6a78818b5cdb97cfa6c23fa7d866a761 Author: Dmitry Eremin-Solenikov Date: 2018-09-10 (Mon, 10 Sep 2018) Changed paths: M platform/linux-generic/arch/x86/odp_sysinfo_parse.c Log Message: --- linux-gen: x86: as a last resort parse max cpu freq from bogomips value Signed-off-by: Dmitry Eremin-Solenikov Reviewed-by: Bill Fischofer Signed-off-by: Maxim Uvarov Commit: 33fbc04b6373960ec3f84de4e7e7b34c49d71508 https://github.com/Linaro/odp/commit/33fbc04b6373960ec3f84de4e7e7b34c49d71508 Author: Dmitry Eremin-Solenikov Date: 2018-09-10 (Mon, 10 Sep 2018) Changed paths: M test/validation/api/system/system.c Log Message: --- validation: system: 0 is valid huge page size If system does not support huge pages, odp_sys_huge_page_size() will return 0, which should not be rejected by test. Signed-off-by: Dmitry Eremin-Solenikov Reviewed-by: Bill Fischofer Signed-off-by: Maxim Uvarov Compare: https://github.com/Linaro/odp/compare/6d48d7f7f684...33fbc04b6373 **NOTE:** This service has been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/ Functionality will be removed from GitHub.com on January 31st, 2019.
[lng-odp] [PATCH v2 1/1] linux-generic : fix wrong spelling
From: Seungha Son Signed-off-by: Seungha Son --- /** Email created from pull request 696 (linuxias:master) ** https://github.com/Linaro/odp/pull/696 ** Patch: https://github.com/Linaro/odp/pull/696.patch ** Base sha: 6d48d7f7f684b8aa87f7eb4f922d45be345ed771 ** Merge commit sha: cd15d0aa1e4e33600e609842df5d81a5304643f8 **/ platform/linux-generic/odp_ishm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/linux-generic/odp_ishm.c b/platform/linux-generic/odp_ishm.c index 59d1fe534..f0d8ef645 100644 --- a/platform/linux-generic/odp_ishm.c +++ b/platform/linux-generic/odp_ishm.c @@ -17,7 +17,7 @@ * Internal shared memory is mainly meant to be used internaly within ODP * (hence its name), but may also be allocated by odp applications and drivers, * in the future (through these interfaces). - * To guarrentee this full pointer shareability (when reserved with the + * To guarantee this full pointer shareability (when reserved with the * _ODP_ISHM_SINGLE_VA flag) internal shared memory is handled as follows: * At global_init time, a huge virtual address space reservation is performed. * Note that this is just reserving virtual space, not physical memory. @@ -84,7 +84,7 @@ * * 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 + * if some of the block owners never procsync() after free). This number * should take that into account) */ #define ISHM_MAX_NB_BLOCKS 128
[lng-odp] [PATCH v2 0/1] linux-generic : fix wrong spelling
Signed-off-by: Seungha Son linux...@gmail.com github /** Email created from pull request 696 (linuxias:master) ** https://github.com/Linaro/odp/pull/696 ** Patch: https://github.com/Linaro/odp/pull/696.patch ** Base sha: 6d48d7f7f684b8aa87f7eb4f922d45be345ed771 ** Merge commit sha: cd15d0aa1e4e33600e609842df5d81a5304643f8 **/ /github checkpatch.pl total: 0 errors, 0 warnings, 0 checks, 16 lines checked to_send-p-000.patch has no obvious style problems and is ready for submission. /checkpatch.pl
[lng-odp] [PATCH v4 1/2] linux-gen: ishm: implement huge page cache
From: Josep Puigdemont With this patch, ODP will pre-allocate several huge pages at init time. When memory is to be mapped into a huge page, one that was pre-allocated will be used, if available, this way ODP won't have to trap into the kernel to allocate huge pages. The idea with this implementation is to trick ishm into thinking that a file descriptor where to map the memory was provided, this way it it won't try to allocate one itself. This file descriptor is one of those previously allocated at init time. When the system is done with this file descriptor, instead of closing it, it is put back into the list of available huge pages, ready to be reused. A collateral effect of this patch is that memory is not zeroed out when it is reused. WARNING: This patch will not work when using process mode threads. For several reasons, this may not work when using ODP_ISHM_SINGLE_VA either, so when this flag is set, the list of pre-allocated files is not used. By default ODP will not reserve any huge pages, to tell ODP to do that, update the ODP configuration file with something like this: shm: { num_cached_hp = 32 } Example usage: $ echo odp.config odp_implementation = "linux-generic" config_file_version = "0.0.1" shm: { num_cached_hp = 32 } $ ODP_CONFIG_FILE=odp.conf ./test/validation/api/shmem/shmem_main This patch solves bug #3774: https://bugs.linaro.org/show_bug.cgi?id=3774 Signed-off-by: Josep Puigdemont --- /** Email created from pull request 685 (joseppc:fix/cache_huge_pages) ** https://github.com/Linaro/odp/pull/685 ** Patch: https://github.com/Linaro/odp/pull/685.patch ** Base sha: 6d48d7f7f684b8aa87f7eb4f922d45be345ed771 ** Merge commit sha: 71e95a3d2ddb0df6ba6f0e3a62bf6aa98afbb035 **/ config/odp-linux-generic.conf | 11 ++ platform/linux-generic/odp_ishm.c | 218 -- 2 files changed, 215 insertions(+), 14 deletions(-) diff --git a/config/odp-linux-generic.conf b/config/odp-linux-generic.conf index 85d5414ba..0dd2a6c13 100644 --- a/config/odp-linux-generic.conf +++ b/config/odp-linux-generic.conf @@ -18,6 +18,17 @@ odp_implementation = "linux-generic" config_file_version = "0.0.1" +# Internal shared memory allocator +shm: { + # ODP will try to reserve as many huge pages as the number indicated + # here, up to 64. A zero value means that no pages should be reserved. + # When using process mode threads, this value should be set to 0 + # because the current implementation won't work properly otherwise. + # These pages will only be freed when the application calls + # odp_term_global(). + num_cached_hp = 0 +} + # DPDK pktio options pktio_dpdk: { # Default options diff --git a/platform/linux-generic/odp_ishm.c b/platform/linux-generic/odp_ishm.c index 59d1fe534..aeda50bec 100644 --- a/platform/linux-generic/odp_ishm.c +++ b/platform/linux-generic/odp_ishm.c @@ -63,6 +63,7 @@ #include #include #include +#include #include #include #include @@ -164,7 +165,7 @@ typedef struct ishm_fragment { * will allocate both a block and a fragment. * Blocks contain only global data common to all processes. */ -typedef enum {UNKNOWN, HUGE, NORMAL, EXTERNAL} huge_flag_t; +typedef enum {UNKNOWN, HUGE, NORMAL, EXTERNAL, CACHED} huge_flag_t; typedef struct ishm_block { char name[ISHM_NAME_MAXLEN];/* name for the ishm block (if any) */ char filename[ISHM_FILENAME_MAXLEN]; /* name of the .../odp-* file */ @@ -238,6 +239,16 @@ typedef struct { } ishm_ftable_t; static ishm_ftable_t *ishm_ftbl; +#define HP_CACHE_SIZE 64 +struct huge_page_cache { + uint64_t len; + int total; /* amount of actually pre-allocated huge pages */ + int idx; /* retrieve fd[idx] to get a free file descriptor */ + int fd[HP_CACHE_SIZE]; /* list of file descriptors */ +}; + +static struct huge_page_cache hpc; + #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS MAP_ANON #endif @@ -245,6 +256,142 @@ static ishm_ftable_t *ishm_ftbl; /* prototypes: */ static void procsync(void); +static int hp_create_file(uint64_t len, const char *filename) +{ + int fd; + void *addr; + + if (len <= 0) { + ODP_ERR("Length is wrong\n"); + return -1; + } + + fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (fd < 0) { + ODP_ERR("Could not create cache file %s\n", filename); + return -1; + } + + /* remove file from file system */ + unlink(filename); + + if (ftruncate(fd, len) == -1) { + ODP_ERR("Could not truncate file: %s\n", strerror(errno)); + close(fd); + return -1; + } + + /* commit huge page */ + addr = _odp_ishmphy_map(fd, NULL, len, 0); + if (addr == NULL) { + /* no more pages available */ + close(fd); + return -
[lng-odp] [PATCH v4 2/2] linux-gen: ishm: make huge page cache size dynamic
From: Josep Puigdemont Signed-off-by: Josep Puigdemont --- /** Email created from pull request 685 (joseppc:fix/cache_huge_pages) ** https://github.com/Linaro/odp/pull/685 ** Patch: https://github.com/Linaro/odp/pull/685.patch ** Base sha: 6d48d7f7f684b8aa87f7eb4f922d45be345ed771 ** Merge commit sha: 71e95a3d2ddb0df6ba6f0e3a62bf6aa98afbb035 **/ config/odp-linux-generic.conf | 2 +- platform/linux-generic/odp_ishm.c | 73 +++ 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/config/odp-linux-generic.conf b/config/odp-linux-generic.conf index 0dd2a6c13..318af0ad7 100644 --- a/config/odp-linux-generic.conf +++ b/config/odp-linux-generic.conf @@ -21,7 +21,7 @@ config_file_version = "0.0.1" # Internal shared memory allocator shm: { # ODP will try to reserve as many huge pages as the number indicated - # here, up to 64. A zero value means that no pages should be reserved. + # here. A zero value means that no pages should be reserved. # When using process mode threads, this value should be set to 0 # because the current implementation won't work properly otherwise. # These pages will only be freed when the application calls diff --git a/platform/linux-generic/odp_ishm.c b/platform/linux-generic/odp_ishm.c index aeda50bec..11fbe8ef0 100644 --- a/platform/linux-generic/odp_ishm.c +++ b/platform/linux-generic/odp_ishm.c @@ -239,15 +239,15 @@ typedef struct { } ishm_ftable_t; static ishm_ftable_t *ishm_ftbl; -#define HP_CACHE_SIZE 64 struct huge_page_cache { uint64_t len; + int max_fds; /* maximum amount requested of pre-allocated huge pages */ int total; /* amount of actually pre-allocated huge pages */ int idx; /* retrieve fd[idx] to get a free file descriptor */ - int fd[HP_CACHE_SIZE]; /* list of file descriptors */ + int fd[];/* list of file descriptors */ }; -static struct huge_page_cache hpc; +static struct huge_page_cache *hpc; #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS MAP_ANON @@ -301,19 +301,14 @@ static void hp_init(void) char filename[ISHM_FILENAME_MAXLEN]; char dir[ISHM_FILENAME_MAXLEN]; int count; - - hpc.total = 0; - hpc.idx = -1; - hpc.len = odp_sys_huge_page_size(); + void *addr; if (!_odp_libconfig_lookup_ext_int("shm", NULL, "num_cached_hp", &count)) { return; } - if (count > HP_CACHE_SIZE) - count = HP_CACHE_SIZE; - else if (count <= 0) + if (count <= 0) return; ODP_DBG("Init HP cache with up to %d pages\n", count); @@ -339,55 +334,77 @@ static void hp_init(void) dir, odp_global_data.main_pid); + addr = mmap(NULL, + sizeof(struct huge_page_cache) + sizeof(int) * count, + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); + if (addr == MAP_FAILED) { + ODP_ERR("Unable to mmap memory for huge page cache\n."); + return; + } + + hpc = addr; + + hpc->max_fds = count; + hpc->total = 0; + hpc->idx = -1; + hpc->len = odp_sys_huge_page_size(); + for (int i = 0; i < count; ++i) { int fd; - fd = hp_create_file(hpc.len, filename); - if (fd == -1) + fd = hp_create_file(hpc->len, filename); + if (fd == -1) { + do { + hpc->fd[i++] = -1; + } while (i < count); break; - hpc.total++; - hpc.fd[i] = fd; + } + hpc->total++; + hpc->fd[i] = fd; } - hpc.idx = hpc.total - 1; + hpc->idx = hpc->total - 1; ODP_DBG("HP cache has %d huge pages of size 0x%08" PRIx64 "\n", - hpc.total, hpc.len); + hpc->total, hpc->len); } static void hp_term(void) { - for (int i = 0; i < hpc.total; i++) { - if (hpc.fd[i] != -1) - close(hpc.fd[i]); + if (NULL == hpc) + return; + + for (int i = 0; i < hpc->total; i++) { + if (hpc->fd[i] != -1) + close(hpc->fd[i]); } - hpc.total = 0; - hpc.idx = -1; - hpc.len = 0; + hpc->total = 0; + hpc->idx = -1; + hpc->len = 0; } static int hp_get_cached(uint64_t len) { int fd; - if (hpc.idx < 0 || len != hpc.len) + if (NULL == hpc || hpc->idx < 0 || len != hpc->len) return -1; - fd = hpc.fd[hpc.idx]; - hpc.fd[hpc.idx--] = -1; + fd = hpc->fd[hpc->idx]; + hpc->fd[hpc->idx--] = -1; return fd; } static int hp_put_cached(int fd) { - if (odp_unlikely(++hpc.idx >= hpc.total)
[lng-odp] [PATCH v4 0/2] linux-gen: ishm: implement huge page cache
With this patch, ODP will pre-allocate several huge pages at init time. When memory is to be mapped into a huge page, one that was pre-allocated will be used, if available, this way ODP won't have to trap into the kernel to allocate huge pages. The idea with this implementation is to trick ishm into thinking that a file descriptor where to map the memory was provided, this way it it won't try to allocate one itself. This file descriptor is one of those previously allocated at init time. When the system is done with this file descriptor, instead of closing it, it is put back into the list of available huge pages, ready to be reused. A collateral effect of this patch is that memory is not zeroed out when it is reused. WARNING: This patch will not work when using process mode threads. For several reasons, this may not work when using ODP_ISHM_SINGLE_VA either, so for this case the list of pre-allocated files is not used. This patch should mitigate, if not solve, bug #3774: https://bugs.linaro.org/show_bug.cgi?id=3774 To pre-allocate huge pages, define the environment variable ODP_HP_CACHE, and possibly set it to the number of huge pages that should be pre-allocated, setting it to -1 will reserve up to 32 huge pages, which is currently a hard-coded limit. example usage: ODP_HP_CACHE=-1 ./test/validation/api/shmem/shmem_main Signed-off-by: Josep Puigdemont josep.puigdem...@linaro.org github /** Email created from pull request 685 (joseppc:fix/cache_huge_pages) ** https://github.com/Linaro/odp/pull/685 ** Patch: https://github.com/Linaro/odp/pull/685.patch ** Base sha: 6d48d7f7f684b8aa87f7eb4f922d45be345ed771 ** Merge commit sha: 71e95a3d2ddb0df6ba6f0e3a62bf6aa98afbb035 **/ /github checkpatch.pl total: 0 errors, 0 warnings, 0 checks, 309 lines checked to_send-p-000.patch has no obvious style problems and is ready for submission. total: 0 errors, 0 warnings, 0 checks, 142 lines checked to_send-p-001.patch has no obvious style problems and is ready for submission. /checkpatch.pl
[lng-odp] [PATCH v1 0/1] linux-gen: ishm: don't initialize anonymous mappings
Anonymous mappings are automatically initalized to zero. >From the mmap manual: "MAP_ANONYMOUS: The mapping is not backed by any file; its contents are initialized to zero." Signed-off-by: Josep Puigdemont josep.puigdem...@linaro.org github /** Email created from pull request 695 (joseppc:fix/no-init-mmap-anonymous) ** https://github.com/Linaro/odp/pull/695 ** Patch: https://github.com/Linaro/odp/pull/695.patch ** Base sha: 6d48d7f7f684b8aa87f7eb4f922d45be345ed771 ** Merge commit sha: 2287a4ca0a06b738b59a5b1421d0a429df26 **/ /github checkpatch.pl total: 0 errors, 0 warnings, 0 checks, 14 lines checked to_send-p-000.patch has no obvious style problems and is ready for submission. /checkpatch.pl
[lng-odp] [PATCH v1 1/1] linux-gen: ishm: don't initialize anonymous mappings
From: Josep Puigdemont Anonymous mappings are automatically initalized to zero. >From the mmap manual: "MAP_ANONYMOUS: The mapping is not backed by any file; its contents are initialized to zero." Signed-off-by: Josep Puigdemont --- /** Email created from pull request 695 (joseppc:fix/no-init-mmap-anonymous) ** https://github.com/Linaro/odp/pull/695 ** Patch: https://github.com/Linaro/odp/pull/695.patch ** Base sha: 6d48d7f7f684b8aa87f7eb4f922d45be345ed771 ** Merge commit sha: 2287a4ca0a06b738b59a5b1421d0a429df26 **/ platform/linux-generic/odp_ishm.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/platform/linux-generic/odp_ishm.c b/platform/linux-generic/odp_ishm.c index 59d1fe534..07ce4d534 100644 --- a/platform/linux-generic/odp_ishm.c +++ b/platform/linux-generic/odp_ishm.c @@ -1508,7 +1508,6 @@ int _odp_ishm_init_global(const odp_init_t *init) goto init_glob_err1; } ishm_tbl = addr; - memset(ishm_tbl, 0, sizeof(ishm_table_t)); ishm_tbl->dev_seq = 0; ishm_tbl->odpthread_cnt = 0; odp_spinlock_init(&ishm_tbl->lock); @@ -1521,7 +1520,6 @@ int _odp_ishm_init_global(const odp_init_t *init) goto init_glob_err2; } ishm_ftbl = addr; - memset(ishm_ftbl, 0, sizeof(ishm_ftable_t)); /* *reserve the address space for _ODP_ISHM_SINGLE_VA reserved blocks,