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/mlx5: make tunnel hub list thread safe
[dpdk.git]
/
drivers
/
bus
/
fslmc
/
fslmc_bus.c
diff --git
a/drivers/bus/fslmc/fslmc_bus.c
b/drivers/bus/fslmc/fslmc_bus.c
index
9caf5b6
..
db93669
100644
(file)
--- a/
drivers/bus/fslmc/fslmc_bus.c
+++ b/
drivers/bus/fslmc/fslmc_bus.c
@@
-14,6
+14,7
@@
#include <rte_devargs.h>
#include <rte_memcpy.h>
#include <rte_ethdev_driver.h>
#include <rte_devargs.h>
#include <rte_memcpy.h>
#include <rte_ethdev_driver.h>
+#include <rte_mbuf_dyn.h>
#include <rte_fslmc.h>
#include <fslmc_vfio.h>
#include <rte_fslmc.h>
#include <fslmc_vfio.h>
@@
-21,14
+22,15
@@
#include <dpaax_iova_table.h>
#include <dpaax_iova_table.h>
-int dpaa2_logtype_bus;
-
#define VFIO_IOMMU_GROUP_PATH "/sys/kernel/iommu_groups"
#define FSLMC_BUS_NAME fslmc
struct rte_fslmc_bus rte_fslmc_bus;
uint8_t dpaa2_virt_mode;
#define VFIO_IOMMU_GROUP_PATH "/sys/kernel/iommu_groups"
#define FSLMC_BUS_NAME fslmc
struct rte_fslmc_bus rte_fslmc_bus;
uint8_t dpaa2_virt_mode;
+#define DPAA2_SEQN_DYNFIELD_NAME "dpaa2_seqn_dynfield"
+int dpaa2_seqn_dynfield_offset = -1;
+
uint32_t
rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type)
{
uint32_t
rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type)
{
@@
-37,8
+39,6
@@
rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type)
return rte_fslmc_bus.device_count[device_type];
}
return rte_fslmc_bus.device_count[device_type];
}
-RTE_DEFINE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
-
static void
cleanup_fslmc_device_list(void)
{
static void
cleanup_fslmc_device_list(void)
{
@@
-115,14
+115,9
@@
static void
dump_device_list(void)
{
struct rte_dpaa2_device *dev;
dump_device_list(void)
{
struct rte_dpaa2_device *dev;
- uint32_t global_log_level;
- int local_log_level;
/* Only if the log level has been set to Debugging, print list */
/* Only if the log level has been set to Debugging, print list */
- global_log_level = rte_log_get_global_level();
- local_log_level = rte_log_get_level(dpaa2_logtype_bus);
- if (global_log_level == RTE_LOG_DEBUG ||
- local_log_level == RTE_LOG_DEBUG) {
+ if (rte_log_can_log(dpaa2_logtype_bus, RTE_LOG_DEBUG)) {
DPAA2_BUS_LOG(DEBUG, "List of devices scanned on bus:");
TAILQ_FOREACH(dev, &rte_fslmc_bus.device_list, next) {
DPAA2_BUS_LOG(DEBUG, "\t\t%s", dev->device.name);
DPAA2_BUS_LOG(DEBUG, "List of devices scanned on bus:");
TAILQ_FOREACH(dev, &rte_fslmc_bus.device_list, next) {
DPAA2_BUS_LOG(DEBUG, "\t\t%s", dev->device.name);
@@
-235,8
+230,9
@@
rte_fslmc_parse(const char *name, void *addr)
{
uint16_t dev_id;
char *t_ptr;
{
uint16_t dev_id;
char *t_ptr;
- c
har *sep = NULL
;
+ c
onst char *sep
;
uint8_t sep_exists = 0;
uint8_t sep_exists = 0;
+ int ret = -1;
DPAA2_BUS_DEBUG("Parsing dev=(%s)", name);
DPAA2_BUS_DEBUG("Parsing dev=(%s)", name);
@@
-266,10
+262,11
@@
rte_fslmc_parse(const char *name, void *addr)
} else {
DPAA2_BUS_DEBUG("Invalid device for matching (%s).",
name);
} else {
DPAA2_BUS_DEBUG("Invalid device for matching (%s).",
name);
+ ret = -EINVAL;
goto err_out;
}
} else
goto err_out;
}
} else
- sep =
strdup(name)
;
+ sep =
name
;
jump_out:
/* Validate device name */
jump_out:
/* Validate device name */
@@
-283,26
+280,23
@@
jump_out:
strncmp("dpdmai", sep, 6) &&
strncmp("dpdmux", sep, 6)) {
DPAA2_BUS_DEBUG("Unknown or unsupported device (%s)", sep);
strncmp("dpdmai", sep, 6) &&
strncmp("dpdmux", sep, 6)) {
DPAA2_BUS_DEBUG("Unknown or unsupported device (%s)", sep);
+ ret = -EINVAL;
goto err_out;
}
t_ptr = strchr(sep, '.');
if (!t_ptr || sscanf(t_ptr + 1, "%hu", &dev_id) != 1) {
DPAA2_BUS_ERR("Missing device id in device name (%s)", sep);
goto err_out;
}
t_ptr = strchr(sep, '.');
if (!t_ptr || sscanf(t_ptr + 1, "%hu", &dev_id) != 1) {
DPAA2_BUS_ERR("Missing device id in device name (%s)", sep);
+ ret = -EINVAL;
goto err_out;
}
goto err_out;
}
- if (addr)
{
+ if (addr)
strcpy(addr, sep);
strcpy(addr, sep);
- if (!sep_exists && sep)
- free(sep);
- return 0;
- }
+ ret = 0;
err_out:
err_out:
- if (!sep_exists && sep)
- free(sep);
- return -EINVAL;
+ return ret;
}
static int
}
static int
@@
-384,9
+378,22
@@
rte_fslmc_probe(void)
struct rte_dpaa2_device *dev;
struct rte_dpaa2_driver *drv;
struct rte_dpaa2_device *dev;
struct rte_dpaa2_driver *drv;
+ static const struct rte_mbuf_dynfield dpaa2_seqn_dynfield_desc = {
+ .name = DPAA2_SEQN_DYNFIELD_NAME,
+ .size = sizeof(dpaa2_seqn_t),
+ .align = __alignof__(dpaa2_seqn_t),
+ };
+
if (TAILQ_EMPTY(&rte_fslmc_bus.device_list))
return 0;
if (TAILQ_EMPTY(&rte_fslmc_bus.device_list))
return 0;
+ dpaa2_seqn_dynfield_offset =
+ rte_mbuf_dynfield_register(&dpaa2_seqn_dynfield_desc);
+ if (dpaa2_seqn_dynfield_offset < 0) {
+ DPAA2_BUS_ERR("Failed to register mbuf field for dpaa sequence number");
+ return 0;
+ }
+
ret = fslmc_vfio_setup_group();
if (ret) {
DPAA2_BUS_ERR("Unable to setup VFIO %d", ret);
ret = fslmc_vfio_setup_group();
if (ret) {
DPAA2_BUS_ERR("Unable to setup VFIO %d", ret);
@@
-609,6
+616,11
@@
fslmc_bus_dev_iterate(const void *start, const char *str,
struct rte_dpaa2_device *dev;
char *dup, *dev_name = NULL;
struct rte_dpaa2_device *dev;
char *dup, *dev_name = NULL;
+ if (str == NULL) {
+ DPAA2_BUS_DEBUG("No device string");
+ return NULL;
+ }
+
/* Expectation is that device would be name=device_name */
if (strncmp(str, "name=", 5) != 0) {
DPAA2_BUS_DEBUG("Invalid device string (%s)\n", str);
/* Expectation is that device would be name=device_name */
if (strncmp(str, "name=", 5) != 0) {
DPAA2_BUS_DEBUG("Invalid device string (%s)\n", str);
@@
-655,11
+667,4
@@
struct rte_fslmc_bus rte_fslmc_bus = {
};
RTE_REGISTER_BUS(FSLMC_BUS_NAME, rte_fslmc_bus.bus);
};
RTE_REGISTER_BUS(FSLMC_BUS_NAME, rte_fslmc_bus.bus);
-
-RTE_INIT(fslmc_init_log)
-{
- /* Bus level logs */
- dpaa2_logtype_bus = rte_log_register("bus.fslmc");
- if (dpaa2_logtype_bus >= 0)
- rte_log_set_level(dpaa2_logtype_bus, RTE_LOG_NOTICE);
-}
+RTE_LOG_REGISTER(dpaa2_logtype_bus, bus.fslmc, NOTICE);