mem/linux: fix hugedir write deadlock
authorAnatoly Burakov <anatoly.burakov@intel.com>
Mon, 30 Apr 2018 10:38:19 +0000 (11:38 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 30 Apr 2018 13:23:17 +0000 (15:23 +0200)
commiteb8d29f825007605ace0d609233f68915ab2b79e
tree757081739bc00b170d25c602aa99e1c9130e0584
parentfcde84b5f85b3c1a5d5564299fd49c58ca20370d
mem/linux: fix hugedir write deadlock

At hugepage info initialization, EAL takes out a write lock on
hugetlbfs directories, and drops it after the memory init is
finished. However, in non-legacy mode, if "-m" or "--socket-mem"
switches are passed, this leads to a deadlock because EAL tries
to allocate pages (and thus take out a write lock on hugedir)
while still holding a separate hugedir write lock in EAL.

Fix it by checking if write lock in hugepage info is active, and
not trying to lock the directory if the hugedir fd is valid.

Fixes: 1a7dc2252f28 ("mem: revert to using flock and add per-segment lockfiles")

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Tested-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Tested-by: Shahaf Shuler <shahafs@mellanox.com>
Tested-by: Andrew Rybchenko <arybchenko@solarflare.com>
lib/librte_eal/linuxapp/eal/eal_memalloc.c