git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net: check fragmented headers in non-debug as well
[dpdk.git]
/
lib
/
librte_pci
/
rte_pci.c
diff --git
a/lib/librte_pci/rte_pci.c
b/lib/librte_pci/rte_pci.c
index
f400178
..
1d1cbc7
100644
(file)
--- a/
lib/librte_pci/rte_pci.c
+++ b/
lib/librte_pci/rte_pci.c
@@
-9,17
+9,18
@@
#include <stdlib.h>
#include <stdio.h>
#include <sys/queue.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/queue.h>
-#include <sys/mman.h>
#include <rte_errno.h>
#include <rte_interrupts.h>
#include <rte_log.h>
#include <rte_bus.h>
#include <rte_errno.h>
#include <rte_interrupts.h>
#include <rte_log.h>
#include <rte_bus.h>
+#include <rte_eal_paging.h>
#include <rte_per_lcore.h>
#include <rte_memory.h>
#include <rte_eal.h>
#include <rte_string_fns.h>
#include <rte_common.h>
#include <rte_per_lcore.h>
#include <rte_memory.h>
#include <rte_eal.h>
#include <rte_string_fns.h>
#include <rte_common.h>
+#include <rte_debug.h>
#include "rte_pci.h"
#include "rte_pci.h"
@@
-34,6
+35,12
@@
get_u8_pciaddr_field(const char *in, void *_u8, char dlm)
if (*in == '\0')
return NULL;
if (*in == '\0')
return NULL;
+ /* PCI field starting with spaces is forbidden.
+ * Negative wrap-around is not reported as an error by strtoul.
+ */
+ if (*in == ' ' || *in == '-')
+ return NULL;
+
errno = 0;
val = strtoul(in, &end, 16);
if (errno != 0 || end[0] != dlm || val > UINT8_MAX) {
errno = 0;
val = strtoul(in, &end, 16);
if (errno != 0 || end[0] != dlm || val > UINT8_MAX) {
@@
-69,11
+76,21
@@
pci_dbdf_parse(const char *input, struct rte_pci_addr *dev_addr)
unsigned long val;
char *end;
unsigned long val;
char *end;
+ /* PCI id starting with spaces is forbidden.
+ * Negative wrap-around is not reported as an error by strtoul.
+ */
+ if (*in == ' ' || *in == '-')
+ return -EINVAL;
+
errno = 0;
val = strtoul(in, &end, 16);
errno = 0;
val = strtoul(in, &end, 16);
- if (errno != 0 || end[0] != ':' || val > UINT16_MAX)
+ /* Empty string is not an error for strtoul, but the check
+ * end[0] != ':'
+ * will detect the issue.
+ */
+ if (errno != 0 || end[0] != ':' || val > UINT32_MAX)
return -EINVAL;
return -EINVAL;
- dev_addr->domain = (uint
16
_t)val;
+ dev_addr->domain = (uint
32
_t)val;
in = end + 1;
in = get_u8_pciaddr_field(in, &dev_addr->bus, ':');
if (in == NULL)
in = end + 1;
in = get_u8_pciaddr_field(in, &dev_addr->bus, ':');
if (in == NULL)
@@
-87,18
+104,6
@@
pci_dbdf_parse(const char *input, struct rte_pci_addr *dev_addr)
return 0;
}
return 0;
}
-int
-eal_parse_pci_BDF(const char *input, struct rte_pci_addr *dev_addr)
-{
- return pci_bdf_parse(input, dev_addr);
-}
-
-int
-eal_parse_pci_DomBDF(const char *input, struct rte_pci_addr *dev_addr)
-{
- return pci_dbdf_parse(input, dev_addr);
-}
-
void
rte_pci_device_name(const struct rte_pci_addr *addr,
char *output, size_t size)
void
rte_pci_device_name(const struct rte_pci_addr *addr,
char *output, size_t size)
@@
-109,13
+114,6
@@
rte_pci_device_name(const struct rte_pci_addr *addr,
addr->devid, addr->function) >= 0);
}
addr->devid, addr->function) >= 0);
}
-int
-rte_eal_compare_pci_addr(const struct rte_pci_addr *addr,
- const struct rte_pci_addr *addr2)
-{
- return rte_pci_addr_cmp(addr, addr2);
-}
-
int
rte_pci_addr_cmp(const struct rte_pci_addr *addr,
const struct rte_pci_addr *addr2)
int
rte_pci_addr_cmp(const struct rte_pci_addr *addr,
const struct rte_pci_addr *addr2)
@@
-156,14
+154,16
@@
pci_map_resource(void *requested_addr, int fd, off_t offset, size_t size,
void *mapaddr;
/* Map the PCI memory resource of device */
void *mapaddr;
/* Map the PCI memory resource of device */
- mapaddr = mmap(requested_addr, size, PROT_READ | PROT_WRITE,
- MAP_SHARED | additional_flags, fd, offset);
- if (mapaddr == MAP_FAILED) {
+ mapaddr = rte_mem_map(requested_addr, size,
+ RTE_PROT_READ | RTE_PROT_WRITE,
+ RTE_MAP_SHARED | additional_flags, fd, offset);
+ if (mapaddr == NULL) {
RTE_LOG(ERR, EAL,
RTE_LOG(ERR, EAL,
- "%s(): cannot m
map
(%d, %p, 0x%zx, 0x%llx): %s (%p)\n",
+ "%s(): cannot m
ap resource
(%d, %p, 0x%zx, 0x%llx): %s (%p)\n",
__func__, fd, requested_addr, size,
(unsigned long long)offset,
__func__, fd, requested_addr, size,
(unsigned long long)offset,
- strerror(errno), mapaddr);
+ rte_strerror(rte_errno), mapaddr);
+ mapaddr = MAP_FAILED; /* API uses mmap error code */
} else
RTE_LOG(DEBUG, EAL, " PCI memory mapped at %p\n", mapaddr);
} else
RTE_LOG(DEBUG, EAL, " PCI memory mapped at %p\n", mapaddr);
@@
-178,10
+178,10
@@
pci_unmap_resource(void *requested_addr, size_t size)
return;
/* Unmap the PCI memory resource of device */
return;
/* Unmap the PCI memory resource of device */
- if (
m
unmap(requested_addr, size)) {
- RTE_LOG(ERR, EAL, "%s(): cannot munmap(%p, %#zx): %s\n",
+ if (
rte_mem_
unmap(requested_addr, size)) {
+ RTE_LOG(ERR, EAL, "%s(): cannot m
em
unmap(%p, %#zx): %s\n",
__func__, requested_addr, size,
__func__, requested_addr, size,
-
strerror(
errno));
+
rte_strerror(rte_
errno));
} else
RTE_LOG(DEBUG, EAL, " PCI memory unmapped at %p\n",
requested_addr);
} else
RTE_LOG(DEBUG, EAL, " PCI memory unmapped at %p\n",
requested_addr);