diff options
Diffstat (limited to 'common/blspec.c')
-rw-r--r-- | common/blspec.c | 31 |
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); |