efi/dev-path-parser: Refactor _UID handling to use acpi_dev_uid_to_integer()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 13 Sep 2022 16:31:47 +0000 (19:31 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 19 Sep 2022 16:34:42 +0000 (18:34 +0200)
ACPI utils provide acpi_dev_uid_to_integer() helper to extract _UID as
an integer. Use it instead of custom approach.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/firmware/efi/dev-path-parser.c

index eb9c65f..f80d87c 100644 (file)
 static long __init parse_acpi_path(const struct efi_dev_path *node,
                                   struct device *parent, struct device **child)
 {
-       char hid[ACPI_ID_LEN], uid[11]; /* UINT_MAX + null byte */
        struct acpi_device *adev;
        struct device *phys_dev;
+       char hid[ACPI_ID_LEN];
+       u64 uid;
+       int ret;
 
        if (node->header.length != 12)
                return -EINVAL;
@@ -27,12 +29,12 @@ static long __init parse_acpi_path(const struct efi_dev_path *node,
                'A' + ((node->acpi.hid >>  5) & 0x1f) - 1,
                'A' + ((node->acpi.hid >>  0) & 0x1f) - 1,
                        node->acpi.hid >> 16);
-       sprintf(uid, "%u", node->acpi.uid);
 
        for_each_acpi_dev_match(adev, hid, NULL, -1) {
-               if (adev->pnp.unique_id && !strcmp(adev->pnp.unique_id, uid))
+               ret = acpi_dev_uid_to_integer(adev, &uid);
+               if (ret == 0 && node->acpi.uid == uid)
                        break;
-               if (!adev->pnp.unique_id && node->acpi.uid == 0)
+               if (ret == -ENODATA && node->acpi.uid == 0)
                        break;
        }
        if (!adev)