From patchwork Thu Jul 2 20:48:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321919 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=ApG6gQjj; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVdQ2Nvrz9sRk for ; Fri, 3 Jul 2020 06:51:54 +1000 (AEST) Received: from localhost ([::1]:38486 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6BT-0008AX-KY for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:51:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54494) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr691-0004Al-SK for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:19 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:27450 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr68z-0003X2-W4 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722957; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=d/4SzrO51wLCoiHfnRNqtnLD968Kuwi1FHNsO/et+5g=; b=ApG6gQjj/EKZfgn3m7MmdnanCqhTogtwg1U63FmC/dMZqG0zGDFV14Y3V0oY15UF2gy87k hLUEZ7OKuCY6QyVk4dn7zg47LZhpV6syOeutjW8yoYS8WLcqS9Jeok1GaHKmf+ZGzp8O8Z y2+cSCiZfj/fpXTyYaAcCQZf/EJmtPY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-291-wwrqCUHTP7Wol-GABUN_bg-1; Thu, 02 Jul 2020 16:49:13 -0400 X-MC-Unique: wwrqCUHTP7Wol-GABUN_bg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5395A800402; Thu, 2 Jul 2020 20:49:12 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id B33DB5C1D0; Thu, 2 Jul 2020 20:49:05 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id C8E83204AE; Thu, 2 Jul 2020 22:48:59 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 01/21] microvm: name qboot binary qboot.rom Date: Thu, 2 Jul 2020 22:48:39 +0200 Message-Id: <20200702204859.9876-2-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" qboot isn't a bios and shouldnt be named that way. Signed-off-by: Gerd Hoffmann --- hw/i386/microvm.c | 4 ++-- pc-bios/{bios-microvm.bin => qboot.rom} | Bin roms/Makefile | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) rename pc-bios/{bios-microvm.bin => qboot.rom} (100%) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 5e931975a06d..1300c396947b 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -47,7 +47,7 @@ #include "kvm_i386.h" #include "hw/xen/start_info.h" -#define MICROVM_BIOS_FILENAME "bios-microvm.bin" +#define MICROVM_QBOOT_FILENAME "qboot.rom" static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s) { @@ -158,7 +158,7 @@ static void microvm_devices_init(MicrovmMachineState *mms) } if (bios_name == NULL) { - bios_name = MICROVM_BIOS_FILENAME; + bios_name = MICROVM_QBOOT_FILENAME; } x86_bios_rom_init(get_system_memory(), true); } diff --git a/pc-bios/bios-microvm.bin b/pc-bios/qboot.rom similarity index 100% rename from pc-bios/bios-microvm.bin rename to pc-bios/qboot.rom diff --git a/roms/Makefile b/roms/Makefile index f9acf39954dc..b185c880541c 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -68,7 +68,7 @@ default help: @echo " opensbi64-virt -- update OpenSBI for 64-bit virt machine" @echo " opensbi32-sifive_u -- update OpenSBI for 32-bit sifive_u machine" @echo " opensbi64-sifive_u -- update OpenSBI for 64-bit sifive_u machine" - @echo " bios-microvm -- update bios-microvm.bin (qboot)" + @echo " qboot -- update qboot" @echo " clean -- delete the files generated by the previous" \ "build targets" @@ -194,9 +194,9 @@ opensbi64-sifive_u: PLATFORM="sifive/fu540" cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin -bios-microvm: +qboot: $(MAKE) -C qboot - cp qboot/bios.bin ../pc-bios/bios-microvm.bin + cp qboot/bios.bin ../pc-bios/qboot.rom clean: rm -rf seabios/.config seabios/out seabios/builds From patchwork Thu Jul 2 20:48:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321923 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=a7gmJrXS; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVh50Ql8z9sR4 for ; Fri, 3 Jul 2020 06:54:13 +1000 (AEST) Received: from localhost ([::1]:46764 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6Di-0003Gb-Ke for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:54:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54492) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr691-0004AV-SE for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:19 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:33158 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr68z-0003Wq-A6 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722955; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Wy2GQheDSeuYedKPtPUZiomVVNMUQqvM47ukFGtvX+g=; b=a7gmJrXS9XlgDAFvWEvnMljDrzDROHWDD3PQ34VFuwo87vzG9iCzfZI004hTvLzA5AvgbR UF/NoXypXnCUtyJHT/BLqr7ZzB/AazzyXJcYLgZq6Et6li8m9eU+z/R7ef+XNRQCLUCg9M v8doGV7cn1Tc7/YED/8Vr2ulFjjc8yM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-316-YZ0pdNNsO3KBqDbmDAFMtw-1; Thu, 02 Jul 2020 16:49:12 -0400 X-MC-Unique: YZ0pdNNsO3KBqDbmDAFMtw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id F1183BFC0; Thu, 2 Jul 2020 20:49:10 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 21537610B0; Thu, 2 Jul 2020 20:49:02 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id D36E231E58; Thu, 2 Jul 2020 22:48:59 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 02/21] seabios: add microvm config, update build rules Date: Thu, 2 Jul 2020 22:48:40 +0200 Message-Id: <20200702204859.9876-3-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:42:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- roms/Makefile | 5 ++++- roms/config.seabios-microvm | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 roms/config.seabios-microvm diff --git a/roms/Makefile b/roms/Makefile index b185c880541c..1a9d14674464 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -72,9 +72,12 @@ default help: @echo " clean -- delete the files generated by the previous" \ "build targets" -bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k +bios: build-seabios-config-seabios-128k \ + build-seabios-config-seabios-256k \ + build-seabios-config-seabios-microvm cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin + cp seabios/builds/seabios-microvm/bios.bin ../pc-bios/bios-microvm.bin vgabios seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants)) diff --git a/roms/config.seabios-microvm b/roms/config.seabios-microvm new file mode 100644 index 000000000000..a253e2edc6ec --- /dev/null +++ b/roms/config.seabios-microvm @@ -0,0 +1,26 @@ +CONFIG_QEMU=y +CONFIG_QEMU_HARDWARE=y +CONFIG_PERMIT_UNALIGNED_PCIROM=y +CONFIG_ROM_SIZE=128 +CONFIG_XEN=n +CONFIG_BOOTSPLASH=n +CONFIG_ATA=n +CONFIG_AHCI=n +CONFIG_SDCARD=n +CONFIG_PVSCSI=n +CONFIG_ESP_SCSI=n +CONFIG_LSI_SCSI=n +CONFIG_MEGASAS=n +CONFIG_MPT_SCSI=n +CONFIG_FLOPPY=n +CONFIG_FLASH_FLOPPY=n +CONFIG_NVME=n +CONFIG_PS2PORT=n +CONFIG_USB=n +CONFIG_LPT=n +CONFIG_RTC_TIMER=n +CONFIG_USE_SMM=n +CONFIG_PMTIMER=n +CONFIG_TCGBIOS=n +CONFIG_HARDWARE_IRQ=n +CONFIG_ACPI_PARSE=y From patchwork Thu Jul 2 20:48:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321921 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=UpIygi16; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVfB33RZz9sPF for ; Fri, 3 Jul 2020 06:52:34 +1000 (AEST) Received: from localhost ([::1]:40388 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6C8-0000Yf-4U for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:52:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54642) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr698-0004Mu-0w for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:26 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:44590 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr690-0003XH-Qh for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722958; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=72IhNZnwYQ6IGrXjvHSLQOh2SmAxBgwccGavr45bvFM=; b=UpIygi16oF1Gwh8jFsZy4w3VWd6b85MFzwpfQCgtvc+4Wgy1aFPAnpJLeGZUk11zySa/nf GrCIOqGWtOivWiNdlwdoJu3klliKQZTK3i9zfegegpNxO8xkUd5QhpXDaZtkkMhh+jyuQB V5S9OTXUhqnIoHEmSKsreNCs/X+1pOw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-333-BrxLrlDoN-ehZjgXOzckZA-1; Thu, 02 Jul 2020 16:49:15 -0400 X-MC-Unique: BrxLrlDoN-ehZjgXOzckZA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DAA2C1932480; Thu, 2 Jul 2020 20:49:13 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id CCC7A1A925; Thu, 2 Jul 2020 20:49:02 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id DCF7631E60; Thu, 2 Jul 2020 22:48:59 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 03/21] seabios: add bios-microvm.bin binary Date: Thu, 2 Jul 2020 22:48:41 +0200 Message-Id: <20200702204859.9876-4-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:23:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- pc-bios/bios-microvm.bin | Bin 0 -> 131072 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 pc-bios/bios-microvm.bin GIT binary patch literal 131072 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Š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 literal 0 HcmV?d00001 diff --git a/pc-bios/bios-microvm.bin b/pc-bios/bios-microvm.bin new file mode 100644 index 0000000000000000000000000000000000000000..352c82692e11155c3e2c70d226c789a7c2b055f4 From patchwork Thu Jul 2 20:48:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321918 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=dBC1cvxu; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVby4scVz9sR4 for ; Fri, 3 Jul 2020 06:50:38 +1000 (AEST) Received: from localhost ([::1]:32796 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6AG-0005fb-C3 for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:50:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54530) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr693-0004Ca-2J for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:21 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:44803 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr690-0003X7-7Y for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722957; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=iZ8q6BNQD71G/ReGAtp/ZouIvCh6XyxiS1/Hett2Vw4=; b=dBC1cvxucaRCOutwDPUTpQSysJt58hYiPPjk+zVNV/sOqvEv3iZxeidqMxyihnooZ3+YAC HTui2NS5khdlSzSJLm+lAWyq5XHfnx5WiU9E1UeE4JXN4vFOrBATH2hb/yGgwMajjqMo+0 ExSahQnL4Osvn1G90nZF4yvhq7DkMq0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-293-t2U6IrGlPBGVrhw3hxrHkg-1; Thu, 02 Jul 2020 16:49:14 -0400 X-MC-Unique: t2U6IrGlPBGVrhw3hxrHkg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DAE2080183C; Thu, 2 Jul 2020 20:49:12 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9BB685C1C5; Thu, 2 Jul 2020 20:49:03 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id E7BEA31E62; Thu, 2 Jul 2020 22:48:59 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 04/21] acpi: ged: add control regs Date: Thu, 2 Jul 2020 22:48:42 +0200 Message-Id: <20200702204859.9876-5-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add control regs (sleep, reset) for hw-reduced acpi. Signed-off-by: Gerd Hoffmann --- include/hw/acpi/generic_event_device.h | 7 ++++ hw/acpi/generic_event_device.c | 44 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 90a9180db572..474c92198080 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -72,6 +72,12 @@ #define ACPI_GED_EVT_SEL_OFFSET 0x0 #define ACPI_GED_EVT_SEL_LEN 0x4 +#define ACPI_GED_REG_SLEEP_CTL 0x00 +#define ACPI_GED_REG_SLEEP_STS 0x01 +#define ACPI_GED_REG_RESET 0x02 +#define ACPI_GED_RESET_VALUE 0x42 +#define ACPI_GED_REG_COUNT 0x03 + #define GED_DEVICE "GED" #define AML_GED_EVT_REG "EREG" #define AML_GED_EVT_SEL "ESEL" @@ -87,6 +93,7 @@ typedef struct GEDState { MemoryRegion evt; + MemoryRegion regs; uint32_t sel; } GEDState; diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index b8abdefa1c77..491df80a5cc7 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -20,6 +20,7 @@ #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/error-report.h" +#include "sysemu/runstate.h" static const uint32_t ged_supported_events[] = { ACPI_GED_MEM_HOTPLUG_EVT, @@ -176,6 +177,45 @@ static const MemoryRegionOps ged_evt_ops = { }, }; +static uint64_t ged_regs_read(void *opaque, hwaddr addr, unsigned size) +{ + return 0; +} + +static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data, + unsigned int size) +{ + bool slp_en; + int slp_typ; + + switch (addr) { + case ACPI_GED_REG_SLEEP_CTL: + slp_typ = (data >> 2) & 0x07; + slp_en = (data >> 5) & 0x01; + if (slp_en && slp_typ == 5) { + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + case ACPI_GED_REG_SLEEP_STS: + return; + case ACPI_GED_REG_RESET: + if (data == ACPI_GED_RESET_VALUE) { + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + } +} + +static const MemoryRegionOps ged_regs_ops = { + .read = ged_regs_read, + .write = ged_regs_write, + .endianness = DEVICE_LITTLE_ENDIAN, + .valid = { + .min_access_size = 1, + .max_access_size = 1, + }, +}; + static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -332,6 +372,10 @@ static void acpi_ged_initfn(Object *obj) sysbus_init_mmio(sbd, &s->container_memhp); acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev), &s->memhp_state, 0); + + memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, + TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); + sysbus_init_mmio(sbd, &ged_st->regs); } static void acpi_ged_class_init(ObjectClass *class, void *data) From patchwork Thu Jul 2 20:48:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321934 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=QMbOqIrv; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVqw4lcCz9sPF for ; Fri, 3 Jul 2020 07:01:00 +1000 (AEST) Received: from localhost ([::1]:44278 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6KI-0007EP-9l for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 17:00:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54922) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69J-0004uM-G4 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:37 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:59915 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr69B-0003aD-QE for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722969; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=kAntFizmHpnUAmvFukwiiK0EChGO5UzOb+cqjc0mD1M=; b=QMbOqIrv+iDHkRdUZXoeXuLzx3MtTYCRVFjvNCDzkBH1U7Qi1sbaaELKXq7roYWCJ70vHg m44EV1Z3C8xIMeMp/Xku7p3ILM8zmvjNjECOg4xEhweTa2UwqVl3l3XpqblLFlf4WfiREd cK5JUk8gcnFm3+Vu+I4ZFebwK1g6gYA= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-355-7R2kvQw1PV2IisQdiX-agQ-1; Thu, 02 Jul 2020 16:49:27 -0400 X-MC-Unique: 7R2kvQw1PV2IisQdiX-agQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 42D5E80040D; Thu, 2 Jul 2020 20:49:26 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8761673FF3; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 0025031E85; Thu, 2 Jul 2020 22:48:59 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 05/21] acpi: ged: add x86 device variant. Date: Thu, 2 Jul 2020 22:48:43 +0200 Message-Id: <20200702204859.9876-6-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:23:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Set AcpiDeviceIfClass->madt_cpu, otherwise identical to TYPE_ACPI_GED. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- include/hw/acpi/generic_event_device.h | 4 +++ hw/i386/generic_event_device_x86.c | 36 ++++++++++++++++++++++++++ hw/i386/Makefile.objs | 1 + 3 files changed, 41 insertions(+) create mode 100644 hw/i386/generic_event_device_x86.c diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 474c92198080..9687cb524258 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -69,6 +69,10 @@ #define ACPI_GED(obj) \ OBJECT_CHECK(AcpiGedState, (obj), TYPE_ACPI_GED) +#define TYPE_ACPI_GED_X86 "acpi-ged-x86" +#define ACPI_GED_X86(obj) \ + OBJECT_CHECK(AcpiGedX86State, (obj), TYPE_ACPI_GED_X86) + #define ACPI_GED_EVT_SEL_OFFSET 0x0 #define ACPI_GED_EVT_SEL_LEN 0x4 diff --git a/hw/i386/generic_event_device_x86.c b/hw/i386/generic_event_device_x86.c new file mode 100644 index 000000000000..e26fb02a2ef6 --- /dev/null +++ b/hw/i386/generic_event_device_x86.c @@ -0,0 +1,36 @@ +/* + * x86 variant of the generic event device for hw reduced acpi + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + */ + +#include "qemu/osdep.h" +#include "hw/acpi/generic_event_device.h" +#include "hw/i386/pc.h" + +static void acpi_ged_x86_class_init(ObjectClass *class, void *data) +{ + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_CLASS(class); + + adevc->madt_cpu = pc_madt_cpu_entry; +} + +static const TypeInfo acpi_ged_x86_info = { + .name = TYPE_ACPI_GED_X86, + .parent = TYPE_ACPI_GED, + .class_init = acpi_ged_x86_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { TYPE_ACPI_DEVICE_IF }, + { } + } +}; + +static void acpi_ged_x86_register_types(void) +{ + type_register_static(&acpi_ged_x86_info); +} + +type_init(acpi_ged_x86_register_types) diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs index 6abc74551a72..622739305882 100644 --- a/hw/i386/Makefile.objs +++ b/hw/i386/Makefile.objs @@ -17,4 +17,5 @@ obj-$(CONFIG_PC) += port92.o obj-y += kvmvapic.o obj-$(CONFIG_ACPI) += acpi-common.o +obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o obj-$(CONFIG_PC) += acpi-build.o From patchwork Thu Jul 2 20:48:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321936 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=VIIFUu4L; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVtj3dbNz9sPF for ; Fri, 3 Jul 2020 07:03:25 +1000 (AEST) Received: from localhost ([::1]:51830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6Mc-00033v-Of for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 17:03:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54946) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69K-0004wm-9l for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:38 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:27593 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr69D-0003as-57 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722970; 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=7hw25PI/Oaktt4jt4bTRsaghMdLJdGNuxNjT6APB1vw=; b=VIIFUu4LKAxJal1h7A0ZkJMWwlDzdxER8IptCbfZ15Z46Ob+rcPlczjB/NywWLHNnp09qG Gca4zQ7UE8MSl5whpZWwDZMC2WFQBA5lJAM3LYzGzzG/EriU4cCp1r1n3ysWo42jimiUoa 8pAojFK1DBEEnNIdxjMr5f2mmVZLUaA= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-180-xV_s93goMHWI71uvvIEKeA-1; Thu, 02 Jul 2020 16:49:26 -0400 X-MC-Unique: xV_s93goMHWI71uvvIEKeA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 849E6106B245; Thu, 2 Jul 2020 20:49:25 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 825F8779EB; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 0C98531E87; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 06/21] acpi: move acpi_dsdt_add_power_button() to ged Date: Thu, 2 Jul 2020 22:48:44 +0200 Message-Id: <20200702204859.9876-7-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:42:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Allow reuse for microvm. Signed-off-by: Gerd Hoffmann Reviewed-by: Philippe Mathieu-Daud̩ Reviewed-by: Igor Mammedov --- include/hw/acpi/generic_event_device.h | 1 + hw/acpi/generic_event_device.c | 8 ++++++++ hw/arm/virt-acpi-build.c | 8 -------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 9687cb524258..ebed1ffe4231 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -113,5 +113,6 @@ typedef struct AcpiGedState { void build_ged_aml(Aml *table, const char* name, HotplugHandler *hotplug_dev, uint32_t ged_irq, AmlRegionSpace rs, hwaddr ged_base); +void acpi_dsdt_add_power_button(Aml *scope); #endif diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index 491df80a5cc7..6df400e1ee16 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -142,6 +142,14 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev, aml_append(table, dev); } +void acpi_dsdt_add_power_button(Aml *scope) +{ + Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE); + aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C"))); + aml_append(dev, aml_name_decl("_UID", aml_int(0))); + aml_append(scope, dev); +} + /* Memory read by the GED _EVT AML dynamic method */ static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size) { diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 1384a2cf2ab4..852eb6484b0e 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -357,14 +357,6 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap, aml_append(scope, dev); } -static void acpi_dsdt_add_power_button(Aml *scope) -{ - Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE); - aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C"))); - aml_append(dev, aml_name_decl("_UID", aml_int(0))); - aml_append(scope, dev); -} - static void acpi_dsdt_add_tpm(Aml *scope, VirtMachineState *vms) { PlatformBusDevice *pbus = PLATFORM_BUS_DEVICE(vms->platform_bus_dev); From patchwork Thu Jul 2 20:48:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321920 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=YzapxhKw; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVf25BSbz9sPF for ; Fri, 3 Jul 2020 06:52:26 +1000 (AEST) Received: from localhost ([::1]:40076 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6C0-0000Qt-F2 for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:52:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54678) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr699-0004R6-J1 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:27 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:27381 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr694-0003Y4-9k for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722961; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=3qmo/QC1Uo41VjKsHy5G+USrNARFiKstgjsHC8RmoEs=; b=YzapxhKwdDkrRVPYDk6vThvhwC4mrBs8JbeCgV5Y2L4cX1BhTUvm57T9nM4j71EfRI4x3/ a/3UOBl+S7MF1MagYTj3vIj1elVPaIL6by6s5AwdyjUzxa3nznAl5EK1/FqvsOcBDiZuAq 0TikevZa/PPS2KDxSAUU5rDswQ60KEI= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-236-U2UQ2T7fP0CZmI8OqfOBmA-1; Thu, 02 Jul 2020 16:49:20 -0400 X-MC-Unique: U2UQ2T7fP0CZmI8OqfOBmA-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id BA05A1932483; Thu, 2 Jul 2020 20:49:18 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3E1755C1C5; Thu, 2 Jul 2020 20:49:14 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 175AF31E93; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 07/21] microvm: make virtio irq base runtime configurable Date: Thu, 2 Jul 2020 22:48:45 +0200 Message-Id: <20200702204859.9876-8-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:42:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez --- include/hw/i386/microvm.h | 2 +- hw/i386/microvm.c | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index fd34b78e0d2a..03e735723726 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -27,7 +27,6 @@ /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xfeb00000 -#define VIRTIO_IRQ_BASE 5 #define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 @@ -57,6 +56,7 @@ typedef struct { bool auto_kernel_cmdline; /* Machine state */ + uint32_t virtio_irq_base; bool kernel_cmdline_fixed; } MicrovmMachineState; diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 1300c396947b..ab6ee6c67b1a 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -121,10 +121,11 @@ static void microvm_devices_init(MicrovmMachineState *mms) kvmclock_create(); + mms->virtio_irq_base = 5; for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { sysbus_create_simple("virtio-mmio", VIRTIO_MMIO_BASE + i * 512, - x86ms->gsi[VIRTIO_IRQ_BASE + i]); + x86ms->gsi[mms->virtio_irq_base + i]); } /* Optional and legacy devices */ @@ -227,7 +228,7 @@ static void microvm_memory_init(MicrovmMachineState *mms) x86ms->ioapic_as = &address_space_memory; } -static gchar *microvm_get_mmio_cmdline(gchar *name) +static gchar *microvm_get_mmio_cmdline(gchar *name, uint32_t virtio_irq_base) { gchar *cmdline; gchar *separator; @@ -247,7 +248,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name) ret = g_snprintf(cmdline, VIRTIO_CMDLINE_MAXLEN, " virtio_mmio.device=512@0x%lx:%ld", VIRTIO_MMIO_BASE + index * 512, - VIRTIO_IRQ_BASE + index); + virtio_irq_base + index); if (ret < 0 || ret >= VIRTIO_CMDLINE_MAXLEN) { g_free(cmdline); return NULL; @@ -259,6 +260,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name) static void microvm_fix_kernel_cmdline(MachineState *machine) { X86MachineState *x86ms = X86_MACHINE(machine); + MicrovmMachineState *mms = MICROVM_MACHINE(machine); BusState *bus; BusChild *kid; char *cmdline; @@ -282,7 +284,8 @@ static void microvm_fix_kernel_cmdline(MachineState *machine) BusState *mmio_bus = &mmio_virtio_bus->parent_obj; if (!QTAILQ_EMPTY(&mmio_bus->children)) { - gchar *mmio_cmdline = microvm_get_mmio_cmdline(mmio_bus->name); + gchar *mmio_cmdline = microvm_get_mmio_cmdline + (mmio_bus->name, mms->virtio_irq_base); if (mmio_cmdline) { char *newcmd = g_strjoin(NULL, cmdline, mmio_cmdline, NULL); g_free(mmio_cmdline); From patchwork Thu Jul 2 20:48:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321917 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=BlALHV1O; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVbn5JYNz9sR4 for ; Fri, 3 Jul 2020 06:50:29 +1000 (AEST) Received: from localhost ([::1]:60244 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6A7-0005L8-9z for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:50:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54640) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr697-0004Mo-V9 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:26 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:30594) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr693-0003Y0-Ug for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722961; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=K/H4IAEQo1rATudlr05quPSnXhkmj7m8MSc68pSNBdk=; b=BlALHV1O2M2VMM/QXUq65+Lz7QtVkpW1bZBqTl0pA3MnwU61PPN1tfAdSH3To9irfP1FvW oed2MYPmsk2lEG1N5qW1ishD4BtFRsP8+j4TS36NWKa6WKYhn5z5e44mAN/3LRVc2Vp/t2 MFJoE3Wb28P3hQULBOlrNuXq7Nax6tI= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-21-VjaNgpe5M2SMp11DwnwEpw-1; Thu, 02 Jul 2020 16:49:16 -0400 X-MC-Unique: VjaNgpe5M2SMp11DwnwEpw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 221C7800C64; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 45D5B1A92D; Thu, 2 Jul 2020 20:49:14 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 2967331EBB; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 08/21] microvm/acpi: add minimal acpi support Date: Thu, 2 Jul 2020 22:48:46 +0200 Message-Id: <20200702204859.9876-9-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" $subject says all. Can be controlled using -M microvm,acpi=on/off. Signed-off-by: Gerd Hoffmann --- hw/i386/acpi-microvm.h | 8 ++ include/hw/i386/microvm.h | 9 ++ hw/i386/acpi-microvm.c | 181 ++++++++++++++++++++++++++++++++++++++ hw/i386/microvm.c | 40 +++++++++ hw/i386/Kconfig | 1 + hw/i386/Makefile.objs | 1 + 6 files changed, 240 insertions(+) create mode 100644 hw/i386/acpi-microvm.h create mode 100644 hw/i386/acpi-microvm.c diff --git a/hw/i386/acpi-microvm.h b/hw/i386/acpi-microvm.h new file mode 100644 index 000000000000..dfe853690e15 --- /dev/null +++ b/hw/i386/acpi-microvm.h @@ -0,0 +1,8 @@ +#ifndef HW_I386_ACPI_MICROVM_H +#define HW_I386_ACPI_MICROVM_H + +#include "hw/i386/microvm.h" + +void acpi_setup_microvm(MicrovmMachineState *mms); + +#endif diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index 03e735723726..b6e0d4395af7 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -24,12 +24,18 @@ #include "hw/boards.h" #include "hw/i386/x86.h" +#include "hw/acpi/acpi_dev_interface.h" /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xfeb00000 #define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 +#define GED_MMIO_BASE 0xfea00000 +#define GED_MMIO_BASE_MEMHP (GED_MMIO_BASE + 0x100) +#define GED_MMIO_BASE_REGS (GED_MMIO_BASE + 0x200) +#define GED_MMIO_IRQ 9 + /* Machine type options */ #define MICROVM_MACHINE_PIT "pit" #define MICROVM_MACHINE_PIC "pic" @@ -58,6 +64,9 @@ typedef struct { /* Machine state */ uint32_t virtio_irq_base; bool kernel_cmdline_fixed; + Notifier machine_done; + Notifier powerdown_req; + AcpiDeviceIf *acpi_dev; } MicrovmMachineState; #define TYPE_MICROVM_MACHINE MACHINE_TYPE_NAME("microvm") diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c new file mode 100644 index 000000000000..7cd830e628af --- /dev/null +++ b/hw/i386/acpi-microvm.c @@ -0,0 +1,181 @@ +/* Support for generating ACPI tables and passing them to Guests + * + * Copyright (C) 2008-2010 Kevin O'Connor + * Copyright (C) 2006 Fabrice Bellard + * Copyright (C) 2013 Red Hat Inc + * + * Author: Michael S. Tsirkin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" + +#include "exec/memory.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/aml-build.h" +#include "hw/acpi/bios-linker-loader.h" +#include "hw/acpi/generic_event_device.h" +#include "hw/acpi/utils.h" +#include "hw/boards.h" +#include "hw/i386/fw_cfg.h" +#include "hw/i386/microvm.h" + +#include "acpi-common.h" +#include "acpi-microvm.h" + +static void +build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, + MicrovmMachineState *mms) +{ + X86MachineState *x86ms = X86_MACHINE(mms); + Aml *dsdt, *sb_scope, *scope, *pkg; + bool ambiguous; + Object *isabus; + + isabus = object_resolve_path_type("", TYPE_ISA_BUS, &ambiguous); + assert(isabus); + assert(!ambiguous); + + dsdt = init_aml_allocator(); + + /* Reserve space for header */ + acpi_data_push(dsdt->buf, sizeof(AcpiTableHeader)); + + sb_scope = aml_scope("_SB"); + fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg); + isa_build_aml(ISA_BUS(isabus), sb_scope); + build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev), + GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); + acpi_dsdt_add_power_button(sb_scope); + aml_append(dsdt, sb_scope); + + scope = aml_scope("\\"); + pkg = aml_package(4); + aml_append(pkg, aml_int(5)); /* SLEEP_CONTROL_REG.SLP_TYP */ + aml_append(pkg, aml_int(0)); /* ignored */ + aml_append(pkg, aml_int(0)); /* reserved */ + aml_append(pkg, aml_int(0)); /* reserved */ + aml_append(scope, aml_name_decl("_S5", pkg)); + aml_append(dsdt, scope); + + /* copy AML table into ACPI tables blob and patch header there */ + g_array_append_vals(table_data, dsdt->buf->data, dsdt->buf->len); + build_header(linker, table_data, + (void *)(table_data->data + table_data->len - dsdt->buf->len), + "DSDT", dsdt->buf->len, 5, NULL, NULL); + free_aml_allocator(); +} + +static void acpi_build_microvm(AcpiBuildTables *tables, + MicrovmMachineState *mms) +{ + MachineState *machine = MACHINE(mms); + GArray *table_offsets; + GArray *tables_blob = tables->table_data; + unsigned dsdt, xsdt; + AcpiFadtData pmfadt = { + .rev = 5, + .minor_ver = 1, + .flags = ((1 << ACPI_FADT_F_HW_REDUCED_ACPI) | + (1 << ACPI_FADT_F_RESET_REG_SUP)), + .sleep_ctl = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_CTL, + }, + .sleep_sts = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_STS, + }, + .reset_reg = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_RESET, + }, + .reset_val = ACPI_GED_RESET_VALUE, + }; + + table_offsets = g_array_new(false, true /* clear */, + sizeof(uint32_t)); + bios_linker_loader_alloc(tables->linker, + ACPI_BUILD_TABLE_FILE, tables_blob, + 64 /* Ensure FACS is aligned */, + false /* high memory */); + + dsdt = tables_blob->len; + build_dsdt_microvm(tables_blob, tables->linker, mms); + + pmfadt.dsdt_tbl_offset = &dsdt; + pmfadt.xdsdt_tbl_offset = &dsdt; + acpi_add_table(table_offsets, tables_blob); + build_fadt(tables_blob, tables->linker, &pmfadt, NULL, NULL); + + acpi_add_table(table_offsets, tables_blob); + acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine), + mms->acpi_dev, false); + + xsdt = tables_blob->len; + build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL); + + /* RSDP is in FSEG memory, so allocate it separately */ + { + AcpiRsdpData rsdp_data = { + .revision = 2, + .oem_id = ACPI_BUILD_APPNAME6, + .xsdt_tbl_offset = &xsdt, + .rsdt_tbl_offset = NULL, + }; + build_rsdp(tables->rsdp, tables->linker, &rsdp_data); + } + + /* Cleanup memory that's no longer used. */ + g_array_free(table_offsets, true); +} + +static void acpi_build_no_update(void *build_opaque) +{ + /* nothing, microvm tables don't change at runtime */ +} + +void acpi_setup_microvm(MicrovmMachineState *mms) +{ + X86MachineState *x86ms = X86_MACHINE(mms); + AcpiBuildTables tables; + + assert(x86ms->fw_cfg); + + if (!x86_machine_is_acpi_enabled(x86ms)) { + return; + } + + acpi_build_tables_init(&tables); + acpi_build_microvm(&tables, mms); + + /* Now expose it all to Guest */ + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.table_data, + ACPI_BUILD_TABLE_FILE, + ACPI_BUILD_TABLE_MAX_SIZE); + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.linker->cmd_blob, + "etc/table-loader", 0); + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.rsdp, + ACPI_BUILD_RSDP_FILE, 0); + + acpi_build_tables_cleanup(&tables, false); +} diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index ab6ee6c67b1a..75eca7306b11 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -26,6 +26,8 @@ #include "sysemu/cpus.h" #include "sysemu/numa.h" #include "sysemu/reset.h" +#include "sysemu/runstate.h" +#include "acpi-microvm.h" #include "hw/loader.h" #include "hw/irq.h" @@ -41,6 +43,8 @@ #include "hw/i386/e820_memory_layout.h" #include "hw/i386/fw_cfg.h" #include "hw/virtio/virtio-mmio.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/generic_event_device.h" #include "cpu.h" #include "elf.h" @@ -129,6 +133,17 @@ static void microvm_devices_init(MicrovmMachineState *mms) } /* Optional and legacy devices */ + if (x86_machine_is_acpi_enabled(x86ms)) { + DeviceState *dev = qdev_new(TYPE_ACPI_GED_X86); + qdev_prop_set_uint32(dev, "ged-event", ACPI_GED_PWR_DOWN_EVT); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, GED_MMIO_BASE); + /* sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, GED_MMIO_BASE_MEMHP); */ + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 2, GED_MMIO_BASE_REGS); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, + x86ms->gsi[GED_MMIO_IRQ]); + sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal); + mms->acpi_dev = ACPI_DEVICE_IF(dev); + } if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) { qemu_irq *i8259; @@ -438,6 +453,26 @@ static void microvm_machine_set_auto_kernel_cmdline(Object *obj, bool value, mms->auto_kernel_cmdline = value; } +static void microvm_machine_done(Notifier *notifier, void *data) +{ + MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, + machine_done); + + acpi_setup_microvm(mms); +} + +static void microvm_powerdown_req(Notifier *notifier, void *data) +{ + MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, + powerdown_req); + + if (mms->acpi_dev) { + Object *obj = OBJECT(mms->acpi_dev); + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj); + adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS); + } +} + static void microvm_machine_initfn(Object *obj) { MicrovmMachineState *mms = MICROVM_MACHINE(obj); @@ -452,6 +487,11 @@ static void microvm_machine_initfn(Object *obj) /* State */ mms->kernel_cmdline_fixed = false; + + mms->machine_done.notify = microvm_machine_done; + qemu_add_machine_init_done_notifier(&mms->machine_done); + mms->powerdown_req.notify = microvm_powerdown_req; + qemu_register_powerdown_notifier(&mms->powerdown_req); } static void microvm_class_init(ObjectClass *oc, void *data) diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index c93f32f6579d..be746bcb49eb 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -102,6 +102,7 @@ config MICROVM select I8259 select MC146818RTC select VIRTIO_MMIO + select ACPI_HW_REDUCED config X86_IOMMU bool diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs index 622739305882..bbb2fe78f3cd 100644 --- a/hw/i386/Makefile.objs +++ b/hw/i386/Makefile.objs @@ -19,3 +19,4 @@ obj-y += kvmvapic.o obj-$(CONFIG_ACPI) += acpi-common.o obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o obj-$(CONFIG_PC) += acpi-build.o +obj-$(CONFIG_MICROVM) += acpi-microvm.o From patchwork Thu Jul 2 20:48:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321927 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=GXb7tn9p; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVkj2fFBz9sPF for ; Fri, 3 Jul 2020 06:56:29 +1000 (AEST) Received: from localhost ([::1]:55108 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6Fu-0006wN-Vb for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:56:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr695-0004HR-O9 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:23 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:56255 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr692-0003Xf-OS for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722960; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=RnKM/3mzkkjb0niX455YpPSaGv2VkFAEYBel4eIfWmU=; b=GXb7tn9pz4xW4JJm4FChOZ09ajiGuri1V7HlUnKaX44hGTQDVOt0xByY8c9mQxw4I5yrn6 7L3QGwhvzzNyKz9M6yXEF9c86+Ty9z477n3aBQcqng4eXSWROtz3fLvDsC/L/q5fD/AYnY 4ZmlLaY62NRivaFMlL3oNdOP45/FfN4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-324-ZR_tE0g2NEi8VlCCz94RYQ-1; Thu, 02 Jul 2020 16:49:16 -0400 X-MC-Unique: ZR_tE0g2NEi8VlCCz94RYQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3E2F01932488; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7CCAD2B4BC; Thu, 2 Jul 2020 20:49:14 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 32A2831EBE; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 09/21] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Date: Thu, 2 Jul 2020 22:48:47 +0200 Message-Id: <20200702204859.9876-10-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:42:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Makes x86 linux kernel find virtio-mmio devices automatically. Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- hw/i386/acpi-microvm.c | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c index 7cd830e628af..20f297517457 100644 --- a/hw/i386/acpi-microvm.c +++ b/hw/i386/acpi-microvm.c @@ -21,6 +21,7 @@ */ #include "qemu/osdep.h" +#include "qemu/cutils.h" #include "qapi/error.h" #include "exec/memory.h" @@ -32,10 +33,60 @@ #include "hw/boards.h" #include "hw/i386/fw_cfg.h" #include "hw/i386/microvm.h" +#include "hw/virtio/virtio-mmio.h" #include "acpi-common.h" #include "acpi-microvm.h" +static void acpi_dsdt_add_virtio(Aml *scope, + MicrovmMachineState *mms) +{ + gchar *separator; + long int index; + BusState *bus; + BusChild *kid; + + bus = sysbus_get_default(); + QTAILQ_FOREACH(kid, &bus->children, sibling) { + DeviceState *dev = kid->child; + Object *obj = object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MMIO); + + if (obj) { + VirtIOMMIOProxy *mmio = VIRTIO_MMIO(obj); + VirtioBusState *mmio_virtio_bus = &mmio->bus; + BusState *mmio_bus = &mmio_virtio_bus->parent_obj; + + if (QTAILQ_EMPTY(&mmio_bus->children)) { + continue; + } + separator = g_strrstr(mmio_bus->name, "."); + if (!separator) { + continue; + } + if (qemu_strtol(separator + 1, NULL, 10, &index) != 0) { + continue; + } + + uint32_t irq = mms->virtio_irq_base + index; + hwaddr base = VIRTIO_MMIO_BASE + index * 512; + hwaddr size = 512; + + Aml *dev = aml_device("VR%02u", (unsigned)index); + aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); + aml_append(dev, aml_name_decl("_UID", aml_int(index))); + aml_append(dev, aml_name_decl("_CCA", aml_int(1))); + + Aml *crs = aml_resource_template(); + aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); + aml_append(crs, + aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, + AML_EXCLUSIVE, &irq, 1)); + aml_append(dev, aml_name_decl("_CRS", crs)); + aml_append(scope, dev); + } + } +} + static void build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, MicrovmMachineState *mms) @@ -60,6 +111,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev), GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); acpi_dsdt_add_power_button(sb_scope); + acpi_dsdt_add_virtio(sb_scope, mms); aml_append(dsdt, sb_scope); scope = aml_scope("\\"); From patchwork Thu Jul 2 20:48:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321937 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Q96sQ8Xj; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVvQ0W3Hz9sSy for ; Fri, 3 Jul 2020 07:04:02 +1000 (AEST) Received: from localhost ([::1]:53804 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6ND-0003sH-Np for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 17:03:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54912) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69I-0004tP-Vn for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:37 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:32609 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr69C-0003ad-TZ for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722969; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=jEDeQL+0eY+fxl25+8ob2qVPKP/uEkYpHD39mrbj0FQ=; b=Q96sQ8Xj3WYopQQ+Fr6aHMb2pL+QYHtPDcaPV3Ifj4Hrqge8n1bve7MocwLKpsG1DIZqS2 h9Jf9EGD13MUZxWc9eyIysRJU9DR70caGVPEHig6cb7Kt8QQpHeAYvoBjHD/R+/y6vcIF/ NI5nMT9zdxa/yCfDevO+UiVtU6qwIII= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-437-HE46nBSnM7mrH98Uv0zC3A-1; Thu, 02 Jul 2020 16:49:28 -0400 X-MC-Unique: HE46nBSnM7mrH98Uv0zC3A-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 90774800401; Thu, 2 Jul 2020 20:49:25 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8A43F7613B; Thu, 2 Jul 2020 20:49:14 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 3BC8231EBF; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 10/21] microvm/acpi: use GSI 16-23 for virtio Date: Thu, 2 Jul 2020 22:48:48 +0200 Message-Id: <20200702204859.9876-11-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" With ACPI enabled and IO-APIC being properly declared in the ACPI tables we can use interrupt lines 16-23 for virtio and avoid shared interrupts. With acpi disabled we continue to use lines 5-12. Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 75eca7306b11..1bcd57a6fd80 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -125,7 +125,7 @@ static void microvm_devices_init(MicrovmMachineState *mms) kvmclock_create(); - mms->virtio_irq_base = 5; + mms->virtio_irq_base = x86_machine_is_acpi_enabled(x86ms) ? 16 : 5; for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { sysbus_create_simple("virtio-mmio", VIRTIO_MMIO_BASE + i * 512, From patchwork Thu Jul 2 20:48:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321935 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=SB7lTprt; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVsJ1ppMz9sPF for ; Fri, 3 Jul 2020 07:02:12 +1000 (AEST) Received: from localhost ([::1]:46820 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6LR-0000rk-QT for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 17:02:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54890) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69H-0004pe-HC for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:35 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:20833 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr69C-0003aU-CO for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722969; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=WRQFF1Ean5S7aC9TWsKn+9OiHTseT6Iuu52pMwLAYM4=; b=SB7lTprt45olPquqNeSe7i7J8wWEF36GIND0uCC8XZzG+UhH8eFimbrDk2+YjrC3I+PUnL WJwVzuInxZdRNls57rzJv4VnyOgYso5QvFJ0lKabBk/t4fTdQDJcMhnyjsj7In2Da4B7+U E+3oM0mJPlNM90z30tL17E4UV3IPb4I= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-375-5_xydxvzPmyYquW_YrXV3Q-1; Thu, 02 Jul 2020 16:49:28 -0400 X-MC-Unique: 5_xydxvzPmyYquW_YrXV3Q-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EAAE78014D7; Thu, 2 Jul 2020 20:49:25 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 20B4173FE9; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 44ED131EE4; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 11/21] microvm/acpi: use seabios with acpi=on Date: Thu, 2 Jul 2020 22:48:49 +0200 Message-Id: <20200702204859.9876-12-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" With acpi=off continue to use qboot. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 1bcd57a6fd80..ac605d92b984 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -52,6 +52,7 @@ #include "hw/xen/start_info.h" #define MICROVM_QBOOT_FILENAME "qboot.rom" +#define MICROVM_BIOS_FILENAME "bios-microvm.bin" static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s) { @@ -174,7 +175,9 @@ static void microvm_devices_init(MicrovmMachineState *mms) } if (bios_name == NULL) { - bios_name = MICROVM_QBOOT_FILENAME; + bios_name = x86_machine_is_acpi_enabled(x86ms) + ? MICROVM_BIOS_FILENAME + : MICROVM_QBOOT_FILENAME; } x86_bios_rom_init(get_system_memory(), true); } From patchwork Thu Jul 2 20:48:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321931 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=S9NA/IKm; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVng0JLxz9sPF for ; Fri, 3 Jul 2020 06:59:03 +1000 (AEST) Received: from localhost ([::1]:37334 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6IO-0003ap-Nb for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:59:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69E-0004fw-NQ for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:32 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:49823 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr697-0003ZH-Uy for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722965; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=sQJ0YdLK1hV5ZbuEPLWSu+ZGB5W4m1BLGPxWcQ/+h54=; b=S9NA/IKmOsaTh11U+tIPQmJjjJp+MaLSSzkZeToh7UPakk1gvIwbKYfcDihkwYSpWttKGO BKN8V0pbP0j6kUcIPocELTMy8LTZjnwd6Qt2jH/ozFUQOKKh5LwjJZjjCMQCF+G7rq961P 9seYB3JnT8Y9YYGPLFKyRwqpjiwUZIM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-173-4RO1oTLeMEa74voM8PRBkg-1; Thu, 02 Jul 2020 16:49:22 -0400 X-MC-Unique: 4RO1oTLeMEa74voM8PRBkg-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B16A7107ACCA; Thu, 2 Jul 2020 20:49:20 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 261B67788D; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 4E1AF31EE5; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 12/21] microvm/acpi: disable virtio-mmio cmdline hack Date: Thu, 2 Jul 2020 22:48:50 +0200 Message-Id: <20200702204859.9876-13-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:23:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" ... in case we are using ACPI. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index ac605d92b984..fbda323f3b2a 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -343,7 +343,8 @@ static void microvm_machine_reset(MachineState *machine) CPUState *cs; X86CPU *cpu; - if (machine->kernel_filename != NULL && + if (!x86_machine_is_acpi_enabled(X86_MACHINE(machine)) && + machine->kernel_filename != NULL && mms->auto_kernel_cmdline && !mms->kernel_cmdline_fixed) { microvm_fix_kernel_cmdline(machine); mms->kernel_cmdline_fixed = true; From patchwork Thu Jul 2 20:48:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321925 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=eEtXxcL5; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVkG2jWTz9sPF for ; Fri, 3 Jul 2020 06:56:06 +1000 (AEST) Received: from localhost ([::1]:53096 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6FX-0005zR-5E for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:56:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69F-0004hr-An for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:33 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:44624 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr699-0003Zo-TK for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722967; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=+IDREpxh7rDZ2ECllVes4dktOn88o4bfSW8hIGHPm4Y=; b=eEtXxcL5bP+blKsfk5WFoCMVtxeLfDpSTvRntCzwi5NzPELKWXHu7KzGTsVauNdsPHNghd bgYhG3emAxm0/07Mlf8WxUSjeO+aYE2V637fUu9+tkPaWoLLb8bMucSluY3sbrWiVxC7A4 ELZ3uCHVlNvJI7DACvaigATSsWawc1A= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-411-YN4tf9VlMYeTMmKwfjfpvQ-1; Thu, 02 Jul 2020 16:49:25 -0400 X-MC-Unique: YN4tf9VlMYeTMmKwfjfpvQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 66A82800403; Thu, 2 Jul 2020 20:49:24 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2BEC67BEBF; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 58B0F31EE6; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 13/21] x86: constify x86_machine_is_*_enabled Date: Thu, 2 Jul 2020 22:48:51 +0200 Message-Id: <20200702204859.9876-14-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- include/hw/i386/x86.h | 4 ++-- hw/i386/x86.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index b79f24e28545..a350ea3609f5 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -110,8 +110,8 @@ void x86_load_linux(X86MachineState *x86ms, bool pvh_enabled, bool linuxboot_dma_enabled); -bool x86_machine_is_smm_enabled(X86MachineState *x86ms); -bool x86_machine_is_acpi_enabled(X86MachineState *x86ms); +bool x86_machine_is_smm_enabled(const X86MachineState *x86ms); +bool x86_machine_is_acpi_enabled(const X86MachineState *x86ms); /* Global System Interrupts */ diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 34229b45c759..614723afbd9d 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -846,7 +846,7 @@ void x86_bios_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw) bios); } -bool x86_machine_is_smm_enabled(X86MachineState *x86ms) +bool x86_machine_is_smm_enabled(const X86MachineState *x86ms) { bool smm_available = false; @@ -888,7 +888,7 @@ static void x86_machine_set_smm(Object *obj, Visitor *v, const char *name, visit_type_OnOffAuto(v, name, &x86ms->smm, errp); } -bool x86_machine_is_acpi_enabled(X86MachineState *x86ms) +bool x86_machine_is_acpi_enabled(const X86MachineState *x86ms) { if (x86ms->acpi == ON_OFF_AUTO_OFF) { return false; From patchwork Thu Jul 2 20:48:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321922 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Z41rElcP; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVgp3Cc6z9sPF for ; Fri, 3 Jul 2020 06:53:58 +1000 (AEST) Received: from localhost ([::1]:45946 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6DT-0002w0-IK for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:53:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54880) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69G-0004nf-VD for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:35 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:25638 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr69B-0003a9-Ia for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722968; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=XpNi9BQIh6/R6UoPCwT5bpaemfP+wPb347uCIeZgrio=; b=Z41rElcPnKWhTcAfqlPCDFeudPKu2MIBtPDc2tvwBEjxOyEkfd21pzBoMttPL7zS085nqC clC2D639cv4Z35vFCHoY6G0jxixaL67dIVN8liyLKKzr5Yst3SHOjent6YF8TsgcQkgmvO BKKkLqGkfqigdxL1BNtfzQ4w6xmY+c4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-142-DWX1WejbPxmn5QjawD5ByQ-1; Thu, 02 Jul 2020 16:49:27 -0400 X-MC-Unique: DWX1WejbPxmn5QjawD5ByQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DA05B193248C; Thu, 2 Jul 2020 20:49:25 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 31BAD7742D; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 6E8B331EE7; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 14/21] x86: move acpi_dev from pc/microvm Date: Thu, 2 Jul 2020 22:48:52 +0200 Message-Id: <20200702204859.9876-15-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:42:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Both pc and microvm machine types have a acpi_dev field. Move it to the common base type. Signed-off-by: Gerd Hoffmann --- include/hw/i386/microvm.h | 1 - include/hw/i386/pc.h | 1 - include/hw/i386/x86.h | 1 + hw/i386/acpi-build.c | 2 +- hw/i386/acpi-microvm.c | 5 +++-- hw/i386/microvm.c | 10 ++++++---- hw/i386/pc.c | 34 +++++++++++++++++++--------------- hw/i386/pc_piix.c | 2 +- hw/i386/pc_q35.c | 2 +- 9 files changed, 32 insertions(+), 26 deletions(-) diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index b6e0d4395af7..b8ec99aeb051 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -66,7 +66,6 @@ typedef struct { bool kernel_cmdline_fixed; Notifier machine_done; Notifier powerdown_req; - AcpiDeviceIf *acpi_dev; } MicrovmMachineState; #define TYPE_MICROVM_MACHINE MACHINE_TYPE_NAME("microvm") diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index dce1273c7dad..5e4126fe817d 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -29,7 +29,6 @@ struct PCMachineState { Notifier machine_done; /* Pointers to devices and objects: */ - HotplugHandler *acpi_dev; PCIBus *bus; I2CBus *smbus; PFlashCFI01 *flash[2]; diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index a350ea3609f5..de74c831c3ab 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -50,6 +50,7 @@ typedef struct { FWCfgState *fw_cfg; qemu_irq *gsi; GMappedFile *initrd_mapped_file; + HotplugHandler *acpi_dev; /* RAM information (sizes, addresses, configuration): */ ram_addr_t below_4g_mem_size, above_4g_mem_size; diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index b7bcbbbb2a35..c356cc71fe08 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2431,7 +2431,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) acpi_add_table(table_offsets, tables_blob); acpi_build_madt(tables_blob, tables->linker, x86ms, - ACPI_DEVICE_IF(pcms->acpi_dev), true); + ACPI_DEVICE_IF(x86ms->acpi_dev), true); vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c index 20f297517457..5856b37a06db 100644 --- a/hw/i386/acpi-microvm.c +++ b/hw/i386/acpi-microvm.c @@ -108,7 +108,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, sb_scope = aml_scope("_SB"); fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg); isa_build_aml(ISA_BUS(isabus), sb_scope); - build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev), + build_ged_aml(sb_scope, GED_DEVICE, x86ms->acpi_dev, GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); acpi_dsdt_add_power_button(sb_scope); acpi_dsdt_add_virtio(sb_scope, mms); @@ -135,6 +135,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, MicrovmMachineState *mms) { MachineState *machine = MACHINE(mms); + X86MachineState *x86ms = X86_MACHINE(mms); GArray *table_offsets; GArray *tables_blob = tables->table_data; unsigned dsdt, xsdt; @@ -178,7 +179,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, acpi_add_table(table_offsets, tables_blob); acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine), - mms->acpi_dev, false); + ACPI_DEVICE_IF(x86ms->acpi_dev), false); xsdt = tables_blob->len; build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL); diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index fbda323f3b2a..3d8a66cfc3ac 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -143,7 +143,7 @@ static void microvm_devices_init(MicrovmMachineState *mms) sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, x86ms->gsi[GED_MMIO_IRQ]); sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal); - mms->acpi_dev = ACPI_DEVICE_IF(dev); + x86ms->acpi_dev = HOTPLUG_HANDLER(dev); } if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) { @@ -469,11 +469,13 @@ static void microvm_powerdown_req(Notifier *notifier, void *data) { MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, powerdown_req); + X86MachineState *x86ms = X86_MACHINE(mms); - if (mms->acpi_dev) { - Object *obj = OBJECT(mms->acpi_dev); + if (x86ms->acpi_dev) { + Object *obj = OBJECT(x86ms->acpi_dev); AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj); - adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS); + adevc->send_event(ACPI_DEVICE_IF(x86ms->acpi_dev), + ACPI_POWER_DOWN_STATUS); } } diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 4af9679d039b..98d29ead09b0 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1270,6 +1270,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { const PCMachineState *pcms = PC_MACHINE(hotplug_dev); + const X86MachineState *x86ms = X86_MACHINE(hotplug_dev); const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); const MachineState *ms = MACHINE(hotplug_dev); const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); @@ -1281,7 +1282,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, * but pcms->acpi_dev is still created. Check !acpi_enabled in * addition to cover this case. */ - if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) { + if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) { error_setg(errp, "memory hotplug is not enabled: missing acpi device or acpi disabled"); return; @@ -1292,7 +1293,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, return; } - hotplug_handler_pre_plug(pcms->acpi_dev, dev, &local_err); + hotplug_handler_pre_plug(x86ms->acpi_dev, dev, &local_err); if (local_err) { error_propagate(errp, local_err); return; @@ -1307,6 +1308,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev, { Error *local_err = NULL; PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); MachineState *ms = MACHINE(hotplug_dev); bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); @@ -1319,7 +1321,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev, nvdimm_plug(ms->nvdimms_state); } - hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &error_abort); + hotplug_handler_plug(x86ms->acpi_dev, dev, &error_abort); out: error_propagate(errp, local_err); } @@ -1328,14 +1330,14 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { Error *local_err = NULL; - PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); /* * When -no-acpi is used with Q35 machine type, no ACPI is built, * but pcms->acpi_dev is still created. Check !acpi_enabled in * addition to cover this case. */ - if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) { + if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) { error_setg(&local_err, "memory hotplug is not enabled: missing acpi device or acpi disabled"); goto out; @@ -1347,7 +1349,7 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev, goto out; } - hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev, + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, &local_err); out: error_propagate(errp, local_err); @@ -1357,9 +1359,10 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); Error *local_err = NULL; - hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); + hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; } @@ -1403,10 +1406,10 @@ static void pc_cpu_plug(HotplugHandler *hotplug_dev, Error *local_err = NULL; X86CPU *cpu = X86_CPU(dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - if (pcms->acpi_dev) { - hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); + if (x86ms->acpi_dev) { + hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; } @@ -1433,8 +1436,9 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, Error *local_err = NULL; X86CPU *cpu = X86_CPU(dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - if (!pcms->acpi_dev) { + if (!x86ms->acpi_dev) { error_setg(&local_err, "CPU hot unplug not supported without ACPI"); goto out; } @@ -1446,7 +1450,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, goto out; } - hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev, + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; @@ -1464,9 +1468,9 @@ static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev, Error *local_err = NULL; X86CPU *cpu = X86_CPU(dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); + hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; } @@ -1495,7 +1499,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, CPUX86State *env = &cpu->env; MachineState *ms = MACHINE(hotplug_dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); unsigned int smp_cores = ms->smp.cores; unsigned int smp_threads = ms->smp.threads; X86CPUTopoInfo topo_info; diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 1d832b2878b1..34944bd383e3 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -291,7 +291,7 @@ static void pc_init1(MachineState *machine, object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP, TYPE_HOTPLUG_HANDLER, - (Object **)&pcms->acpi_dev, + (Object **)&x86ms->acpi_dev, object_property_allow_set_link, OBJ_PROP_LINK_STRONG); object_property_set_link(OBJECT(machine), OBJECT(piix4_pm), diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 047ea8db28ea..92a104059076 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -240,7 +240,7 @@ static void pc_q35_init(MachineState *machine) object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP, TYPE_HOTPLUG_HANDLER, - (Object **)&pcms->acpi_dev, + (Object **)&x86ms->acpi_dev, object_property_allow_set_link, OBJ_PROP_LINK_STRONG); object_property_set_link(OBJECT(machine), OBJECT(lpc), From patchwork Thu Jul 2 20:48:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321932 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Z+9JVG6c; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVp12Cptz9sRk for ; Fri, 3 Jul 2020 06:59:21 +1000 (AEST) Received: from localhost ([::1]:38924 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6Ih-0004Gh-04 for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:59:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54772) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69D-0004br-Fh for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:31 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:43677 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr695-0003YU-2L for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722962; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=o1PSOrhzcmgctGimPmDjDVkJuvxcXhbnpfk/BeEDsrs=; b=Z+9JVG6c/VrHIyfQdmv/bxjmfJ9F6jhWYQln6OTZv9ROeeSn6L3PJvAXLSd5oEyc21xAQC 2EDU63qqpMYyFlN+jTGOJRyVi4JkmwuiWD+KxrEk26wcvFFpF4T51KHE3LxohdiV/GZQGJ gvGNiAbdKpYi+szdI2c/kGOWvjRTb3c= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-364-__GxxOuMP0aUpaEZojc-Bw-1; Thu, 02 Jul 2020 16:49:20 -0400 X-MC-Unique: __GxxOuMP0aUpaEZojc-Bw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C55941932482; Thu, 2 Jul 2020 20:49:16 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id CC8802B4BC; Thu, 2 Jul 2020 20:49:15 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 7BBF331EE8; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 15/21] x86: move cpu plug from pc to x86 Date: Thu, 2 Jul 2020 22:48:53 +0200 Message-Id: <20200702204859.9876-16-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:00:43 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" The cpu hotplug code handles the initialization of coldplugged cpus too, so it is needed even in case cpu hotplug is not supported. Move the code from pc to x86, so microvm can use it. Signed-off-by: Gerd Hoffmann --- include/hw/i386/x86.h | 6 ++ hw/i386/pc.c | 234 ++---------------------------------------- hw/i386/x86.c | 222 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 234 insertions(+), 228 deletions(-) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index de74c831c3ab..23c964471802 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -102,6 +102,12 @@ CpuInstanceProperties x86_cpu_index_to_props(MachineState *ms, unsigned cpu_index); int64_t x86_get_default_cpu_node_id(const MachineState *ms, int idx); const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms); +CPUArchId *x86_find_cpu_slot(MachineState *ms, uint32_t id, int *idx); +void x86_rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count); +void x86_cpu_pre_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); +void x86_cpu_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); void x86_bios_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw); diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 98d29ead09b0..14036fcd4e3a 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -798,19 +798,6 @@ void pc_hot_add_cpu(MachineState *ms, const int64_t id, Error **errp) } } -static void rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count) -{ - if (cpus_count > 0xff) { - /* If the number of CPUs can't be represented in 8 bits, the - * BIOS must use "FW_CFG_NB_CPUS". Set RTC field to 0 just - * to make old BIOSes fail more predictably. - */ - rtc_set_memory(rtc, 0x5f, 0); - } else { - rtc_set_memory(rtc, 0x5f, cpus_count - 1); - } -} - static void pc_machine_done(Notifier *notifier, void *data) { @@ -820,7 +807,7 @@ void pc_machine_done(Notifier *notifier, void *data) PCIBus *bus = pcms->bus; /* set the number of CPUs */ - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); if (bus) { int extra_hosts = 0; @@ -1373,62 +1360,6 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev, error_propagate(errp, local_err); } -static int pc_apic_cmp(const void *a, const void *b) -{ - CPUArchId *apic_a = (CPUArchId *)a; - CPUArchId *apic_b = (CPUArchId *)b; - - return apic_a->arch_id - apic_b->arch_id; -} - -/* returns pointer to CPUArchId descriptor that matches CPU's apic_id - * in ms->possible_cpus->cpus, if ms->possible_cpus->cpus has no - * entry corresponding to CPU's apic_id returns NULL. - */ -static CPUArchId *pc_find_cpu_slot(MachineState *ms, uint32_t id, int *idx) -{ - CPUArchId apic_id, *found_cpu; - - apic_id.arch_id = id; - found_cpu = bsearch(&apic_id, ms->possible_cpus->cpus, - ms->possible_cpus->len, sizeof(*ms->possible_cpus->cpus), - pc_apic_cmp); - if (found_cpu && idx) { - *idx = found_cpu - ms->possible_cpus->cpus; - } - return found_cpu; -} - -static void pc_cpu_plug(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - CPUArchId *found_cpu; - Error *local_err = NULL; - X86CPU *cpu = X86_CPU(dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - - if (x86ms->acpi_dev) { - hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err); - if (local_err) { - goto out; - } - } - - /* increment the number of CPUs */ - x86ms->boot_cpus++; - if (x86ms->rtc) { - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); - } - if (x86ms->fw_cfg) { - fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); - } - - found_cpu = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, NULL); - found_cpu->cpu = OBJECT(dev); -out: - error_propagate(errp, local_err); -} static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1443,7 +1374,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, goto out; } - pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); + x86_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); assert(idx != -1); if (idx == 0) { error_setg(&local_err, "Boot CPU is unpluggable"); @@ -1475,172 +1406,19 @@ static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev, goto out; } - found_cpu = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, NULL); + found_cpu = x86_find_cpu_slot(MACHINE(pcms), cpu->apic_id, NULL); found_cpu->cpu = NULL; qdev_unrealize(dev); /* decrement the number of CPUs */ x86ms->boot_cpus--; /* Update the number of CPUs in CMOS */ - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); out: error_propagate(errp, local_err); } -static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - int idx; - CPUState *cs; - CPUArchId *cpu_slot; - X86CPUTopoIDs topo_ids; - X86CPU *cpu = X86_CPU(dev); - CPUX86State *env = &cpu->env; - MachineState *ms = MACHINE(hotplug_dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - unsigned int smp_cores = ms->smp.cores; - unsigned int smp_threads = ms->smp.threads; - X86CPUTopoInfo topo_info; - - if(!object_dynamic_cast(OBJECT(cpu), ms->cpu_type)) { - error_setg(errp, "Invalid CPU type, expected cpu type: '%s'", - ms->cpu_type); - return; - } - - init_topo_info(&topo_info, x86ms); - - env->nr_dies = x86ms->smp_dies; - env->nr_nodes = topo_info.nodes_per_pkg; - env->pkg_offset = x86ms->apicid_pkg_offset(&topo_info); - - /* - * If APIC ID is not set, - * set it based on socket/die/core/thread properties. - */ - if (cpu->apic_id == UNASSIGNED_APIC_ID) { - int max_socket = (ms->smp.max_cpus - 1) / - smp_threads / smp_cores / x86ms->smp_dies; - - /* - * die-id was optional in QEMU 4.0 and older, so keep it optional - * if there's only one die per socket. - */ - if (cpu->die_id < 0 && x86ms->smp_dies == 1) { - cpu->die_id = 0; - } - - if (cpu->socket_id < 0) { - error_setg(errp, "CPU socket-id is not set"); - return; - } else if (cpu->socket_id > max_socket) { - error_setg(errp, "Invalid CPU socket-id: %u must be in range 0:%u", - cpu->socket_id, max_socket); - return; - } - if (cpu->die_id < 0) { - error_setg(errp, "CPU die-id is not set"); - return; - } else if (cpu->die_id > x86ms->smp_dies - 1) { - error_setg(errp, "Invalid CPU die-id: %u must be in range 0:%u", - cpu->die_id, x86ms->smp_dies - 1); - return; - } - if (cpu->core_id < 0) { - error_setg(errp, "CPU core-id is not set"); - return; - } else if (cpu->core_id > (smp_cores - 1)) { - error_setg(errp, "Invalid CPU core-id: %u must be in range 0:%u", - cpu->core_id, smp_cores - 1); - return; - } - if (cpu->thread_id < 0) { - error_setg(errp, "CPU thread-id is not set"); - return; - } else if (cpu->thread_id > (smp_threads - 1)) { - error_setg(errp, "Invalid CPU thread-id: %u must be in range 0:%u", - cpu->thread_id, smp_threads - 1); - return; - } - - topo_ids.pkg_id = cpu->socket_id; - topo_ids.die_id = cpu->die_id; - topo_ids.core_id = cpu->core_id; - topo_ids.smt_id = cpu->thread_id; - cpu->apic_id = x86ms->apicid_from_topo_ids(&topo_info, &topo_ids); - } - - cpu_slot = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); - if (!cpu_slot) { - MachineState *ms = MACHINE(pcms); - - x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); - error_setg(errp, - "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" - " APIC ID %" PRIu32 ", valid index range 0:%d", - topo_ids.pkg_id, topo_ids.die_id, topo_ids.core_id, topo_ids.smt_id, - cpu->apic_id, ms->possible_cpus->len - 1); - return; - } - - if (cpu_slot->cpu) { - error_setg(errp, "CPU[%d] with APIC ID %" PRIu32 " exists", - idx, cpu->apic_id); - return; - } - - /* if 'address' properties socket-id/core-id/thread-id are not set, set them - * so that machine_query_hotpluggable_cpus would show correct values - */ - /* TODO: move socket_id/core_id/thread_id checks into x86_cpu_realizefn() - * once -smp refactoring is complete and there will be CPU private - * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ - x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); - if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { - error_setg(errp, "property socket-id: %u doesn't match set apic-id:" - " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, - topo_ids.pkg_id); - return; - } - cpu->socket_id = topo_ids.pkg_id; - - if (cpu->die_id != -1 && cpu->die_id != topo_ids.die_id) { - error_setg(errp, "property die-id: %u doesn't match set apic-id:" - " 0x%x (die-id: %u)", cpu->die_id, cpu->apic_id, topo_ids.die_id); - return; - } - cpu->die_id = topo_ids.die_id; - - if (cpu->core_id != -1 && cpu->core_id != topo_ids.core_id) { - error_setg(errp, "property core-id: %u doesn't match set apic-id:" - " 0x%x (core-id: %u)", cpu->core_id, cpu->apic_id, - topo_ids.core_id); - return; - } - cpu->core_id = topo_ids.core_id; - - if (cpu->thread_id != -1 && cpu->thread_id != topo_ids.smt_id) { - error_setg(errp, "property thread-id: %u doesn't match set apic-id:" - " 0x%x (thread-id: %u)", cpu->thread_id, cpu->apic_id, - topo_ids.smt_id); - return; - } - cpu->thread_id = topo_ids.smt_id; - - if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && - !kvm_hv_vpindex_settable()) { - error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX"); - return; - } - - cs = CPU(cpu); - cs->cpu_index = idx; - - numa_cpu_pre_plug(cpu_slot, dev, errp); -} - static void pc_virtio_pmem_pci_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1706,7 +1484,7 @@ static void pc_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_pre_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_pre_plug(hotplug_dev, dev, errp); + x86_cpu_pre_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI)) { pc_virtio_pmem_pci_pre_plug(hotplug_dev, dev, errp); } @@ -1718,7 +1496,7 @@ static void pc_machine_device_plug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_plug(hotplug_dev, dev, errp); + x86_cpu_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI)) { pc_virtio_pmem_pci_plug(hotplug_dev, dev, errp); } diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 614723afbd9d..aadb1db10cab 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -41,6 +41,7 @@ #include "hw/i386/topology.h" #include "hw/i386/fw_cfg.h" #include "hw/intc/i8259.h" +#include "hw/rtc/mc146818rtc.h" #include "hw/acpi/cpu_hotplug.h" #include "hw/irq.h" @@ -166,6 +167,227 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version) } } +void x86_cpu_pre_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + int idx; + CPUState *cs; + CPUArchId *cpu_slot; + X86CPUTopoIDs topo_ids; + X86CPU *cpu = X86_CPU(dev); + CPUX86State *env = &cpu->env; + MachineState *ms = MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + unsigned int smp_cores = ms->smp.cores; + unsigned int smp_threads = ms->smp.threads; + X86CPUTopoInfo topo_info; + + if(!object_dynamic_cast(OBJECT(cpu), ms->cpu_type)) { + error_setg(errp, "Invalid CPU type, expected cpu type: '%s'", + ms->cpu_type); + return; + } + + init_topo_info(&topo_info, x86ms); + + env->nr_dies = x86ms->smp_dies; + env->nr_nodes = topo_info.nodes_per_pkg; + env->pkg_offset = x86ms->apicid_pkg_offset(&topo_info); + + /* + * If APIC ID is not set, + * set it based on socket/die/core/thread properties. + */ + if (cpu->apic_id == UNASSIGNED_APIC_ID) { + int max_socket = (ms->smp.max_cpus - 1) / + smp_threads / smp_cores / x86ms->smp_dies; + + /* + * die-id was optional in QEMU 4.0 and older, so keep it optional + * if there's only one die per socket. + */ + if (cpu->die_id < 0 && x86ms->smp_dies == 1) { + cpu->die_id = 0; + } + + if (cpu->socket_id < 0) { + error_setg(errp, "CPU socket-id is not set"); + return; + } else if (cpu->socket_id > max_socket) { + error_setg(errp, "Invalid CPU socket-id: %u must be in range 0:%u", + cpu->socket_id, max_socket); + return; + } + if (cpu->die_id < 0) { + error_setg(errp, "CPU die-id is not set"); + return; + } else if (cpu->die_id > x86ms->smp_dies - 1) { + error_setg(errp, "Invalid CPU die-id: %u must be in range 0:%u", + cpu->die_id, x86ms->smp_dies - 1); + return; + } + if (cpu->core_id < 0) { + error_setg(errp, "CPU core-id is not set"); + return; + } else if (cpu->core_id > (smp_cores - 1)) { + error_setg(errp, "Invalid CPU core-id: %u must be in range 0:%u", + cpu->core_id, smp_cores - 1); + return; + } + if (cpu->thread_id < 0) { + error_setg(errp, "CPU thread-id is not set"); + return; + } else if (cpu->thread_id > (smp_threads - 1)) { + error_setg(errp, "Invalid CPU thread-id: %u must be in range 0:%u", + cpu->thread_id, smp_threads - 1); + return; + } + + topo_ids.pkg_id = cpu->socket_id; + topo_ids.die_id = cpu->die_id; + topo_ids.core_id = cpu->core_id; + topo_ids.smt_id = cpu->thread_id; + cpu->apic_id = x86ms->apicid_from_topo_ids(&topo_info, &topo_ids); + } + + cpu_slot = x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, &idx); + if (!cpu_slot) { + MachineState *ms = MACHINE(x86ms); + + x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); + error_setg(errp, + "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" + " APIC ID %" PRIu32 ", valid index range 0:%d", + topo_ids.pkg_id, topo_ids.die_id, topo_ids.core_id, topo_ids.smt_id, + cpu->apic_id, ms->possible_cpus->len - 1); + return; + } + + if (cpu_slot->cpu) { + error_setg(errp, "CPU[%d] with APIC ID %" PRIu32 " exists", + idx, cpu->apic_id); + return; + } + + /* if 'address' properties socket-id/core-id/thread-id are not set, set them + * so that machine_query_hotpluggable_cpus would show correct values + */ + /* TODO: move socket_id/core_id/thread_id checks into x86_cpu_realizefn() + * once -smp refactoring is complete and there will be CPU private + * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ + x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); + if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { + error_setg(errp, "property socket-id: %u doesn't match set apic-id:" + " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, + topo_ids.pkg_id); + return; + } + cpu->socket_id = topo_ids.pkg_id; + + if (cpu->die_id != -1 && cpu->die_id != topo_ids.die_id) { + error_setg(errp, "property die-id: %u doesn't match set apic-id:" + " 0x%x (die-id: %u)", cpu->die_id, cpu->apic_id, topo_ids.die_id); + return; + } + cpu->die_id = topo_ids.die_id; + + if (cpu->core_id != -1 && cpu->core_id != topo_ids.core_id) { + error_setg(errp, "property core-id: %u doesn't match set apic-id:" + " 0x%x (core-id: %u)", cpu->core_id, cpu->apic_id, + topo_ids.core_id); + return; + } + cpu->core_id = topo_ids.core_id; + + if (cpu->thread_id != -1 && cpu->thread_id != topo_ids.smt_id) { + error_setg(errp, "property thread-id: %u doesn't match set apic-id:" + " 0x%x (thread-id: %u)", cpu->thread_id, cpu->apic_id, + topo_ids.smt_id); + return; + } + cpu->thread_id = topo_ids.smt_id; + + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && + !kvm_hv_vpindex_settable()) { + error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX"); + return; + } + + cs = CPU(cpu); + cs->cpu_index = idx; + + numa_cpu_pre_plug(cpu_slot, dev, errp); +} + +void x86_rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count) +{ + if (cpus_count > 0xff) { + /* If the number of CPUs can't be represented in 8 bits, the + * BIOS must use "FW_CFG_NB_CPUS". Set RTC field to 0 just + * to make old BIOSes fail more predictably. + */ + rtc_set_memory(rtc, 0x5f, 0); + } else { + rtc_set_memory(rtc, 0x5f, cpus_count - 1); + } +} + +static int x86_apic_cmp(const void *a, const void *b) +{ + CPUArchId *apic_a = (CPUArchId *)a; + CPUArchId *apic_b = (CPUArchId *)b; + + return apic_a->arch_id - apic_b->arch_id; +} + +/* returns pointer to CPUArchId descriptor that matches CPU's apic_id + * in ms->possible_cpus->cpus, if ms->possible_cpus->cpus has no + * entry corresponding to CPU's apic_id returns NULL. + */ +CPUArchId *x86_find_cpu_slot(MachineState *ms, uint32_t id, int *idx) +{ + CPUArchId apic_id, *found_cpu; + + apic_id.arch_id = id; + found_cpu = bsearch(&apic_id, ms->possible_cpus->cpus, + ms->possible_cpus->len, sizeof(*ms->possible_cpus->cpus), + x86_apic_cmp); + if (found_cpu && idx) { + *idx = found_cpu - ms->possible_cpus->cpus; + } + return found_cpu; +} + +void x86_cpu_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + CPUArchId *found_cpu; + Error *local_err = NULL; + X86CPU *cpu = X86_CPU(dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + + if (x86ms->acpi_dev) { + hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err); + if (local_err) { + goto out; + } + } + + /* increment the number of CPUs */ + x86ms->boot_cpus++; + if (x86ms->rtc) { + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + } + if (x86ms->fw_cfg) { + fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); + } + + found_cpu = x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, NULL); + found_cpu->cpu = OBJECT(dev); +out: + error_propagate(errp, local_err); +} + CpuInstanceProperties x86_cpu_index_to_props(MachineState *ms, unsigned cpu_index) { From patchwork Thu Jul 2 20:48:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321924 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=hOGZIN/y; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVhz0t57z9sPF for ; Fri, 3 Jul 2020 06:54:58 +1000 (AEST) Received: from localhost ([::1]:49266 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6ES-0004Nj-2T for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:54:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54718) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69B-0004Xd-Vq for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:29 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:54199 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr694-0003YJ-I9 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722961; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Z16Tgq/lHTtNURBIfdG7/VdPyWMNzUE7lIxlb0vcRX8=; b=hOGZIN/yb7KAHGcAg531qSRseuzG2pEAJLnMTZkstrO3JxAlqytLi/zIPLrC4A2tw6T07C fIO/AFnt5kXWlgTo/YYxfDPw1TE/PjO070iDBPi47LF17RyNWWO/Pg7XloYwwvXKHiA3+8 ZSSchdmQa6KtFrTE+N6U8DeE5igeN/w= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-179-zN2EekpyNi-bPY3scVeqnQ-1; Thu, 02 Jul 2020 16:49:18 -0400 X-MC-Unique: zN2EekpyNi-bPY3scVeqnQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DCBB3107ACF4; Thu, 2 Jul 2020 20:49:16 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76EE31A925; Thu, 2 Jul 2020 20:49:16 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 84F6531EE9; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 16/21] microvm: wire up hotplug Date: Thu, 2 Jul 2020 22:48:54 +0200 Message-Id: <20200702204859.9876-17-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" The cpu hotplug code handles the initialization of coldplugged cpus too, so it is needed even in case cpu hotplug is not supported. Wire cpu hotplug up for microvm. Without this we get a broken MADT table. Signed-off-by: Gerd Hoffmann --- hw/i386/microvm.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 3d8a66cfc3ac..a5b16b728f9f 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -320,6 +320,39 @@ static void microvm_fix_kernel_cmdline(MachineState *machine) g_free(cmdline); } +static void microvm_device_pre_plug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + x86_cpu_pre_plug(hotplug_dev, dev, errp); +} + +static void microvm_device_plug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + x86_cpu_plug(hotplug_dev, dev, errp); +} + +static void microvm_device_unplug_request_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + error_setg(errp, "unplug not supported by microvm"); +} + +static void microvm_device_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + error_setg(errp, "unplug not supported by microvm"); +} + +static HotplugHandler *microvm_get_hotplug_handler(MachineState *machine, + DeviceState *dev) +{ + if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { + return HOTPLUG_HANDLER(machine); + } + return NULL; +} + static void microvm_machine_state_init(MachineState *machine) { MicrovmMachineState *mms = MICROVM_MACHINE(machine); @@ -503,6 +536,7 @@ static void microvm_machine_initfn(Object *obj) static void microvm_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); mc->init = microvm_machine_state_init; @@ -523,6 +557,13 @@ static void microvm_class_init(ObjectClass *oc, void *data) /* Machine class handlers */ mc->reset = microvm_machine_reset; + /* hotplug (for cpu coldplug) */ + mc->get_hotplug_handler = microvm_get_hotplug_handler; + hc->pre_plug = microvm_device_pre_plug_cb; + hc->plug = microvm_device_plug_cb; + hc->unplug_request = microvm_device_unplug_request_cb; + hc->unplug = microvm_device_unplug_cb; + object_class_property_add(oc, MICROVM_MACHINE_PIC, "OnOffAuto", microvm_machine_get_pic, microvm_machine_set_pic, @@ -572,6 +613,7 @@ static const TypeInfo microvm_machine_info = { .class_size = sizeof(MicrovmMachineClass), .class_init = microvm_class_init, .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, { } }, }; From patchwork Thu Jul 2 20:48:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321938 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=UAHhqIae; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVyz1WsPz9sPF for ; Fri, 3 Jul 2020 07:07:06 +1000 (AEST) Received: from localhost ([::1]:60804 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6QB-0007CQ-Bi for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 17:07:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55012) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69M-000526-9r for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:40 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:54171 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr69J-0003dT-41 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722976; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=K/9W2PZSeIS82Eh5NLCJQJCCPYbFC6ZhNnw1M1jPilY=; b=UAHhqIaeLgIAqqT2ybKoOo4pi50sYfDjdCtjssms/7GTkzZakvZrc3/f7/dDzR6vzR04wy UQkXD/wQLwAB+2DNPwxwaNrPhNRz/Az+ylNOF1e8lu5X4MCArJLqIIZsa8ApECwEr9a2tj Iaix18T7iyeDhq3eQM9yMP0twPr1s/4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-109-KY7YVoi2MsSdy9BKe8o29g-1; Thu, 02 Jul 2020 16:49:32 -0400 X-MC-Unique: KY7YVoi2MsSdy9BKe8o29g-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EC80F1005513; Thu, 2 Jul 2020 20:49:30 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5973960C81; Thu, 2 Jul 2020 20:49:22 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 8E23F31EFE; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 17/21] tests/acpi: clear bios-tables-test-allowed-diff.h Date: Thu, 2 Jul 2020 22:48:55 +0200 Message-Id: <20200702204859.9876-18-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:23:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Leftover from acpi cleanup series. Signed-off-by: Gerd Hoffmann --- tests/qtest/bios-tables-test-allowed-diff.h | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index 8992f1f12b77..dfb8523c8bf4 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1,19 +1 @@ /* List of comma-separated changed AML files to ignore */ -"tests/data/acpi/pc/DSDT", -"tests/data/acpi/pc/DSDT.acpihmat", -"tests/data/acpi/pc/DSDT.bridge", -"tests/data/acpi/pc/DSDT.cphp", -"tests/data/acpi/pc/DSDT.dimmpxm", -"tests/data/acpi/pc/DSDT.ipmikcs", -"tests/data/acpi/pc/DSDT.memhp", -"tests/data/acpi/pc/DSDT.numamem", -"tests/data/acpi/q35/DSDT", -"tests/data/acpi/q35/DSDT.acpihmat", -"tests/data/acpi/q35/DSDT.bridge", -"tests/data/acpi/q35/DSDT.cphp", -"tests/data/acpi/q35/DSDT.dimmpxm", -"tests/data/acpi/q35/DSDT.ipmibt", -"tests/data/acpi/q35/DSDT.memhp", -"tests/data/acpi/q35/DSDT.mmio64", -"tests/data/acpi/q35/DSDT.numamem", -"tests/data/acpi/q35/DSDT.tis", From patchwork Thu Jul 2 20:48:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321926 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=EsIn3H1A; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVkY6nWLz9sPF for ; Fri, 3 Jul 2020 06:56:21 +1000 (AEST) Received: from localhost ([::1]:54372 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6Fn-0006cG-Jx for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:56:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54928) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69J-0004uu-NR for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:37 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:41159 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr69C-0003aJ-11 for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722969; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=yIBA7QMbjRBBosF8Z/aCMKZ6+Ye92UgyjrSu7U7xbDM=; b=EsIn3H1AhOGCB7jDMbBm929TpadP/ueBlZ23L0ZTfCmHCFrWdBloVBeweCVIfi0/K/Nr70 CejgAX2f+hPoctSHTuSH+tNyftKv3jrWkj7ThGmA6tEI/6wdvmFMOiAut7AGi2+nI82/QE 43cRBuv+vRmuEKebaJCxI/UwgbfCZoY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-24-apRVKeCVNgu9xUPp8zXcJg-1; Thu, 02 Jul 2020 16:49:27 -0400 X-MC-Unique: apRVKeCVNgu9xUPp8zXcJg-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A0BB8107ACCA; Thu, 2 Jul 2020 20:49:26 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2C3E81025EB0; Thu, 2 Jul 2020 20:49:18 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 974FB31F08; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 18/21] tests/acpi: allow microvm test data updates. Date: Thu, 2 Jul 2020 22:48:56 +0200 Message-Id: <20200702204859.9876-19-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:00:43 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Also add empty test data files. Signed-off-by: Gerd Hoffmann --- tests/qtest/bios-tables-test-allowed-diff.h | 3 +++ tests/data/acpi/microvm/APIC | 0 tests/data/acpi/microvm/DSDT | 0 tests/data/acpi/microvm/FACP | 0 4 files changed, 3 insertions(+) create mode 100644 tests/data/acpi/microvm/APIC create mode 100644 tests/data/acpi/microvm/DSDT create mode 100644 tests/data/acpi/microvm/FACP diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index dfb8523c8bf4..97c3fa621b7f 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1 +1,4 @@ /* List of comma-separated changed AML files to ignore */ +"tests/data/acpi/microvm/APIC", +"tests/data/acpi/microvm/DSDT", +"tests/data/acpi/microvm/FACP", diff --git a/tests/data/acpi/microvm/APIC b/tests/data/acpi/microvm/APIC new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/data/acpi/microvm/DSDT b/tests/data/acpi/microvm/DSDT new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/data/acpi/microvm/FACP b/tests/data/acpi/microvm/FACP new file mode 100644 index 000000000000..e69de29bb2d1 From patchwork Thu Jul 2 20:48:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321928 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=gVFdHAW/; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVlG0mdWz9sPF for ; Fri, 3 Jul 2020 06:56:58 +1000 (AEST) Received: from localhost ([::1]:57702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6GN-00087d-Ib for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:56:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54736) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69C-0004Yf-9D for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:30 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:60614 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr695-0003Yk-Ij for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722962; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=xZdFqrgR1JarvVVCRgTMEg19qCkFtkK1L1XpMKaNaII=; b=gVFdHAW/nFqVMWlChAhpvUawnR7COWREC9KcjPsjxDhIr79rN3uy6GDxLVmMEV7GNaE5Qw rlnDfvrvHtdmVnoT7oia5sEoVip5IFeIlkKvhF+5uVzDV+PLiLpgQvsG3BGZyg3QyeM3a+ D3nrqmAKkPIai0epm6tbcrV25s/6Mh0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-141-pX-5G8-8OBKPnYjH9Yr78A-1; Thu, 02 Jul 2020 16:49:19 -0400 X-MC-Unique: pX-5G8-8OBKPnYjH9Yr78A-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0DCAE800C64; Thu, 2 Jul 2020 20:49:18 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id A2E211A925; Thu, 2 Jul 2020 20:49:17 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id A0C2931F09; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 19/21] tests/acpi: allow override blkdev Date: Thu, 2 Jul 2020 22:48:57 +0200 Message-Id: <20200702204859.9876-20-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" microvm needs virtio-blk instead of ide. Signed-off-by: Gerd Hoffmann --- tests/qtest/bios-tables-test.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c index c315156858f4..24b715dce780 100644 --- a/tests/qtest/bios-tables-test.c +++ b/tests/qtest/bios-tables-test.c @@ -72,6 +72,7 @@ typedef struct { const char *variant; const char *uefi_fl1; const char *uefi_fl2; + const char *blkdev; const char *cd; const uint64_t ram_start; const uint64_t scan_len; @@ -635,9 +636,10 @@ static void test_acpi_one(const char *params, test_data *data) args = g_strdup_printf("-machine %s,kernel-irqchip=off %s -accel tcg " "-net none -display none %s " "-drive id=hd0,if=none,file=%s,format=raw " - "-device ide-hd,drive=hd0 ", + "-device %s,drive=hd0 ", data->machine, data->tcg_only ? "" : "-accel kvm", - params ? params : "", disk); + params ? params : "", disk, + data->blkdev ?: "ide-hd"); } data->qts = qtest_init(args); From patchwork Thu Jul 2 20:48:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321929 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=JvIugqFG; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVmY1m36z9sR4 for ; Fri, 3 Jul 2020 06:58:05 +1000 (AEST) Received: from localhost ([::1]:33582 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6HS-0001pC-Q9 for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:58:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54830) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr69F-0004hm-Ae for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:33 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:42949 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr695-0003Yn-Lk for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722963; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Jc3CkjMTS6eJgOpPYjcQtTYta9twaD8HtlqKoRcWa3g=; b=JvIugqFGHXbxpRAoq0asALCIX2XNUcCBgfzZMy/F+HnxZkr5rxBCdS61efGZteatfZ+sL4 Si/aGKFViNtD2i/TBOxSv4GVi2DhqY3Pmf0z7JYnKLCQI7lwH7296YoU+MW1ur6U40Bn04 I2INYePjgYeqlessSJThwrCe7ZafVxI= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-141-uJKbw7bFPWmuxLNoM8rbQA-1; Thu, 02 Jul 2020 16:49:19 -0400 X-MC-Unique: uJKbw7bFPWmuxLNoM8rbQA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1C693107ACF2; Thu, 2 Jul 2020 20:49:18 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id A81361A928; Thu, 2 Jul 2020 20:49:17 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id A9D4131F0A; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 20/21] tests/acpi: add microvm test Date: Thu, 2 Jul 2020 22:48:58 +0200 Message-Id: <20200702204859.9876-21-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 04:18:28 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- tests/qtest/bios-tables-test.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c index 24b715dce780..b5b98d5c0742 100644 --- a/tests/qtest/bios-tables-test.c +++ b/tests/qtest/bios-tables-test.c @@ -1007,6 +1007,20 @@ static void test_acpi_virt_tcg_memhp(void) } +static void test_acpi_microvm_tcg(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = "microvm"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + data.blkdev = "virtio-blk-device"; + test_acpi_one(" -machine microvm,acpi=on,rtc=off", + &data); + free_test_data(&data); +} + static void test_acpi_virt_tcg_numamem(void) { test_data data = { @@ -1118,6 +1132,7 @@ int main(int argc, char *argv[]) qtest_add_func("acpi/q35/dimmpxm", test_acpi_q35_tcg_dimm_pxm); qtest_add_func("acpi/piix4/acpihmat", test_acpi_piix4_tcg_acpi_hmat); qtest_add_func("acpi/q35/acpihmat", test_acpi_q35_tcg_acpi_hmat); + qtest_add_func("acpi/microvm", test_acpi_microvm_tcg); } else if (strcmp(arch, "aarch64") == 0) { qtest_add_func("acpi/virt", test_acpi_virt_tcg); qtest_add_func("acpi/virt/numamem", test_acpi_virt_tcg_numamem); From patchwork Thu Jul 2 20:48:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 1321916 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=NtCiRz1H; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49yVbn0SqZz9sPF for ; Fri, 3 Jul 2020 06:50:29 +1000 (AEST) Received: from localhost ([::1]:60190 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jr6A6-0005Jn-Mb for incoming@patchwork.ozlabs.org; Thu, 02 Jul 2020 16:50:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54666) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jr698-0004P2-Ti for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:26 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:34686 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jr694-0003Y6-8n for qemu-devel@nongnu.org; Thu, 02 Jul 2020 16:49:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593722961; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=MNTlxHdwoZD1i7fR0/VxIsjSfZdUtlBEEDJL/FTCXj8=; b=NtCiRz1HmWgycH9bfp1YO3tbsgb5spIME+RUQa90ew2RiVsH+yYqhssIzqrOqpDzlPvA1S sRt2cwbPQjptBDlsHF957zzBVVtX1aR6yWRdBVYYLNIUu3p/HejrtpDCX8XC7cZWgPJC82 a2JZhJcXut6Gi8WSL16e7eai5g4IR3k= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-476-GxZjK5W8P_SgcZHHIHy8qQ-1; Thu, 02 Jul 2020 16:49:20 -0400 X-MC-Unique: GxZjK5W8P_SgcZHHIHy8qQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B3EC88018A4; Thu, 2 Jul 2020 20:49:18 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-62.ams2.redhat.com [10.36.112.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 50A981A928; Thu, 2 Jul 2020 20:49:18 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id B2D3231F14; Thu, 2 Jul 2020 22:49:00 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v4 21/21] tests/acpi: update expected data files for microvm Date: Thu, 2 Jul 2020 22:48:59 +0200 Message-Id: <20200702204859.9876-22-kraxel@redhat.com> In-Reply-To: <20200702204859.9876-1-kraxel@redhat.com> References: <20200702204859.9876-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/02 03:42:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, 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.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Also clear tests/qtest/bios-tables-test-allowed-diff.h Signed-off-by: Gerd Hoffmann --- tests/qtest/bios-tables-test-allowed-diff.h | 3 --- tests/data/acpi/microvm/APIC | Bin 0 -> 70 bytes tests/data/acpi/microvm/DSDT | Bin 0 -> 365 bytes tests/data/acpi/microvm/FACP | Bin 0 -> 268 bytes 4 files changed, 3 deletions(-) diff --git a/tests/data/acpi/microvm/APIC b/tests/data/acpi/microvm/APIC index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7472c7e830b6c7139720e93dd544d4441556661d 100644 GIT binary patch literal 70 zcmZ<^@N{-#U|?Xp?&R<65v<@85#a0y6k`O6f!H9Lf#JbFFwFr}2jnsGfW!{`1CcCj H|A7JkC_j6YE5wz#n_gs%GoenLN` zpW{k;$86@Fd(Irrxsi_M?+m~-VJ0WKAHL=?B917q*iIf_8y%W*_c&h3v1cYpDFd20*z#XX{ze8pGFMFpU84R0aBbPnKQWME*eb@F%i2v%^42yk`-iUEZfKx`0ARlp*^z`()4z{IrRAIMxM1_r8I SLD0QG`x&72gWSRhWdi`;u?ztK literal 0 HcmV?d00001 diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index 97c3fa621b7f..dfb8523c8bf4 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1,4 +1 @@ /* List of comma-separated changed AML files to ignore */ -"tests/data/acpi/microvm/APIC", -"tests/data/acpi/microvm/DSDT", -"tests/data/acpi/microvm/FACP",