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
drivers/bus/pci
@ -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/common
|
||||||
CFLAGS += -I$(RTE_SDK)/lib/librte_eal/$(SYSTEM)app/eal
|
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_eal -lrte_mbuf -lrte_mempool -lrte_ring
|
||||||
LDLIBS += -lrte_ethdev -lrte_pci
|
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 *
|
void *
|
||||||
pci_find_max_end_va(void)
|
pci_find_max_end_va(void)
|
||||||
{
|
{
|
||||||
const struct rte_memseg *seg = rte_eal_get_physmem_layout();
|
void *va = NULL;
|
||||||
const struct rte_memseg *last = seg;
|
|
||||||
unsigned i = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < RTE_MAX_MEMSEG; i++, seg++) {
|
rte_memseg_walk(find_max_end_va, &va);
|
||||||
if (seg->addr == NULL)
|
return va;
|
||||||
break;
|
|
||||||
|
|
||||||
if (seg->addr > last->addr)
|
|
||||||
last = seg;
|
|
||||||
|
|
||||||
}
|
|
||||||
return RTE_PTR_ADD(last->addr, last->len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* parse one line of the "resource" sysfs file (note that the 'line'
|
/* parse one line of the "resource" sysfs file (note that the 'line'
|
||||||
|
@ -14,3 +14,6 @@ else
|
|||||||
sources += files('bsd/pci.c')
|
sources += files('bsd/pci.c')
|
||||||
includes += include_directories('bsd')
|
includes += include_directories('bsd')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# memseg walk is not part of stable API yet
|
||||||
|
allow_experimental_apis = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user