pci: avoid inlining functions
Parsing operations should not happen in performance critical sections. Headers should not propose implementations unless duly required. Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
This commit is contained in:
parent
7e434f300d
commit
cbf10af6de
@ -87,6 +87,74 @@ static struct rte_devargs *pci_devargs_lookup(struct rte_pci_device *dev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Macro used by pci addr parsing functions. **/
|
||||
#define GET_PCIADDR_FIELD(in, fd, lim, dlm) \
|
||||
do { \
|
||||
unsigned long val; \
|
||||
char *end; \
|
||||
errno = 0; \
|
||||
val = strtoul((in), &end, 16); \
|
||||
if (errno != 0 || end[0] != (dlm) || val > (lim)) \
|
||||
return -EINVAL; \
|
||||
(fd) = (typeof (fd))val; \
|
||||
(in) = end + 1; \
|
||||
} while(0)
|
||||
|
||||
|
||||
int
|
||||
eal_parse_pci_BDF(const char *input, struct rte_pci_addr *dev_addr)
|
||||
{
|
||||
dev_addr->domain = 0;
|
||||
GET_PCIADDR_FIELD(input, dev_addr->bus, UINT8_MAX, ':');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->devid, UINT8_MAX, '.');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->function, UINT8_MAX, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
eal_parse_pci_DomBDF(const char *input, struct rte_pci_addr *dev_addr)
|
||||
{
|
||||
GET_PCIADDR_FIELD(input, dev_addr->domain, UINT16_MAX, ':');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->bus, UINT8_MAX, ':');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->devid, UINT8_MAX, '.');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->function, UINT8_MAX, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#undef GET_PCIADDR_FIELD
|
||||
|
||||
void
|
||||
rte_pci_device_name(const struct rte_pci_addr *addr,
|
||||
char *output, size_t size)
|
||||
{
|
||||
RTE_VERIFY(size >= PCI_PRI_STR_SIZE);
|
||||
RTE_VERIFY(snprintf(output, size, PCI_PRI_FMT,
|
||||
addr->domain, addr->bus,
|
||||
addr->devid, addr->function) >= 0);
|
||||
}
|
||||
|
||||
int
|
||||
rte_eal_compare_pci_addr(const struct rte_pci_addr *addr,
|
||||
const struct rte_pci_addr *addr2)
|
||||
{
|
||||
uint64_t dev_addr, dev_addr2;
|
||||
|
||||
if ((addr == NULL) || (addr2 == NULL))
|
||||
return -1;
|
||||
|
||||
dev_addr = ((uint64_t)addr->domain << 24) |
|
||||
(addr->bus << 16) | (addr->devid << 8) | addr->function;
|
||||
dev_addr2 = ((uint64_t)addr2->domain << 24) |
|
||||
(addr2->bus << 16) | (addr2->devid << 8) | addr2->function;
|
||||
|
||||
if (dev_addr > dev_addr2)
|
||||
return 1;
|
||||
else if (dev_addr < dev_addr2)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
pci_name_set(struct rte_pci_device *dev)
|
||||
{
|
||||
|
@ -240,19 +240,6 @@ struct mapped_pci_resource {
|
||||
/** mapped pci device list */
|
||||
TAILQ_HEAD(mapped_pci_res_list, mapped_pci_resource);
|
||||
|
||||
/**< Internal use only - Macro used by pci addr parsing functions **/
|
||||
#define GET_PCIADDR_FIELD(in, fd, lim, dlm) \
|
||||
do { \
|
||||
unsigned long val; \
|
||||
char *end; \
|
||||
errno = 0; \
|
||||
val = strtoul((in), &end, 16); \
|
||||
if (errno != 0 || end[0] != (dlm) || val > (lim)) \
|
||||
return -EINVAL; \
|
||||
(fd) = (typeof (fd))val; \
|
||||
(in) = end + 1; \
|
||||
} while(0)
|
||||
|
||||
/**
|
||||
* Utility function to produce a PCI Bus-Device-Function value
|
||||
* given a string representation. Assumes that the BDF is provided without
|
||||
@ -266,15 +253,7 @@ do { \
|
||||
* @return
|
||||
* 0 on success, negative on error.
|
||||
*/
|
||||
static inline int
|
||||
eal_parse_pci_BDF(const char *input, struct rte_pci_addr *dev_addr)
|
||||
{
|
||||
dev_addr->domain = 0;
|
||||
GET_PCIADDR_FIELD(input, dev_addr->bus, UINT8_MAX, ':');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->devid, UINT8_MAX, '.');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->function, UINT8_MAX, 0);
|
||||
return 0;
|
||||
}
|
||||
int eal_parse_pci_BDF(const char *input, struct rte_pci_addr *dev_addr);
|
||||
|
||||
/**
|
||||
* Utility function to produce a PCI Bus-Device-Function value
|
||||
@ -288,16 +267,7 @@ eal_parse_pci_BDF(const char *input, struct rte_pci_addr *dev_addr)
|
||||
* @return
|
||||
* 0 on success, negative on error.
|
||||
*/
|
||||
static inline int
|
||||
eal_parse_pci_DomBDF(const char *input, struct rte_pci_addr *dev_addr)
|
||||
{
|
||||
GET_PCIADDR_FIELD(input, dev_addr->domain, UINT16_MAX, ':');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->bus, UINT8_MAX, ':');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->devid, UINT8_MAX, '.');
|
||||
GET_PCIADDR_FIELD(input, dev_addr->function, UINT8_MAX, 0);
|
||||
return 0;
|
||||
}
|
||||
#undef GET_PCIADDR_FIELD
|
||||
int eal_parse_pci_DomBDF(const char *input, struct rte_pci_addr *dev_addr);
|
||||
|
||||
/**
|
||||
* Utility function to write a pci device name, this device name can later be
|
||||
@ -311,17 +281,9 @@ eal_parse_pci_DomBDF(const char *input, struct rte_pci_addr *dev_addr)
|
||||
* @param size
|
||||
* The output buffer size
|
||||
*/
|
||||
static inline void
|
||||
rte_pci_device_name(const struct rte_pci_addr *addr,
|
||||
char *output, size_t size)
|
||||
{
|
||||
RTE_VERIFY(size >= PCI_PRI_STR_SIZE);
|
||||
RTE_VERIFY(snprintf(output, size, PCI_PRI_FMT,
|
||||
addr->domain, addr->bus,
|
||||
addr->devid, addr->function) >= 0);
|
||||
}
|
||||
void rte_pci_device_name(const struct rte_pci_addr *addr, char *output,
|
||||
size_t size);
|
||||
|
||||
/* Compare two PCI device addresses. */
|
||||
/**
|
||||
* Utility function to compare two PCI device addresses.
|
||||
*
|
||||
@ -334,27 +296,8 @@ rte_pci_device_name(const struct rte_pci_addr *addr,
|
||||
* Positive on addr is greater than addr2.
|
||||
* Negative on addr is less than addr2, or error.
|
||||
*/
|
||||
static inline int
|
||||
rte_eal_compare_pci_addr(const struct rte_pci_addr *addr,
|
||||
const struct rte_pci_addr *addr2)
|
||||
{
|
||||
uint64_t dev_addr, dev_addr2;
|
||||
|
||||
if ((addr == NULL) || (addr2 == NULL))
|
||||
return -1;
|
||||
|
||||
dev_addr = ((uint64_t)addr->domain << 24) |
|
||||
(addr->bus << 16) | (addr->devid << 8) | addr->function;
|
||||
dev_addr2 = ((uint64_t)addr2->domain << 24) |
|
||||
(addr2->bus << 16) | (addr2->devid << 8) | addr2->function;
|
||||
|
||||
if (dev_addr > dev_addr2)
|
||||
return 1;
|
||||
else if (dev_addr < dev_addr2)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
int rte_eal_compare_pci_addr(const struct rte_pci_addr *addr,
|
||||
const struct rte_pci_addr *addr2);
|
||||
|
||||
/**
|
||||
* Scan the content of the PCI bus, and the devices in the devices
|
||||
|
@ -241,8 +241,11 @@ EXPERIMENTAL {
|
||||
DPDK_17.11 {
|
||||
global:
|
||||
|
||||
eal_parse_pci_BDF;
|
||||
eal_parse_pci_DomBDF;
|
||||
rte_eal_create_uio_dev;
|
||||
rte_bus_get_iommu_class;
|
||||
rte_eal_compare_pci_addr;
|
||||
rte_eal_has_pci;
|
||||
rte_eal_iova_mode;
|
||||
rte_eal_mbuf_default_mempool_ops;
|
||||
@ -250,6 +253,7 @@ DPDK_17.11 {
|
||||
rte_eal_vfio_intr_mode;
|
||||
rte_lcore_has_role;
|
||||
rte_memcpy_ptr;
|
||||
rte_pci_device_name;
|
||||
rte_pci_get_iommu_class;
|
||||
rte_pci_match;
|
||||
vfio_enable;
|
||||
|
Loading…
Reference in New Issue
Block a user