eal: fix race condition in multi-process startup
authorHarry van Haaren <harry.van.haaren@intel.com>
Wed, 9 Mar 2016 13:37:24 +0000 (13:37 +0000)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 9 Mar 2016 14:56:28 +0000 (15:56 +0100)
commit289d8dd6dbe4edb0949829e2c9a8895b5ae660a8
tree23fc69caee7dcd9343be3472e164dc51a5f7545a
parentb7cf8e15598e30b59be987ad4dd60e5d1f368e95
eal: fix race condition in multi-process startup

This patch fixes a race-condition when a primary and
secondary process simultaneously probe PCI devices.

This is implemented by moving the rte_eal_mcfg_complete()
function call in rte_eal_init() until after rte_eal_pci_probe().
The memory mapping of PCI device in the secondary process *must*
happen after the primary has finished doing the mapping as it
relies on information written by the primary.

The end result is that the secondary process waits longer,
until the primary has completed its PCI probing, and then
notifies the secondary process.

This race-condition became visible during the development of
a function that allows a secondary process to be polling until
a primary process exists. The secondary would then probe PCI
devices at the same time, causing an error during rte_eal_init()

Linux EAL:
Fixes: 916e4f4f4e45 ("memory: fix for multi process support")

BSD EAL:
Fixes: 764bf26873b9 ("add FreeBSD support")

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
lib/librte_eal/bsdapp/eal/eal.c
lib/librte_eal/linuxapp/eal/eal.c