[PATCH] Fixes for ordered_list_elements_from_package

From: Jorge Lopez
Date: Mon Jul 31 2023 - 12:22:45 EST


Address latest comments and requested changes to
ordered_list_elements_from_package

Signed-off-by: Jorge Lopez <jorge.lopez2@xxxxxx>

---
Based on the latest platform-drivers-x86.git/for-next
---
.../x86/hp/hp-bioscfg/order-list-attributes.c | 44 +++++++++----------
1 file changed, 21 insertions(+), 23 deletions(-)

diff --git a/drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c b/drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c
index 89e67db733eb..98e51759134c 100644
--- a/drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c
+++ b/drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c
@@ -134,8 +134,9 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
int value_len = 0;
int ret;
u32 size;
- u32 int_value = 0;
+ u32 type_int_value = 0;
int elem;
+ int ord_list_elem;
int reqs;
int eloc;
char *tmpstr = NULL;
@@ -147,10 +148,7 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
if (!order_obj)
return -EINVAL;

- for (elem = 1, eloc = 1; elem < order_obj_count; elem++, eloc++) {
- /* ONLY look at the first ORDERED_ELEM_CNT elements */
- if (eloc == ORD_ELEM_CNT)
- goto exit_list;
+ for (elem = 1, eloc = 1; eloc < ORD_ELEM_CNT; elem++, eloc++) {

switch (order_obj[elem].type) {
case ACPI_TYPE_STRING:
@@ -163,7 +161,7 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
}
break;
case ACPI_TYPE_INTEGER:
- int_value = (u32)order_obj[elem].integer.value;
+ type_int_value = (u32)order_obj[elem].integer.value;
break;
default:
pr_warn("Unsupported object type [%d]\n", order_obj[elem].type);
@@ -190,30 +188,30 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
sizeof(ordered_list_data->common.path));
break;
case IS_READONLY:
- ordered_list_data->common.is_readonly = int_value;
+ ordered_list_data->common.is_readonly = type_int_value;
break;
case DISPLAY_IN_UI:
- ordered_list_data->common.display_in_ui = int_value;
+ ordered_list_data->common.display_in_ui = type_int_value;
break;
case REQUIRES_PHYSICAL_PRESENCE:
- ordered_list_data->common.requires_physical_presence = int_value;
+ ordered_list_data->common.requires_physical_presence = type_int_value;
break;
case SEQUENCE:
- ordered_list_data->common.sequence = int_value;
+ ordered_list_data->common.sequence = type_int_value;
break;
case PREREQUISITES_SIZE:
- ordered_list_data->common.prerequisites_size = int_value;
- if (int_value > MAX_PREREQUISITES_SIZE)
+ ordered_list_data->common.prerequisites_size = type_int_value;
+ if (type_int_value > MAX_PREREQUISITES_SIZE)
pr_warn("Prerequisites size value exceeded the maximum number of elements supported or data may be malformed\n");

/*
- * This HACK is needed to keep the expected
+ * This step is needed to keep the expected
* element list pointing to the right obj[elem].type
* when the size is zero. PREREQUISITES
* object is omitted by BIOS when the size is
* zero.
*/
- if (int_value == 0)
+ if (type_int_value == 0)
eloc++;
break;
case PREREQUISITES:
@@ -237,21 +235,21 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
break;

case SECURITY_LEVEL:
- ordered_list_data->common.security_level = int_value;
+ ordered_list_data->common.security_level = type_int_value;
break;

case ORD_LIST_SIZE:
- ordered_list_data->elements_size = int_value;
- if (int_value > MAX_ELEMENTS_SIZE)
+ ordered_list_data->elements_size = type_int_value;
+ if (type_int_value > MAX_ELEMENTS_SIZE)
pr_warn("Ordered List size value exceeded the maximum number of elements supported or data may be malformed\n");
/*
- * This HACK is needed to keep the expected
+ * This step is needed to keep the expected
* element list pointing to the right obj[elem].type
* when the size is zero. ORD_LIST_ELEMENTS
* object is omitted by BIOS when the size is
* zero.
*/
- if (int_value == 0)
+ if (type_int_value == 0)
eloc++;
break;
case ORD_LIST_ELEMENTS:
@@ -261,7 +259,7 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
* Ordered list data is stored in hex and comma separated format
* Convert the data and split it to show each element
*/
- ret = hp_convert_hexstr_to_str(str_value, value_len, &tmpstr, &tmp_len);
+ ret = hp_convert_hexstr_to_str(str_value, size, &tmpstr, &tmp_len);
if (ret)
goto exit_list;

@@ -272,10 +270,10 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
tmpstr,
sizeof(ordered_list_data->elements[0]));

- for (elem = 1; elem < MAX_ELEMENTS_SIZE && part; elem++) {
- strscpy(ordered_list_data->elements[elem],
+ for (ord_list_elem = 1; ord_list_elem < MAX_ELEMENTS_SIZE && part; ord_list_elem++) {
+ strscpy(ordered_list_data->elements[ord_list_elem],
part,
- sizeof(ordered_list_data->elements[elem]));
+ sizeof(ordered_list_data->elements[ord_list_elem]));
part = strsep(&part_tmp, SEMICOLON_SEP);
}

--
2.34.1