提交 9ed09853 编写于 作者: R Rafael J. Wysocki

x86: intel_epb: Take CONFIG_PM into account

Commit b9c273ba ("PM / arch: x86: MSR_IA32_ENERGY_PERF_BIAS sysfs
interface") caused kernels built with CONFIG_PM unset to crash on
systems supporting the Performance and Energy Bias Hint (EPB),
because it attempts to add files to sysfs directories that don't
exist on those systems.

Prevent that from happening by taking CONFIG_PM into account so
that the code depending on it is not compiled at all when it is
not set.

Fixes: b9c273ba ("PM / arch: x86: MSR_IA32_ENERGY_PERF_BIAS sysfs interface")
Reported-by: NIdo Schimmel <idosch@mellanox.com>
Tested-by: NIdo Schimmel <idosch@mellanox.com>
Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: NIngo Molnar <mingo@kernel.org>
上级 8f5e823f
...@@ -97,6 +97,7 @@ static void intel_epb_restore(void) ...@@ -97,6 +97,7 @@ static void intel_epb_restore(void)
wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, (epb & ~EPB_MASK) | val); wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, (epb & ~EPB_MASK) | val);
} }
#ifdef CONFIG_PM
static struct syscore_ops intel_epb_syscore_ops = { static struct syscore_ops intel_epb_syscore_ops = {
.suspend = intel_epb_save, .suspend = intel_epb_save,
.resume = intel_epb_restore, .resume = intel_epb_restore,
...@@ -193,6 +194,25 @@ static int intel_epb_offline(unsigned int cpu) ...@@ -193,6 +194,25 @@ static int intel_epb_offline(unsigned int cpu)
return 0; return 0;
} }
static inline void register_intel_ebp_syscore_ops(void)
{
register_syscore_ops(&intel_epb_syscore_ops);
}
#else /* !CONFIG_PM */
static int intel_epb_online(unsigned int cpu)
{
intel_epb_restore();
return 0;
}
static int intel_epb_offline(unsigned int cpu)
{
return intel_epb_save();
}
static inline void register_intel_ebp_syscore_ops(void) {}
#endif
static __init int intel_epb_init(void) static __init int intel_epb_init(void)
{ {
int ret; int ret;
...@@ -206,7 +226,7 @@ static __init int intel_epb_init(void) ...@@ -206,7 +226,7 @@ static __init int intel_epb_init(void)
if (ret < 0) if (ret < 0)
goto err_out_online; goto err_out_online;
register_syscore_ops(&intel_epb_syscore_ops); register_intel_ebp_syscore_ops();
return 0; return 0;
err_out_online: err_out_online:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册