diff options
author | 2023-10-10 14:33:42 +0000 | |
---|---|---|
committer | 2023-10-10 14:33:42 +0000 | |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/external/opal-prd/module.c | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/external/opal-prd/module.c')
-rw-r--r-- | roms/skiboot/external/opal-prd/module.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/roms/skiboot/external/opal-prd/module.c b/roms/skiboot/external/opal-prd/module.c new file mode 100644 index 000000000..9c9c0af84 --- /dev/null +++ b/roms/skiboot/external/opal-prd/module.c @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +/* + * Load kernel modules needed for opal-prd + * + * Copyright 2015 IBM Corp. + */ + +#include <stdlib.h> +#include <unistd.h> +#include <err.h> +#include <sys/types.h> +#include <sys/wait.h> + +#include "module.h" +#include "opal-prd.h" + +int insert_module(const char *module) +{ + int status; + pid_t pid; + + pid = fork(); + if (!pid) { + execlp("modprobe", "modprobe", module, NULL); + err(EXIT_FAILURE, "Failed to run modprobe"); + } + + pid = waitpid(pid, &status, 0); + if (pid < 0) { + pr_log(LOG_ERR, "KMOD: waitpid failed for " + "modprobe process: %m"); + return -1; + } + + if (!WIFEXITED(status)) { + pr_log(LOG_WARNING, "KMOD: modprobe %s: process didn't " + "exit cleanly", module); + return -1; + } + + if (WEXITSTATUS(status) != 0) { + pr_log(LOG_WARNING, "KMOD: modprobe %s failed, status %d", + module, WEXITSTATUS(status)); + return -1; + } + + return 0; +} + |