[Accel-config] [PATCH v1 01/11] accel-config: Add mdev path to device context
ramesh.thomas at intel.com
| Newsgroups | dev.linux.lists.accel-config |
|---|---|
| Message-ID | <[email protected]> |
From: Ramesh Thomas <ramesh.thomas(a)intel.com>
/sys/class/mdev_bus/<bdf> is used often to access mdevs associated
with the device. Generate and store in device so it need not be
constructed everytime.
Signed-off-by: Ramesh Thomas <ramesh.thomas(a)intel.com>
---
accfg/lib/libaccfg.c | 17 +++++++++++++++++
accfg/lib/private.h | 1 +
2 files changed, 18 insertions(+)
diff --git a/accfg/lib/libaccfg.c b/accfg/lib/libaccfg.c
index cd9da42..9b5615a 100644
--- a/accfg/lib/libaccfg.c
+++ b/accfg/lib/libaccfg.c
@@ -194,6 +194,7 @@ static void free_device(struct accfg_device *device, struct list_head *head)
list_del_from(head, &device->list);
free(device->device_path);
free(device->device_buf);
+ free(device->mdev_path);
free(device);
}
@@ -413,6 +414,7 @@ static void *add_device(void *parent, int id, const char *ctl_base, char *dev_pr
char *path;
int dfd;
int rc;
+ char *p;
path = calloc(1, strlen(ctl_base) + MAX_PARAM_LEN);
if (!path) {
@@ -470,6 +472,20 @@ static void *add_device(void *parent, int id, const char *ctl_base, char *dev_pr
goto err_dev_path;
}
+ device->mdev_path = strdup(device->device_path);
+ if (!device->mdev_path) {
+ err(ctx, "strdup of device_path failed\n");
+ goto err_dev_path;
+ }
+
+ if (asprintf(&p, "%s/%s", MDEV_BUS,
+ basename(dirname(device->mdev_path))) < 0) {
+ err(ctx, "device mdev_path allocation failed\n");
+ goto err_dev_path;
+ }
+ free(device->mdev_path);
+ device->mdev_path = p;
+
device->device_buf = calloc(1, strlen(device->device_path) +
MAX_PARAM_LEN);
if (!device->device_buf) {
@@ -490,6 +506,7 @@ static void *add_device(void *parent, int id, const char *ctl_base, char *dev_pr
err_dev_path:
err_read:
free(device->device_buf);
+ free(device->mdev_path);
free(device);
err_device:
free(path);
diff --git a/accfg/lib/private.h b/accfg/lib/private.h
index f38ff23..365d484 100644
--- a/accfg/lib/private.h
+++ b/accfg/lib/private.h
@@ -30,6 +30,7 @@ struct accfg_device {
struct list_node list;
int group_init;
char *device_path;
+ char *mdev_path;
char *device_buf;
char *device_type_str;
enum accfg_device_type type;
--
2.26.2