On 25.09.2017 14:47, Thomas Huth wrote: > On 18.09.2017 18:00, David Hildenbrand wrote: >> Preparation for TCG, for KVM is this is completely handled in the >> kernel. >> >> Signed-off-by: David Hildenbrand <[email protected]> >> --- >> target/s390x/cpu.h | 2 ++ >> target/s390x/sigp.c | 25 +++++++++++++++++++++++++ >> 2 files changed, 27 insertions(+) >> >> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h >> index 5d03802c7d..5aa755d7b5 100644 >> --- a/target/s390x/cpu.h >> +++ b/target/s390x/cpu.h >> @@ -594,6 +594,7 @@ struct sysib_322 { >> #define SIGP_SET_PREFIX 0x0d >> #define SIGP_STORE_STATUS_ADDR 0x0e >> #define SIGP_SET_ARCH 0x12 >> +#define SIGP_SENSE_RUNNING 0x15 >> #define SIGP_STORE_ADTL_STATUS 0x17 >> >> /* SIGP condition codes */ >> @@ -604,6 +605,7 @@ struct sysib_322 { >> >> /* SIGP status bits */ >> #define SIGP_STAT_EQUIPMENT_CHECK 0x80000000UL >> +#define SIGP_STAT_NOT_RUNNING 0x00000400UL >> #define SIGP_STAT_INCORRECT_STATE 0x00000200UL >> #define SIGP_STAT_INVALID_PARAMETER 0x00000100UL >> #define SIGP_STAT_EXT_CALL_PENDING 0x00000080UL >> diff --git a/target/s390x/sigp.c b/target/s390x/sigp.c >> index 9587c3d319..c57312b743 100644 >> --- a/target/s390x/sigp.c >> +++ b/target/s390x/sigp.c >> @@ -234,6 +234,28 @@ static void sigp_set_prefix(CPUState *cs, >> run_on_cpu_data arg) >> si->cc = SIGP_CC_ORDER_CODE_ACCEPTED; >> } >> >> +static void sigp_sense_running(S390CPU *dst_cpu, SigpInfo *si) >> +{ >> + if (!tcg_enabled()) { >> + /* handled in KVM */ >> + set_sigp_status(si, SIGP_STAT_INVALID_ORDER); >> + return; >> + } > > If we're sure that this is always handled in the kernel, I think you > could simply do a "g_assert(tcg_enabled())" here instead? > > Thomas >
This keeps existing behavior and does not crash the guest. Therefore I decided to not use a g_assert(). Especially, kernels throw every SIGP order to user space that they don't understand. So e.g. a SIGP SENSE RUNNING could end up here for older kernels. -- Thanks, David
