[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 12/13] s390x: protvirt: Disable address checks for PV gues
From: |
Cornelia Huck |
Subject: |
Re: [PATCH v2 12/13] s390x: protvirt: Disable address checks for PV guest IO emulation |
Date: |
Thu, 5 Dec 2019 18:44:50 +0100 |
On Fri, 29 Nov 2019 04:48:08 -0500
Janosch Frank <address@hidden> 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 <address@hidden>
> ---
> target/s390x/ioinst.c | 26 +++++++++++++++++++-------
> 1 file changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
> index c437a1d8c6..e4102430aa 100644
> --- a/target/s390x/ioinst.c
> +++ b/target/s390x/ioinst.c
> @@ -17,6 +17,16 @@
> #include "trace.h"
> #include "hw/s390x/s390-pci-bus.h"
>
> +static uint64_t get_address_from_regs(CPUS390XState *env, uint32_t ipb,
> + uint8_t *ar)
Would like to keep the ioinst_* pattern here (even though this is an
internal function). ioinst_decode_addr()?
> +{
> + if (env->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)
> {
(...)
> @@ -601,7 +611,7 @@ void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb,
> uintptr_t ra)
> {
> ChscReq *req;
> ChscResp *res;
> - uint64_t addr;
> + uint64_t addr = 0;
> int reg;
> uint16_t len;
> uint16_t command;
> @@ -610,7 +620,9 @@ void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb,
> uintptr_t ra)
>
> trace_ioinst("chsc");
> reg = (ipb >> 20) & 0x00f;
> - addr = env->regs[reg];
> + if (!env->pv) {
> + addr = env->regs[reg];
> + }
addr = env->pv ? 0 : env->regs[reg];
?
> /* Page boundary? */
> if (addr & 0xfff) {
> s390_program_interrupt(env, PGM_SPECIFICATION, ra);