From nobody Tue Oct 28 01:57:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516199007326719.9504475267797; Wed, 17 Jan 2018 06:23:27 -0800 (PST) Received: from localhost ([::1]:39258 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ebocg-0007WX-Ah for importer@patchew.org; Wed, 17 Jan 2018 09:23:26 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41852) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eboYf-0004oL-4A for qemu-devel@nongnu.org; Wed, 17 Jan 2018 09:19:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eboYa-0003o9-JD for qemu-devel@nongnu.org; Wed, 17 Jan 2018 09:19:17 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:48242) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eboYa-0003nB-BR for qemu-devel@nongnu.org; Wed, 17 Jan 2018 09:19:12 -0500 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w0HEJ5Pe117168 for ; Wed, 17 Jan 2018 09:19:11 -0500 Received: from e06smtp12.uk.ibm.com (e06smtp12.uk.ibm.com [195.75.94.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 2fj7nhspkk-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 17 Jan 2018 09:19:08 -0500 Received: from localhost by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 17 Jan 2018 14:18:54 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp12.uk.ibm.com (192.168.101.142) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 17 Jan 2018 14:18:50 -0000 Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w0HEIogL44564630; Wed, 17 Jan 2018 14:18:50 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3E27BAE055; Wed, 17 Jan 2018 14:10:38 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 26BC0AE053; Wed, 17 Jan 2018 14:10:38 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av26.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 17 Jan 2018 14:10:38 +0000 (GMT) Received: by tuxmaker.boeblingen.de.ibm.com (Postfix, from userid 25651) id 165DC20F69C; Wed, 17 Jan 2018 15:18:50 +0100 (CET) From: Christian Borntraeger To: Cornelia Huck Date: Wed, 17 Jan 2018 15:18:48 +0100 X-Mailer: git-send-email 2.9.4 In-Reply-To: <20180117141849.65757-1-borntraeger@de.ibm.com> References: <20180117141849.65757-1-borntraeger@de.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18011714-0008-0000-0000-000004C2D2C2 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18011714-0009-0000-0000-00001E56423F Message-Id: <20180117141849.65757-3-borntraeger@de.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2018-01-17_05:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1801170205 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.156.1 Subject: [Qemu-devel] [PATCH 2/3] s390x/kvm: Handle bpb feature X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Janosch Frank , Thomas Huth , David Hildenbrand , qemu-devel , Alexander Graf , Christian Borntraeger , qemu-s390x , Halil Pasic , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We need to handle the bpb control on reset and migration. Normally stfle.82 is transparent (and the normal guest part works without hypervisor activity). To prevent any issues we require full host kernel support for this feature. Signed-off-by: Christian Borntraeger --- target/s390x/cpu.c | 1 + target/s390x/cpu.h | 1 + target/s390x/cpu_features.c | 1 + target/s390x/cpu_features_def.h | 1 + target/s390x/gen-features.c | 1 + target/s390x/kvm.c | 16 ++++++++++++++++ target/s390x/machine.c | 17 +++++++++++++++++ 7 files changed, 38 insertions(+) diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index ae3cee9..1577b2c 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -89,6 +89,7 @@ static void s390_cpu_reset(CPUState *s) CPUS390XState *env =3D &cpu->env; =20 env->pfault_token =3D -1UL; + env->bpbc =3D 0; scc->parent_reset(s); cpu->env.sigp_order =3D 0; s390_cpu_set_state(CPU_STATE_STOPPED, cpu); diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h index 1a8b6b9..8514905 100644 --- a/target/s390x/cpu.h +++ b/target/s390x/cpu.h @@ -93,6 +93,7 @@ struct CPUS390XState { =20 uint32_t fpc; /* floating-point control register */ uint32_t cc_op; + uint8_t bpbc; /* branch prediction blocking */ =20 float_status fpu_status; /* passed to softfloat lib */ =20 diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c index 31a4676..5d1c210 100644 --- a/target/s390x/cpu_features.c +++ b/target/s390x/cpu_features.c @@ -89,6 +89,7 @@ static const S390FeatDef s390_features[] =3D { FEAT_INIT("msa4-base", S390_FEAT_TYPE_STFL, 77, "Message-security-assi= st-extension-4 facility (excluding subfunctions)"), FEAT_INIT("edat2", S390_FEAT_TYPE_STFL, 78, "Enhanced-DAT facility 2"), FEAT_INIT("dfppc", S390_FEAT_TYPE_STFL, 80, "Decimal-floating-point pa= cked-conversion facility"), + FEAT_INIT("bpb", S390_FEAT_TYPE_STFL, 82, "Branch Prediction Blocking"= ), FEAT_INIT("vx", S390_FEAT_TYPE_STFL, 129, "Vector facility"), FEAT_INIT("iep", S390_FEAT_TYPE_STFL, 130, "Instruction-execution-prot= ection facility"), FEAT_INIT("sea_esop2", S390_FEAT_TYPE_STFL, 131, "Side-effect-access f= acility and Enhanced-suppression-on-protection facility 2"), diff --git a/target/s390x/cpu_features_def.h b/target/s390x/cpu_features_de= f.h index 4b6d4e9..4487cfd 100644 --- a/target/s390x/cpu_features_def.h +++ b/target/s390x/cpu_features_def.h @@ -80,6 +80,7 @@ typedef enum { S390_FEAT_MSA_EXT_4, S390_FEAT_EDAT_2, S390_FEAT_DFP_PACKED_CONVERSION, + S390_FEAT_BPB, S390_FEAT_VECTOR, S390_FEAT_INSTRUCTION_EXEC_PROT, S390_FEAT_SIDE_EFFECT_ACCESS_ESOP2, diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c index b24f6ad..95ee870 100644 --- a/target/s390x/gen-features.c +++ b/target/s390x/gen-features.c @@ -357,6 +357,7 @@ static uint16_t full_GEN7_GA1[] =3D { S390_FEAT_SIE_GPERE, S390_FEAT_SIE_IB, S390_FEAT_SIE_CEI, + S390_FEAT_BPB, }; =20 static uint16_t full_GEN7_GA2[] =3D { diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index 6a18a41..3cd4fab 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -490,6 +490,11 @@ int kvm_arch_put_registers(CPUState *cs, int level) cs->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_GSCB; } =20 + if (can_sync_regs(cs, KVM_SYNC_BPBC)) { + cs->kvm_run->s.regs.bpbc =3D env->bpbc; + cs->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_BPBC; + } + /* Finally the prefix */ if (can_sync_regs(cs, KVM_SYNC_PREFIX)) { cs->kvm_run->s.regs.prefix =3D env->psa; @@ -600,6 +605,10 @@ int kvm_arch_get_registers(CPUState *cs) memcpy(env->gscb, cs->kvm_run->s.regs.gscb, 32); } =20 + if (can_sync_regs(cs, KVM_SYNC_BPBC)) { + env->bpbc =3D cs->kvm_run->s.regs.bpbc; + } + /* pfault parameters */ if (can_sync_regs(cs, KVM_SYNC_PFAULT)) { env->pfault_token =3D cs->kvm_run->s.regs.pft; @@ -2278,6 +2287,13 @@ void kvm_s390_get_host_cpu_model(S390CPUModel *model= , Error **errp) clear_bit(S390_FEAT_CMM_NT, model->features); } =20 + /* stfle.82 is a transparent bit. As there is some state attached + * anyway we only enable this bit if the host kernel can handle + * migrate and reset */ + if (!kvm_check_extension(kvm_state, KVM_CAP_S390_BPB)) { + clear_bit(S390_FEAT_BPB, model->features); + } + /* We emulate a zPCI bus and AEN, therefore we don't need HW support */ if (pci_available) { set_bit(S390_FEAT_ZPCI, model->features); diff --git a/target/s390x/machine.c b/target/s390x/machine.c index b78f326..4aac456 100644 --- a/target/s390x/machine.c +++ b/target/s390x/machine.c @@ -194,6 +194,22 @@ const VMStateDescription vmstate_gscb =3D { } }; =20 +static bool bpbc_needed(void *opaque) +{ + return s390_has_feat(S390_FEAT_BPB); +} + +const VMStateDescription vmstate_bpbc =3D { + .name =3D "cpu/bpbc", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D bpbc_needed, + .fields =3D (VMStateField[]) { + VMSTATE_UINT8(env.bpbc, S390CPU), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_s390_cpu =3D { .name =3D "cpu", .post_load =3D cpu_post_load, @@ -228,6 +244,7 @@ const VMStateDescription vmstate_s390_cpu =3D { &vmstate_riccb, &vmstate_exval, &vmstate_gscb, + &vmstate_bpbc, NULL }, }; --=20 2.9.4