From patchwork Mon Nov 6 17:08:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Boehr X-Patchwork-Id: 13447195 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 00C5A15AF2 for ; Mon, 6 Nov 2023 17:08:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="oPfR9abO" Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D775D4D; Mon, 6 Nov 2023 09:08:55 -0800 (PST) Received: from pps.filterd (m0353727.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3A6GqWFx009758; Mon, 6 Nov 2023 17:08:55 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=ECHjvgKn7T8h70uC82BKY6deboTIePxxtdBahCWAHa0=; b=oPfR9abO5ReLHDpwymIWB7blNVZieqs6/NpO20jEu3aC1260Lsfqz27mGw4ayGG+Duj0 /HXKXLknSdBYQG+/WJxmd3QtPz6AFvKUQ4/yM4NueL1ZEEk/GHHwpx3oFo9oDIaKGmkq OaeJARHZIUNWfbiiucBfmy4hK6RGiRgfnByIO8EV2rgBQnGWncOKfjXiFgolxz+CsHB8 szxr8u3US3LVU7sdpBPFEmCr99HBW8GrXpltFNlb3U86jPjVffz+d063bZ9YoiXAFU8H PoQSxMY4djq2KYnlz8uAcPnUFHr/+xJxaSd1oWEmXMmcyFIb2fo1vYWf60djZjbTHFOe JA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3u741tgj3c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:08:54 +0000 Received: from m0353727.ppops.net (m0353727.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3A6H2LtX012136; Mon, 6 Nov 2023 17:08:54 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3u741tgj2r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:08:54 +0000 Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3A6FRnqu016958; Mon, 6 Nov 2023 17:08:53 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 3u6301j9e3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:08:53 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3A6H8o5j12321326 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 6 Nov 2023 17:08:50 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CDCFF20040; Mon, 6 Nov 2023 17:08:50 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6235D2004B; Mon, 6 Nov 2023 17:08:50 +0000 (GMT) Received: from t35lp63.lnxne.boe (unknown [9.152.108.100]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 6 Nov 2023 17:08:50 +0000 (GMT) From: Nico Boehr To: frankja@linux.ibm.com, imbrenda@linux.ibm.com, thuth@redhat.com Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v2 1/3] s390x: spec_ex-sie: refactor to use snippet API Date: Mon, 6 Nov 2023 18:08:00 +0100 Message-ID: <20231106170849.1184162-2-nrb@linux.ibm.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231106170849.1184162-1-nrb@linux.ibm.com> References: <20231106170849.1184162-1-nrb@linux.ibm.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: tniNvpb7yg9-Bmo_ql48ggQ67NYiOT0k X-Proofpoint-GUID: jHVwing4ZadFmE4RZg-J8yLCY4Z07_uq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-06_12,2023-11-02_03,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 impostorscore=0 malwarescore=0 suspectscore=0 clxscore=1015 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 adultscore=0 priorityscore=1501 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310240000 definitions=main-2311060139 spec_ex-sie uses a snippet, but allocated the memory on its own without obvious reason to do so. Refactor the test to use snippet_init(). Signed-off-by: Nico Boehr Reviewed-by: Janosch Frank --- s390x/spec_ex-sie.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/s390x/spec_ex-sie.c b/s390x/spec_ex-sie.c index 5fa135b81c86..fe2f23ee3d84 100644 --- a/s390x/spec_ex-sie.c +++ b/s390x/spec_ex-sie.c @@ -17,19 +17,18 @@ #include static struct vm vm; -extern const char SNIPPET_NAME_START(c, spec_ex)[]; -extern const char SNIPPET_NAME_END(c, spec_ex)[]; static bool strict; static void setup_guest(void) { - char *guest; - int binary_size = SNIPPET_LEN(c, spec_ex); + extern const char SNIPPET_NAME_START(c, spec_ex)[]; + extern const char SNIPPET_NAME_END(c, spec_ex)[]; setup_vm(); - guest = alloc_pages(8); - memcpy(guest, SNIPPET_NAME_START(c, spec_ex), binary_size); - sie_guest_create(&vm, (uint64_t) guest, HPAGE_SIZE); + + snippet_setup_guest(&vm, false); + snippet_init(&vm, SNIPPET_NAME_START(c, spec_ex), + SNIPPET_LEN(c, spec_ex), SNIPPET_UNPACK_OFF); } static void reset_guest(void) From patchwork Mon Nov 6 17:08:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Boehr X-Patchwork-Id: 13447201 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 511782941E for ; Mon, 6 Nov 2023 17:13:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="MSyFRyEL" Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16AD2125; Mon, 6 Nov 2023 09:13:56 -0800 (PST) Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3A6HBIo6025846; Mon, 6 Nov 2023 17:13:55 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=4I1kJQ90XgQ+u640fZsblLTReQIgV8UYfjOvD9ktl9o=; b=MSyFRyELq2Mw6P4o/gbxgxe2sO2rY4rQaC9Fz/W6lUTOm3OUT6Lzx98VjN4tDW/AUufk rFhGvzYHo50eYKAoPivIpmc5s0XOntFjsakDWuIFoys2bIcXsZA41Z4ONOBfZUgtBBam XD35SXgF3B7IQA/ltVAinWElSZbqST4t8xJHNipQoWT+ZGgRrLT3LqTKuWjmsAhGKm8W Kf+BI3DUU2Y2BA9HAgjzykDfx7dcOFoSwvnEYfdn+hRZAgRhc4gm15akqpBbpFOpwSxs clNObrAhl3kJFG8sCTeyEWixk9g01Vq1iH3pymJp9atTmW0Mhn3YB/RnZxVJJ706+zfK Kw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3u73f4j1q7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:13:55 +0000 Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3A6HBMwv026315; Mon, 6 Nov 2023 17:13:55 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3u73f4j1pe-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:13:55 +0000 Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3A6FX3d1016953; Mon, 6 Nov 2023 17:08:53 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 3u6301j9e5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:08:53 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3A6H8p9m51839396 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 6 Nov 2023 17:08:51 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0910F20040; Mon, 6 Nov 2023 17:08:51 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D532820043; Mon, 6 Nov 2023 17:08:50 +0000 (GMT) Received: from t35lp63.lnxne.boe (unknown [9.152.108.100]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 6 Nov 2023 17:08:50 +0000 (GMT) From: Nico Boehr To: frankja@linux.ibm.com, imbrenda@linux.ibm.com, thuth@redhat.com Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v2 2/3] s390x: sie: ensure guests are aligned to 2GB Date: Mon, 6 Nov 2023 18:08:01 +0100 Message-ID: <20231106170849.1184162-3-nrb@linux.ibm.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231106170849.1184162-1-nrb@linux.ibm.com> References: <20231106170849.1184162-1-nrb@linux.ibm.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: iDN3IrbYNs4LwiYG5VOOAcx10em7ejTc X-Proofpoint-ORIG-GUID: afITd0gwDBSsNB5OEGld-rcIOsHCrYs7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-06_12,2023-11-02_03,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 mlxscore=0 clxscore=1015 lowpriorityscore=0 suspectscore=0 adultscore=0 mlxlogscore=999 priorityscore=1501 impostorscore=0 spamscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310240000 definitions=main-2311060140 Until now, kvm-unit-tests has aligned guests to 1 MB in the host virtual address space. Unfortunately, some s390x environments require guests to be 2GB aligned in the host virtual address space, preventing kvm-unit-tests which act as a hypervisor from running there. We can't easily put guests at address 0, since we want to be able to run with MSO/MSL without having to maintain separate page tables for the guest physical memory. 2GB is also not a good choice, since the alloc_pages allocator will place its metadata there when the host has more than 2GB of memory. In addition, we also want a bit of space after the end of the host physical memory to be able to catch accesses beyond the end of physical memory. The vmalloc allocator unfortunately allocates memory starting at the highest virtual address which is not suitable for guest memory either due to additional constraints of some environments. The physical page allocator in memalign_pages() is also not a optimal choice, since every test running SIE would then require at least 4GB+1MB of physical memory. This results in a few quite complex allocation requirements, hence add a new function sie_guest_alloc() which allocates memory for a guest and then establishes a properly aligned virtual space mapping. Rework snippet test and sie tests to use the new sie_guest_alloc() function. Signed-off-by: Nico Boehr Reviewed-by: Claudio Imbrenda --- lib/s390x/sie.c | 42 ++++++++++++++++++++++++++++++++++++++++++ lib/s390x/sie.h | 2 ++ lib/s390x/snippet.h | 9 +++------ s390x/sie.c | 4 ++-- 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/lib/s390x/sie.c b/lib/s390x/sie.c index b44febdeaaac..69466dbf030a 100644 --- a/lib/s390x/sie.c +++ b/lib/s390x/sie.c @@ -15,6 +15,8 @@ #include #include #include +#include +#include void sie_expect_validity(struct vm *vm) { @@ -111,6 +113,46 @@ void sie_guest_create(struct vm *vm, uint64_t guest_mem, uint64_t guest_mem_len) vm->sblk->crycbd = (uint32_t)(uintptr_t)vm->crycb; } +/** + * sie_guest_alloc - Allocate memory for a guest and map it in virtual address + * space such that it is properly aligned. + * @guest_size the desired size of the guest in bytes. + */ +uint8_t *sie_guest_alloc(uint64_t guest_size) +{ + static unsigned long guest_counter = 1; + u8 *guest_phys, *guest_virt; + unsigned long i; + pgd_t *root; + + setup_vm(); + root = (pgd_t *)(stctg(1) & PAGE_MASK); + + /* + * Start of guest memory in host virtual space needs to be aligned to + * 2GB for some environments. It also can't be at 2GB since the memory + * allocator stores its page_states metadata there. + * Thus we use the next multiple of 4GB after the end of physical + * mapping. This also leaves space after end of physical memory so the + * page immediately after physical memory is guaranteed not to be + * present. + */ + guest_virt = (uint8_t *)ALIGN(get_ram_size() + guest_counter * 4UL * SZ_1G, SZ_2G); + guest_counter++; + + guest_phys = alloc_pages(get_order(guest_size) - 12); + /* + * Establish a new mapping of the guest memory so it can be 2GB aligned + * without actually requiring 2GB physical memory. + */ + for (i = 0; i < guest_size; i += PAGE_SIZE) { + install_page(root, __pa(guest_phys + i), guest_virt + i); + } + memset(guest_virt, 0, guest_size); + + return guest_virt; +} + /* Frees the memory that was gathered on initialization */ void sie_guest_destroy(struct vm *vm) { diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h index 147cb0f2a556..c1724cf2f67e 100644 --- a/lib/s390x/sie.h +++ b/lib/s390x/sie.h @@ -285,4 +285,6 @@ 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); +uint8_t *sie_guest_alloc(uint64_t guest_size); + #endif /* _S390X_SIE_H_ */ diff --git a/lib/s390x/snippet.h b/lib/s390x/snippet.h index 11ec54c379e9..910849aa186c 100644 --- a/lib/s390x/snippet.h +++ b/lib/s390x/snippet.h @@ -125,14 +125,11 @@ static inline void snippet_pv_init(struct vm *vm, const char *gbin, /* Allocates and sets up a snippet based guest */ static inline void snippet_setup_guest(struct vm *vm, bool is_pv) { - u8 *guest; - - /* Allocate 1MB as guest memory */ - guest = alloc_pages(8); - memset(guest, 0, HPAGE_SIZE); + const unsigned long guest_size = SZ_1M; + uint8_t *guest_start = sie_guest_alloc(guest_size); /* Initialize the vm struct and allocate control blocks */ - sie_guest_create(vm, (uint64_t)guest, HPAGE_SIZE); + sie_guest_create(vm, (uint64_t)guest_start, guest_size); if (is_pv) { /* FMT4 needs a ESCA */ diff --git a/s390x/sie.c b/s390x/sie.c index cd3cea10d100..ce5b6069bf0b 100644 --- a/s390x/sie.c +++ b/s390x/sie.c @@ -89,8 +89,8 @@ static void setup_guest(void) { setup_vm(); - /* Allocate 1MB as guest memory */ - guest = alloc_pages(8); + guest = sie_guest_alloc(SZ_1M); + /* The first two pages are the lowcore */ guest_instr = guest + PAGE_SIZE * 2; From patchwork Mon Nov 6 17:08:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nico Boehr X-Patchwork-Id: 13447196 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E04C29CEC for ; Mon, 6 Nov 2023 17:08:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="LKLSM3HX" Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3CE4D69; Mon, 6 Nov 2023 09:08:55 -0800 (PST) Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3A6H7PhC019098; Mon, 6 Nov 2023 17:08:55 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=Sa1TzCCdrWoaPYUfKYlrmmmq1cZIX1x4l/fdVnFG/bc=; b=LKLSM3HXrCqo3v6W2IT6r6xkF1rOAnaSyp2MsV1XT0bkthoLIGbe/YzrNap9u7fQXXt/ mUnYKPzMEwra7xhuH37zILXDquGn/A8imYAG7OCsxTeqEYUC0TUkt0ijUi58+yIMcND0 VSU7C4jQN51yy7qfhIVreTyMi3yc4jQYVX5KUHw5JBc8qGd5KEqYRRneOHrHCg+REAaF hPoydTFHw5bhuiQHHGeCNMcc/D59EaUlyA3Q4LVMUmX108ui2RQDh4BqfmdDiru7GG8U 9xQmXsAPdBBaSVtiUszElbXKc6ODwHgWBnbaCM5aUcSeLblRpSTDLj8OdKX6D8YZYLIT UA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3u748vr1wp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:08:55 +0000 Received: from m0356517.ppops.net (m0356517.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3A6H8ssu024597; Mon, 6 Nov 2023 17:08:54 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3u748vr1vx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:08:54 +0000 Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3A6FcKMR012842; Mon, 6 Nov 2023 17:08:54 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 3u609sk37h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Nov 2023 17:08:53 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3A6H8pYP17564184 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 6 Nov 2023 17:08:51 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3838E20040; Mon, 6 Nov 2023 17:08:51 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1074F2004B; Mon, 6 Nov 2023 17:08:51 +0000 (GMT) Received: from t35lp63.lnxne.boe (unknown [9.152.108.100]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 6 Nov 2023 17:08:51 +0000 (GMT) From: Nico Boehr To: frankja@linux.ibm.com, imbrenda@linux.ibm.com, thuth@redhat.com Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v2 3/3] s390x: mvpg-sie: fix virtual-physical address confusion Date: Mon, 6 Nov 2023 18:08:02 +0100 Message-ID: <20231106170849.1184162-4-nrb@linux.ibm.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231106170849.1184162-1-nrb@linux.ibm.com> References: <20231106170849.1184162-1-nrb@linux.ibm.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 5W2aR5FvNiCK6InVPtC31mT8p46xCy08 X-Proofpoint-ORIG-GUID: O7nAhcxdf4Y20i5ll3bFgxireS31Qoga X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-06_12,2023-11-02_03,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 lowpriorityscore=0 adultscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 impostorscore=0 priorityscore=1501 mlxlogscore=999 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310240000 definitions=main-2311060139 The addresses reported for the partial execution of mvpg instruction are physical addresses. Now that MSO is a virtual address, we can't simply compare the PEI fields in the sie block with MSO, but need to do an additional translation step. Add the necessary virtual-physical translations and expose the virt_to_pte_phys() function in mmu.h which is useful for this kind of translation. Signed-off-by: Nico Boehr --- lib/s390x/mmu.h | 2 ++ s390x/mvpg-sie.c | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/s390x/mmu.h b/lib/s390x/mmu.h index dadc2e600f9a..e9e837236603 100644 --- a/lib/s390x/mmu.h +++ b/lib/s390x/mmu.h @@ -95,4 +95,6 @@ static inline void unprotect_page(void *vaddr, unsigned long prot) void *get_dat_entry(pgd_t *pgtable, void *vaddr, enum pgt_level level); +phys_addr_t virt_to_pte_phys(pgd_t *pgtable, void *vaddr); + #endif /* _ASMS390X_MMU_H_ */ diff --git a/s390x/mvpg-sie.c b/s390x/mvpg-sie.c index 99f4859bc2df..effb5eab2c0e 100644 --- a/s390x/mvpg-sie.c +++ b/s390x/mvpg-sie.c @@ -23,7 +23,9 @@ static struct vm vm; static uint8_t *src; +static phys_addr_t src_phys; static uint8_t *dst; +static phys_addr_t dst_phys; static uint8_t *cmp; static void test_mvpg_pei(void) @@ -38,8 +40,8 @@ static void test_mvpg_pei(void) protect_page(src, PAGE_ENTRY_I); sie(&vm); report(vm.sblk->icptcode == ICPT_PARTEXEC, "Partial execution"); - report((uintptr_t)**pei_src == (uintptr_t)src + PAGE_ENTRY_I, "PEI_SRC correct"); - report((uintptr_t)**pei_dst == (uintptr_t)dst, "PEI_DST correct"); + report((uintptr_t)**pei_src == (uintptr_t)src_phys + PAGE_ENTRY_I, "PEI_SRC correct"); + report((uintptr_t)**pei_dst == (uintptr_t)dst_phys, "PEI_DST correct"); unprotect_page(src, PAGE_ENTRY_I); report(!memcmp(cmp, dst, PAGE_SIZE), "Destination intact"); /* @@ -60,8 +62,8 @@ static void test_mvpg_pei(void) protect_page(dst, PAGE_ENTRY_I); sie(&vm); report(vm.sblk->icptcode == ICPT_PARTEXEC, "Partial execution"); - report((uintptr_t)**pei_src == (uintptr_t)src, "PEI_SRC correct"); - report((uintptr_t)**pei_dst == (uintptr_t)dst + PAGE_ENTRY_I, "PEI_DST correct"); + report((uintptr_t)**pei_src == (uintptr_t)src_phys, "PEI_SRC correct"); + report((uintptr_t)**pei_dst == (uintptr_t)dst_phys + PAGE_ENTRY_I, "PEI_DST correct"); /* Needed for the memcmp and general cleanup */ unprotect_page(dst, PAGE_ENTRY_I); report(!memcmp(cmp, dst, PAGE_SIZE), "Destination intact"); @@ -82,8 +84,10 @@ static void setup_guest(void) { extern const char SNIPPET_NAME_START(c, mvpg_snippet)[]; extern const char SNIPPET_NAME_END(c, mvpg_snippet)[]; + pgd_t *root; setup_vm(); + root = (pgd_t *)(stctg(1) & PAGE_MASK); snippet_setup_guest(&vm, false); snippet_init(&vm, SNIPPET_NAME_START(c, mvpg_snippet), @@ -94,6 +98,9 @@ static void setup_guest(void) src = (uint8_t *) vm.sblk->mso + PAGE_SIZE * 6; dst = (uint8_t *) vm.sblk->mso + PAGE_SIZE * 5; + src_phys = virt_to_pte_phys(root, src); + dst_phys = virt_to_pte_phys(root, dst); + cmp = alloc_page(); memset(cmp, 0, PAGE_SIZE); }