From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457153; cv=none; d=zohomail.com; s=zohoarc; b=djCe0mlXAl8SdF1NmexoWWFub7YdgfY8VRlrVxJ0stYcetW+BSqcy+wLnZguCXX3dwzBqyKdJUmP+ZXwo3q+FzwjkcG/l04pXCx/GpSMUQTa/D+DOFqo1SKwpG0O39Eu4OlE+qQCvJpLjMuQ/PRbNL9yintif7S9PXvIBX0lmYo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457153; 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=Zt8UrK/m7+A+YGdWTpaIY4AS9igFV/9A6BVTmTNIKTg=; b=aFnCitqqCb1hClUUy8YkLU4Wz65e0xEprsaSTQ9H72Rbpw1eP7BPVn2hP/ITmpho72mg4lBFN6ckQYQzkdQ1LwqZrbedwlNSeFrGZOK+UxVXskS4ibTcmKLga3FfcaX1rOVO/wRA0W9OH/8oUYacdoqm6ZDjgKnftSat507qS6M= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 173745715391930.920975315607734; Tue, 21 Jan 2025 02:59:13 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBw5-0006fV-Lq; Tue, 21 Jan 2025 05:56:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBvn-0006dg-5u for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:27 -0500 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 1taBvl-00055h-1S for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:26 -0500 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-282-1niOJ4rXM8CCsxRA2g604A-1; Tue, 21 Jan 2025 05:56:21 -0500 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 569CB1956053; Tue, 21 Jan 2025 10:56:19 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7E1B319560A7; Tue, 21 Jan 2025 10:56:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737456984; 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=Zt8UrK/m7+A+YGdWTpaIY4AS9igFV/9A6BVTmTNIKTg=; b=IzeyJGsRA2IA9O/cIZ+v8zeLn0CU4oz2D+4AEd/oGskL/4aiQFQC9QGOBCq4x7z93k7mQH SdaFtXAiFZA+Kq4kSIXuNLqcuNCr0/ANENHni99KdLUYFVuYT2rIkwIZRS5e4Nc8QF9JMA wPa+lPjIOiSLZAtPFkhMfs3mwBsHIk8= X-MC-Unique: 1niOJ4rXM8CCsxRA2g604A-1 X-Mimecast-MFC-AGG-ID: 1niOJ4rXM8CCsxRA2g604A From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , David Woodhouse Subject: [PULL 1/9] tests/functional: Convert the kvm_xen_guest avocado test Date: Tue, 21 Jan 2025 11:56:03 +0100 Message-ID: <20250121105613.1286672-2-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, 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_H2=-0.036, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457155474019000 Use the serial console to execute the commands in the guest instead of using ssh since we don't have ssh support in the functional framework yet. Acked-by: David Woodhouse Message-ID: <20250113082516.57894-1-thuth@redhat.com> Signed-off-by: Thomas Huth --- MAINTAINERS | 2 +- tests/functional/meson.build | 2 + .../test_x86_64_kvm_xen.py} | 83 +++++++++++-------- 3 files changed, 52 insertions(+), 35 deletions(-) rename tests/{avocado/kvm_xen_guest.py =3D> functional/test_x86_64_kvm_xen= .py} (64%) mode change 100644 =3D> 100755 diff --git a/MAINTAINERS b/MAINTAINERS index 846b81e3ec..94834b7876 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -489,7 +489,7 @@ S: Supported F: include/system/kvm_xen.h F: target/i386/kvm/xen* F: hw/i386/kvm/xen* -F: tests/avocado/kvm_xen_guest.py +F: tests/functional/test_x86_64_kvm_xen.py =20 Guest CPU Cores (other accelerators) ------------------------------------ diff --git a/tests/functional/meson.build b/tests/functional/meson.build index cf80924ddc..b7719ab85f 100644 --- a/tests/functional/meson.build +++ b/tests/functional/meson.build @@ -44,6 +44,7 @@ test_timeouts =3D { 'riscv64_tuxrun' : 120, 's390x_ccw_virtio' : 420, 'sh4_tuxrun' : 240, + 'x86_64_kvm_xen' : 180, } =20 tests_generic_system =3D [ @@ -244,6 +245,7 @@ tests_x86_64_system_thorough =3D [ 'netdev_ethtool', 'virtio_gpu', 'x86_64_hotplug_cpu', + 'x86_64_kvm_xen', 'x86_64_tuxrun', ] =20 diff --git a/tests/avocado/kvm_xen_guest.py b/tests/functional/test_x86_64_= kvm_xen.py old mode 100644 new mode 100755 similarity index 64% rename from tests/avocado/kvm_xen_guest.py rename to tests/functional/test_x86_64_kvm_xen.py index f8cb458d5d..273c1e69fb --- a/tests/avocado/kvm_xen_guest.py +++ b/tests/functional/test_x86_64_kvm_xen.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 +# # KVM Xen guest functional tests # # Copyright =C2=A9 2021 Red Hat, Inc. @@ -13,19 +15,12 @@ =20 from qemu.machine import machine =20 -from avocado_qemu import LinuxSSHMixIn -from avocado_qemu import QemuSystemTest -from avocado_qemu import wait_for_console_pattern +from qemu_test import QemuSystemTest, Asset, exec_command_and_wait_for_pat= tern +from qemu_test import wait_for_console_pattern =20 -class KVMXenGuest(QemuSystemTest, LinuxSSHMixIn): - """ - :avocado: tags=3Darch:x86_64 - :avocado: tags=3Dmachine:q35 - :avocado: tags=3Daccel:kvm - :avocado: tags=3Dkvm_xen_guest - """ +class KVMXenGuest(QemuSystemTest): =20 - KERNEL_DEFAULT =3D 'printk.time=3D0 root=3D/dev/xvda console=3DttyS0' + KERNEL_DEFAULT =3D 'printk.time=3D0 root=3D/dev/xvda console=3DttyS0 q= uiet' =20 kernel_path =3D None kernel_params =3D None @@ -33,14 +28,15 @@ class KVMXenGuest(QemuSystemTest, LinuxSSHMixIn): # Fetch assets from the kvm-xen-guest subdir of my shared test # images directory on fileserver.linaro.org where you can find # build instructions for how they where assembled. - def get_asset(self, name, sha1): - base_url =3D ('https://fileserver.linaro.org/s/' - 'kE4nCFLdQcoBF9t/download?' - 'path=3D%2Fkvm-xen-guest&files=3D' ) - url =3D base_url + name - # use explicit name rather than failing to neatly parse the - # URL into a unique one - return self.fetch_asset(name=3Dname, locations=3D(url), asset_hash= =3Dsha1) + ASSET_KERNEL =3D Asset( + ('https://fileserver.linaro.org/s/kE4nCFLdQcoBF9t/download?' + 'path=3D%2Fkvm-xen-guest&files=3DbzImage'), + 'ec0ad7bb8c33c5982baee0a75505fe7dbf29d3ff5d44258204d6307c6fe0132a') + + ASSET_ROOTFS =3D Asset( + ('https://fileserver.linaro.org/s/kE4nCFLdQcoBF9t/download?' + 'path=3D%2Fkvm-xen-guest&files=3Drootfs.ext4'), + 'b11045d649006c649c184e93339aaa41a8fe20a1a86620af70323252eb29e40b') =20 def common_vm_setup(self): # We also catch lack of KVM_XEN support if we fail to launch @@ -51,10 +47,8 @@ def common_vm_setup(self): self.vm.add_args("-accel", "kvm,xen-version=3D0x4000a,kernel-irqch= ip=3Dsplit") self.vm.add_args("-smp", "2") =20 - self.kernel_path =3D self.get_asset("bzImage", - "367962983d0d32109998a70b45dcee4= 672d0b045") - self.rootfs =3D self.get_asset("rootfs.ext4", - "f1478401ea4b3fa2ea196396be44315bab2b= b5e4") + self.kernel_path =3D self.ASSET_KERNEL.fetch() + self.rootfs =3D self.ASSET_ROOTFS.fetch() =20 def run_and_check(self): self.vm.add_args('-kernel', self.kernel_path, @@ -79,10 +73,11 @@ def run_and_check(self): console_pattern =3D 'Starting dropbear sshd: OK' wait_for_console_pattern(self, console_pattern, 'Oops') self.log.info('sshd ready') - self.ssh_connect('root', '', False) =20 - self.ssh_command('cat /proc/cmdline') - self.ssh_command('dmesg | grep -e "Grant table initialized"') + exec_command_and_wait_for_pattern(self, 'cat /proc/cmdline', 'xen') + exec_command_and_wait_for_pattern(self, 'dmesg | grep "Grant table= "', + 'Grant table initialized') + wait_for_console_pattern(self, '#', 'Oops') =20 def test_kvm_xen_guest(self): """ @@ -94,7 +89,9 @@ def test_kvm_xen_guest(self): self.kernel_params =3D (self.KERNEL_DEFAULT + ' xen_emul_unplug=3Dide-disks') self.run_and_check() - self.ssh_command('grep xen-pirq.*msi /proc/interrupts') + exec_command_and_wait_for_pattern(self, + 'grep xen-pirq.*msi /proc/interrupts', + 'virtio0-output') =20 def test_kvm_xen_guest_nomsi(self): """ @@ -106,7 +103,9 @@ def test_kvm_xen_guest_nomsi(self): self.kernel_params =3D (self.KERNEL_DEFAULT + ' xen_emul_unplug=3Dide-disks pci=3Dnomsi') self.run_and_check() - self.ssh_command('grep xen-pirq.* /proc/interrupts') + exec_command_and_wait_for_pattern(self, + 'grep xen-pirq.* /proc/interrupts', + 'virtio0') =20 def test_kvm_xen_guest_noapic_nomsi(self): """ @@ -118,7 +117,9 @@ def test_kvm_xen_guest_noapic_nomsi(self): self.kernel_params =3D (self.KERNEL_DEFAULT + ' xen_emul_unplug=3Dide-disks noapic pci=3Dn= omsi') self.run_and_check() - self.ssh_command('grep xen-pirq /proc/interrupts') + exec_command_and_wait_for_pattern(self, + 'grep xen-pirq /proc/interrupts', + 'virtio0') =20 def test_kvm_xen_guest_vapic(self): """ @@ -130,8 +131,13 @@ def test_kvm_xen_guest_vapic(self): self.kernel_params =3D (self.KERNEL_DEFAULT + ' xen_emul_unplug=3Dide-disks') self.run_and_check() - self.ssh_command('grep xen-pirq /proc/interrupts') - self.ssh_command('grep PCI-MSI /proc/interrupts') + exec_command_and_wait_for_pattern(self, + 'grep xen-pirq /proc/interrupts', + 'acpi') + wait_for_console_pattern(self, '#') + exec_command_and_wait_for_pattern(self, + 'grep PCI-MSI /proc/interrupts', + 'virtio0-output') =20 def test_kvm_xen_guest_novector(self): """ @@ -143,7 +149,9 @@ def test_kvm_xen_guest_novector(self): ' xen_emul_unplug=3Dide-disks' + ' xen_no_vector_callback') self.run_and_check() - self.ssh_command('grep xen-platform-pci /proc/interrupts') + exec_command_and_wait_for_pattern(self, + 'grep xen-platform-pci /proc/interrupts', + 'fasteoi') =20 def test_kvm_xen_guest_novector_nomsi(self): """ @@ -156,7 +164,9 @@ def test_kvm_xen_guest_novector_nomsi(self): ' xen_emul_unplug=3Dide-disks pci=3Dnomsi' + ' xen_no_vector_callback') self.run_and_check() - self.ssh_command('grep xen-platform-pci /proc/interrupts') + exec_command_and_wait_for_pattern(self, + 'grep xen-platform-pci /proc/interrupts', + 'IO-APIC') =20 def test_kvm_xen_guest_novector_noapic(self): """ @@ -168,4 +178,9 @@ def test_kvm_xen_guest_novector_noapic(self): ' xen_emul_unplug=3Dide-disks' + ' xen_no_vector_callback noapic') self.run_and_check() - self.ssh_command('grep xen-platform-pci /proc/interrupts') + exec_command_and_wait_for_pattern(self, + 'grep xen-platform-pci /proc/interrupts', + 'XT-PIC') + +if __name__ =3D=3D '__main__': + QemuSystemTest.main() --=20 2.48.1 From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457136; cv=none; d=zohomail.com; s=zohoarc; b=ahSdgjnYb0CHI7t/8rg+Uh2zYWhAuuyecJ+UGdberaMvLVzhbUCNWHwZBekjlCYmdv+T0BbyFQoVz2tcOM6900tTkI2tEmqvj9watnSnl/ZcLeFHjwN4fJALEVMQ605yvy2eoSkZssaudt1UX9EN01SHGqQWECfBpT7cMEmhJTo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457136; 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=hIzs1BT0oZ+F3DAu1fJpjRzBZnDPHScPQ9wFqs3gnGo=; b=ULeIIH5KXRmalbq4lATmVLktYHbtHjEOhAeEvto1MYgXyBk7pZKBuUEmGSqgAReBLVKv+9Jf73jL6CieE3tDvE5isF2cLx3oWvq2TF2hZUzCI59KwD+Q9pWOgY7QblRg4FGWc2MQb7RP0BdEo/c4yvKvG2ag13vREDywrOGgvyU= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737457136544287.134545988221; Tue, 21 Jan 2025 02:58:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBw7-0006gb-Ep; Tue, 21 Jan 2025 05:56:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBvx-0006ee-Sf for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:39 -0500 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 1taBvo-00056D-Fi for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:33 -0500 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-464-yqhswBA1MqCuQ4r2UgvWIQ-1; Tue, 21 Jan 2025 05:56:24 -0500 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 67BE219560BD; Tue, 21 Jan 2025 10:56:22 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id ACCB119560B0; Tue, 21 Jan 2025 10:56:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737456987; 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=hIzs1BT0oZ+F3DAu1fJpjRzBZnDPHScPQ9wFqs3gnGo=; b=HycJaE6vNymuC/GlWQTmIGewsfuier1DCWZWCAK720mWiAuOsbUskvETlueifTWc7mZz1S Qlt2a4JEMRl3MZw7EVI7zysucG0Gg3Gcbn1Zai+fer75RTOKEV6iJMGDt6licO6mech9CV cYoPi6V1j1zGV+xzLvNtbHt84H5aziw= X-MC-Unique: yqhswBA1MqCuQ4r2UgvWIQ-1 X-Mimecast-MFC-AGG-ID: yqhswBA1MqCuQ4r2UgvWIQ From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 2/9] MAINTAINERS: Remove myself as Avocado Framework reviewer Date: Tue, 21 Jan 2025 11:56:04 +0100 Message-ID: <20250121105613.1286672-3-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, 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_H2=-0.036, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457137275019000 From: Philippe Mathieu-Daud=C3=A9 While I was very enthusiastic when Avocado was presented to the QEMU community and pushed forward to have it integrated, time passed and I lost interest. Be honest, remove my R: tag to not give fake expectation I'd review patches related to Avocado anymore. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Thomas Huth Message-ID: <20250106055024.70139-1-philmd@linaro.org> Signed-off-by: Thomas Huth --- MAINTAINERS | 1 - 1 file changed, 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 94834b7876..7be3d8f431 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4207,7 +4207,6 @@ F: tests/tcg/Makefile.target Integration Testing with the Avocado framework W: https://trello.com/b/6Qi1pxVn/avocado-qemu R: Cleber Rosa -R: Philippe Mathieu-Daud=C3=A9 S: Odd Fixes F: tests/avocado/ =20 --=20 2.48.1 From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457134; cv=none; d=zohomail.com; s=zohoarc; b=n1ApOIc9xgFMBMch+HB6W3qzIRMpJ9/OaamtLjt6tDsULB2hczoKonQCnxr232p3aVpJpQZTSdDfaXCHvKhPa8u/hZL7VjRMZ4rSTEuCXfPf1guY2mvW6VEPKTgEVT8xVmpZevMAaEl40oW4FDlndrKuIWFQGXrlvcypwxmIq0A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457134; 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=XxRDZtd5Utt5iRwmjAyBTVlmUz2KjyWXBIEy7zrcS7g=; b=mIZdAmYI8c27mHLt2/yNb/3pb9zeaqXaJJeVubU0NtI47G0VgNEFXbJLrH0cSl7Imxb7Gh4Plnab7L2+dCCCFHxA37dM01gReLbZAxwoQqie2HESNEjnFIJwEvMCWmia+ogfPGm6Pd5ShtAR4ssIMjkXUY2ro1aLAIwmydIxPWA= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737457134458227.69454302232236; Tue, 21 Jan 2025 02:58:54 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBw9-0006hU-9I; Tue, 21 Jan 2025 05:56:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBvs-0006eM-5k for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:37 -0500 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 1taBvo-000567-2a for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:29 -0500 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-621-wa6ChJUMNHuyVtQLXbHX1Q-1; Tue, 21 Jan 2025 05:56:25 -0500 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 E81231956055 for ; Tue, 21 Jan 2025 10:56:24 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E535219560A7; Tue, 21 Jan 2025 10:56:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737456987; 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=XxRDZtd5Utt5iRwmjAyBTVlmUz2KjyWXBIEy7zrcS7g=; b=hTwF0T+8EhmomTi5M+IO0GWEIZeLg68+PsJ/SPfotplV/lL8U/BGo8esTxfHn3z+293ZfZ P6K043wdNmc4S9UQj3q32Y9Iy8z2UYQbcN6q5yfXkpIARrfdpP5p6pFtaIxa2Q55HiHJFh B38qgsTQIbAEd0nWojPIY3KA4eFrufk= X-MC-Unique: wa6ChJUMNHuyVtQLXbHX1Q-1 X-Mimecast-MFC-AGG-ID: wa6ChJUMNHuyVtQLXbHX1Q From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , "Richard W.M. Jones" Subject: [PULL 3/9] crypto: fix bogus error benchmarking pbkdf on fast machines Date: Tue, 21 Jan 2025 11:56:05 +0100 Message-ID: <20250121105613.1286672-4-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457135353019000 From: Daniel P. Berrang=C3=A9 We're seeing periodic reports of errors like: $ qemu-img create -f luks --object secret,data=3D123456,id=3Dsec0 \ -o key-secret=3Dsec0 luks-info.img 1M Formatting 'luks-info.img', fmt=3Dluks size=3D1048576 key-secret=3Dsec0 qemu-img: luks-info.img: Unable to get accurate CPU usage This error message comes from a recent attempt to workaround a kernel bug with measuring rusage in long running processes: commit c72cab5ad9f849bbcfcf4be7952b8b8946cc626e Author: Tiago Pasqualini Date: Wed Sep 4 20:52:30 2024 -0300 crypto: run qcrypto_pbkdf2_count_iters in a new thread Unfortunately this has a subtle bug on machines which are very fast. On the first time around the loop, the 'iterations' value is quite small (1 << 15), and so will run quite fast. Testing has shown that some machines can complete this benchmarking task in as little as 7 milliseconds. Unfortunately the 'getrusage' data is not updated at the time of the 'getrusage' call, it is done asynchronously by the scheduler. The 7 millisecond completion time for the benchmark is short enough that 'getrusage' sometimes reports 0 accumulated execution time. As a result the 'delay_ms =3D=3D 0' sanity check in the above commit is triggering non-deterministically on such machines. The benchmarking loop intended to run multiple times, increasing the 'iterations' value until the benchmark ran for > 500 ms, but the sanity check doesn't allow this to happen. To fix it, we keep a loop counter and only run the sanity check after we've been around the loop more than 5 times. At that point the 'iterations' value is high enough that even with infrequent updates of 'getrusage' accounting data on fast machines, we should see a non-zero value. Fixes: https://lore.kernel.org/qemu-devel/ffe542bb-310c-4616-b0ca-13182f849= fd1@redhat.com/ Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=3D2336437 Reported-by: Thomas Huth Reported-by: Richard W.M. Jones Tested-by: Thomas Huth Signed-off-by: Daniel P. Berrang=C3=A9 Message-ID: <20250109093746.1216300-1-berrange@redhat.com> Signed-off-by: Thomas Huth --- crypto/pbkdf.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/crypto/pbkdf.c b/crypto/pbkdf.c index 0dd7c3aeaa..2989fc0a40 100644 --- a/crypto/pbkdf.c +++ b/crypto/pbkdf.c @@ -107,7 +107,7 @@ static void *threaded_qcrypto_pbkdf2_count_iters(void *= data) size_t nsalt =3D iters_data->nsalt; size_t nout =3D iters_data->nout; Error **errp =3D iters_data->errp; - + size_t scaled =3D 0; uint64_t ret =3D -1; g_autofree uint8_t *out =3D g_new(uint8_t, nout); uint64_t iterations =3D (1 << 15); @@ -131,7 +131,17 @@ static void *threaded_qcrypto_pbkdf2_count_iters(void = *data) =20 delta_ms =3D end_ms - start_ms; =20 - if (delta_ms =3D=3D 0) { /* sanity check */ + /* + * For very small 'iterations' values, CPU (or crypto + * accelerator) might be fast enough that the scheduler + * hasn't incremented getrusage() data, or incremented + * it by a very small amount, resulting in delta_ms =3D=3D 0. + * Once we've scaled 'iterations' x10, 5 times, we really + * should be seeing delta_ms !=3D 0, so sanity check at + * that point. + */ + if (scaled > 5 && + delta_ms =3D=3D 0) { /* sanity check */ error_setg(errp, "Unable to get accurate CPU usage"); goto cleanup; } else if (delta_ms > 500) { @@ -141,6 +151,7 @@ static void *threaded_qcrypto_pbkdf2_count_iters(void *= data) } else { iterations =3D (iterations * 1000 / delta_ms); } + scaled++; } =20 iterations =3D iterations * 1000 / delta_ms; --=20 2.48.1 From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457135; cv=none; d=zohomail.com; s=zohoarc; b=EmEKTaFkV3+yHOBU+y2sjPghqSfehR0UqHQkiu0T70aFtHPbDWzKxJYS7hD4vWF2KPTsNVxyH7K9L7giGP9GbMeo5skwi5/pODqM2MVSDcBn9HLVT1lNnWacJ4F+gqyZ1lfLr2bp13dY2+LCDdwwyZKFutMBDBw6yPLx/QyVW/Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457135; h=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=7y2fdrZMckfoQ3ZY0BldNlgQWpxrizZusmKLoxlslvw=; b=fi5LO4sIjpdRSRwE/A2W9RJNxVM8vtp4qv1CxTdwPmYbtSARWblUEwQUvSBFqh+awETbnag91SGO8ZYe8+L3iIEaN48FwwWoaMxUdoJV2xbTXJMbAUoEwleaBgtEyxKxVz6jU+FMW22B2A7fkR1zqCR05IR2vRFBQm5DyeEHwfU= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737457135602626.6666143023294; Tue, 21 Jan 2025 02:58:55 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBw9-0006i0-S8; Tue, 21 Jan 2025 05:56:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBvx-0006ef-Sh for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:39 -0500 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 1taBvs-00056Z-Qt for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:35 -0500 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-623-Wjiy3NBtOpmS_7vDx9CzAQ-1; Tue, 21 Jan 2025 05:56:29 -0500 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 4029419560B7 for ; Tue, 21 Jan 2025 10:56:27 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6D67B19560B1; Tue, 21 Jan 2025 10:56:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737456991; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7y2fdrZMckfoQ3ZY0BldNlgQWpxrizZusmKLoxlslvw=; b=gEBeYD6CFrACyAE5uHDJm3coov88zYmTNu9lZGVBUprawsIK46RhjWn40YexKqfnnyuW3I PykRZ3OyMQqbC6/M5YLhULSLKH+LbI4F5qzyEAQzpJiNNwHqzaIe1rVO8CoAIrlG+6HcGK jM0TvkroMSXCmPvlKGCDuHfJwpkIqsk= X-MC-Unique: Wjiy3NBtOpmS_7vDx9CzAQ-1 X-Mimecast-MFC-AGG-ID: Wjiy3NBtOpmS_7vDx9CzAQ From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , David Hildenbrand Subject: [PULL 4/9] hw/s390x: Fix crash that occurs when inspecting older versioned machines types Date: Tue, 21 Jan 2025 11:56:06 +0100 Message-ID: <20250121105613.1286672-5-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457137367019000 Content-Type: text/plain; charset="utf-8" qemu-system-s390x currently crashes when trying to inspect older machines types, for example: $ echo '{ "execute": "qmp_capabilities" } { "execute": "qom-list-properties","arguments": { "typename": "s390-ccw-virtio-3.0-machine"}}' \ | ./qemu-system-s390x -qmp stdio -no-shutdown {"QMP": {"version": {"qemu": {"micro": 50, "minor": 2, "major": 9}, "package": "v9.2.0-1071-g81e97df3e7"}, "capabilities": ["oob"]}} {"return": {}} ** Bail out! ERROR:../target/s390x/cpu_models.c:832:s390_set_qemu_cpu_model: assertion failed: (QTAILQ_EMPTY_RCU(&cpus_queue)) Aborted (core dumped) The problem is that the versioned s390-ccw-virtio machine types use instance_init() to set global state that should be initialized before the CPUs get instantiated. But instance_init() is not called only for the machine that is finally used, it is also called for temporary instances of objects that are e.g. just created for introspection. That means that those instance_init() functions can also be called while a machine (and its CPUs) is already created, which triggers the assertion in cpu_models.c. So we must not use instance_init() for setting global state, but use the machine->init() function instead, which is really only called once when the machine comes to life. Fixes: 3b00f702c2 ("s390x/cpumodel: add zpci, aen and ais facilities") Message-ID: <20250120085059.239345-1-thuth@redhat.com> Reviewed-by: David Hildenbrand Signed-off-by: Thomas Huth --- hw/s390x/s390-virtio-ccw.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 38aeba14ee..3af613d4e9 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -782,7 +782,6 @@ static void ccw_machine_class_init(ObjectClass *oc, voi= d *data) =20 s390mc->hpage_1m_allowed =3D true; s390mc->max_threads =3D 1; - mc->init =3D ccw_init; mc->reset =3D s390_machine_reset; mc->block_default_type =3D IF_VIRTIO; mc->no_cdrom =3D 1; @@ -852,6 +851,12 @@ static const TypeInfo ccw_machine_info =3D { }; =20 #define DEFINE_CCW_MACHINE_IMPL(latest, ...) = \ + static void MACHINE_VER_SYM(mach_init, ccw, __VA_ARGS__)(MachineState = *mach) \ + { = \ + current_mc =3D S390_CCW_MACHINE_CLASS(MACHINE_GET_CLASS(mach)); = \ + MACHINE_VER_SYM(instance_options, ccw, __VA_ARGS__)(mach); = \ + ccw_init(mach); = \ + } = \ static void MACHINE_VER_SYM(class_init, ccw, __VA_ARGS__)( = \ ObjectClass *oc, = \ void *data) = \ @@ -859,24 +864,18 @@ static const TypeInfo ccw_machine_info =3D { MachineClass *mc =3D MACHINE_CLASS(oc); = \ MACHINE_VER_SYM(class_options, ccw, __VA_ARGS__)(mc); = \ mc->desc =3D "Virtual s390x machine (version " MACHINE_VER_STR(__V= A_ARGS__) ")"; \ + mc->init =3D MACHINE_VER_SYM(mach_init, ccw, __VA_ARGS__); = \ MACHINE_VER_DEPRECATION(__VA_ARGS__); = \ if (latest) { = \ mc->alias =3D "s390-ccw-virtio"; = \ mc->is_default =3D true; = \ } = \ } = \ - static void MACHINE_VER_SYM(instance_init, ccw, __VA_ARGS__)(Object *o= bj) \ - { = \ - MachineState *machine =3D MACHINE(obj); = \ - current_mc =3D S390_CCW_MACHINE_CLASS(MACHINE_GET_CLASS(machine));= \ - MACHINE_VER_SYM(instance_options, ccw, __VA_ARGS__)(machine); = \ - } = \ static const TypeInfo MACHINE_VER_SYM(info, ccw, __VA_ARGS__) =3D = \ { = \ .name =3D MACHINE_VER_TYPE_NAME("s390-ccw-virtio", __VA_ARGS__), = \ .parent =3D TYPE_S390_CCW_MACHINE, = \ .class_init =3D MACHINE_VER_SYM(class_init, ccw, __VA_ARGS__), = \ - .instance_init =3D MACHINE_VER_SYM(instance_init, ccw, __VA_ARGS__= ), \ }; = \ static void MACHINE_VER_SYM(register, ccw, __VA_ARGS__)(void) = \ { = \ --=20 2.48.1 From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457136; cv=none; d=zohomail.com; s=zohoarc; b=eQDoACJVeWzLpMi7i63JDvz7iCaO0c2bpjveeE59nhF32ichaIzpepHTDZw/6RjFbWMuIF3bx9APEyY9RIDiYmFTeeNyEmx9AmaJ/7qZUKT6rQyaUDBud85d0nudi/Rb3iB6UryJ5KbfvIF03XGoWcFUDQEzk42Y44xOqdm1gcY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457136; h=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=91Ph9kNYeXsoVFO6NxOH/K8Dbo3YcWqv4IxMaz5wxg8=; b=c6qPHMxpBDbNBEHsmMnphwGVcJ/WIU8yVrNAR+TCmyISU2jNoDbHE9An0gg/WQC57GWt7sRgimVA7N2/SRSZwjJuOp13VQEt9pWUbMcugUXBE5t2V2/k8ka6PHMNEaflT/at/CvGT5cfx2P80pan3H3CcM+MZFoYv2L6GdHqjus= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737457136409916.1976928229228; Tue, 21 Jan 2025 02:58:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBw7-0006gt-Vu; Tue, 21 Jan 2025 05:56:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBvz-0006ek-MX for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:41 -0500 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 1taBvx-00056s-7r for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:38 -0500 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-180-txlZHH0pOYSyvuusR7v7tA-1; Tue, 21 Jan 2025 05:56:30 -0500 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 8713C195604F; Tue, 21 Jan 2025 10:56:29 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 047C519560A7; Tue, 21 Jan 2025 10:56:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737456996; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=91Ph9kNYeXsoVFO6NxOH/K8Dbo3YcWqv4IxMaz5wxg8=; b=NJSWUZRLMOJQcDutDw3n1nMKr6nXx6pCyLfN6kW3gjaBIk7K9FVP53TAVnNp6cvZlBbg39 LQLlN85NYLTYnNdLwt3tv9CfM+2PUubObyBvCN5I87Wpveh8fyZAC6ErGRQSqROuWrLsTb Pvz9wgKFDXvwZe6+6RdnHuC4jfzD9KE= X-MC-Unique: txlZHH0pOYSyvuusR7v7tA-1 X-Mimecast-MFC-AGG-ID: txlZHH0pOYSyvuusR7v7tA From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , Jared Rossi , Eric Farman Subject: [PULL 5/9] pc-bios/s390-ccw/virtio: Add a function to reset a virtio device Date: Tue, 21 Jan 2025 11:56:07 +0100 Message-ID: <20250121105613.1286672-6-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, 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_H2=-0.036, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457137277019000 Content-Type: text/plain; charset="utf-8" To be able to properly silence a virtio device after using it, we need a global function to reset the device. Reviewed-by: Jared Rossi Reviewed-by: Eric Farman Tested-by: Jared Rossi Message-ID: <20250116115826.192047-2-thuth@redhat.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio.h | 1 + pc-bios/s390-ccw/virtio.c | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 9faf3986b1..f13fa6f5fe 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -274,6 +274,7 @@ void vring_send_buf(VRing *vr, void *p, int len, int fl= ags); int vr_poll(VRing *vr); int vring_wait_reply(void); int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd); +int virtio_reset(VDev *vdev); int virtio_setup_ccw(VDev *vdev); =20 int virtio_net_init(void *mac_addr); diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 8b5a370bb3..cd6c99c7e3 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -217,6 +217,11 @@ int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd) return 0; } =20 +int virtio_reset(VDev *vdev) +{ + return run_ccw(vdev, CCW_CMD_VDEV_RESET, NULL, 0, false); +} + int virtio_setup_ccw(VDev *vdev) { int i, cfg_size =3D 0; @@ -235,7 +240,7 @@ int virtio_setup_ccw(VDev *vdev) vdev->config.blk.blk_size =3D 0; /* mark "illegal" - setup started... = */ vdev->guessed_disk_nature =3D VIRTIO_GDN_NONE; =20 - run_ccw(vdev, CCW_CMD_VDEV_RESET, NULL, 0, false); + virtio_reset(vdev); =20 status =3D VIRTIO_CONFIG_S_ACKNOWLEDGE; if (run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false= )) { --=20 2.48.1 From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457147; cv=none; d=zohomail.com; s=zohoarc; b=HLnbTUUQ2RJP+MKUEYvPE8gIk3BoFURMIFBMOa9jHXX1TFmcf7nLP25gGV2TSfjbkvKxiIC/y3aH0PLnHup0lqzCYGfyF0Rziyi1OntsDgjVDztTUzHJLHHbdlOobCnWLOLsmEkyS93OP2rYOaLi9aT0Yvhs5oqYpinjUfK2RkI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457147; h=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=QumFOQPyo7577nPrd0rZ1W5G24K4ox1cj5lWb7BKm3g=; b=GCjvK0HgbRtyrGDcqSofQBzoxwU8EchHIN4TYjnkFv6jHF/n6TIHXtjyrWymLomrNAUkUCx9Ie8F18T4RewCjoe950JgTLDXHOWwFKlKYEcfcknl/jZibSRBF6gnBSIcztm26ypqFQDwO2pcW76/wQ7YkB+EKIAkDxHoaoBJREY= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737457147432175.4937025320304; Tue, 21 Jan 2025 02:59:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBw8-0006hP-Fj; Tue, 21 Jan 2025 05:56:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBw1-0006f2-KJ for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:44 -0500 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 1taBvy-00057A-Qw for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:40 -0500 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-318-tWl_ybAxMrWFnrzx4pfhPQ-1; Tue, 21 Jan 2025 05:56:33 -0500 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 D8DA819560B1; Tue, 21 Jan 2025 10:56:31 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 10D5419560A7; Tue, 21 Jan 2025 10:56:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737456998; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QumFOQPyo7577nPrd0rZ1W5G24K4ox1cj5lWb7BKm3g=; b=AFWTq8SPpSXLdE7fnYibU2KxfEvCoQIxMO/AORdkDK8SC4fZJ5MyL7BJC9vkFDzfyHF5pF 6r/eevVLF4pgzYhz6MaR1a1qggmK/8FtM+2by25N8ZGtkAP0x+QqObNR2tgFAngQBspkxv VA+VCBpC02d0b4ucHYQxvgQqYwpiwn4= X-MC-Unique: tWl_ybAxMrWFnrzx4pfhPQ-1 X-Mimecast-MFC-AGG-ID: tWl_ybAxMrWFnrzx4pfhPQ From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , Jared Rossi , Eric Farman Subject: [PULL 6/9] pc-bios/s390-ccw: Fix boot problem with virtio-net devices Date: Tue, 21 Jan 2025 11:56:08 +0100 Message-ID: <20250121105613.1286672-7-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, 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_H2=-0.036, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457149312019000 Content-Type: text/plain; charset="utf-8" When we are trying to boot from virtio-net devices, the s390-ccw bios currently leaves the virtio-net device enabled after using it. That means that the receiving virt queues will continue to happily write incoming network packets into memory. This can corrupt data of the following boot process. For example, if you set up a second guest on a virtual network and create a lot of broadcast traffic there, e.g. with: ping -i 0.02 -s 1400 -b 192.168.1.255 and then you try to boot a guest with two boot devices, a network device first (which should not be bootable) and e.g. a bootable SCSI CD second, then this guest will fail to load the kernel from the CD image: $ qemu-system-s390x -m 2G -nographic -device virtio-scsi-ccw \ -netdev tap,id=3Dnet0 -device virtio-net-ccw,netdev=3Dnet0,bootindex=3D= 1 \ -drive if=3Dnone,file=3Dtest.iso,format=3Draw,id=3Dcd1 \ -device scsi-cd,drive=3Dcd1,bootindex=3D2 LOADPARM=3D[ ] Network boot device detected Network boot starting... Using MAC address: 52:54:00:12:34:56 Requesting information via DHCP: done Using IPv4 address: 192.168.1.76 Using TFTP server: 192.168.1.1 Trying pxelinux.cfg files... TFTP error: ICMP ERROR "port unreachable" Receiving data: 0 KBytes Repeating TFTP read request... TFTP error: ICMP ERROR "port unreachable" Failed to load OS from network. Failed to IPL from this network! LOADPARM=3D[ ] Using virtio-scsi. ! virtio-scsi:setup:inquiry: response VS RESP=3Dff ! ERROR: No suitable device for IPL. Halting... We really have to shut up the virtio-net devices after we're not using it anymore. The easiest way to do this is to simply reset the device, so let's do that now. Reviewed-by: Jared Rossi Reviewed-by: Eric Farman Tested-by: Jared Rossi Message-ID: <20250116115826.192047-3-thuth@redhat.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio.h | 1 + pc-bios/s390-ccw/netmain.c | 33 +++++++++++++++++++++++---------- pc-bios/s390-ccw/virtio-net.c | 5 +++++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index f13fa6f5fe..5c5e808a50 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -278,5 +278,6 @@ int virtio_reset(VDev *vdev); int virtio_setup_ccw(VDev *vdev); =20 int virtio_net_init(void *mac_addr); +void virtio_net_deinit(void); =20 #endif /* VIRTIO_H */ diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index e46e470db4..335ea9b63e 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -153,19 +153,10 @@ static int tftp_load(filename_ip_t *fnip, void *buffe= r, int len) return rc; } =20 -static int net_init(filename_ip_t *fn_ip) +static int net_init_ip(filename_ip_t *fn_ip) { int rc; =20 - memset(fn_ip, 0, sizeof(filename_ip_t)); - - rc =3D virtio_net_init(mac); - if (rc < 0) { - puts("Could not initialize network device"); - return -101; - } - fn_ip->fd =3D rc; - printf(" Using MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); =20 @@ -221,11 +212,33 @@ static int net_init(filename_ip_t *fn_ip) return rc; } =20 +static int net_init(filename_ip_t *fn_ip) +{ + int rc; + + memset(fn_ip, 0, sizeof(filename_ip_t)); + + rc =3D virtio_net_init(mac); + if (rc < 0) { + puts("Could not initialize network device"); + return -101; + } + fn_ip->fd =3D rc; + + rc =3D net_init_ip(fn_ip); + if (rc < 0) { + virtio_net_deinit(); + } + + return rc; +} + static void net_release(filename_ip_t *fn_ip) { if (fn_ip->ip_version =3D=3D 4) { dhcp_send_release(fn_ip->fd); } + virtio_net_deinit(); } =20 /** diff --git a/pc-bios/s390-ccw/virtio-net.c b/pc-bios/s390-ccw/virtio-net.c index 578c89d0c5..301445bf97 100644 --- a/pc-bios/s390-ccw/virtio-net.c +++ b/pc-bios/s390-ccw/virtio-net.c @@ -140,3 +140,8 @@ int recv(int fd, void *buf, int maxlen, int flags) =20 return len; } + +void virtio_net_deinit(void) +{ + virtio_reset(virtio_get_device()); +} --=20 2.48.1 From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457115; cv=none; d=zohomail.com; s=zohoarc; b=Nb5HiD3FLPX4VHs2bNIlfyPGt6ixQ+5ZdsYF/B8tNgovURUeg6l22flChDvIhQrGQfCwFyqv01rgfvVUl1cXi9svHFyh+Ge2x4ULabnZDtV2Sr0Pmdp3YOceoFyxSgiy4tqDt9/nwOtRcEiUS2FxQX1AsEtU4I0/u8LAFq/5jYA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457115; h=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=PpOzal/CDhE+xu2+B9vuKRX/pEzC2LFYXLAf0l8VL6I=; b=clZkn+UwvIvzPD1NY58UreCQVArTNjAZZnLAH5LB7zMlvLBEHjwlnu/cTIhA3oLKN6AqCx/ex60W9A6vfVxxJd6qYltYSp8fZhhE1Oy08t2Qyb8poyXF29uPmR60DMbMyizjIq4F7GAOA7VEjmbNgYPuH02/2RFyTJXB00C2IIo= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737457115026359.00595461218916; Tue, 21 Jan 2025 02:58:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBw9-0006hS-0s; Tue, 21 Jan 2025 05:56:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBw3-0006fN-HH for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:45 -0500 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 1taBw0-00057P-HS for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:42 -0500 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-594-qx4YzyffPreGs1j3Xf1s5g-1; Tue, 21 Jan 2025 05:56:35 -0500 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 6232A1955F30; Tue, 21 Jan 2025 10:56:34 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 59F0E19560A7; Tue, 21 Jan 2025 10:56:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737457000; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PpOzal/CDhE+xu2+B9vuKRX/pEzC2LFYXLAf0l8VL6I=; b=LDreGZ79CU6Jh9IW7/W3HWAXNyHHuH9cPQ8xg3Zr4eoHvKkSLWGWlPvvEIBll7WYiOKU/3 p182wYqSc3/suoxee5XNUBkYD/tLXr8LyduuJUcOtUFjzOmAlkE0T/jbYfU/jBJj2jF3C+ oTZrzcv6ys/W2z6unNxx3rYxfFZR9Ok= X-MC-Unique: qx4YzyffPreGs1j3Xf1s5g-1 X-Mimecast-MFC-AGG-ID: qx4YzyffPreGs1j3Xf1s5g From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , Jared Rossi , Eric Farman Subject: [PULL 7/9] pc-bios/s390-ccw/netmain: Fix error messages with regards to the TFTP server Date: Tue, 21 Jan 2025 11:56:09 +0100 Message-ID: <20250121105613.1286672-8-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, 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_H2=-0.036, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457117069019000 Content-Type: text/plain; charset="utf-8" The code in net_init_ip() currently bails out early if "rc" is less than 0, so the if-statements that check for negative "rc" codes to print out some specific error messages with regards to the TFTP server are never reached. Move them earlier to bring that dead code back to life. Reviewed-by: Jared Rossi Reviewed-by: Eric Farman Tested-by: Jared Rossi Message-ID: <20250116115826.192047-4-thuth@redhat.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netmain.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index 335ea9b63e..719a547ada 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -168,6 +168,14 @@ static int net_init_ip(filename_ip_t *fn_ip) if (fn_ip->ip_version =3D=3D 4) { set_ipv4_address(fn_ip->own_ip); } + } else if (rc =3D=3D -2) { + printf("ARP request to TFTP server (%d.%d.%d.%d) failed\n", + (fn_ip->server_ip >> 24) & 0xFF, (fn_ip->server_ip >> 16) &= 0xFF, + (fn_ip->server_ip >> 8) & 0xFF, fn_ip->server_ip & 0xFF); + return -102; + } else if (rc =3D=3D -4 || rc =3D=3D -3) { + puts("Can't obtain TFTP server IP address"); + return -107; } else { puts("Could not get IP address"); return -101; @@ -183,17 +191,6 @@ static int net_init_ip(filename_ip_t *fn_ip) printf(" Using IPv6 address: %s\n", ip6_str); } =20 - if (rc =3D=3D -2) { - printf("ARP request to TFTP server (%d.%d.%d.%d) failed\n", - (fn_ip->server_ip >> 24) & 0xFF, (fn_ip->server_ip >> 16) &= 0xFF, - (fn_ip->server_ip >> 8) & 0xFF, fn_ip->server_ip & 0xFF); - return -102; - } - if (rc =3D=3D -4 || rc =3D=3D -3) { - puts("Can't obtain TFTP server IP address"); - return -107; - } - printf(" Using TFTP server: "); if (fn_ip->ip_version =3D=3D 4) { printf("%d.%d.%d.%d\n", --=20 2.48.1 From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457110; cv=none; d=zohomail.com; s=zohoarc; b=T6D2zt5uLMU/MR/otKZeGP0i7R3mvXiuJ0bjfgQGsWFp51igLlxYszh/XoJ9tNyXhd4tXUCfwerLWHtbklYujvL2IX4ZFDFyH7RSafiioZlSXmII/7aIdtBVtppqKW+3j/OClJdyKazoZzWqbOajcrK2PKvdLh4viyEXHdAM1Us= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457110; h=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=rOWdPqUs+IftHtvHWcghIGatiIiKcgenGAsSUpAA+Go=; b=Ky6MPllMmGv3FboudlyJwzBsHgpin1YadoVxYoZEm7nAbzfRDdEL/He170uIHIuGTxgt7KXOr/Wl3P6PwUvnKvzpdKQgYpPjyrXNGp8dNNuXH+My5yLu1jb9TqM3zKIb6Ami5ch7jZ3DzGj12tws5wcxSslFlNHTntLdJ4iKu3Q= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737457110985789.9827683173797; Tue, 21 Jan 2025 02:58:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBw9-0006hW-Cu; Tue, 21 Jan 2025 05:56:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBw6-0006gN-T5 for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:46 -0500 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 1taBw3-00057f-Op for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:46 -0500 Received: from mx-prod-mc-04.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-642-oiGIEKTLPD-xDvhdZcwxug-1; Tue, 21 Jan 2025 05:56:37 -0500 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-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BB48B19560BB; Tue, 21 Jan 2025 10:56:36 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CF96919560A7; Tue, 21 Jan 2025 10:56:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737457002; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rOWdPqUs+IftHtvHWcghIGatiIiKcgenGAsSUpAA+Go=; b=MFbbTxPKXOqLLTVLTupHESG5N4RwJUS7kzI5IuhhkTGMwzt2BKu5P0AAg3DHB/u2391Z27 /OmBLrYLWpikBhbu9nOiF16+9jR34MwIj3SfuDg3CIFJj3N3gpJ74HFKzvYh31yLlwL1ia oJmDSVkg3jpjgh5eostlaAPrCbE9elA= X-MC-Unique: oiGIEKTLPD-xDvhdZcwxug-1 X-Mimecast-MFC-AGG-ID: oiGIEKTLPD-xDvhdZcwxug From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , Jared Rossi Subject: [PULL 8/9] pc-bios/s390-ccw: Abort IPL on invalid loadparm Date: Tue, 21 Jan 2025 11:56:10 +0100 Message-ID: <20250121105613.1286672-9-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, 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_H2=-0.036, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457113027019000 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Because the loadparm specifies an exact kernel the user wants to boot, if t= he loadparm is invalid it must represent a misconfiguration of the guest. Thus= we should abort the IPL immediately, without attempting to use other devices, = to avoid booting into an unintended guest image. Signed-off-by: Jared Rossi Message-ID: <20250117212235.1324063-2-jrossi@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/bootmap.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index 56f2f75640..0f8baa0198 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -336,8 +336,7 @@ static int run_eckd_boot_script(block_number_t bmt_bloc= k_nr, =20 debug_print_int("loadparm", loadparm); if (loadparm >=3D MAX_BOOT_ENTRIES) { - puts("loadparm value greater than max number of boot entries allow= ed"); - return -EINVAL; + panic("loadparm value greater than max number of boot entries allo= wed"); } =20 memset(sec, FREE_SPACE_FILLER, sizeof(sec)); @@ -348,8 +347,8 @@ static int run_eckd_boot_script(block_number_t bmt_bloc= k_nr, =20 block_nr =3D gen_eckd_block_num(&bmt->entry[loadparm].xeckd, ldipl); if (block_nr =3D=3D NULL_BLOCK_NR) { - puts("Cannot find Boot Map Table Entry"); - return -EIO; + printf("The requested boot entry (%d) is invalid\n", loadparm); + panic("Invalid loadparm"); } =20 memset(sec, FREE_SPACE_FILLER, sizeof(sec)); @@ -792,8 +791,12 @@ static int ipl_scsi(void) =20 debug_print_int("loadparm", loadparm); if (loadparm >=3D MAX_BOOT_ENTRIES) { - puts("loadparm value greater than max number of boot entries allow= ed"); - return -EINVAL; + panic("loadparm value greater than max number of boot entries allo= wed"); + } + + if (!valid_entries[loadparm]) { + printf("The requested boot entry (%d) is invalid\n", loadparm); + panic("Invalid loadparm"); } =20 return zipl_run(&prog_table->entry[loadparm].scsi); --=20 2.48.1 From nobody Thu Jan 23 03:14:51 2025 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1737457148; cv=none; d=zohomail.com; s=zohoarc; b=lCDQdzunAbn+FTPN//segdYhtMEmHFZhR82O/CtCOtFiNMjvYcdip2phtJBPJNFuViJjo/qTMoedDFA/t7mUnOnGr8sIIT/CN+uswMCcDb8vqJzH1h8yEFqDzajDpZCSmFOt+i6wjCH6ZqsO/hrWklvfP/8tKPKIUdN1y4U4NLU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737457148; h=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=24qseEP3alA6Ce2ZB/idAhD3gG3VYKuib/6K3zEd+xw=; b=DUhj71P+v1lF4hy1X72O42z505CBLsmweInu6iypZzGYFaT5NQgUUlRa0mP3+LjZblVNr7JDNqmahYar1Vhkb7Hzh+ovWCx/ZGG82IJKLfrL2CnGB4S0YzXpUPHIcUWmPReIy7qZOQePgJmSuxbc+LTWNqpDyPaIyyfV8u68QwU= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1737457148387859.9813917368799; Tue, 21 Jan 2025 02:59:08 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taBwD-0006iv-CL; Tue, 21 Jan 2025 05:56:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taBwB-0006ie-NY for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:51 -0500 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 1taBw4-00057y-TF for qemu-devel@nongnu.org; Tue, 21 Jan 2025 05:56:51 -0500 Received: from mx-prod-mc-02.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-614-HMsBWHMjNDaAkGn5biLmqw-1; Tue, 21 Jan 2025 05:56:40 -0500 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-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id AC0E01955DC6 for ; Tue, 21 Jan 2025 10:56:39 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.56]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 39C5F19560A7; Tue, 21 Jan 2025 10:56:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737457003; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=24qseEP3alA6Ce2ZB/idAhD3gG3VYKuib/6K3zEd+xw=; b=M2kK/kkMTmDmsyJ5TJDQBq0q7UpsuNMonOxg0dX/gfKVAbHcHi6AY3c/lGnbGp4vGNzKV7 kH7b24k3tz3uaDTmhlp9T49+PTWuIrWMJFn+0MDfbAGZ+VZqFSX5jOBR+2GvU9o9EaXfLZ R6QSsDPuNqraP0znM9FRinOm9/Jj2x0= X-MC-Unique: HMsBWHMjNDaAkGn5biLmqw-1 X-Mimecast-MFC-AGG-ID: HMsBWHMjNDaAkGn5biLmqw From: Thomas Huth To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi Subject: [PULL 9/9] pc-bios: Update the s390 bios images with the recent changes Date: Tue, 21 Jan 2025 11:56:11 +0100 Message-ID: <20250121105613.1286672-10-thuth@redhat.com> In-Reply-To: <20250121105613.1286672-1-thuth@redhat.com> References: <20250121105613.1286672-1-thuth@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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -45 X-Spam_score: -4.6 X-Spam_bar: ---- X-Spam_report: (-4.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-3, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, LOTS_OF_MONEY=0.001, PDS_BTC_ID=0.499, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.036, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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: 1737457149351019000 Content-Type: text/plain; charset="utf-8" Fix the problem with the non-quiesced virtio-net device and make sure to abort the boot process if the user specified a wrong loadparm parameter. Signed-off-by: Thomas Huth --- pc-bios/s390-ccw.img | Bin 79608 -> 96000 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img index 0cbedf0fa65fb87a9e19b3bcf0c4b81002801b5c..47240f0a74eec17b0da3ad33415= 7d1b0e62632b4 100644 GIT binary patch literal 96000 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