[prev in list] [next in list] [prev in thread] [next in thread] 

List:       fwts-devel
Subject:    Re: [PATCH 3/4] acpi/wmi: Fix bug when counting WMI methods
From:       ivanhu <ivan.hu () canonical ! com>
Date:       2023-06-30 2:30:50
Message-ID: 78cd7aeb-41e0-a705-1f96-0255ebf75eac () canonical ! com
[Download RAW message or body]

Thanks!

Acked-by: Ivan Hu <ivan.hu@canonical.com>

On 6/29/23 04:42, Armin Wolf wrote:
> Until now, wmi_method_exist_count() counted all occurances
> of a specific WMxx method on all ACPI objects. This causes
> a test failure when another ACPI (WMI) object has the same
> WMxx method, which is perfectly legal according to the ACPI
> WMI specification. Fix this by only counting method occurances
> on the ACPI WMI object under test.
> 
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
> ---
>   src/acpi/wmi/wmi.c | 25 ++++++-------------------
>   1 file changed, 6 insertions(+), 19 deletions(-)
> 
> diff --git a/src/acpi/wmi/wmi.c b/src/acpi/wmi/wmi.c
> index be9e56d0..90cd7e38 100644
> --- a/src/acpi/wmi/wmi.c
> +++ b/src/acpi/wmi/wmi.c
> @@ -312,30 +312,16 @@ static void wmi_block_query_exist_count(
>   static void wmi_method_exist_count(
>   	fwts_framework *fw,
>   	const fwts_wdg_info *info,
> +	const char *object_name,
>   	const char *guid_str)
>   {
> -	fwts_list_link	*item;
> -	fwts_list *objects;
> -	const size_t wm_name_len = 4;
>   	char wm_name[5];
> -	char *objname = "";
> -	int  count = 0;
> +	int  count;
> 
>   	snprintf(wm_name, sizeof(wm_name), "WM%c%c",
>   		info->id.obj_id[0], info->id.obj_id[1]);
> 
> -	if ((objects = fwts_acpi_object_get_names()) == NULL)
> -		return;	/* Should not ever happen, bail out if it does */
> -
> -	fwts_list_foreach(item, objects) {
> -		char *name = fwts_list_data(char*, item);
> -		const size_t name_len = strlen(name);
> -		if (strncmp(wm_name, name + name_len - wm_name_len, wm_name_len) == 0) {
> -			objname = name;
> -			count++;
> -		}
> -	}
> -
> +	count = wmi_acpi_method_count_on_object(object_name, wm_name);
>   	if (count == 0) {
>   		fwts_failed(fw, LOG_LEVEL_LOW,
>   			"WMIMissingMethod",
> @@ -349,7 +335,8 @@ static void wmi_method_exist_count(
>   			"this is a firmware bug that leads to ambiguous behaviour.",
>   			guid_str, info->id.obj_id[0], info->id.obj_id[1]);
>   	} else
> -		fwts_passed(fw, "%s has associated method %s", guid_str, objname);
> +		fwts_passed(fw, "%s has associated method %s.%s",
> +			guid_str, object_name, wm_name);
>   }
> 
>   /*
> @@ -447,7 +434,7 @@ static void wmi_parse_wdg_data(
>   			fwts_log_info_verbatim(fw, "  WMI Method:");
>   			wmi_dump_object(fw, info);
>   			wmi_known_driver(fw, known);
> -			wmi_method_exist_count(fw, info, guid_str);
> +			wmi_method_exist_count(fw, info, acpi_object_name, guid_str);
>   		} else if (info->flags & FWTS_WMI_EVENT) {
>   			events = true;
>   			fwts_log_info_verbatim(fw, "  WMI Event:");
> --
> 2.30.2
> 
> 

-- 
fwts-devel mailing list
fwts-devel@lists.ubuntu.com
Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/fwts-devel

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic