From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429265; cv=none; d=zohomail.com; s=zohoarc; b=iGTWJi4DNyyc3y4BFe7d7vok3aAyNBYmZDjzYUwFepDuCv3cThnhgnrcVLyV3BBdi+lv3RBEak2WwDgjSZ0vEpp/SYFUOkzvQNg3ltmHwu9PR4503Q1nGo7ngsDRA51AbPi5j3UyKKzk1OLE3HWLVucmmOImOck0Gksh/oruMfU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429265; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2FbkIW98jZ/SwSpR+1vhOb0Wiwd4C0+IxGrgo7niNvM=; b=N9iGZU+vTAoYk7xy3oNH9QCZ/yEJY4na1qP0HkuBCvhfRqZMUGscJKuHaLsnICHA9KUeZ7dnluzTDnavwQ+EMGDeA31wuaeJaSHgoKNNOwbgujATkAkwgBL2OOAc7Zdh32iQi3ycVSupFyWBCB1kCOszHtpbgux0M/K2HTZ0tCo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429265335524.4147749392962; Tue, 7 Jul 2026 06:01:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OE-0006KU-Jy; Tue, 07 Jul 2026 08:59:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OD-0006I1-G2 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:05 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OB-0006gk-AW for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:05 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-488-C34TqVcbMfqn-7r8Jlm_Tg-1; Tue, 07 Jul 2026 08:58:57 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7B31A1954198; Tue, 7 Jul 2026 12:58:55 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8E7901956040; Tue, 7 Jul 2026 12:58:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429142; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2FbkIW98jZ/SwSpR+1vhOb0Wiwd4C0+IxGrgo7niNvM=; b=QMtFYNujhWZ1BlrB0V1FXnrN+JLTRMV/bx8RLEzwr82CopuB2QsuPSINmNBkopY6eiQ4MM aqDwmcjIVv4RjJ2QMBs4LsW9IWXA90yvAzqZawQLaI787rC6M8CDNLAZm5d9xp3uYohfAK fSzv81QcB4tDgV65Awf1c+JBgiMsWVw= X-MC-Unique: C34TqVcbMfqn-7r8Jlm_Tg-1 X-Mimecast-MFC-AGG-ID: C34TqVcbMfqn-7r8Jlm_Tg_1783429135 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Zhuoying Cai , Eric Farman , Jared Rossi , Matthew Rosato , Cornelia Huck Subject: [PULL 01/15] pc-bios/s390-ccw: Refactor byte swapping Date: Tue, 7 Jul 2026 14:58:33 +0200 Message-ID: <20260707125847.1785168-2-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429267610158500 Content-Type: text/plain; charset="utf-8" From: Zhuoying Cai Introduce local variables to cache the byte-swapped values eliminating some redundant byte swap operations. Additionally, do byte swap when polling to avoid a special case where endianness is preserved. Reviewed-by: Eric Farman Signed-off-by: Zhuoying Cai Signed-off-by: Jared Rossi Tested-by: Matthew Rosato Message-ID: <20260630141917.673995-2-jrossi@linux.ibm.com> Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/virtio.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 390b55c7b924..a448dc96e269 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -153,14 +153,14 @@ static void vr_bswap_descriptor(VRingDesc *desc) =20 void vring_send_buf(VRing *vr, void *p, int len, int flags) { - if (!be_ipl()) { - vr->avail->idx =3D bswap16(vr->avail->idx); - } + uint16_t avail_idx; + + avail_idx =3D be_ipl() ? vr->avail->idx : bswap16(vr->avail->idx); =20 /* For follow-up chains we need to keep the first entry point */ if (!(flags & VRING_HIDDEN_IS_CHAIN)) { - vr->avail->ring[vr->avail->idx % vr->num] =3D be_ipl() ? vr->next_= idx : - bswap16(vr-= >next_idx); + vr->avail->ring[avail_idx % vr->num] =3D be_ipl() ? vr->next_idx : + bswap16(vr->next= _idx); } =20 vr->desc[vr->next_idx].addr =3D (unsigned long)p; @@ -177,23 +177,23 @@ void vring_send_buf(VRing *vr, void *p, int len, int = flags) =20 /* Chains only have a single ID */ if (!(flags & VRING_DESC_F_NEXT)) { - vr->avail->idx++; - } - - if (!be_ipl()) { - vr->avail->idx =3D bswap16(vr->avail->idx); + avail_idx++; + vr->avail->idx =3D be_ipl() ? avail_idx : bswap16(avail_idx); } } =20 int vr_poll(VRing *vr) { - if (vr->used->idx =3D=3D vr->used_idx) { + uint16_t used_idx; + + used_idx =3D be_ipl() ? vr->used->idx : bswap16(vr->used->idx); + if (used_idx =3D=3D vr->used_idx) { vring_notify(vr); yield(); return 0; } =20 - vr->used_idx =3D vr->used->idx; /* Endianness is preserved */ + vr->used_idx =3D used_idx; vr->next_idx =3D 0; vr->desc[0].len =3D 0; vr->desc[0].flags =3D 0; --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429213; cv=none; d=zohomail.com; s=zohoarc; b=iiDtGuzGi2ArSsJ040SEBpCRgwf81LAoN948c9TNXoPgsWcsj2T/ABYkZA3rdOF2KAPtu0ZV6i0lJhVoYV+tZHWOizk6M0CGpmg86TZx7eNiaD3TpRrogb56dQRYnlrbjMuDRHBSvTEdd5f8Qzh3etBNh42us9CAvESRR5kSyF0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429213; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=n4xVRaq7ITgerllM87BvkWcrkRyFsNsyeAyzIgdfC8E=; b=mPWPBnjOJaFU3rCPRHwQpsaawi1/BaWFJdOIFphSRIVYunNEt/hUyWi2M5ZTcu4ckr7oV2DbBelWOjgTMD80bfwxGZe7Y0xYraRsCUUje333K5hQqg8+NwTlK6MrOhI/3hqj0l/pL54EY2AYLpvUPZPm/GH+a5JBMHO5jsHtL/4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429213246361.85728149338775; Tue, 7 Jul 2026 06:00:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OD-0006IH-Ve; Tue, 07 Jul 2026 08:59:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OC-0006Hj-Iu for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:04 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OA-0006ge-V2 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:04 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-563-4o8kZqTsMGOYW-PKJlpzhw-1; Tue, 07 Jul 2026 08:58:59 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id ED0221954B39; Tue, 7 Jul 2026 12:58:57 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 0305D1956040; Tue, 7 Jul 2026 12:58:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429142; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=n4xVRaq7ITgerllM87BvkWcrkRyFsNsyeAyzIgdfC8E=; b=jIQGV+qY8V5EsdtXatagek0nadjOkCkbSFDLGnSfMd1Sqwp54INbYs5tAnN9wtsLPb5Oau tisTJWVX/eedXWwvaeP71e7cbQFKky18BkxnZFt9SwveFouw28FshwmHlldCt7rnEk+mov 9UsPhz9vJI25CqA3YIoqsJdIQOwchH0= X-MC-Unique: 4o8kZqTsMGOYW-PKJlpzhw-1 X-Mimecast-MFC-AGG-ID: 4o8kZqTsMGOYW-PKJlpzhw_1783429138 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Jared Rossi , Matthew Rosato , Eric Farman , Cornelia Huck Subject: [PULL 02/15] pc-bios/s390-ccw/virtio.c: Fix missing break for PCI notifications Date: Tue, 7 Jul 2026 14:58:34 +0200 Message-ID: <20260707125847.1785168-3-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429214880158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Add a break after calling the PCI specific notification function instead of falling through to the default case. Signed-off-by: Jared Rossi Reviewed-by: Matthew Rosato Fixes: d72fb5e6b2 ("pc-bios/s390-ccw: Add support for virtio-blk-pci IPL") Reviewed-by: Eric Farman Tested-by: Matthew Rosato Message-ID: <20260630141917.673995-3-jrossi@linux.ibm.com> Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/virtio.c | 1 + 1 file changed, 1 insertion(+) diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index a448dc96e269..7883871033c4 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -115,6 +115,7 @@ bool vring_notify(VRing *vr) break; case S390_IPL_TYPE_PCI: vr->cookie =3D virtio_pci_notify(vr->id); + break; default: return 1; } --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429294; cv=none; d=zohomail.com; s=zohoarc; b=GHREY9vo+kQw1L+x4w+tEzCNne2wUqKhks2IdpHfKO8Y6rVE4U+PDkQIGhFnRwcX7QM6VyY2XZytWzqOSsPq4pdsPek8sk3VBGhh8vpZp3L/ub4biWe+ii51BPBeTOGMnTBuxUxc1p6AQUcp8SW8F/QwY6a9X4w/z3DP0q3omZA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429294; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=as45FMgPC/EAdv1UJC4SuTL7F8DyT3XVV4d4m5Ik7Ho=; b=SFtz1/mL67hcorqKZ4ocF9b5K7tJ+wlx7oZm4W2WUdtN9KpJLTD9B5QrGSDvVJWPS30kmWsi7AvGUGysghnxKVqbmGOrZhwSu1T41tP9TyiJku4tus6KRSN67hIWK9oG3XPfaUSwmzPVzYjNm3c/ivkQeS/99k06KNP7zFigGoY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429294858177.5431776717561; Tue, 7 Jul 2026 06:01:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OI-0006NO-5l; Tue, 07 Jul 2026 08:59:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OG-0006MY-BQ for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:08 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OE-0006pZ-Mm for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:08 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-66-g5qWYYZFMde6C0WIkLrOAg-1; Tue, 07 Jul 2026 08:59:02 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 46FFD1954128; Tue, 7 Jul 2026 12:59:00 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5AF401956040; Tue, 7 Jul 2026 12:58:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429146; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=as45FMgPC/EAdv1UJC4SuTL7F8DyT3XVV4d4m5Ik7Ho=; b=LeDQI+5vY4zMTJKV7FLWMGk7YouwhqREWYissApAqW7SDo6IgJZCnbZw0bCQ7jYfdgO8jp L3GtwFgwzOlsAK4Cx9CI6HDOzX361upMRzMtsbu1Z0uSXcfAK1qSuc6ddzyJm8JM2qqI50 Vie7IY8k21emfTZZGK+fESB5gD8xrA0= X-MC-Unique: g5qWYYZFMde6C0WIkLrOAg-1 X-Mimecast-MFC-AGG-ID: g5qWYYZFMde6C0WIkLrOAg_1783429140 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Zhuoying Cai , Jared Rossi , Eric Farman , Matthew Rosato , Cornelia Huck Subject: [PULL 03/15] pc-bios/s390-ccw: Add per-queue notification offset for multi-queue virtio configurations Date: Tue, 7 Jul 2026 14:58:35 +0200 Message-ID: <20260707125847.1785168-4-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429295790158500 Content-Type: text/plain; charset="utf-8" From: Zhuoying Cai The initial support for virtio-blk-pci IPL devices used a single virt-queue= , but other device types require multiple queues, and for PCI device types this a= lso requires a per-queue notification offset. Add a PCI notify field to the VRing struct so that each queue has a unique notify offset as defined in the virtio spec. Signed-off-by: Zhuoying Cai Signed-off-by: Jared Rossi Reviewed-by: Eric Farman Tested-by: Matthew Rosato Message-ID: <20260630141917.673995-4-jrossi@linux.ibm.com> Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/virtio-pci.c | 38 +++++++++++++++++++++-------------- pc-bios/s390-ccw/virtio-pci.h | 2 +- pc-bios/s390-ccw/virtio.c | 2 +- pc-bios/s390-ccw/virtio.h | 1 + 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/pc-bios/s390-ccw/virtio-pci.c b/pc-bios/s390-ccw/virtio-pci.c index 53bdb52e76ab..2c83ec4f1316 100644 --- a/pc-bios/s390-ccw/virtio-pci.c +++ b/pc-bios/s390-ccw/virtio-pci.c @@ -21,7 +21,6 @@ VirtioPciCap c_cap; /* Common capabilities */ VirtioPciCap d_cap; /* Device capabilities */ VirtioPciCap n_cap; /* Notify capabilities */ uint32_t notify_mult; -uint16_t q_notify_offset; =20 static int virtio_pci_set_status(uint8_t status) { @@ -74,10 +73,10 @@ int virtio_pci_reset(VDev *vdev) return 0; } =20 -long virtio_pci_notify(int vq_id) +long virtio_pci_notify(VRing *vr) { - uint32_t offset =3D n_cap.off + notify_mult * q_notify_offset; - return vpci_bswap16_write(offset, n_cap.bar, (uint16_t) vq_id); + uint32_t offset =3D n_cap.off + notify_mult * vr->pci_notify; + return vpci_bswap16_write(offset, n_cap.bar, (uint16_t) vr->id); } =20 /* @@ -301,8 +300,7 @@ static int virtio_pci_read_pci_cap_config(void) } =20 rc =3D vpci_read_bswap32(pos + VPCI_N_CAP_MULT, PCI_CFGBAR, ¬ify_mu= lt); - if (rc || vpci_read_bswap16(c_cap.off + VPCI_C_OFFSET_Q_NOFF, c_cap.ba= r, - &q_notify_offset)) { + if (rc) { puts("Failed to read notification queue configuration"); return -EIO; } @@ -332,7 +330,6 @@ int virtio_pci_setup(VDev *vdev) VRing *vr; int rc; uint8_t status; - uint16_t vq_size; int i =3D 0; =20 vdev->guessed_disk_nature =3D VIRTIO_GDN_NONE; @@ -380,28 +377,39 @@ int virtio_pci_setup(VDev *vdev) return -EIO; } =20 - if (vpci_read_bswap16(VPCI_C_OFFSET_Q_SIZE, c_cap.bar, &vq_size)) { - puts("Failed to read virt-queue configuration"); - return -EIO; - } - /* Configure virt-queues for pci */ for (i =3D 0; i < vdev->nr_vqs; i++) { + uint16_t vq_size; + uint16_t vq_notify; VqInfo info =3D { .queue =3D (unsigned long long) virtio_get_ring_area(i), .align =3D KVM_S390_VIRTIO_RING_ALIGN, .index =3D i, - .num =3D vq_size, + .num =3D 0, }; =20 vr =3D &vdev->vrings[i]; - vring_init(vr, &info); =20 - if (vpci_set_selected_vq(vr->id)) { + if (vpci_set_selected_vq(i)) { puts("Failed to set selected virt-queue"); return -EIO; } =20 + if (vpci_read_bswap16(c_cap.off + VPCI_C_OFFSET_Q_SIZE, c_cap.bar,= &vq_size)) { + printf("Failed to read virt-queue %d size\n", i); + return -EIO; + } + + info.num =3D vq_size; + + if (vpci_read_bswap16(c_cap.off + VPCI_C_OFFSET_Q_NOFF, c_cap.bar,= &vq_notify)) { + printf("Failed to read virt-queue %d notify offset\n", i); + return -EIO; + } + + vr->pci_notify =3D vq_notify; + vring_init(vr, &info); + rc =3D set_pci_vq_addr(VPCI_C_OFFSET_Q_DESCLO, vr->desc); rc |=3D set_pci_vq_addr(VPCI_C_OFFSET_Q_AVAILLO, vr->avail); rc |=3D set_pci_vq_addr(VPCI_C_OFFSET_Q_USEDLO, vr->used); diff --git a/pc-bios/s390-ccw/virtio-pci.h b/pc-bios/s390-ccw/virtio-pci.h index 90d07cb9a76a..2494df161988 100644 --- a/pc-bios/s390-ccw/virtio-pci.h +++ b/pc-bios/s390-ccw/virtio-pci.h @@ -64,7 +64,7 @@ typedef struct VirtioPciCap VirtioPciCap; =20 void virtio_pci_id2type(VDev *vdev, uint16_t device_id); int virtio_pci_reset(VDev *vdev); -long virtio_pci_notify(int vq_id); +long virtio_pci_notify(VRing *vr); int virtio_pci_setup(VDev *vdev); int virtio_pci_setup_device(void); =20 diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 7883871033c4..df04479aa69c 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -114,7 +114,7 @@ bool vring_notify(VRing *vr) vr->cookie =3D virtio_ccw_notify(vdev.schid, vr->id, vr->cookie); break; case S390_IPL_TYPE_PCI: - vr->cookie =3D virtio_pci_notify(vr->id); + vr->cookie =3D virtio_pci_notify(vr); break; default: return 1; diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index d32a4830cad1..75ae5bdbc229 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -107,6 +107,7 @@ struct VRing { VRingUsed *used; long cookie; int id; + uint16_t pci_notify; }; typedef struct VRing VRing; =20 --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429198; cv=none; d=zohomail.com; s=zohoarc; b=EM/W6T7g6mbYWse7zCUXGX9+yQyaOGl1/h49AlRLSh+CyImka00WkNwp+rdb8pY6YFMqt7VbFDI+2pqwCmgGWJ5X5qKsQCtyQ7bHau8cqiPg/+cSIwyJBrUJ03ku7tPd2wHJsN0THkri215Wl8SgHk5UT9eVboC2YBOED8ifhDc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429198; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=GGKwFipSbKqAjFDhDL9UTMfRaEuYvJceC5CSkvod+vU=; b=hoM5dhtkvG4kdap6B4j1GA1WWf5/Yym7iqNzYDcVioUnd/DNjwYmCU9AYbkrXGaeFxWuljx/KxsfHemTmCR9LJ9mA5NmKbsHsmDgGcYbRikzyPaPFkLsofdG89KlausZtdTsKLrOkOiecg4xRW4CK/bH/0/+1eofSnAlkrm0G3U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429198653925.6304319714118; Tue, 7 Jul 2026 05:59:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OH-0006N3-Dt; Tue, 07 Jul 2026 08:59:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OG-0006MU-6M for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:08 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OE-0006p5-Kd for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:07 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-438-g9fMK4AeM0md_zg35cZaDw-1; Tue, 07 Jul 2026 08:59:04 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7ABA91805C1E; Tue, 7 Jul 2026 12:59:02 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id AA8621956040; Tue, 7 Jul 2026 12:59:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429145; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GGKwFipSbKqAjFDhDL9UTMfRaEuYvJceC5CSkvod+vU=; b=OO6maVaPH/8NrxzNGDVQ85rkq0gGCPXQw7RSMiMiFcNpbchTG6VJTnI/V1w3p+D6jyjfMo iBpOKjwzvfEQnWejIleyDjfaSN9xuPCSe8nwhpO1oWH2Eu+D7xhxH5rYlhvs0gvQEvQSxT SpZtCT0zIzI8pWWKmtm+0LIvmtGaH+U= X-MC-Unique: g9fMK4AeM0md_zg35cZaDw-1 X-Mimecast-MFC-AGG-ID: g9fMK4AeM0md_zg35cZaDw_1783429142 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Jared Rossi , Eric Farman , Matthew Rosato , Cornelia Huck Subject: [PULL 04/15] pc-bios/s390-ccw: Verify virtio support when booting from virtio PCI device on s390x Date: Tue, 7 Jul 2026 14:58:36 +0200 Message-ID: <20260707125847.1785168-5-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429200028158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi The virtio specification requires that each PCI device has a vendor ID of 0x1af4. Verify this value before continuing with boot process. Signed-off-by: Jared Rossi Reviewed-by: Eric Farman Tested-by: Matthew Rosato Message-ID: <20260630141917.673995-5-jrossi@linux.ibm.com> Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/main.c | 1 + pc-bios/s390-ccw/virtio-pci.c | 19 +++++++++++++++++++ pc-bios/s390-ccw/virtio-pci.h | 3 +++ pc-bios/s390-ccw/virtio.c | 2 ++ pc-bios/s390-ccw/virtio.h | 1 + 5 files changed, 26 insertions(+) diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 26287cfd8112..fb47d29bb1f2 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -163,6 +163,7 @@ static bool find_fid(uint32_t fid) } =20 vdev->pci_fh =3D entry.fh; + vdev->vendor_id =3D entry.vendor_id; virtio_pci_id2type(vdev, entry.device_id); =20 return vdev->dev_type !=3D 0; diff --git a/pc-bios/s390-ccw/virtio-pci.c b/pc-bios/s390-ccw/virtio-pci.c index 2c83ec4f1316..f501252c8199 100644 --- a/pc-bios/s390-ccw/virtio-pci.c +++ b/pc-bios/s390-ccw/virtio-pci.c @@ -325,6 +325,20 @@ static int enable_pci_bus_master(void) return 0; } =20 +bool virtio_pci_is_supported(VDev *vdev) +{ + if (vdev->vendor_id =3D=3D PCI_VENDOR_VIRTIO) { + switch (vdev->dev_type) { + case VIRTIO_ID_BLOCK: + return true; + default: + return false; + } + } + + return false; +} + int virtio_pci_setup(VDev *vdev) { VRing *vr; @@ -335,6 +349,11 @@ int virtio_pci_setup(VDev *vdev) vdev->guessed_disk_nature =3D VIRTIO_GDN_NONE; vdev->cmd_vr_idx =3D 0; =20 + if (!virtio_pci_is_supported(vdev)) { + puts("Virtio PCI unsupported for this device ID"); + return -ENODEV; + } + if (virtio_pci_read_pci_cap_config()) { puts("Invalid virtio PCI capabilities"); return -EIO; diff --git a/pc-bios/s390-ccw/virtio-pci.h b/pc-bios/s390-ccw/virtio-pci.h index 2494df161988..33b683bd922c 100644 --- a/pc-bios/s390-ccw/virtio-pci.h +++ b/pc-bios/s390-ccw/virtio-pci.h @@ -56,6 +56,8 @@ =20 #define VIRTIO_F_VERSION_1 1 /* Feature bit 32 */ =20 +#define PCI_VENDOR_VIRTIO 0x1af4 + struct VirtioPciCap { uint8_t bar; /* Which PCIAS it's in */ uint32_t off; /* Offset within bar */ @@ -65,6 +67,7 @@ typedef struct VirtioPciCap VirtioPciCap; void virtio_pci_id2type(VDev *vdev, uint16_t device_id); int virtio_pci_reset(VDev *vdev); long virtio_pci_notify(VRing *vr); +bool virtio_pci_is_supported(VDev *vdev); int virtio_pci_setup(VDev *vdev); int virtio_pci_setup_device(void); =20 diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index df04479aa69c..a0d249db2408 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -247,6 +247,8 @@ bool virtio_is_supported(VDev *vdev) case S390_IPL_TYPE_QEMU_SCSI: case S390_IPL_TYPE_CCW: return virtio_ccw_is_supported(vdev); + case S390_IPL_TYPE_PCI: + return virtio_pci_is_supported(vdev); default: return false; } diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 75ae5bdbc229..aa307025e0f5 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -259,6 +259,7 @@ struct VDev { bool scsi_device_selected; ScsiDevice selected_scsi_device; uint32_t pci_fh; + uint16_t vendor_id; uint32_t max_transfer; uint32_t guest_features[2]; }; --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429358; cv=none; d=zohomail.com; s=zohoarc; b=iTuTiw7JG4ELQC2HyY/6S3E9hQO9qX81eWYWDXJgUieInM7XGxa82ayu2h8ih66OqyyZf9OTQkhizlS308q866vtiFJcCCo207uTdYVebjPD1+EAMyLq/8JixqHsH5TaUfiBJtdaBXuWmnYLblqIsv+oedlNhJvDvdMXoe3YxAQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429358; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=y0MsinMrsw1Oeu5E3QZ3WnM5GtGatRv2OEk/DgzNYnE=; b=Myeh72foyRyHBdO8hwePAJISapRGSokxlJ4V/6f65D+FG7CzZwuAjVfrJn5QP2m+ydSazcUT/hAHeYY0qw+wk7VDAxgO/P1xazQBMXI340Do1MF1vW+RJ+Xxj13CyXGfO4hTEAIZ6C0G5DvvD0AlD7KNrxc+E3Bjhm+7hMXbw24= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429358823424.98216155018326; Tue, 7 Jul 2026 06:02:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OI-0006Nk-Qf; Tue, 07 Jul 2026 08:59:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OH-0006N6-JK for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:09 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OG-0006sT-7f for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:09 -0400 Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-350-qV51VXBYN-66YKND_IDjLw-1; Tue, 07 Jul 2026 08:59:06 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 026AA1944DC5; Tue, 7 Jul 2026 12:59:05 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C636C1956040; Tue, 7 Jul 2026 12:59:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429147; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y0MsinMrsw1Oeu5E3QZ3WnM5GtGatRv2OEk/DgzNYnE=; b=SklYU1tsYG8BbSr020U8MjxoSvfGbdfaqCsi2yweUOh0FnZI9BzPaE6/eBTeRultaeGXe+ CaZMA0DlZrTbpAZELy2+OMCK8eAb9G0qXli/NfNb/QEnPjxYcdwg7kaWZTo8XpOzMYrTp0 iwUxh4nknnThKSvu/QcsGS8/x6rQ7ME= X-MC-Unique: qV51VXBYN-66YKND_IDjLw-1 X-Mimecast-MFC-AGG-ID: qV51VXBYN-66YKND_IDjLw_1783429145 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Jared Rossi , Eric Farman , Matthew Rosato , Cornelia Huck Subject: [PULL 05/15] pc-bios/s390-ccw: write IPLB location for non-net virtio devices Date: Tue, 7 Jul 2026 14:58:37 +0200 Message-ID: <20260707125847.1785168-6-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429363120158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi When IPL type is PCI, cutype is unknown, so the IPLB location does not get written to lowcore. Instead of checking cutype, check if the device is virtio generically, which covers both CCW and PCI variants. Net devices are excluded. Signed-off-by: Jared Rossi Reviewed-by: Eric Farman Tested-by: Matthew Rosato Message-ID: <20260630141917.673995-6-jrossi@linux.ibm.com> Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index fb47d29bb1f2..9c147ac5fa55 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -52,7 +52,8 @@ void write_subsystem_identification(void) =20 void write_iplb_location(void) { - if (cutype =3D=3D CU_TYPE_VIRTIO && virtio_get_device_type() !=3D VIRT= IO_ID_NET) { + if (virtio_is_supported(virtio_get_device()) && + virtio_get_device_type() !=3D VIRTIO_ID_NET) { lowcore->ptr_iplb =3D ptr2u32(&iplb); } } --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429192; cv=none; d=zohomail.com; s=zohoarc; b=KJedWz09KLYc3VkLNvUgqj8zq437WGXG5gkzPt2PbCmIdy3J9Ft5UxEnuvgWsYl4IjxetdY3msSU/RLHMNIa1t87xsTqsqWIML+9AXu/VzQh8kctWhvbIyehHTO0G7qeC/ltc4+odOZRmAgqxKlGBuxl2eB5/IKHNYq35L9TAGU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429192; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TGCyaYynnI6hDK1N1IzTomR8NDUsd+rtNv4W3w/VZCk=; b=I26pai21J3W32acP29pLAPiByzgVosUgWp4pkhPOb0rMvf+SRvZSrJu3sDQ1PtuF1TcgI7Vi66zMRhT8CEMABrS8UTj5XspeqvHTzgzHIkeP5lZ5AuUNLoUdC7eA5zWHFfPxy81Kd8ZGook8ISJjlNFozqKqti/eMEBM4WUI7bU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429192303963.0812518523397; Tue, 7 Jul 2026 05:59:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OO-0006ZX-GM; Tue, 07 Jul 2026 08:59:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OM-0006Us-Rk for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:14 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OL-00074a-FL for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:14 -0400 Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-647-bFykp-6tP7OPpqf5ttwkRg-1; Tue, 07 Jul 2026 08:59:08 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 50FCE1955D4E; Tue, 7 Jul 2026 12:59:07 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 642C41956040; Tue, 7 Jul 2026 12:59:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429152; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TGCyaYynnI6hDK1N1IzTomR8NDUsd+rtNv4W3w/VZCk=; b=YCVWkTPI/BaB11Cg2n4P8zbbtKuyhUaW3AJq0wY75TZmILMCocXki/ip9IwVeNjg9aXoFm 9Yt5UGNdifx0NSCcB6nzC1hZHUiREOergSKiEvLScEZk88q7vW6gbgvzT8L79qhZWpnp5x OVjJe532WWfY8e/rgwIIgY6aX3cH1Dw= X-MC-Unique: bFykp-6tP7OPpqf5ttwkRg-1 X-Mimecast-MFC-AGG-ID: bFykp-6tP7OPpqf5ttwkRg_1783429147 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Zhuoying Cai , Eric Farman , Jared Rossi , Matthew Rosato , Cornelia Huck Subject: [PULL 06/15] s390x: Enable boot menu for virtio pci device Date: Tue, 7 Jul 2026 14:58:38 +0200 Message-ID: <20260707125847.1785168-7-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429193932158500 Content-Type: text/plain; charset="utf-8" From: Zhuoying Cai Add S390_IPL_TYPE_PCI to the boot menu handling logic to enable interactive boot menu support for virtio PCI devices on s390x. Reviewed-by: Eric Farman Signed-off-by: Zhuoying Cai Signed-off-by: Jared Rossi Reviewed-by: Matthew Rosato Tested-by: Matthew Rosato Message-ID: <20260630141917.673995-7-jrossi@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/ipl.c | 1 + pc-bios/s390-ccw/main.c | 1 + 2 files changed, 2 insertions(+) diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 4cca21c62175..d5fdc3ea0ff4 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -315,6 +315,7 @@ static void s390_ipl_set_boot_menu(S390IPLState *ipl) return; } break; + case S390_IPL_TYPE_PCI: case S390_IPL_TYPE_QEMU_SCSI: break; default: diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 9c147ac5fa55..8bc6e8eaa3e3 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -185,6 +185,7 @@ static void menu_setup(VDev *vdev) =20 switch (vdev->ipl_type) { case S390_IPL_TYPE_CCW: + case S390_IPL_TYPE_PCI: case S390_IPL_TYPE_QEMU_SCSI: menu_set_parms(qipl.qipl_flags & BOOT_MENU_FLAG_MASK, qipl.boot_menu_timeout); --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429246; cv=none; d=zohomail.com; s=zohoarc; b=YP5XuS38PCTgsrLwi/px3xf6shZZSOgl4/SbCjhB1Ioa8+4Ba/cV1lqAUyueQDwuha1LMvqKJP7m5XGL6JGVaiWbrINBnZAVsl9B99AibHE99xiBMbvA2gGvQ0+2GB4aRNnGZJLQdatJ/ViFsghx5/xGb9GFkKIpiUyHJWL1jSY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429246; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=H9ZuO5+b2bhxyOUcB0ZsLfAlgrBUbD3M8SOKvwNVUWs=; b=WFcNZBlD/OG38dISXLmixf7Bo/rPIZ1hAOstPSw7hf8hQWx4PxewDis40OxiLCBuqZKKEByOvHiG/aDevxXbK8aLFZv4tmfn/nuECrk75qsVNhBPLO1gKz9qSVEPHSwYIyLiLJkz6ZONQZaaXVtrC3K3JQwg27+YJ671gB8eoz8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429246035664.9107400540845; Tue, 7 Jul 2026 06:00:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OQ-0006gf-LL; Tue, 07 Jul 2026 08:59:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OO-0006Zh-G8 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:16 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OL-00075g-Ux for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:16 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-281-XHiXUh0SNVOm3rX2XuapIw-1; Tue, 07 Jul 2026 08:59:10 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 05FC518002C5; Tue, 7 Jul 2026 12:59:09 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id B3B881956040; Tue, 7 Jul 2026 12:59:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429153; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=H9ZuO5+b2bhxyOUcB0ZsLfAlgrBUbD3M8SOKvwNVUWs=; b=Rr3u2Qj4Tlf4R7nM9WOkSbtrJevTdPOiMp8dJI8UbSA6Msm4oTGlD3Zr77nQ+bUarFqlXw 1NVaBAruwYlXnFhYyL3fVPKEp3osrlROyqLyGW3ezXme32T9oH8mixe4RSuUbHvnYVNSGR Nz7uG8TbH76MXQ7ojKUqcYNRV2Xl0Jw= X-MC-Unique: XHiXUh0SNVOm3rX2XuapIw-1 X-Mimecast-MFC-AGG-ID: XHiXUh0SNVOm3rX2XuapIw_1783429149 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Christoph Schlameuss , Cornelia Huck Subject: [PULL 07/15] linux-headers: Update to Linux v7.2-rc1 with KVM_S390_VM_CPU_FEAT_ASTFLEIE2 Date: Tue, 7 Jul 2026 14:58:39 +0200 Message-ID: <20260707125847.1785168-8-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429247666158500 Content-Type: text/plain; charset="utf-8" From: Christoph Schlameuss Update headers to retrieve new architecture feature definitions. KVM_S390_VM_CPU_FEAT_ASTFLEIE2 is specifically needed here. Signed-off-by: Christoph Schlameuss Message-ID: <20260701-astfleie2-v3-1-f692dc7f4f24@linux.ibm.com> Signed-off-by: Cornelia Huck --- include/standard-headers/drm/drm_fourcc.h | 54 +++++++------ include/standard-headers/linux/ethtool.h | 3 + include/standard-headers/linux/pci_regs.h | 2 + include/standard-headers/linux/virtio_can.h | 78 +++++++++++++++++++ .../standard-headers/linux/virtio_console.h | 2 +- include/standard-headers/linux/virtio_gpu.h | 9 +++ linux-headers/asm-s390/kvm.h | 1 + linux-headers/asm-x86/kvm.h | 2 + linux-headers/linux/iommufd.h | 12 ++- linux-headers/linux/kvm.h | 1 + 10 files changed, 137 insertions(+), 27 deletions(-) create mode 100644 include/standard-headers/linux/virtio_can.h diff --git a/include/standard-headers/drm/drm_fourcc.h b/include/standard-h= eaders/drm/drm_fourcc.h index 4bad457cc2d1..2ba0b5c92502 100644 --- a/include/standard-headers/drm/drm_fourcc.h +++ b/include/standard-headers/drm/drm_fourcc.h @@ -1,24 +1,6 @@ +/* SPDX-License-Identifier: MIT */ /* * Copyright 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software= "), - * to deal in the Software without restriction, including without limitati= on - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the ne= xt - * paragraph) shall be included in all copies or substantial portions of t= he - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES = OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. */ =20 #ifndef DRM_FOURCC_H @@ -241,9 +223,9 @@ extern "C" { * [31:0] sign:exponent:mantissa 1:8:23 */ #define DRM_FORMAT_R32F fourcc_code('R', ' ', ' ', 'F') /* [31:0]= R 32 little endian */ -#define DRM_FORMAT_GR3232F fourcc_code('G', 'R', ' ', 'F') /* [63:0]= R:G 32:32 little endian */ -#define DRM_FORMAT_BGR323232F fourcc_code('B', 'G', 'R', 'F') /* [95:0]= R:G:B 32:32:32 little endian */ -#define DRM_FORMAT_ABGR32323232F fourcc_code('A', 'B', '8', 'F') /* [127:0= ] R:G:B:A 32:32:32:32 little endian */ +#define DRM_FORMAT_GR3232F fourcc_code('G', 'R', ' ', 'F') /* [63:0]= G:R 32:32 little endian */ +#define DRM_FORMAT_BGR323232F fourcc_code('B', 'G', 'R', 'F') /* [95:0]= B:G:R 32:32:32 little endian */ +#define DRM_FORMAT_ABGR32323232F fourcc_code('A', 'B', '8', 'F') /* [127:0= ] A:B:G:R 32:32:32:32 little endian */ =20 /* * RGBA format with 10-bit components packed in 64-bit per pixel, with 6 b= its @@ -263,6 +245,7 @@ extern "C" { #define DRM_FORMAT_XVUY8888 fourcc_code('X', 'V', 'U', 'Y') /* [31:0] X:Cr= :Cb:Y 8:8:8:8 little endian */ #define DRM_FORMAT_VUY888 fourcc_code('V', 'U', '2', '4') /* [23:0] Cr:Cb:= Y 8:8:8 little endian */ #define DRM_FORMAT_VUY101010 fourcc_code('V', 'U', '3', '0') /* Y followed= by U then V, 10:10:10. Non-linear modifier only */ +#define DRM_FORMAT_XVUY2101010 fourcc_code('X', 'Y', '3', '0') /* [31:0] x= :Cr:Cb:Y 2:10:10:10 little endian */ =20 /* * packed Y2xx indicate for each component, xx valid data occupy msb @@ -378,6 +361,14 @@ extern "C" { */ #define DRM_FORMAT_P030 fourcc_code('P', '0', '3', '0') /* 2x2 subsampled= Cr:Cb plane 10 bits per channel packed */ =20 +/* + * 2 plane YCbCr422. + * 3 10 bit components and 2 padding bits packed into 4 bytes. + * index 0 =3D Y plane, [31:0] x:Y2:Y1:Y0 2:10:10:10 little endian + * index 1 =3D Cr:Cb plane, [63:0] x:Cr2:Cb2:Cr1:x:Cb1:Cr0:Cb0 [2:10:10:10= :2:10:10:10] little endian + */ +#define DRM_FORMAT_P230 fourcc_code('P', '2', '3', '0') /* 2x1 subsampled= Cr:Cb plane 10 bits per channel packed */ + /* 3 plane non-subsampled (444) YCbCr * 16 bits per component, but only 10 bits are used and 6 bits are padded * index 0: Y plane, [15:0] Y:x [10:6] little endian @@ -394,6 +385,15 @@ extern "C" { */ #define DRM_FORMAT_Q401 fourcc_code('Q', '4', '0', '1') =20 +/* + * 3 plane non-subsampled (444) YCbCr LSB aligned + * 10 bpc, 30 bits per sample image data in a single contiguous buffer. + * index 0: Y plane, [31:0] x:Y2:Y1:Y0 [2:10:10:10] little endian + * index 1: Cb plane, [31:0] x:Cb2:Cb1:Cb0 [2:10:10:10] little endian + * index 2: Cr plane, [31:0] x:Cr2:Cr1:Cr0 [2:10:10:10] little endian + */ +#define DRM_FORMAT_T430 fourcc_code('T', '4', '3', '0') + /* * 3 plane YCbCr LSB aligned * In order to use these formats in a similar fashion to MSB aligned ones @@ -450,6 +450,16 @@ extern "C" { #define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsample= d Cb (1) and Cr (2) planes */ #define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsample= d Cr (1) and Cb (2) planes */ =20 +/* + * Y-only (greyscale) formats + * + * The Y-only formats are handled similarly to the YCbCr formats in the di= splay + * pipeline, with the Cb and Cr implicitly neutral (0.0 in nominal values)= . This + * also means that COLOR_RANGE property applies to the Y-only formats. + */ + +#define DRM_FORMAT_Y8 fourcc_code('G', 'R', 'E', 'Y') /* 8-bit Y-only */ +#define DRM_FORMAT_XYYY2101010 fourcc_code('Y', 'P', 'A', '4') /* [31:0] = x:Y2:Y1:Y0 2:10:10:10 little endian */ =20 /* * Format Modifiers: diff --git a/include/standard-headers/linux/ethtool.h b/include/standard-he= aders/linux/ethtool.h index 5d82126cd7e8..55f608c3a792 100644 --- a/include/standard-headers/linux/ethtool.h +++ b/include/standard-headers/linux/ethtool.h @@ -293,6 +293,9 @@ enum phy_tunable_id { ETHTOOL_PHY_DOWNSHIFT, ETHTOOL_PHY_FAST_LINK_DOWN, ETHTOOL_PHY_EDPD, + ETHTOOL_PHY_SHORT_CABLE_PRESET, + ETHTOOL_PHY_LPF_BW, + ETHTOOL_PHY_DSP_EQ_INIT_VALUE, /* * Add your fresh new phy tunable attribute above and remember to update * phy_tunable_strings[] in net/ethtool/common.c diff --git a/include/standard-headers/linux/pci_regs.h b/include/standard-h= eaders/linux/pci_regs.h index 14f634ab9350..facaa324bd86 100644 --- a/include/standard-headers/linux/pci_regs.h +++ b/include/standard-headers/linux/pci_regs.h @@ -1349,6 +1349,7 @@ /* CXL r4.0, 8.1.3: PCIe DVSEC for CXL Device */ #define PCI_DVSEC_CXL_DEVICE 0 #define PCI_DVSEC_CXL_CAP 0xA +#define PCI_DVSEC_CXL_CACHE_CAPABLE _BITUL(0) #define PCI_DVSEC_CXL_MEM_CAPABLE _BITUL(2) #define PCI_DVSEC_CXL_HDM_COUNT __GENMASK(5, 4) #define PCI_DVSEC_CXL_CTRL 0xC @@ -1357,6 +1358,7 @@ #define PCI_DVSEC_CXL_RANGE_SIZE_LOW(i) (0x1C + (i * 0x10)) #define PCI_DVSEC_CXL_MEM_INFO_VALID _BITUL(0) #define PCI_DVSEC_CXL_MEM_ACTIVE _BITUL(1) +#define PCI_DVSEC_CXL_MEM_ACTIVE_TIMEOUT __GENMASK(15, 13) #define PCI_DVSEC_CXL_MEM_SIZE_LOW __GENMASK(31, 28) #define PCI_DVSEC_CXL_RANGE_BASE_HIGH(i) (0x20 + (i * 0x10)) #define PCI_DVSEC_CXL_RANGE_BASE_LOW(i) (0x24 + (i * 0x10)) diff --git a/include/standard-headers/linux/virtio_can.h b/include/standard= -headers/linux/virtio_can.h new file mode 100644 index 000000000000..df7f460d1f96 --- /dev/null +++ b/include/standard-headers/linux/virtio_can.h @@ -0,0 +1,78 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +/* + * Copyright (C) 2021-2023 OpenSynergy GmbH + * Copyright Red Hat, Inc. 2025 + */ +#ifndef _LINUX_VIRTIO_VIRTIO_CAN_H +#define _LINUX_VIRTIO_VIRTIO_CAN_H + +#include "standard-headers/linux/types.h" +#include "standard-headers/linux/virtio_types.h" +#include "standard-headers/linux/virtio_ids.h" +#include "standard-headers/linux/virtio_config.h" + +/* Feature bit numbers */ +#define VIRTIO_CAN_F_CAN_CLASSIC 0 +#define VIRTIO_CAN_F_CAN_FD 1 +#define VIRTIO_CAN_F_RTR_FRAMES 2 +#define VIRTIO_CAN_F_LATE_TX_ACK 3 + +/* CAN Result Types */ +#define VIRTIO_CAN_RESULT_OK 0 +#define VIRTIO_CAN_RESULT_NOT_OK 1 + +/* CAN flags to determine type of CAN Id */ +#define VIRTIO_CAN_FLAGS_EXTENDED 0x8000 +#define VIRTIO_CAN_FLAGS_FD 0x4000 +#define VIRTIO_CAN_FLAGS_RTR 0x2000 + +#define VIRTIO_CAN_MAX_DLEN 64 /* this is like CANFD_MAX_DLEN */ + +struct virtio_can_config { +#define VIRTIO_CAN_S_CTRL_BUSOFF (1u << 0) /* Controller BusOff */ + /* CAN controller status */ + uint16_t status; +}; + +/* TX queue message types */ +struct virtio_can_tx_out { +#define VIRTIO_CAN_TX 0x0001 + uint16_t msg_type; + uint16_t length; /* 0..8 CC, 0..64 CAN-FD, 0..2048 CAN-XL, 12 bits */ + uint8_t reserved_classic_dlc; /* If CAN classic length =3D 8 then DLC can= be 8..15 */ + uint8_t padding; + uint16_t reserved_xl_priority; /* May be needed for CAN XL priority */ + uint32_t flags; + uint32_t can_id; + uint8_t sdu[] __counted_by_le(length); +}; + +struct virtio_can_tx_in { + uint8_t result; +}; + +/* RX queue message types */ +struct virtio_can_rx { +#define VIRTIO_CAN_RX 0x0101 + uint16_t msg_type; + uint16_t length; /* 0..8 CC, 0..64 CAN-FD, 0..2048 CAN-XL, 12 bits */ + uint8_t reserved_classic_dlc; /* If CAN classic length =3D 8 then DLC can= be 8..15 */ + uint8_t padding; + uint16_t reserved_xl_priority; /* May be needed for CAN XL priority */ + uint32_t flags; + uint32_t can_id; + uint8_t sdu[] __counted_by_le(length); +}; + +/* Control queue message types */ +struct virtio_can_control_out { +#define VIRTIO_CAN_SET_CTRL_MODE_START 0x0201 +#define VIRTIO_CAN_SET_CTRL_MODE_STOP 0x0202 + uint16_t msg_type; +}; + +struct virtio_can_control_in { + uint8_t result; +}; + +#endif /* #ifndef _LINUX_VIRTIO_VIRTIO_CAN_H */ diff --git a/include/standard-headers/linux/virtio_console.h b/include/stan= dard-headers/linux/virtio_console.h index 71f5f648e3ce..8cba52198a15 100644 --- a/include/standard-headers/linux/virtio_console.h +++ b/include/standard-headers/linux/virtio_console.h @@ -44,7 +44,7 @@ #define VIRTIO_CONSOLE_BAD_ID (~(uint32_t)0) =20 struct virtio_console_config { - /* colums of the screens */ + /* columns of the screens */ __virtio16 cols; /* rows of the screens */ __virtio16 rows; diff --git a/include/standard-headers/linux/virtio_gpu.h b/include/standard= -headers/linux/virtio_gpu.h index 00cd3f04af94..c67f50f56cd1 100644 --- a/include/standard-headers/linux/virtio_gpu.h +++ b/include/standard-headers/linux/virtio_gpu.h @@ -64,6 +64,14 @@ * context_init and multiple timelines */ #define VIRTIO_GPU_F_CONTEXT_INIT 4 +/* + * The device provides a valid blob_alignment + * field in its configuration and both + * VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB and + * VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB requests + * must be aligned to that value. + */ +#define VIRTIO_GPU_F_BLOB_ALIGNMENT 5 =20 enum virtio_gpu_ctrl_type { VIRTIO_GPU_UNDEFINED =3D 0, @@ -365,6 +373,7 @@ struct virtio_gpu_config { uint32_t events_clear; uint32_t num_scanouts; uint32_t num_capsets; + uint32_t blob_alignment; }; =20 /* simple formats for fbcon/X use */ diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h index ab5a6bce590c..45a6d0a7406a 100644 --- a/linux-headers/asm-s390/kvm.h +++ b/linux-headers/asm-s390/kvm.h @@ -444,6 +444,7 @@ struct kvm_s390_vm_cpu_machine { #define KVM_S390_VM_CPU_FEAT_PFMFI 11 #define KVM_S390_VM_CPU_FEAT_SIGPIF 12 #define KVM_S390_VM_CPU_FEAT_KSS 13 +#define KVM_S390_VM_CPU_FEAT_ASTFLEIE2 14 struct kvm_s390_vm_cpu_feat { __u64 feat[16]; }; diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h index 01d46e29294f..a8a2558abaaa 100644 --- a/linux-headers/asm-x86/kvm.h +++ b/linux-headers/asm-x86/kvm.h @@ -475,6 +475,7 @@ struct kvm_sync_regs { #define KVM_X86_QUIRK_STUFF_FEATURE_MSRS (1 << 8) #define KVM_X86_QUIRK_IGNORE_GUEST_PAT (1 << 9) #define KVM_X86_QUIRK_VMCS12_ALLOW_FREEZE_IN_SMM (1 << 10) +#define KVM_X86_QUIRK_NESTED_SVM_SHARED_PAT (1 << 11) =20 #define KVM_STATE_NESTED_FORMAT_VMX 0 #define KVM_STATE_NESTED_FORMAT_SVM 1 @@ -530,6 +531,7 @@ struct kvm_svm_nested_state_data { =20 struct kvm_svm_nested_state_hdr { __u64 vmcb_pa; + __u64 gpat; }; =20 /* for KVM_CAP_NESTED_STATE */ diff --git a/linux-headers/linux/iommufd.h b/linux-headers/linux/iommufd.h index 82587c7d625a..10c600d71e42 100644 --- a/linux-headers/linux/iommufd.h +++ b/linux-headers/linux/iommufd.h @@ -224,13 +224,17 @@ struct iommu_ioas_map { * @size: sizeof(struct iommu_ioas_map_file) * @flags: same as for iommu_ioas_map * @ioas_id: same as for iommu_ioas_map - * @fd: the memfd to map - * @start: byte offset from start of file to map from + * @fd: the memfd or supported dma-buf file to map + * @start: byte offset from start of the file to map from * @length: same as for iommu_ioas_map * @iova: same as for iommu_ioas_map * - * Set an IOVA mapping from a memfd file. All other arguments and semanti= cs - * match those of IOMMU_IOAS_MAP. + * Set an IOVA mapping from a memfd file. On kernels with dma-buf support, + * supported dma-buf files may also be accepted. This is not a generic + * dma-buf import path; currently supported dma-bufs include single-range + * VFIO PCI dma-bufs exported through VFIO_DEVICE_FEATURE_DMA_BUF, and + * other dma-bufs may be rejected. All other arguments and semantics match + * those of IOMMU_IOAS_MAP. */ struct iommu_ioas_map_file { __u32 size; diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h index 50e87ed72c20..dd52e2a65bfd 100644 --- a/linux-headers/linux/kvm.h +++ b/linux-headers/linux/kvm.h @@ -985,6 +985,7 @@ struct kvm_enable_cap { #define KVM_CAP_S390_USER_OPEREXEC 246 #define KVM_CAP_S390_KEYOP 247 #define KVM_CAP_S390_VSIE_ESAMODE 248 +#define KVM_CAP_S390_HPAGE_2G 249 =20 struct kvm_irq_routing_irqchip { __u32 irqchip; --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429265; cv=none; d=zohomail.com; s=zohoarc; b=jKn2pSMxXHS7YfsY4+ESeGoHYB21JzP1gLJqkM0K9Q4t0e2DfJTdR1Oe6Jfjc9o+a9OsRFvq8JcEGCOfOvZMQVdJ4Tq2AgLJ2CSe8O9sHOUPV5Nxgty/anUGCC8ZP5XEGwtgfxYne3/yCAkKY900v1MLQfV+EsALoM8ElCyLmmA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429265; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cP38TrfseWfxNY2kprSWcDunP7+jEtM4OABSvDAZxdM=; b=U/ZYNsb7UtdWpyOTOnN1FwGg/mNDqSvYaP08AFjb5g5KapMxCxF5lavuV94XwEE6ohXcibDKB+28j2ZnY5OOuCFez2tgU6dGPfdkol3s+4lrQ8ThmG6aSWZiFO62a0x3LgsM8Nq+snmCCNN7Y0NMmMBpp+O577RbAI7n2Ienlj4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429265706544.2257394763669; Tue, 7 Jul 2026 06:01:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OR-0006ie-Ep; Tue, 07 Jul 2026 08:59:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OP-0006e3-Ju for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:17 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5ON-00079v-R6 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:17 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-196-oVJ7E3IHNJWgLGRlnP-74g-1; Tue, 07 Jul 2026 08:59:12 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E350B19540C9; Tue, 7 Jul 2026 12:59:10 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6922A1956040; Tue, 7 Jul 2026 12:59:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429155; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cP38TrfseWfxNY2kprSWcDunP7+jEtM4OABSvDAZxdM=; b=fNuc0lSrBEiu100U6lpA3Z8Ggji+Lqy4jSMRWjrnUnDFt1eaQquw3DyR6hcUXX2LQ1hyGi Y78pA7j8K9qW9AjlQi21nDoJvEJbJnggtLqLDqvBkelpEqdWbr9PA+V0HlCh1MyYBUp0Qq SKBiQkw+wDL0imv54xM27ibdQoQ4wC4= X-MC-Unique: oVJ7E3IHNJWgLGRlnP-74g-1 X-Mimecast-MFC-AGG-ID: oVJ7E3IHNJWgLGRlnP-74g_1783429151 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Christoph Schlameuss , Nina Schoetterl-Glausch , Cornelia Huck Subject: [PULL 08/15] s390x/kvm: Add ASTFLE facility 2 for nested virtualization Date: Tue, 7 Jul 2026 14:58:40 +0200 Message-ID: <20260707125847.1785168-9-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429267518158500 Content-Type: text/plain; charset="utf-8" From: Christoph Schlameuss Allow propagation of the ASTFLEIE2 feature bit. If the host does have the ASTFLE Interpretive Execution Facility 2 the guest can enable the ASTFLE format 2 for its guests. Signed-off-by: Christoph Schlameuss Reviewed-by: Nina Schoetterl-Glausch Message-ID: <20260701-astfleie2-v3-2-f692dc7f4f24@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/sclp.c | 2 ++ include/hw/s390x/sclp.h | 4 +++- target/s390x/cpu_features.c | 3 +++ target/s390x/cpu_features.h | 1 + target/s390x/cpu_features_def.h.inc | 3 +++ target/s390x/cpu_models.c | 2 ++ target/s390x/gen-features.c | 1 + target/s390x/kvm/kvm.c | 1 + 8 files changed, 16 insertions(+), 1 deletion(-) diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c index b9c3983df195..2d2cde7803ff 100644 --- a/hw/s390x/sclp.c +++ b/hw/s390x/sclp.c @@ -146,6 +146,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb) if (s390_has_feat(S390_FEAT_EXTENDED_LENGTH_SCCB)) { s390_get_feat_block(S390_FEAT_TYPE_SCLP_FAC134, &read_info->fac134); + s390_get_feat_block(S390_FEAT_TYPE_SCLP_FAC139, + &read_info->fac139); } =20 read_info->facilities =3D cpu_to_be64(SCLP_HAS_CPU_INFO | diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h index ddc61f1c2148..e1f9b0f6bc10 100644 --- a/include/hw/s390x/sclp.h +++ b/include/hw/s390x/sclp.h @@ -136,7 +136,9 @@ typedef struct ReadInfo { uint32_t hmfai; uint8_t _reserved7[134 - 128]; /* 128-133 */ uint8_t fac134; - uint8_t _reserved8[144 - 135]; /* 135-143 */ + uint8_t _reserved8[139 - 135]; /* 135-138 */ + uint8_t fac139; + uint8_t _reserved9[144 - 140]; /* 140-143 */ struct CPUEntry entries[]; /* * When the Extended-Length SCCB (ELS) feature is enabled the diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c index 4b5be6798ef5..896914888aa9 100644 --- a/target/s390x/cpu_features.c +++ b/target/s390x/cpu_features.c @@ -148,6 +148,9 @@ void s390_fill_feat_block(const S390FeatBitmap features= , S390FeatType type, case S390_FEAT_TYPE_SCLP_FAC134: clear_be_bit(s390_feat_def(S390_FEAT_DIAG_318)->bit, data); break; + case S390_FEAT_TYPE_SCLP_FAC139: + clear_be_bit(s390_feat_def(S390_FEAT_SIE_ASTFLEIE2)->bit, data); + break; default: return; } diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h index 5635839d0329..52a82da751ec 100644 --- a/target/s390x/cpu_features.h +++ b/target/s390x/cpu_features.h @@ -24,6 +24,7 @@ typedef enum { S390_FEAT_TYPE_SCLP_CONF_CHAR, S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, S390_FEAT_TYPE_SCLP_FAC134, + S390_FEAT_TYPE_SCLP_FAC139, S390_FEAT_TYPE_SCLP_CPU, S390_FEAT_TYPE_MISC, S390_FEAT_TYPE_PLO, diff --git a/target/s390x/cpu_features_def.h.inc b/target/s390x/cpu_feature= s_def.h.inc index c017bffcdc4d..a822f0f2fe99 100644 --- a/target/s390x/cpu_features_def.h.inc +++ b/target/s390x/cpu_features_def.h.inc @@ -139,6 +139,9 @@ DEF_FEAT(SIE_IBS, "ibs", SCLP_CONF_CHAR_EXT, 10, "SIE: = Interlock-and-broadcast-s /* Features exposed via SCLP SCCB Facilities byte 134 (bit numbers relativ= e to byte-134) */ DEF_FEAT(DIAG_318, "diag318", SCLP_FAC134, 0, "Control program name and ve= rsion codes") =20 +/* Features exposed via SCLP SCCB Facilities byte 139 (bit numbers relativ= e to byte-139) */ +DEF_FEAT(SIE_ASTFLEIE2, "astfleie2", SCLP_FAC139, 1, "SIE: ASTFLE interpre= tation execution facility 2") + /* Features exposed via SCLP CPU info. */ DEF_FEAT(SIE_F2, "sief2", SCLP_CPU, 4, "SIE: interception format 2 (Virtua= l SIE)") DEF_FEAT(SIE_SKEY, "skey", SCLP_CPU, 5, "SIE: Storage-key facility") diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c index 0b88868289bf..2dd9aac8078c 100644 --- a/target/s390x/cpu_models.c +++ b/target/s390x/cpu_models.c @@ -263,6 +263,7 @@ bool s390_has_feat(S390Feat feat) case S390_FEAT_SIE_PFMFI: case S390_FEAT_SIE_IBS: case S390_FEAT_CONFIGURATION_TOPOLOGY: + case S390_FEAT_SIE_ASTFLEIE2: return false; break; default: @@ -553,6 +554,7 @@ static void check_consistency(const S390CPUModel *model) { S390_FEAT_PLO_QSTG, S390_FEAT_PLO_EXT }, { S390_FEAT_PLO_QSTX, S390_FEAT_PLO_EXT }, { S390_FEAT_PLO_QSTO, S390_FEAT_PLO_EXT }, + { S390_FEAT_SIE_ASTFLEIE2, S390_FEAT_STFLE }, }; int i; =20 diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c index 8218e6470ec9..a309dc2c09ab 100644 --- a/target/s390x/gen-features.c +++ b/target/s390x/gen-features.c @@ -720,6 +720,7 @@ static uint16_t full_GEN16_GA1[] =3D { S390_FEAT_PAIE, S390_FEAT_UV_FEAT_AP, S390_FEAT_UV_FEAT_AP_INTR, + S390_FEAT_SIE_ASTFLEIE2, }; =20 static uint16_t full_GEN17_GA1[] =3D { diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c index fdef8f9e8acc..9af2a397f5a2 100644 --- a/target/s390x/kvm/kvm.c +++ b/target/s390x/kvm/kvm.c @@ -2288,6 +2288,7 @@ static int kvm_to_feat[][2] =3D { { KVM_S390_VM_CPU_FEAT_PFMFI, S390_FEAT_SIE_PFMFI}, { KVM_S390_VM_CPU_FEAT_SIGPIF, S390_FEAT_SIE_SIGPIF}, { KVM_S390_VM_CPU_FEAT_KSS, S390_FEAT_SIE_KSS}, + { KVM_S390_VM_CPU_FEAT_ASTFLEIE2, S390_FEAT_SIE_ASTFLEIE2 }, }; =20 static int query_cpu_feat(S390FeatBitmap features) --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429186; cv=none; d=zohomail.com; s=zohoarc; b=AiYEsVDhBtxF9L2hb/EyT64TdRfrnbid/TsPshExFhAKNi5bzwE0ORcYo0a4gpu/2IqUUt3WSpuRNIcxhvstwaqc9nNE64KrFz1y9hAKNin9XbynweN5hP7bT9ZeBDWxBFJiQRRW2JwHEOPTPxsaN3WuXh5+b7MoXNFsP80ut20= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429186; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HfbV+Ruqv+I3vl+GtkGeced15bJ0pYPHd3HpZCdKa8k=; b=hurV3e1jzXSrihJk1+f2cYO/aJhUmOx2iQnJ1KcqFWoHnZi+9l1dHzybSR9nu3Tw9B8gvS3dDg2ygWmAMS5ANr3KPaeRSOyyMvidU5O3BzG+WlbfCgOZjNqqhV2iyep5SmKEWgLhkYNfMmyGxu5dt94j2gEgX9uB2tq6kh5Hf1Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429186745566.193301355697; Tue, 7 Jul 2026 05:59:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5OS-0006jU-Fa; Tue, 07 Jul 2026 08:59:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OR-0006iB-6Q for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:19 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OP-0007Dg-OB for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:18 -0400 Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-76-q8SqY3ZeNEy1x43uH-KXRQ-1; Tue, 07 Jul 2026 08:59:13 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id CD05019540CD; Tue, 7 Jul 2026 12:59:12 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5230F1956040; Tue, 7 Jul 2026 12:59:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429157; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HfbV+Ruqv+I3vl+GtkGeced15bJ0pYPHd3HpZCdKa8k=; b=TJ8aDnj7UJmEN2BWqSIEQBhAZxxrvO4par3E14XunbbP6850k1MLJF37E2TrhE5SeHfKpQ OzODXlpGzzeviJGvF86qYDpPD2WsCKXil1UrHVNwz6W8Wf+6Y2DckOV58nF531zu19SkRa bnOI0cf79mqb4MUOelZ0t0HfmkqCbGo= X-MC-Unique: q8SqY3ZeNEy1x43uH-KXRQ-1 X-Mimecast-MFC-AGG-ID: q8SqY3ZeNEy1x43uH-KXRQ_1783429152 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Harald Freudenberger , Holger Dengler , Cornelia Huck Subject: [PULL 09/15] target/s390x: Fix wrong address handling in address loops Date: Tue, 7 Jul 2026 14:58:41 +0200 Message-ID: <20260707125847.1785168-10-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429187900158500 Content-Type: text/plain; charset="utf-8" From: Harald Freudenberger The loop increments addr by the element stride (+=3D 4) before calling wrap_address, but then overwrites the loop addr with the wrapped value. On the next iteration the stride is applied to the wrapped address of the previous element, not to the original unwrapped address. This results in every element after the first is read from a wrong (wrapped) address. Fixes: 9f17bfdab4 ("target/s390x: support SHA-512 extensions") Signed-off-by: Harald Freudenberger Reviewed-by: Holger Dengler Message-ID: <20260706094317.17032-2-freude@linux.ibm.com> Signed-off-by: Cornelia Huck --- target/s390x/tcg/crypto_helper.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/target/s390x/tcg/crypto_helper.c b/target/s390x/tcg/crypto_hel= per.c index ae392bce0e73..8fe0a222198a 100644 --- a/target/s390x/tcg/crypto_helper.c +++ b/target/s390x/tcg/crypto_helper.c @@ -126,8 +126,7 @@ static void sha512_read_icv(CPUS390XState *env, const i= nt mmu_idx, const MemOpIdx oi =3D make_memop_idx(MO_BE | MO_64 | MO_UNALN, mmu_idx= ); =20 for (int i =3D 0; i < 8; i++, addr +=3D 8) { - addr =3D wrap_address(env, addr); - a[i] =3D cpu_ldq_mmu(env, addr, oi, ra); + a[i] =3D cpu_ldq_mmu(env, wrap_address(env, addr), oi, ra); } } =20 @@ -137,8 +136,7 @@ static void sha512_write_ocv(CPUS390XState *env, const = int mmu_idx, const MemOpIdx oi =3D make_memop_idx(MO_BE | MO_64 | MO_UNALN, mmu_idx= ); =20 for (int i =3D 0; i < 8; i++, addr +=3D 8) { - addr =3D wrap_address(env, addr); - cpu_stq_mmu(env, addr, a[i], oi, ra); + cpu_stq_mmu(env, wrap_address(env, addr), a[i], oi, ra); } } =20 @@ -148,8 +146,7 @@ static void sha512_read_block(CPUS390XState *env, const= int mmu_idx, const MemOpIdx oi =3D make_memop_idx(MO_BE | MO_64 | MO_UNALN, mmu_idx= ); =20 for (int i =3D 0; i < 16; i++, addr +=3D 8) { - addr =3D wrap_address(env, addr); - a[i] =3D cpu_ldq_mmu(env, addr, oi, ra); + a[i] =3D cpu_ldq_mmu(env, wrap_address(env, addr), oi, ra); } } =20 @@ -159,8 +156,7 @@ static void sha512_read_mbl_be64(CPUS390XState *env, co= nst int mmu_idx, const MemOpIdx oi =3D make_memop_idx(MO_8, mmu_idx); =20 for (int i =3D 0; i < 16; i++, addr +=3D 1) { - addr =3D wrap_address(env, addr); - a[i] =3D cpu_ldb_mmu(env, addr, oi, ra); + a[i] =3D cpu_ldb_mmu(env, wrap_address(env, addr), oi, ra); } } =20 --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429180; cv=none; d=zohomail.com; s=zohoarc; b=fRN8WswXWE9I4MZ1GGTHHlgqmUuLtelfBwmGYlsGrnV9K6FvKFfIlsRq9i57WM9yOAKEGxKpA28iOMEcr2P9BAbclBUmUUtrAhAaZfc87ikfD+ws/PO2IlgQP/kJAV0KbPjkassOFSt3c5tAL9IG/PHMcUHXw3OzQJvJPMFm+aw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429180; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=XVOmMbASv0sFr37LxjFNXwxSU/miq+9Ase6S3cfMJZE=; b=kTPUGI/w7PWg16ryTPuU/2nBAEULWS955hchANoUSGNCIAUDOMBZ2YFfNiW3eS2cht5LXKlStpziElzhBiZeaAEoIYP8oq0u3wQQzotuvj5UDEGY2DMljiprsieIfo8/c2uS0z9QBH6bKtZoCZsDpq5vpyR0qxwEk2JojAlmfRM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429180046313.7112531429665; Tue, 7 Jul 2026 05:59:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5Oa-0006nO-Oz; Tue, 07 Jul 2026 08:59:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OT-0006kA-TM for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OS-0007HU-IL for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:21 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-646-US1X-bECOQu9V5p2pnG09g-1; Tue, 07 Jul 2026 08:59:17 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8F06C183035B; Tue, 7 Jul 2026 12:59:15 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3B0161956040; Tue, 7 Jul 2026 12:59:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429160; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XVOmMbASv0sFr37LxjFNXwxSU/miq+9Ase6S3cfMJZE=; b=KvmWpxvvm8WJHvbBc87rI4DY23Ht7n24WvpQKxkwfOLq1aaYxXDwR8V1iMGWc/LIH+Vz9s bFKLQqkfWAXA9WMU9NBLX9hqnFTHDnqLHkXUIoIL5a5nzDt/oVrx5K1Ftp6BnZZIXv+uzc V+g/SPYY6OLwtjZbZYbHc8Eeq7mbwJ8= X-MC-Unique: US1X-bECOQu9V5p2pnG09g-1 X-Mimecast-MFC-AGG-ID: US1X-bECOQu9V5p2pnG09g_1783429155 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Christian Borntraeger , qemu-stable@nongnu.org, Hendrik Brueckner , Matthew Rosato , Eric Farman , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Cornelia Huck Subject: [PULL 10/15] s390x/sclp: reject invalid write event data headers Date: Tue, 7 Jul 2026 14:58:42 +0200 Message-ID: <20260707125847.1785168-11-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429182162158500 From: Christian Borntraeger If a guest submits an sccb with a tiny header length but a large number of event mask entries, the write_event_mask handler will 1. return the wrong RC (ok instead of error) 2. write to memory after the allocated sccb in qemu host memory. Add the necessary checks. Cc: qemu-stable@nongnu.org Reviewed-by: Hendrik Brueckner Reviewed-by: Matthew Rosato Reviewed-by: Eric Farman Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Christian Borntraeger Message-ID: <20260707070728.147203-2-borntraeger@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/event-facility.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c index fee286ea639a..184c469bd394 100644 --- a/hw/s390x/event-facility.c +++ b/hw/s390x/event-facility.c @@ -286,6 +286,7 @@ static void read_event_data(SCLPEventFacility *ef, SCCB= *sccb) static void write_event_mask(SCLPEventFacility *ef, SCCB *sccb) { WriteEventMask *we_mask =3D (WriteEventMask *) sccb; + uint16_t sccb_length =3D be16_to_cpu(sccb->h.length); uint16_t mask_length =3D be16_to_cpu(we_mask->mask_length); sccb_mask_t tmp_mask; =20 @@ -294,6 +295,11 @@ static void write_event_mask(SCLPEventFacility *ef, SC= CB *sccb) return; } =20 + if (sccb_length < sizeof(WriteEventMask) + 4 * mask_length) { + sccb->h.response_code =3D cpu_to_be16(SCLP_RC_INSUFFICIENT_SCCB_LE= NGTH); + return; + } + /* * Note: We currently only support masks up to 8 byte length; * the remainder is filled up with zeroes. Older Linux --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429266; cv=none; d=zohomail.com; s=zohoarc; b=DnFDRRMBEkQezf/ag7csAdeb4gCDycmuKQs0Xe3CoDsfduIm3gfdV9XL6lM4CkTo8Gl7j1NgqDCDc3BYZ+wSGnKrZCR/UbcCygy9XQKBR1eIFrQ/Er9dfctv3WsAakZ31EHKtoXSSGVUXHic/JfTrsxcl+uBhffuT1m1Qa0bo+0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429266; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zZCuzVFqNPzg4TXtd0LNm2BLh8mjl/nL/c67zXfM+KQ=; b=bfZM43gFWP+wcxIbMI6ZZ2bsZr15rQymp45GLDeBB3pZjC569IKEmsGlH0IOSV//MMcBRUl/I0VroLXAJ6qncqczx88rr5Boawy0lTX7CcMIdvU/D0EnwZDYCaGv6XJZXOQBycDdM7lZAK2dG5lIH0ChA8KYfCu7aqtiLD5SQ4U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429266317537.8259516360149; Tue, 7 Jul 2026 06:01:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5Oh-00070D-71; Tue, 07 Jul 2026 08:59:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OW-0006l2-CE for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:24 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OU-0007IP-Rx for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:24 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-114-ritZzG4RNBma46eKIzJ8GA-1; Tue, 07 Jul 2026 08:59:19 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DE7E91805C3A; Tue, 7 Jul 2026 12:59:17 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id F22601956040; Tue, 7 Jul 2026 12:59:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429162; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zZCuzVFqNPzg4TXtd0LNm2BLh8mjl/nL/c67zXfM+KQ=; b=NPr0lM1YsB4bEdfq91WkceeIbqWfChiFY7mnjTQrvYjR+ZXvn+YRAe+Xd9BERUxdLGLq60 v8uSiblwRFNyAyxYMoIcDIuKekJ5vAKMneK2SkycPwiPkkfiEEHbMjtPVIpXoQh50RhrU8 aOfALdIqxCoGkEKEcYoRZZRL7rKWW0M= X-MC-Unique: ritZzG4RNBma46eKIzJ8GA-1 X-Mimecast-MFC-AGG-ID: ritZzG4RNBma46eKIzJ8GA_1783429158 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , qemu-stable@nongnu.org, Christian Borntraeger , Farhan Ali , Cornelia Huck Subject: [PULL 11/15] s390x/pci: Tighten region detection for BAR read/write Date: Tue, 7 Jul 2026 14:58:43 +0200 Message-ID: <20260707125847.1785168-12-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429269331158500 Content-Type: text/plain; charset="utf-8" From: Matthew Rosato For PCISTG/PCISTB/PCILG instruction emulation, ensure that the offset and length provided by the guest does not overflow, and only return a memory region when the specified offset+length combination matches an existing subregion or the parent region. Cc: qemu-stable@nongnu.org Fixes: 4f6482bfe3 ("s390x/pci: search for subregion inside the BARs") Signed-off-by: Matthew Rosato Reviewed-by: Christian Borntraeger Reviewed-by: Farhan Ali Signed-off-by: Christian Borntraeger Message-ID: <20260707070728.147203-3-borntraeger@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/s390-pci-inst.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/hw/s390x/s390-pci-inst.c b/hw/s390x/s390-pci-inst.c index 10066ca6180a..ef20f7645eb4 100644 --- a/hw/s390x/s390-pci-inst.c +++ b/hw/s390x/s390-pci-inst.c @@ -392,13 +392,22 @@ static int zpci_endian_swap(uint64_t *ptr, uint8_t le= n) static MemoryRegion *s390_get_subregion(MemoryRegion *mr, uint64_t offset, uint8_t len) { + uint64_t last =3D offset + len; MemoryRegion *subregion; uint64_t subregion_size; =20 + /* + * Ensure the region is valid, the calculated address cannot wrap and = that + * it falls within this region. + */ + if (!mr || offset > last || last > memory_region_size(mr)) { + return NULL; + } + QTAILQ_FOREACH(subregion, &mr->subregions, subregions_link) { subregion_size =3D memory_region_size(subregion); if ((offset >=3D subregion->addr) && - (offset + len) <=3D (subregion->addr + subregion_size)) { + (last) <=3D (subregion->addr + subregion_size)) { mr =3D subregion; break; } @@ -413,6 +422,10 @@ static MemTxResult zpci_read_bar(S390PCIBusDevice *pbd= ev, uint8_t pcias, =20 mr =3D pbdev->pdev->io_regions[pcias].memory; mr =3D s390_get_subregion(mr, offset, len); + if (!mr) { + return MEMTX_ERROR; + } + offset -=3D mr->addr; return memory_region_dispatch_read(mr, offset, data, size_memop(len) | MO_BE, @@ -513,6 +526,10 @@ static MemTxResult zpci_write_bar(S390PCIBusDevice *pb= dev, uint8_t pcias, =20 mr =3D pbdev->pdev->io_regions[pcias].memory; mr =3D s390_get_subregion(mr, offset, len); + if (!mr) { + return MEMTX_ERROR; + } + offset -=3D mr->addr; return memory_region_dispatch_write(mr, offset, data, size_memop(len) | MO_BE, @@ -900,6 +917,11 @@ int pcistb_service_call(S390CPU *cpu, uint8_t r1, uint= 8_t r3, uint64_t gaddr, =20 mr =3D pbdev->pdev->io_regions[pcias].memory; mr =3D s390_get_subregion(mr, offset, len); + if (!mr) { + s390_program_interrupt(env, PGM_OPERAND, ra); + return 0; + } + offset -=3D mr->addr; =20 for (i =3D 0; i < len; i +=3D 8) { --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429258; cv=none; d=zohomail.com; s=zohoarc; b=mcl45G7k68FDeQaUx0GVl7lXg0LhP9praSt4tZSyg8hqWaPHNQWAPrzNLll0VJ2MNIgykg4gbCiVjm50M6YcK2308km9HMn6M0BEZhSImXlaKv7Fb9mFQHaV9s35rG5djuNOkjWo5ViBwquB38Ygi22OOC4tcE2nMByIpE1YBiA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429258; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Nn2p/k8XhPuMbczxqRm8p3r/aEnfpM5drtcp6NxPadE=; b=dgve+PavAv+PuQ09YA5p3lhDmFxpQ9pgg6ohukoQCwi9E7aA8XrxLAFhi3oE2CoM+pKmfEq+5tm0jS9ytasOnILPVGnDVF7Lk0MFqpUOzl8QgIq+zG4nURnhu8grb/fMj719FzF2sEZVcnUb7XONtrgrsX9fWn1V7Xb0+Prf5j8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429258714941.1981866659092; Tue, 7 Jul 2026 06:00:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5Oi-0007CF-Qk; Tue, 07 Jul 2026 08:59:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OX-0006li-89 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:26 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5OV-0007Ii-NI for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:24 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-711-pc8bocPtPP6gAwRbpDAMyA-1; Tue, 07 Jul 2026 08:59:21 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 39FF71806CB1; Tue, 7 Jul 2026 12:59:20 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4D9EF1956040; Tue, 7 Jul 2026 12:59:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429163; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Nn2p/k8XhPuMbczxqRm8p3r/aEnfpM5drtcp6NxPadE=; b=bIsBzoeD1RQAisxjRblxoFxxVKWq2DA+do4QmU23zETW2GCQaJ5V1XNBHIu/9nhAni9ZRE 9xDopCa+UHR0v0c5dfr16tgoqGz8qyTis46c8I06m2TGrfl9apy920GYVzFsYEWs/rmCT9 95fblmyy/Ft+LNLA58PNbdiuXDZFnGI= X-MC-Unique: pc8bocPtPP6gAwRbpDAMyA-1 X-Mimecast-MFC-AGG-ID: pc8bocPtPP6gAwRbpDAMyA_1783429160 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , qemu-stable@nongnu.org, Christian Borntraeger , Farhan Ali , Cornelia Huck Subject: [PULL 12/15] s390x/pci: Shrink RPCIT ranges to registered window Date: Tue, 7 Jul 2026 14:58:44 +0200 Message-ID: <20260707125847.1785168-13-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429261457158500 Content-Type: text/plain; charset="utf-8" From: Matthew Rosato Today, if a RPCIT instruction is presented from the guest whose range exceeds the previously-registered IOAT, QEMU will process the range so long as 1) the specified range at least partially overlaps with what was previously registered and 2) the guest has valid IOAT entries in its table. If the entries are not present (invalid), then the RPCIT will unnecessarily spend time reporting the invalid region/segment entries. Optimize this path by exiting immediately if the requested range falls completely outside of the previously-registered range or if the requested range ends before it starts (which would only occur if the guest-specified address + length would overflow a u64). Otherwise, clamp the request to only the portion of the range that overlaps with what was previously registered, effectively ignoring the portion outside of the registered range. Cc: qemu-stable@nongnu.org Fixes: 5d1abf2344 ("s390x/pci: enforce zPCI state checking") Reviewed-by: Christian Borntraeger Reviewed-by: Farhan Ali Signed-off-by: Matthew Rosato Signed-off-by: Christian Borntraeger Message-ID: <20260707070728.147203-4-borntraeger@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/s390-pci-inst.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/s390x/s390-pci-inst.c b/hw/s390x/s390-pci-inst.c index ef20f7645eb4..b7de23c7d2c1 100644 --- a/hw/s390x/s390-pci-inst.c +++ b/hw/s390x/s390-pci-inst.c @@ -770,10 +770,16 @@ int rpcit_service_call(S390CPU *cpu, uint8_t r1, uint= 8_t r2, uintptr_t ra) goto err; } =20 - if (end < iommu->pba || start > iommu->pal) { + if (end < start || end < iommu->pba || start > iommu->pal) { error =3D ERR_EVENT_OORANGE; goto err; } + /* + * If the specified range at least partially overlaps the registered + * aperture, clamp the request to the aperture and ignore the rest. + */ + sstart =3D MAX(start, iommu->pba); + end =3D MIN(end, iommu->pal + 1); =20 retry: start =3D sstart; --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429287; cv=none; d=zohomail.com; s=zohoarc; b=Vobbk8ECKl31h9zu28/eV607NCYtJ1zw/hYaSkH5mj/zwSRyHfNsBx1dfYkklHMCiR86zrHU6w3rUnY6b8EENLXp2QRglJWNyneiahVYyObWZLTogbClnhC+PlQ837Tl2jLNfnd/Ax2cAYYb+/c4+2sID0Vpf+pv80oVwJ6hu6c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429287; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oku21rhRmXEl10yV5mMlbPqzo9z3kdkE5xZILBVSfZg=; b=DnCqBE+Uf37uHuYm+1ZdlgplyNU2yIzzFXffnq6CX48FsAroi/hB+wTYMlGeIvmdRIDLRc6MCm7AYW2Jb6jkAMHkhR7jNAhW78630jvHEwJayWlraoycWIYjqEvVamt4R7jaxLxMDkcDhInCNWiihl2XrDt9YLhm+OHKmagbgDk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178342928736972.98026002229187; Tue, 7 Jul 2026 06:01:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5Oj-0007EW-A7; Tue, 07 Jul 2026 08:59:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5Of-0006uR-2k for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:34 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5Ob-0007M6-KW for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:31 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-183-be4c0iStP6G2KF96FgdusA-1; Tue, 07 Jul 2026 08:59:24 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E8B1C1954B07; Tue, 7 Jul 2026 12:59:22 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9D3271956040; Tue, 7 Jul 2026 12:59:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429169; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oku21rhRmXEl10yV5mMlbPqzo9z3kdkE5xZILBVSfZg=; b=Ld+zVktGmmvZ7eol/gts/1GON8KhMYMwqKkKQjHWswq8mNGsdBwCDx/cX3efyEielfHTMk lgNkGFG8VpJSdA4HvtB7tBI/q7m2xH7d73ADshiDOs+eTVaW1k1UK8qBWeKl7NyyAnYPQR jMQE3u41KwblFy2KrUE2BB3bkxo2Rhs= X-MC-Unique: be4c0iStP6G2KF96FgdusA-1 X-Mimecast-MFC-AGG-ID: be4c0iStP6G2KF96FgdusA_1783429163 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , qemu-stable@nongnu.org, Christian Borntraeger , Farhan Ali , Eric Farman , Cornelia Huck Subject: [PULL 13/15] s390x/ioinst: Require strict length and format for SEI CHSC handler Date: Tue, 7 Jul 2026 14:58:45 +0200 Message-ID: <20260707125847.1785168-14-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429289552158500 Content-Type: text/plain; charset="utf-8" From: Matthew Rosato Ensure SEI commands that are received are of the appropriate length and format before handling. Cc: qemu-stable@nongnu.org Fixes: 8cba80c3a0 ("s390: Add PCI bus support") Reviewed-by: Christian Borntraeger Reviewed-by: Farhan Ali Reviewed-by: Eric Farman Signed-off-by: Matthew Rosato Signed-off-by: Christian Borntraeger Message-ID: <20260707070728.147203-5-borntraeger@linux.ibm.com> Signed-off-by: Cornelia Huck --- target/s390x/ioinst.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c index 2320dd4c1224..94619f92155c 100644 --- a/target/s390x/ioinst.c +++ b/target/s390x/ioinst.c @@ -609,13 +609,27 @@ static int chsc_sei_nt2_have_event(void) =20 #define CHSC_SEI_NT0 (1ULL << 63) #define CHSC_SEI_NT2 (1ULL << 61) +#define CHSC_SEI_0_FMT 0x0f000000 static void ioinst_handle_chsc_sei(ChscReq *req, ChscResp *res) { uint64_t selection_mask =3D ldq_be_p(&req->param1); + uint32_t param0 =3D be32_to_cpu(req->param0); uint8_t *res_flags =3D (uint8_t *)res->data; + uint16_t len =3D be16_to_cpu(req->len); + uint16_t resp_code; int have_event =3D 0; int have_more =3D 0; =20 + if (len !=3D 0x0010) { + resp_code =3D 0x0003; + goto out_err; + } + + if (param0 & CHSC_SEI_0_FMT) { + resp_code =3D 0x0007; + goto out_err; + } + /* regarding architecture nt0 can not be masked */ have_event =3D !chsc_sei_nt0_get_event(res); have_more =3D chsc_sei_nt0_have_event(); @@ -642,6 +656,12 @@ static void ioinst_handle_chsc_sei(ChscReq *req, ChscR= esp *res) res->code =3D cpu_to_be16(0x0005); res->len =3D cpu_to_be16(CHSC_MIN_RESP_LEN); } + return; + + out_err: + res->code =3D cpu_to_be16(resp_code); + res->len =3D cpu_to_be16(CHSC_MIN_RESP_LEN); + res->param =3D 0; } =20 static void ioinst_handle_chsc_unimplemented(ChscResp *res) --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429209; cv=none; d=zohomail.com; s=zohoarc; b=n+LgwJmn5R0yqTbiJ6ZrUT+5jdxLbqwNGb4K8k4OPD1zDY686kMyrTor7Ak17leMkAWK+/daqrJpPmOVO/MnwQrEjRiee4IM9mSKCDRfzXJBjpLda/JiT/Fc0fNKVBNPvI9OZ2m+NkGA5Ecbc0aWrtgpVc/uTInRwaOAVqqYmSc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429209; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=p/x1Nrf+yaPiS52MQo6qAtWtDTqRczZlHJPxKq20iLU=; b=nqlJU1kdrOqE3078iwj6nABITWC/c1DmCaeK3bFpHs70bCKSS1HlNKSEJNvMKfg9qbgIDnp8G1a2dQr6Iy3sGaR+t/Ua8wBuMJgqa//kNNjA4fsh9r1yrNuMsf3dw2+yg4MLpuxxNXxpJE1MnY2MqzFCqauoyzuMR/rr+Q+Jh3A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429209854304.57514847174946; Tue, 7 Jul 2026 06:00:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5Oi-00076q-0m; Tue, 07 Jul 2026 08:59:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5Oc-0006rH-O1 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:30 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5Ob-0007Lt-6x for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:30 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-124-0QA_DNsuOaO5PKGh8rrp3Q-1; Tue, 07 Jul 2026 08:59:26 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 457151801322; Tue, 7 Jul 2026 12:59:25 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 584A81956040; Tue, 7 Jul 2026 12:59:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429168; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=p/x1Nrf+yaPiS52MQo6qAtWtDTqRczZlHJPxKq20iLU=; b=i3MAvrxjaoAl924QIGg/9e6fB51Hg7i29WOzIXGmtBS+LttKalJE4W2SCVdZzKzHdqDyOr YQooP67wiVJWcNwTy+B3XIGEXV/fznKBX21UcGKGDn8r7vFEUydjpbNtVjgOsvQbO1DtUW B137/WTCEPBW7GMFPMIZdKU7qsafb+0= X-MC-Unique: 0QA_DNsuOaO5PKGh8rrp3Q-1 X-Mimecast-MFC-AGG-ID: 0QA_DNsuOaO5PKGh8rrp3Q_1783429165 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Eric Farman , qemu-stable@nongnu.org, Christian Borntraeger , Matthew Rosato , Cornelia Huck Subject: [PULL 14/15] s390x/css: limit number of CHPIDs in description Date: Tue, 7 Jul 2026 14:58:46 +0200 Message-ID: <20260707125847.1785168-15-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429212258158500 Content-Type: text/plain; charset="utf-8" From: Eric Farman virtio-ccw uses a single virtual CHPID for all devices and device-types, but vfio-ccw (passthrough) shares real CHPID information with the guest. A sufficiently large passthrough configuration would exceed the defined response payload. Fix this by limiting the number of CHPID descriptions that are returned based on the given response format. Cc: qemu-stable@nongnu.org Reviewed-by: Christian Borntraeger Reviewed-by: Matthew Rosato Signed-off-by: Eric Farman Signed-off-by: Christian Borntraeger Message-ID: <20260707070728.147203-6-borntraeger@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/css.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index 96d5378f3c18..29ba39f79ea1 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1872,6 +1872,7 @@ int css_collect_chp_desc(int m, uint8_t cssid, uint8_= t f_chpid, uint8_t l_chpid, int i, desc_size; uint32_t words[8]; uint32_t chpid_type_word; + uint32_t max_chpids, chpid_count =3D 0; CssImage *css; =20 if (!m && !cssid) { @@ -1882,9 +1883,25 @@ int css_collect_chp_desc(int m, uint8_t cssid, uint8= _t f_chpid, uint8_t l_chpid, if (!css) { return 0; } + + if (rfmt =3D=3D 0) { + max_chpids =3D 256; + } else if (rfmt =3D=3D 1) { + max_chpids =3D 127; + } else { + /* Should be rejected by caller */ + return 0; + } + desc_size =3D 0; for (i =3D f_chpid; i <=3D l_chpid; i++) { if (css->chpids[i].in_use) { + /* Limit number of CHPIDs sent back */ + if (chpid_count =3D=3D max_chpids) { + break; + } + + chpid_count++; chpid_type_word =3D 0x80000000 | (css->chpids[i].type << 8) | = i; if (rfmt =3D=3D 0) { words[0] =3D cpu_to_be32(chpid_type_word); --=20 2.54.0 From nobody Sun Jul 26 10:07:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1783429196; cv=none; d=zohomail.com; s=zohoarc; b=Ux8Fx7zSuxqkvHWXti+LyhIqhJ6+UI95y8MGWBzqMnNaBFFxI6jFn8o4bDbvbE/cajGcffYPq9/Ehfd8TG+yGBcbs1zp9yMRiEeaR4lsgbU3V3S3eZjYXB+aJLIoCjOItfOrmSk5BJCrR2aeR9NtzHwup5fHmXHzMOtDNHiBNGA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783429196; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=dNIbgyhN4URwlBuv3Tny24UEJMn3xnkyjVsKJFSVai8=; b=OsjXvggI4KMD7J+/H+TxTBDtqS2jaYYMxM86njDzlovqfsz7wQNuVyesJKLXLsyVGVyodfh74H8ler0WHmukI7OMSU7IM4/3vUy5lHVrEAYG8YkS0py88TRPNIsMs+xchEidrucJpRExyZIQ2e379b19rKVTmOyH4/kJzOPZSv8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783429196909577.8011911367305; Tue, 7 Jul 2026 05:59:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wh5Op-0007UP-2u; Tue, 07 Jul 2026 08:59:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5Ok-0007Hw-L4 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:38 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wh5Oe-0007Mr-RQ for qemu-devel@nongnu.org; Tue, 07 Jul 2026 08:59:38 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-323-YGJiO149OlWPkD79r-Ttbw-1; Tue, 07 Jul 2026 08:59:28 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 312D019540CA; Tue, 7 Jul 2026 12:59:27 +0000 (UTC) Received: from gondolin.fritz.box (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A97AB1956040; Tue, 7 Jul 2026 12:59:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783429170; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dNIbgyhN4URwlBuv3Tny24UEJMn3xnkyjVsKJFSVai8=; b=Uwqpkax/QqeUyr7K53hz4FidLO90xab2tuHAmniDbe3hYjy/6ft/LvV7hJiYcMc7DIiSkj l2nlxmDM/6NpaMxWNEeWixCieyVNqJCmF02sm7/FlDRaR1XXVbPGA1A0Y8AZyI4fY1d+u8 dVRyL8FRaA+gpQmXzkJbMhnKeZL2yxo= X-MC-Unique: YGJiO149OlWPkD79r-Ttbw-1 X-Mimecast-MFC-AGG-ID: YGJiO149OlWPkD79r-Ttbw_1783429167 From: Cornelia Huck To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Cornelia Huck Subject: [PULL 15/15] pc-bios/s390-ccw.img: update s390x bios Date: Tue, 7 Jul 2026 14:58:47 +0200 Message-ID: <20260707125847.1785168-16-cohuck@redhat.com> In-Reply-To: <20260707125847.1785168-1-cohuck@redhat.com> References: <20260707125847.1785168-1-cohuck@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1783429197943158500 Content-Type: text/plain; charset="utf-8" Update the s390x bios with fixes for intermittent errors when IPLing from PCI devices. Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw.img | Bin 95992 -> 104136 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img index 48ac78c894592b655062fcf9513acc39d917f176..e24a93e14a880aa3a5d498fc84c= 7bdd1a0964d7c 100644 GIT binary patch literal 104136 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 literal 95992 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 P{y^P4+6Ge6_2K^mU6)D| --=20 2.54.0