Revision cdeb5d7d890e14f3b70e8087e745c4a6a7d9f337 authored by Michael Ellerman on 15 October 2021, 12:02:08 UTC, committed by Michael Ellerman on 15 October 2021, 13:40:03 UTC
We call idle_kvm_start_guest() from power7_offline() if the thread has
been requested to enter KVM. We pass it the SRR1 value that was returned
from power7_idle_insn() which tells us what sort of wakeup we're
processing.

Depending on the SRR1 value we pass in, the KVM code might enter the
guest, or it might return to us to do some host action if the wakeup
requires it.

If idle_kvm_start_guest() is able to handle the wakeup, and enter the
guest it is supposed to indicate that by returning a zero SRR1 value to
us.

That was the behaviour prior to commit 10d91611f426 ("powerpc/64s:
Reimplement book3s idle code in C"), however in that commit the
handling of SRR1 was reworked, and the zeroing behaviour was lost.

Returning from idle_kvm_start_guest() without zeroing the SRR1 value can
confuse the host offline code, causing the guest to crash and other
weirdness.

Fixes: 10d91611f426 ("powerpc/64s: Reimplement book3s idle code in C")
Cc: stable@vger.kernel.org # v5.2+
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20211015133929.832061-2-mpe@ellerman.id.au
1 parent 9b4416c
History
File Mode Size
9p
adfs
affs
afs
autofs
befs
bfs
btrfs
cachefiles
ceph
cifs
coda
configfs
cramfs
crypto
debugfs
devpts
dlm
ecryptfs
efivarfs
efs
erofs
exfat
exportfs
ext2
ext4
f2fs
fat
freevxfs
fscache
fuse
gfs2
hfs
hfsplus
hostfs
hpfs
hugetlbfs
iomap
isofs
jbd2
jffs2
jfs
kernfs
ksmbd
lockd
minix
netfs
nfs
nfs_common
nfsd
nilfs2
nls
notify
ntfs
ntfs3
ocfs2
omfs
openpromfs
orangefs
overlayfs
proc
pstore
qnx4
qnx6
quota
ramfs
reiserfs
romfs
smbfs_common
squashfs
sysfs
sysv
tracefs
ubifs
udf
ufs
unicode
vboxsf
verity
xfs
zonefs
Kconfig -rw-r--r-- 9.6 KB
Kconfig.binfmt -rw-r--r-- 7.0 KB
Makefile -rw-r--r-- 4.5 KB
aio.c -rw-r--r-- 56.4 KB
anon_inodes.c -rw-r--r-- 6.8 KB
attr.c -rw-r--r-- 13.3 KB
bad_inode.c -rw-r--r-- 5.8 KB
binfmt_aout.c -rw-r--r-- 8.2 KB
binfmt_elf.c -rw-r--r-- 60.4 KB
binfmt_elf_fdpic.c -rw-r--r-- 43.6 KB
binfmt_flat.c -rw-r--r-- 28.5 KB
binfmt_misc.c -rw-r--r-- 17.4 KB
binfmt_script.c -rw-r--r-- 4.2 KB
buffer.c -rw-r--r-- 88.2 KB
char_dev.c -rw-r--r-- 16.5 KB
compat_binfmt_elf.c -rw-r--r-- 3.7 KB
coredump.c -rw-r--r-- 28.3 KB
d_path.c -rw-r--r-- 11.5 KB
dax.c -rw-r--r-- 46.1 KB
dcache.c -rw-r--r-- 85.4 KB
direct-io.c -rw-r--r-- 39.7 KB
drop_caches.c -rw-r--r-- 1.9 KB
eventfd.c -rw-r--r-- 12.0 KB
eventpoll.c -rw-r--r-- 63.9 KB
exec.c -rw-r--r-- 49.4 KB
fcntl.c -rw-r--r-- 23.8 KB
fhandle.c -rw-r--r-- 6.8 KB
file.c -rw-r--r-- 29.8 KB
file_table.c -rw-r--r-- 10.2 KB
filesystems.c -rw-r--r-- 6.5 KB
fs-writeback.c -rw-r--r-- 78.9 KB
fs_context.c -rw-r--r-- 17.7 KB
fs_parser.c -rw-r--r-- 10.1 KB
fs_pin.c -rw-r--r-- 1.9 KB
fs_struct.c -rw-r--r-- 3.4 KB
fs_types.c -rw-r--r-- 2.5 KB
fsopen.c -rw-r--r-- 11.0 KB
init.c -rw-r--r-- 6.1 KB
inode.c -rw-r--r-- 62.2 KB
internal.h -rw-r--r-- 5.6 KB
io-wq.c -rw-r--r-- 31.1 KB
io-wq.h -rw-r--r-- 3.7 KB
io_uring.c -rw-r--r-- 268.8 KB
ioctl.c -rw-r--r-- 24.0 KB
kernel_read_file.c -rw-r--r-- 4.3 KB
libfs.c -rw-r--r-- 39.3 KB
locks.c -rw-r--r-- 78.6 KB
mbcache.c -rw-r--r-- 12.0 KB
mount.h -rw-r--r-- 4.0 KB
mpage.c -rw-r--r-- 20.5 KB
namei.c -rw-r--r-- 132.6 KB
namespace.c -rw-r--r-- 110.2 KB
no-block.c -rw-r--r-- 478 bytes
nsfs.c -rw-r--r-- 6.6 KB
open.c -rw-r--r-- 34.2 KB
pipe.c -rw-r--r-- 34.6 KB
pnode.c -rw-r--r-- 15.1 KB
pnode.h -rw-r--r-- 2.0 KB
posix_acl.c -rw-r--r-- 23.6 KB
proc_namespace.c -rw-r--r-- 8.1 KB
read_write.c -rw-r--r-- 39.1 KB
readdir.c -rw-r--r-- 13.9 KB
remap_range.c -rw-r--r-- 13.8 KB
select.c -rw-r--r-- 34.7 KB
seq_file.c -rw-r--r-- 25.5 KB
signalfd.c -rw-r--r-- 9.0 KB
splice.c -rw-r--r-- 38.8 KB
stack.c -rw-r--r-- 2.5 KB
stat.c -rw-r--r-- 21.2 KB
statfs.c -rw-r--r-- 9.7 KB
super.c -rw-r--r-- 45.2 KB
sync.c -rw-r--r-- 10.5 KB
timerfd.c -rw-r--r-- 13.9 KB
userfaultfd.c -rw-r--r-- 54.4 KB
utimes.c -rw-r--r-- 7.6 KB
xattr.c -rw-r--r-- 27.4 KB

back to top