/* Copyright 2015 IBM Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. * See the License for the specific language governing permissions and * imitations under the License. */ #include #include #include #include #include #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; }