From: Yu Watanabe Date: Mon, 16 Dec 2024 16:25:27 +0000 (+0900) Subject: boot: introduce smbios_raw_info_get_cached() to cache populated SMBIOS raw info X-Git-Tag: v258-rc1~1838^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c4e351861197ec0e20096d0bb3c7564663e8218;p=thirdparty%2Fsystemd.git boot: introduce smbios_raw_info_get_cached() to cache populated SMBIOS raw info Then, drop cache in smbios_info_populate(). No functional change, just refactoring and preparation for later commit. --- diff --git a/src/boot/chid.c b/src/boot/chid.c index dca2f364e08..38fbc61d7cc 100644 --- a/src/boot/chid.c +++ b/src/boot/chid.c @@ -58,13 +58,10 @@ typedef struct SmbiosInfo { } SmbiosInfo; static void smbios_info_populate(SmbiosInfo *ret_info) { - static RawSmbiosInfo raw = {}; - static bool raw_info_populated = false; + assert(ret_info); - if (!raw_info_populated) { - smbios_raw_info_populate(&raw); - raw_info_populated = true; - } + RawSmbiosInfo raw; + smbios_raw_info_get_cached(&raw); ret_info->smbios_fields[CHID_SMBIOS_MANUFACTURER] = smbios_to_hashable_string(raw.manufacturer); ret_info->smbios_fields[CHID_SMBIOS_PRODUCT_NAME] = smbios_to_hashable_string(raw.product_name); diff --git a/src/boot/smbios.c b/src/boot/smbios.c index 329619f85bb..e1bcd62e2c7 100644 --- a/src/boot/smbios.c +++ b/src/boot/smbios.c @@ -259,3 +259,17 @@ void smbios_raw_info_populate(RawSmbiosInfo *ret_info) { ret_info->baseboard_product = NULL; } } + +void smbios_raw_info_get_cached(RawSmbiosInfo *ret_info) { + static RawSmbiosInfo info = {}; + static bool cached = false; + + assert(ret_info); + + if (!cached) { + smbios_raw_info_populate(&info); + cached = true; + } + + *ret_info = info; +} diff --git a/src/boot/smbios.h b/src/boot/smbios.h index 34625c85726..83c3c435898 100644 --- a/src/boot/smbios.h +++ b/src/boot/smbios.h @@ -17,3 +17,4 @@ typedef struct RawSmbiosInfo { } RawSmbiosInfo; void smbios_raw_info_populate(RawSmbiosInfo *ret_info); +void smbios_raw_info_get_cached(RawSmbiosInfo *ret_info);