On 11/09/2020 17.08, Thomas Huth wrote: > On 10/09/2020 11.36, Collin Walling wrote: >> DIAGNOSE 0x318 (diag318) is an s390 instruction that allows the storage >> of diagnostic information that is collected by the firmware in the case >> of hardware/firmware service events. >> >> QEMU handles the instruction by storing the info in the CPU state. A >> subsequent register sync will communicate the data to the hypervisor. >> >> QEMU handles the migration via a VM State Description. >> >> This feature depends on the Extended-Length SCCB (els) feature. If >> els is not present, then a warning will be printed and the SCLP bit >> that allows the Linux kernel to execute the instruction will not be >> set. >> >> Availability of this instruction is determined by byte 134 (aka fac134) >> bit 0 of the SCLP Read Info block. This coincidentally expands into the >> space used for CPU entries, which means VMs running with the diag318 >> capability may not be able to read information regarding all CPUs >> unless the guest kernel supports an extended-length SCCB. >> >> This feature is not supported in protected virtualization mode. >> >> Signed-off-by: Collin Walling <wall...@linux.ibm.com> >> Acked-by: Janosch Frank <fran...@linux.ibm.com> >> --- >> hw/s390x/sclp.c | 5 +++++ >> include/hw/s390x/sclp.h | 3 +++ >> target/s390x/cpu.h | 2 ++ >> target/s390x/cpu_features.h | 1 + >> target/s390x/cpu_features_def.h.inc | 3 +++ >> target/s390x/cpu_models.c | 1 + >> target/s390x/gen-features.c | 1 + >> target/s390x/kvm.c | 31 +++++++++++++++++++++++++++++ >> target/s390x/machine.c | 17 ++++++++++++++++ >> 9 files changed, 64 insertions(+) >> >> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c >> index 87d468087b..ad5d70e14d 100644 >> --- a/hw/s390x/sclp.c >> +++ b/hw/s390x/sclp.c >> @@ -139,6 +139,11 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb) >> s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, >> read_info->conf_char_ext); >> >> + if (s390_has_feat(S390_FEAT_EXTENDED_LENGTH_SCCB)) { >> + s390_get_feat_block(S390_FEAT_TYPE_SCLP_FAC134, >> + &read_info->fac134); >> + } > > Wasn't this feature also possible if there are less than 240 CPUs? Or do > I mix that up with something else? ... well, maybe it's best anyway if > we only allow this when ELS is enabled.
Hmmm, looking at the location of fac134 (i.e. offset 134) and the previous location of the CPU entries (i.e. offset 128), I think I just mixed this up with something different. So please never mind this question. Thomas