Skip to content

Commit

Permalink
env_dpdk: break up dpdk_pci_device_copy_identifiers
Browse files Browse the repository at this point in the history
Break this function up into three APIs instead:

* dpdk_pci_device_get_addr
* dpdk_pci_device_get_id
* dpdk_pci_device_get_numa_node

This more clearly delineates the requirements we
have from the DPDK PCI device/driver APIs.

Signed-off-by: Jim Harris <[email protected]>
Change-Id: Ie585c8252d63c15c6e6884d60f8a064c3f0ab94f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14684
Tested-by: SPDK CI Jenkins <[email protected]>
Community-CI: Mellanox Build Bot
Reviewed-by: Krzysztof Karas <[email protected]>
Reviewed-by: Ben Walker <[email protected]>
Reviewed-by: Konrad Sztyber <[email protected]>
  • Loading branch information
jimharris authored and tomzawadzki committed Sep 29, 2022
1 parent 1eb35ac commit 5be703e
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 19 deletions.
18 changes: 17 additions & 1 deletion lib/env_dpdk/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include <rte_alarm.h>
#include <rte_devargs.h>
#include <rte_pci.h>
#include "spdk/env.h"
#include "spdk/log.h"
#include "spdk/string.h"
Expand Down Expand Up @@ -351,6 +352,8 @@ pci_device_init(struct rte_pci_driver *_drv,
{
struct spdk_pci_driver *driver = (struct spdk_pci_driver *)_drv;
struct spdk_pci_device *dev;
struct rte_pci_addr *addr;
struct rte_pci_id *id;
int rc;

dev = calloc(1, sizeof(*dev));
Expand All @@ -360,7 +363,20 @@ pci_device_init(struct rte_pci_driver *_drv,

dev->dev_handle = _dev;

dpdk_pci_device_copy_identifiers(_dev, dev);
addr = dpdk_pci_device_get_addr(_dev);
dev->addr.domain = addr->domain;
dev->addr.bus = addr->bus;
dev->addr.dev = addr->devid;
dev->addr.func = addr->function;

id = dpdk_pci_device_get_id(_dev);
dev->id.class_id = id->class_id;
dev->id.vendor_id = id->vendor_id;
dev->id.device_id = id->device_id;
dev->id.subvendor_id = id->subsystem_vendor_id;
dev->id.subdevice_id = id->subsystem_device_id;

dev->socket_id = dpdk_pci_device_get_numa_node(_dev);
dev->type = "pci";

dev->map_bar = map_bar_rte;
Expand Down
18 changes: 15 additions & 3 deletions lib/env_dpdk/pci_dpdk.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,22 @@ dpdk_pci_device_get_devargs(struct rte_pci_device *rte_dev)
return g_dpdk_fn_table->pci_device_get_devargs(rte_dev);
}

void
dpdk_pci_device_copy_identifiers(struct rte_pci_device *_dev, struct spdk_pci_device *dev)
struct rte_pci_addr *
dpdk_pci_device_get_addr(struct rte_pci_device *rte_dev)
{
return g_dpdk_fn_table->pci_device_get_addr(rte_dev);
}

struct rte_pci_id *
dpdk_pci_device_get_id(struct rte_pci_device *rte_dev)
{
return g_dpdk_fn_table->pci_device_get_id(rte_dev);
}

int
dpdk_pci_device_get_numa_node(struct rte_pci_device *_dev)
{
g_dpdk_fn_table->pci_device_copy_identifiers(_dev, dev);
return g_dpdk_fn_table->pci_device_get_numa_node(_dev);
}

int
Expand Down
8 changes: 6 additions & 2 deletions lib/env_dpdk/pci_dpdk.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ struct dpdk_fn_table {
uint64_t (*pci_device_vtophys)(struct rte_pci_device *dev, uint64_t vaddr, size_t len);
const char *(*pci_device_get_name)(struct rte_pci_device *);
struct rte_devargs *(*pci_device_get_devargs)(struct rte_pci_device *);
void (*pci_device_copy_identifiers)(struct rte_pci_device *_dev, struct spdk_pci_device *dev);
struct rte_pci_addr *(*pci_device_get_addr)(struct rte_pci_device *);
struct rte_pci_id *(*pci_device_get_id)(struct rte_pci_device *);
int (*pci_device_get_numa_node)(struct rte_pci_device *_dev);
int (*pci_device_map_bar)(struct rte_pci_device *dev, uint32_t bar,
void **mapped_addr, uint64_t *phys_addr, uint64_t *size);
int (*pci_device_read_config)(struct rte_pci_device *dev, void *value, uint32_t len,
Expand All @@ -55,7 +57,9 @@ int dpdk_pci_init(void);
uint64_t dpdk_pci_device_vtophys(struct rte_pci_device *dev, uint64_t vaddr, size_t len);
const char *dpdk_pci_device_get_name(struct rte_pci_device *);
struct rte_devargs *dpdk_pci_device_get_devargs(struct rte_pci_device *);
void dpdk_pci_device_copy_identifiers(struct rte_pci_device *_dev, struct spdk_pci_device *dev);
struct rte_pci_addr *dpdk_pci_device_get_addr(struct rte_pci_device *);
struct rte_pci_id *dpdk_pci_device_get_id(struct rte_pci_device *);
int dpdk_pci_device_get_numa_node(struct rte_pci_device *_dev);
int dpdk_pci_device_map_bar(struct rte_pci_device *dev, uint32_t bar,
void **mapped_addr, uint64_t *phys_addr, uint64_t *size);
int dpdk_pci_device_read_config(struct rte_pci_device *dev, void *value, uint32_t len,
Expand Down
31 changes: 18 additions & 13 deletions lib/env_dpdk/pci_dpdk_2207.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,19 +59,22 @@ pci_device_get_devargs_2207(struct rte_pci_device *rte_dev)
return rte_dev->device.devargs;
}

static void
pci_device_copy_identifiers_2207(struct rte_pci_device *_dev, struct spdk_pci_device *dev)
static struct rte_pci_addr *
pci_device_get_addr_2207(struct rte_pci_device *_dev)
{
return &_dev->addr;
}

static struct rte_pci_id *
pci_device_get_id_2207(struct rte_pci_device *_dev)
{
return &_dev->id;
}

static int
pci_device_get_numa_node_2207(struct rte_pci_device *_dev)
{
dev->addr.domain = _dev->addr.domain;
dev->addr.bus = _dev->addr.bus;
dev->addr.dev = _dev->addr.devid;
dev->addr.func = _dev->addr.function;
dev->id.class_id = _dev->id.class_id;
dev->id.vendor_id = _dev->id.vendor_id;
dev->id.device_id = _dev->id.device_id;
dev->id.subvendor_id = _dev->id.subsystem_vendor_id;
dev->id.subdevice_id = _dev->id.subsystem_device_id;
dev->socket_id = _dev->device.numa_node;
return _dev->device.numa_node;
}

static int
Expand Down Expand Up @@ -243,7 +246,9 @@ struct dpdk_fn_table fn_table_2207 = {
.pci_device_vtophys = pci_device_vtophys_2207,
.pci_device_get_name = pci_device_get_name_2207,
.pci_device_get_devargs = pci_device_get_devargs_2207,
.pci_device_copy_identifiers = pci_device_copy_identifiers_2207,
.pci_device_get_addr = pci_device_get_addr_2207,
.pci_device_get_id = pci_device_get_id_2207,
.pci_device_get_numa_node = pci_device_get_numa_node_2207,
.pci_device_map_bar = pci_device_map_bar_2207,
.pci_device_read_config = pci_device_read_config_2207,
.pci_device_write_config = pci_device_write_config_2207,
Expand Down

0 comments on commit 5be703e

Please sign in to comment.