mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branch 'smp-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull SMP hotplug notifier removal from Thomas Gleixner: "This is the final cleanup of the hotplug notifier infrastructure. The series has been reintgrated in the last two days because there came a new driver using the old infrastructure via the SCSI tree. Summary: - convert the last leftover drivers utilizing notifiers - fixup for a completely broken hotplug user - prevent setup of already used states - removal of the notifiers - treewide cleanup of hotplug state names - consolidation of state space There is a sphinx based documentation pending, but that needs review from the documentation folks" * 'smp-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: irqchip/armada-xp: Consolidate hotplug state space irqchip/gic: Consolidate hotplug state space coresight/etm3/4x: Consolidate hotplug state space cpu/hotplug: Cleanup state names cpu/hotplug: Remove obsolete cpu hotplug register/unregister functions staging/lustre/libcfs: Convert to hotplug state machine scsi/bnx2i: Convert to hotplug state machine scsi/bnx2fc: Convert to hotplug state machine cpu/hotplug: Prevent overwriting of callbacks x86/msr: Remove bogus cleanup from the error path bus: arm-ccn: Prevent hotplug callback leak perf/x86/intel/cstate: Prevent hotplug callback leak ARM/imx/mmcd: Fix broken cpu hotplug handling scsi: qedi: Convert to hotplug state machine
This commit is contained in:
commit
b272f732f8
72 changed files with 308 additions and 689 deletions
|
|
@ -1538,30 +1538,6 @@ config NOTIFIER_ERROR_INJECTION
|
|||
|
||||
Say N if unsure.
|
||||
|
||||
config CPU_NOTIFIER_ERROR_INJECT
|
||||
tristate "CPU notifier error injection module"
|
||||
depends on HOTPLUG_CPU && NOTIFIER_ERROR_INJECTION
|
||||
help
|
||||
This option provides a kernel module that can be used to test
|
||||
the error handling of the cpu notifiers by injecting artificial
|
||||
errors to CPU notifier chain callbacks. It is controlled through
|
||||
debugfs interface under /sys/kernel/debug/notifier-error-inject/cpu
|
||||
|
||||
If the notifier call chain should be failed with some events
|
||||
notified, write the error code to "actions/<notifier event>/error".
|
||||
|
||||
Example: Inject CPU offline error (-1 == -EPERM)
|
||||
|
||||
# cd /sys/kernel/debug/notifier-error-inject/cpu
|
||||
# echo -1 > actions/CPU_DOWN_PREPARE/error
|
||||
# echo 0 > /sys/devices/system/cpu/cpu1/online
|
||||
bash: echo: write error: Operation not permitted
|
||||
|
||||
To compile this code as a module, choose M here: the module will
|
||||
be called cpu-notifier-error-inject.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config PM_NOTIFIER_ERROR_INJECT
|
||||
tristate "PM notifier error injection module"
|
||||
depends on PM && NOTIFIER_ERROR_INJECTION
|
||||
|
|
|
|||
|
|
@ -128,7 +128,6 @@ obj-$(CONFIG_SWIOTLB) += swiotlb.o
|
|||
obj-$(CONFIG_IOMMU_HELPER) += iommu-helper.o iommu-common.o
|
||||
obj-$(CONFIG_FAULT_INJECTION) += fault-inject.o
|
||||
obj-$(CONFIG_NOTIFIER_ERROR_INJECTION) += notifier-error-inject.o
|
||||
obj-$(CONFIG_CPU_NOTIFIER_ERROR_INJECT) += cpu-notifier-error-inject.o
|
||||
obj-$(CONFIG_PM_NOTIFIER_ERROR_INJECT) += pm-notifier-error-inject.o
|
||||
obj-$(CONFIG_NETDEV_NOTIFIER_ERROR_INJECT) += netdev-notifier-error-inject.o
|
||||
obj-$(CONFIG_MEMORY_NOTIFIER_ERROR_INJECT) += memory-notifier-error-inject.o
|
||||
|
|
|
|||
|
|
@ -1,84 +0,0 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
#include "notifier-error-inject.h"
|
||||
|
||||
static int priority;
|
||||
module_param(priority, int, 0);
|
||||
MODULE_PARM_DESC(priority, "specify cpu notifier priority");
|
||||
|
||||
#define UP_PREPARE 0
|
||||
#define UP_PREPARE_FROZEN 0
|
||||
#define DOWN_PREPARE 0
|
||||
#define DOWN_PREPARE_FROZEN 0
|
||||
|
||||
static struct notifier_err_inject cpu_notifier_err_inject = {
|
||||
.actions = {
|
||||
{ NOTIFIER_ERR_INJECT_ACTION(UP_PREPARE) },
|
||||
{ NOTIFIER_ERR_INJECT_ACTION(UP_PREPARE_FROZEN) },
|
||||
{ NOTIFIER_ERR_INJECT_ACTION(DOWN_PREPARE) },
|
||||
{ NOTIFIER_ERR_INJECT_ACTION(DOWN_PREPARE_FROZEN) },
|
||||
{}
|
||||
}
|
||||
};
|
||||
|
||||
static int notf_err_handle(struct notifier_err_inject_action *action)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = action->error;
|
||||
if (ret)
|
||||
pr_info("Injecting error (%d) to %s\n", ret, action->name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int notf_err_inj_up_prepare(unsigned int cpu)
|
||||
{
|
||||
if (!cpuhp_tasks_frozen)
|
||||
return notf_err_handle(&cpu_notifier_err_inject.actions[0]);
|
||||
else
|
||||
return notf_err_handle(&cpu_notifier_err_inject.actions[1]);
|
||||
}
|
||||
|
||||
static int notf_err_inj_dead(unsigned int cpu)
|
||||
{
|
||||
if (!cpuhp_tasks_frozen)
|
||||
return notf_err_handle(&cpu_notifier_err_inject.actions[2]);
|
||||
else
|
||||
return notf_err_handle(&cpu_notifier_err_inject.actions[3]);
|
||||
}
|
||||
|
||||
static struct dentry *dir;
|
||||
|
||||
static int err_inject_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
dir = notifier_err_inject_init("cpu", notifier_err_inject_dir,
|
||||
&cpu_notifier_err_inject, priority);
|
||||
if (IS_ERR(dir))
|
||||
return PTR_ERR(dir);
|
||||
|
||||
err = cpuhp_setup_state_nocalls(CPUHP_NOTF_ERR_INJ_PREPARE,
|
||||
"cpu-err-notif:prepare",
|
||||
notf_err_inj_up_prepare,
|
||||
notf_err_inj_dead);
|
||||
if (err)
|
||||
debugfs_remove_recursive(dir);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void err_inject_exit(void)
|
||||
{
|
||||
cpuhp_remove_state_nocalls(CPUHP_NOTF_ERR_INJ_PREPARE);
|
||||
debugfs_remove_recursive(dir);
|
||||
}
|
||||
|
||||
module_init(err_inject_init);
|
||||
module_exit(err_inject_exit);
|
||||
|
||||
MODULE_DESCRIPTION("CPU notifier error injection module");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Akinobu Mita <[email protected]>");
|
||||
Loading…
Reference in a new issue