> -----Original Message----- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Stephen Hemminger > Sent: Sunday, February 15, 2015 11:25 PM > To: dev at dpdk.org > Cc: Stephen Hemminger > Subject: [dpdk-dev] [PATCH 3/5] xen: add phys-addr command line argument > > Allow overriding default Xen DOM0 behavior to use physical addresses insted of > mfn
If the application is built with DOM0 support , the application will run in non Dom0 environment when using the new argument, correct? > Signed-off-by: Stephen Hemminger <stephen at networkplumber.org> > --- > v2 -- no changes > > lib/librte_eal/common/eal_common_options.c | 5 +++++ > lib/librte_eal/common/eal_internal_cfg.h | 1 + > lib/librte_eal/common/eal_options.h | 2 ++ > lib/librte_eal/common/include/rte_memory.h | 3 +++ > lib/librte_eal/linuxapp/eal/eal_memory.c | 5 +++++ > lib/librte_mempool/rte_dom0_mempool.c | 10 ++++++++-- > 6 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_options.c > b/lib/librte_eal/common/eal_common_options.c > index 67e02dc..1742364 100644 > --- a/lib/librte_eal/common/eal_common_options.c > +++ b/lib/librte_eal/common/eal_common_options.c > @@ -83,6 +83,7 @@ eal_long_options[] = { > {OPT_LOG_LEVEL, 1, NULL, OPT_LOG_LEVEL_NUM}, > {OPT_BASE_VIRTADDR, 1, 0, OPT_BASE_VIRTADDR_NUM}, > {OPT_XEN_DOM0, 0, 0, OPT_XEN_DOM0_NUM}, > + {OPT_XEN_PHYS_ADDR, 0, 0, OPT_XEN_PHYS_ADDR_NUM}, > {OPT_CREATE_UIO_DEV, 1, NULL, OPT_CREATE_UIO_DEV_NUM}, > {OPT_VFIO_INTR, 1, NULL, OPT_VFIO_INTR_NUM}, > {0, 0, 0, 0} > @@ -491,6 +492,10 @@ eal_parse_common_option(int opt, const char > *optarg, > } > conf->log_level = log; > break; > + > + case OPT_XEN_PHYS_ADDR_NUM: > + conf->xen_phys_addr_support = 1; > + break; > } > > /* don't know what to do, leave this to caller */ diff --git > a/lib/librte_eal/common/eal_internal_cfg.h > b/lib/librte_eal/common/eal_internal_cfg.h > index e2ecb0d..41b4169 100644 > --- a/lib/librte_eal/common/eal_internal_cfg.h > +++ b/lib/librte_eal/common/eal_internal_cfg.h > @@ -65,6 +65,7 @@ struct internal_config { > volatile unsigned force_nrank; /**< force number of ranks */ > volatile unsigned no_hugetlbfs; /**< true to disable hugetlbfs */ > volatile unsigned xen_dom0_support; /**< support app running on Xen > Dom0*/ > + volatile unsigned xen_phys_addr_support; /**< support phys addr */ > volatile unsigned no_pci; /**< true to disable PCI */ > volatile unsigned no_hpet; /**< true to disable HPET */ > volatile unsigned vmware_tsc_map; /**< true to use VMware TSC > mapping diff --git a/lib/librte_eal/common/eal_options.h > b/lib/librte_eal/common/eal_options.h > index e476f8d..8aee959 100644 > --- a/lib/librte_eal/common/eal_options.h > +++ b/lib/librte_eal/common/eal_options.h > @@ -73,6 +73,8 @@ enum { > OPT_BASE_VIRTADDR_NUM, > #define OPT_XEN_DOM0 "xen-dom0" > OPT_XEN_DOM0_NUM, > +#define OPT_XEN_PHYS_ADDR "xen-phys-addr" > + OPT_XEN_PHYS_ADDR_NUM, > #define OPT_CREATE_UIO_DEV "create-uio-dev" > OPT_CREATE_UIO_DEV_NUM, > #define OPT_VFIO_INTR "vfio-intr" > diff --git a/lib/librte_eal/common/include/rte_memory.h > b/lib/librte_eal/common/include/rte_memory.h > index ab6c1ff..c3b8a98 100644 > --- a/lib/librte_eal/common/include/rte_memory.h > +++ b/lib/librte_eal/common/include/rte_memory.h > @@ -180,6 +180,9 @@ unsigned rte_memory_get_nrank(void); /**< Internal > use only - should DOM0 memory mapping be used */ extern int > is_xen_dom0_supported(void); > > +/**< Internal use only - should DOM0 use physical addresses insted of > +mfn */ extern int is_xen_phys_addr_supported(void); > + > /** > * Return the physical address of elt, which is an element of the pool mp. > * > diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c > b/lib/librte_eal/linuxapp/eal/eal_memory.c > index 4afda2a..a759ac9 100644 > --- a/lib/librte_eal/linuxapp/eal/eal_memory.c > +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c > @@ -103,6 +103,11 @@ int is_xen_dom0_supported(void) { > return internal_config.xen_dom0_support; } > + > +int is_xen_phys_addr_supported(void) > +{ > + return internal_config.xen_phys_addr_support; > +} > #endif > > /** > diff --git a/lib/librte_mempool/rte_dom0_mempool.c > b/lib/librte_mempool/rte_dom0_mempool.c > index 9ec68fb..ab35826 100644 > --- a/lib/librte_mempool/rte_dom0_mempool.c > +++ b/lib/librte_mempool/rte_dom0_mempool.c > @@ -74,8 +74,14 @@ get_phys_map(void *va, phys_addr_t pa[], uint32_t > pg_num, > virt_addr =(uintptr_t) mcfg->memseg[memseg_id].addr; > > for (i = 0; i != pg_num; i++) { > - mfn_id = ((uintptr_t)va + i * pg_sz - virt_addr) / RTE_PGSIZE_2M; > - pa[i] = mcfg->memseg[memseg_id].mfn[mfn_id] * page_size; > + if (!is_xen_phys_addr_supported()) { > + mfn_id = ((uintptr_t)va + i * pg_sz - > + virt_addr) / RTE_PGSIZE_2M; > + pa[i] = mcfg->memseg[memseg_id].mfn[mfn_id] * page_size; > + } else { > + pa[i] = mcfg->memseg[memseg_id].phys_addr + i * pg_sz + > + (uintptr_t)va - virt_addr; > + } > } > } > > -- > 2.1.4