On 3/17/20 12:36 PM, Cornelia Huck wrote:
> On Wed, 11 Mar 2020 09:21:47 -0400
> Janosch Frank <[email protected]> wrote:
>
>> IO instruction data is routed through SIDAD for protected guests, so
>> adresses do not need to be checked, as this is kernel memory.
>>
>> Signed-off-by: Janosch Frank <[email protected]>
>> Reviewed-by: Thomas Huth <[email protected]>
>> Reviewed-by: David Hildenbrand <[email protected]>
>> ---
>> target/s390x/ioinst.c | 33 ++++++++++++++++++++++++++-------
>> 1 file changed, 26 insertions(+), 7 deletions(-)
>>
>> diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
>> index c437a1d8c6afed80..481d789de9e09a04 100644
>> --- a/target/s390x/ioinst.c
>> +++ b/target/s390x/ioinst.c
>> @@ -16,6 +16,23 @@
>> #include "hw/s390x/ioinst.h"
>> #include "trace.h"
>> #include "hw/s390x/s390-pci-bus.h"
>> +#include "hw/s390x/pv.h"
>> +
>
> Maybe add
>
> /* all I/O instructions but chsc use the s format *>
> to emphasize that this is not a generic decoder?
Ack
>
>> +static uint64_t get_address_from_regs(CPUS390XState *env, uint32_t ipb,
>> + uint8_t *ar)
>> +{
>> + /*
>> + * Addresses for protected guests are all offsets into the
>> + * satellite block which holds the IO control structures. Those
>> + * control structures are always aligned and accessible, so we can
>> + * return 0 here which will pass the following address checks.
>> + */
>> + if (s390_is_pv()) {
>> + *ar = 0;
>> + return 0;
>> + }
>> + return decode_basedisp_s(env, ipb, ar);
>> +}
>>
>> int ioinst_disassemble_sch_ident(uint32_t value, int *m, int *cssid, int
>> *ssid,
>> int *schid)
>
> With the other comment updates,
>
> Reviewed-by: Cornelia Huck <[email protected]>
>
>
Thanks