qemu/target/s390x
Collin Walling 1ecd6078f5 s390/sclp: add extended-length sccb support for kvm guest
As more features and facilities are added to the Read SCP Info (RSCPI)
response, more space is required to store them. The space used to store
these new features intrudes on the space originally used to store CPU
entries. This means as more features and facilities are added to the
RSCPI response, less space can be used to store CPU entries.

With the Extended-Length SCCB (ELS) facility, a KVM guest can execute
the RSCPI command and determine if the SCCB is large enough to store a
complete reponse. If it is not large enough, then the required length
will be set in the SCCB header.

The caller of the SCLP command is responsible for creating a
large-enough SCCB to store a complete response. Proper checking should
be in place, and the caller should execute the command once-more with
the large-enough SCCB.

This facility also enables an extended SCCB for the Read CPU Info
(RCPUI) command.

When this facility is enabled, the boundary violation response cannot
be a result from the RSCPI, RSCPI Forced, or RCPUI commands.

In order to tolerate kernels that do not yet have full support for this
feature, a "fixed" offset to the start of the CPU Entries within the
Read SCP Info struct is set to allow for the original 248 max entries
when this feature is disabled.

Additionally, this is introduced as a CPU feature to protect the guest
from migrating to a machine that does not support storing an extended
SCCB. This could otherwise hinder the VM from being able to read all
available CPU entries after migration (such as during re-ipl).

Signed-off-by: Collin Walling <walling@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Message-Id: <20200915194416.107460-7-walling@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
2020-10-02 13:52:49 +02:00
..
arch_dump.c s390x: Use uint64_t for vector registers 2019-06-07 14:53:25 +02:00
cc_helper.c target/s390x: Use tcg_s390_program_interrupt in TCG helpers 2019-10-09 12:49:01 +02:00
cpu_features_def.h meson: rename .inc.h files to .h.inc 2020-08-21 06:18:35 -04:00
cpu_features_def.h.inc s390/sclp: add extended-length sccb support for kvm guest 2020-10-02 13:52:49 +02:00
cpu_features.c meson: rename .inc.h files to .h.inc 2020-08-21 06:18:35 -04:00
cpu_features.h meson: convert target/s390x/gen-features.h 2020-08-21 06:30:17 -04:00
cpu_models.c s390x: Register all CPU properties as class properties 2020-09-22 16:48:06 -04:00
cpu_models.h meson: convert target/s390x/gen-features.h 2020-08-21 06:30:17 -04:00
cpu-param.h tcg: Split out target/arch/cpu-param.h 2019-06-10 07:03:34 -07:00
cpu-qom.h qom: Remove module_obj_name parameter from OBJECT_DECLARE* macros 2020-09-18 14:12:32 -04:00
cpu.c s390x: Register all CPU properties as class properties 2020-09-22 16:48:06 -04:00
cpu.h s390x: Add SIDA memory ops 2020-04-29 14:31:31 +02:00
crypto_helper.c target/s390x: Use tcg_s390_program_interrupt in TCG helpers 2019-10-09 12:49:01 +02:00
diag.c s390x: protvirt: Move diag 308 data over SIDA 2020-04-29 14:31:32 +02:00
excp_helper.c Let cpu_[physical]_memory() calls pass a boolean 'is_write' argument 2020-02-20 14:47:08 +01:00
fpu_helper.c softfloat: Name compare relation enum 2020-05-19 08:41:45 -07:00
gdbstub.c gdbstub: extend GByteArray to read register helpers 2020-03-17 17:38:38 +00:00
gen-features.c s390/sclp: add extended-length sccb support for kvm guest 2020-10-02 13:52:49 +02:00
helper.c target/s390x/helper: Clean ifdef'ry 2020-06-05 17:13:11 +02:00
helper.h target/s390x: Use tcg_gen_gvec_rotl{i,s,v} 2020-06-02 08:42:37 -07:00
insn-data.def target/s390x: Fix SQXBR 2020-07-03 11:15:59 +02:00
insn-format.def s390x/tcg: Define vector instruction formats 2019-03-11 09:31:01 +01:00
int_helper.c target/s390x: Use tcg_s390_program_interrupt in TCG helpers 2019-10-09 12:49:01 +02:00
internal.h s390x: Register all CPU properties as class properties 2020-09-22 16:48:06 -04:00
interrupt.c target/s390x: Remove ilen argument from trigger_pgm_exception 2019-10-09 12:49:02 +02:00
ioinst.c vfio-ccw: Add support for the schib region 2020-06-18 12:13:54 +02:00
kvm_s390x.h s390x: Add SIDA memory ops 2020-04-29 14:31:31 +02:00
kvm-stub.c s390x: protvirt: Support unpack facility 2020-04-29 14:30:54 +02:00
kvm.c s390/sclp: add extended-length sccb support for kvm guest 2020-10-02 13:52:49 +02:00
machine.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
mem_helper.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
meson.build target/s390x: fix meson.build issue 2020-08-21 11:55:13 -04:00
misc_helper.c target/s390x: Split out helper_per_store_real 2019-12-18 12:57:29 +01:00
mmu_helper.c s390x: Add SIDA memory ops 2020-04-29 14:31:31 +02:00
s390-tod.h target/s390x: Split out s390-tod.h 2019-02-18 11:25:43 +01:00
sigp.c s390x: sigp: Fix sense running reporting 2020-01-27 12:13:10 +01:00
tcg_s390x.h target/s390x: Remove ilen parameter from tcg_s390_program_interrupt 2019-10-09 12:49:01 +02:00
tcg-stub.c target/s390x: Remove ilen parameter from tcg_s390_program_interrupt 2019-10-09 12:49:01 +02:00
trace-events trace-events: Shorten file names in comments 2019-03-22 16:18:07 +00:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
translate_vx.c.inc meson: rename included C source files to .c.inc 2020-08-21 06:18:30 -04:00
translate.c meson: rename included C source files to .c.inc 2020-08-21 06:18:30 -04:00
vec_fpu_helper.c softfloat: Inline float64 compare specializations 2020-05-19 08:42:45 -07:00
vec_helper.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
vec_int_helper.c target/s390x: Use tcg_gen_gvec_rotl{i,s,v} 2020-06-02 08:42:37 -07:00
vec_string_helper.c s390x/tcg: Implement VECTOR STRING RANGE COMPARE 2019-06-07 14:53:25 +02:00
vec.h s390x/tcg: Implement VECTOR STRING RANGE COMPARE 2019-06-07 14:53:25 +02:00