mem: store memory mode flags in shared config

Currently, command-line switches for legacy mem mode or single-file
segments mode are only stored in internal config. This leads to a
situation where these flags have to always match between primary
and secondary, which is bad for usability.

Fix this by storing these flags in the shared config as well, so
that secondary process can know if the primary was launched in
single-file segments or legacy mem mode.

This bumps the EAL ABI, however there's an EAL deprecation notice
already in place[1] for a different feature, so that's OK.

[1] http://patches.dpdk.org/patch/43502/

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
This commit is contained in:
Anatoly Burakov 2018-09-20 16:41:26 +01:00 committed by Thomas Monjalon
parent ca372b3f50
commit 64cdfc35aa
5 changed files with 31 additions and 3 deletions

View File

@ -152,6 +152,10 @@ ABI Changes
Also, make sure to start the actual text at the margin.
=========================================================
* eal: added ``legacy_mem`` and ``single_file_segments`` values to
``rte_config`` structure on account of improving DPDK usability when
using either ``--legacy-mem`` or ``--single-file-segments`` flags.
Removed Items
-------------
@ -198,7 +202,7 @@ The libraries prepended with a plus sign were incremented in this version.
librte_compressdev.so.1
librte_cryptodev.so.5
librte_distributor.so.1
librte_eal.so.8
+ librte_eal.so.9
librte_ethdev.so.10
+ librte_eventdev.so.6
librte_flow_classify.so.1

View File

@ -77,6 +77,10 @@ struct rte_mem_config {
* exact same address the primary process maps it.
*/
uint64_t mem_cfg_addr;
/* legacy mem and single file segments options are shared */
uint32_t legacy_mem;
uint32_t single_file_segments;
} __attribute__((__packed__));

View File

@ -10,7 +10,7 @@ ARCH_DIR ?= $(RTE_ARCH)
EXPORT_MAP := ../../rte_eal_version.map
VPATH += $(RTE_SDK)/lib/librte_eal/common/arch/$(ARCH_DIR)
LIBABIVER := 8
LIBABIVER := 9
VPATH += $(RTE_SDK)/lib/librte_eal/common

View File

@ -352,6 +352,24 @@ eal_proc_type_detect(void)
return ptype;
}
/* copies data from internal config to shared config */
static void
eal_update_mem_config(void)
{
struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
mcfg->legacy_mem = internal_config.legacy_mem;
mcfg->single_file_segments = internal_config.single_file_segments;
}
/* copies data from shared config to internal config */
static void
eal_update_internal_config(void)
{
struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
internal_config.legacy_mem = mcfg->legacy_mem;
internal_config.single_file_segments = mcfg->single_file_segments;
}
/* Sets up rte_config structure with the pointer to shared memory config.*/
static void
rte_config_init(void)
@ -361,11 +379,13 @@ rte_config_init(void)
switch (rte_config.process_type){
case RTE_PROC_PRIMARY:
rte_eal_config_create();
eal_update_mem_config();
break;
case RTE_PROC_SECONDARY:
rte_eal_config_attach();
rte_eal_mcfg_wait_complete(rte_config.mem_config);
rte_eal_config_reattach();
eal_update_internal_config();
break;
case RTE_PROC_AUTO:
case RTE_PROC_INVALID:

View File

@ -21,7 +21,7 @@ else
error('unsupported system type "@0@"'.format(host_machine.system()))
endif
version = 8 # the version of the EAL API
version = 9 # the version of the EAL API
allow_experimental_apis = true
deps += 'compat'
deps += 'kvargs'