From patchwork Tue Jan 12 13:20:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12013473 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 97939C433E6 for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4A67D22D58 for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732775AbhALNV5 (ORCPT ); Tue, 12 Jan 2021 08:21:57 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:57126 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729886AbhALNV4 (ORCPT ); Tue, 12 Jan 2021 08:21:56 -0500 Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CDD7ws134359; Tue, 12 Jan 2021 08:21:16 -0500 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=2LJYac0SJdUeudi8lVHchq42sr3/3XaeFkP2reo3xbA=; b=XO7kxwQ3jmStR2sU3a3PshyDeM6APBMTGs5ES7x+oJ+7ft6gJTQGaYTNTg+7A7BgEssM oIrDohtaB6+BshmwxN/AlSy37OLshiV6QMKLZX/1MltH+nC2owdxyyYqsvAVOaRH4FOW dJq0Vdjy52tJWWam5C62U/I1BV45h+wnYelU2+sDrnx7ZBYFpEzp7yyXcc/sBCS0vVrY yk5jpl1aON4ZwFsSHoBnolGTgGSh+JBlfQPvJz6RDfNeR0tk8mt1ebhEJV9oZ2e2rO1B xSEs++MahlHflvzMFt9CJv8ZfP6yHwZzsRq25iCnZ/6Kgc/FcMaeQj9ejorHo0F60LLL YQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361cey08m6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:16 -0500 Received: from m0098393.ppops.net (m0098393.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CDEtF5142227; Tue, 12 Jan 2021 08:21:15 -0500 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 361cey08k7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:15 -0500 Received: from pps.filterd (ppma06fra.de.ibm.com [127.0.0.1]) by ppma06fra.de.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDGirl000649; Tue, 12 Jan 2021 13:21:13 GMT Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by ppma06fra.de.ibm.com with ESMTP id 35y3rh9vuj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:13 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDLA9745154640 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:10 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 36AD54C04A; Tue, 12 Jan 2021 13:21:10 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6EBBE4C04E; Tue, 12 Jan 2021 13:21:09 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:09 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 1/9] s390x: Add test_bit to library Date: Tue, 12 Jan 2021 08:20:46 -0500 Message-Id: <20210112132054.49756-2-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 phishscore=0 impostorscore=0 adultscore=0 priorityscore=1501 mlxscore=0 malwarescore=0 clxscore=1015 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120071 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Query/feature bits are commonly tested via MSB bit numbers on s390. Let's add test bit functions, so we don't need to copy code to test query bits. The test_bit code has been taken from the kernel since most s390x KVM unit test developers are used to them. Signed-off-by: Janosch Frank Reviewed-by: Cornelia Huck Reviewed-by: Thomas Huth Reviewed-by: Claudio Imbrenda --- lib/s390x/asm/bitops.h | 26 ++++++++++++++++++++++++++ lib/s390x/asm/facility.h | 3 ++- s390x/uv-guest.c | 6 +++--- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/lib/s390x/asm/bitops.h b/lib/s390x/asm/bitops.h index e7cdda9..792881e 100644 --- a/lib/s390x/asm/bitops.h +++ b/lib/s390x/asm/bitops.h @@ -1,3 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Bitops taken from the kernel as most developers are already used + * to them. + * + * Copyright IBM Corp. 1999,2013 + * + * Author(s): Martin Schwidefsky , + * + */ #ifndef _ASMS390X_BITOPS_H_ #define _ASMS390X_BITOPS_H_ @@ -7,4 +17,20 @@ #define BITS_PER_LONG 64 +static inline bool test_bit(unsigned long nr, + const volatile unsigned long *ptr) +{ + const volatile unsigned char *addr; + + addr = ((const volatile unsigned char *)ptr); + addr += (nr ^ (BITS_PER_LONG - 8)) >> 3; + return (*addr >> (nr & 7)) & 1; +} + +static inline bool test_bit_inv(unsigned long nr, + const volatile unsigned long *ptr) +{ + return test_bit(nr ^ (BITS_PER_LONG - 1), ptr); +} + #endif diff --git a/lib/s390x/asm/facility.h b/lib/s390x/asm/facility.h index 7828cf8..95d4a15 100644 --- a/lib/s390x/asm/facility.h +++ b/lib/s390x/asm/facility.h @@ -11,13 +11,14 @@ #include #include #include +#include #define NB_STFL_DOUBLEWORDS 32 extern uint64_t stfl_doublewords[]; static inline bool test_facility(int nr) { - return stfl_doublewords[nr / 64] & (0x8000000000000000UL >> (nr % 64)); + return test_bit_inv(nr, stfl_doublewords); } static inline void stfl(void) diff --git a/s390x/uv-guest.c b/s390x/uv-guest.c index bc947ab..e51b85e 100644 --- a/s390x/uv-guest.c +++ b/s390x/uv-guest.c @@ -75,11 +75,11 @@ static void test_query(void) * Ultravisor version and are expected to always be available * because they are basic building blocks. */ - report(uvcb.inst_calls_list[0] & (1UL << (63 - BIT_UVC_CMD_QUI)), + report(test_bit_inv(BIT_UVC_CMD_QUI, &uvcb.inst_calls_list[0]), "query indicated"); - report(uvcb.inst_calls_list[0] & (1UL << (63 - BIT_UVC_CMD_SET_SHARED_ACCESS)), + report(test_bit_inv(BIT_UVC_CMD_SET_SHARED_ACCESS, &uvcb.inst_calls_list[0]), "share indicated"); - report(uvcb.inst_calls_list[0] & (1UL << (63 - BIT_UVC_CMD_REMOVE_SHARED_ACCESS)), + report(test_bit_inv(BIT_UVC_CMD_REMOVE_SHARED_ACCESS, &uvcb.inst_calls_list[0]), "unshare indicated"); report_prefix_pop(); } From patchwork Tue Jan 12 13:20:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12013479 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8934C433DB for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 729E322E03 for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732884AbhALNV6 (ORCPT ); Tue, 12 Jan 2021 08:21:58 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:61838 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729303AbhALNV5 (ORCPT ); Tue, 12 Jan 2021 08:21:57 -0500 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CD47a4041718; Tue, 12 Jan 2021 08:21:16 -0500 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=xjPHb99+v4kpLUPmD56iw4IatI498gPaEZA7zh4MTmw=; b=DERbYKmIuNToFSmzyh11AmuJddonJK6AgIv1FMXN4I40sHEsOiDVmS2cXR1GuDMU6R2B a8kZh8YtrZEg/ZVlKYu3KFh0phD6/zR89D7pF+6K0K/L7UE5rstG5txNjFOe1jS5bqwS xR/eKqBFlA6mwdMBqIgEPWpcvOuqlJYQAx32zo0sZq723muLNVHrUcfjrCI8DBfdNwDT XVrbXorBB2MPoQGJ4/FIVPCWEnPs9ApRtX3u4I0YB45YH1B61Vi1LAOh/io86+DmSwUy CiMgSQ5POAqavBSZtn/4zlphedSqeNwWXhsGVfAHXD56PQbW5uFka6bnYmxH5XGvbw5R Cw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361b8htt4g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:16 -0500 Received: from m0098396.ppops.net (m0098396.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CD4PiZ043003; Tue, 12 Jan 2021 08:21:16 -0500 Received: from ppma06ams.nl.ibm.com (66.31.33a9.ip4.static.sl-reverse.com [169.51.49.102]) by mx0a-001b2d01.pphosted.com with ESMTP id 361b8htt3d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:16 -0500 Received: from pps.filterd (ppma06ams.nl.ibm.com [127.0.0.1]) by ppma06ams.nl.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDI946024084; Tue, 12 Jan 2021 13:21:14 GMT Received: from b06cxnps4076.portsmouth.uk.ibm.com (d06relay13.portsmouth.uk.ibm.com [9.149.109.198]) by ppma06ams.nl.ibm.com with ESMTP id 35ydrdb8vv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:13 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDLBET41157112 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:11 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 256544C058; Tue, 12 Jan 2021 13:21:11 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5E4144C046; Tue, 12 Jan 2021 13:21:10 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:10 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 2/9] s390x: Consolidate sclp read info Date: Tue, 12 Jan 2021 08:20:47 -0500 Message-Id: <20210112132054.49756-3-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 mlxscore=0 phishscore=0 adultscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 spamscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120073 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Let's only read the information once and pass a pointer to it instead of calling sclp multiple times. Signed-off-by: Janosch Frank Reviewed-by: Cornelia Huck Acked-by: Thomas Huth Reviewed-by: Claudio Imbrenda --- lib/s390x/io.c | 1 + lib/s390x/sclp.c | 31 +++++++++++++++++++++++++------ lib/s390x/sclp.h | 3 +++ lib/s390x/smp.c | 27 +++++++++++---------------- 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/lib/s390x/io.c b/lib/s390x/io.c index 1ff0589..6a1da63 100644 --- a/lib/s390x/io.c +++ b/lib/s390x/io.c @@ -34,6 +34,7 @@ void setup(void) { setup_args_progname(ipl_args); setup_facilities(); + sclp_read_info(); sclp_console_setup(); sclp_memory_setup(); smp_setup(); diff --git a/lib/s390x/sclp.c b/lib/s390x/sclp.c index 08a4813..12916f5 100644 --- a/lib/s390x/sclp.c +++ b/lib/s390x/sclp.c @@ -23,6 +23,8 @@ extern unsigned long stacktop; static uint64_t storage_increment_size; static uint64_t max_ram_size; static uint64_t ram_size; +char _read_info[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE))); +static ReadInfo *read_info; char _sccb[PAGE_SIZE] __attribute__((__aligned__(4096))); static volatile bool sclp_busy; @@ -108,6 +110,24 @@ static void sclp_read_scp_info(ReadInfo *ri, int length) report_abort("READ_SCP_INFO failed"); } +void sclp_read_info(void) +{ + sclp_read_scp_info((void *)_read_info, SCCB_SIZE); + read_info = (ReadInfo *)_read_info; +} + +int sclp_get_cpu_num(void) +{ + assert(read_info); + return read_info->entries_cpu; +} + +CPUEntry *sclp_get_cpu_entries(void) +{ + assert(read_info); + return (CPUEntry *)(_read_info + read_info->offset_cpu); +} + /* Perform service call. Return 0 on success, non-zero otherwise. */ int sclp_service_call(unsigned int command, void *sccb) { @@ -125,23 +145,22 @@ int sclp_service_call(unsigned int command, void *sccb) void sclp_memory_setup(void) { - ReadInfo *ri = (void *)_sccb; uint64_t rnmax, rnsize; int cc; - sclp_read_scp_info(ri, SCCB_SIZE); + assert(read_info); /* calculate the storage increment size */ - rnsize = ri->rnsize; + rnsize = read_info->rnsize; if (!rnsize) { - rnsize = ri->rnsize2; + rnsize = read_info->rnsize2; } storage_increment_size = rnsize << 20; /* calculate the maximum memory size */ - rnmax = ri->rnmax; + rnmax = read_info->rnmax; if (!rnmax) { - rnmax = ri->rnmax2; + rnmax = read_info->rnmax2; } max_ram_size = rnmax * storage_increment_size; diff --git a/lib/s390x/sclp.h b/lib/s390x/sclp.h index 9a6aad0..acd86d5 100644 --- a/lib/s390x/sclp.h +++ b/lib/s390x/sclp.h @@ -268,6 +268,9 @@ void sclp_wait_busy(void); void sclp_mark_busy(void); void sclp_console_setup(void); void sclp_print(const char *str); +void sclp_read_info(void); +int sclp_get_cpu_num(void); +CPUEntry *sclp_get_cpu_entries(void); int sclp_service_call(unsigned int command, void *sccb); void sclp_memory_setup(void); uint64_t get_ram_size(void); diff --git a/lib/s390x/smp.c b/lib/s390x/smp.c index c4f02dc..dfcfd28 100644 --- a/lib/s390x/smp.c +++ b/lib/s390x/smp.c @@ -23,7 +23,6 @@ #include "smp.h" #include "sclp.h" -static char cpu_info_buffer[PAGE_SIZE] __attribute__((__aligned__(4096))); static struct cpu *cpus; static struct cpu *cpu0; static struct spinlock lock; @@ -32,8 +31,7 @@ extern void smp_cpu_setup_state(void); int smp_query_num_cpus(void) { - struct ReadCpuInfo *info = (void *)cpu_info_buffer; - return info->nr_configured; + return sclp_get_cpu_num(); } struct cpu *smp_cpu_from_addr(uint16_t addr) @@ -226,10 +224,10 @@ void smp_teardown(void) { int i = 0; uint16_t this_cpu = stap(); - struct ReadCpuInfo *info = (void *)cpu_info_buffer; + int num = smp_query_num_cpus(); spin_lock(&lock); - for (; i < info->nr_configured; i++) { + for (; i < num; i++) { if (cpus[i].active && cpus[i].addr != this_cpu) { sigp_retry(cpus[i].addr, SIGP_STOP, 0, NULL); @@ -243,22 +241,19 @@ extern uint64_t *stackptr; void smp_setup(void) { int i = 0; + int num = smp_query_num_cpus(); unsigned short cpu0_addr = stap(); - struct ReadCpuInfo *info = (void *)cpu_info_buffer; + struct CPUEntry *entry = sclp_get_cpu_entries(); spin_lock(&lock); - sclp_mark_busy(); - info->h.length = PAGE_SIZE; - sclp_service_call(SCLP_READ_CPU_INFO, cpu_info_buffer); + if (num > 1) + printf("SMP: Initializing, found %d cpus\n", num); - if (smp_query_num_cpus() > 1) - printf("SMP: Initializing, found %d cpus\n", info->nr_configured); - - cpus = calloc(info->nr_configured, sizeof(cpus)); - for (i = 0; i < info->nr_configured; i++) { - cpus[i].addr = info->entries[i].address; + cpus = calloc(num, sizeof(cpus)); + for (i = 0; i < num; i++) { + cpus[i].addr = entry[i].address; cpus[i].active = false; - if (info->entries[i].address == cpu0_addr) { + if (entry[i].address == cpu0_addr) { cpu0 = &cpus[i]; cpu0->stack = stackptr; cpu0->lowcore = (void *)0; From patchwork Tue Jan 12 13:20:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janosch Frank X-Patchwork-Id: 12013475 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9C91C433E9 for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9D8A722571 for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732943AbhALNV7 (ORCPT ); Tue, 12 Jan 2021 08:21:59 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:52974 "EHLO mx0b-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729886AbhALNV7 (ORCPT ); Tue, 12 Jan 2021 08:21:59 -0500 Received: from pps.filterd (m0127361.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CDCfWO147430; Tue, 12 Jan 2021 08:21:18 -0500 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=3nfVSqIDucRs07ASsbfEZd5kfYYlRSSzmSpwSHWiEmU=; b=S0phzV8hBMyf1h5ExrboNqH8lH8XHxAvkiZJ1dqS4kLk6JFt0lpfJ90bbx889R8u+qhn tJNf8aW1vqwuLOi/sHndFnR81jyc53NuTWGCmsOWNq7lN8+cJIFiBZaKrJfbk1bszBPl mV2PJBPc2XO41j8SCPRjXMFblq5lfW0OJJ3DKH9UcPYOsqpd48na+BH2HsC6gzFXBQb2 U+T58gooIwe/N+6T4URhFFHOe1OozkeSOjeCk+0DyGllaELHEJm957rCELhrdFKuJYJG FLSmvGzV4EqBNg1l7pi2MLK2CPG5JQ1+v41rD7GwlRIyoGt9OWE6YCdRahIzXAOXGSDX iA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361cf1084y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:17 -0500 Received: from m0127361.ppops.net (m0127361.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CDCkGF147500; Tue, 12 Jan 2021 08:21:17 -0500 Received: from ppma03ams.nl.ibm.com (62.31.33a9.ip4.static.sl-reverse.com [169.51.49.98]) by mx0a-001b2d01.pphosted.com with ESMTP id 361cf1083y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:17 -0500 Received: from pps.filterd (ppma03ams.nl.ibm.com [127.0.0.1]) by ppma03ams.nl.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDH7bm015900; Tue, 12 Jan 2021 13:21:15 GMT Received: from b06avi18878370.portsmouth.uk.ibm.com (b06avi18878370.portsmouth.uk.ibm.com [9.149.26.194]) by ppma03ams.nl.ibm.com with ESMTP id 35y447unt2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:15 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06avi18878370.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDL7M629884820 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:07 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1421C4C04E; Tue, 12 Jan 2021 13:21:12 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4CCB54C059; Tue, 12 Jan 2021 13:21:11 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:11 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 3/9] s390x: SCLP feature checking Date: Tue, 12 Jan 2021 08:20:48 -0500 Message-Id: <20210112132054.49756-4-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 clxscore=1015 adultscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120071 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Availability of SIE is announced via a feature bit in a SCLP info CPU entry. Let's add a framework that allows us to easily check for such facilities. Signed-off-by: Janosch Frank Reviewed-by: Thomas Huth Reviewed-by: Cornelia Huck Reviewed-by: Claudio Imbrenda --- lib/s390x/io.c | 1 + lib/s390x/sclp.c | 25 +++++++++++++++++++++++++ lib/s390x/sclp.h | 13 ++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/lib/s390x/io.c b/lib/s390x/io.c index 6a1da63..ef9f59e 100644 --- a/lib/s390x/io.c +++ b/lib/s390x/io.c @@ -35,6 +35,7 @@ void setup(void) setup_args_progname(ipl_args); setup_facilities(); sclp_read_info(); + sclp_facilities_setup(); sclp_console_setup(); sclp_memory_setup(); smp_setup(); diff --git a/lib/s390x/sclp.c b/lib/s390x/sclp.c index 12916f5..06819a6 100644 --- a/lib/s390x/sclp.c +++ b/lib/s390x/sclp.c @@ -25,6 +25,7 @@ static uint64_t max_ram_size; static uint64_t ram_size; char _read_info[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE))); static ReadInfo *read_info; +struct sclp_facilities sclp_facilities; char _sccb[PAGE_SIZE] __attribute__((__aligned__(4096))); static volatile bool sclp_busy; @@ -128,6 +129,30 @@ CPUEntry *sclp_get_cpu_entries(void) return (CPUEntry *)(_read_info + read_info->offset_cpu); } +void sclp_facilities_setup(void) +{ + unsigned short cpu0_addr = stap(); + CPUEntry *cpu; + int i; + + assert(read_info); + + cpu = sclp_get_cpu_entries(); + for (i = 0; i < read_info->entries_cpu; i++, cpu++) { + /* + * The logic for only reading the facilities from the + * boot cpu comes from the kernel. I haven't yet found + * documentation that explains why this is necessary + * but I figure there's a reason behind doing it this + * way. + */ + if (cpu->address == cpu0_addr) { + sclp_facilities.has_sief2 = cpu->feat_sief2; + break; + } + } +} + /* Perform service call. Return 0 on success, non-zero otherwise. */ int sclp_service_call(unsigned int command, void *sccb) { diff --git a/lib/s390x/sclp.h b/lib/s390x/sclp.h index acd86d5..6c86037 100644 --- a/lib/s390x/sclp.h +++ b/lib/s390x/sclp.h @@ -92,12 +92,22 @@ typedef struct SCCBHeader { typedef struct CPUEntry { uint8_t address; uint8_t reserved0; - uint8_t features[SCCB_CPU_FEATURE_LEN]; + uint8_t : 4; + uint8_t feat_sief2 : 1; + uint8_t : 3; + uint8_t features_res2 [SCCB_CPU_FEATURE_LEN - 1]; uint8_t reserved2[6]; uint8_t type; uint8_t reserved1; } __attribute__((packed)) CPUEntry; +extern struct sclp_facilities sclp_facilities; + +struct sclp_facilities { + uint64_t has_sief2 : 1; + uint64_t : 63; +}; + typedef struct ReadInfo { SCCBHeader h; uint16_t rnmax; @@ -271,6 +281,7 @@ void sclp_print(const char *str); void sclp_read_info(void); int sclp_get_cpu_num(void); CPUEntry *sclp_get_cpu_entries(void); +void sclp_facilities_setup(void); int sclp_service_call(unsigned int command, void *sccb); void sclp_memory_setup(void); uint64_t get_ram_size(void); From patchwork Tue Jan 12 13:20: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: 12013477 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA7B5C43381 for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BC02D22CAF for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732994AbhALNWA (ORCPT ); Tue, 12 Jan 2021 08:22:00 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:58594 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726970AbhALNV7 (ORCPT ); Tue, 12 Jan 2021 08:21:59 -0500 Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CDDBgp134454; Tue, 12 Jan 2021 08:21:19 -0500 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=kb3RxL14zkqTl2ty5OLmSTF/wnQ3HNAg/GbY+IUoiN0=; b=NY5UCIvqemegjz41y5h2ioRXnIlET8S7xza0yVBUNd0ues1kKpV5uGddcjX4AYD2LAPs kvR2STfNAlov8zgaeuc/lVi3UP9Srb415vSon9JD0GZ0E+Lq8vdgvw7RSRlA87sW06Fn OvRa8pQJMYHjQuVo+3Cho555S4aa69tED5YY8Bp13w0XFKeFzxxxKttIM3EBoFeo/yAE ilO9VO0THHDVWU2ZwRs5hsNelFjeeczzPfz4SX1wioFSU4cJ5pxW32WcbsBrWftQt981 HNjj3/ESvywc/+9XpuuqNBDgqg0ej/IxzRM3hsmYEudLPQ7ZmBCFN3jTN8VVmqiCsQXU Wg== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361cey08nj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:19 -0500 Received: from m0098393.ppops.net (m0098393.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CDDAX3134406; Tue, 12 Jan 2021 08:21:18 -0500 Received: from ppma04fra.de.ibm.com (6a.4a.5195.ip4.static.sl-reverse.com [149.81.74.106]) by mx0a-001b2d01.pphosted.com with ESMTP id 361cey08mk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:18 -0500 Received: from pps.filterd (ppma04fra.de.ibm.com [127.0.0.1]) by ppma04fra.de.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDH1wu021733; Tue, 12 Jan 2021 13:21:16 GMT Received: from b06avi18626390.portsmouth.uk.ibm.com (b06avi18626390.portsmouth.uk.ibm.com [9.149.26.192]) by ppma04fra.de.ibm.com with ESMTP id 3604h9964y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:15 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06avi18626390.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDL8i030802252 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:08 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F17394C052; Tue, 12 Jan 2021 13:21:12 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3CB0A4C040; Tue, 12 Jan 2021 13:21:12 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:12 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 4/9] s390x: Split assembly into multiple files Date: Tue, 12 Jan 2021 08:20:49 -0500 Message-Id: <20210112132054.49756-5-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 phishscore=0 impostorscore=0 adultscore=0 priorityscore=1501 mlxscore=0 malwarescore=0 clxscore=1015 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120071 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org I've added too much to cstart64.S which is not start related already. Now that I want to add even more code it's time to split cstart64.S. lib.S has functions that are used in tests. macros.S contains macros which are used in cstart64.S and lib.S Signed-off-by: Janosch Frank Acked-by: Claudio Imbrenda Acked-by: Cornelia Huck Acked-by: Thomas Huth --- s390x/Makefile | 6 +-- s390x/cstart64.S | 119 ++--------------------------------------------- s390x/lib.S | 65 ++++++++++++++++++++++++++ s390x/macros.S | 77 ++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+), 118 deletions(-) create mode 100644 s390x/lib.S create mode 100644 s390x/macros.S diff --git a/s390x/Makefile b/s390x/Makefile index b079a26..e0bccc8 100644 --- a/s390x/Makefile +++ b/s390x/Makefile @@ -66,10 +66,10 @@ cflatobjs += lib/s390x/css_lib.o OBJDIRS += lib/s390x -cstart.o = $(TEST_DIR)/cstart64.o +asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/lib.o FLATLIBS = $(libcflat) -%.elf: %.o $(FLATLIBS) $(SRCDIR)/s390x/flat.lds $(cstart.o) +%.elf: %.o $(FLATLIBS) $(SRCDIR)/s390x/flat.lds $(asmlib) $(CC) $(CFLAGS) -c -o $(@:.elf=.aux.o) \ $(SRCDIR)/lib/auxinfo.c -DPROGNAME=\"$@\" $(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/flat.lds \ @@ -90,4 +90,4 @@ arch_clean: asm_offsets_clean $(RM) $(TEST_DIR)/*.{o,elf,bin} $(TEST_DIR)/.*.d lib/s390x/.*.d generated-files = $(asm-offsets) -$(tests:.elf=.o) $(cstart.o) $(cflatobjs): $(generated-files) +$(tests:.elf=.o) $(asmlib) $(cflatobjs): $(generated-files) diff --git a/s390x/cstart64.S b/s390x/cstart64.S index cc86fc7..ace0c0d 100644 --- a/s390x/cstart64.S +++ b/s390x/cstart64.S @@ -3,14 +3,17 @@ * s390x startup code * * Copyright (c) 2017 Red Hat Inc + * Copyright (c) 2019 IBM Corp. * * Authors: * Thomas Huth * David Hildenbrand + * Janosch Frank */ #include #include +#include "macros.S" .section .init /* @@ -87,120 +90,7 @@ clear_bss_remainder: memsetxc: xc 0(1,%r1),0(%r1) - .macro SAVE_REGS - /* save grs 0-15 */ - stmg %r0, %r15, GEN_LC_SW_INT_GRS - /* save crs 0-15 */ - stctg %c0, %c15, GEN_LC_SW_INT_CRS - /* load a cr0 that has the AFP control bit which enables all FPRs */ - larl %r1, initial_cr0 - lctlg %c0, %c0, 0(%r1) - /* save fprs 0-15 + fpc */ - la %r1, GEN_LC_SW_INT_FPRS - .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - std \i, \i * 8(%r1) - .endr - stfpc GEN_LC_SW_INT_FPC - .endm - - .macro RESTORE_REGS - /* restore fprs 0-15 + fpc */ - la %r1, GEN_LC_SW_INT_FPRS - .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - ld \i, \i * 8(%r1) - .endr - lfpc GEN_LC_SW_INT_FPC - /* restore crs 0-15 */ - lctlg %c0, %c15, GEN_LC_SW_INT_CRS - /* restore grs 0-15 */ - lmg %r0, %r15, GEN_LC_SW_INT_GRS - .endm - -/* Save registers on the stack (r15), so we can have stacked interrupts. */ - .macro SAVE_REGS_STACK - /* Allocate a stack frame for 15 general registers */ - slgfi %r15, 15 * 8 - /* Store registers r0 to r14 on the stack */ - stmg %r0, %r14, 0(%r15) - /* Allocate a stack frame for 16 floating point registers */ - /* The size of a FP register is the size of an double word */ - slgfi %r15, 16 * 8 - /* Save fp register on stack: offset to SP is multiple of reg number */ - .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - std \i, \i * 8(%r15) - .endr - /* Save fpc, but keep stack aligned on 64bits */ - slgfi %r15, 8 - efpc %r0 - stg %r0, 0(%r15) - .endm - -/* Restore the register in reverse order */ - .macro RESTORE_REGS_STACK - /* Restore fpc */ - lfpc 0(%r15) - algfi %r15, 8 - /* Restore fp register from stack: SP still where it was left */ - /* and offset to SP is a multiple of reg number */ - .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - ld \i, \i * 8(%r15) - .endr - /* Now that we're done, rewind the stack pointer by 16 double word */ - algfi %r15, 16 * 8 - /* Load the registers from stack */ - lmg %r0, %r14, 0(%r15) - /* Rewind the stack by 15 double word */ - algfi %r15, 15 * 8 - .endm - .section .text -/* - * load_reset calling convention: - * %r2 subcode (0 or 1) - */ -.globl diag308_load_reset -diag308_load_reset: - SAVE_REGS - /* Backup current PSW mask, as we have to restore it on success */ - epsw %r0, %r1 - st %r0, GEN_LC_SW_INT_PSW - st %r1, GEN_LC_SW_INT_PSW + 4 - /* Load reset psw mask (short psw, 64 bit) */ - lg %r0, reset_psw - /* Load the success label address */ - larl %r1, 0f - /* Or it to the mask */ - ogr %r0, %r1 - /* Store it at the reset PSW location (real 0x0) */ - stg %r0, 0 - /* Do the reset */ - diag %r0,%r2,0x308 - /* Failure path */ - xgr %r2, %r2 - br %r14 - /* Success path */ - /* load a cr0 that has the AFP control bit which enables all FPRs */ -0: larl %r1, initial_cr0 - lctlg %c0, %c0, 0(%r1) - RESTORE_REGS - lhi %r2, 1 - larl %r0, 1f - stg %r0, GEN_LC_SW_INT_PSW + 8 - lpswe GEN_LC_SW_INT_PSW -1: br %r14 - -.globl smp_cpu_setup_state -smp_cpu_setup_state: - xgr %r1, %r1 - lmg %r0, %r15, GEN_LC_SW_INT_GRS - lctlg %c0, %c0, GEN_LC_SW_INT_CRS - /* We should only go once through cpu setup and not for every restart */ - stg %r14, GEN_LC_RESTART_NEW_PSW + 8 - larl %r14, 0f - lpswe GEN_LC_SW_INT_PSW - /* If the function returns, just loop here */ -0: j 0 - pgm_int: SAVE_REGS brasl %r14, handle_pgm_int @@ -232,8 +122,6 @@ svc_int: lpswe GEN_LC_SVC_OLD_PSW .align 8 -reset_psw: - .quad 0x0008000180000000 initial_psw: .quad 0x0000000180000000, clear_bss_start pgm_int_psw: @@ -246,6 +134,7 @@ io_int_psw: .quad 0x0000000180000000, io_int svc_int_psw: .quad 0x0000000180000000, svc_int +.globl initial_cr0 initial_cr0: /* enable AFP-register control, so FP regs (+BFP instr) can be used */ .quad 0x0000000000040000 diff --git a/s390x/lib.S b/s390x/lib.S new file mode 100644 index 0000000..4d78ec6 --- /dev/null +++ b/s390x/lib.S @@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * s390x assembly library + * + * Copyright (c) 2019 IBM Corp. + * + * Authors: + * Janosch Frank + */ +#include +#include + +#include "macros.S" + +/* + * load_reset calling convention: + * %r2 subcode (0 or 1) + */ +.globl diag308_load_reset +diag308_load_reset: + SAVE_REGS + /* Backup current PSW mask, as we have to restore it on success */ + epsw %r0, %r1 + st %r0, GEN_LC_SW_INT_PSW + st %r1, GEN_LC_SW_INT_PSW + 4 + /* Load reset psw mask (short psw, 64 bit) */ + lg %r0, reset_psw + /* Load the success label address */ + larl %r1, 0f + /* Or it to the mask */ + ogr %r0, %r1 + /* Store it at the reset PSW location (real 0x0) */ + stg %r0, 0 + /* Do the reset */ + diag %r0,%r2,0x308 + /* Failure path */ + xgr %r2, %r2 + br %r14 + /* Success path */ + /* load a cr0 that has the AFP control bit which enables all FPRs */ +0: larl %r1, initial_cr0 + lctlg %c0, %c0, 0(%r1) + RESTORE_REGS + lhi %r2, 1 + larl %r0, 1f + stg %r0, GEN_LC_SW_INT_PSW + 8 + lpswe GEN_LC_SW_INT_PSW +1: br %r14 + +/* Sets up general registers and cr0 when a new cpu is brought online. */ +.globl smp_cpu_setup_state +smp_cpu_setup_state: + xgr %r1, %r1 + lmg %r0, %r15, GEN_LC_SW_INT_GRS + lctlg %c0, %c0, GEN_LC_SW_INT_CRS + /* We should only go once through cpu setup and not for every restart */ + stg %r14, GEN_LC_RESTART_NEW_PSW + 8 + larl %r14, 0f + lpswe GEN_LC_SW_INT_PSW + /* If the function returns, just loop here */ +0: j 0 + + .align 8 +reset_psw: + .quad 0x0008000180000000 diff --git a/s390x/macros.S b/s390x/macros.S new file mode 100644 index 0000000..37a6a63 --- /dev/null +++ b/s390x/macros.S @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * s390x assembly macros + * + * Copyright (c) 2017 Red Hat Inc + * Copyright (c) 2020 IBM Corp. + * + * Authors: + * Pierre Morel + * David Hildenbrand + */ +#include + .macro SAVE_REGS + /* save grs 0-15 */ + stmg %r0, %r15, GEN_LC_SW_INT_GRS + /* save crs 0-15 */ + stctg %c0, %c15, GEN_LC_SW_INT_CRS + /* load a cr0 that has the AFP control bit which enables all FPRs */ + larl %r1, initial_cr0 + lctlg %c0, %c0, 0(%r1) + /* save fprs 0-15 + fpc */ + la %r1, GEN_LC_SW_INT_FPRS + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + std \i, \i * 8(%r1) + .endr + stfpc GEN_LC_SW_INT_FPC + .endm + + .macro RESTORE_REGS + /* restore fprs 0-15 + fpc */ + la %r1, GEN_LC_SW_INT_FPRS + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + ld \i, \i * 8(%r1) + .endr + lfpc GEN_LC_SW_INT_FPC + /* restore crs 0-15 */ + lctlg %c0, %c15, GEN_LC_SW_INT_CRS + /* restore grs 0-15 */ + lmg %r0, %r15, GEN_LC_SW_INT_GRS + .endm + +/* Save registers on the stack (r15), so we can have stacked interrupts. */ + .macro SAVE_REGS_STACK + /* Allocate a stack frame for 15 general registers */ + slgfi %r15, 15 * 8 + /* Store registers r0 to r14 on the stack */ + stmg %r0, %r14, 0(%r15) + /* Allocate a stack frame for 16 floating point registers */ + /* The size of a FP register is the size of an double word */ + slgfi %r15, 16 * 8 + /* Save fp register on stack: offset to SP is multiple of reg number */ + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + std \i, \i * 8(%r15) + .endr + /* Save fpc, but keep stack aligned on 64bits */ + slgfi %r15, 8 + efpc %r0 + stg %r0, 0(%r15) + .endm + +/* Restore the register in reverse order */ + .macro RESTORE_REGS_STACK + /* Restore fpc */ + lfpc 0(%r15) + algfi %r15, 8 + /* Restore fp register from stack: SP still where it was left */ + /* and offset to SP is a multiple of reg number */ + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + ld \i, \i * 8(%r15) + .endr + /* Now that we're done, rewind the stack pointer by 16 double word */ + algfi %r15, 16 * 8 + /* Load the registers from stack */ + lmg %r0, %r14, 0(%r15) + /* Rewind the stack by 15 double word */ + algfi %r15, 15 * 8 + .endm From patchwork Tue Jan 12 13:20: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: 12013483 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6DE96C4332E for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3CF5F22571 for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733308AbhALNWE (ORCPT ); Tue, 12 Jan 2021 08:22:04 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:57004 "EHLO mx0b-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732906AbhALNWB (ORCPT ); Tue, 12 Jan 2021 08:22:01 -0500 Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CD3142169071; Tue, 12 Jan 2021 08:21:19 -0500 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=iPwNAyOQT79M3/m1/8G6WEMwxFHJYOi1NDM5MmZ3NT4=; b=q08tx53Z5ZXt/POgJx5xc/nHQD4Mc3tEeNgJBTLJSXDt80r4nVyfENHhrR6kNDJgVrI4 6yJWkA1ZXuNFxx4L4j5U0hQVUKmV/oqP+sn60+yskfCmTinteHDZVb5vrKWv6FbrwEbL Osb8Qtom+YI6yWqaFEF4Eo+ErCBd5A/7voGI5NGlTbr6b2kV2FBNJPIxO8XzNXFdWlzQ jJOUAtxKSwhx/DGjafTrf2mrbSR84kjBs66p+Z7dnwBLPVsr/CgMSSiHurG6MEHyMPH6 K6lK1V1jmmvNnBIN0J8ekhJEWyMYKhCipXjUXBmu3dyB8zsT5+9JxwmVznW2P9BXdUmz 2A== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361c0y9b46-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:19 -0500 Received: from m0098421.ppops.net (m0098421.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CD3Wxu174541; Tue, 12 Jan 2021 08:21:18 -0500 Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com with ESMTP id 361c0y9b3m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:18 -0500 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDIMOd026439; Tue, 12 Jan 2021 13:21:17 GMT Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by ppma04ams.nl.ibm.com with ESMTP id 35y448bp1n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:16 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDLEMY43843892 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:14 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id EA3C34C040; Tue, 12 Jan 2021 13:21:13 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2E8984C04A; Tue, 12 Jan 2021 13:21:13 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:13 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 5/9] s390x: sie: Add SIE to lib Date: Tue, 12 Jan 2021 08:20:50 -0500 Message-Id: <20210112132054.49756-6-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 spamscore=0 suspectscore=0 clxscore=1015 phishscore=0 malwarescore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120071 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org This commit adds the definition of the SIE control block struct and the assembly to execute SIE and save/restore guest registers. Signed-off-by: Janosch Frank Acked-by: Thomas Huth Reviewed-by: Claudio Imbrenda --- lib/s390x/asm-offsets.c | 11 +++ lib/s390x/asm/arch_def.h | 9 ++ lib/s390x/interrupt.c | 7 ++ lib/s390x/sie.h | 197 +++++++++++++++++++++++++++++++++++++++ s390x/lib.S | 56 +++++++++++ 5 files changed, 280 insertions(+) create mode 100644 lib/s390x/sie.h diff --git a/lib/s390x/asm-offsets.c b/lib/s390x/asm-offsets.c index ee94ed3..a19f14b 100644 --- a/lib/s390x/asm-offsets.c +++ b/lib/s390x/asm-offsets.c @@ -8,6 +8,7 @@ #include #include #include +#include int main(void) { @@ -69,6 +70,16 @@ int main(void) OFFSET(GEN_LC_ARS_SA, lowcore, ars_sa); OFFSET(GEN_LC_CRS_SA, lowcore, crs_sa); OFFSET(GEN_LC_PGM_INT_TDB, lowcore, pgm_int_tdb); + OFFSET(__SF_SIE_CONTROL, stack_frame, empty1[0]); + OFFSET(__SF_SIE_SAVEAREA, stack_frame, empty1[1]); + OFFSET(__SF_SIE_REASON, stack_frame, empty1[2]); + OFFSET(__SF_SIE_FLAGS, stack_frame, empty1[3]); + OFFSET(SIE_SAVEAREA_HOST_GRS, vm_save_area, host.grs[0]); + OFFSET(SIE_SAVEAREA_HOST_FPRS, vm_save_area, host.fprs[0]); + OFFSET(SIE_SAVEAREA_HOST_FPC, vm_save_area, host.fpc); + OFFSET(SIE_SAVEAREA_GUEST_GRS, vm_save_area, guest.grs[0]); + OFFSET(SIE_SAVEAREA_GUEST_FPRS, vm_save_area, guest.fprs[0]); + OFFSET(SIE_SAVEAREA_GUEST_FPC, vm_save_area, guest.fpc); return 0; } diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h index f3ab830..243fc48 100644 --- a/lib/s390x/asm/arch_def.h +++ b/lib/s390x/asm/arch_def.h @@ -8,6 +8,15 @@ #ifndef _ASM_S390X_ARCH_DEF_H_ #define _ASM_S390X_ARCH_DEF_H_ +/* + * We currently on specify the stack frame members needed for the SIE + * library code. + */ +struct stack_frame { + unsigned long back_chain; + unsigned long empty1[5]; +}; + struct psw { uint64_t mask; uint64_t addr; diff --git a/lib/s390x/interrupt.c b/lib/s390x/interrupt.c index bac8862..1ce3607 100644 --- a/lib/s390x/interrupt.c +++ b/lib/s390x/interrupt.c @@ -11,6 +11,7 @@ #include #include #include +#include static bool pgm_int_expected; static bool ext_int_expected; @@ -57,6 +58,12 @@ void register_pgm_cleanup_func(void (*f)(void)) static void fixup_pgm_int(void) { + /* If we have an error on SIE we directly move to sie_exit */ + if (lc->pgm_old_psw.addr >= (uint64_t)&sie_entry && + lc->pgm_old_psw.addr <= (uint64_t)&sie_exit) { + lc->pgm_old_psw.addr = (uint64_t)&sie_exit; + } + switch (lc->pgm_int_code) { case PGM_INT_CODE_PRIVILEGED_OPERATION: /* Normal operation is in supervisor state, so this exception diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h new file mode 100644 index 0000000..66aa3b8 --- /dev/null +++ b/lib/s390x/sie.h @@ -0,0 +1,197 @@ +#ifndef SIE_H +#define SIE_H + +#define CPUSTAT_STOPPED 0x80000000 +#define CPUSTAT_WAIT 0x10000000 +#define CPUSTAT_ECALL_PEND 0x08000000 +#define CPUSTAT_STOP_INT 0x04000000 +#define CPUSTAT_IO_INT 0x02000000 +#define CPUSTAT_EXT_INT 0x01000000 +#define CPUSTAT_RUNNING 0x00800000 +#define CPUSTAT_RETAINED 0x00400000 +#define CPUSTAT_TIMING_SUB 0x00020000 +#define CPUSTAT_SIE_SUB 0x00010000 +#define CPUSTAT_RRF 0x00008000 +#define CPUSTAT_SLSV 0x00004000 +#define CPUSTAT_SLSR 0x00002000 +#define CPUSTAT_ZARCH 0x00000800 +#define CPUSTAT_MCDS 0x00000100 +#define CPUSTAT_KSS 0x00000200 +#define CPUSTAT_SM 0x00000080 +#define CPUSTAT_IBS 0x00000040 +#define CPUSTAT_GED2 0x00000010 +#define CPUSTAT_G 0x00000008 +#define CPUSTAT_GED 0x00000004 +#define CPUSTAT_J 0x00000002 +#define CPUSTAT_P 0x00000001 + +struct kvm_s390_sie_block { + uint32_t cpuflags; /* 0x0000 */ + uint32_t : 1; /* 0x0004 */ + uint32_t prefix : 18; + uint32_t : 1; + uint32_t ibc : 12; + uint8_t reserved08[4]; /* 0x0008 */ +#define PROG_IN_SIE (1<<0) + uint32_t prog0c; /* 0x000c */ + uint8_t reserved10[16]; /* 0x0010 */ +#define PROG_BLOCK_SIE (1<<0) +#define PROG_REQUEST (1<<1) + uint32_t prog20; /* 0x0020 */ + uint8_t reserved24[4]; /* 0x0024 */ + uint64_t cputm; /* 0x0028 */ + uint64_t ckc; /* 0x0030 */ + uint64_t epoch; /* 0x0038 */ + uint32_t svcc; /* 0x0040 */ +#define LCTL_CR0 0x8000 +#define LCTL_CR6 0x0200 +#define LCTL_CR9 0x0040 +#define LCTL_CR10 0x0020 +#define LCTL_CR11 0x0010 +#define LCTL_CR14 0x0002 + uint16_t lctl; /* 0x0044 */ + int16_t icpua; /* 0x0046 */ +#define ICTL_OPEREXC 0x80000000 +#define ICTL_PINT 0x20000000 +#define ICTL_LPSW 0x00400000 +#define ICTL_STCTL 0x00040000 +#define ICTL_ISKE 0x00004000 +#define ICTL_SSKE 0x00002000 +#define ICTL_RRBE 0x00001000 +#define ICTL_TPROT 0x00000200 + uint32_t ictl; /* 0x0048 */ +#define ECA_CEI 0x80000000 +#define ECA_IB 0x40000000 +#define ECA_SIGPI 0x10000000 +#define ECA_MVPGI 0x01000000 +#define ECA_AIV 0x00200000 +#define ECA_VX 0x00020000 +#define ECA_PROTEXCI 0x00002000 +#define ECA_APIE 0x00000008 +#define ECA_SII 0x00000001 + uint32_t eca; /* 0x004c */ +#define ICPT_INST 0x04 +#define ICPT_PROGI 0x08 +#define ICPT_INSTPROGI 0x0C +#define ICPT_EXTREQ 0x10 +#define ICPT_EXTINT 0x14 +#define ICPT_IOREQ 0x18 +#define ICPT_WAIT 0x1c +#define ICPT_VALIDITY 0x20 +#define ICPT_STOP 0x28 +#define ICPT_OPEREXC 0x2C +#define ICPT_PARTEXEC 0x38 +#define ICPT_IOINST 0x40 +#define ICPT_KSS 0x5c + uint8_t icptcode; /* 0x0050 */ + uint8_t icptstatus; /* 0x0051 */ + uint16_t ihcpu; /* 0x0052 */ + uint8_t reserved54[2]; /* 0x0054 */ + uint16_t ipa; /* 0x0056 */ + uint32_t ipb; /* 0x0058 */ + uint32_t scaoh; /* 0x005c */ +#define FPF_BPBC 0x20 + uint8_t fpf; /* 0x0060 */ +#define ECB_GS 0x40 +#define ECB_TE 0x10 +#define ECB_SRSI 0x04 +#define ECB_HOSTPROTINT 0x02 + uint8_t ecb; /* 0x0061 */ +#define ECB2_CMMA 0x80 +#define ECB2_IEP 0x20 +#define ECB2_PFMFI 0x08 +#define ECB2_ESCA 0x04 + uint8_t ecb2; /* 0x0062 */ +#define ECB3_DEA 0x08 +#define ECB3_AES 0x04 +#define ECB3_RI 0x01 + uint8_t ecb3; /* 0x0063 */ + uint32_t scaol; /* 0x0064 */ + uint8_t reserved68; /* 0x0068 */ + uint8_t epdx; /* 0x0069 */ + uint8_t reserved6a[2]; /* 0x006a */ + uint32_t todpr; /* 0x006c */ +#define GISA_FORMAT1 0x00000001 + uint32_t gd; /* 0x0070 */ + uint8_t reserved74[12]; /* 0x0074 */ + uint64_t mso; /* 0x0080 */ + uint64_t msl; /* 0x0088 */ + struct psw gpsw; /* 0x0090 */ + uint64_t gg14; /* 0x00a0 */ + uint64_t gg15; /* 0x00a8 */ + uint8_t reservedb0[8]; /* 0x00b0 */ +#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 */ + uint32_t reservedc8; /* 0x00c8 */ + uint16_t pgmilc; /* 0x00cc */ + uint16_t iprcc; /* 0x00ce */ + uint32_t dxc; /* 0x00d0 */ + uint16_t mcn; /* 0x00d4 */ + uint8_t perc; /* 0x00d6 */ + uint8_t peratmid; /* 0x00d7 */ + uint64_t peraddr; /* 0x00d8 */ + uint8_t eai; /* 0x00e0 */ + uint8_t peraid; /* 0x00e1 */ + uint8_t oai; /* 0x00e2 */ + uint8_t armid; /* 0x00e3 */ + uint8_t reservede4[4]; /* 0x00e4 */ + uint64_t tecmc; /* 0x00e8 */ + uint8_t reservedf0[12]; /* 0x00f0 */ +#define CRYCB_FORMAT_MASK 0x00000003 +#define CRYCB_FORMAT0 0x00000000 +#define CRYCB_FORMAT1 0x00000001 +#define CRYCB_FORMAT2 0x00000003 + uint32_t crycbd; /* 0x00fc */ + uint64_t gcr[16]; /* 0x0100 */ + uint64_t gbea; /* 0x0180 */ + uint8_t reserved188[8]; /* 0x0188 */ + uint64_t sdnxo; /* 0x0190 */ + uint8_t reserved198[8]; /* 0x0198 */ + uint32_t fac; /* 0x01a0 */ + uint8_t reserved1a4[20]; /* 0x01a4 */ + uint64_t cbrlo; /* 0x01b8 */ + uint8_t reserved1c0[8]; /* 0x01c0 */ +#define ECD_HOSTREGMGMT 0x20000000 +#define ECD_MEF 0x08000000 +#define ECD_ETOKENF 0x02000000 +#define ECD_ECC 0x00200000 + uint32_t ecd; /* 0x01c8 */ + uint8_t reserved1cc[18]; /* 0x01cc */ + uint64_t pp; /* 0x01de */ + uint8_t reserved1e6[2]; /* 0x01e6 */ + uint64_t itdba; /* 0x01e8 */ + uint64_t riccbd; /* 0x01f0 */ + uint64_t gvrd; /* 0x01f8 */ +} __attribute__((packed)); + +struct vm_save_regs { + u64 grs[16]; + u64 fprs[16]; + u32 fpc; +}; + +/* We might be able to nestle all of this into the stack frame. But + * having a dedicated save area that saves more than the s390 ELF ABI + * defines leaves us more freedom in the implementation. +*/ +struct vm_save_area { + struct vm_save_regs guest; + struct vm_save_regs host; +}; + +struct vm { + struct kvm_s390_sie_block *sblk; + struct vm_save_area save_area; + /* Ptr to first guest page */ + u8 *guest_mem; +}; + +extern void sie_entry(void); +extern void sie_exit(void); +extern void sie64a(struct kvm_s390_sie_block *sblk, struct vm_save_area *save_area); + +#endif /* SIE_H */ diff --git a/s390x/lib.S b/s390x/lib.S index 4d78ec6..5267f02 100644 --- a/s390x/lib.S +++ b/s390x/lib.S @@ -60,6 +60,62 @@ smp_cpu_setup_state: /* If the function returns, just loop here */ 0: j 0 +/* + * sie64a calling convention: + * %r2 pointer to sie control block + * %r3 guest register save area + */ +.globl sie64a +sie64a: + # Save host grs, fprs, fpc + stmg %r0,%r14,SIE_SAVEAREA_HOST_GRS(%r3) # save kernel registers + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + std \i, \i * 8 + SIE_SAVEAREA_HOST_FPRS(%r3) + .endr + stfpc SIE_SAVEAREA_HOST_FPC(%r3) + + # Store scb and save_area pointer into stack frame + stg %r2,__SF_SIE_CONTROL(%r15) # save control block pointer + stg %r3,__SF_SIE_SAVEAREA(%r15) # save guest register save area + + # Load guest's gprs, fprs and fpc + lmg %r0,%r13,SIE_SAVEAREA_GUEST_GRS(%r3) + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + ld \i, \i * 8 + SIE_SAVEAREA_GUEST_FPRS(%r3) + .endr + lfpc SIE_SAVEAREA_GUEST_FPC(%r3) + + # Move scb ptr into r14 for the sie instruction + lg %r14,__SF_SIE_CONTROL(%r15) + +.globl sie_entry +sie_entry: + sie 0(%r14) + nopr 7 + nopr 7 + nopr 7 + +.globl sie_exit +sie_exit: + # Load guest register save area + lg %r14,__SF_SIE_SAVEAREA(%r15) + + # Store guest's gprs, fprs and fpc + stmg %r0,%r13,SIE_SAVEAREA_GUEST_GRS(%r14) # save guest gprs 0-13 + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + std \i, \i * 8 + SIE_SAVEAREA_GUEST_FPRS(%r14) + .endr + stfpc SIE_SAVEAREA_GUEST_FPC(%r14) + + # Restore host's gprs, fprs and fpc + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + ld \i, \i * 8 + SIE_SAVEAREA_HOST_FPRS(%r14) + .endr + lfpc SIE_SAVEAREA_HOST_FPC(%r14) + lmg %r0,%r14,SIE_SAVEAREA_HOST_GRS(%r14) # restore kernel registers + + br %r14 + .align 8 reset_psw: .quad 0x0008000180000000 From patchwork Tue Jan 12 13:20: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: 12013487 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E1B6C4332B for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DCDA122571 for ; Tue, 12 Jan 2021 13:22:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733062AbhALNWC (ORCPT ); Tue, 12 Jan 2021 08:22:02 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:23966 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729886AbhALNWA (ORCPT ); Tue, 12 Jan 2021 08:22:00 -0500 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CD4CFs041999; Tue, 12 Jan 2021 08:21:20 -0500 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=m0k3f7bFzGurrGkPGQ/GE6kJKwkkGBRgc9Ll7yqhDzw=; b=MYH9OxuLP7DhrlpCENLh8A9guzt9kprzRhiPacLgYJpUVG9WOwuIcvfxDmUdkarI6Zp2 B7bV96woSkb0Lzh4p2rIzI2qycTOJJwa+xmUTI6LITGBCg6hSqd0Hon24+InjWdfxjGW 67/maA69NTrdwLd8kMuBhcSn0+DHAexR1TxiTRT+OuHWGxTzBuuEjVErlw1IKXyuOrba KuIugefOzYWxE5Z30M9hFbADOwgONfvVlxvqxkH1JDKL9WHkIzlvQBqF8JBvail4LbyH gqlxbuum2xO2qfUda8gC1qbXxjQNuTqooeHjBi8Q4U6lcWgUHzATpC8EWY/j+R+Yp8Sz bQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361b8htt68-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:20 -0500 Received: from m0098396.ppops.net (m0098396.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CD4I7E042316; Tue, 12 Jan 2021 08:21:20 -0500 Received: from ppma06ams.nl.ibm.com (66.31.33a9.ip4.static.sl-reverse.com [169.51.49.102]) by mx0a-001b2d01.pphosted.com with ESMTP id 361b8htt5c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:19 -0500 Received: from pps.filterd (ppma06ams.nl.ibm.com [127.0.0.1]) by ppma06ams.nl.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDI18L023615; Tue, 12 Jan 2021 13:21:17 GMT Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by ppma06ams.nl.ibm.com with ESMTP id 35ydrdb8vy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:17 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDLEYc37290472 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:15 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D94854C050; Tue, 12 Jan 2021 13:21:14 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1DD744C044; Tue, 12 Jan 2021 13:21:14 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:14 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 6/9] s390x: sie: Add first SIE test Date: Tue, 12 Jan 2021 08:20:51 -0500 Message-Id: <20210112132054.49756-7-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 mlxscore=0 phishscore=0 adultscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 spamscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120073 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Let's check if we get the correct interception data on a few diags. This commit is more of an addition of boilerplate code than a real test. Signed-off-by: Janosch Frank Reviewed-by: Thomas Huth Reviewed-by: Claudio Imbrenda Reviewed-by: Cornelia Huck --- s390x/Makefile | 1 + s390x/sie.c | 113 ++++++++++++++++++++++++++++++++++++++++++++ s390x/unittests.cfg | 3 ++ 3 files changed, 117 insertions(+) create mode 100644 s390x/sie.c diff --git a/s390x/Makefile b/s390x/Makefile index e0bccc8..9e6e60d 100644 --- a/s390x/Makefile +++ b/s390x/Makefile @@ -19,6 +19,7 @@ tests += $(TEST_DIR)/smp.elf tests += $(TEST_DIR)/sclp.elf tests += $(TEST_DIR)/css.elf tests += $(TEST_DIR)/uv-guest.elf +tests += $(TEST_DIR)/sie.elf tests_binary = $(patsubst %.elf,%.bin,$(tests)) ifneq ($(HOST_KEY_DOCUMENT),) diff --git a/s390x/sie.c b/s390x/sie.c new file mode 100644 index 0000000..cfc746f --- /dev/null +++ b/s390x/sie.c @@ -0,0 +1,113 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static u8 *guest; +static u8 *guest_instr; +static struct vm vm; + +static void handle_validity(struct vm *vm) +{ + report(0, "VALIDITY: %x", vm->sblk->ipb >> 16); +} + +static void sie(struct vm *vm) +{ + while (vm->sblk->icptcode == 0) { + sie64a(vm->sblk, &vm->save_area); + if (vm->sblk->icptcode == ICPT_VALIDITY) + handle_validity(vm); + } + vm->save_area.guest.grs[14] = vm->sblk->gg14; + vm->save_area.guest.grs[15] = vm->sblk->gg15; +} + +static void sblk_cleanup(struct vm *vm) +{ + vm->sblk->icptcode = 0; +} + +static void test_diag(u32 instr) +{ + vm.sblk->gpsw.addr = PAGE_SIZE * 2; + vm.sblk->gpsw.mask = 0x0000000180000000ULL; + + memset(guest_instr, 0, PAGE_SIZE); + memcpy(guest_instr, &instr, 4); + sie(&vm); + report(vm.sblk->icptcode == ICPT_INST && + vm.sblk->ipa == instr >> 16 && vm.sblk->ipb == instr << 16, + "Intercept data"); + sblk_cleanup(&vm); +} + +static struct { + const char *name; + u32 instr; +} tests[] = { + { "10", 0x83020010 }, + { "44", 0x83020044 }, + { "9c", 0x8302009c }, + { NULL, 0 } +}; + +static void test_diags(void) +{ + int i; + + for (i = 0; tests[i].name; i++) { + report_prefix_push(tests[i].name); + test_diag(tests[i].instr); + report_prefix_pop(); + } +} + +static void setup_guest(void) +{ + setup_vm(); + + /* Allocate 1MB as guest memory */ + guest = alloc_pages(8); + /* The first two pages are the lowcore */ + guest_instr = guest + PAGE_SIZE * 2; + + vm.sblk = alloc_page(); + + vm.sblk->cpuflags = CPUSTAT_ZARCH | CPUSTAT_RUNNING; + vm.sblk->prefix = 0; + /* + * Pageable guest with the same ASCE as the test programm, but + * the guest memory 0x0 is offset to start at the allocated + * guest pages and end after 1MB. + * + * It's not pretty but faster and easier than managing guest ASCEs. + */ + vm.sblk->mso = (u64)guest; + vm.sblk->msl = (u64)guest; + vm.sblk->ihcpu = 0xffff; + + vm.sblk->crycbd = (uint64_t)alloc_page(); +} + +int main(void) +{ + report_prefix_push("sie"); + if (!sclp_facilities.has_sief2) { + report_skip("SIEF2 facility unavailable"); + goto done; + } + + setup_guest(); + test_diags(); +done: + report_prefix_pop(); + return report_summary(); +} diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg index 3feb8bc..2298be6 100644 --- a/s390x/unittests.cfg +++ b/s390x/unittests.cfg @@ -96,3 +96,6 @@ smp = 2 [uv-guest] file = uv-guest.elf + +[sie] +file = sie.elf From patchwork Tue Jan 12 13:20: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: 12013481 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4C569C4332D for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 106FF22CAF for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733101AbhALNWD (ORCPT ); Tue, 12 Jan 2021 08:22:03 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:35366 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733056AbhALNWC (ORCPT ); Tue, 12 Jan 2021 08:22:02 -0500 Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CD58ov063841; Tue, 12 Jan 2021 08:21:22 -0500 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=I5DBPI8+i1zVFTn1s3zgO+6a9Pz5GfCH27yR9otAvbo=; b=bYMSpN4QtCmuaYKpN3VztvTyRev7H3aew18sNl71TQIIGpdFFhdcrg3jyYhcLZwrHzsv VK+dRrR7F1fnXuJ0b7UPAqmPvlRfWN1TIS56eUNlkQYrPI1py3MbkEH+4xY7sOnMazjn 0Z+88aNPLbKGr+yeYYXjfU1V/mBomXtUdJZNxVbcjQL23urilAgHppHAf7jevFMNIvwn Xf9sFBjv+Z8s1rDk5w50T2AhFyR7SJRKOM3Fk/SOhDebIzEVkuPzQvELHR2aZVzzIJZJ HoMA2qZikfktd5OQmYA6gdgoUht5Z6XkKE5+xY0Ztn7du1sqNr8THtqw6dHVeh3Ras9f 2Q== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361bvhsm89-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:21 -0500 Received: from m0098394.ppops.net (m0098394.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CD5gsW066139; Tue, 12 Jan 2021 08:21:21 -0500 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 361bvhsm7b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:21 -0500 Received: from pps.filterd (ppma05fra.de.ibm.com [127.0.0.1]) by ppma05fra.de.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDHJWZ016229; Tue, 12 Jan 2021 13:21:18 GMT Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by ppma05fra.de.ibm.com with ESMTP id 35y4489vdg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:18 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDLFZh37421528 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:15 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C90A94C040; Tue, 12 Jan 2021 13:21:15 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0D54E4C052; Tue, 12 Jan 2021 13:21:15 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:14 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 7/9] s390x: Add diag318 intercept test Date: Tue, 12 Jan 2021 08:20:52 -0500 Message-Id: <20210112132054.49756-8-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 phishscore=0 mlxscore=0 suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 spamscore=0 mlxlogscore=999 impostorscore=0 clxscore=1015 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120071 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Not much to test except for the privilege and specification exceptions. Signed-off-by: Janosch Frank Reviewed-by: Thomas Huth Reviewed-by: Claudio Imbrenda Reviewed-by: Cornelia Huck --- lib/s390x/sclp.c | 1 + lib/s390x/sclp.h | 6 +++++- s390x/intercept.c | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/s390x/sclp.c b/lib/s390x/sclp.c index 06819a6..7a9b2c5 100644 --- a/lib/s390x/sclp.c +++ b/lib/s390x/sclp.c @@ -138,6 +138,7 @@ void sclp_facilities_setup(void) assert(read_info); cpu = sclp_get_cpu_entries(); + sclp_facilities.has_diag318 = read_info->byte_134_diag318; for (i = 0; i < read_info->entries_cpu; i++, cpu++) { /* * The logic for only reading the facilities from the diff --git a/lib/s390x/sclp.h b/lib/s390x/sclp.h index 6c86037..58f8e54 100644 --- a/lib/s390x/sclp.h +++ b/lib/s390x/sclp.h @@ -105,7 +105,8 @@ extern struct sclp_facilities sclp_facilities; struct sclp_facilities { uint64_t has_sief2 : 1; - uint64_t : 63; + uint64_t has_diag318 : 1; + uint64_t : 62; }; typedef struct ReadInfo { @@ -130,6 +131,9 @@ typedef struct ReadInfo { uint16_t highest_cpu; uint8_t _reserved5[124 - 122]; /* 122-123 */ uint32_t hmfai; + uint8_t reserved7[134 - 128]; + uint8_t byte_134_diag318 : 1; + uint8_t : 7; struct CPUEntry entries[0]; } __attribute__((packed)) ReadInfo; diff --git a/s390x/intercept.c b/s390x/intercept.c index cde2f5f..86e57e1 100644 --- a/s390x/intercept.c +++ b/s390x/intercept.c @@ -8,6 +8,7 @@ * Thomas Huth */ #include +#include #include #include #include @@ -152,6 +153,23 @@ static void test_testblock(void) check_pgm_int_code(PGM_INT_CODE_ADDRESSING); } +static void test_diag318(void) +{ + expect_pgm_int(); + enter_pstate(); + asm volatile("diag %0,0,0x318\n" : : "d" (0x42)); + check_pgm_int_code(PGM_INT_CODE_PRIVILEGED_OPERATION); + + if (!sclp_facilities.has_diag318) + expect_pgm_int(); + + asm volatile("diag %0,0,0x318\n" : : "d" (0x42)); + + if (!sclp_facilities.has_diag318) + check_pgm_int_code(PGM_INT_CODE_SPECIFICATION); + +} + struct { const char *name; void (*func)(void); @@ -162,6 +180,7 @@ struct { { "stap", test_stap, false }, { "stidp", test_stidp, false }, { "testblock", test_testblock, false }, + { "diag318", test_diag318, false }, { NULL, NULL, false } }; From patchwork Tue Jan 12 13:20: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: 12013489 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D773C43332 for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6280422CAF for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387419AbhALNWF (ORCPT ); Tue, 12 Jan 2021 08:22:05 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:24258 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728013AbhALNWE (ORCPT ); Tue, 12 Jan 2021 08:22:04 -0500 Received: from pps.filterd (m0187473.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CD38gL070725; Tue, 12 Jan 2021 08:21:23 -0500 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=nkSnNUEgUKkUATIS5FonmBlW7o2f0z9EiGoXERQttr0=; b=fBogf7mttiMothTH7CWd/5CXugI14q9XSvq5/DOlUG2sCJLgKy9ni3aSOMJysGCCmBpB QNdmfEomji9bsLQ1Nktv/IDw3DST1Lv5/54U2bLF/+SlX3wM26ytjnS8wpGDhBZCGJ5A wGQFQj1Bg9IAZfkHmv+2F9bM8MBKXINF8VpJ/E1Cqv6+T3cVKCaRWHkNzex9WZg9qiIl f4YB3Uij2bYyC+haRA2EAVQiHhj5NexY9BYl4pfggnHJiSoVNpxaPdB0UfKJkldcIIjG cZ3kZ+ObhrW+VIqwGfYiTOviSzkbrtCrBbPDI9BdP8eTPOqzMS+fQ0EYPdsjKFk23ZEW 3Q== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361c7b0k42-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:22 -0500 Received: from m0187473.ppops.net (m0187473.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CD3IHS074197; Tue, 12 Jan 2021 08:21:22 -0500 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 361c7b0k35-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:21 -0500 Received: from pps.filterd (ppma01fra.de.ibm.com [127.0.0.1]) by ppma01fra.de.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDGuYZ007461; Tue, 12 Jan 2021 13:21:19 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma01fra.de.ibm.com with ESMTP id 35y4481vqr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:19 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDLGPf19661126 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:16 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B77264C040; Tue, 12 Jan 2021 13:21:16 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F08174C046; Tue, 12 Jan 2021 13:21:15 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:15 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 8/9] s390x: Fix sclp.h style issues Date: Tue, 12 Jan 2021 08:20:53 -0500 Message-Id: <20210112132054.49756-9-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 mlxscore=0 bulkscore=0 phishscore=0 mlxlogscore=999 adultscore=0 clxscore=1015 priorityscore=1501 spamscore=0 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120073 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Fix indentation Signed-off-by: Janosch Frank Reviewed-by: Cornelia Huck Reviewed-by: Claudio Imbrenda Acked-by: Thomas Huth --- lib/s390x/sclp.h | 172 +++++++++++++++++++++++------------------------ 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/lib/s390x/sclp.h b/lib/s390x/sclp.h index 58f8e54..dccbaa8 100644 --- a/lib/s390x/sclp.h +++ b/lib/s390x/sclp.h @@ -79,10 +79,10 @@ #define SCCB_SIZE 4096 typedef struct SCCBHeader { - uint16_t length; - uint8_t function_code; - uint8_t control_mask[3]; - uint16_t response_code; + uint16_t length; + uint8_t function_code; + uint8_t control_mask[3]; + uint16_t response_code; } __attribute__((packed)) SCCBHeader; #define SCCB_DATA_LEN (SCCB_SIZE - sizeof(SCCBHeader)) @@ -90,15 +90,15 @@ typedef struct SCCBHeader { /* CPU information */ typedef struct CPUEntry { - uint8_t address; - uint8_t reserved0; - uint8_t : 4; - uint8_t feat_sief2 : 1; - uint8_t : 3; - uint8_t features_res2 [SCCB_CPU_FEATURE_LEN - 1]; - uint8_t reserved2[6]; - uint8_t type; - uint8_t reserved1; + uint8_t address; + uint8_t reserved0; + uint8_t : 4; + uint8_t feat_sief2 : 1; + uint8_t : 3; + uint8_t features_res2 [SCCB_CPU_FEATURE_LEN - 1]; + uint8_t reserved2[6]; + uint8_t type; + uint8_t reserved1; } __attribute__((packed)) CPUEntry; extern struct sclp_facilities sclp_facilities; @@ -110,77 +110,77 @@ struct sclp_facilities { }; typedef struct ReadInfo { - SCCBHeader h; - uint16_t rnmax; - uint8_t rnsize; - uint8_t _reserved1[16 - 11]; /* 11-15 */ - uint16_t entries_cpu; /* 16-17 */ - uint16_t offset_cpu; /* 18-19 */ - uint8_t _reserved2[24 - 20]; /* 20-23 */ - uint8_t loadparm[8]; /* 24-31 */ - uint8_t _reserved3[48 - 32]; /* 32-47 */ - uint64_t facilities; /* 48-55 */ - uint8_t _reserved0[76 - 56]; /* 56-75 */ - uint32_t ibc_val; - uint8_t conf_char[99 - 80]; /* 80-98 */ - uint8_t mha_pow; - uint32_t rnsize2; - uint64_t rnmax2; - uint8_t _reserved6[116 - 112]; /* 112-115 */ - uint8_t conf_char_ext[120 - 116]; /* 116-119 */ - uint16_t highest_cpu; - uint8_t _reserved5[124 - 122]; /* 122-123 */ - uint32_t hmfai; - uint8_t reserved7[134 - 128]; - uint8_t byte_134_diag318 : 1; - uint8_t : 7; - struct CPUEntry entries[0]; + SCCBHeader h; + uint16_t rnmax; + uint8_t rnsize; + uint8_t _reserved1[16 - 11]; /* 11-15 */ + uint16_t entries_cpu; /* 16-17 */ + uint16_t offset_cpu; /* 18-19 */ + uint8_t _reserved2[24 - 20]; /* 20-23 */ + uint8_t loadparm[8]; /* 24-31 */ + uint8_t _reserved3[48 - 32]; /* 32-47 */ + uint64_t facilities; /* 48-55 */ + uint8_t _reserved0[76 - 56]; /* 56-75 */ + uint32_t ibc_val; + uint8_t conf_char[99 - 80]; /* 80-98 */ + uint8_t mha_pow; + uint32_t rnsize2; + uint64_t rnmax2; + uint8_t _reserved6[116 - 112]; /* 112-115 */ + uint8_t conf_char_ext[120 - 116]; /* 116-119 */ + uint16_t highest_cpu; + uint8_t _reserved5[124 - 122]; /* 122-123 */ + uint32_t hmfai; + uint8_t reserved7[134 - 128]; + uint8_t byte_134_diag318 : 1; + uint8_t : 7; + struct CPUEntry entries[0]; } __attribute__((packed)) ReadInfo; typedef struct ReadCpuInfo { - SCCBHeader h; - uint16_t nr_configured; /* 8-9 */ - uint16_t offset_configured; /* 10-11 */ - uint16_t nr_standby; /* 12-13 */ - uint16_t offset_standby; /* 14-15 */ - uint8_t reserved0[24-16]; /* 16-23 */ - struct CPUEntry entries[0]; + SCCBHeader h; + uint16_t nr_configured; /* 8-9 */ + uint16_t offset_configured; /* 10-11 */ + uint16_t nr_standby; /* 12-13 */ + uint16_t offset_standby; /* 14-15 */ + uint8_t reserved0[24-16]; /* 16-23 */ + struct CPUEntry entries[0]; } __attribute__((packed)) ReadCpuInfo; typedef struct ReadStorageElementInfo { - SCCBHeader h; - uint16_t max_id; - uint16_t assigned; - uint16_t standby; - uint8_t _reserved0[16 - 14]; /* 14-15 */ - uint32_t entries[0]; + SCCBHeader h; + uint16_t max_id; + uint16_t assigned; + uint16_t standby; + uint8_t _reserved0[16 - 14]; /* 14-15 */ + uint32_t entries[0]; } __attribute__((packed)) ReadStorageElementInfo; typedef struct AttachStorageElement { - SCCBHeader h; - uint8_t _reserved0[10 - 8]; /* 8-9 */ - uint16_t assigned; - uint8_t _reserved1[16 - 12]; /* 12-15 */ - uint32_t entries[0]; + SCCBHeader h; + uint8_t _reserved0[10 - 8]; /* 8-9 */ + uint16_t assigned; + uint8_t _reserved1[16 - 12]; /* 12-15 */ + uint32_t entries[0]; } __attribute__((packed)) AttachStorageElement; typedef struct AssignStorage { - SCCBHeader h; - uint16_t rn; + SCCBHeader h; + uint16_t rn; } __attribute__((packed)) AssignStorage; typedef struct IoaCfgSccb { - SCCBHeader header; - uint8_t atype; - uint8_t reserved1; - uint16_t reserved2; - uint32_t aid; + SCCBHeader header; + uint8_t atype; + uint8_t reserved1; + uint16_t reserved2; + uint32_t aid; } __attribute__((packed)) IoaCfgSccb; typedef struct SCCB { - SCCBHeader h; - char data[SCCB_DATA_LEN]; - } __attribute__((packed)) SCCB; + SCCBHeader h; + char data[SCCB_DATA_LEN]; +} __attribute__((packed)) SCCB; /* SCLP event types */ #define SCLP_EVENT_ASCII_CONSOLE_DATA 0x1a @@ -195,13 +195,13 @@ typedef struct SCCB { #define SCLP_SELECTIVE_READ 0x01 typedef struct WriteEventMask { - SCCBHeader h; - uint16_t _reserved; - uint16_t mask_length; - uint32_t cp_receive_mask; - uint32_t cp_send_mask; - uint32_t send_mask; - uint32_t receive_mask; + SCCBHeader h; + uint16_t _reserved; + uint16_t mask_length; + uint32_t cp_receive_mask; + uint32_t cp_send_mask; + uint32_t send_mask; + uint32_t receive_mask; } __attribute__((packed)) WriteEventMask; #define MDBTYP_GO 0x0001 @@ -254,25 +254,25 @@ struct mdb { } __attribute__((packed)); typedef struct EventBufferHeader { - uint16_t length; - uint8_t type; - uint8_t flags; - uint16_t _reserved; + uint16_t length; + uint8_t type; + uint8_t flags; + uint16_t _reserved; } __attribute__((packed)) EventBufferHeader; typedef struct WriteEventData { - SCCBHeader h; - EventBufferHeader ebh; - union { - char data[0]; - struct mdb mdb; - } msg; + SCCBHeader h; + EventBufferHeader ebh; + union { + char data[0]; + struct mdb mdb; + } msg; } __attribute__((packed)) WriteEventData; typedef struct ReadEventData { - SCCBHeader h; - EventBufferHeader ebh; - uint32_t mask; + SCCBHeader h; + EventBufferHeader ebh; + uint32_t mask; } __attribute__((packed)) ReadEventData; extern char _sccb[]; From patchwork Tue Jan 12 13:20: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: 12013485 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BD7D8C43331 for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8A9E222571 for ; Tue, 12 Jan 2021 13:22:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387429AbhALNWG (ORCPT ); Tue, 12 Jan 2021 08:22:06 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:61852 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733164AbhALNWD (ORCPT ); Tue, 12 Jan 2021 08:22:03 -0500 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 10CD4bx3160665; Tue, 12 Jan 2021 08:21:23 -0500 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=z0KUrILbnCB/14DwbsiY2AomilgKtDh1jKZtYPRzXH8=; b=ThAdNU+ky9NjR6/wb/V4qy+Alt1IGfia//VmA1K8HxkgE/5BA2wfcpX5jKs3K/paLO3F WCqo3006pRLxy05GTpIsLjsXz9zXc+M8/x/us8Q7S9x7P/xOkqX844OYHb4yBJn2YIwk 1rAsQetIpOiXbsMAooxDpPAxkdUkextvYQO+Jb63kxaAroqgMByI7a0wECXXE3kirt+B 5b2+Smr6zAnXxn9quGmB576O1ZmjrgkFnN/yDfbPrQe3y9aT+Uz+DObltDQeXjY0sZ5q VKmPMTjc/8mf64sRi/0EZ5ScKgUv0VQR/5jqDmNYUak09zu5EVlC6WCTdyKL8zfotO2Y 1Q== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 361c19h7he-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:23 -0500 Received: from m0098399.ppops.net (m0098399.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 10CD56hD163582; Tue, 12 Jan 2021 08:21:22 -0500 Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com with ESMTP id 361c19h7gq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 08:21:22 -0500 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 10CDIE7b026421; Tue, 12 Jan 2021 13:21:20 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 35y448bp1r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Jan 2021 13:21:20 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 10CDLHNP46530840 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Jan 2021 13:21:17 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AFCA24C04E; Tue, 12 Jan 2021 13:21:17 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DEF4A4C044; Tue, 12 Jan 2021 13:21:16 +0000 (GMT) Received: from linux01.pok.stglabs.ibm.com (unknown [9.114.17.81]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 12 Jan 2021 13:21:16 +0000 (GMT) From: Janosch Frank To: kvm@vger.kernel.org Cc: thuth@redhat.com, david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com, cohuck@redhat.com, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH v4 9/9] s390x: sclp: Add CPU entry offset comment Date: Tue, 12 Jan 2021 08:20:54 -0500 Message-Id: <20210112132054.49756-10-frankja@linux.ibm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210112132054.49756-1-frankja@linux.ibm.com> References: <20210112132054.49756-1-frankja@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-12_07:2021-01-12,2021-01-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 malwarescore=0 mlxlogscore=999 adultscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 mlxscore=0 impostorscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101120073 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Let's make it clear that there is something at the end of the struct. The exact offset is reported by the cpu_offset member. Signed-off-by: Janosch Frank Reviewed-by: Thomas Huth Reviewed-by: Claudio Imbrenda --- lib/s390x/sclp.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/s390x/sclp.h b/lib/s390x/sclp.h index dccbaa8..395895f 100644 --- a/lib/s390x/sclp.h +++ b/lib/s390x/sclp.h @@ -134,7 +134,10 @@ typedef struct ReadInfo { uint8_t reserved7[134 - 128]; uint8_t byte_134_diag318 : 1; uint8_t : 7; - struct CPUEntry entries[0]; + /* + * The cpu entries follow, they start at the offset specified + * in offset_cpu. + */ } __attribute__((packed)) ReadInfo; typedef struct ReadCpuInfo {