]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
boot: introduce smbios_raw_info_get_cached() to cache populated SMBIOS raw info
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Dec 2024 16:25:27 +0000 (01:25 +0900)
committeranonymix007 <48598263+anonymix007@users.noreply.github.com>
Mon, 16 Dec 2024 18:02:54 +0000 (21:02 +0300)
Then, drop cache in smbios_info_populate().
No functional change, just refactoring and preparation for later commit.

src/boot/chid.c
src/boot/smbios.c
src/boot/smbios.h

index dca2f364e0858fb26f42073f198d9aa3fe87c5b8..38fbc61d7cce7d089079c82b082af112ab8ecaa6 100644 (file)
@@ -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);
index 329619f85bb508dc083effc010adc44aed37ec1b..e1bcd62e2c792ec0cbe66b92a053f95dcd1a0aee 100644 (file)
@@ -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;
+}
index 34625c85726cfb20d9337a84fafee27f361b73d5..83c3c43589869eec30b649bba9cd8bb35d923937 100644 (file)
@@ -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);