summaryrefslogtreecommitdiffstats
path: root/common/blspec.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/blspec.c')
-rw-r--r--common/blspec.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/common/blspec.c b/common/blspec.c
index 6171461a72..2c682e1990 100644
--- a/common/blspec.c
+++ b/common/blspec.c
@@ -420,6 +420,30 @@ out:
}
/*
+ * entry_is_match_machine_id - check if a bootspec entry is match with
+ * the machine id given by global variable.
+ *
+ * returns true if the entry is match, false otherwise
+ */
+
+static bool entry_is_match_machine_id(struct blspec_entry *entry)
+{
+ int ret = true;
+ const char *env_machineid = getenv_nonempty("global.boot.machine_id");
+
+ if (env_machineid) {
+ const char *machineid = blspec_entry_var_get(entry, "machine-id");
+ if (!machineid || strcmp(machineid, env_machineid)) {
+ pr_debug("ignoring entry with missmatched machine-id " \
+ "\"%s\" != \"%s\"\n", env_machineid, machineid);
+ ret = false;
+ }
+ }
+
+ return ret;
+}
+
+/*
* blspec_scan_directory - scan over a directory
*
* Given a root path collects all bootentries entries found under /bootentries/entries/.
@@ -504,6 +528,11 @@ int blspec_scan_directory(struct bootentries *bootentries, const char *root)
continue;
}
+ if (!entry_is_match_machine_id(entry)) {
+ blspec_entry_free(&entry->entry);
+ continue;
+ }
+
found++;
if (entry->cdev && entry->cdev->dev) {
@@ -756,4 +785,4 @@ static int blspec_init(void)
{
return bootentry_register_provider(blspec_bootentry_provider);
}
-device_initcall(blspec_init); \ No newline at end of file
+device_initcall(blspec_init);