bus/pci: use memseg walk instead of iteration
Reduce dependency on internal details of EAL memory subsystem, and simplify code. Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Tested-by: Santosh Shukla <santosh.shukla@caviumnetworks.com> Tested-by: Hemant Agrawal <hemant.agrawal@nxp.com> Tested-by: Gowrishankar Muthukrishnan <gowrishankar.m@linux.vnet.ibm.com>
This commit is contained in:
parent
49a28baed2
commit
7411d03249
@ -49,6 +49,9 @@ CFLAGS += -I$(RTE_SDK)/drivers/bus/pci/$(SYSTEM)
|
||||
CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common
|
||||
CFLAGS += -I$(RTE_SDK)/lib/librte_eal/$(SYSTEM)app/eal
|
||||
|
||||
# memseg walk is not part of stable API yet
|
||||
CFLAGS += -DALLOW_EXPERIMENTAL_API
|
||||
|
||||
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
|
||||
LDLIBS += -lrte_ethdev -lrte_pci
|
||||
|
||||
|
@ -116,22 +116,24 @@ rte_pci_unmap_device(struct rte_pci_device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
find_max_end_va(const struct rte_memseg *ms, void *arg)
|
||||
{
|
||||
void *end_va = RTE_PTR_ADD(ms->addr, ms->len);
|
||||
void **max_va = arg;
|
||||
|
||||
if (*max_va < end_va)
|
||||
*max_va = end_va;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *
|
||||
pci_find_max_end_va(void)
|
||||
{
|
||||
const struct rte_memseg *seg = rte_eal_get_physmem_layout();
|
||||
const struct rte_memseg *last = seg;
|
||||
unsigned i = 0;
|
||||
void *va = NULL;
|
||||
|
||||
for (i = 0; i < RTE_MAX_MEMSEG; i++, seg++) {
|
||||
if (seg->addr == NULL)
|
||||
break;
|
||||
|
||||
if (seg->addr > last->addr)
|
||||
last = seg;
|
||||
|
||||
}
|
||||
return RTE_PTR_ADD(last->addr, last->len);
|
||||
rte_memseg_walk(find_max_end_va, &va);
|
||||
return va;
|
||||
}
|
||||
|
||||
/* parse one line of the "resource" sysfs file (note that the 'line'
|
||||
|
@ -14,3 +14,6 @@ else
|
||||
sources += files('bsd/pci.c')
|
||||
includes += include_directories('bsd')
|
||||
endif
|
||||
|
||||
# memseg walk is not part of stable API yet
|
||||
allow_experimental_apis = true
|
||||
|
Loading…
x
Reference in New Issue
Block a user