|
Torsten Duwe |
614781 |
From 92bf269fbfe94018f15405e1644049de7c7b46dd Mon Sep 17 00:00:00 2001
|
|
Torsten Duwe |
614781 |
From: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
614781 |
Date: Mon, 27 Jun 2022 09:36:50 +0100
|
|
Torsten Duwe |
614781 |
Subject: [PATCH] crypto: qat - change behaviour of
|
|
Torsten Duwe |
614781 |
adf_cfg_add_key_value_param()
|
|
Torsten Duwe |
614781 |
Git-commit: 92bf269fbfe94018f15405e1644049de7c7b46dd
|
|
Torsten Duwe |
614781 |
Patch-mainline: v6.0-rc1
|
|
Torsten Duwe |
614781 |
References: jsc#PED-1073
|
|
Torsten Duwe |
614781 |
|
|
Torsten Duwe |
614781 |
The function adf_cfg_add_key_value_param() allows to insert duplicates
|
|
Torsten Duwe |
614781 |
entries in the key value store of the driver.
|
|
Torsten Duwe |
614781 |
|
|
Torsten Duwe |
614781 |
Change the behaviour of that function to the following policy:
|
|
Torsten Duwe |
614781 |
- if the key doesn't exist, add it;
|
|
Torsten Duwe |
614781 |
- if the key already exists with a different value, then delete it and
|
|
Torsten Duwe |
614781 |
replace it with a new one containing the new value;
|
|
Torsten Duwe |
614781 |
- if the key exists with the same value, then return without doing
|
|
Torsten Duwe |
614781 |
anything.
|
|
Torsten Duwe |
614781 |
|
|
Torsten Duwe |
614781 |
The behaviour of this function has been changed in order to easily
|
|
Torsten Duwe |
614781 |
update key-values in the driver database. In particular this is required
|
|
Torsten Duwe |
614781 |
to update the value of the ServiceEnables key used to change the service
|
|
Torsten Duwe |
614781 |
loaded on a device.
|
|
Torsten Duwe |
614781 |
|
|
Torsten Duwe |
614781 |
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
614781 |
Reviewed-by: Adam Guerin <adam.guerin@intel.com>
|
|
Torsten Duwe |
614781 |
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
|
|
Torsten Duwe |
614781 |
Reviewed-by: Wojciech Ziemba <wojciech.ziemba@intel.com>
|
|
Torsten Duwe |
614781 |
Reviewed-by: Vladis Dronov <vdronov@redhat.com>
|
|
Torsten Duwe |
614781 |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
614781 |
Signed-off-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
614781 |
|
|
Torsten Duwe |
614781 |
---
|
|
Torsten Duwe |
614781 |
drivers/crypto/qat/qat_common/adf_cfg.c | 41 ++++++++++++++++++++++++-
|
|
Torsten Duwe |
614781 |
1 file changed, 40 insertions(+), 1 deletion(-)
|
|
Torsten Duwe |
614781 |
|
|
Torsten Duwe |
614781 |
diff --git a/drivers/crypto/qat/qat_common/adf_cfg.c b/drivers/crypto/qat/qat_common/adf_cfg.c
|
|
Torsten Duwe |
614781 |
index b5b208cbe5a12..e61b3e13db3bd 100644
|
|
Torsten Duwe |
614781 |
--- a/drivers/crypto/qat/qat_common/adf_cfg.c
|
|
Torsten Duwe |
614781 |
+++ b/drivers/crypto/qat/qat_common/adf_cfg.c
|
|
Torsten Duwe |
614781 |
@@ -128,6 +128,24 @@ static void adf_cfg_keyval_add(struct adf_cfg_key_val *new,
|
|
Torsten Duwe |
614781 |
list_add_tail(&new->list, &sec->param_head);
|
|
Torsten Duwe |
614781 |
}
|
|
Torsten Duwe |
614781 |
|
|
Torsten Duwe |
614781 |
+static void adf_cfg_keyval_remove(const char *key, struct adf_cfg_section *sec)
|
|
Torsten Duwe |
614781 |
+{
|
|
Torsten Duwe |
614781 |
+ struct list_head *head = &sec->param_head;
|
|
Torsten Duwe |
614781 |
+ struct list_head *list_ptr, *tmp;
|
|
Torsten Duwe |
614781 |
+
|
|
Torsten Duwe |
614781 |
+ list_for_each_prev_safe(list_ptr, tmp, head) {
|
|
Torsten Duwe |
614781 |
+ struct adf_cfg_key_val *ptr =
|
|
Torsten Duwe |
614781 |
+ list_entry(list_ptr, struct adf_cfg_key_val, list);
|
|
Torsten Duwe |
614781 |
+
|
|
Torsten Duwe |
614781 |
+ if (strncmp(ptr->key, key, sizeof(ptr->key)))
|
|
Torsten Duwe |
614781 |
+ continue;
|
|
Torsten Duwe |
614781 |
+
|
|
Torsten Duwe |
614781 |
+ list_del(list_ptr);
|
|
Torsten Duwe |
614781 |
+ kfree(ptr);
|
|
Torsten Duwe |
614781 |
+ break;
|
|
Torsten Duwe |
614781 |
+ }
|
|
Torsten Duwe |
614781 |
+}
|
|
Torsten Duwe |
614781 |
+
|
|
Torsten Duwe |
614781 |
static void adf_cfg_keyval_del_all(struct list_head *head)
|
|
Torsten Duwe |
614781 |
{
|
|
Torsten Duwe |
614781 |
struct list_head *list_ptr, *tmp;
|
|
Torsten Duwe |
614781 |
@@ -208,7 +226,8 @@ static int adf_cfg_key_val_get(struct adf_accel_dev *accel_dev,
|
|
Torsten Duwe |
614781 |
* @type: Type - string, int or address
|
|
Torsten Duwe |
614781 |
*
|
|
Torsten Duwe |
614781 |
* Function adds configuration key - value entry in the appropriate section
|
|
Torsten Duwe |
614781 |
- * in the given acceleration device
|
|
Torsten Duwe |
614781 |
+ * in the given acceleration device. If the key exists already, the value
|
|
Torsten Duwe |
614781 |
+ * is updated.
|
|
Torsten Duwe |
614781 |
* To be used by QAT device specific drivers.
|
|
Torsten Duwe |
614781 |
*
|
|
Torsten Duwe |
614781 |
* Return: 0 on success, error code otherwise.
|
|
Torsten Duwe |
614781 |
@@ -222,6 +241,8 @@ int adf_cfg_add_key_value_param(struct adf_accel_dev *accel_dev,
|
|
Torsten Duwe |
614781 |
struct adf_cfg_key_val *key_val;
|
|
Torsten Duwe |
614781 |
struct adf_cfg_section *section = adf_cfg_sec_find(accel_dev,
|
|
Torsten Duwe |
614781 |
section_name);
|
|
Torsten Duwe |
614781 |
+ char temp_val[ADF_CFG_MAX_VAL_LEN_IN_BYTES];
|
|
Torsten Duwe |
614781 |
+
|
|
Torsten Duwe |
614781 |
if (!section)
|
|
Torsten Duwe |
614781 |
return -EFAULT;
|
|
Torsten Duwe |
614781 |
|
|
Torsten Duwe |
614781 |
@@ -246,6 +267,24 @@ int adf_cfg_add_key_value_param(struct adf_accel_dev *accel_dev,
|
|
Torsten Duwe |
614781 |
return -EINVAL;
|
|
Torsten Duwe |
614781 |
}
|
|
Torsten Duwe |
614781 |
key_val->type = type;
|
|
Torsten Duwe |
614781 |
+
|
|
Torsten Duwe |
614781 |
+ /* Add the key-value pair as below policy:
|
|
Torsten Duwe |
614781 |
+ * 1. if the key doesn't exist, add it;
|
|
Torsten Duwe |
614781 |
+ * 2. if the key already exists with a different value then update it
|
|
Torsten Duwe |
614781 |
+ * to the new value (the key is deleted and the newly created
|
|
Torsten Duwe |
614781 |
+ * key_val containing the new value is added to the database);
|
|
Torsten Duwe |
614781 |
+ * 3. if the key exists with the same value, then return without doing
|
|
Torsten Duwe |
614781 |
+ * anything (the newly created key_val is freed).
|
|
Torsten Duwe |
614781 |
+ */
|
|
Torsten Duwe |
614781 |
+ if (!adf_cfg_key_val_get(accel_dev, section_name, key, temp_val)) {
|
|
Torsten Duwe |
614781 |
+ if (strncmp(temp_val, key_val->val, sizeof(temp_val))) {
|
|
Torsten Duwe |
614781 |
+ adf_cfg_keyval_remove(key, section);
|
|
Torsten Duwe |
614781 |
+ } else {
|
|
Torsten Duwe |
614781 |
+ kfree(key_val);
|
|
Torsten Duwe |
614781 |
+ return 0;
|
|
Torsten Duwe |
614781 |
+ }
|
|
Torsten Duwe |
614781 |
+ }
|
|
Torsten Duwe |
614781 |
+
|
|
Torsten Duwe |
614781 |
down_write(&cfg->lock);
|
|
Torsten Duwe |
614781 |
adf_cfg_keyval_add(key_val, section);
|
|
Torsten Duwe |
614781 |
up_write(&cfg->lock);
|
|
Torsten Duwe |
614781 |
--
|
|
Torsten Duwe |
614781 |
2.35.3
|
|
Torsten Duwe |
614781 |
|