From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933346; cv=none; d=zohomail.com; s=zohoarc; b=UO/9qDi+6gdbjfGOm2PZfnZUaME68jIxL3A3nizuWMD7mbcsGMggqiKMXJs/g1elQKSgDeuWfuY7+VFizrMvh6FfbewMl3EROP7nxX38Ep2+5p2M+gXs/oSyVhw53DZeC9EkrdXF/FzbgVg7sdQcXwnAjWPYUgV2UR372ZsNyWg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933346; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=InNrvRfAUCubhIe5ZI7GdAqnaqTSLibCkbRwnugRoog=; b=kZgxTf7iKrM1uItLXNhCf99r6H8vukzXJlCu+J6HpoaoGNGI38H+ihG35HwtcXgnwh/V8Zkji7+7/kFUiOBTKbBNPVJs0p0iAMkbzc7OruIkZpUYSkUjtjFiXdSeqhqFx8F+RJusSVOUD73BGJ+YDeoUrFT7FKoumjxaQdxGNj4= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15839333462911007.955850007363; Wed, 11 Mar 2020 06:29:06 -0700 (PDT) Received: from localhost ([::1]:51899 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Py-0006Tl-Tz for importer@patchew.org; Wed, 11 Mar 2020 09:29:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58997) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Oh-0004fu-O3 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Og-0002Hr-ID for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:43 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:15260) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Og-0002Hg-B8 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:42 -0400 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDLt3N194161 for ; Wed, 11 Mar 2020 09:27:41 -0400 Received: from e06smtp05.uk.ibm.com (e06smtp05.uk.ibm.com [195.75.94.101]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hbhmym-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:27:34 -0400 Received: from localhost by e06smtp05.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:13 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp05.uk.ibm.com (192.168.101.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:09 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDM9Q538928568 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:09 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id ED1815204F; Wed, 11 Mar 2020 13:22:08 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 9ABDF52050; Wed, 11 Mar 2020 13:22:07 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 01/15] Sync pv Date: Wed, 11 Mar 2020 09:21:37 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0020-0000-0000-000003B2BBD7 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0021-0000-0000-0000220B0C20 Message-Id: <20200311132151.172389-2-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 malwarescore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 suspectscore=1 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Signed-off-by: Janosch Frank --- linux-headers/linux/kvm.h | 45 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h index 265099100e65b3e8..c30344ab0095e856 100644 --- a/linux-headers/linux/kvm.h +++ b/linux-headers/linux/kvm.h @@ -474,12 +474,17 @@ struct kvm_s390_mem_op { __u32 size; /* amount of bytes */ __u32 op; /* type of operation */ __u64 buf; /* buffer in userspace */ - __u8 ar; /* the access register number */ - __u8 reserved[31]; /* should be set to 0 */ + union { + __u8 ar; /* the access register number */ + __u32 sida_offset; /* offset into the sida */ + __u8 reserved[32]; /* should be set to 0 */ + }; }; /* types for kvm_s390_mem_op->op */ #define KVM_S390_MEMOP_LOGICAL_READ 0 #define KVM_S390_MEMOP_LOGICAL_WRITE 1 +#define KVM_S390_MEMOP_SIDA_READ 2 +#define KVM_S390_MEMOP_SIDA_WRITE 3 /* flags for kvm_s390_mem_op->flags */ #define KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0) #define KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1) @@ -1010,6 +1015,7 @@ struct kvm_ppc_resize_hpt { #define KVM_CAP_ARM_NISV_TO_USER 177 #define KVM_CAP_ARM_INJECT_EXT_DABT 178 #define KVM_CAP_S390_VCPU_RESETS 179 +#define KVM_CAP_S390_PROTECTED 180 =20 #ifdef KVM_CAP_IRQ_ROUTING =20 @@ -1478,6 +1484,41 @@ struct kvm_enc_region { #define KVM_S390_NORMAL_RESET _IO(KVMIO, 0xc3) #define KVM_S390_CLEAR_RESET _IO(KVMIO, 0xc4) =20 +struct kvm_s390_pv_sec_parm { + __u64 origin; + __u64 length; +}; + +struct kvm_s390_pv_unp { + __u64 addr; + __u64 size; + __u64 tweak; +}; + +enum pv_cmd_id { + KVM_PV_ENABLE, + KVM_PV_DISABLE, + KVM_PV_VM_SET_SEC_PARMS, + KVM_PV_VM_UNPACK, + KVM_PV_VM_VERIFY, + KVM_PV_VM_PREP_RESET, + KVM_PV_VM_UNSHARE_ALL, + KVM_PV_VCPU_CREATE, + KVM_PV_VCPU_DESTROY, +}; + +struct kvm_pv_cmd { + __u32 cmd; /* Command to be executed */ + __u16 rc; /* Ultravisor return code */ + __u16 rrc; /* Ultravisor return reason code */ + __u64 data; /* Data or address */ + __u32 flags; /* flags for future extensions. Must be 0 for now */ + __u32 reserved[3]; +}; + +/* Available with KVM_CAP_S390_PROTECTED */ +#define KVM_S390_PV_COMMAND _IOWR(KVMIO, 0xc5, struct kvm_pv_cmd) + /* Secure Encrypted Virtualization command */ enum sev_cmd_id { /* Guest initialization commands */ --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933303; cv=none; d=zohomail.com; s=zohoarc; b=NkQf4KJux4pzxECXAWTcI3PAxAP9R05w1Hu9Mgv50fQfMaUEF/x42fZzhMnTaTIio1YVNnmx5jWKumhQk6K6+ed3vJgRZG+OKN6nBc9Tp6NX+q9Zexw/he/RTWzUBvW5v9FyTMR/wOFqeRZ3LhnAs2cI0wlw62/0SX2DKiNskS8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933303; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0kwl9BawYQ9Cu/SgDg24NTUcWA4STY+sDEn8qVK8Nyk=; b=FMVrEGTXZmyIp5tjjL5SG/irqzkazFjnR6UHy2YLaxtHb/hfcqRAoUKRVDs5RdF5/bxhVOpLE3qXTUjmJpyTuLEbW336KwdJ28atfXPTKupdbN0EfXvJ2A3KcoSoYYhF5BEtiUn62FiUScUmrsakN8MuL/OKiOvjFtWMKH4x1l4= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933303011688.4756234991382; Wed, 11 Mar 2020 06:28:23 -0700 (PDT) Received: from localhost ([::1]:51890 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1PI-00058J-Iz for importer@patchew.org; Wed, 11 Mar 2020 09:28:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58331) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Lf-0007qV-El for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Lc-00078F-Eu for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:35 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:21228) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Lc-000778-6h for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:32 -0400 Received: from pps.filterd (m0187473.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDO6CL082672 for ; Wed, 11 Mar 2020 09:24:31 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0a-001b2d01.pphosted.com with ESMTP id 2ypxbk4v5x-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:24:23 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:13 -0000 Received: from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:11 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMAip55115846 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:10 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id ADD1F52054; Wed, 11 Mar 2020 13:22:10 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 4E0625204E; Wed, 11 Mar 2020 13:22:09 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 02/15] s390x: protvirt: Support unpack facility Date: Wed, 11 Mar 2020 09:21:38 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-4275-0000-0000-000003AAA24B X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-4276-0000-0000-000038BFBE6B Message-Id: <20200311132151.172389-3-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 mlxlogscore=999 adultscore=0 clxscore=1015 mlxscore=0 malwarescore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 bulkscore=0 suspectscore=3 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" The unpack facility provides the means to setup a protected guest. A protected guest cannot be introspected by the hypervisor or any user/administrator of the machine it is running on. Protected guests are encrypted at rest and need a special boot mechanism via diag308 subcode 8 and 10. Code 8 sets the PV specific IPLB which is retained separately from those set via code 5. Code 10 is used to unpack the VM into protected memory, verify its integrity and start it. Signed-off-by: Janosch Frank Co-developed-by: Christian Borntraeger [Changes to machine] Reviewed-by: Claudio Imbrenda Reviewed-by: David Hildenbrand --- hw/s390x/Makefile.objs | 1 + hw/s390x/ipl.c | 56 +++++++++++++- hw/s390x/ipl.h | 79 +++++++++++++++++++ hw/s390x/pv.c | 98 +++++++++++++++++++++++ hw/s390x/s390-virtio-ccw.c | 116 +++++++++++++++++++++++++++- include/hw/s390x/pv.h | 57 ++++++++++++++ include/hw/s390x/s390-virtio-ccw.h | 1 + target/s390x/cpu.c | 2 + target/s390x/cpu_features_def.inc.h | 1 + target/s390x/diag.c | 31 +++++++- 10 files changed, 436 insertions(+), 6 deletions(-) create mode 100644 hw/s390x/pv.c create mode 100644 include/hw/s390x/pv.h diff --git a/hw/s390x/Makefile.objs b/hw/s390x/Makefile.objs index e02ed80b6829a511..a46a1c7894e0f612 100644 --- a/hw/s390x/Makefile.objs +++ b/hw/s390x/Makefile.objs @@ -31,6 +31,7 @@ obj-y +=3D tod-qemu.o obj-$(CONFIG_KVM) +=3D tod-kvm.o obj-$(CONFIG_KVM) +=3D s390-skeys-kvm.o obj-$(CONFIG_KVM) +=3D s390-stattrib-kvm.o +obj-$(CONFIG_KVM) +=3D pv.o obj-y +=3D s390-ccw.o obj-y +=3D ap-device.o obj-y +=3D ap-bridge.o diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index b81942e1e6f9002e..98df89e62c25f583 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -27,6 +27,7 @@ #include "hw/s390x/vfio-ccw.h" #include "hw/s390x/css.h" #include "hw/s390x/ebcdic.h" +#include "hw/s390x/pv.h" #include "ipl.h" #include "qemu/error-report.h" #include "qemu/config-file.h" @@ -566,12 +567,31 @@ void s390_ipl_update_diag308(IplParameterBlock *iplb) { S390IPLState *ipl =3D get_ipl_device(); =20 - ipl->iplb =3D *iplb; - ipl->iplb_valid =3D true; + /* + * The IPLB set and retrieved by subcodes 8/9 is completely + * separate from the one managed via subcodes 5/6. + */ + if (iplb->pbt =3D=3D S390_IPL_TYPE_PV) { + ipl->iplb_pv =3D *iplb; + ipl->iplb_valid_pv =3D true; + } else { + ipl->iplb =3D *iplb; + ipl->iplb_valid =3D true; + } ipl->netboot =3D is_virtio_net_device(iplb); update_machine_ipl_properties(iplb); } =20 +IplParameterBlock *s390_ipl_get_iplb_pv(void) +{ + S390IPLState *ipl =3D get_ipl_device(); + + if (!ipl->iplb_valid_pv) { + return NULL; + } + return &ipl->iplb_pv; +} + IplParameterBlock *s390_ipl_get_iplb(void) { S390IPLState *ipl =3D get_ipl_device(); @@ -660,6 +680,38 @@ static void s390_ipl_prepare_qipl(S390CPU *cpu) cpu_physical_memory_unmap(addr, len, 1, len); } =20 +int s390_ipl_prepare_pv_header(void) +{ + IplParameterBlock *ipib =3D s390_ipl_get_iplb_pv(); + IPLBlockPV *ipib_pv =3D &ipib->pv; + void *hdr =3D g_malloc(ipib_pv->pv_header_len); + int rc; + + cpu_physical_memory_read(ipib_pv->pv_header_addr, hdr, + ipib_pv->pv_header_len); + rc =3D s390_pv_set_sec_parms((uint64_t)hdr, + ipib_pv->pv_header_len); + g_free(hdr); + return rc; +} + +int s390_ipl_pv_unpack(void) +{ + IplParameterBlock *ipib =3D s390_ipl_get_iplb_pv(); + IPLBlockPV *ipib_pv =3D &ipib->pv; + int i, rc =3D 0; + + for (i =3D 0; i < ipib_pv->num_comp; i++) { + rc =3D s390_pv_unpack(ipib_pv->components[i].addr, + TARGET_PAGE_ALIGN(ipib_pv->components[i].size), + ipib_pv->components[i].tweak_pref); + if (rc) { + break; + } + } + return rc; +} + void s390_ipl_prepare_cpu(S390CPU *cpu) { S390IPLState *ipl =3D get_ipl_device(); diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index 3e44abe1c651d8a0..919f9e69131b5207 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -15,6 +15,24 @@ #include "cpu.h" #include "hw/qdev-core.h" =20 +struct IPLBlockPVComp { + uint64_t tweak_pref; + uint64_t addr; + uint64_t size; +} QEMU_PACKED; +typedef struct IPLBlockPVComp IPLBlockPVComp; + +struct IPLBlockPV { + uint8_t reserved18[87]; /* 0x18 */ + uint8_t version; /* 0x6f */ + uint32_t reserved70; /* 0x70 */ + uint32_t num_comp; /* 0x74 */ + uint64_t pv_header_addr; /* 0x78 */ + uint64_t pv_header_len; /* 0x80 */ + struct IPLBlockPVComp components[]; +} QEMU_PACKED; +typedef struct IPLBlockPV IPLBlockPV; + struct IplBlockCcw { uint8_t reserved0[85]; uint8_t ssid; @@ -71,6 +89,7 @@ union IplParameterBlock { union { IplBlockCcw ccw; IplBlockFcp fcp; + IPLBlockPV pv; IplBlockQemuScsi scsi; }; } QEMU_PACKED; @@ -85,8 +104,11 @@ typedef union IplParameterBlock IplParameterBlock; =20 int s390_ipl_set_loadparm(uint8_t *loadparm); void s390_ipl_update_diag308(IplParameterBlock *iplb); +int s390_ipl_prepare_pv_header(void); +int s390_ipl_pv_unpack(void); void s390_ipl_prepare_cpu(S390CPU *cpu); IplParameterBlock *s390_ipl_get_iplb(void); +IplParameterBlock *s390_ipl_get_iplb_pv(void); =20 enum s390_reset { /* default is a reset not triggered by a CPU e.g. issued by QMP */ @@ -94,6 +116,7 @@ enum s390_reset { S390_RESET_REIPL, S390_RESET_MODIFIED_CLEAR, S390_RESET_LOAD_NORMAL, + S390_RESET_PV, }; void s390_ipl_reset_request(CPUState *cs, enum s390_reset reset_type); void s390_ipl_get_reset_request(CPUState **cs, enum s390_reset *reset_type= ); @@ -133,6 +156,7 @@ struct S390IPLState { /*< private >*/ DeviceState parent_obj; IplParameterBlock iplb; + IplParameterBlock iplb_pv; QemuIplParameters qipl; uint64_t start_addr; uint64_t compat_start_addr; @@ -140,6 +164,7 @@ struct S390IPLState { uint64_t compat_bios_start_addr; bool enforce_bios; bool iplb_valid; + bool iplb_valid_pv; bool netboot; /* reset related properties don't have to be migrated or reset */ enum s390_reset reset_type; @@ -161,9 +186,11 @@ QEMU_BUILD_BUG_MSG(offsetof(S390IPLState, iplb) & 3, "= alignment of iplb wrong"); =20 #define S390_IPL_TYPE_FCP 0x00 #define S390_IPL_TYPE_CCW 0x02 +#define S390_IPL_TYPE_PV 0x05 #define S390_IPL_TYPE_QEMU_SCSI 0xff =20 #define S390_IPLB_HEADER_LEN 8 +#define S390_IPLB_MIN_PV_LEN 148 #define S390_IPLB_MIN_CCW_LEN 200 #define S390_IPLB_MIN_FCP_LEN 384 #define S390_IPLB_MIN_QEMU_SCSI_LEN 200 @@ -173,6 +200,50 @@ static inline bool iplb_valid_len(IplParameterBlock *i= plb) return be32_to_cpu(iplb->len) <=3D sizeof(IplParameterBlock); } =20 +static inline bool ipl_valid_pv_components(IplParameterBlock *iplb) +{ + IPLBlockPV *ipib_pv =3D &iplb->pv; + int i; + + if (ipib_pv->num_comp =3D=3D 0) { + return false; + } + + for (i =3D 0; i < ipib_pv->num_comp; i++) { + /* Addr must be 4k aligned */ + if (ipib_pv->components[i].addr & ~TARGET_PAGE_MASK) { + return false; + } + + /* Tweak prefix is monotonically increasing with each component */ + if (i < ipib_pv->num_comp - 1 && + ipib_pv->components[i].tweak_pref >=3D + ipib_pv->components[i + 1].tweak_pref) { + return false; + } + } + return true; +} + +static inline bool ipl_valid_pv_header(IplParameterBlock *iplb) +{ + IPLBlockPV *ipib_pv =3D &iplb->pv; + + if (ipib_pv->pv_header_len > 2 * TARGET_PAGE_SIZE) { + return false; + } + + if (!address_space_access_valid(&address_space_memory, + ipib_pv->pv_header_addr, + ipib_pv->pv_header_len, + false, + MEMTXATTRS_UNSPECIFIED)) { + return false; + } + + return true; +} + static inline bool iplb_valid(IplParameterBlock *iplb) { switch (iplb->pbt) { @@ -180,6 +251,14 @@ static inline bool iplb_valid(IplParameterBlock *iplb) return be32_to_cpu(iplb->len) >=3D S390_IPLB_MIN_FCP_LEN; case S390_IPL_TYPE_CCW: return be32_to_cpu(iplb->len) >=3D S390_IPLB_MIN_CCW_LEN; + case S390_IPL_TYPE_PV: + if (be32_to_cpu(iplb->len) < S390_IPLB_MIN_PV_LEN) { + return false; + } + if (!ipl_valid_pv_header(iplb)) { + return false; + } + return ipl_valid_pv_components(iplb); default: return false; } diff --git a/hw/s390x/pv.c b/hw/s390x/pv.c new file mode 100644 index 0000000000000000..8cf5cd2c9bcd48b0 --- /dev/null +++ b/hw/s390x/pv.c @@ -0,0 +1,98 @@ +/* + * Protected Virtualization functions + * + * Copyright IBM Corp. 2020 + * Author(s): + * Janosch Frank + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ +#include "qemu/osdep.h" + +#include + +#include "qemu/error-report.h" +#include "sysemu/kvm.h" +#include "hw/s390x/pv.h" + +static int __s390_pv_cmd(uint32_t cmd, const char *cmdname, void *data) +{ + struct kvm_pv_cmd pv_cmd =3D { + .cmd =3D cmd, + .data =3D (uint64_t)data, + }; + int rc =3D kvm_vm_ioctl(kvm_state, KVM_S390_PV_COMMAND, &pv_cmd); + + if (rc) { + error_report("KVM PV command %d (%s) failed: header rc %x rrc %x " + "IOCTL rc: %d", cmd, cmdname, pv_cmd.rc, pv_cmd.rrc, + rc); + } + return rc; +} + +/* + * This macro lets us pass the command as a string to the function so + * we can print it on an error. + */ +#define s390_pv_cmd(cmd, data) __s390_pv_cmd(cmd, #cmd, data); +#define s390_pv_cmd_exit(cmd, data) \ +{ \ + int rc; \ + \ + rc =3D __s390_pv_cmd(cmd, #cmd, data);\ + if (rc) { \ + exit(1); \ + } \ +} + +int s390_pv_vm_enable(void) +{ + return s390_pv_cmd(KVM_PV_ENABLE, NULL); +} + +void s390_pv_vm_disable(void) +{ + s390_pv_cmd_exit(KVM_PV_DISABLE, NULL); +} + +int s390_pv_set_sec_parms(uint64_t origin, uint64_t length) +{ + struct kvm_s390_pv_sec_parm args =3D { + .origin =3D origin, + .length =3D length, + }; + + return s390_pv_cmd(KVM_PV_VM_SET_SEC_PARMS, &args); +} + +/* + * Called for each component in the SE type IPL parameter block 0. + */ +int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tweak) +{ + struct kvm_s390_pv_unp args =3D { + .addr =3D addr, + .size =3D size, + .tweak =3D tweak, + }; + + return s390_pv_cmd(KVM_PV_VM_UNPACK, &args); +} + +void s390_pv_perf_clear_reset(void) +{ + s390_pv_cmd_exit(KVM_PV_VM_PREP_RESET, NULL); +} + +int s390_pv_verify(void) +{ + return s390_pv_cmd(KVM_PV_VM_VERIFY, NULL); +} + +void s390_pv_unshare(void) +{ + s390_pv_cmd_exit(KVM_PV_VM_UNSHARE_ALL, NULL); +} diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 895498cca6199c16..9569b777a0e1abd6 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -41,6 +41,7 @@ #include "hw/qdev-properties.h" #include "hw/s390x/tod.h" #include "sysemu/sysemu.h" +#include "hw/s390x/pv.h" =20 S390CPU *s390_cpu_addr2state(uint16_t cpu_addr) { @@ -316,10 +317,79 @@ static inline void s390_do_cpu_ipl(CPUState *cs, run_= on_cpu_data arg) s390_cpu_set_state(S390_CPU_STATE_OPERATING, cpu); } =20 +static void s390_machine_unprotect(S390CcwMachineState *ms) +{ + s390_pv_vm_disable(); + ms->pv =3D false; +} + +static int s390_machine_protect(S390CcwMachineState *ms) +{ + int rc; + + /* Create SE VM */ + rc =3D s390_pv_vm_enable(); + if (rc) { + return rc; + } + + ms->pv =3D true; + + /* Set SE header and unpack */ + rc =3D s390_ipl_prepare_pv_header(); + if (rc) { + goto out_err; + } + + /* Decrypt image */ + rc =3D s390_ipl_pv_unpack(); + if (rc) { + goto out_err; + } + + /* Verify integrity */ + rc =3D s390_pv_verify(); + if (rc) { + goto out_err; + } + return rc; + +out_err: + s390_machine_unprotect(ms); + return rc; +} + +#define DIAG_308_RC_INVAL_FOR_PV 0x0a02 +static void s390_machine_inject_pv_error(CPUState *cs) +{ + int r1 =3D (cs->kvm_run->s390_sieic.ipa & 0x00f0) >> 4; + CPUS390XState *env =3D &S390_CPU(cs)->env; + + /* Report that we are unable to enter protected mode */ + env->regs[r1 + 1] =3D DIAG_308_RC_INVAL_FOR_PV; +} + +static void s390_pv_prepare_reset(S390CcwMachineState *ms) +{ + CPUState *cs; + + if (!s390_is_pv()) { + return; + } + /* Unsharing requires all cpus to be stopped */ + CPU_FOREACH(cs) { + s390_cpu_set_state(S390_CPU_STATE_STOPPED, S390_CPU(cs)); + } + s390_pv_unshare(); + s390_pv_perf_clear_reset(); +} + static void s390_machine_reset(MachineState *machine) { + S390CcwMachineState *ms =3D S390_CCW_MACHINE(machine); enum s390_reset reset_type; CPUState *cs, *t; + S390CPU *cpu; =20 /* get the reset parameters, reset them once done */ s390_ipl_get_reset_request(&cs, &reset_type); @@ -327,9 +397,15 @@ static void s390_machine_reset(MachineState *machine) /* all CPUs are paused and synchronized at this point */ s390_cmma_reset(); =20 + cpu =3D S390_CPU(cs); + switch (reset_type) { case S390_RESET_EXTERNAL: case S390_RESET_REIPL: + if (s390_is_pv()) { + s390_machine_unprotect(ms); + } + qemu_devices_reset(); s390_crypto_reset(); =20 @@ -337,22 +413,56 @@ static void s390_machine_reset(MachineState *machine) run_on_cpu(cs, s390_do_cpu_ipl, RUN_ON_CPU_NULL); break; case S390_RESET_MODIFIED_CLEAR: + /* + * Susbsystem reset needs to be done before we unshare memory + * and loose access to VIRTIO structures in guest memory. + */ + subsystem_reset(); + s390_crypto_reset(); + s390_pv_prepare_reset(ms); CPU_FOREACH(t) { run_on_cpu(t, s390_do_cpu_full_reset, RUN_ON_CPU_NULL); } - subsystem_reset(); - s390_crypto_reset(); run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL); break; case S390_RESET_LOAD_NORMAL: + /* + * Susbsystem reset needs to be done before we unshare memory + * and loose access to VIRTIO structures in guest memory. + */ + subsystem_reset(); + s390_pv_prepare_reset(ms); CPU_FOREACH(t) { if (t =3D=3D cs) { continue; } run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL); } - subsystem_reset(); run_on_cpu(cs, s390_do_cpu_initial_reset, RUN_ON_CPU_NULL); + run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL); + break; + case S390_RESET_PV: /* Subcode 10 */ + subsystem_reset(); + s390_crypto_reset(); + + CPU_FOREACH(t) { + if (t =3D=3D cs) { + continue; + } + run_on_cpu(t, s390_do_cpu_full_reset, RUN_ON_CPU_NULL); + } + run_on_cpu(cs, s390_do_cpu_reset, RUN_ON_CPU_NULL); + + if (s390_machine_protect(ms)) { + s390_machine_inject_pv_error(cs); + /* + * Continue after the diag308 so the guest knows something + * went wrong. + */ + s390_cpu_set_state(S390_CPU_STATE_OPERATING, cpu); + return; + } + run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL); break; default: diff --git a/include/hw/s390x/pv.h b/include/hw/s390x/pv.h new file mode 100644 index 0000000000000000..43298171a9e23c76 --- /dev/null +++ b/include/hw/s390x/pv.h @@ -0,0 +1,57 @@ +/* + * Protected Virtualization header + * + * Copyright IBM Corp. 2020 + * Author(s): + * Janosch Frank + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ +#ifndef HW_S390_PV_H +#define HW_S390_PV_H + +#ifdef CONFIG_KVM +#include "hw/s390x/s390-virtio-ccw.h" + +static inline bool s390_is_pv(void) +{ + static S390CcwMachineState *ccw; + Object *obj; + + if (ccw) { + return ccw->pv; + } + + /* we have to bail out for the "none" machine */ + obj =3D object_dynamic_cast(qdev_get_machine(), + TYPE_S390_CCW_MACHINE); + if (!obj) { + return false; + } + ccw =3D S390_CCW_MACHINE(obj); + return ccw->pv; +} + +int s390_pv_vm_enable(void); +void s390_pv_vm_disable(void); +int s390_pv_set_sec_parms(uint64_t origin, uint64_t length); +int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tweak); +void s390_pv_perf_clear_reset(void); +int s390_pv_verify(void); +void s390_pv_unshare(void); +#else +static inline bool s390_is_pv(void) { return false; } +static inline int s390_pv_vm_enable(void) { return 0; } +static inline void s390_pv_vm_disable(void) {} +static inline int s390_pv_set_sec_parms(uint64_t origin, uint64_t length) = { return 0; } +static inline int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tw= eak) { return 0; } +static inline void s390_pv_perf_clear_reset(void) {} +static inline int s390_pv_verify(void) { return 0; } +static inline void s390_pv_unshare(void) {} +#endif + + + +#endif /* HW_S390_PV_H */ diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-vir= tio-ccw.h index 8aa27199c9123bab..cd1dccc6e3ba8645 100644 --- a/include/hw/s390x/s390-virtio-ccw.h +++ b/include/hw/s390x/s390-virtio-ccw.h @@ -28,6 +28,7 @@ typedef struct S390CcwMachineState { /*< public >*/ bool aes_key_wrap; bool dea_key_wrap; + bool pv; uint8_t loadparm[8]; } S390CcwMachineState; =20 diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index 3dd396e870357944..84029f14814b4980 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -37,6 +37,8 @@ #include "sysemu/hw_accel.h" #include "hw/qdev-properties.h" #ifndef CONFIG_USER_ONLY +#include "hw/s390x/s390-virtio-ccw.h" +#include "hw/s390x/pv.h" #include "hw/boards.h" #include "sysemu/arch_init.h" #include "sysemu/sysemu.h" diff --git a/target/s390x/cpu_features_def.inc.h b/target/s390x/cpu_feature= s_def.inc.h index 31dff0d84e972451..60db28351d059091 100644 --- a/target/s390x/cpu_features_def.inc.h +++ b/target/s390x/cpu_features_def.inc.h @@ -107,6 +107,7 @@ DEF_FEAT(DEFLATE_BASE, "deflate-base", STFL, 151, "Defl= ate-conversion facility ( DEF_FEAT(VECTOR_PACKED_DECIMAL_ENH, "vxpdeh", STFL, 152, "Vector-Packed-De= cimal-Enhancement Facility") DEF_FEAT(MSA_EXT_9, "msa9-base", STFL, 155, "Message-security-assist-exten= sion-9 facility (excluding subfunctions)") DEF_FEAT(ETOKEN, "etoken", STFL, 156, "Etoken facility") +DEF_FEAT(UNPACK, "unpack", STFL, 161, "Unpack facility") =20 /* Features exposed via SCLP SCCB Byte 80 - 98 (bit numbers relative to b= yte-80) */ DEF_FEAT(SIE_GSLS, "gsls", SCLP_CONF_CHAR, 40, "SIE: Guest-storage-limit-s= uppression facility") diff --git a/target/s390x/diag.c b/target/s390x/diag.c index 54e5670b3fd6d960..b245e557037ded06 100644 --- a/target/s390x/diag.c +++ b/target/s390x/diag.c @@ -20,6 +20,7 @@ #include "sysemu/cpus.h" #include "hw/s390x/ipl.h" #include "hw/s390x/s390-virtio-ccw.h" +#include "hw/s390x/pv.h" =20 int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3) { @@ -52,6 +53,7 @@ int handle_diag_288(CPUS390XState *env, uint64_t r1, uint= 64_t r3) #define DIAG_308_RC_OK 0x0001 #define DIAG_308_RC_NO_CONF 0x0102 #define DIAG_308_RC_INVALID 0x0402 +#define DIAG_308_RC_NO_PV_CONF 0x0902 =20 #define DIAG308_RESET_MOD_CLR 0 #define DIAG308_RESET_LOAD_NORM 1 @@ -59,10 +61,17 @@ int handle_diag_288(CPUS390XState *env, uint64_t r1, ui= nt64_t r3) #define DIAG308_LOAD_NORMAL_DUMP 4 #define DIAG308_SET 5 #define DIAG308_STORE 6 +#define DIAG308_PV_SET 8 +#define DIAG308_PV_STORE 9 +#define DIAG308_PV_START 10 =20 static int diag308_parm_check(CPUS390XState *env, uint64_t r1, uint64_t ad= dr, uintptr_t ra, bool write) { + /* Handled by the Ultravisor */ + if (s390_is_pv()) { + return 0; + } if ((r1 & 1) || (addr & ~TARGET_PAGE_MASK)) { s390_program_interrupt(env, PGM_SPECIFICATION, ra); return -1; @@ -93,6 +102,11 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, u= int64_t r3, uintptr_t ra) return; } =20 + if (subcode >=3D DIAG308_PV_SET && !s390_has_feat(S390_FEAT_UNPACK)) { + s390_program_interrupt(env, PGM_SPECIFICATION, ra); + return; + } + switch (subcode) { case DIAG308_RESET_MOD_CLR: s390_ipl_reset_request(cs, S390_RESET_MODIFIED_CLEAR); @@ -105,6 +119,7 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, u= int64_t r3, uintptr_t ra) s390_ipl_reset_request(cs, S390_RESET_REIPL); break; case DIAG308_SET: + case DIAG308_PV_SET: if (diag308_parm_check(env, r1, addr, ra, false)) { return; } @@ -128,10 +143,15 @@ out: g_free(iplb); return; case DIAG308_STORE: + case DIAG308_PV_STORE: if (diag308_parm_check(env, r1, addr, ra, true)) { return; } - iplb =3D s390_ipl_get_iplb(); + if (subcode =3D=3D DIAG308_PV_STORE) { + iplb =3D s390_ipl_get_iplb_pv(); + } else { + iplb =3D s390_ipl_get_iplb(); + } if (iplb) { cpu_physical_memory_write(addr, iplb, be32_to_cpu(iplb->len)); env->regs[r1 + 1] =3D DIAG_308_RC_OK; @@ -139,6 +159,15 @@ out: env->regs[r1 + 1] =3D DIAG_308_RC_NO_CONF; } return; + case DIAG308_PV_START: + iplb =3D s390_ipl_get_iplb_pv(); + if (!iplb) { + env->regs[r1 + 1] =3D DIAG_308_RC_NO_PV_CONF; + return; + } + + s390_ipl_reset_request(cs, S390_RESET_PV); + break; default: s390_program_interrupt(env, PGM_SPECIFICATION, ra); break; --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933738; cv=none; d=zohomail.com; s=zohoarc; b=b9SdDbOfQGForGsBWdo2xZvOjPearSpXOoE1z3a5R1BS0aycbEG0LlLnf+IkXs0OdcgNtcHG4Dsudv/eSaoq3rR3d6ld1DWXsWnDDyD79QPZGnx+h/sVqXc1wx9/1V4+M+hEaHVN2hUIxgzSYS7eYn1+6lwEy8cIliDneBx0a9c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933738; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Zo4Pf/gaLqbguZ1N2Bl8dosLUToTctsDcQqqS+zAjoE=; b=LyuU0QdPdEVKJhOK3or45Qypa9keI8VipYNcPxHAqDSNYI26rdrWz+U4gTaqGTsE0HTiRmvnwBSGfIThZUM1zReE6jQxLE8Iwq1nBAR69YXSLy4gKy8UNALrT4823MPXnjZKoV+4Ho1PzPfTMFCoLF8qvnHgjqSuBJZF8cnaIr4= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933738956616.6715087578199; Wed, 11 Mar 2020 06:35:38 -0700 (PDT) Received: from localhost ([::1]:52006 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1WK-0007xG-HU for importer@patchew.org; Wed, 11 Mar 2020 09:35:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59030) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Om-0004nS-0J for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Ok-0002PB-Tf for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:47 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:35618) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Ok-0002ON-LR for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:46 -0400 Received: from pps.filterd (m0098404.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDOGk6107232 for ; Wed, 11 Mar 2020 09:27:45 -0400 Received: from e06smtp04.uk.ibm.com (e06smtp04.uk.ibm.com [195.75.94.100]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq05utsv1-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:27:44 -0400 Received: from localhost by e06smtp04.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:16 -0000 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp04.uk.ibm.com (192.168.101.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:13 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMCoc55181458 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:12 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6BE685204F; Wed, 11 Mar 2020 13:22:12 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 27F4952054; Wed, 11 Mar 2020 13:22:10 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 03/15] s390x: protvirt: Add migration blocker Date: Wed, 11 Mar 2020 09:21:39 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0016-0000-0000-000002EF6B6B X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0017-0000-0000-00003352D4C3 Message-Id: <20200311132151.172389-4-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxlogscore=644 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 mlxscore=0 spamscore=0 malwarescore=0 clxscore=1015 suspectscore=3 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Migration is not yet supported. Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda Reviewed-by: Cornelia Huck --- hw/s390x/s390-virtio-ccw.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 9569b777a0e1abd6..deb31e060052d279 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -42,6 +42,9 @@ #include "hw/s390x/tod.h" #include "sysemu/sysemu.h" #include "hw/s390x/pv.h" +#include "migration/blocker.h" + +static Error *pv_mig_blocker; =20 S390CPU *s390_cpu_addr2state(uint16_t cpu_addr) { @@ -321,15 +324,30 @@ static void s390_machine_unprotect(S390CcwMachineStat= e *ms) { s390_pv_vm_disable(); ms->pv =3D false; + migrate_del_blocker(pv_mig_blocker); + error_free_or_abort(&pv_mig_blocker); } =20 static int s390_machine_protect(S390CcwMachineState *ms) { + Error *local_err =3D NULL; int rc; =20 + error_setg(&pv_mig_blocker, + "protected VMs are currently not migrateable."); + rc =3D migrate_add_blocker(pv_mig_blocker, &local_err); + if (local_err) { + error_report_err(local_err); + error_free_or_abort(&pv_mig_blocker); + return rc; + } + /* Create SE VM */ rc =3D s390_pv_vm_enable(); if (rc) { + error_report_err(local_err); + migrate_del_blocker(pv_mig_blocker); + error_free_or_abort(&pv_mig_blocker); return rc; } =20 --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933674; cv=none; d=zohomail.com; s=zohoarc; b=V0G3birYOkbhoASkTKTjfL5Arq8LrCgykG9WwWjWzI1e5OkAFLh75w0UI9/H+kxhtIqbOs0C/mBHDPo7tvzCyWBRY+lBeghdY93DzLtsk/Wi6G9rd0fN0JnjR4hk5zDUJhfZyJbVP5kC/M7tYcNgYAg0NcDc7wip1ccsTf5uZd4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933674; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=d7/6AO7IaiDjCNTg8wtvBAGa3itc3kZfC5x0VLIZHOY=; b=E3A2LOI2NgQxKmpaks2uhZjwcK2P5qemBdGPoPmW4JGFPP3eCm2eZVvizXs9bSJQ68SZ+ED5mFWLiU1NGWIXujNf1lwj/LuA02Z5GbrxE6wh0dBN+dQXMh6Wqc0LTXIsKH/9P/9sfp12e6J4Wj/xDqHiSS3gHW63QP1mFy99Gq8= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933674625522.1150095756878; Wed, 11 Mar 2020 06:34:34 -0700 (PDT) Received: from localhost ([::1]:51996 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1VI-0006wB-2i for importer@patchew.org; Wed, 11 Mar 2020 09:34:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58973) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Oc-0004Z4-FO for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Ob-0002Go-5C for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:38 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:15034) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Oa-0002Gg-UT for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:37 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDMeTc003619 for ; Wed, 11 Mar 2020 09:27:36 -0400 Received: from e06smtp07.uk.ibm.com (e06smtp07.uk.ibm.com [195.75.94.103]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hdsm4j-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:27:34 -0400 Received: from localhost by e06smtp07.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:17 -0000 Received: from b06avi18626390.portsmouth.uk.ibm.com (9.149.26.192) by e06smtp07.uk.ibm.com (192.168.101.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:14 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06avi18626390.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDLEJE48497012 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:21:14 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F00955204F; Wed, 11 Mar 2020 13:22:13 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id C3BDB52050; Wed, 11 Mar 2020 13:22:12 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 04/15] s390x: protvirt: Inhibit balloon when switching to protected mode Date: Wed, 11 Mar 2020 09:21:40 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0028-0000-0000-000003E31F91 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0029-0000-0000-000024A86405 Message-Id: <20200311132151.172389-5-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=3 priorityscore=1501 spamscore=0 adultscore=0 mlxlogscore=999 mlxscore=0 clxscore=1015 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Ballooning in protected VMs can only be done when the guest shares the pages it gives to the host. If pages are not shared, the integrity checks will fail once those pages have been altered and are given back to the guest. As we currently do not yet have a solution for this we will continue like this: 1. We block ballooning now in QEMU (with this patch) 2. Later we will provide a change to virtio that removes the blocker and adds VIRTIO_F_IOMMU_PLATFORM automatically by QEMU when doing the protvirt switch. This is ok as the guest balloon driver will reject to work with the IOMMU change 3. Later we can fix the guest balloon driver to accept the IOMMU feature bit and correctly exercise sharing and unsharing of balloon pages Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda --- hw/s390x/s390-virtio-ccw.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index deb31e060052d279..066e01f303c35671 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -41,6 +41,7 @@ #include "hw/qdev-properties.h" #include "hw/s390x/tod.h" #include "sysemu/sysemu.h" +#include "sysemu/balloon.h" #include "hw/s390x/pv.h" #include "migration/blocker.h" =20 @@ -326,6 +327,7 @@ static void s390_machine_unprotect(S390CcwMachineState = *ms) ms->pv =3D false; migrate_del_blocker(pv_mig_blocker); error_free_or_abort(&pv_mig_blocker); + qemu_balloon_inhibit(false); } =20 static int s390_machine_protect(S390CcwMachineState *ms) @@ -333,10 +335,12 @@ static int s390_machine_protect(S390CcwMachineState *= ms) Error *local_err =3D NULL; int rc; =20 + qemu_balloon_inhibit(true); error_setg(&pv_mig_blocker, "protected VMs are currently not migrateable."); rc =3D migrate_add_blocker(pv_mig_blocker, &local_err); if (local_err) { + qemu_balloon_inhibit(false); error_report_err(local_err); error_free_or_abort(&pv_mig_blocker); return rc; @@ -345,6 +349,7 @@ static int s390_machine_protect(S390CcwMachineState *ms) /* Create SE VM */ rc =3D s390_pv_vm_enable(); if (rc) { + qemu_balloon_inhibit(false); error_report_err(local_err); migrate_del_blocker(pv_mig_blocker); error_free_or_abort(&pv_mig_blocker); --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933196; cv=none; d=zohomail.com; s=zohoarc; b=NI+mRSoTJ45h2oU+Lqo8kdDICOcPQtidGqmodQHOaOa/32oswpduVJ0E8lxTlM4y6Ls8q5XEPPlfCoYb662Ky83mp3W5OQVt5dacyeS/j8SPCTi008ezzC1ELNAzrixoBcetjobn4pQojSCttwPYF/QRHDzFkbaCaxDr2xa37J8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933196; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9aiLjyVUdrNFAIMftAxk6v+ZlvIwrylf8qgmf1JYvRY=; b=lBfavhDPwMXcCA+1fFSR1gxRYRBd4+Y7XjRSxCi2J1mt+ypuUrN70GJr1ep40ul8h/mcLtb13O6WgxMaRZyWZG4DOo7EUUgtJTa2ywcC/vJ8IHYSOW5yoT3ttz6QauLRyg7vhWHt6VU8Voq2mHZvMAj4P6/IKndcZblKbwI1cdQ= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158393319607164.70929217143635; Wed, 11 Mar 2020 06:26:36 -0700 (PDT) Received: from localhost ([::1]:51848 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Na-0002EM-Ok for importer@patchew.org; Wed, 11 Mar 2020 09:26:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58512) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1MJ-0000TO-5p for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:25:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1MG-0007u5-QZ for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:25:14 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:59164) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1MG-0007rC-Iu for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:25:12 -0400 Received: from pps.filterd (m0187473.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDO3jj082644 for ; Wed, 11 Mar 2020 09:25:11 -0400 Received: from e06smtp07.uk.ibm.com (e06smtp07.uk.ibm.com [195.75.94.103]) by mx0a-001b2d01.pphosted.com with ESMTP id 2ypxbk4vc1-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:24:43 -0400 Received: from localhost by e06smtp07.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:19 -0000 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp07.uk.ibm.com (192.168.101.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:16 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMFZZ54722728 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:15 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 963E352051; Wed, 11 Mar 2020 13:22:15 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 53C3C5204E; Wed, 11 Mar 2020 13:22:14 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 05/15] s390x: protvirt: KVM intercept changes Date: Wed, 11 Mar 2020 09:21:41 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0028-0000-0000-000003E31F95 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0029-0000-0000-000024A86407 Message-Id: <20200311132151.172389-6-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 mlxlogscore=999 adultscore=0 clxscore=1015 mlxscore=0 malwarescore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 bulkscore=0 suspectscore=1 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Protected VMs no longer intercept with code 4 for an instruction interception. Instead they have codes 104 and 108 for protected instruction interception and protected instruction notification respectively. The 104 mirrors the 4 interception. The 108 is a notification interception to let KVM and QEMU know that something changed and we need to update tracking information or perform specific tasks. It's currently taken for the following instructions: * spx (To inform about the changed prefix location) * sclp (On incorrect SCCB values, so we can inject a IRQ) * sigp (All but "stop and store status") * diag308 (Subcodes 0/1) Of these exits only sclp errors, state changing sigps and diag308 will reach QEMU. QEMU will do its parts of the job, while the ultravisor has done the instruction part of the job. Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda Reviewed-by: Cornelia Huck --- target/s390x/kvm.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index 1d6fd6a27b48e35f..eec0b92479465b9c 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -115,6 +115,8 @@ #define ICPT_CPU_STOP 0x28 #define ICPT_OPEREXC 0x2c #define ICPT_IO 0x40 +#define ICPT_PV_INSTR 0x68 +#define ICPT_PV_INSTR_NOTIFICATION 0x6c =20 #define NR_LOCAL_IRQS 32 /* @@ -1693,6 +1695,8 @@ static int handle_intercept(S390CPU *cpu) (long)cs->kvm_run->psw_addr); switch (icpt_code) { case ICPT_INSTRUCTION: + case ICPT_PV_INSTR: + case ICPT_PV_INSTR_NOTIFICATION: r =3D handle_instruction(cpu, run); break; case ICPT_PROGRAM: --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933330; cv=none; d=zohomail.com; s=zohoarc; b=G9xH7mq7Fd6kpp4TA3E0L77eqj60Lt7yRROJN1+yCR0kkaI2cU9Xo4wr0BbZ2zpIG6vOSdJcojd6hMfnEUfomPZBsTjxdmWOcIhaDXISjWIDOXuKRBzcSa8bmTa4yqnyGZlTdKIU8b9UFTJ5/5BYzH06uAG+Ht5Cryvtblb9Yo8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933330; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=o+te4KU4+0bI+1wIhl+nVAw4JosWLCtczIp+RmKBeRc=; b=bBG6+QcTUj5dDwRlEDYJaeML53VvgoxaHhlligxcyPtKrwAyJtnG3MqY44w9s3O/mfsPxHmfPlqNe0f1TSEEAfLeWF//WDidxHwZ2qFRthVL6Mw2KCa8Qe/8WaYQGc14Z3uQcizSPbVyJwf6xv0NYYGnVWm3zsW09joiIM6DzFk= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933330034359.6527706351046; Wed, 11 Mar 2020 06:28:50 -0700 (PDT) Received: from localhost ([::1]:51894 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Pk-00062C-Bg for importer@patchew.org; Wed, 11 Mar 2020 09:28:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58985) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Oe-0004ap-1x for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Oc-0002HF-Qa for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:39 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:41902) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Oc-0002Gy-Il for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:38 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDMi2H003677 for ; Wed, 11 Mar 2020 09:27:37 -0400 Received: from e06smtp04.uk.ibm.com (e06smtp04.uk.ibm.com [195.75.94.100]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hdsmb3-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:27:35 -0400 Received: from localhost by e06smtp04.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:22 -0000 Received: from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196) by e06smtp04.uk.ibm.com (192.168.101.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:18 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMHX447382782 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:17 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 34C1252052; Wed, 11 Mar 2020 13:22:17 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id EFF8052051; Wed, 11 Mar 2020 13:22:15 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 06/15] s390x: Add SIDA memory ops Date: Wed, 11 Mar 2020 09:21:42 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0016-0000-0000-000002EF6B7E X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0017-0000-0000-00003352D4CD Message-Id: <20200311132151.172389-7-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=1 priorityscore=1501 spamscore=0 adultscore=0 mlxlogscore=986 mlxscore=0 clxscore=1015 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Protected guests save the instruction control blocks in the SIDA instead of QEMU/KVM directly accessing the guest's memory. Let's introduce new functions to access the SIDA. Also the new memops are available with KVM_CAP_S390_PROTECTED, so let's check for that. Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda Reviewed-by: Cornelia Huck --- target/s390x/cpu.h | 7 ++++++- target/s390x/kvm.c | 25 +++++++++++++++++++++++++ target/s390x/kvm_s390x.h | 2 ++ target/s390x/mmu_helper.c | 14 ++++++++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h index 1d17709d6e10b5e0..035427521cec2528 100644 --- a/target/s390x/cpu.h +++ b/target/s390x/cpu.h @@ -823,7 +823,12 @@ int s390_cpu_virt_mem_rw(S390CPU *cpu, vaddr laddr, ui= nt8_t ar, void *hostbuf, #define s390_cpu_virt_mem_check_write(cpu, laddr, ar, len) \ s390_cpu_virt_mem_rw(cpu, laddr, ar, NULL, len, true) void s390_cpu_virt_mem_handle_exc(S390CPU *cpu, uintptr_t ra); - +int s390_cpu_pv_mem_rw(S390CPU *cpu, unsigned int offset, void *hostbuf, + int len, bool is_write); +#define s390_cpu_pv_mem_read(cpu, offset, dest, len) \ + s390_cpu_pv_mem_rw(cpu, offset, dest, len, false) +#define s390_cpu_pv_mem_write(cpu, offset, dest, len) \ + s390_cpu_pv_mem_rw(cpu, offset, dest, len, true) =20 /* sigp.c */ int s390_cpu_restart(S390CPU *cpu); diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index eec0b92479465b9c..cdcd538b4f7fb318 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -154,6 +154,7 @@ static int cap_ri; static int cap_gs; static int cap_hpage_1m; static int cap_vcpu_resets; +static int cap_protected; =20 static int active_cmma; =20 @@ -346,6 +347,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) cap_mem_op =3D kvm_check_extension(s, KVM_CAP_S390_MEM_OP); cap_s390_irq =3D kvm_check_extension(s, KVM_CAP_S390_INJECT_IRQ); cap_vcpu_resets =3D kvm_check_extension(s, KVM_CAP_S390_VCPU_RESETS); + cap_protected =3D kvm_check_extension(s, KVM_CAP_S390_PROTECTED); =20 if (!kvm_check_extension(s, KVM_CAP_S390_GMAP) || !kvm_check_extension(s, KVM_CAP_S390_COW)) { @@ -846,6 +848,29 @@ int kvm_s390_mem_op(S390CPU *cpu, vaddr addr, uint8_t = ar, void *hostbuf, return ret; } =20 +int kvm_s390_mem_op_pv(S390CPU *cpu, uint64_t offset, void *hostbuf, + int len, bool is_write) +{ + struct kvm_s390_mem_op mem_op =3D { + .sida_offset =3D offset, + .size =3D len, + .op =3D is_write ? KVM_S390_MEMOP_SIDA_WRITE + : KVM_S390_MEMOP_SIDA_READ, + .buf =3D (uint64_t)hostbuf, + }; + int ret; + + if (!cap_mem_op || !cap_protected) { + return -ENOSYS; + } + + ret =3D kvm_vcpu_ioctl(CPU(cpu), KVM_S390_MEM_OP, &mem_op); + if (ret < 0) { + error_report("KVM_S390_MEM_OP failed: %s", strerror(-ret)); + } + return ret; +} + /* * Legacy layout for s390: * Older S390 KVM requires the topmost vma of the RAM to be diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h index 0b21789796d7c462..9c38f6ccce83e39e 100644 --- a/target/s390x/kvm_s390x.h +++ b/target/s390x/kvm_s390x.h @@ -19,6 +19,8 @@ void kvm_s390_vcpu_interrupt(S390CPU *cpu, struct kvm_s39= 0_irq *irq); void kvm_s390_access_exception(S390CPU *cpu, uint16_t code, uint64_t te_co= de); int kvm_s390_mem_op(S390CPU *cpu, vaddr addr, uint8_t ar, void *hostbuf, int len, bool is_write); +int kvm_s390_mem_op_pv(S390CPU *cpu, vaddr addr, void *hostbuf, int len, + bool is_write); void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t code); int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state); void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu); diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c index 0be2f300bbe4ac8b..7d9f3059cd502c49 100644 --- a/target/s390x/mmu_helper.c +++ b/target/s390x/mmu_helper.c @@ -474,6 +474,20 @@ static int translate_pages(S390CPU *cpu, vaddr addr, i= nt nr_pages, return 0; } =20 +int s390_cpu_pv_mem_rw(S390CPU *cpu, unsigned int offset, void *hostbuf, + int len, bool is_write) +{ + int ret; + + if (kvm_enabled()) { + ret =3D kvm_s390_mem_op_pv(cpu, offset, hostbuf, len, is_write); + } else { + /* Protected Virtualization is a KVM/Hardware only feature */ + g_assert_not_reached(); + } + return ret; +} + /** * s390_cpu_virt_mem_rw: * @laddr: the logical start address --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933406; cv=none; d=zohomail.com; s=zohoarc; b=aimGsz/Fzumfi4RFBenIe9yGI7zB3umCCovSGsGYLbvSi33IscUpaOaZYWqc3iPk++mb2hg5v3adhC84ccCbTdg3UKrYe53MLWh8CzL3VnIIGg8qQlfY/YA6PdQM35n4m22U0zelU39aDooElooEdCkE7T6GsI4a4wkx5UWlDTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933406; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=z6d+98uBR0sm0AchGM6G+u048LklVkJcvCs2wVU+dAw=; b=TBZiLFRGv4a8tA8cknM5bIxb8jYb04IyMBpNYG+iOMEHq7T5GATi9USGTS6iqNAcG08SjRghKNRGym6qlI5I+5Lhtw7lK5zRxcy6XsBpXnoEb+k52bdZrogN4RFC7rJ8HJ6ooSgk2rMusKC2Ry9WzZNsoeKFdn9MzrI88Hd6V0I= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933406203377.57461188587604; Wed, 11 Mar 2020 06:30:06 -0700 (PDT) Received: from localhost ([::1]:51914 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Qv-0000kf-Mw for importer@patchew.org; Wed, 11 Mar 2020 09:30:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58394) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Ln-00088g-IE for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Lm-0007H7-Di for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:43 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:19972 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Lm-0007GA-8m for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:42 -0400 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDOFk9010663 for ; Wed, 11 Mar 2020 09:24:41 -0400 Received: from e06smtp03.uk.ibm.com (e06smtp03.uk.ibm.com [195.75.94.99]) by mx0b-001b2d01.pphosted.com with ESMTP id 2yq04bt2mj-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:24:35 -0400 Received: from localhost by e06smtp03.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:23 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp03.uk.ibm.com (192.168.101.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:19 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMILA47513702 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:19 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D9CA95204F; Wed, 11 Mar 2020 13:22:18 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 962105204E; Wed, 11 Mar 2020 13:22:17 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 07/15] s390x: protvirt: Move STSI data over SIDAD Date: Wed, 11 Mar 2020 09:21:43 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0012-0000-0000-0000038F6882 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0013-0000-0000-000021CC3735 Message-Id: <20200311132151.172389-8-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 suspectscore=1 priorityscore=1501 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.158.5 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" For protected guests, we need to put the STSI emulation results into the SIDA, so SIE will write them into the guest at the next entry. Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Claudio Imbrenda --- target/s390x/kvm.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index cdcd538b4f7fb318..8085d5030e7c6454 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -50,6 +50,7 @@ #include "exec/memattrs.h" #include "hw/s390x/s390-virtio-ccw.h" #include "hw/s390x/s390-virtio-hcall.h" +#include "hw/s390x/pv.h" =20 #ifndef DEBUG_KVM #define DEBUG_KVM 0 @@ -1800,7 +1801,9 @@ static void insert_stsi_3_2_2(S390CPU *cpu, __u64 add= r, uint8_t ar) SysIB_322 sysib; int del; =20 - if (s390_cpu_virt_mem_read(cpu, addr, ar, &sysib, sizeof(sysib))) { + if (s390_is_pv()) { + s390_cpu_pv_mem_read(cpu, 0, &sysib, sizeof(sysib)); + } else if (s390_cpu_virt_mem_read(cpu, addr, ar, &sysib, sizeof(sysib)= )) { return; } /* Shift the stack of Extended Names to prepare for our own data */ @@ -1840,7 +1843,11 @@ static void insert_stsi_3_2_2(S390CPU *cpu, __u64 ad= dr, uint8_t ar) /* Insert UUID */ memcpy(sysib.vm[0].uuid, &qemu_uuid, sizeof(sysib.vm[0].uuid)); =20 - s390_cpu_virt_mem_write(cpu, addr, ar, &sysib, sizeof(sysib)); + if (s390_is_pv()) { + s390_cpu_pv_mem_write(cpu, 0, &sysib, sizeof(sysib)); + } else { + s390_cpu_virt_mem_write(cpu, addr, ar, &sysib, sizeof(sysib)); + } } =20 static int handle_stsi(S390CPU *cpu) --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933049; cv=none; d=zohomail.com; s=zohoarc; b=ADWMX/gp9SQuZXhIaAb8k8hRidanTQwrhXwP5ckyNZxVKG6YBPuM9f+/NXymiNbUSgD1i6xjqXG2GfRA/p14colCBD0eVoPbkx93GQMx9aTrWb1ktOMXZbhPE0S02RrxaggrKOOgFXcywnn3jka9OaPq8sfqSBFXZX87mR63R0g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933049; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qD+GjzC/HPpeGThUzWMDo5Khm/s4yNel4PZeSL/WTvg=; b=CFnIQ3Ofkp3+C9ixwFy7zDLktoE1fQ9/1CxqlqqYGqrHAp6mm1xUAtGD3gizKQX/0+ovB2Ge0+GnP4lgW1wNgA3AdjX2hBs0ioX3kNGPrEieBgSIhVNiLsGeL5xnvCLExdv6EGzp8uqOTKni2WP5jjQ79fbzLmqilKeG+wKfN0A= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158393304961874.54019649273641; Wed, 11 Mar 2020 06:24:09 -0700 (PDT) Received: from localhost ([::1]:51782 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1LE-0006YR-7s for importer@patchew.org; Wed, 11 Mar 2020 09:24:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57934) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1KF-0005B1-M4 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1KE-0005V4-A9 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:07 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:39514) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1KE-0005Uq-2o for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:06 -0400 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDLsHH194017 for ; Wed, 11 Mar 2020 09:23:05 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hbh867-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:23:03 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:23 -0000 Received: from b06avi18878370.portsmouth.uk.ibm.com (9.149.26.194) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:21 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06avi18878370.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMKvp47251950 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:20 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 695CA52050; Wed, 11 Mar 2020 13:22:20 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 3F14F52051; Wed, 11 Mar 2020 13:22:19 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 08/15] s390x: protvirt: SCLP interpretation Date: Wed, 11 Mar 2020 09:21:44 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-4275-0000-0000-000003AAA274 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-4276-0000-0000-000038BFBE8B Message-Id: <20200311132151.172389-9-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 malwarescore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 suspectscore=1 spamscore=0 mlxlogscore=842 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" SCLP for a protected guest is done over the SIDAD, so we need to use the s390_cpu_pv_mem_* functions to access the SIDAD instead of guest memory when reading/writing SCBs. To not confuse the sclp emulation, we set 0x4000 as the SCCB address, since the function that injects the sclp external interrupt would reject a zero sccb address. Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda --- hw/s390x/sclp.c | 30 ++++++++++++++++++++++++++++++ include/hw/s390x/sclp.h | 2 ++ target/s390x/kvm.c | 24 +++++++++++++++++++----- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c index af0bfbc2eca74767..5f3aa30d6283dce5 100644 --- a/hw/s390x/sclp.c +++ b/hw/s390x/sclp.c @@ -193,6 +193,36 @@ static void sclp_execute(SCLPDevice *sclp, SCCB *sccb,= uint32_t code) } } =20 +/* + * We only need the address to have something valid for the + * service_interrupt call. + */ +#define SCLP_PV_DUMMY_ADDR 0x4000 +int sclp_service_call_protected(CPUS390XState *env, uint64_t sccb, + uint32_t code) +{ + SCLPDevice *sclp =3D get_sclp_device(); + SCLPDeviceClass *sclp_c =3D SCLP_GET_CLASS(sclp); + SCCB work_sccb; + hwaddr sccb_len =3D sizeof(SCCB); + + /* + * Only a very limited amount of calls is permitted by the + * Ultravisor and we support all of them, so we don't check for + * them. All other specification exceptions are also interpreted + * by the Ultravisor and hence never cause an exit we need to + * handle. + * + * Setting the CC is also done by the Ultravisor. + */ + s390_cpu_pv_mem_read(env_archcpu(env), 0, &work_sccb, sccb_len); + sclp_c->execute(sclp, &work_sccb, code); + s390_cpu_pv_mem_write(env_archcpu(env), 0, &work_sccb, + be16_to_cpu(work_sccb.h.length)); + sclp_c->service_interrupt(sclp, SCLP_PV_DUMMY_ADDR); + return 0; +} + int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code) { SCLPDevice *sclp =3D get_sclp_device(); diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h index c54413b78cf01b27..c0a3faa37d730453 100644 --- a/include/hw/s390x/sclp.h +++ b/include/hw/s390x/sclp.h @@ -217,5 +217,7 @@ void s390_sclp_init(void); void sclp_service_interrupt(uint32_t sccb); void raise_irq_cpu_hotplug(void); int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code); +int sclp_service_call_protected(CPUS390XState *env, uint64_t sccb, + uint32_t code); =20 #endif diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index 8085d5030e7c6454..ff6027036ec2f14a 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -1227,12 +1227,26 @@ static void kvm_sclp_service_call(S390CPU *cpu, str= uct kvm_run *run, sccb =3D env->regs[ipbh0 & 0xf]; code =3D env->regs[(ipbh0 & 0xf0) >> 4]; =20 - r =3D sclp_service_call(env, sccb, code); - if (r < 0) { - kvm_s390_program_interrupt(cpu, -r); - return; + switch (run->s390_sieic.icptcode) { + case ICPT_PV_INSTR_NOTIFICATION: + g_assert(s390_is_pv()); + /* The notification intercepts are currently handled by KVM */ + error_report("unexpected SCLP PV notification"); + exit(1); + break; + case ICPT_PV_INSTR: + g_assert(s390_is_pv()); + sclp_service_call_protected(env, sccb, code); + break; + case ICPT_INSTRUCTION: + g_assert(!s390_is_pv()); + r =3D sclp_service_call(env, sccb, code); + if (r < 0) { + kvm_s390_program_interrupt(cpu, -r); + return; + } + setcc(cpu, r); } - setcc(cpu, r); } =20 static int handle_b2(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1) --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933225; cv=none; d=zohomail.com; s=zohoarc; b=Vl4noDSLg4J5+1sbTTxP6mePr1d4Wzd3KG4V6sx4JxiaGs3Z/wTYTzvmkELR91i0SSwV5NIWgfhqTDV1Roer+5xbQqD8oPtwLaO8pqYRfsJahmiG45zNZTpA7URxusU7vSxjfn5G+kyzdtEbyXZS2qwQP2aTyRAZ3H7MG9OalDM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933225; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8ER2kx3QLlRm/usU4N9WCXKMS5W+f65nGy0D9vu4ejM=; b=WOW1HDIEgqOpKSalAdBRtqtSsqz158T1rGIjjhNtBxL4l4U2iv3M3XqXJJiD1k/bZVR8sYNi5KJ7dErKG8Uw8LKn4hntwaM5OmQMebqlmdXmHmsH0OH7WYHX3N2wfEBdFwHubxggyFTcFqntMiQ1sRgh26S/1RDXum3IwOXlQkc= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933225537655.4568549726024; Wed, 11 Mar 2020 06:27:05 -0700 (PDT) Received: from localhost ([::1]:51858 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1O3-0003HP-7n for importer@patchew.org; Wed, 11 Mar 2020 09:27:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58045) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Kf-00061M-GK for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Ke-0006K3-Eb for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:33 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:16540) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Ke-0006J5-6q for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:32 -0400 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDLscL194032 for ; Wed, 11 Mar 2020 09:23:31 -0400 Received: from e06smtp03.uk.ibm.com (e06smtp03.uk.ibm.com [195.75.94.99]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hbh88u-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:23:01 -0400 Received: from localhost by e06smtp03.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:24 -0000 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp03.uk.ibm.com (192.168.101.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:23 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMM8m55705838 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:22 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0869D52063; Wed, 11 Mar 2020 13:22:22 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id C0C2D52052; Wed, 11 Mar 2020 13:22:20 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 09/15] s390x: protvirt: Set guest IPL PSW Date: Wed, 11 Mar 2020 09:21:45 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0012-0000-0000-0000038F6892 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0013-0000-0000-000021CC3744 Message-Id: <20200311132151.172389-10-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 malwarescore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 suspectscore=1 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Handling of CPU reset and setting of the IPL psw from guest storage at offset 0 is done by a Ultravisor call. Let's only fetch it if necessary. Signed-off-by: Janosch Frank Reviewed-by: Thomas Huth Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda --- target/s390x/cpu.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index 84029f14814b4980..a48d39f139cdc1c4 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -78,16 +78,20 @@ static bool s390_cpu_has_work(CPUState *cs) static void s390_cpu_load_normal(CPUState *s) { S390CPU *cpu =3D S390_CPU(s); - uint64_t spsw =3D ldq_phys(s->as, 0); - - cpu->env.psw.mask =3D spsw & PSW_MASK_SHORT_CTRL; - /* - * Invert short psw indication, so SIE will report a specification - * exception if it was not set. - */ - cpu->env.psw.mask ^=3D PSW_MASK_SHORTPSW; - cpu->env.psw.addr =3D spsw & PSW_MASK_SHORT_ADDR; + uint64_t spsw; =20 + if (!s390_is_pv()) { + spsw =3D ldq_phys(s->as, 0); + cpu->env.psw.mask =3D spsw & PSW_MASK_SHORT_CTRL; + /* + * Invert short psw indication, so SIE will report a specification + * exception if it was not set. + */ + cpu->env.psw.mask ^=3D PSW_MASK_SHORTPSW; + cpu->env.psw.addr =3D spsw & PSW_MASK_SHORT_ADDR; + } else { + s390_cpu_set_state(S390_CPU_STATE_LOAD, cpu); + } s390_cpu_set_state(S390_CPU_STATE_OPERATING, cpu); } #endif --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933432; cv=none; d=zohomail.com; s=zohoarc; b=MXItaiYsJlbx8XL93GIVe/rO9EcRMHA5QBdFktKXHmCRmHGjbs0PGtpSZiNXB/DswerQoUxd71WYg0ksC2s2EVR6B9qHomdMDnupYrxrnGpkUIqGSG/cObSfXnPh2ZDoU/m1+xn87dGxFQB0MPg34nlofIfJEXcNlbBUVBQQ8Ro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933432; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=N3q+EHKtcbbGmJgv+7LxPh4ywhFAU0PYd5jaBIedj24=; b=mbfoGa2bLItMv3nFDJSNEMqXdQ/lACSYYf5ZJhfAzGBuOXlMsTgZW396iXXoKQ449dEe8g1ky2IMoa0UUnp+qmkC5uJ75aQ3P2KWNB4yb3SXbXABtEcj27TBNHivCKAqAMGg32BymTb3cNIGaBexaxo0FmEMyl+YpeDw8OT593g= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933432542992.6841993932034; Wed, 11 Mar 2020 06:30:32 -0700 (PDT) Received: from localhost ([::1]:51922 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1RN-0001gT-VA for importer@patchew.org; Wed, 11 Mar 2020 09:30:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59049) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1On-0004pr-4l for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Ol-0002Qf-Uv for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:49 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:60510) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Ol-0002Pu-NG for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:27:47 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDMjN8003692 for ; Wed, 11 Mar 2020 09:27:46 -0400 Received: from e06smtp03.uk.ibm.com (e06smtp03.uk.ibm.com [195.75.94.99]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hdsmhd-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:27:46 -0400 Received: from localhost by e06smtp03.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:27 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp03.uk.ibm.com (192.168.101.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:24 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMNSb44040430 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:23 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7D88A52063; Wed, 11 Mar 2020 13:22:23 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 686BC52057; Wed, 11 Mar 2020 13:22:22 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 10/15] s390x: protvirt: Move diag 308 data over SIDA Date: Wed, 11 Mar 2020 09:21:46 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0012-0000-0000-0000038F6899 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0013-0000-0000-000021CC374D Message-Id: <20200311132151.172389-11-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=1 priorityscore=1501 spamscore=0 adultscore=0 mlxlogscore=982 mlxscore=0 clxscore=1015 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" For protected guests the IPIB is written/read to/from the SIDA, so we need those accesses to go through s390_cpu_pv_mem_read/write(). Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda --- target/s390x/diag.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/target/s390x/diag.c b/target/s390x/diag.c index b245e557037ded06..a733485caf162111 100644 --- a/target/s390x/diag.c +++ b/target/s390x/diag.c @@ -88,6 +88,7 @@ static int diag308_parm_check(CPUS390XState *env, uint64_= t r1, uint64_t addr, void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr= _t ra) { CPUState *cs =3D env_cpu(env); + S390CPU *cpu =3D S390_CPU(cs); uint64_t addr =3D env->regs[r1]; uint64_t subcode =3D env->regs[r3]; IplParameterBlock *iplb; @@ -124,13 +125,22 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1,= uint64_t r3, uintptr_t ra) return; } iplb =3D g_new0(IplParameterBlock, 1); - cpu_physical_memory_read(addr, iplb, sizeof(iplb->len)); + if (!s390_is_pv()) { + cpu_physical_memory_read(addr, iplb, sizeof(iplb->len)); + } else { + s390_cpu_pv_mem_read(cpu, 0, iplb, sizeof(iplb->len)); + } + if (!iplb_valid_len(iplb)) { env->regs[r1 + 1] =3D DIAG_308_RC_INVALID; goto out; } =20 - cpu_physical_memory_read(addr, iplb, be32_to_cpu(iplb->len)); + if (!s390_is_pv()) { + cpu_physical_memory_read(addr, iplb, be32_to_cpu(iplb->len)); + } else { + s390_cpu_pv_mem_read(cpu, 0, iplb, be32_to_cpu(iplb->len)); + } =20 if (!iplb_valid(iplb)) { env->regs[r1 + 1] =3D DIAG_308_RC_INVALID; @@ -152,12 +162,17 @@ out: } else { iplb =3D s390_ipl_get_iplb(); } - if (iplb) { - cpu_physical_memory_write(addr, iplb, be32_to_cpu(iplb->len)); - env->regs[r1 + 1] =3D DIAG_308_RC_OK; - } else { + if (!iplb) { env->regs[r1 + 1] =3D DIAG_308_RC_NO_CONF; + return; } + + if (!s390_is_pv()) { + cpu_physical_memory_write(addr, iplb, be32_to_cpu(iplb->len)); + } else { + s390_cpu_pv_mem_write(cpu, 0, iplb, be32_to_cpu(iplb->len)); + } + env->regs[r1 + 1] =3D DIAG_308_RC_OK; return; case DIAG308_PV_START: iplb =3D s390_ipl_get_iplb_pv(); --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933541; cv=none; d=zohomail.com; s=zohoarc; b=R+YftI3OlXoJ8jfXhu6jcB910E7e7DU/cwgG0uqiTof78Y0K885iIfbA/efZhKR+SjAPZ0aE0maXIcv3OlLhpiGM03JQ8ED1MTqhvygdzHE3Ml/K2uxvMv/2e6fBTrxDp2FP0PhFjBM839nAQq0DR2wI0GrTafI+hvWG2eHNtGc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933541; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=RqYvXf5WURLlp3fN2/lg56CZq1WA9aRMo1LLcRxQ1Pw=; b=oKbodHM2dgbaJraW9ansbINpqiaXH+udUmzh0oZq4IXskG2OOZb/F3aDxwKQGLCmFO1XcdoDHw4rpOAbo20W9YzNhAthMPd9mC/jO2y6a5AZjqduZkyFgFB3t/DbnTJjSTEiEdKyp8pIwGyB+lVSI1LKm0Rijj0mbtI3fczI9mo= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933541443286.9248230743183; Wed, 11 Mar 2020 06:32:21 -0700 (PDT) Received: from localhost ([::1]:51962 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1T9-0003k7-Ub for importer@patchew.org; Wed, 11 Mar 2020 09:32:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59193) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1PP-000684-Hn for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:28:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1PO-0003Uq-8n for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:28:27 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:52648) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1PO-0003T4-1X for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:28:26 -0400 Received: from pps.filterd (m0098404.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDOGxe107185 for ; Wed, 11 Mar 2020 09:28:25 -0400 Received: from e06smtp02.uk.ibm.com (e06smtp02.uk.ibm.com [195.75.94.98]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq05utt9u-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:28:22 -0400 Received: from localhost by e06smtp02.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:28 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp02.uk.ibm.com (192.168.101.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:26 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMPsk59244564 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:25 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 226E952050; Wed, 11 Mar 2020 13:22:25 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id C85A352052; Wed, 11 Mar 2020 13:22:23 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 11/15] s390x: protvirt: Disable address checks for PV guest IO emulation Date: Wed, 11 Mar 2020 09:21:47 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0008-0000-0000-0000035B92BC X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0009-0000-0000-00004A7CD95D Message-Id: <20200311132151.172389-12-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxlogscore=757 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 mlxscore=0 spamscore=0 malwarescore=0 clxscore=1015 suspectscore=1 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Thomas Huth Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda Reviewed-by: Cornelia Huck --- 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" + +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 =3D 0; + return 0; + } + return decode_basedisp_s(env, ipb, ar); +} =20 int ioinst_disassemble_sch_ident(uint32_t value, int *m, int *cssid, int *= ssid, int *schid) @@ -114,7 +131,7 @@ void ioinst_handle_msch(S390CPU *cpu, uint64_t reg1, ui= nt32_t ipb, uintptr_t ra) CPUS390XState *env =3D &cpu->env; uint8_t ar; =20 - addr =3D decode_basedisp_s(env, ipb, &ar); + addr =3D get_address_from_regs(env, ipb, &ar); if (addr & 3) { s390_program_interrupt(env, PGM_SPECIFICATION, ra); return; @@ -171,7 +188,7 @@ void ioinst_handle_ssch(S390CPU *cpu, uint64_t reg1, ui= nt32_t ipb, uintptr_t ra) CPUS390XState *env =3D &cpu->env; uint8_t ar; =20 - addr =3D decode_basedisp_s(env, ipb, &ar); + addr =3D get_address_from_regs(env, ipb, &ar); if (addr & 3) { s390_program_interrupt(env, PGM_SPECIFICATION, ra); return; @@ -203,7 +220,7 @@ void ioinst_handle_stcrw(S390CPU *cpu, uint32_t ipb, ui= ntptr_t ra) CPUS390XState *env =3D &cpu->env; uint8_t ar; =20 - addr =3D decode_basedisp_s(env, ipb, &ar); + addr =3D get_address_from_regs(env, ipb, &ar); if (addr & 3) { s390_program_interrupt(env, PGM_SPECIFICATION, ra); return; @@ -234,7 +251,7 @@ void ioinst_handle_stsch(S390CPU *cpu, uint64_t reg1, u= int32_t ipb, CPUS390XState *env =3D &cpu->env; uint8_t ar; =20 - addr =3D decode_basedisp_s(env, ipb, &ar); + addr =3D get_address_from_regs(env, ipb, &ar); if (addr & 3) { s390_program_interrupt(env, PGM_SPECIFICATION, ra); return; @@ -303,7 +320,7 @@ int ioinst_handle_tsch(S390CPU *cpu, uint64_t reg1, uin= t32_t ipb, uintptr_t ra) return -EIO; } trace_ioinst_sch_id("tsch", cssid, ssid, schid); - addr =3D decode_basedisp_s(env, ipb, &ar); + addr =3D get_address_from_regs(env, ipb, &ar); if (addr & 3) { s390_program_interrupt(env, PGM_SPECIFICATION, ra); return -EIO; @@ -601,7 +618,7 @@ void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb, uin= tptr_t ra) { ChscReq *req; ChscResp *res; - uint64_t addr; + uint64_t addr =3D 0; int reg; uint16_t len; uint16_t command; @@ -610,7 +627,9 @@ void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb, uin= tptr_t ra) =20 trace_ioinst("chsc"); reg =3D (ipb >> 20) & 0x00f; - addr =3D env->regs[reg]; + if (!s390_is_pv()) { + addr =3D env->regs[reg]; + } /* Page boundary? */ if (addr & 0xfff) { s390_program_interrupt(env, PGM_SPECIFICATION, ra); --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933127; cv=none; d=zohomail.com; s=zohoarc; b=ZNlCGD3kqVvwCIhRVDZ1aaeHt3N8laQ3r+izTY/cWcHGMXU+i0yKtZvs1zixzGwZ8MbLpseV6QHR7H/kJaE9uUcZUuEBoUQxJKyvM5BMYOTp1qQXZe1MxBfcUPWzglO0822ptyWfVrxtffclw+5cQRapNOTs6JQi1KevUzmj3xw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933127; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=L308KnZNDuf8jCDIqMBDSa9/078CdZkeXm2yEDdVslI=; b=SwhZGJ+cCuKDABGl/8ZcNBqC0sq8knNX2qdNGhhfB1HaW1UgFWxwFAutVG2/g0u/p0vdOIoEqZ1up8mNtL7rVh4CWoiEOt2qSH2ESI3+xoPY4+eN6dG1to7QvUmLJsYQo4MszaPuGkrPKdUleq4SDHxEi46WEnCmHiL68LeEF2M= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933127944279.18931424737787; Wed, 11 Mar 2020 06:25:27 -0700 (PDT) Received: from localhost ([::1]:51820 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1MU-0008MV-JI for importer@patchew.org; Wed, 11 Mar 2020 09:25:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57973) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1KK-0005Ia-U6 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1KJ-0005YJ-E5 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:12 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:17170) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1KJ-0005WO-63 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:23:11 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDMiPe003660 for ; Wed, 11 Mar 2020 09:23:10 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hds9jt-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:23:02 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:30 -0000 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:28 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMQWs44105780 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:26 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C741D52050; Wed, 11 Mar 2020 13:22:26 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 7A1E75204F; Wed, 11 Mar 2020 13:22:25 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 12/15] s390x: protvirt: Move IO control structures over SIDA Date: Wed, 11 Mar 2020 09:21:48 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-4275-0000-0000-000003AAA2A7 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-4276-0000-0000-000038BFBEBC Message-Id: <20200311132151.172389-13-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=1 priorityscore=1501 spamscore=0 adultscore=0 mlxlogscore=797 mlxscore=0 clxscore=1015 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" For protected guests, we need to put the IO emulation results into the SIDA, so SIE will write them into the guest at the next entry. Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand --- target/s390x/ioinst.c | 87 ++++++++++++++++++++++++++++++------------- 1 file changed, 61 insertions(+), 26 deletions(-) diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c index 481d789de9e09a04..61095bdc9ffef436 100644 --- a/target/s390x/ioinst.c +++ b/target/s390x/ioinst.c @@ -136,9 +136,13 @@ void ioinst_handle_msch(S390CPU *cpu, uint64_t reg1, u= int32_t ipb, uintptr_t ra) s390_program_interrupt(env, PGM_SPECIFICATION, ra); return; } - if (s390_cpu_virt_mem_read(cpu, addr, ar, &schib, sizeof(schib))) { - s390_cpu_virt_mem_handle_exc(cpu, ra); - return; + if (s390_is_pv()) { + s390_cpu_pv_mem_read(cpu, addr, &schib, sizeof(schib)); + } else { + if (s390_cpu_virt_mem_read(cpu, addr, ar, &schib, sizeof(schib))) { + s390_cpu_virt_mem_handle_exc(cpu, ra); + return; + } } if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid) || !ioinst_schib_valid(&schib)) { @@ -193,9 +197,13 @@ void ioinst_handle_ssch(S390CPU *cpu, uint64_t reg1, u= int32_t ipb, uintptr_t ra) s390_program_interrupt(env, PGM_SPECIFICATION, ra); return; } - if (s390_cpu_virt_mem_read(cpu, addr, ar, &orig_orb, sizeof(orb))) { - s390_cpu_virt_mem_handle_exc(cpu, ra); - return; + if (s390_is_pv()) { + s390_cpu_pv_mem_read(cpu, addr, &orig_orb, sizeof(orb)); + } else { + if (s390_cpu_virt_mem_read(cpu, addr, ar, &orig_orb, sizeof(orb)))= { + s390_cpu_virt_mem_handle_exc(cpu, ra); + return; + } } copy_orb_from_guest(&orb, &orig_orb); if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid) || @@ -229,14 +237,19 @@ void ioinst_handle_stcrw(S390CPU *cpu, uint32_t ipb, = uintptr_t ra) cc =3D css_do_stcrw(&crw); /* 0 - crw stored, 1 - zeroes stored */ =20 - if (s390_cpu_virt_mem_write(cpu, addr, ar, &crw, sizeof(crw)) =3D=3D 0= ) { + if (s390_is_pv()) { + s390_cpu_pv_mem_write(cpu, addr, &crw, sizeof(crw)); setcc(cpu, cc); } else { - if (cc =3D=3D 0) { - /* Write failed: requeue CRW since STCRW is suppressing */ - css_undo_stcrw(&crw); + if (s390_cpu_virt_mem_write(cpu, addr, ar, &crw, sizeof(crw)) =3D= =3D 0) { + setcc(cpu, cc); + } else { + if (cc =3D=3D 0) { + /* Write failed: requeue CRW since STCRW is suppressing */ + css_undo_stcrw(&crw); + } + s390_cpu_virt_mem_handle_exc(cpu, ra); } - s390_cpu_virt_mem_handle_exc(cpu, ra); } } =20 @@ -258,6 +271,9 @@ void ioinst_handle_stsch(S390CPU *cpu, uint64_t reg1, u= int32_t ipb, } =20 if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) { + if (s390_is_pv()) { + return; + } /* * As operand exceptions have a lower priority than access excepti= ons, * we check whether the memory area is writeable (injecting the @@ -290,14 +306,19 @@ void ioinst_handle_stsch(S390CPU *cpu, uint64_t reg1,= uint32_t ipb, } } if (cc !=3D 3) { - if (s390_cpu_virt_mem_write(cpu, addr, ar, &schib, - sizeof(schib)) !=3D 0) { - s390_cpu_virt_mem_handle_exc(cpu, ra); - return; + if (s390_is_pv()) { + s390_cpu_pv_mem_write(cpu, addr, &schib, sizeof(schib)); + } else { + if (s390_cpu_virt_mem_write(cpu, addr, ar, &schib, + sizeof(schib)) !=3D 0) { + s390_cpu_virt_mem_handle_exc(cpu, ra); + return; + } } } else { /* Access exceptions have a higher priority than cc3 */ - if (s390_cpu_virt_mem_check_write(cpu, addr, ar, sizeof(schib)) != =3D 0) { + if (!s390_is_pv() && + s390_cpu_virt_mem_check_write(cpu, addr, ar, sizeof(schib)) != =3D 0) { s390_cpu_virt_mem_handle_exc(cpu, ra); return; } @@ -334,15 +355,20 @@ int ioinst_handle_tsch(S390CPU *cpu, uint64_t reg1, u= int32_t ipb, uintptr_t ra) } /* 0 - status pending, 1 - not status pending, 3 - not operational */ if (cc !=3D 3) { - if (s390_cpu_virt_mem_write(cpu, addr, ar, &irb, irb_len) !=3D 0) { - s390_cpu_virt_mem_handle_exc(cpu, ra); - return -EFAULT; + if (s390_is_pv()) { + s390_cpu_pv_mem_write(cpu, addr, &irb, irb_len); + } else { + if (s390_cpu_virt_mem_write(cpu, addr, ar, &irb, irb_len) !=3D= 0) { + s390_cpu_virt_mem_handle_exc(cpu, ra); + return -EFAULT; + } } css_do_tsch_update_subch(sch); } else { irb_len =3D sizeof(irb) - sizeof(irb.emw); /* Access exceptions have a higher priority than cc3 */ - if (s390_cpu_virt_mem_check_write(cpu, addr, ar, irb_len) !=3D 0) { + if (!s390_is_pv() && + s390_cpu_virt_mem_check_write(cpu, addr, ar, irb_len) !=3D 0) { s390_cpu_virt_mem_handle_exc(cpu, ra); return -EFAULT; } @@ -640,9 +666,13 @@ void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb, ui= ntptr_t ra) * present CHSC sub-handlers ... if we ever need more, we should take * care of req->len here first. */ - if (s390_cpu_virt_mem_read(cpu, addr, reg, buf, sizeof(ChscReq))) { - s390_cpu_virt_mem_handle_exc(cpu, ra); - return; + if (s390_is_pv()) { + s390_cpu_pv_mem_read(cpu, addr, buf, sizeof(ChscReq)); + } else { + if (s390_cpu_virt_mem_read(cpu, addr, reg, buf, sizeof(ChscReq))) { + s390_cpu_virt_mem_handle_exc(cpu, ra); + return; + } } req =3D (ChscReq *)buf; len =3D be16_to_cpu(req->len); @@ -673,11 +703,16 @@ void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb, u= intptr_t ra) break; } =20 - if (!s390_cpu_virt_mem_write(cpu, addr + len, reg, res, - be16_to_cpu(res->len))) { + if (s390_is_pv()) { + s390_cpu_pv_mem_write(cpu, addr + len, res, be16_to_cpu(res->len)); setcc(cpu, 0); /* Command execution complete */ } else { - s390_cpu_virt_mem_handle_exc(cpu, ra); + if (!s390_cpu_virt_mem_write(cpu, addr + len, reg, res, + be16_to_cpu(res->len))) { + setcc(cpu, 0); /* Command execution complete */ + } else { + s390_cpu_virt_mem_handle_exc(cpu, ra); + } } } =20 --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933158; cv=none; d=zohomail.com; s=zohoarc; b=ike71VGqfb9YADWFtDNkbm/uvtgsvK6YTdH92e794xInru3W1ZPbkdrl6ms+qeqs310FX7SZPkd+1hOvM94qbU//TSu9hdd6PwLSeWmhCejV0Rx2af806azgCtH52L747dShn1/64m8dwtgWEoztge7GESZZGBQZwYBSrfryzCE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933158; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=jkoLpIOFAyJ1B+nuOI0nXVeYoCVFwVrw8nswKt4Cc0E=; b=VxiD3ccPlRHRZYWY26Lb17+1cw7+RV0seOoQdFnrfKTrePWwIaYxUhqSifbb1+05rajdy27E9yNwfm0sOab4zA8gcwgPPYigEuiRVUBmbSrGB+MpyCfK4vq7VPyuOQTtGuMs0PgYmAwLeSt52wbMmIg8xkGXHvLBRNyttJypAVc= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933158446848.3816253270509; Wed, 11 Mar 2020 06:25:58 -0700 (PDT) Received: from localhost ([::1]:51840 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1My-0001DW-U3 for importer@patchew.org; Wed, 11 Mar 2020 09:25:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58313) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Ld-0007mc-UP for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Lc-00078h-V6 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:33 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:4664 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Lc-00078M-Oz for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:32 -0400 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDOHGA010717 for ; Wed, 11 Mar 2020 09:24:32 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0b-001b2d01.pphosted.com with ESMTP id 2yq04bt35n-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:24:26 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:32 -0000 Received: from b06avi18626390.portsmouth.uk.ibm.com (9.149.26.192) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:29 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06avi18626390.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDLSIv45810116 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:21:28 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 718BB52050; Wed, 11 Mar 2020 13:22:28 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 2EE755204F; Wed, 11 Mar 2020 13:22:27 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 13/15] s390x: protvirt: Handle SIGP store status correctly Date: Wed, 11 Mar 2020 09:21:49 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-4275-0000-0000-000003AAA2B1 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-4276-0000-0000-000038BFBEC8 Message-Id: <20200311132151.172389-14-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 malwarescore=0 mlxlogscore=857 spamscore=0 suspectscore=1 priorityscore=1501 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.158.5 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" For protected VMs status storing is not done by QEMU anymore. Signed-off-by: Janosch Frank Reviewed-by: Thomas Huth Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Claudio Imbrenda Reviewed-by: Cornelia Huck --- target/s390x/helper.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/target/s390x/helper.c b/target/s390x/helper.c index ed726849114f2f35..5022df8812d406c9 100644 --- a/target/s390x/helper.c +++ b/target/s390x/helper.c @@ -25,6 +25,7 @@ #include "qemu/timer.h" #include "qemu/qemu-print.h" #include "hw/s390x/ioinst.h" +#include "hw/s390x/pv.h" #include "sysemu/hw_accel.h" #include "sysemu/runstate.h" #ifndef CONFIG_USER_ONLY @@ -246,6 +247,11 @@ int s390_store_status(S390CPU *cpu, hwaddr addr, bool = store_arch) hwaddr len =3D sizeof(*sa); int i; =20 + /* Storing will occur on next SIE entry for protected VMs */ + if (s390_is_pv()) { + return 0; + } + sa =3D cpu_physical_memory_map(addr, &len, true); if (!sa) { return -EFAULT; --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933522; cv=none; d=zohomail.com; s=zohoarc; b=RejTJ0UY3aP8jV+0Oz+cmfv5LR+1+8dyoJo2eY8X5q9rrr+Zf+1qUj3AmVVd8mQicTzJOt3P7TKLtklwj/WHab+IQFZ+VMlG18aIZIe3alJDjnrwukzcpWILkQzSKqB752YdGrG4UEpcFIf6XDyi2ijdrp89NxIUtQUaNiPA8pk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933522; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7F5VvkKLEqk22Xaq10OGn1V1iEAqdYSH+TPIA08i0w8=; b=Ig/f2Lkq1BA0qzyw+8vR1HjkI5W84hg+iaiTW1s8rD35BaBsl3oyeUzKKalhVHUGFgzXbmXPaO9N4URfKXsTFfQqBFJTX9I9KIxU+DqMtjxw0iGnEcjo8bPXOu/y5WkS//Q8ZZ0404P+O5/f/NiR5Q2ztuDdZp0tvAAdtOHcq80= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933522021178.48797939205315; Wed, 11 Mar 2020 06:32:02 -0700 (PDT) Received: from localhost ([::1]:51960 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Sq-0003Kt-Mr for importer@patchew.org; Wed, 11 Mar 2020 09:32:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58424) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1Lq-0008Ey-2S for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1Lo-0007IL-Mx for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:45 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:61052) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1Lo-0007I5-E2 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:24:44 -0400 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDLsdv194032 for ; Wed, 11 Mar 2020 09:24:43 -0400 Received: from e06smtp07.uk.ibm.com (e06smtp07.uk.ibm.com [195.75.94.103]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hbh950-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:24:40 -0400 Received: from localhost by e06smtp07.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:34 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp07.uk.ibm.com (192.168.101.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:30 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMUkI62914682 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:30 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DE86052063; Wed, 11 Mar 2020 13:22:29 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id BDB165205A; Wed, 11 Mar 2020 13:22:28 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 14/15] docs: Add protvirt docs Date: Wed, 11 Mar 2020 09:21:50 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0028-0000-0000-000003E31FE3 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0029-0000-0000-000024A86451 Message-Id: <20200311132151.172389-15-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 malwarescore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 suspectscore=1 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Lets add some documentation for the Protected VM functionality. Signed-off-by: Janosch Frank Acked-by: David Hildenbrand Reviewed-by: Claudio Imbrenda --- docs/system/index.rst | 1 + docs/system/protvirt.rst | 56 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 docs/system/protvirt.rst diff --git a/docs/system/index.rst b/docs/system/index.rst index 6e5f20fa1333ce23..74afbd7cc3fc0296 100644 --- a/docs/system/index.rst +++ b/docs/system/index.rst @@ -34,3 +34,4 @@ Contents: deprecated build-platforms license + protvirt diff --git a/docs/system/protvirt.rst b/docs/system/protvirt.rst new file mode 100644 index 0000000000000000..6c8cf0f7910eae86 --- /dev/null +++ b/docs/system/protvirt.rst @@ -0,0 +1,56 @@ +Protected Virtualization on s390x +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D + +The memory and most of the registers of Protected Virtual Machines +(PVMs) are encrypted or inaccessible to the hypervisor, effectively +prohibiting VM introspection when the VM is running. At rest, PVMs are +encrypted and can only be decrypted by the firmware, represented by an +entity called Ultravisor, of specific IBM Z machines. + + +Prerequisites +------------- + +To run PVMs a machine with the Protected Virtualization feature +which is indicated by the Ultravisor Call facility (stfle bit +158) is required. The Ultravisor needs to be initialized at boot by +setting `prot_virt=3D1` on the kernel command line. + +If those requirements are met, the capability `KVM_CAP_S390_PROTECTED` +will indicate that KVM can support PVMs on that LPAR. + + +QEMU Settings +------------- + +To indicate to the VM that it can transition into protected mode, the +`Unpack facility` (stfle bit 161 represented by the feature +`S390_FEAT_UNPACK`) needs to be part of the cpu model of the VM. + +All I/O devices need to use the IOMMU. +Passthrough (vfio) devices are currently not supported. + +Host huge page backings are not supported. However guests can use huge +pages as indicated by its facilities. + + +Boot Process +------------ + +A secure guest image can either be loaded from disk or supplied on the +QEMU command line. Booting from disk is done by the unmodified +s390-ccw BIOS. I.e., the bootmap is interpreted, multiple components +are read into memory and control is transferred to one of the +components (zipl stage3). Stag3 does some fixups and then transfers +control to some program residing in guest memory, which is normally +the OS kernel. The secure image has another component prepended +(stage3a) that uses the new diag308 subcodes 8 and 10 to trigger the +transition into secure mode. + +Booting from the image supplied via the QEMU command line requires +that the file passed via -kernel has the same memory layout as would +result from the disk boot. This memory layout includes the encrypted +components (kernel, initrd, cmdline), the stage3a loader and +metadata. In case this boot method is used, the command line +options -initrd and -cmdline are ineffective. The preparation of a PVM +image is done by genprotimg of the s390-tools package. --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1583933610; cv=none; d=zohomail.com; s=zohoarc; b=XfvF3U4DQA1Us3d+oNv39w54FgEOAOeu8x1Rs93k33+nOwxgQz1GNEW+iZ4bPYsgzFkPus+LGVH9jslnP377Ve/0hcK4IE6DTn+SeC8FyLvK9W+lyuYpdg/Cd4hgi6V2zLS0o/4GxFnH2GZbRMGWiiTnsQjVa/i6xfgpsJ7rVQA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583933610; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zLZTRgsvcQyTWm4P2J5cAGWNPBjJZQ/XANHSZZxXXKg=; b=RxyuNLFLB2w856eat3SJz6AFTaCSc9jLtBHQ2pff+CpQhaquilseLDIpHFDh0bDPMePrMQnwkxjztMciS+TlTpnI/zKLSHuRGkxwJXvYg6QAQd/T6lxRCdWYNU33X3gtcduKsSvNkd+n9JSC/Oav8DnSB7VqRYzw8asIDG9ElAc= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1583933610377981.0408354681912; Wed, 11 Mar 2020 06:33:30 -0700 (PDT) Received: from localhost ([::1]:51980 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1UF-0005ZA-3C for importer@patchew.org; Wed, 11 Mar 2020 09:33:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58667) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC1N6-000258-1y for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:26:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC1N4-0000h7-TI for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:26:03 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:39710) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC1N4-0000gG-Lr for qemu-devel@nongnu.org; Wed, 11 Mar 2020 09:26:02 -0400 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02BDLsKY194041 for ; Wed, 11 Mar 2020 09:25:59 -0400 Received: from e06smtp07.uk.ibm.com (e06smtp07.uk.ibm.com [195.75.94.103]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yq0hbh95h-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 11 Mar 2020 09:25:58 -0400 Received: from localhost by e06smtp07.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 11 Mar 2020 13:22:35 -0000 Received: from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196) by e06smtp07.uk.ibm.com (192.168.101.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 11 Mar 2020 13:22:32 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02BDMV9153870800 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Mar 2020 13:22:31 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9020A5204E; Wed, 11 Mar 2020 13:22:31 +0000 (GMT) Received: from localhost.localdomain (unknown [9.145.36.208]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 4C8325206B; Wed, 11 Mar 2020 13:22:30 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9 15/15] s390x: Add unpack facility feature to GA1 Date: Wed, 11 Mar 2020 09:21:51 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031113-0028-0000-0000-000003E31FEF X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031113-0029-0000-0000-000024A8645B Message-Id: <20200311132151.172389-16-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-11_05:2020-03-11, 2020-03-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 malwarescore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 suspectscore=1 spamscore=0 mlxlogscore=883 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003110085 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Christian Borntraeger The unpack facility is an indication that diagnose 308 subcodes 8-10 are available to the guest. That means, that the guest can put itself into protected mode. Once it is in protected mode, the hardware stops any attempt of VM introspection by the hypervisor. Some features are currently not supported in protected mode: * Passthrough devices * Migration * Huge page backings Signed-off-by: Christian Borntraeger Reviewed-by: David Hildenbrand Reviewed-by: Claudio Imbrenda --- target/s390x/gen-features.c | 1 + target/s390x/kvm.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c index 6278845b12b8dee8..8ddeebc54419a3e2 100644 --- a/target/s390x/gen-features.c +++ b/target/s390x/gen-features.c @@ -562,6 +562,7 @@ static uint16_t full_GEN15_GA1[] =3D { S390_FEAT_GROUP_MSA_EXT_9, S390_FEAT_GROUP_MSA_EXT_9_PCKMO, S390_FEAT_ETOKEN, + S390_FEAT_UNPACK, }; =20 /* Default features (in order of release) diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index ff6027036ec2f14a..e11e895a3d9038bb 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -2403,6 +2403,11 @@ void kvm_s390_get_host_cpu_model(S390CPUModel *model= , Error **errp) clear_bit(S390_FEAT_BPB, model->features); } =20 + /* we do have the IPL enhancements */ + if (cap_protected) { + set_bit(S390_FEAT_UNPACK, model->features); + } + /* We emulate a zPCI bus and AEN, therefore we don't need HW support */ set_bit(S390_FEAT_ZPCI, model->features); set_bit(S390_FEAT_ADAPTER_EVENT_NOTIFICATION, model->features); --=20 2.25.1 From nobody Sun May 19 04:05:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1584030734; cv=none; d=zohomail.com; s=zohoarc; b=hrk8apGNMGmtJscej+gqWyvqdP4Sc43U4RyC7+BZeWI249x5bMkf4pyyUqGKaYZvowxKEupObFb2sYvf0ER5rnz+ZbaNpHCFbM68qp3YYfA1YRpgnYQ18gYE0ytqVIFs/xW5uS8Wy/KX7lPPo1Cm2IkGqKjhl6YJKJMpbTWftu0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584030734; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=E1PoRpyJdZeAw4379TzkKhnnc7+1Yq2SFGSvJ5owzbA=; b=R/IeJ9GLSCoUXgI5KJ6Mo5BGHvNzaHVy6oZOlltZ7cTjkoqiuZTLvM/+GSbcIPeN2F06EyEcmUfYilizxIUHPPXUXZ8MLmmpx/aAl6kso/Py1tdUuABUIDszAVhwQjNV0DNBRL/roX2MCTOl4G44vhgXzLGnH42yFXl5Ae5oLV4= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584030734932654.5008030093463; Thu, 12 Mar 2020 09:32:14 -0700 (PDT) Received: from localhost ([::1]:44868 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCQkn-0005vB-N3 for importer@patchew.org; Thu, 12 Mar 2020 12:32:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60474) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCQhy-0008Oj-6d for qemu-devel@nongnu.org; Thu, 12 Mar 2020 12:29:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jCQhv-0005I0-KD for qemu-devel@nongnu.org; Thu, 12 Mar 2020 12:29:17 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:54820) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jCQhv-0005Gv-Ce for qemu-devel@nongnu.org; Thu, 12 Mar 2020 12:29:15 -0400 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02CGKbPR141578 for ; Thu, 12 Mar 2020 12:29:14 -0400 Received: from e06smtp04.uk.ibm.com (e06smtp04.uk.ibm.com [195.75.94.100]) by mx0a-001b2d01.pphosted.com with ESMTP id 2yqrgv8dk8-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 12 Mar 2020 12:28:08 -0400 Received: from localhost by e06smtp04.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 12 Mar 2020 16:25:16 -0000 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp04.uk.ibm.com (192.168.101.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Thu, 12 Mar 2020 16:25:13 -0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 02CGPCCI66584752 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 12 Mar 2020 16:25:12 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C5C1DA405E; Thu, 12 Mar 2020 16:25:12 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F3734A4051; Thu, 12 Mar 2020 16:25:11 +0000 (GMT) Received: from localhost.localdomain (unknown [9.152.224.122]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 12 Mar 2020 16:25:11 +0000 (GMT) From: Janosch Frank To: qemu-devel@nongnu.org Subject: [PATCH v9] s390x: protvirt: Fence huge pages Date: Thu, 12 Mar 2020 12:25:10 -0400 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com> References: <20200311132151.172389-1-frankja@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 x-cbid: 20031216-0016-0000-0000-000002F00678 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20031216-0017-0000-0000-0000335375AE Message-Id: <20200312162510.5472-1-frankja@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-03-12_09:2020-03-11, 2020-03-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=999 impostorscore=0 phishscore=0 lowpriorityscore=0 priorityscore=1501 adultscore=0 suspectscore=1 spamscore=0 malwarescore=0 clxscore=1015 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2003120083 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Let's bail out of the protected transition if we detect that huge pages might be in use. Signed-off-by: Janosch Frank --- I'd like to squash this into the unpack patch to give a proper error message if we try to transition into the protected mode while being backed by huge pages.=20 --- hw/s390x/ipl.h | 16 ++++++++++++++++ hw/s390x/s390-virtio-ccw.c | 1 - target/s390x/diag.c | 23 ++++++++--------------- target/s390x/kvm-stub.c | 5 +++++ target/s390x/kvm.c | 5 +++++ target/s390x/kvm_s390x.h | 1 + 6 files changed, 35 insertions(+), 16 deletions(-) diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index af5bb130a6334821..95e3183c9cccf8b6 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -185,6 +185,22 @@ struct S390IPLState { typedef struct S390IPLState S390IPLState; QEMU_BUILD_BUG_MSG(offsetof(S390IPLState, iplb) & 3, "alignment of iplb wr= ong"); =20 +#define DIAG_308_RC_OK 0x0001 +#define DIAG_308_RC_NO_CONF 0x0102 +#define DIAG_308_RC_INVALID 0x0402 +#define DIAG_308_RC_NO_PV_CONF 0x0902 +#define DIAG_308_RC_INVAL_FOR_PV 0x0a02 + +#define DIAG308_RESET_MOD_CLR 0 +#define DIAG308_RESET_LOAD_NORM 1 +#define DIAG308_LOAD_CLEAR 3 +#define DIAG308_LOAD_NORMAL_DUMP 4 +#define DIAG308_SET 5 +#define DIAG308_STORE 6 +#define DIAG308_PV_SET 8 +#define DIAG308_PV_STORE 9 +#define DIAG308_PV_START 10 + #define S390_IPL_TYPE_FCP 0x00 #define S390_IPL_TYPE_CCW 0x02 #define S390_IPL_TYPE_PV 0x05 diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index ebdaaa3a001f6e8c..d32f35c7f47b9c1d 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -361,7 +361,6 @@ out_err: return rc; } =20 -#define DIAG_308_RC_INVAL_FOR_PV 0x0a02 static void s390_machine_inject_pv_error(CPUState *cs) { int r1 =3D (cs->kvm_run->s390_sieic.ipa & 0x00f0) >> 4; diff --git a/target/s390x/diag.c b/target/s390x/diag.c index b245e557037ded06..b1ca81633b83bbdc 100644 --- a/target/s390x/diag.c +++ b/target/s390x/diag.c @@ -21,6 +21,7 @@ #include "hw/s390x/ipl.h" #include "hw/s390x/s390-virtio-ccw.h" #include "hw/s390x/pv.h" +#include "kvm_s390x.h" =20 int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3) { @@ -50,21 +51,6 @@ int handle_diag_288(CPUS390XState *env, uint64_t r1, uin= t64_t r3) return diag288_class->handle_timer(diag288, func, timeout); } =20 -#define DIAG_308_RC_OK 0x0001 -#define DIAG_308_RC_NO_CONF 0x0102 -#define DIAG_308_RC_INVALID 0x0402 -#define DIAG_308_RC_NO_PV_CONF 0x0902 - -#define DIAG308_RESET_MOD_CLR 0 -#define DIAG308_RESET_LOAD_NORM 1 -#define DIAG308_LOAD_CLEAR 3 -#define DIAG308_LOAD_NORMAL_DUMP 4 -#define DIAG308_SET 5 -#define DIAG308_STORE 6 -#define DIAG308_PV_SET 8 -#define DIAG308_PV_STORE 9 -#define DIAG308_PV_START 10 - static int diag308_parm_check(CPUS390XState *env, uint64_t r1, uint64_t ad= dr, uintptr_t ra, bool write) { @@ -166,6 +152,13 @@ out: return; } =20 + if (kvm_s390_get_hpage_1m()) { + error_report("Protected VMs can currently not be backed with " + "huge pages"); + env->regs[r1 + 1] =3D DIAG_308_RC_INVAL_FOR_PV; + return; + } + s390_ipl_reset_request(cs, S390_RESET_PV); break; default: diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c index c4cd497f850eb9c7..aa185017a2a886ca 100644 --- a/target/s390x/kvm-stub.c +++ b/target/s390x/kvm-stub.c @@ -39,6 +39,11 @@ int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu) return 0; } =20 +int kvm_s390_get_hpage_1m(void) +{ + return 0; +} + int kvm_s390_get_ri(void) { return 0; diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index 1d6fd6a27b48e35f..c695941076b7aead 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -321,6 +321,11 @@ void kvm_s390_set_max_pagesize(uint64_t pagesize, Erro= r **errp) cap_hpage_1m =3D 1; } =20 +int kvm_s390_get_hpage_1m(void) +{ + return cap_hpage_1m; +} + static void ccw_machine_class_foreach(ObjectClass *oc, void *opaque) { MachineClass *mc =3D MACHINE_CLASS(oc); diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h index 0b21789796d7c462..dea813f450153c34 100644 --- a/target/s390x/kvm_s390x.h +++ b/target/s390x/kvm_s390x.h @@ -23,6 +23,7 @@ void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t co= de); int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state); void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu); int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu); +int kvm_s390_get_hpage_1m(void); int kvm_s390_get_ri(void); int kvm_s390_get_gs(void); int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock); --=20 2.25.1