From: Kignelman OUATTARA <thiery.ouatt...@outscale.com> in last version (v18.02), we was using no-huge option to start 2 dpdk instances simultanusly (for testing purpose).
but since v18.05 when we start 2 instances: - the first dpdk app start normaly - the 2nd can't start because LOCK_EX option is set in flock(fd, LOCK_EX | LOCK_NB). So i did this patch to change LOCK_EX to LOCK_SH if no-huge option is set. Signed-off-by: Kignelman OUATTARA <thiery.ouatt...@outscale.com> --- lib/librte_eal/common/eal_common_fbarray.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/librte_eal/common/eal_common_fbarray.c b/lib/librte_eal/common/eal_common_fbarray.c index 019f84c..7a7b9af 100644 --- a/lib/librte_eal/common/eal_common_fbarray.c +++ b/lib/librte_eal/common/eal_common_fbarray.c @@ -414,6 +414,7 @@ struct used_mask { struct used_mask *msk; void *data = NULL; int fd = -1; + int lock_opt = LOCK_EX; if (arr == NULL) { rte_errno = EINVAL; @@ -436,6 +437,9 @@ struct used_mask { eal_get_fbarray_path(path, sizeof(path), name); + if (internal_config.no_hugetlbfs) + lock_opt = LOCK_SH; + /* * Each fbarray is unique to process namespace, i.e. the filename * depends on process prefix. Try to take out a lock and see if we @@ -447,7 +451,7 @@ struct used_mask { path, strerror(errno)); rte_errno = errno; goto fail; - } else if (flock(fd, LOCK_EX | LOCK_NB)) { + } else if (flock(fd, lock_opt | LOCK_NB)) { RTE_LOG(DEBUG, EAL, "%s(): couldn't lock %s: %s\n", __func__, path, strerror(errno)); rte_errno = EBUSY; -- 1.9.1