[Accel-config] [PATCH 1/6] accel-config: Add driver_name attribute to wq context
Ramesh Thomas <ramesh.thomas at intel.com> Mon, 31 Jan 2022 18:53:14 -0800
| Newsgroups | dev.linux.lists.accel-config |
|---|---|
| Message-ID | <[email protected]> |
Add a driver_name memember to wq context structure and API to set it. It
will be initialized with the value stored in sysfs. A NULL will be
stored if driver_name attribute is not present.
Signed-off-by: Ramesh Thomas <ramesh.thomas(a)intel.com>
---
accfg/lib/libaccel-config.sym | 7 +++++++
accfg/lib/libaccfg.c | 24 ++++++++++++++++++++++++
accfg/lib/private.h | 1 +
accfg/libaccel_config.h | 3 +++
4 files changed, 35 insertions(+)
diff --git a/accfg/lib/libaccel-config.sym b/accfg/lib/libaccel-config.sym
index 560883a..fde9251 100644
--- a/accfg/lib/libaccel-config.sym
+++ b/accfg/lib/libaccel-config.sym
@@ -179,3 +179,10 @@ global:
accfg_group_set_read_buffers_allowed;
accfg_group_set_use_read_buffer_limit;
} LIBACCFG_11;
+
+LIBACCFG_13 {
+global:
+ accfg_wq_set_str_driver_name;
+ accfg_wq_get_driver_name;
+ accfg_wq_driver_name_validate;
+} LIBACCFG_12;
diff --git a/accfg/lib/libaccfg.c b/accfg/lib/libaccfg.c
index 86ee517..5bd4623 100644
--- a/accfg/lib/libaccfg.c
+++ b/accfg/lib/libaccfg.c
@@ -827,6 +827,7 @@ static void *add_wq(void *parent, int id, const char *wq_base,
wq->cdev_minor = accfg_get_param_long(ctx, dfd, "cdev_minor");
wq_type = accfg_get_param_str(ctx, dfd, "type");
wq->name = accfg_get_param_str(ctx, dfd, "name");
+ wq->driver_name = accfg_get_param_str(ctx, dfd, "driver_name");
wq->threshold = accfg_get_param_long(ctx, dfd, "threshold");
wq->max_batch_size = accfg_get_param_long(ctx, dfd, "max_batch_size");
wq->max_transfer_size = accfg_get_param_long(ctx, dfd, "max_transfer_size");
@@ -2062,6 +2063,28 @@ ACCFG_EXPORT const char *accfg_wq_get_type_name(struct accfg_wq *wq)
return wq->name;
}
+ACCFG_EXPORT const char *accfg_wq_get_driver_name(struct accfg_wq *wq)
+{
+ return wq->driver_name;
+}
+
+ACCFG_EXPORT int accfg_wq_driver_name_validate(struct accfg_wq *wq,
+ const char *drv_name)
+{
+ int rc = 0;
+ char *path = NULL;
+ struct accfg_device *device = accfg_wq_get_device(wq);
+
+ rc = get_driver_bind_path(device->bus_type_str, wq->driver_name, &path);
+ if (rc < 0)
+ return 0;
+
+ rc = access(path, F_OK);
+ free(path);
+
+ return !rc;
+}
+
ACCFG_EXPORT uint64_t accfg_wq_get_size(struct accfg_wq *wq)
{
return wq->size;
@@ -2454,6 +2477,7 @@ ACCFG_EXPORT int accfg_wq_set_str_##field( \
accfg_wq_set_str_field(wq, val, mode)
accfg_wq_set_str_field(wq, val, name)
+accfg_wq_set_str_field(wq, val, driver_name)
static int wq_parse_type(struct accfg_wq *wq, char *wq_type);
diff --git a/accfg/lib/private.h b/accfg/lib/private.h
index b09297e..f88044c 100644
--- a/accfg/lib/private.h
+++ b/accfg/lib/private.h
@@ -121,6 +121,7 @@ struct accfg_wq {
unsigned int threshold;
char *mode;
char *name;
+ char *driver_name;
enum accfg_wq_type type;
char *state;
unsigned int max_batch_size;
diff --git a/accfg/libaccel_config.h b/accfg/libaccel_config.h
index 8bd6dda..1aad3f3 100644
--- a/accfg/libaccel_config.h
+++ b/accfg/libaccel_config.h
@@ -293,6 +293,8 @@ int accfg_wq_get_block_on_fault(struct accfg_wq *wq);
enum accfg_wq_state accfg_wq_get_state(struct accfg_wq *wq);
int accfg_wq_get_cdev_minor(struct accfg_wq *wq);
const char *accfg_wq_get_type_name(struct accfg_wq *wq);
+const char *accfg_wq_get_driver_name(struct accfg_wq *wq);
+int accfg_wq_driver_name_validate(struct accfg_wq *wq, const char *drv_name);
enum accfg_wq_type accfg_wq_get_type(struct accfg_wq *wq);
unsigned int accfg_wq_get_max_batch_size(struct accfg_wq *wq);
uint64_t accfg_wq_get_max_transfer_size(struct accfg_wq *wq);
@@ -313,6 +315,7 @@ int accfg_wq_set_str_mode(struct accfg_wq *wq, const char *val);
int accfg_wq_set_mode(struct accfg_wq *wq, enum accfg_wq_mode mode);
int accfg_wq_set_str_type(struct accfg_wq *wq, const char *val);
int accfg_wq_set_str_name(struct accfg_wq *wq, const char *val);
+int accfg_wq_set_str_driver_name(struct accfg_wq *wq, const char *val);
int accfg_wq_enable(struct accfg_wq *wq);
int accfg_wq_disable(struct accfg_wq *wq, bool force);
int accfg_wq_priority_boundary(struct accfg_wq *wq);
--
2.31.1