From ef8f037e78f0d20aa16b57628df0d54e9a18488d Mon Sep 17 00:00:00 2001 From: James Roy Date: Mon, 25 Nov 2024 18:15:36 +0800 Subject: [PATCH] device: Optimize device_get_binding search efficiency Optimize 'device_get_binding' function search so that when a matching device is found, it returns NULL if it is not ready. Signed-off-by: James Roy --- kernel/device.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/kernel/device.c b/kernel/device.c index 6edf63bd4d1..7e882269580 100644 --- a/kernel/device.c +++ b/kernel/device.c @@ -35,20 +35,10 @@ const struct device *z_impl_device_get_binding(const char *name) return NULL; } - /* Split the search into two loops: in the common scenario, where - * device names are stored in ROM (and are referenced by the user - * with CONFIG_* macros), only cheap pointer comparisons will be - * performed. Reserve string comparisons for a fallback. - */ + /* Return NULL if the device matching 'name' is not ready. */ STRUCT_SECTION_FOREACH(device, dev) { - if (z_impl_device_is_ready(dev) && (dev->name == name)) { - return dev; - } - } - - STRUCT_SECTION_FOREACH(device, dev) { - if (z_impl_device_is_ready(dev) && (strcmp(name, dev->name) == 0)) { - return dev; + if ((dev->name == name) || (strcmp(name, dev->name) == 0)) { + return z_impl_device_is_ready(dev) ? dev : NULL; } }