platform/x86: wmi: more detailed error reporting in find_guid()
authorBarnabás Pőcze <pobrn@protonmail.com>
Sat, 4 Sep 2021 17:56:44 +0000 (17:56 +0000)
committerHans de Goede <hdegoede@redhat.com>
Tue, 14 Sep 2021 10:26:03 +0000 (12:26 +0200)
Make `find_guid()` return an acpi_status, and make it handle NULL
pointer GUID strings; and adapt users accordingly.

Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Link: https://lore.kernel.org/r/20210904175450.156801-31-pobrn@protonmail.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/wmi.c

index 441d4dd..e6997be 100644 (file)
@@ -114,22 +114,27 @@ static struct platform_driver acpi_wmi_driver = {
  * GUID parsing functions
  */
 
-static bool find_guid(const char *guid_string, struct wmi_block **out)
+static acpi_status find_guid(const char *guid_string, struct wmi_block **out)
 {
        guid_t guid_input;
        struct wmi_block *wblock;
 
+       if (!guid_string)
+               return AE_BAD_PARAMETER;
+
        if (guid_parse(guid_string, &guid_input))
-               return false;
+               return AE_BAD_PARAMETER;
 
        list_for_each_entry(wblock, &wmi_block_list, list) {
                if (guid_equal(&wblock->gblock.guid, &guid_input)) {
                        if (out)
                                *out = wblock;
-                       return true;
+
+                       return AE_OK;
                }
        }
-       return false;
+
+       return AE_NOT_FOUND;
 }
 
 static const void *find_guid_context(struct wmi_block *wblock,
@@ -271,9 +276,12 @@ acpi_status wmi_evaluate_method(const char *guid_string, u8 instance, u32 method
                                const struct acpi_buffer *in, struct acpi_buffer *out)
 {
        struct wmi_block *wblock = NULL;
+       acpi_status status;
+
+       status = find_guid(guid_string, &wblock);
+       if (ACPI_FAILURE(status))
+               return status;
 
-       if (!find_guid(guid_string, &wblock))
-               return AE_ERROR;
        return wmidev_evaluate_method(&wblock->dev, instance, method_id,
                                      in, out);
 }
@@ -410,12 +418,11 @@ acpi_status wmi_query_block(const char *guid_string, u8 instance,
                            struct acpi_buffer *out)
 {
        struct wmi_block *wblock;
+       acpi_status status;
 
-       if (!guid_string)
-               return AE_BAD_PARAMETER;
-
-       if (!find_guid(guid_string, &wblock))
-               return AE_ERROR;
+       status = find_guid(guid_string, &wblock);
+       if (ACPI_FAILURE(status))
+               return status;
 
        return __query_block(wblock, instance, out);
 }
@@ -450,12 +457,14 @@ acpi_status wmi_set_block(const char *guid_string, u8 instance,
        struct acpi_object_list input;
        union acpi_object params[2];
        char method[WMI_ACPI_METHOD_NAME_SIZE];
+       acpi_status status;
 
-       if (!guid_string || !in)
+       if (!in)
                return AE_BAD_DATA;
 
-       if (!find_guid(guid_string, &wblock))
-               return AE_ERROR;
+       status = find_guid(guid_string, &wblock);
+       if (ACPI_FAILURE(status))
+               return status;
 
        block = &wblock->gblock;
        handle = wblock->acpi_device->handle;
@@ -660,7 +669,7 @@ EXPORT_SYMBOL_GPL(wmi_get_event_data);
  */
 bool wmi_has_guid(const char *guid_string)
 {
-       return find_guid(guid_string, NULL);
+       return ACPI_SUCCESS(find_guid(guid_string, NULL));
 }
 EXPORT_SYMBOL_GPL(wmi_has_guid);
 
@@ -675,8 +684,10 @@ EXPORT_SYMBOL_GPL(wmi_has_guid);
 char *wmi_get_acpi_device_uid(const char *guid_string)
 {
        struct wmi_block *wblock = NULL;
+       acpi_status status;
 
-       if (!find_guid(guid_string, &wblock))
+       status = find_guid(guid_string, &wblock);
+       if (ACPI_FAILURE(status))
                return NULL;
 
        return acpi_device_uid(wblock->acpi_device);