diff options
| author | Daniel Vetter <[email protected]> | 2019-06-19 10:04:55 +0000 |
|---|---|---|
| committer | Daniel Vetter <[email protected]> | 2019-06-19 10:07:29 +0000 |
| commit | 52d2d44eee8091e740d0d275df1311fb8373c9a9 (patch) | |
| tree | 4aff282e84b3469f18cf9717490b892f6f39198f /arch/x86/power/hibernate.c | |
| parent | Merge tag 'drm-misc-next-2019-06-14' of git://anongit.freedesktop.org/drm/drm... (diff) | |
| parent | Linux 5.2-rc5 (diff) | |
| download | kernel-52d2d44eee8091e740d0d275df1311fb8373c9a9.tar.gz kernel-52d2d44eee8091e740d0d275df1311fb8373c9a9.zip | |
Merge v5.2-rc5 into drm-next
Maarten needs -rc4 backmerged so he can pull in the fbcon notifier
removal topic branch into drm-misc-next.
Signed-off-by: Daniel Vetter <[email protected]>
Diffstat (limited to 'arch/x86/power/hibernate.c')
| -rw-r--r-- | arch/x86/power/hibernate.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/x86/power/hibernate.c b/arch/x86/power/hibernate.c index 4845b8c7be7f..fc413717a45f 100644 --- a/arch/x86/power/hibernate.c +++ b/arch/x86/power/hibernate.c @@ -11,6 +11,7 @@ #include <linux/suspend.h> #include <linux/scatterlist.h> #include <linux/kdebug.h> +#include <linux/cpu.h> #include <crypto/hash.h> @@ -245,3 +246,35 @@ out: __flush_tlb_all(); return 0; } + +int arch_resume_nosmt(void) +{ + int ret = 0; + /* + * We reached this while coming out of hibernation. This means + * that SMT siblings are sleeping in hlt, as mwait is not safe + * against control transition during resume (see comment in + * hibernate_resume_nonboot_cpu_disable()). + * + * If the resumed kernel has SMT disabled, we have to take all the + * SMT siblings out of hlt, and offline them again so that they + * end up in mwait proper. + * + * Called with hotplug disabled. + */ + cpu_hotplug_enable(); + if (cpu_smt_control == CPU_SMT_DISABLED || + cpu_smt_control == CPU_SMT_FORCE_DISABLED) { + enum cpuhp_smt_control old = cpu_smt_control; + + ret = cpuhp_smt_enable(); + if (ret) + goto out; + ret = cpuhp_smt_disable(old); + if (ret) + goto out; + } +out: + cpu_hotplug_disable(); + return ret; +} |
