[PATCH 3/3] discover: Clear default-boot-device when invalidated
Samuel Mendoza-Jonas
sam.mj at au1.ibm.com
Fri Apr 10 13:52:07 AEST 2015
Update the clear_ipmi_bootdev functions to optionally invalidate the
next- or default-boot-device for their respective machines.
If a client invalidates the ipmi_bootdev in the config, invalidate the
respective bootdev.
Signed-off-by: Samuel Mendoza-Jonas <sam.mj at au1.ibm.com>
---
discover/platform-powerpc.c | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index 5cbf1b8..2c74422 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -38,7 +38,8 @@ struct platform_powerpc {
struct platform_powerpc *platform,
uint8_t *bootdev, bool *persistent);
int (*clear_ipmi_bootdev)(
- struct platform_powerpc *platform);
+ struct platform_powerpc *platform,
+ bool persistent);
};
static const char *known_params[] = {
@@ -682,6 +683,14 @@ static int update_config(struct platform_powerpc *platform,
val = tmp = talloc_asprintf(platform, "%d",
config->autoboot_timeout_sec);
+ if (config->ipmi_bootdev == IPMI_BOOTDEV_INVALID &&
+ platform->clear_ipmi_bootdev) {
+ platform->clear_ipmi_bootdev(platform,
+ config->ipmi_bootdev_persistent);
+ config->ipmi_bootdev = IPMI_BOOTDEV_NONE;
+ config->ipmi_bootdev_persistent = false;
+ }
+
update_string_config(platform, "petitboot,timeout", val);
if (tmp)
talloc_free(tmp);
@@ -797,10 +806,16 @@ static int write_bootdev_sysparam(const char *name, uint8_t val)
}
static int clear_ipmi_bootdev_sysparams(
- struct platform_powerpc *platform __attribute__((unused)))
+ struct platform_powerpc *platform __attribute__((unused)),
+ bool persistent)
{
- /* invalidate next-boot-device setting */
- write_bootdev_sysparam("next-boot-device", 0xff);
+ if (persistent) {
+ /* invalidate default-boot-device setting */
+ write_bootdev_sysparam("default-boot-device", 0xff);
+ } else {
+ /* invalidate next-boot-device setting */
+ write_bootdev_sysparam("next-boot-device", 0xff);
+ }
return 0;
}
@@ -827,7 +842,8 @@ static int get_ipmi_bootdev_sysparams(
return 0;
}
-static int clear_ipmi_bootdev_ipmi(struct platform_powerpc *platform)
+static int clear_ipmi_bootdev_ipmi(struct platform_powerpc *platform,
+ bool persistent __attribute__((unused)))
{
uint16_t resp_len;
uint8_t resp[1];
@@ -956,7 +972,7 @@ static void pre_boot(struct platform *p, const struct config *config)
struct platform_powerpc *platform = to_platform_powerpc(p);
if (!config->ipmi_bootdev_persistent && platform->clear_ipmi_bootdev)
- platform->clear_ipmi_bootdev(platform);
+ platform->clear_ipmi_bootdev(platform, false);
}
static int get_sysinfo(struct platform *p, struct system_info *sysinfo)
--
2.1.0
More information about the Petitboot
mailing list