From patchwork Tue Nov 23 10:39:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12633915 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3D7CBC4332F for ; Tue, 23 Nov 2021 10:40:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234471AbhKWKnW (ORCPT ); Tue, 23 Nov 2021 05:43:22 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:25748 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234461AbhKWKnU (ORCPT ); Tue, 23 Nov 2021 05:43:20 -0500 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAH5Ig024391; Tue, 23 Nov 2021 10:40:12 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=fYeGeQA2L467cjW7dt9QVFuVnmTWuwcNMP0xX2YMqfQ=; b=Qte2dJnmou39mxZJrX0bpzVXQUVrgG4hG2grLMCD6n8OM+TOHlgdShQkYJUAxyE1Rfcm wY3GT459fWJQqd4ZjIQppelknw+dQfoA+5W0E/9vSKCS6aH01LFGlo5DRhKX3WR+AiKj GB2rqF0DSimH1kcrDMD3HfeedOE09lkQAwapd9K/v4T6rQfWbd1/oDI4RAMzXQcZaZUl 74RaOhZhgY3oMC5Z0SzN0WmDP9PSN+Al5rxZvYh8jIMJ8kc7ia8RniBYfOEefQxlRQvO AX3TrvGEGKEtLDzn/MrQFL0R/adBqczOWF/CxmqWm5EDONFUnoeVyDT9OF3Zn9nS8tHQ Hg== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgxdqrc49-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:11 +0000 Received: from m0098410.ppops.net (m0098410.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1ANALaMW007707; Tue, 23 Nov 2021 10:40:11 GMT Received: from ppma06fra.de.ibm.com (48.49.7a9f.ip4.static.sl-reverse.com [159.122.73.72]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgxdqrc34-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:11 +0000 Received: from pps.filterd (ppma06fra.de.ibm.com [127.0.0.1]) by ppma06fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAaxRu026354; Tue, 23 Nov 2021 10:40:09 GMT Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by ppma06fra.de.ibm.com with ESMTP id 3cer9jnpya-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:09 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1ANAe5t331457686 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Nov 2021 10:40:05 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 813A7A405B; Tue, 23 Nov 2021 10:40:05 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5D9ABA4051; Tue, 23 Nov 2021 10:40:04 +0000 (GMT) Received: from linux6.. (unknown [9.114.12.104]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 23 Nov 2021 10:40:04 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com, david@redhat.com, thuth@redhat.com, seiden@linux.ibm.com, mhartmay@linux.ibm.com Subject: [kvm-unit-tests PATCH 1/8] lib: s390x: sie: Add sca allocation and freeing Date: Tue, 23 Nov 2021 10:39:49 +0000 Message-Id: <20211123103956.2170-2-frankja@linux.ibm.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211123103956.2170-1-frankja@linux.ibm.com> References: <20211123103956.2170-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: zGi4a_17PoawCVyZPaKQgdUvr7Us-n2e X-Proofpoint-ORIG-GUID: G6q4QLPDiNXqLVRgSzgb8r8gadeNo0kM X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-23_03,2021-11-23_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 priorityscore=1501 spamscore=0 bulkscore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 suspectscore=0 mlxlogscore=884 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230059 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org For protected guests we always need a ESCA so let's add functions to create and destroy SCAs on demand. We don't have scheduling and I don't expect multiple VCPU SIE in the next few months so SCA content handling is not added. Signed-off-by: Janosch Frank Reviewed-by: Claudio Imbrenda --- lib/s390x/sie.c | 12 ++++++++++++ lib/s390x/sie.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/lib/s390x/sie.c b/lib/s390x/sie.c index b965b314..51d3b94e 100644 --- a/lib/s390x/sie.c +++ b/lib/s390x/sie.c @@ -55,6 +55,16 @@ void sie(struct vm *vm) vm->save_area.guest.grs[15] = vm->sblk->gg15; } +void sie_guest_sca_create(struct vm *vm) +{ + vm->sca = (struct esca_block *)alloc_page(); + + /* Let's start out with one page of ESCA for now */ + vm->sblk->scaoh = ((uint64_t)vm->sca >> 32); + vm->sblk->scaol = (uint64_t)vm->sca & ~0x3fU; + vm->sblk->ecb2 |= ECB2_ESCA; +} + /* Initializes the struct vm members like the SIE control block. */ void sie_guest_create(struct vm *vm, uint64_t guest_mem, uint64_t guest_mem_len) { @@ -80,4 +90,6 @@ void sie_guest_destroy(struct vm *vm) { free_page(vm->crycb); free_page(vm->sblk); + if (vm->sblk->ecb2 & ECB2_ESCA) + free_page(vm->sca); } diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h index 7ef7251b..f34e3c80 100644 --- a/lib/s390x/sie.h +++ b/lib/s390x/sie.h @@ -191,6 +191,7 @@ struct vm_save_area { struct vm { struct kvm_s390_sie_block *sblk; struct vm_save_area save_area; + void *sca; /* System Control Area */ uint8_t *crycb; /* Crypto Control Block */ /* Ptr to first guest page */ uint8_t *guest_mem; @@ -203,6 +204,7 @@ void sie(struct vm *vm); void sie_expect_validity(void); void sie_check_validity(uint16_t vir_exp); void sie_handle_validity(struct vm *vm); +void sie_guest_sca_create(struct vm *vm); void sie_guest_create(struct vm *vm, uint64_t guest_mem, uint64_t guest_mem_len); void sie_guest_destroy(struct vm *vm); From patchwork Tue Nov 23 10:39:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12633917 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 33965C4321E for ; Tue, 23 Nov 2021 10:40:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232844AbhKWKnX (ORCPT ); Tue, 23 Nov 2021 05:43:23 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:32732 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234042AbhKWKnV (ORCPT ); Tue, 23 Nov 2021 05:43:21 -0500 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAH7RN024427; Tue, 23 Nov 2021 10:40:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=lDjRCLRRnq9/ED4cahjbi1c3AtEFMb/fCQuwTX1wQ2o=; b=eRvSv8MRba4sqTglj6WRByIlYsiUwS2FhXWPlH2brR5dtfADEOOBrXOg7Tq7OE4a1eXr OLcGzyBB70Cc1vXCPE97S5VCISunAA3CdmO2tCuRa3c11Opc5bcvT5VfrVX/grHk0vko qbzylNsx9ETY541zkNAW3cnImEkpyYKj4sqqPB5LxFVzFLoRswaeou9/h0qKgv3t3kx9 bXdIkrHYHtD0THlDqsprSti9Gibs0vlLSj4QMaYA0cKDq1ltjEStYLZdnrYOkML5O2Xu sZhyF1fzH/7uaDpHhgmUeEX6Mnl+QfI9eWwnhAqf2Dtsb5wZjTHfnAuRA0v0QxkqBh84 Tg== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgxdqrc51-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:13 +0000 Received: from m0098410.ppops.net (m0098410.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1ANAZf0n022396; Tue, 23 Nov 2021 10:40:12 GMT Received: from ppma03fra.de.ibm.com (6b.4a.5195.ip4.static.sl-reverse.com [149.81.74.107]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgxdqrc3u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:12 +0000 Received: from pps.filterd (ppma03fra.de.ibm.com [127.0.0.1]) by ppma03fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAb1lL009768; Tue, 23 Nov 2021 10:40:10 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma03fra.de.ibm.com with ESMTP id 3cerna5kjs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:10 +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 1ANAe6W633161618 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Nov 2021 10:40:07 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D3206A406D; Tue, 23 Nov 2021 10:40:06 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BE922A404D; Tue, 23 Nov 2021 10:40:05 +0000 (GMT) Received: from linux6.. (unknown [9.114.12.104]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 23 Nov 2021 10:40:05 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com, david@redhat.com, thuth@redhat.com, seiden@linux.ibm.com, mhartmay@linux.ibm.com Subject: [kvm-unit-tests PATCH 2/8] s390x: sie: Add PV fields to SIE control block Date: Tue, 23 Nov 2021 10:39:50 +0000 Message-Id: <20211123103956.2170-3-frankja@linux.ibm.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211123103956.2170-1-frankja@linux.ibm.com> References: <20211123103956.2170-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: tD6AvXB7DZyr75gWZ00WufQkJq6ODdI1 X-Proofpoint-ORIG-GUID: tEr5R9DVrTK9kqAEOeezcRaFaeTo3Njz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-23_03,2021-11-23_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 priorityscore=1501 spamscore=0 bulkscore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230059 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org We need those fields for format 4 SIE tests (protected VMs). Signed-off-by: Janosch Frank Reviewed-by: Claudio Imbrenda --- lib/s390x/sie.h | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h index f34e3c80..c6eb6441 100644 --- a/lib/s390x/sie.h +++ b/lib/s390x/sie.h @@ -38,7 +38,13 @@ struct kvm_s390_sie_block { uint8_t reserved08[4]; /* 0x0008 */ #define PROG_IN_SIE (1<<0) uint32_t prog0c; /* 0x000c */ - uint8_t reserved10[16]; /* 0x0010 */ +union { + uint8_t reserved10[16]; /* 0x0010 */ + struct { + uint64_t pv_handle_cpu; + uint64_t pv_handle_config; + }; + }; #define PROG_BLOCK_SIE (1<<0) #define PROG_REQUEST (1<<1) uint32_t prog20; /* 0x0020 */ @@ -87,10 +93,22 @@ struct kvm_s390_sie_block { #define ICPT_PARTEXEC 0x38 #define ICPT_IOINST 0x40 #define ICPT_KSS 0x5c +#define ICPT_INT_ENABLE 0x64 +#define ICPT_PV_INSTR 0x68 +#define ICPT_PV_NOTIFY 0x6c +#define ICPT_PV_PREF 0x70 uint8_t icptcode; /* 0x0050 */ uint8_t icptstatus; /* 0x0051 */ uint16_t ihcpu; /* 0x0052 */ - uint8_t reserved54[2]; /* 0x0054 */ + uint8_t reserved54; /* 0x0054 */ +#define IICTL_CODE_NONE 0x00 +#define IICTL_CODE_MCHK 0x01 +#define IICTL_CODE_EXT 0x02 +#define IICTL_CODE_IO 0x03 +#define IICTL_CODE_RESTART 0x04 +#define IICTL_CODE_SPECIFICATION 0x10 +#define IICTL_CODE_OPERAND 0x11 + uint8_t iictl; /* 0x0055 */ uint16_t ipa; /* 0x0056 */ uint32_t ipb; /* 0x0058 */ uint32_t scaoh; /* 0x005c */ @@ -112,7 +130,7 @@ struct kvm_s390_sie_block { #define ECB3_RI 0x01 uint8_t ecb3; /* 0x0063 */ uint32_t scaol; /* 0x0064 */ - uint8_t reserved68; /* 0x0068 */ + uint8_t sdf; /* 0x0068 */ uint8_t epdx; /* 0x0069 */ uint8_t reserved6a[2]; /* 0x006a */ uint32_t todpr; /* 0x006c */ @@ -128,9 +146,15 @@ struct kvm_s390_sie_block { #define HPID_KVM 0x4 #define HPID_VSIE 0x5 uint8_t hpid; /* 0x00b8 */ - uint8_t reservedb9[11]; /* 0x00b9 */ - uint16_t extcpuaddr; /* 0x00c4 */ - uint16_t eic; /* 0x00c6 */ + uint8_t reservedb9[7]; /* 0x00b9 */ + union { + struct { + uint32_t eiparams; /* 0x00c0 */ + uint16_t extcpuaddr; /* 0x00c4 */ + uint16_t eic; /* 0x00c6 */ + }; + uint64_t mcic; /* 0x00c0 */ + } __attribute__ ((__packed__)); uint32_t reservedc8; /* 0x00c8 */ uint16_t pgmilc; /* 0x00cc */ uint16_t iprcc; /* 0x00ce */ @@ -152,7 +176,10 @@ struct kvm_s390_sie_block { #define CRYCB_FORMAT2 0x00000003 uint32_t crycbd; /* 0x00fc */ uint64_t gcr[16]; /* 0x0100 */ - uint64_t gbea; /* 0x0180 */ + union { + uint64_t gbea; /* 0x0180 */ + uint64_t sidad; + }; uint8_t reserved188[8]; /* 0x0188 */ uint64_t sdnxo; /* 0x0190 */ uint8_t reserved198[8]; /* 0x0198 */ From patchwork Tue Nov 23 10:39:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12633921 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56531C4332F for ; Tue, 23 Nov 2021 10:40:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235534AbhKWKn1 (ORCPT ); Tue, 23 Nov 2021 05:43:27 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:65220 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S234042AbhKWKnZ (ORCPT ); Tue, 23 Nov 2021 05:43:25 -0500 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1AN9koKL026760; Tue, 23 Nov 2021 10:40:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=lK73QdECEZ/VbqIrMPWwnpQiFFDRIjQYMtNs0OX9c7c=; b=RZSi4eVScvUcWmskje7xh+6Rt3aGTkQ4updSz3HSeKMr7LhGMpVVr2imCKNCGv1BM5PM CTrLzYLxZ1iGDValsdicEibT7k8z4FvbcHfGFfdxXl3ufkLdPwQqS8QM5QC52zcAXWTj 211FEIeLNY83MViyVIoFC8U+38PatPAd2ciZoh+IgnHqqoPnDGkwC0/pgd/y+kb9Aebm LGRHtHrYfxkOq4rqTkZZVXUM/82+5Yhk0/ukHTR/ha1TTFMzEwpmDtOYJa3XNjY6AAMg l2I8jdRH1v5sdsqX7aUYA6JPyilzIr9t12aJAJ6cK8EVRMiaJOwJJixn+EX4Ef+S1Lfm RQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 3cgwyhry26-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:17 +0000 Received: from m0098420.ppops.net (m0098420.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1AN9lewO028240; Tue, 23 Nov 2021 10:40:16 GMT Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0b-001b2d01.pphosted.com with ESMTP id 3cgwyhry1j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:16 +0000 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAb88V012809; Tue, 23 Nov 2021 10:40:13 GMT Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by ppma04ams.nl.ibm.com with ESMTP id 3cernapmwm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:13 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1ANAe84k16711962 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Nov 2021 10:40:08 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 60673A406E; Tue, 23 Nov 2021 10:40:08 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 283F8A405E; Tue, 23 Nov 2021 10:40:07 +0000 (GMT) Received: from linux6.. (unknown [9.114.12.104]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 23 Nov 2021 10:40:06 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com, david@redhat.com, thuth@redhat.com, seiden@linux.ibm.com, mhartmay@linux.ibm.com Subject: [kvm-unit-tests PATCH 3/8] s390x: sie: Add UV information into VM struct Date: Tue, 23 Nov 2021 10:39:51 +0000 Message-Id: <20211123103956.2170-4-frankja@linux.ibm.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211123103956.2170-1-frankja@linux.ibm.com> References: <20211123103956.2170-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: -bCEJ1pKRHDn1oGw-MQuw6TU7gCIQjtw X-Proofpoint-ORIG-GUID: lJFg5lVaaeV8PAmTl_3mAitK8iN3NEed X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-23_03,2021-11-23_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 mlxlogscore=981 priorityscore=1501 lowpriorityscore=0 suspectscore=0 clxscore=1015 spamscore=0 impostorscore=0 bulkscore=0 malwarescore=0 adultscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230059 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org We need to save the handles for the VM and the VCPU so we can retrieve them easily after their creation. Since the SIE lib is single guest cpu only we only save one vcpu handle. Signed-off-by: Janosch Frank Reviewed-by: Claudio Imbrenda --- lib/s390x/sie.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h index c6eb6441..1a12faa7 100644 --- a/lib/s390x/sie.h +++ b/lib/s390x/sie.h @@ -200,6 +200,11 @@ union { uint64_t gvrd; /* 0x01f8 */ } __attribute__((packed)); +struct vm_uv { + uint64_t vm_handle; + uint64_t vcpu_handle; +}; + struct vm_save_regs { uint64_t grs[16]; uint64_t fprs[16]; @@ -220,6 +225,7 @@ struct vm { struct vm_save_area save_area; void *sca; /* System Control Area */ uint8_t *crycb; /* Crypto Control Block */ + struct vm_uv uv; /* PV UV information */ /* Ptr to first guest page */ uint8_t *guest_mem; }; From patchwork Tue Nov 23 10:39:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12633919 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 98945C433F5 for ; Tue, 23 Nov 2021 10:40:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234869AbhKWKnZ (ORCPT ); Tue, 23 Nov 2021 05:43:25 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:16368 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234482AbhKWKnY (ORCPT ); Tue, 23 Nov 2021 05:43:24 -0500 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1AN9Gl77029049; Tue, 23 Nov 2021 10:40:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=yIOpEs9GQwN8+t6fGFwSF0O9XsL3T/Rq5ELP/NEKRZE=; b=BVSKRIXT4cmpzXBMlcLVMqpK1W6P8HCiYWBHxnh1C2Cx338t5ZwnXgif4ReViVbrFuWL yckp+RZbG82JNzliCPIJRZj9GwhANKZWAIWMFsWm82jqX437lyTYrPs021PTg7zBDFuq SRR54Q+4MW3Bvn4Q1cYr+KwEe1Ai9W8m8aflf8anJB0GsOJZurOzXcomgL6QnUN8S0qi WTx9WTEPDGfhmRz8Zkd3111TdJuUFCJ219mnSh2hgNSg808fU10/2X707+CjFIDMkRrg i1PNr5Jn01sqGd0FPkNhtaUGH98fRp2TQk2KY2LYlw23GhlpSH5JtFZoGtySwC6v3Z/c HA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgwhe9guq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:16 +0000 Received: from m0098396.ppops.net (m0098396.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1ANAMsKj014815; Tue, 23 Nov 2021 10:40:16 GMT Received: from ppma05fra.de.ibm.com (6c.4a.5195.ip4.static.sl-reverse.com [149.81.74.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgwhe9gtw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:15 +0000 Received: from pps.filterd (ppma05fra.de.ibm.com [127.0.0.1]) by ppma05fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAcC1I007094; Tue, 23 Nov 2021 10:40:13 GMT Received: from b06avi18878370.portsmouth.uk.ibm.com (b06avi18878370.portsmouth.uk.ibm.com [9.149.26.194]) by ppma05fra.de.ibm.com with ESMTP id 3cern9nkmf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:13 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06avi18878370.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1ANAWwgD33227052 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Nov 2021 10:32:58 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 03C31A406E; Tue, 23 Nov 2021 10:40:10 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AE3E6A406F; Tue, 23 Nov 2021 10:40:08 +0000 (GMT) Received: from linux6.. (unknown [9.114.12.104]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 23 Nov 2021 10:40:08 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com, david@redhat.com, thuth@redhat.com, seiden@linux.ibm.com, mhartmay@linux.ibm.com Subject: [kvm-unit-tests PATCH 4/8] s390x: uv: Add more UV call functions Date: Tue, 23 Nov 2021 10:39:52 +0000 Message-Id: <20211123103956.2170-5-frankja@linux.ibm.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211123103956.2170-1-frankja@linux.ibm.com> References: <20211123103956.2170-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: IXTY3ZzR5-cfY0zDKR3BYmzEAppXTTBt X-Proofpoint-ORIG-GUID: mQHGDlGqKZak_Kxj0tBUCJ2djeoYmt7- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-23_03,2021-11-23_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 mlxlogscore=964 priorityscore=1501 clxscore=1015 adultscore=0 mlxscore=0 impostorscore=0 suspectscore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230059 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org To manage protected guests we need a few more UV calls: * import / export * destroy page * set SE header * set cpu state Signed-off-by: Janosch Frank Reviewed-by: Claudio Imbrenda --- lib/s390x/asm/uv.h | 85 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/lib/s390x/asm/uv.h b/lib/s390x/asm/uv.h index 8baf896f..6e331211 100644 --- a/lib/s390x/asm/uv.h +++ b/lib/s390x/asm/uv.h @@ -33,6 +33,7 @@ #define UVC_CMD_DESTROY_SEC_CPU 0x0121 #define UVC_CMD_CONV_TO_SEC_STOR 0x0200 #define UVC_CMD_CONV_FROM_SEC_STOR 0x0201 +#define UVC_CMD_DESTR_SEC_STOR 0x0202 #define UVC_CMD_SET_SEC_CONF_PARAMS 0x0300 #define UVC_CMD_UNPACK_IMG 0x0301 #define UVC_CMD_VERIFY_IMG 0x0302 @@ -256,6 +257,63 @@ static inline int uv_remove_shared(unsigned long addr) return share(addr, UVC_CMD_REMOVE_SHARED_ACCESS); } +static inline int uv_cmd_nodata(uint64_t handle, uint16_t cmd, uint16_t *rc, uint16_t *rrc) +{ + struct uv_cb_nodata uvcb = { + .header.cmd = cmd, + .header.len = sizeof(uvcb), + .handle = handle, + }; + int cc; + + assert(handle); + cc = uv_call(0, (uint64_t)&uvcb); + *rc = uvcb.header.rc; + *rrc = uvcb.header.rrc; + return cc; +} + +static inline int uv_import(uint64_t handle, unsigned long gaddr) +{ + struct uv_cb_cts uvcb = { + .header.cmd = UVC_CMD_CONV_TO_SEC_STOR, + .header.len = sizeof(uvcb), + .guest_handle = handle, + .gaddr = gaddr, + }; + + return uv_call(0, (uint64_t)&uvcb); +} + +static inline int uv_export(unsigned long paddr) +{ + struct uv_cb_cfs uvcb = { + .header.cmd = UVC_CMD_CONV_FROM_SEC_STOR, + .header.len = sizeof(uvcb), + .paddr = paddr + }; + + return uv_call(0, (u64)&uvcb); +} + +/* + * Requests the Ultravisor to destroy a guest page and make it + * accessible to the host. The destroy clears the page instead of + * exporting. + * + * @paddr: Absolute host address of page to be destroyed + */ +static inline int uv_destroy_page(unsigned long paddr) +{ + struct uv_cb_cfs uvcb = { + .header.cmd = UVC_CMD_DESTR_SEC_STOR, + .header.len = sizeof(uvcb), + .paddr = paddr + }; + + return uv_call(0, (uint64_t)&uvcb); +} + struct uv_cb_cpu_set_state { struct uv_cb_header header; u64 reserved08[2]; @@ -270,4 +328,31 @@ struct uv_cb_cpu_set_state { #define PV_CPU_STATE_CHKSTP 3 #define PV_CPU_STATE_OPR_LOAD 5 +static inline int uv_set_cpu_state(uint64_t handle, uint8_t state) +{ + struct uv_cb_cpu_set_state uvcb = { + .header.cmd = UVC_CMD_CPU_SET_STATE, + .header.len = sizeof(uvcb), + .cpu_handle = handle, + .state = state, + }; + + assert(handle); + return uv_call(0, (uint64_t)&uvcb); +} + +static inline int uv_set_se_hdr(uint64_t handle, void *hdr, size_t len) +{ + struct uv_cb_ssc uvcb = { + .header.cmd = UVC_CMD_SET_SEC_CONF_PARAMS, + .header.len = sizeof(uvcb), + .sec_header_origin = (uint64_t)hdr, + .sec_header_len = len, + .guest_handle = handle, + }; + + assert(handle); + return uv_call(0, (uint64_t)&uvcb); +} + #endif From patchwork Tue Nov 23 10:39:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12633923 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 50B95C433FE for ; Tue, 23 Nov 2021 10:40:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235579AbhKWKn3 (ORCPT ); Tue, 23 Nov 2021 05:43:29 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:51984 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S234772AbhKWKn0 (ORCPT ); Tue, 23 Nov 2021 05:43:26 -0500 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAMI0d013468; Tue, 23 Nov 2021 10:40:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=pB9DbaxzbgZxcl3b2gcZ6Kmn9K459BmDgSefi48nYbM=; b=I8H/9DTVmLhVOhUbIDmToe8hmTG5vDmUR6qu9oIT7aJ5ieiMI0oippD7g/BR3SxEUvWa iSqzJgQ0g3MgHOyktAST+QEKlIhKc/xQOdHLhnnXzdaCwun4T9jNDonqeg9IdD+90+GN PiU5b8TUFnGod2Ydj6rHqbmUn0HsnKJheCLIAJ2CHTkB9O0KGvNfTB1XIyoE3A8rCodU TkVdcRiD5lSlFnz4vEorI2Z4s6vaSUcicIvn/G0zw/r+2IJt88wq3DMf6HwMNCxp3EZy X9X1BMigYbWQkHMSdpczWCNbYMFDbxlWNeKAc1GRfUgfRx5sPzSFnXHryYfozxqrab+H LA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 3cgxg308sd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:17 +0000 Received: from m0098413.ppops.net (m0098413.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1ANAYmTE016781; Tue, 23 Nov 2021 10:40:17 GMT Received: from ppma05fra.de.ibm.com (6c.4a.5195.ip4.static.sl-reverse.com [149.81.74.108]) by mx0b-001b2d01.pphosted.com with ESMTP id 3cgxg308ry-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:17 +0000 Received: from pps.filterd (ppma05fra.de.ibm.com [127.0.0.1]) by ppma05fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAcHxb007142; Tue, 23 Nov 2021 10:40:15 GMT Received: from b06avi18626390.portsmouth.uk.ibm.com (b06avi18626390.portsmouth.uk.ibm.com [9.149.26.192]) by ppma05fra.de.ibm.com with ESMTP id 3cern9nkn3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:15 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06avi18626390.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1ANAX3ow61735396 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Nov 2021 10:33:03 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9827FA405E; Tue, 23 Nov 2021 10:40:11 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4C4BAA406E; Tue, 23 Nov 2021 10:40:10 +0000 (GMT) Received: from linux6.. (unknown [9.114.12.104]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 23 Nov 2021 10:40:10 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com, david@redhat.com, thuth@redhat.com, seiden@linux.ibm.com, mhartmay@linux.ibm.com Subject: [kvm-unit-tests PATCH 5/8] s390x: lib: Extend UV library with PV guest management Date: Tue, 23 Nov 2021 10:39:53 +0000 Message-Id: <20211123103956.2170-6-frankja@linux.ibm.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211123103956.2170-1-frankja@linux.ibm.com> References: <20211123103956.2170-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: BZpc3EC6Uz5WtO8Fg1Ax9aDg2ukjFviG X-Proofpoint-ORIG-GUID: jCMWIGJizaGUV4UQPuVvntI-FQXTe8kt X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-23_03,2021-11-23_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 clxscore=1015 adultscore=0 impostorscore=0 mlxlogscore=999 mlxscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230059 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Let's extend the UV lib with guest 1 code to be able to manage protected VMs in the future. Signed-off-by: Janosch Frank Reviewed-by: Claudio Imbrenda --- lib/s390x/asm/uv.h | 14 +++++ lib/s390x/sie.h | 3 ++ lib/s390x/uv.c | 128 +++++++++++++++++++++++++++++++++++++++++++++ lib/s390x/uv.h | 7 +++ 4 files changed, 152 insertions(+) diff --git a/lib/s390x/asm/uv.h b/lib/s390x/asm/uv.h index 6e331211..97c90e81 100644 --- a/lib/s390x/asm/uv.h +++ b/lib/s390x/asm/uv.h @@ -355,4 +355,18 @@ static inline int uv_set_se_hdr(uint64_t handle, void *hdr, size_t len) return uv_call(0, (uint64_t)&uvcb); } +static inline int uv_unp_page(uint64_t handle, uint64_t gaddr, uint64_t tweak1, uint64_t tweak2) +{ + struct uv_cb_unp uvcb = { + .header.cmd = UVC_CMD_UNPACK_IMG, + .header.len = sizeof(uvcb), + .guest_handle = handle, + .gaddr = gaddr, + .tweak[0] = tweak1, + .tweak[1] = tweak2, + }; + + return uv_call(0, (uint64_t)&uvcb); +} + #endif diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h index 1a12faa7..6d209793 100644 --- a/lib/s390x/sie.h +++ b/lib/s390x/sie.h @@ -203,6 +203,9 @@ union { struct vm_uv { uint64_t vm_handle; uint64_t vcpu_handle; + void *conf_base_stor; + void *conf_var_stor; + void *cpu_stor; }; struct vm_save_regs { diff --git a/lib/s390x/uv.c b/lib/s390x/uv.c index c5c69c47..6fe11dff 100644 --- a/lib/s390x/uv.c +++ b/lib/s390x/uv.c @@ -17,11 +17,14 @@ #include #include #include +#include static struct uv_cb_qui uvcb_qui = { .header.cmd = UVC_CMD_QUI, .header.len = sizeof(uvcb_qui), }; +static uint64_t uv_init_mem; + bool uv_os_is_guest(void) { @@ -54,3 +57,128 @@ int uv_setup(void) assert(uvcb_qui.header.rc == 1 || uvcb_qui.header.rc == 0x100); return 1; } + +void uv_init(void) +{ + struct uv_cb_init uvcb_init = { + .header.len = sizeof(uvcb_init), + .header.cmd = UVC_CMD_INIT_UV, + }; + static bool initialized; + int cc; + + /* Let's not do this twice */ + assert(!initialized); + /* Query is done on initialization but let's check anyway */ + assert(uvcb_qui.header.rc == 1 || uvcb_qui.header.rc == 0x100); + + /* Donated storage needs to be over 2GB aligned to 1MB */ + uv_init_mem = (uint64_t)memalign_pages_flags(HPAGE_SIZE, uvcb_qui.uv_base_stor_len, AREA_NORMAL); + uvcb_init.stor_origin = uv_init_mem; + uvcb_init.stor_len = uvcb_qui.uv_base_stor_len; + + cc = uv_call(0, (uint64_t)&uvcb_init); + assert(cc == 0); + initialized = true; +} + +void uv_create_guest(struct vm *vm) +{ + struct uv_cb_cgc uvcb_cgc = { + .header.cmd = UVC_CMD_CREATE_SEC_CONF, + .header.len = sizeof(uvcb_cgc), + }; + struct uv_cb_csc uvcb_csc = { + .header.len = sizeof(uvcb_csc), + .header.cmd = UVC_CMD_CREATE_SEC_CPU, + .state_origin = (uint64_t)vm->sblk, + .num = 0, + }; + unsigned long vsize; + int cc; + + uvcb_cgc.guest_stor_origin = vm->sblk->mso; + uvcb_cgc.guest_stor_len = vm->sblk->msl; + + /* Config allocation */ + vsize = uvcb_qui.conf_base_virt_stor_len + + ((uvcb_cgc.guest_stor_len / HPAGE_SIZE) * uvcb_qui.conf_virt_var_stor_len); + + vm->uv.conf_base_stor = memalign_pages_flags(PAGE_SIZE * 4, uvcb_qui.conf_base_phys_stor_len, 0); + /* + * This allocation needs to be below the max guest storage + * address so let's simply put it into the physical memory + */ + vm->uv.conf_var_stor = memalign_pages_flags(PAGE_SIZE, vsize,0); + uvcb_cgc.conf_base_stor_origin = (uint64_t)vm->uv.conf_base_stor; + uvcb_cgc.conf_var_stor_origin = (uint64_t)vm->uv.conf_var_stor; + + /* CPU allocation */ + vm->uv.cpu_stor = memalign_pages_flags(PAGE_SIZE, uvcb_qui.cpu_stor_len, 0); + uvcb_csc.stor_origin = (uint64_t)vm->uv.cpu_stor; + + uvcb_cgc.guest_asce = (uint64_t)stctg(1); + uvcb_cgc.guest_sca = (uint64_t)vm->sca; + + cc = uv_call(0, (uint64_t)&uvcb_cgc); + assert(!cc); + + vm->uv.vm_handle = uvcb_cgc.guest_handle; + uvcb_csc.guest_handle = uvcb_cgc.guest_handle; + cc = uv_call(0, (uint64_t)&uvcb_csc); + vm->uv.vcpu_handle = uvcb_csc.cpu_handle; + assert(!cc); + + /* + * Convert guest to format 4: + * + * - Set format 4 + * - Write UV handles into sblk + * - Allocate and set SIDA + */ + vm->sblk->sdf = 2; + vm->sblk->sidad = (uint64_t)alloc_page(); + vm->sblk->pv_handle_cpu = uvcb_csc.cpu_handle; + vm->sblk->pv_handle_config = uvcb_cgc.guest_handle; +} + +void uv_destroy_guest(struct vm *vm) +{ + int cc; + u16 rc, rrc; + + cc = uv_cmd_nodata(vm->sblk->pv_handle_cpu, + UVC_CMD_DESTROY_SEC_CPU, &rc, &rrc); + assert(cc == 0); + free_page((void *)vm->sblk->sidad); + free_pages(vm->uv.cpu_stor); + + cc = uv_cmd_nodata(vm->sblk->pv_handle_config, + UVC_CMD_DESTROY_SEC_CONF, &rc, &rrc); + assert(cc == 0); + free_pages(vm->uv.conf_base_stor); + free_pages(vm->uv.conf_var_stor); +} + +int uv_unpack(struct vm *vm, uint64_t addr, uint64_t len, uint64_t tweak) +{ + int i, cc; + + for (i = 0; i < len / PAGE_SIZE; i++) { + cc = uv_unp_page(vm->uv.vm_handle, addr, tweak, i * PAGE_SIZE); + assert(!cc); + addr += PAGE_SIZE; + } + return cc; +} + +void uv_verify_load(struct vm *vm) +{ + uint16_t rc, rrc; + int cc; + + cc = uv_cmd_nodata(vm->uv.vm_handle, UVC_CMD_VERIFY_IMG, &rc, &rrc); + assert(!cc); + cc = uv_set_cpu_state(vm->uv.vcpu_handle, PV_CPU_STATE_OPR_LOAD); + assert(!cc); +} diff --git a/lib/s390x/uv.h b/lib/s390x/uv.h index 2b23407a..6ffe537a 100644 --- a/lib/s390x/uv.h +++ b/lib/s390x/uv.h @@ -2,9 +2,16 @@ #ifndef _S390X_UV_H_ #define _S390X_UV_H_ +#include + bool uv_os_is_guest(void); bool uv_os_is_host(void); bool uv_query_test_call(unsigned int nr); +void uv_init(void); int uv_setup(void); +void uv_create_guest(struct vm *vm); +void uv_destroy_guest(struct vm *vm); +int uv_unpack(struct vm *vm, uint64_t addr, uint64_t len, uint64_t tweak); +void uv_verify_load(struct vm *vm); #endif /* UV_H */ From patchwork Tue Nov 23 10:39:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12633925 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1988FC4332F for ; Tue, 23 Nov 2021 10:40:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233234AbhKWKn3 (ORCPT ); Tue, 23 Nov 2021 05:43:29 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:8134 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234499AbhKWKn1 (ORCPT ); Tue, 23 Nov 2021 05:43:27 -0500 Received: from pps.filterd (m0187473.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1AN8mcAB027852; Tue, 23 Nov 2021 10:40:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=3SRnOQutGWcM7+x7k+N8fe4b0olytEbFLNPrpqXO1CA=; b=euKT12y4trIh9HPcYAH9yTXsyhtVQttLjLM9Fsay7UlNEhlBsh1Y1dEKyC/mQ0fgMr3K k85KvNOE5ICRtExjugevuEceazAoesw8rUoc3lqLU2qWqH2IqlYhK0pUwxWZsyfAg4I1 FlUQuzpD4tNwt7jvK25/7cx1zCoxOvZ4SK25H7hrC0C7R6eO/AgSRkpYkoigIhmx25gq wncA0X3Wp9FEVX5ruJKz/+U90q+nu8qaDCRjvLVJSE2OHoP7HJ5Jdum9oTV65DMy2JKc dMATNGP9rfe0gVMNzk2cHueO2LFk63Dsut3Jw2MNPShT1Oom4m5ROFLwxhhmGFVawLqd Pw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgsn2nybc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:19 +0000 Received: from m0187473.ppops.net (m0187473.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1ANACDAS040621; Tue, 23 Nov 2021 10:40:18 GMT Received: from ppma05fra.de.ibm.com (6c.4a.5195.ip4.static.sl-reverse.com [149.81.74.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgsn2nyan-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:18 +0000 Received: from pps.filterd (ppma05fra.de.ibm.com [127.0.0.1]) by ppma05fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAcDMA007107; Tue, 23 Nov 2021 10:40:16 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma05fra.de.ibm.com with ESMTP id 3cern9nknf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:16 +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 1ANAeDDH33358252 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Nov 2021 10:40:13 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 17000A405E; Tue, 23 Nov 2021 10:40:13 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D8032A4040; Tue, 23 Nov 2021 10:40:11 +0000 (GMT) Received: from linux6.. (unknown [9.114.12.104]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 23 Nov 2021 10:40:11 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com, david@redhat.com, thuth@redhat.com, seiden@linux.ibm.com, mhartmay@linux.ibm.com Subject: [kvm-unit-tests PATCH 6/8] lib: s390: sie: Add PV guest register handling Date: Tue, 23 Nov 2021 10:39:54 +0000 Message-Id: <20211123103956.2170-7-frankja@linux.ibm.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211123103956.2170-1-frankja@linux.ibm.com> References: <20211123103956.2170-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: -uof_XUaok7QqHVgCtUr539cvMETP1Xj X-Proofpoint-ORIG-GUID: xIEZAnucsR9ycG9kV09UtvmA6Hsft2-Q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-23_03,2021-11-23_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 impostorscore=0 malwarescore=0 spamscore=0 mlxscore=0 lowpriorityscore=0 mlxlogscore=999 adultscore=0 phishscore=0 bulkscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230059 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Protected guests have their registers stored to / loaded from offset 0x380 of the sie control block. So we need to copy over the GRs to/from that offset for format 4 (PV) guests before and after we enter SIE. Signed-off-by: Janosch Frank Reviewed-by: Claudio Imbrenda --- lib/s390x/sie.c | 8 ++++++++ lib/s390x/sie.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/lib/s390x/sie.c b/lib/s390x/sie.c index 51d3b94e..00aff713 100644 --- a/lib/s390x/sie.c +++ b/lib/s390x/sie.c @@ -44,6 +44,10 @@ void sie_handle_validity(struct vm *vm) void sie(struct vm *vm) { + if (vm->sblk->sdf == 2) + memcpy(vm->sblk->pv_grregs, vm->save_area.guest.grs, + sizeof(vm->save_area.guest.grs)); + /* Reset icptcode so we don't trip over it below */ vm->sblk->icptcode = 0; @@ -53,6 +57,10 @@ void sie(struct vm *vm) } vm->save_area.guest.grs[14] = vm->sblk->gg14; vm->save_area.guest.grs[15] = vm->sblk->gg15; + + if (vm->sblk->sdf == 2) + memcpy(vm->save_area.guest.grs, vm->sblk->pv_grregs, + sizeof(vm->save_area.guest.grs)); } void sie_guest_sca_create(struct vm *vm) diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h index 6d209793..de91ea5a 100644 --- a/lib/s390x/sie.h +++ b/lib/s390x/sie.h @@ -198,6 +198,8 @@ union { uint64_t itdba; /* 0x01e8 */ uint64_t riccbd; /* 0x01f0 */ uint64_t gvrd; /* 0x01f8 */ + uint64_t reserved200[48]; /* 0x0200 */ + uint64_t pv_grregs[16]; /* 0x0380 */ } __attribute__((packed)); struct vm_uv { From patchwork Tue Nov 23 10:39:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12633927 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D2845C43217 for ; Tue, 23 Nov 2021 10:40:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235630AbhKWKna (ORCPT ); Tue, 23 Nov 2021 05:43:30 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:43760 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234558AbhKWKn2 (ORCPT ); Tue, 23 Nov 2021 05:43:28 -0500 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1AN8pdSK030824; Tue, 23 Nov 2021 10:40:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=ilVBNTB9P0LWrxKsDhdEo4qokM/p2ZMbzuIJnfs9UZo=; b=olrB5M7LFIdbyBr77sn3Mu43vmVcTXXYQWNujjPDmSTGQE+97RII4pX3TN8isvC9RCNV cCJ5ijRRdyiRdyKS1MzxOtUOBfHHBZM1+jZzDTMpRjQKlD+ucLaye7Q0CaAYqTDqITEG fYiX3sIjzVsGzK3V/b1uQMvHwgW7pey7vXeMcx2xmQZz0anfdFKM1ConK8Lph1uSK/Fh JIUYl7tn2XMZAmraaIQisCqp2rOZHHrXIJUJoWl/dGZtG9ofU99W741RPm0zkf2ZnDw4 FWJXbk4q4VKDYwseIXDJrs57SwLMzjiZ2zdYhC9Rs2N6utFNVdU1Xq02QdLEfdDHtTbs 0w== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgw5nj11e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:20 +0000 Received: from m0098399.ppops.net (m0098399.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1ANAOiPs019845; Tue, 23 Nov 2021 10:40:20 GMT Received: from ppma01fra.de.ibm.com (46.49.7a9f.ip4.static.sl-reverse.com [159.122.73.70]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgw5nj10r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:20 +0000 Received: from pps.filterd (ppma01fra.de.ibm.com [127.0.0.1]) by ppma01fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAca9r017608; Tue, 23 Nov 2021 10:40:17 GMT Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by ppma01fra.de.ibm.com with ESMTP id 3cern9dk8q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:17 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1ANAeEHv15073778 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Nov 2021 10:40:14 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8F108A405E; Tue, 23 Nov 2021 10:40:14 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 574F5A404D; Tue, 23 Nov 2021 10:40:13 +0000 (GMT) Received: from linux6.. (unknown [9.114.12.104]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 23 Nov 2021 10:40:13 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com, david@redhat.com, thuth@redhat.com, seiden@linux.ibm.com, mhartmay@linux.ibm.com Subject: [kvm-unit-tests PATCH 7/8] s390x: snippets: Add PV support Date: Tue, 23 Nov 2021 10:39:55 +0000 Message-Id: <20211123103956.2170-8-frankja@linux.ibm.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211123103956.2170-1-frankja@linux.ibm.com> References: <20211123103956.2170-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: rRGsxBSZslFLbpHR6KNYKYjJ44rGr-ts X-Proofpoint-ORIG-GUID: KZWf_G_kjJPE4ZQyPEgO0TMbFcAZfWD1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-23_03,2021-11-23_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 suspectscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 mlxscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230059 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org To create a pv-snippet we need to generate an se-header. This can be done using a currently not released tool. This tool creates a se-header similar to `genprotimg` with the difference that the image itself will not be encrypted. The image for which we want to create a header must be a binary and padded to 4k. Therefore, we convert the compiled snippet to a binary, padd it to 4k, generate the header and convert it back to s390-64bit elf. The name of the tool can be specified using the config argument `--gen-se-header=`. The pv-snipptes will only be built when this option is specified. Furthermore, the Hostkey-Document must be specified. If not the build will be skipped. The host-snippet relation can be specified using the `pv-snippets` variable in s390x/Makefile, similar to the non-pv-snippets in 2f6fdb4a (s390x: snippets: Add snippet compilation, 2021-06-22) Signed-off-by: Steffen Eiden Reviewed-by: Claudio Imbrenda --- .gitignore | 2 ++ configure | 8 ++++++ lib/s390x/snippet.h | 7 +++++ s390x/Makefile | 67 +++++++++++++++++++++++++++++++++++++-------- 4 files changed, 73 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 3d5be622..28a197bf 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ cscope.* /api/dirty-log-perf /s390x/*.bin /s390x/snippets/*/*.gbin +/s390x/snippets/*/*.hdr +/s390x/snippets/*/*.*obj \ No newline at end of file diff --git a/configure b/configure index 1d4d855e..9210912f 100755 --- a/configure +++ b/configure @@ -26,6 +26,7 @@ target= errata_force=0 erratatxt="$srcdir/errata.txt" host_key_document= +gen_se_header= page_size= earlycon= @@ -54,6 +55,9 @@ usage() { --host-key-document=HOST_KEY_DOCUMENT Specify the machine-specific host-key document for creating a PVM image with 'genprotimg' (s390x only) + --gen-se-header=GEN_SE_HEADER + Provide an executable to generate a PV header + requires --host-key-document. (s390x-snippets only) --page-size=PAGE_SIZE Specify the page size (translation granule) (4k, 16k or 64k, default is 64k, arm64 only) @@ -127,6 +131,9 @@ while [[ "$1" = -* ]]; do --host-key-document) host_key_document="$arg" ;; + --gen-se-header) + gen_se_header="$arg" + ;; --page-size) page_size="$arg" ;; @@ -341,6 +348,7 @@ U32_LONG_FMT=$u32_long WA_DIVIDE=$wa_divide GENPROTIMG=${GENPROTIMG-genprotimg} HOST_KEY_DOCUMENT=$host_key_document +GEN_SE_HEADER=$gen_se_header EOF if [ "$arch" = "arm" ] || [ "$arch" = "arm64" ]; then echo "TARGET=$target" >> config.mak diff --git a/lib/s390x/snippet.h b/lib/s390x/snippet.h index 8e4765f8..6b77a8a9 100644 --- a/lib/s390x/snippet.h +++ b/lib/s390x/snippet.h @@ -14,10 +14,17 @@ _binary_s390x_snippets_##type##_##file##_gbin_start #define SNIPPET_NAME_END(type, file) \ _binary_s390x_snippets_##type##_##file##_gbin_end +#define SNIPPET_HDR_START(type, file) \ + _binary_s390x_snippets_##type##_##file##_hdr_start +#define SNIPPET_HDR_END(type, file) \ + _binary_s390x_snippets_##type##_##file##_hdr_end + /* Returns the length of the snippet */ #define SNIPPET_LEN(type, file) \ ((uintptr_t)SNIPPET_NAME_END(type, file) - (uintptr_t)SNIPPET_NAME_START(type, file)) +#define SNIPPET_HDR_LEN(type, file) \ + ((uintptr_t)SNIPPET_HDR_END(type, file) - (uintptr_t)SNIPPET_HDR_START(type, file)) /* * C snippet instructions start at 0x4000 due to the prefix and the diff --git a/s390x/Makefile b/s390x/Makefile index f95f2e61..55e6d962 100644 --- a/s390x/Makefile +++ b/s390x/Makefile @@ -26,12 +26,20 @@ tests += $(TEST_DIR)/edat.elf tests += $(TEST_DIR)/mvpg-sie.elf tests += $(TEST_DIR)/spec_ex-sie.elf +ifneq ($(HOST_KEY_DOCUMENT),) +ifneq ($(GEN_SE_HEADER),) +tests += $(pv-tests) +endif +endif + tests_binary = $(patsubst %.elf,%.bin,$(tests)) ifneq ($(HOST_KEY_DOCUMENT),) tests_pv_binary = $(patsubst %.bin,%.pv.bin,$(tests_binary)) else tests_pv_binary = +GEN_SE_HEADER = endif +snippets-obj = $(patsubst %.gbin,%.gobj,$(snippets)) all: directories test_cases test_cases_binary test_cases_pv @@ -82,26 +90,59 @@ asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o FLATLIBS = $(libcflat) SNIPPET_DIR = $(TEST_DIR)/snippets -snippet_asmlib = $(SNIPPET_DIR)/c/cstart.o lib/auxinfo.o +snippet_asmlib = $(SNIPPET_DIR)/c/cstart.o +snippet_lib = $(snippet_asmlib) lib/auxinfo.o # perquisites (=guests) for the snippet hosts. # $(TEST_DIR)/.elf: snippets = $(SNIPPET_DIR)//.gbin $(TEST_DIR)/mvpg-sie.elf: snippets = $(SNIPPET_DIR)/c/mvpg-snippet.gbin $(TEST_DIR)/spec_ex-sie.elf: snippets = $(SNIPPET_DIR)/c/spec_ex.gbin -$(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(FLATLIBS) - $(OBJCOPY) -O binary $(patsubst %.gbin,%.o,$@) $@ - $(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $@ $@ +ifneq ($(GEN_SE_HEADER),) +snippets += $(pv-snippets) +tests += $(pv-tests) +snippet-hdr-obj = $(patsubst %.gbin,%.hdr.obj,$(pv-snippets)) +else +snippet-hdr-obj = +endif + +# the asm/c snippets %.o have additional generated files as dependencies +$(SNIPPET_DIR)/asm/%.o: $(SNIPPET_DIR)/asm/%.S $(asm-offsets) + $(CC) $(CFLAGS) -c -nostdlib -o $@ $< + +$(SNIPPET_DIR)/c/%.o: $(SNIPPET_DIR)/c/%.c $(asm-offsets) + $(CC) $(CFLAGS) -c -nostdlib -o $@ $< + +$(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o + $(OBJCOPY) -O binary -j ".rodata" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $(patsubst %.gbin,%.o,$@) $@ + truncate -s '%4096' $@ + +$(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) + $(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/snippets/c/flat.lds $(patsubst %.gbin,%.o,$@) $(snippet_lib) $(FLATLIBS) + $(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@ + truncate -s '%4096' $@ + +$(SNIPPET_DIR)/asm/%.hdr: $(SNIPPET_DIR)/asm/%.gbin $(HOST_KEY_DOCUMENT) + $(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x4000,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@ + +$(SNIPPET_DIR)/c/%.hdr: $(SNIPPET_DIR)/c/%.gbin $(HOST_KEY_DOCUMENT) + $(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x0,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@ + +.SECONDARY: +%.gobj: %.gbin + $(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@ + +.SECONDARY: +%.hdr.obj: %.hdr + $(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@ -$(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_asmlib) $(FLATLIBS) - $(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/snippets/c/flat.lds $(patsubst %.gbin,%.o,$@) $(snippet_asmlib) $(FLATLIBS) - $(OBJCOPY) -O binary $@ $@ - $(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $@ $@ .SECONDEXPANSION: -%.elf: $$(snippets) %.o $(FLATLIBS) $(SRCDIR)/s390x/flat.lds $(asmlib) +%.elf: $(FLATLIBS) $(asmlib) $(SRCDIR)/s390x/flat.lds $$(snippets-obj) $$(snippet-hdr-obj) %.o $(CC) $(CFLAGS) -c -o $(@:.elf=.aux.o) $(SRCDIR)/lib/auxinfo.c -DPROGNAME=\"$@\" - $(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/flat.lds $(filter %.o, $^) $(FLATLIBS) $(snippets) $(@:.elf=.aux.o) + @$(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/flat.lds \ + $(filter %.o, $^) $(FLATLIBS) $(snippets-obj) $(snippet-hdr-obj) $(@:.elf=.aux.o) || \ + { echo "Failure probably caused by missing definition of gen-se-header executable"; exit 1; } $(RM) $(@:.elf=.aux.o) @chmod a-x $@ @@ -114,8 +155,12 @@ $(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_asmlib) $(FLATLIBS) %.pv.bin: %.bin $(HOST_KEY_DOCUMENT) $(GENPROTIMG) --host-key-document $(HOST_KEY_DOCUMENT) --no-verify --image $< -o $@ +$(snippet_asmlib): $$(patsubst %.o,%.S,$$@) $(asm-offsets) + $(CC) $(CFLAGS) -c -nostdlib -o $@ $< + + arch_clean: asm_offsets_clean - $(RM) $(TEST_DIR)/*.{o,elf,bin} $(TEST_DIR)/.*.d $(SNIPPET_DIR)/c/*.{o,gbin} $(SNIPPET_DIR)/c/.*.d lib/s390x/.*.d + $(RM) $(TEST_DIR)/*.{o,elf,bin} $(SNIPPET_DIR)/*/*.{o,elf,*bin,*obj,hdr} $(SNIPPET_DIR)/asm/.*.d $(TEST_DIR)/.*.d lib/s390x/.*.d generated-files = $(asm-offsets) $(tests:.elf=.o) $(asmlib) $(cflatobjs): $(generated-files) From patchwork Tue Nov 23 10:39:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12633929 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9020DC433FE for ; Tue, 23 Nov 2021 10:40:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234042AbhKWKnb (ORCPT ); Tue, 23 Nov 2021 05:43:31 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:27966 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235571AbhKWKna (ORCPT ); Tue, 23 Nov 2021 05:43:30 -0500 Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1AN9HX63012170; Tue, 23 Nov 2021 10:40:22 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=ozzFY237lm2RlYJjkHJh3qkraRjbOzVCV3lhFU/xpfQ=; b=fQni9tjHmflL5ZrEyGqHYMJaHYo+1a/H7JnYkm2ZCd2iQpZR/y2s3fzfMdNwhko1cblR tsakLrsfuHq3Qjhzpf8zRGpA+UVRdyD1udPOGZbU/oQOo+0eE4wtHyBD4g3H+HoxAdmA XSv0Bt7G7etL1Jlu8qYXsWHWUiwU7/zR8c+5KjZOTe9RjEubgLdhgrbWZlhxo/pk4ULl 3xCiPZINWDkXtmf0wChYb2YuCFkTG478eVY0nLDt/WVPTo2kaoGx0ojUxif+z8npnHYW AEGNMVdB8I1OSc2saxAojxY4E12belUjA5y3CFaHFwVfprSPRI+akNmiPRS7zUCrPX/M ng== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgwhhhey2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:22 +0000 Received: from m0098394.ppops.net (m0098394.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1ANAeF3R011390; Tue, 23 Nov 2021 10:40:22 GMT Received: from ppma05fra.de.ibm.com (6c.4a.5195.ip4.static.sl-reverse.com [149.81.74.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 3cgwhhhexh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:22 +0000 Received: from pps.filterd (ppma05fra.de.ibm.com [127.0.0.1]) by ppma05fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1ANAcCiL007089; Tue, 23 Nov 2021 10:40:19 GMT Received: from b06cxnps4076.portsmouth.uk.ibm.com (d06relay13.portsmouth.uk.ibm.com [9.149.109.198]) by ppma05fra.de.ibm.com with ESMTP id 3cern9nkp7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 23 Nov 2021 10:40:19 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1ANAeG1F49873374 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Nov 2021 10:40:16 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2A4B6A404D; Tue, 23 Nov 2021 10:40:16 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DE24BA4057; Tue, 23 Nov 2021 10:40:14 +0000 (GMT) Received: from linux6.. (unknown [9.114.12.104]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 23 Nov 2021 10:40:14 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com, david@redhat.com, thuth@redhat.com, seiden@linux.ibm.com, mhartmay@linux.ibm.com Subject: [kvm-unit-tests PATCH 8/8] s390x: sie: Add PV diag test Date: Tue, 23 Nov 2021 10:39:56 +0000 Message-Id: <20211123103956.2170-9-frankja@linux.ibm.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211123103956.2170-1-frankja@linux.ibm.com> References: <20211123103956.2170-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: UPV3C6FHgxuiEFsTXLAY0XaMmBVy5qip X-Proofpoint-ORIG-GUID: l8XZZk_tQGhpOo2VJIF3qtlF0dM7mi3X X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-23_03,2021-11-23_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 suspectscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 malwarescore=0 priorityscore=1501 spamscore=0 mlxlogscore=999 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230059 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Let's start testing the format 4 (PV) SIE via the diagnose instructions since most of them are pretty simple to handle. The tests check for the intercept values like ipa/ipb and icptcode as well as the values in the registers and handling of the exception injection. Signed-off-by: Janosch Frank Reviewed-by: Claudio Imbrenda --- s390x/Makefile | 7 + s390x/pv-diags.c | 240 +++++++++++++++++++++ s390x/snippets/asm/snippet-pv-diag-288.S | 25 +++ s390x/snippets/asm/snippet-pv-diag-500.S | 39 ++++ s390x/snippets/asm/snippet-pv-diag-yield.S | 7 + 5 files changed, 318 insertions(+) create mode 100644 s390x/pv-diags.c create mode 100644 s390x/snippets/asm/snippet-pv-diag-288.S create mode 100644 s390x/snippets/asm/snippet-pv-diag-500.S create mode 100644 s390x/snippets/asm/snippet-pv-diag-yield.S diff --git a/s390x/Makefile b/s390x/Makefile index 55e6d962..4f2374a5 100644 --- a/s390x/Makefile +++ b/s390x/Makefile @@ -26,6 +26,8 @@ tests += $(TEST_DIR)/edat.elf tests += $(TEST_DIR)/mvpg-sie.elf tests += $(TEST_DIR)/spec_ex-sie.elf +pv-tests += $(TEST_DIR)/pv-diags.elf + ifneq ($(HOST_KEY_DOCUMENT),) ifneq ($(GEN_SE_HEADER),) tests += $(pv-tests) @@ -98,6 +100,11 @@ snippet_lib = $(snippet_asmlib) lib/auxinfo.o $(TEST_DIR)/mvpg-sie.elf: snippets = $(SNIPPET_DIR)/c/mvpg-snippet.gbin $(TEST_DIR)/spec_ex-sie.elf: snippets = $(SNIPPET_DIR)/c/spec_ex.gbin +$(TEST_DIR)/pv-diags.elf: pv-snippets += $(SNIPPET_DIR)/asm/snippet-pv-diag-yield.gbin +$(TEST_DIR)/pv-diags.elf: pv-snippets += $(SNIPPET_DIR)/asm/snippet-pv-diag-288.gbin +$(TEST_DIR)/pv-diags.elf: pv-snippets += $(SNIPPET_DIR)/asm/snippet-pv-diag-500.gbin + + ifneq ($(GEN_SE_HEADER),) snippets += $(pv-snippets) tests += $(pv-tests) diff --git a/s390x/pv-diags.c b/s390x/pv-diags.c new file mode 100644 index 00000000..82288943 --- /dev/null +++ b/s390x/pv-diags.c @@ -0,0 +1,240 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * PV virtualization interception tests for diagnose instructions. + * + * Copyright (c) 2021 IBM Corp + * + * Authors: + * Janosch Frank + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static u8 *guest; +static u8 *guest_instr; +static struct vm vm; + +uint64_t tweak[2] = {0x42, 0x00}; + +static void setup_vmem(void) +{ + uint64_t asce; + + /* We need to have a valid primary ASCE to run guests. */ + setup_vm(); + + /* Set P bit in ASCE as it is required for SE guests */ + asce = stctg(1) | ASCE_P; + lctlg(1, asce); + + /* Copy ASCE into home space CR */ + lctlg(13, asce); +} + + +static void init_guest(const char *gbin, const char *hdr, uint64_t gbin_len, + uint64_t hdr_len) +{ + uv_create_guest(&vm); + uv_set_se_hdr(vm.uv.vm_handle, (void *)hdr, hdr_len); + + /* Copy test image to guest memory */ + memcpy(guest_instr, gbin, gbin_len); + + uv_unpack(&vm, SNIPPET_ENTRY_ADDR, gbin_len, tweak[0]); + uv_verify_load(&vm); + + /* Manually import lowcore */ + uv_import(vm.uv.vm_handle, (uint64_t)guest); + uv_import(vm.uv.vm_handle, (uint64_t)(guest + PAGE_SIZE)); +} + +static void setup_guest(void) +{ + setup_vmem(); + + /* Allocate 1MB as guest memory */ + guest = alloc_pages(8); + memset(guest, 0, HPAGE_SIZE); + /* The first two pages are the lowcore */ + guest_instr = guest + SNIPPET_ENTRY_ADDR; + + sie_guest_create(&vm, (uint64_t)guest, HPAGE_SIZE); + /* FMT4 needs a ESCA */ + sie_guest_sca_create(&vm); + + uv_init(); +} + +static void test_diag_500(void) +{ + extern const char SNIPPET_NAME_START(asm, snippet_pv_diag_500)[]; + extern const char SNIPPET_NAME_END(asm, snippet_pv_diag_500)[]; + extern const char SNIPPET_HDR_START(asm, snippet_pv_diag_500)[]; + extern const char SNIPPET_HDR_END(asm, snippet_pv_diag_500)[]; + int size_hdr = SNIPPET_HDR_LEN(asm, snippet_pv_diag_500); + int size_gbin = SNIPPET_LEN(asm, snippet_pv_diag_500); + + report_prefix_push("diag 0x500"); + + init_guest(SNIPPET_NAME_START(asm, snippet_pv_diag_500), + SNIPPET_HDR_START(asm, snippet_pv_diag_500), + size_gbin, size_hdr); + + sie(&vm); + report(vm.sblk->icptcode == ICPT_PV_INSTR && vm.sblk->ipa == 0x8302 && + vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x500, + "intercept values"); + report(vm.save_area.guest.grs[1] == 1 && + vm.save_area.guest.grs[2] == 2 && + vm.save_area.guest.grs[3] == 3 && + vm.save_area.guest.grs[4] == 4, + "register values"); + /* + * Check if we can inject a PGM operand which we are always + * allowed to do after a diag500 exit. + */ + vm.sblk->iictl = IICTL_CODE_OPERAND; + sie(&vm); + report(vm.sblk->icptcode == ICPT_PV_NOTIFY && vm.sblk->ipa == 0x8302 && + vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x9c + && vm.save_area.guest.grs[0] == PGM_INT_CODE_OPERAND, + "operand exception"); + + /* + * Check if we can inject a PGM specification which we are always + * allowed to do after a diag500 exit. + */ + sie(&vm); + vm.sblk->iictl = IICTL_CODE_SPECIFICATION; + /* Inject PGM, next exit should be 9c */ + sie(&vm); + report(vm.sblk->icptcode == ICPT_PV_NOTIFY && vm.sblk->ipa == 0x8302 && + vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x9c + && vm.save_area.guest.grs[0] == PGM_INT_CODE_SPECIFICATION, + "specification exception"); + + /* No need for cleanup, just tear down the VM */ + uv_destroy_guest(&vm); + + report_prefix_pop(); +} + + +static void test_diag_288(void) +{ + extern const char SNIPPET_NAME_START(asm, snippet_pv_diag_288)[]; + extern const char SNIPPET_NAME_END(asm, snippet_pv_diag_288)[]; + extern const char SNIPPET_HDR_START(asm, snippet_pv_diag_288)[]; + extern const char SNIPPET_HDR_END(asm, snippet_pv_diag_288)[]; + int size_hdr = SNIPPET_HDR_LEN(asm, snippet_pv_diag_288); + int size_gbin = SNIPPET_LEN(asm, snippet_pv_diag_288); + + report_prefix_push("diag 0x288"); + + init_guest(SNIPPET_NAME_START(asm, snippet_pv_diag_288), + SNIPPET_HDR_START(asm, snippet_pv_diag_288), + size_gbin, size_hdr); + + sie(&vm); + report(vm.sblk->icptcode == ICPT_PV_INSTR && vm.sblk->ipa == 0x8302 && + vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x288, + "intercept values"); + report(vm.save_area.guest.grs[0] == 1 && + vm.save_area.guest.grs[1] == 2 && + vm.save_area.guest.grs[2] == 3, + "register values"); + + /* + * Check if we can inject a PGM spec which we are always + * allowed to do after a diag288 exit. + */ + vm.sblk->iictl = IICTL_CODE_SPECIFICATION; + sie(&vm); + report(vm.sblk->icptcode == ICPT_PV_NOTIFY && vm.sblk->ipa == 0x8302 && + vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x9c + && vm.save_area.guest.grs[0] == PGM_INT_CODE_SPECIFICATION, + "specification exception"); + + /* No need for cleanup, just tear down the VM */ + uv_destroy_guest(&vm); + + report_prefix_pop(); +} + +static void test_diag_yield(void) +{ + extern const char SNIPPET_NAME_START(asm, snippet_pv_diag_yield)[]; + extern const char SNIPPET_NAME_END(asm, snippet_pv_diag_yield)[]; + extern const char SNIPPET_HDR_START(asm, snippet_pv_diag_yield)[]; + extern const char SNIPPET_HDR_END(asm, snippet_pv_diag_yield)[]; + int size_hdr = SNIPPET_HDR_LEN(asm, snippet_pv_diag_yield); + int size_gbin = SNIPPET_LEN(asm, snippet_pv_diag_yield); + + report_prefix_push("diag yield"); + + init_guest(SNIPPET_NAME_START(asm, snippet_pv_diag_yield), + SNIPPET_HDR_START(asm, snippet_pv_diag_yield), + size_gbin, size_hdr); + + /* 0x44 */ + report_prefix_push("0x44"); + sie(&vm); + report(vm.sblk->icptcode == ICPT_PV_NOTIFY && vm.sblk->ipa == 0x8302 && + vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x44, + "intercept values"); + report_prefix_pop(); + + /* 0x9c */ + report_prefix_push("0x9c"); + sie(&vm); + report(vm.sblk->icptcode == ICPT_PV_NOTIFY && vm.sblk->ipa == 0x8302 && + vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x9c, + "intercept values"); + report(vm.save_area.guest.grs[0] == 42, "r1 correct"); + report_prefix_pop(); + + uv_destroy_guest(&vm); + report_prefix_pop(); +} + + +int main(void) +{ + report_prefix_push("pv-diags"); + if (!test_facility(158)) { + report_skip("UV Call facility unavailable"); + goto done; + } + if (!sclp_facilities.has_sief2) { + report_skip("SIEF2 facility unavailable"); + goto done; + } + + setup_guest(); + test_diag_yield(); + test_diag_288(); + test_diag_500(); + sie_guest_destroy(&vm); + +done: + report_prefix_pop(); + return report_summary(); +} diff --git a/s390x/snippets/asm/snippet-pv-diag-288.S b/s390x/snippets/asm/snippet-pv-diag-288.S new file mode 100644 index 00000000..e3e63121 --- /dev/null +++ b/s390x/snippets/asm/snippet-pv-diag-288.S @@ -0,0 +1,25 @@ +#include +.section .text + +/* Clean and pre-load registers that are used for diag 288 */ +xgr %r0, %r0 +xgr %r1, %r1 +xgr %r3, %r3 +lghi %r0, 1 +lghi %r1, 2 +lghi %r2, 3 + +/* Let's jump to the pgm exit label on a PGM */ +larl %r4, exit_pgm +stg %r4, GEN_LC_PGM_NEW_PSW + 8 + +/* Execute the diag288 */ +diag %r0, %r2, 0x288 + +/* Force exit if we don't get a PGM */ +diag 0, 0, 0x44 + +/* Communicate the PGM code via diag9c(easiest) */ +exit_pgm: +lh %r1, GEN_LC_PGM_INT_CODE +diag %r1, 0, 0x9c diff --git a/s390x/snippets/asm/snippet-pv-diag-500.S b/s390x/snippets/asm/snippet-pv-diag-500.S new file mode 100644 index 00000000..50c06779 --- /dev/null +++ b/s390x/snippets/asm/snippet-pv-diag-500.S @@ -0,0 +1,39 @@ +#include +.section .text + +/* Clean and pre-load registers that are used for diag 500 */ +xgr %r1, %r1 +xgr %r2, %r2 +xgr %r3, %r3 +xgr %r4, %r4 +lghi %r1, 1 +lghi %r2, 2 +lghi %r3, 3 +lghi %r4, 4 + +/* Let's jump to the next label on a PGM */ +xgr %r5, %r5 +stg %r5, GEN_LC_PGM_NEW_PSW +larl %r5, next +stg %r5, GEN_LC_PGM_NEW_PSW + 8 + +/* Execute the diag500 */ +diag 0, 0, 0x500 + +/* Should never be executed because of the PGM */ +diag 0, 0, 0x44 + +/* Execute again to test spec PGM injection*/ +next: +lh %r1, GEN_LC_PGM_INT_CODE +diag %r1, 0, 0x9c +larl %r5, done +stg %r5, GEN_LC_PGM_NEW_PSW + 8 +diag 0, 0, 0x500 + +/* Should never be executed because of the PGM */ +diag 0, 0, 0x44 + +done: +lh %r1, GEN_LC_PGM_INT_CODE +diag %r1, 0, 0x9c diff --git a/s390x/snippets/asm/snippet-pv-diag-yield.S b/s390x/snippets/asm/snippet-pv-diag-yield.S new file mode 100644 index 00000000..5795cf0f --- /dev/null +++ b/s390x/snippets/asm/snippet-pv-diag-yield.S @@ -0,0 +1,7 @@ +.section .text + +xgr %r0, %r0 +xgr %r1, %r1 +diag 0,0,0x44 +lghi %r1, 42 +diag 1,0,0x9c