From patchwork Tue Sep 8 12:10:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763265 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5A325112E for ; Tue, 8 Sep 2020 12:14:33 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 228F621D47 for ; Tue, 8 Sep 2020 12:14:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bmzULwWF" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 228F621D47 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:60784 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcW8-0006kG-5K for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:14:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57538) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcSz-0000uh-1u for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:17 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:21637) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcSn-0005eb-FU for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567064; 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=1r+MKpb0Fe1tDNRacm0WsbAaCZgeR8IGCKDQUj+29m0=; b=bmzULwWFdCYCKM2IiJ4T+zcYfUmxTZdU5978DjdAFMwuE11Ac4nQIEjmIsKGi+UOKawQ29 VBFtw4h9yx1WErKjuxDbAADnHx6AXYCQekMblRcYGYyi1OdtFn95IGRV4eIpRBD7nhgVUi KefyadsAQ1UhPy/EIDCa+0pp/u0a3dM= 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-431-kgWSo7GINW6xca7IdCoD_g-1; Tue, 08 Sep 2020 08:11:03 -0400 X-MC-Unique: kgWSo7GINW6xca7IdCoD_g-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 C3B4018B9EBD; Tue, 8 Sep 2020 12:11:00 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 802BB5D9E2; Tue, 8 Sep 2020 12:10:51 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 76DA09D78; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 01/21] microvm: name qboot binary qboot.rom Date: Tue, 8 Sep 2020 14:10:30 +0200 Message-Id: <20200908121050.1162-2-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-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.001 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:10:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" qboot isn't a bios and shouldnt be named that way. Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Philippe Mathieu-Daudé --- hw/i386/microvm.c | 4 ++-- pc-bios/meson.build | 2 +- pc-bios/{bios-microvm.bin => qboot.rom} | Bin roms/Makefile | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) rename pc-bios/{bios-microvm.bin => qboot.rom} (100%) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 81d0888930d1..b1dc7e49c159 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/meson.build b/pc-bios/meson.build index 8087e5c0a7a1..b4aaf31143dd 100644 --- a/pc-bios/meson.build +++ b/pc-bios/meson.build @@ -27,7 +27,7 @@ endif blobs = files( 'bios.bin', 'bios-256k.bin', - 'bios-microvm.bin', + 'qboot.rom', 'sgabios.bin', 'vgabios.bin', 'vgabios-cirrus.bin', 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 5d9f15b6777f..2673a39f9dc2 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -66,7 +66,7 @@ default help: @echo " efi -- update UEFI (edk2) platform firmware" @echo " opensbi32-generic -- update OpenSBI for 32-bit generic machine" @echo " opensbi64-generic -- update OpenSBI for 64-bit generic machine" - @echo " bios-microvm -- update bios-microvm.bin (qboot)" + @echo " qboot -- update qboot" @echo " clean -- delete the files generated by the previous" \ "build targets" @@ -182,9 +182,9 @@ opensbi64-generic: cp opensbi/build/platform/generic/firmware/fw_dynamic.bin ../pc-bios/opensbi-riscv64-generic-fw_dynamic.bin cp opensbi/build/platform/generic/firmware/fw_dynamic.elf ../pc-bios/opensbi-riscv64-generic-fw_dynamic.elf -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 Tue Sep 8 12:10:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763257 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E3351112E for ; Tue, 8 Sep 2020 12:12:39 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id AA23421741 for ; Tue, 8 Sep 2020 12:12:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="HGY42KAC" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AA23421741 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:50800 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcUI-0002la-QG for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:12:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57436) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcSo-0000rB-HT for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:06 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:52296) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcSm-0005eR-Mb for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567063; 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=SHpQwUjkpo+YnLl1+2J5eqcxUt0wZ4keKHHeXvJmC10=; b=HGY42KAClolRWZ0c1YIoH3K3PSsWd8kjtIoNNvRsBd5etc2AfgpDWySiUlD+2vl1RyclTK GEDPm07OqZgpIhc/NACRd8/Wu7iHbPGS+IFqA7ez38Hd3JHH+IvG0vAr5aXRcgYHbguSYB t/RouPxJbF9J90ILCW7L0czYCDqlYPY= 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-160-XgE0F0HINF-Sz1IIEzyPoQ-1; Tue, 08 Sep 2020 08:11:02 -0400 X-MC-Unique: XgE0F0HINF-Sz1IIEzyPoQ-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 9CEE3107B272; Tue, 8 Sep 2020 12:11:00 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 757287D8AC; Tue, 8 Sep 2020 12:10:51 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 8152745AE; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 02/21] seabios: add microvm config, update build rules Date: Tue, 8 Sep 2020 14:10:31 +0200 Message-Id: <20200908121050.1162-3-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=63.128.21.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:11:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez --- 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 2673a39f9dc2..f8890c7e39de 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -70,9 +70,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 Tue Sep 8 12:10:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763301 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7E69C618 for ; Tue, 8 Sep 2020 12:28:28 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0EC2821D79 for ; Tue, 8 Sep 2020 12:28:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="MjoX9wUp" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0EC2821D79 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57530 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcjb-0003J9-5A for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:28:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57918) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTQ-0001VS-Eu for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:44 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:22997 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 1kFcSz-0005fc-Jo for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567066; 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=9C1NFVPxvJEXcarb5lu/+44FnmMHzM2d9l0CIdVX9QU=; b=MjoX9wUpIm/62EIJfbDwTqCHGYt154oZbncr2hM9Nx6ijInsNifkt8OOaCSOWE5CWq5PPy kD0ma06SL2PkEg5e3A8In4Oe8ZDwd1p3FMHpsKTUfbnvMt/D2Q+E0keqvhj3c755nVG12I o5tmjvslaRmxzopcbIAwJFsDyS/yAG8= 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-58-mIyIda2eODihXAJ7gx9Y0w-1; Tue, 08 Sep 2020 08:11:04 -0400 X-MC-Unique: mIyIda2eODihXAJ7gx9Y0w-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 B6BE980EF9B; Tue, 8 Sep 2020 12:11:02 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 880475C230; Tue, 8 Sep 2020 12:10:51 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 8DDA77828; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 03/21] seabios: add bios-microvm.bin binary Date: Tue, 8 Sep 2020 14:10:32 +0200 Message-Id: <20200908121050.1162-4-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.101 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/09/08 01:08:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez --- pc-bios/bios-microvm.bin | Bin 0 -> 131072 bytes pc-bios/meson.build | 1 + 2 files changed, 1 insertion(+) create mode 100644 pc-bios/bios-microvm.bin diff --git a/pc-bios/bios-microvm.bin b/pc-bios/bios-microvm.bin new file mode 100644 index 0000000000000000000000000000000000000000..eefd32197e8d637be0266e3410551f711728c6d0 GIT binary patch literal 131072 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

!qQ5oyYLc0&_R@xX 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 X-Patchwork-Id: 11763259 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E2A5F112E for ; Tue, 8 Sep 2020 12:12:54 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id A6FA42075A for ; Tue, 8 Sep 2020 12:12:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bjQFU//r" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A6FA42075A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:52356 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcUX-0003Nu-PT for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:12:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57520) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcSy-0000uL-1u for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:16 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:39377 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 1kFcSn-0005eW-6b for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567064; 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=NXXcWWbzMCzc0xaSFv2vWi3xTnGSIlRAL4OHuWAqac8=; b=bjQFU//roJYKo8WWNP7VLiTXPoU2DgHYKpDKjsIhSRkqFngpBuHHO+Eg+9JkRUb5kkjpW3 lnpXw7RfZl6iZFYXrpX8IUB0Eaic3OoQVXsARlAKaE75po+kQHXpeYldzflDcEVj3xkNqv 0kr4r3fvVCsIgG2fZQYVomFMLqowK9E= 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-252-XDCQFu2_NwaqwXfAVLGPAA-1; Tue, 08 Sep 2020 08:11:02 -0400 X-MC-Unique: XDCQFu2_NwaqwXfAVLGPAA-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 3E84E10BBED2; Tue, 8 Sep 2020 12:11:01 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8EDAB5C26B; Tue, 8 Sep 2020 12:10:51 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 98BDC45B2; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 04/21] acpi: ged: add control regs Date: Tue, 8 Sep 2020 14:10:33 +0200 Message-Id: <20200908121050.1162-5-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 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/09/08 01:08:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Add control regs (sleep, reset) for hw-reduced acpi. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- include/hw/acpi/generic_event_device.h | 12 +++++++ hw/acpi/generic_event_device.c | 44 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 90a9180db572..4533cddb486c 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -72,6 +72,17 @@ #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_REG_COUNT 0x03 + +/* ACPI_GED_REG_RESET value for reset*/ +#define ACPI_GED_RESET_VALUE 0x42 + +/* ACPI_GED_REG_SLEEP_CTL.SLP_TYP value for S5 (aka poweroff) */ +#define ACPI_GED_SLP_TYP_S5 0x05 + #define GED_DEVICE "GED" #define AML_GED_EVT_REG "EREG" #define AML_GED_EVT_SEL "ESEL" @@ -87,6 +98,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 Tue Sep 8 12:10:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763279 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 81B35618 for ; Tue, 8 Sep 2020 12:20:36 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 3170B21D1B for ; Tue, 8 Sep 2020 12:20:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="IlEPn4hD" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3170B21D1B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:51564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcbz-0006Bq-8R for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:20:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57732) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTC-000159-Ml for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:32 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:27037 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 1kFcSy-0005f7-Qy for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567066; 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=weYslzUVJLl87DZKqYmD4AiiQEzxi3Q5a5q5Zh55/vU=; b=IlEPn4hDQjy0VHqd/L3ORKRKRuOgEyVWSdQdjhOiWtjwyd+ZOcjP6KnhmUklLP5sNXfBXb rmvytGxFP/sMei8nVepcxZp+52Tt+z1ztZSKMLHaqN3xtpmvrHVl4bXK9HxnaQo9WRDkNq YVHgGBYY0Ghm11piQ+w2qvNZko3Dvlc= 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-439-fbQ83TDvMq6i7AxHN5y5pg-1; Tue, 08 Sep 2020 08:11:04 -0400 X-MC-Unique: fbQ83TDvMq6i7AxHN5y5pg-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 2D54712CCE4; Tue, 8 Sep 2020 12:11:03 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id BD8725D9EF; Tue, 8 Sep 2020 12:11:02 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id A57831FCEE; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 05/21] acpi: ged: add x86 device variant. Date: Tue, 8 Sep 2020 14:10:34 +0200 Message-Id: <20200908121050.1162-6-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-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.001 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/09/08 00:33:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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/meson.build | 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 4533cddb486c..bd79cfff2b6a 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/meson.build b/hw/i386/meson.build index 63918fbe22f9..1a7d1a685d77 100644 --- a/hw/i386/meson.build +++ b/hw/i386/meson.build @@ -18,6 +18,7 @@ i386_ss.add(when: 'CONFIG_VMPORT', if_true: files('vmport.c')) i386_ss.add(when: 'CONFIG_VTD', if_true: files('intel_iommu.c')) i386_ss.add(when: 'CONFIG_ACPI', if_true: files('acpi-common.c')) +i386_ss.add(when: 'CONFIG_ACPI_HW_REDUCED', if_true: files('generic_event_device_x86.c')) i386_ss.add(when: 'CONFIG_PC', if_true: files( 'pc.c', 'pc_sysfw.c', From patchwork Tue Sep 8 12:10:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763269 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 169EA159A for ; Tue, 8 Sep 2020 12:16:51 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id D44EF21D47 for ; Tue, 8 Sep 2020 12:16:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Cj0n5zIR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D44EF21D47 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:38448 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcYL-0000nf-QM for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:16:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57634) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcT0-0000yC-U9 for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:18 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:28841 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 1kFcSo-0005f4-Ow for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567066; 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=FJ2qhfNiZIWY+tu1okOvVuIhMpkiaN4lXZRnoTMSq7A=; b=Cj0n5zIRmWJ+BBXHQiYnTeYypTYqZPKyKUjKAmpYWhvEPqLzkD1rtxuheToAW4hNiYLSkV y57FH/G2cBcYBCvjhb5kyHFiMT1b/msdBttOyGl8COCCudTMaIWPNjHGVYdi7S2wwcMKjU PobNFQlPDeIE9uwsd+AECY39RuDa+o4= 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-439-SDC0KnogPHeLOzaM6ABYXQ-1; Tue, 08 Sep 2020 08:11:04 -0400 X-MC-Unique: SDC0KnogPHeLOzaM6ABYXQ-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 159DA107B26E; Tue, 8 Sep 2020 12:11:03 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id B555F5C5AF; Tue, 8 Sep 2020 12:11:02 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id B1E51204A1; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 06/21] acpi: move acpi_dsdt_add_power_button() to ged Date: Tue, 8 Sep 2020 14:10:35 +0200 Message-Id: <20200908121050.1162-7-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.002 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/09/08 00:33:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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 bd79cfff2b6a..af6fa36ae7e4 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -118,5 +118,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 9efd7a388150..6bff5e373872 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 Tue Sep 8 12:10:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763275 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4B030159A for ; Tue, 8 Sep 2020 12:18:36 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 02A94221EE for ; Tue, 8 Sep 2020 12:18:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="cSLsTHnO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 02A94221EE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:43090 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFca2-0002iu-Vt for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:18:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57736) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTC-00015C-PN for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:32 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:60106 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 1kFcSy-0005fQ-PZ for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567066; 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=D0CLt/3qbQGa3OLGHSm59bu9R9OdOsddLi5YJZ1paKU=; b=cSLsTHnO6mDHmTeufh0u54a2xtcKke8PLjGjepRpXOzGL6IMkFg07zyPQw1JA4w1sdJ4hH vuQkEvJoNLsorIRmEAd8CgB0eovoqdQ3VKWty7jOCE8oFdNqGDRAeBi0lkVM7JVOOGtCZQ j4ovBLhzCBges1opYnGnxMe/qSHkIrY= 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-362-vFH4WfHFOqO8Gf3_a2MDeQ-1; Tue, 08 Sep 2020 08:11:04 -0400 X-MC-Unique: vFH4WfHFOqO8Gf3_a2MDeQ-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 77C36802B77; Tue, 8 Sep 2020 12:11:03 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id C35605D9E2; Tue, 8 Sep 2020 12:11:02 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id BD141204AD; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 07/21] microvm: make virtio irq base runtime configurable Date: Tue, 8 Sep 2020 14:10:36 +0200 Message-Id: <20200908121050.1162-8-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-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.002 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/09/08 01:08:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- 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 b1dc7e49c159..e4501f2cdfbd 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 Tue Sep 8 12:10:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763303 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3DDD5159A for ; Tue, 8 Sep 2020 12:30:56 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id E0E622074D for ; Tue, 8 Sep 2020 12:30:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Xdp/rE8i" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E0E622074D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:39916 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcly-0007jL-Oe for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:30:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58054) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTV-0001kR-Qd for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:49 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:30191 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 1kFcT0-0005hu-Jd for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567077; 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=e6p2RVxvLJMKU5YnNwvJ8uO40HQHEUWjJpL5i0AnTTw=; b=Xdp/rE8ici0zayT8gawNJj+Cav0+pHdyfAviaOe8LAJ9alYwA7yrEoSDdZTS9Mq99lfh8n bSqpk87UMhfSwNWLD4UPzFQq4HEHJ0e6YRrlxAeOU0uiXCfl5lQKZ+pZp6L6lmKk9kvayK fJurmDDwWb9hs0KB9l32wSLBqZ9s5TU= 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-568-EWUQdFYBPp2GQX78_HCI-Q-1; Tue, 08 Sep 2020 08:11:13 -0400 X-MC-Unique: EWUQdFYBPp2GQX78_HCI-Q-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 5AAE1800400; Tue, 8 Sep 2020 12:11:12 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id C842610023A7; Tue, 8 Sep 2020 12:11:02 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id CF4FE204AE; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 08/21] microvm/acpi: add minimal acpi support Date: Tue, 8 Sep 2020 14:10:37 +0200 Message-Id: <20200908121050.1162-9-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.002 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/09/08 01:08:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" $subject says all. Can be controlled using -M microvm,acpi=on/off. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/acpi-microvm.h | 8 ++ include/hw/i386/microvm.h | 9 ++ hw/i386/acpi-microvm.c | 187 ++++++++++++++++++++++++++++++++++++++ hw/i386/microvm.c | 40 ++++++++ hw/i386/Kconfig | 1 + hw/i386/meson.build | 2 +- 6 files changed, 246 insertions(+), 1 deletion(-) 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..06ef33949f5f --- /dev/null +++ b/hw/i386/acpi-microvm.c @@ -0,0 +1,187 @@ +/* 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); + + /* ACPI 5.0: Table 7-209 System State Package */ + scope = aml_scope("\\"); + pkg = aml_package(4); + aml_append(pkg, aml_int(ACPI_GED_SLP_TYP_S5)); + 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, 2, 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 = { + /* ACPI 5.0: 4.1 Hardware-Reduced ACPI */ + .rev = 5, + .flags = ((1 << ACPI_FADT_F_HW_REDUCED_ACPI) | + (1 << ACPI_FADT_F_RESET_REG_SUP)), + + /* ACPI 5.0: 4.8.3.7 Sleep Control and Status Registers */ + .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, + }, + + /* ACPI 5.0: 4.8.3.6 Reset Register */ + .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 = { + /* ACPI 2.0: 5.2.4.3 RSDP Structure */ + .revision = 2, /* xsdt needs v2 */ + .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 e4501f2cdfbd..e1b86da8a92e 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 03e347b2078f..d0bd8b537d55 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -103,6 +103,7 @@ config MICROVM select I8259 select MC146818RTC select VIRTIO_MMIO + select ACPI_HW_REDUCED config X86_IOMMU bool diff --git a/hw/i386/meson.build b/hw/i386/meson.build index 1a7d1a685d77..e5d109f5c64d 100644 --- a/hw/i386/meson.build +++ b/hw/i386/meson.build @@ -11,7 +11,7 @@ i386_ss.add(when: 'CONFIG_X86_IOMMU', if_true: files('x86-iommu.c'), if_false: files('x86-iommu-stub.c')) i386_ss.add(when: 'CONFIG_AMD_IOMMU', if_true: files('amd_iommu.c')) i386_ss.add(when: 'CONFIG_I440FX', if_true: files('pc_piix.c')) -i386_ss.add(when: 'CONFIG_MICROVM', if_true: files('microvm.c')) +i386_ss.add(when: 'CONFIG_MICROVM', if_true: files('microvm.c', 'acpi-microvm.c')) i386_ss.add(when: 'CONFIG_Q35', if_true: files('pc_q35.c')) i386_ss.add(when: 'CONFIG_VMMOUSE', if_true: files('vmmouse.c')) i386_ss.add(when: 'CONFIG_VMPORT', if_true: files('vmport.c')) From patchwork Tue Sep 8 12:10:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763287 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D8228618 for ; Tue, 8 Sep 2020 12:23:08 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 9F570221F0 for ; Tue, 8 Sep 2020 12:23:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bvfcxFIo" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9F570221F0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:33582 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFceR-0001tH-Nu for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:23:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57924) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTQ-0001Wb-QU for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:21389) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcSz-0005hV-O8 for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567075; 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=q4xqrjBt9+K0AYOcFO9PWCCV/shKCcI1emzHoZPL8Jc=; b=bvfcxFIocgwyJnzZcx5SwjmTA5Qt+RLWggGYK2o0OoZbBKKJTm8/WEMhd/xQHIDb5IRGWO Ja5ECNQPtWnt3y2NoqaIgWYyOk72V72dioPjqLUkJRmNzXgbA2nOEI6wl3hEs11Ar6P3v6 wtNVPwJPPF5TzfrggjpeveklqQqrW3Y= 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-19-SkaUeiSXNT2ju3umEEOp0g-1; Tue, 08 Sep 2020 08:11:13 -0400 X-MC-Unique: SkaUeiSXNT2ju3umEEOp0g-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 5D28218B9F09; Tue, 8 Sep 2020 12:11:12 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4C0C08092B; Tue, 8 Sep 2020 12:11:03 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id D8C5B31E23; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 09/21] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Date: Tue, 8 Sep 2020 14:10:38 +0200 Message-Id: <20200908121050.1162-10-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.002 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:10:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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 06ef33949f5f..b9ce3768b263 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); /* ACPI 5.0: Table 7-209 System State Package */ From patchwork Tue Sep 8 12:10: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: 11763263 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 31FB1618 for ; Tue, 8 Sep 2020 12:14:29 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id F14D021D47 for ; Tue, 8 Sep 2020 12:14:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="O+stA4cf" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F14D021D47 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:60258 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcW3-0006Xa-Uq for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:14:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcT9-000146-1v for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:28 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:27614) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcSy-0005gq-H3 for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567069; 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=f7gcGwGKvQs66zPNjI3Utr4hWVSraR8+eNzLSiL1B7A=; b=O+stA4cf4lTMQ4x9XFs6iAZi9GKPHW4NrDqoBknQg7uKzY2Z9vBMIpxLv0E57B3/cDXiKm NbjiEyGPpzFBPLSLLBhx1pUwX9LRA3DCsJDyk9VJnCNtGG72V4KlcgmFgdMK+vk/i/Blko p0PrTbbeQUjLKZbsgT0TIcqw3pCTdJ8= 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-41-fTTgz4cUNculkobHvh-nYQ-1; Tue, 08 Sep 2020 08:11:06 -0400 X-MC-Unique: fTTgz4cUNculkobHvh-nYQ-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 347EC18B9EC8; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id B01FB5C3E0; Tue, 8 Sep 2020 12:11:03 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id E20D631E58; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 10/21] microvm/acpi: use GSI 16-23 for virtio Date: Tue, 8 Sep 2020 14:10:39 +0200 Message-Id: <20200908121050.1162-11-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:10:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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 e1b86da8a92e..ca0c9983f137 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 Tue Sep 8 12:10: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: 11763281 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 62216618 for ; Tue, 8 Sep 2020 12:21:03 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 15FA321D1B for ; Tue, 8 Sep 2020 12:21:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="VoShtw7h" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 15FA321D1B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:53432 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFccQ-0006vw-2m for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:21:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58012) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTU-0001hP-N8 for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:48 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:20882) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcT0-0005i1-K5 for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567077; 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=Mhl8v2yFjMFLKxDLyHc4g/0SExd3T3HmoDrjUE1tIHQ=; b=VoShtw7h6CqyQVFQkSzymEKICAwj8L88U6ceeskajE/WUwIwrDibv9j7Mi4AOQYPErKJNk VH/UzMGAVqr+GFSVrm2vRXhnkzJNn9FnmUIJRR1SsP6Rx/+V8od0y/Y7f+OwOoTL6s68hz Gz+L1oe0uqSUPgjFN4os0ARW7rMrUp0= 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-13-JE-oz8goNJ--gm0lWVmEjg-1; Tue, 08 Sep 2020 08:11:16 -0400 X-MC-Unique: JE-oz8goNJ--gm0lWVmEjg-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 8611912CCE9; Tue, 8 Sep 2020 12:11:14 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1E39B7049D; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id EB3C331E63; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 11/21] microvm/acpi: use seabios with acpi=on Date: Tue, 8 Sep 2020 14:10:40 +0200 Message-Id: <20200908121050.1162-12-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:10:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" With acpi=off continue to use qboot. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov Reviewed-by: Sergio Lopez --- 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 ca0c9983f137..54510a03f754 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 Tue Sep 8 12:10: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: 11763277 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CF483618 for ; Tue, 8 Sep 2020 12:19:24 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 98E79221EE for ; Tue, 8 Sep 2020 12:19:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="MZrhLryI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 98E79221EE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:47108 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcap-0004K9-Nz for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:19:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57694) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcT9-000141-0Z for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:28 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:42658) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcSy-0005ge-Gx for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567069; 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=PRyKGHLsJskIKUHli+58EMbYUqU6UsfTTA6h02HEG90=; b=MZrhLryI0HMYRSchjuej2EUE4LdkeDgW7zx4303/Lkg+33fIZYyfObEZ/ETBFev784Pzxi /JoQfPE87lbuHdEOLQL7UrnKYwsg8q/0VX3BNAtp1tA2khYPlVesIhG/j35zpNxJvNhWet p6n3SCDujKRd1RfcacNHioFm8mCZBcQ= 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-45-8hkzMuabMlGF0j69SZRWAg-1; Tue, 08 Sep 2020 08:11:05 -0400 X-MC-Unique: 8hkzMuabMlGF0j69SZRWAg-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 7189212CCE0; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 239085D9E8; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 004BC31E66; Tue, 8 Sep 2020 14:10:50 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 12/21] microvm/acpi: disable virtio-mmio cmdline hack Date: Tue, 8 Sep 2020 14:10:41 +0200 Message-Id: <20200908121050.1162-13-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-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.001 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:10:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" ... in case we are using ACPI. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov Reviewed-by: Sergio Lopez --- 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 54510a03f754..04209eb38fbe 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 Tue Sep 8 12:10:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763267 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BF16015E4 for ; Tue, 8 Sep 2020 12:14:43 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 887CA21D47 for ; Tue, 8 Sep 2020 12:14:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="GI3qOMGn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 887CA21D47 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:33340 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcWH-00072z-4l for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:14:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57774) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTH-00017l-Th for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:35 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:40697 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 1kFcSz-0005fe-6U for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567066; 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=XodglbknydKLB1ivUZim6r2Uu4EdKznXo82Ez5O130g=; b=GI3qOMGngzsXjWHU/S8Z+ZTscdxI1N2Wb2zKWO8vZRMp1mh80VhD+HUdHnq5ZETi/5F8Uz LSJgPzKQz51URIdHMNhdN6qpRTsOXCLr+S3WkTZihiXr8LttZd7b7rPTMIxcDD5Gg8bgKF 5oHC5HSPD3C8MfaISMVDB8ve/GFd3Lg= 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-424-Dzg564u2PZy4MeqPQxKc9g-1; Tue, 08 Sep 2020 08:11:05 -0400 X-MC-Unique: Dzg564u2PZy4MeqPQxKc9g-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 DDE6310BBED5; Tue, 8 Sep 2020 12:11:03 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8B4325C26C; Tue, 8 Sep 2020 12:11:03 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 0B28F31E67; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 13/21] x86: constify x86_machine_is_*_enabled Date: Tue, 8 Sep 2020 14:10:42 +0200 Message-Id: <20200908121050.1162-14-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 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/09/08 01:08:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov Reviewed-by: Philippe Mathieu-Daudé --- 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 4d9a26326d31..b7ee3be5ab1b 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -101,8 +101,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 c1954db152eb..e2a5005f389c 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -821,7 +821,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; @@ -863,7 +863,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 Tue Sep 8 12:10: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: 11763271 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 45D59159A for ; Tue, 8 Sep 2020 12:18:32 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id DCF7F221EE for ; Tue, 8 Sep 2020 12:18:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="KEfOqKLy" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DCF7F221EE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:42716 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcZz-0002Zw-0k for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:18:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57834) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTL-0001GO-3O for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:39 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:58148) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcSz-0005gW-If for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567068; 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=Tben8Mn7CN44RtQTXGGkPX8Cz203T93F6K25TRgNDLU=; b=KEfOqKLyoN2SMYxkrjn2iLlqgZLBhSrgDTprFUzR7g0BE2CJ94UUbcBj3/OH7DozYRs+yA 0jAz8nuqPyBfNP9dOkflrlZmIbonKrl5YPQtFoDgxO4DhER8/0FYv0FEKXWSv+OVCjySvn fpjeDwiYA5C61RU/cdxRNLw6bWVdvsY= 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-63-1zs8GRPiMbeOrHGHv5rxSA-1; Tue, 08 Sep 2020 08:11:06 -0400 X-MC-Unique: 1zs8GRPiMbeOrHGHv5rxSA-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 628A680EFBD; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 939E75D9E2; Tue, 8 Sep 2020 12:11:03 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 21D2E31E68; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 14/21] x86: move acpi_dev from pc/microvm Date: Tue, 8 Sep 2020 14:10:43 +0200 Message-Id: <20200908121050.1162-15-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-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.001 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:10:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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 Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- 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 fe52e165b27c..0f7da2329b0f 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 b7ee3be5ab1b..9d6effc48971 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 7a5a8b3521b0..0e0535d2e30c 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 b9ce3768b263..df39c5d3bd90 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); @@ -136,6 +136,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; @@ -183,7 +184,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 04209eb38fbe..9df15354ce0f 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 d11daacc23cf..a18140421e92 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1274,6 +1274,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); @@ -1285,7 +1286,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; @@ -1296,7 +1297,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; @@ -1311,6 +1312,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); @@ -1323,7 +1325,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); } @@ -1331,14 +1333,14 @@ out: static void pc_memory_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { - 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(errp, "memory hotplug is not enabled: missing acpi device or acpi disabled"); return; @@ -1349,7 +1351,7 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev, return; } - hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev, + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, errp); } @@ -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; } @@ -1432,8 +1435,9 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, int idx = -1; 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(errp, "CPU hot unplug not supported without ACPI"); return; } @@ -1445,7 +1449,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, return; } - hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev, + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, errp); } @@ -1456,9 +1460,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; } @@ -1487,7 +1491,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 32b1453e6a82..759b4a97facb 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -293,7 +293,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), PC_MACHINE_ACPI_DEVICE_PROP, diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 0cb9c18cd44d..622d0397172a 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), PC_MACHINE_ACPI_DEVICE_PROP, From patchwork Tue Sep 8 12:10:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11763307 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 93630112E for ; Tue, 8 Sep 2020 12:32:48 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 2077D221ED for ; Tue, 8 Sep 2020 12:32:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Wz/CvopY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2077D221ED Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:48332 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcnn-0002q3-7N for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:32:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58070) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTW-0001lr-FS for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:50 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:34127 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 1kFcT0-0005iO-Np for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567078; 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=qV4OpkwjvjtFbYGKtwH9bvK7lpdb5UZTtRBiWyT+H8g=; b=Wz/CvopY6Bu7LGop4ARZrXgt6BZ9g7q9dIiRZL+5xsRRG/DhPQSsLYsTcP/ye+cUrYIOqS POE+4xYLpw+kXQsgMRe1/mhUffNlFDZlrag4qT1KL/1iBif0lLvtR/TmCwVKqIutswGUSj GWtvq67OjCVdVHpTIFiT2pdqLNT8k8c= 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-457-JQrus-5UPCmn1R8yh-0dBw-1; Tue, 08 Sep 2020 08:11:14 -0400 X-MC-Unique: JQrus-5UPCmn1R8yh-0dBw-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 08B98800466; Tue, 8 Sep 2020 12:11:13 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 34E54811B8; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 2FD1531F73; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 15/21] x86: move cpu hotplug from pc to x86 Date: Tue, 8 Sep 2020 14:10:44 +0200 Message-Id: <20200908121050.1162-16-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 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/09/08 00:33:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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. Move both plug and unplug to keep everything in one place, even though microvm needs plug only. Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez --- include/hw/i386/x86.h | 10 ++ hw/i386/pc.c | 281 +----------------------------------------- hw/i386/x86.c | 271 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 286 insertions(+), 276 deletions(-) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index 9d6effc48971..07c466c8e4b4 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -93,6 +93,16 @@ 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_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); +void x86_cpu_unplug_cb(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 a18140421e92..b55369357e5d 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -803,19 +803,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) { @@ -825,7 +812,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,264 +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) -{ - int idx = -1; - X86CPU *cpu = X86_CPU(dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - - if (!x86ms->acpi_dev) { - error_setg(errp, "CPU hot unplug not supported without ACPI"); - return; - } - - pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); - assert(idx != -1); - if (idx == 0) { - error_setg(errp, "Boot CPU is unpluggable"); - return; - } - - hotplug_handler_unplug_request(x86ms->acpi_dev, dev, - errp); -} - -static void pc_cpu_unplug_cb(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); - - hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err); - if (local_err) { - goto out; - } - - found_cpu = pc_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); - 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; - - /* - * 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 = x86_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); - - x86_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 */ - x86_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_md_pci_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1699,7 +1428,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) || object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { pc_virtio_md_pci_pre_plug(hotplug_dev, dev, errp); @@ -1712,7 +1441,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) || object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { pc_virtio_md_pci_plug(hotplug_dev, dev, errp); @@ -1725,7 +1454,7 @@ static void pc_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_unplug_request(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_unplug_request_cb(hotplug_dev, dev, errp); + x86_cpu_unplug_request_cb(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI) || object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { pc_virtio_md_pci_unplug_request(hotplug_dev, dev, errp); @@ -1741,7 +1470,7 @@ static void pc_machine_device_unplug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_unplug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_unplug_cb(hotplug_dev, dev, errp); + x86_cpu_unplug_cb(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI) || object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { pc_virtio_md_pci_unplug(hotplug_dev, dev, errp); diff --git a/hw/i386/x86.c b/hw/i386/x86.c index e2a5005f389c..c2ea989579c9 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" @@ -137,6 +138,276 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version) } } +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); +} + +void x86_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + int idx = -1; + X86CPU *cpu = X86_CPU(dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + + if (!x86ms->acpi_dev) { + error_setg(errp, "CPU hot unplug not supported without ACPI"); + return; + } + + x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, &idx); + assert(idx != -1); + if (idx == 0) { + error_setg(errp, "Boot CPU is unpluggable"); + return; + } + + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, + errp); +} + +void x86_cpu_unplug_cb(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); + + hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err); + if (local_err) { + goto out; + } + + found_cpu = x86_find_cpu_slot(MACHINE(x86ms), 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 */ + 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); +} + +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; + + /* + * 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 = x86_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); + + x86_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 */ + x86_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); +} + CpuInstanceProperties x86_cpu_index_to_props(MachineState *ms, unsigned cpu_index) { From patchwork Tue Sep 8 12:10: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: 11763291 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 03F43618 for ; Tue, 8 Sep 2020 12:23:45 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id BF6BE221F0 for ; Tue, 8 Sep 2020 12:23:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Xm9TxzMA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BF6BE221F0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:36856 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcf1-0003DT-RH for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:23:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57812) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTJ-0001Ca-NJ for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:37 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:20772 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 1kFcSz-0005gL-IL for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567067; 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=7WupihrubTyVUDCyRuf11xOUpe+0jDZC5WwdAXgUf0U=; b=Xm9TxzMAZ9wiu7PNMYfuBRn33PEbBQup3hVvy8/fDOFeNnDbY/POzqe3Icffs0Yk/mcZsO wuaceHx60AKIKbOmE9jCj6/ZQsFkiIXnW+a9ZnXKEqNb16j6f6ZclsrZJTFHPRdK2HZnOs 6cMSjEjci9whec1pa9j+Pib32BbSuFI= 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-502-dQIMpUFpPEO0iBUXZW_3ZA-1; Tue, 08 Sep 2020 08:11:06 -0400 X-MC-Unique: dQIMpUFpPEO0iBUXZW_3ZA-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 C96CA12CCE3; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 411DC60C17; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 393F831F93; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 16/21] microvm: wire up hotplug Date: Tue, 8 Sep 2020 14:10:45 +0200 Message-Id: <20200908121050.1162-17-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 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/09/08 01:08:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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 Reviewed-by: Igor Mammedov Reviewed-by: Sergio Lopez --- hw/i386/microvm.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 9df15354ce0f..8de8ca864963 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; @@ -524,6 +558,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, @@ -573,6 +614,7 @@ static const TypeInfo microvm_machine_info = { .class_size = sizeof(MicrovmMachineClass), .class_init = microvm_class_init, .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, { } }, }; From patchwork Tue Sep 8 12:10: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: 11763289 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 85CFB159A for ; Tue, 8 Sep 2020 12:23:09 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 345E6221F0 for ; Tue, 8 Sep 2020 12:23:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ehdaKA3a" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 345E6221F0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:33590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFceS-0001tO-5f for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:23:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58062) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTW-0001lH-7j for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:50 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:25104 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 1kFcT1-0005hP-6V for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567074; 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=1v/PAt3CshJX/VrDKv2rrFSFurASfaywl/Okvrdx+NQ=; b=ehdaKA3akUgpYS8WdHi/d+gARh9uZoAQgQ6U2ssOAyQmX45oJDE80VmBM+wDKvBLc54GMZ Gqta4T5YrEWvO1P+t7Vo+VJxV2WUQHwj8O+URJkOvAG7ZAgoIPTqEEVzSq1mT4jpUHXkRX Ahowvqbgm6wUspqG7umr4FqvMnY9A7Y= 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-240-DOXN7yzrPBCzyyc3esaCTw-1; Tue, 08 Sep 2020 08:11:13 -0400 X-MC-Unique: DOXN7yzrPBCzyyc3esaCTw-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 BFBB6107B26B; Tue, 8 Sep 2020 12:11:11 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3AB2F1002D49; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 426EC31F96; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 17/21] tests/acpi: allow microvm test data updates. Date: Tue, 8 Sep 2020 14:10:46 +0200 Message-Id: <20200908121050.1162-18-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.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/09/08 02:10:53 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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 Tue Sep 8 12:10: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: 11763273 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AB047618 for ; Tue, 8 Sep 2020 12:18:33 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 5B81D221EE for ; Tue, 8 Sep 2020 12:18:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ik7HOVNA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5B81D221EE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:42908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFca0-0002eF-Gh for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:18:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTJ-0001BB-3L for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:37 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:46377) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcSz-0005g2-Hl for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567067; 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=CjMaQq5b7d6xZab6r1I8iIsLu0kAb+RnTVO4UWJ1lpA=; b=ik7HOVNAb7oxA/yL6f5zL1Iqgj4xVbr8ACkoWaAYfYt8wwf3sqWgkcu64UWHKKqHzIKCLk JjDhIN2FLEQeRvvbM8kKCl9r5cVtKy+1uzuYKD/n1MZpWRGdzDodc26TpBlAdcwjlakUbP uFzHxpYcTWmuL/ODicGm9aqantvcvEo= 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-115-9WAkl_UGN_SBHi-N2DCwhQ-1; Tue, 08 Sep 2020 08:11:06 -0400 X-MC-Unique: 9WAkl_UGN_SBHi-N2DCwhQ-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 BA57810BBECD; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 635055D990; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 4B9FE31F97; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 18/21] tests/acpi: allow override blkdev Date: Tue, 8 Sep 2020 14:10:47 +0200 Message-Id: <20200908121050.1162-19-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-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.0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:10:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" microvm needs virtio-blk instead of ide. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov Reviewed-by: Sergio Lopez --- 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 504b810af583..1779af1cc889 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; @@ -666,9 +667,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 Tue Sep 8 12:10: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: 11763295 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D7196618 for ; Tue, 8 Sep 2020 12:26:37 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 8225921D47 for ; Tue, 8 Sep 2020 12:26:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Lv2Y4luR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8225921D47 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:48590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcho-00084Z-Eo for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:26:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57860) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTM-0001KL-GG for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:40 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:47511 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 1kFcSz-0005g6-L3 for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567067; 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=f0j/2GpDmP1B6JzBQEJ4sMlLnicgwb2jxZZq7qWpABA=; b=Lv2Y4luR011JUr87lYYy+1a8oXvJFEtluFPWTX61guctE79lVAewPmaHA8ZSb3DvD0yTZa PBk5tAEIJSSuLn/kAmYuJ4xUo4JjrE7L8dfQJMQJs9c676h8Q9/OLrOHSF+4GQmXJNixvO Y7+jUzk6he9oWjfPjLcOuP5J0jE6GJg= 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-295-zoPMqAYeP3OomxHwBv6fNw-1; Tue, 08 Sep 2020 08:11:06 -0400 X-MC-Unique: zoPMqAYeP3OomxHwBv6fNw-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 A6A538030CD; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 49CE05D9EF; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 54CB031FC5; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 19/21] tests/acpi: add microvm test Date: Tue, 8 Sep 2020 14:10:48 +0200 Message-Id: <20200908121050.1162-20-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-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.001 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/09/08 00:33:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- 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 1779af1cc889..a9c8d478aee3 100644 --- a/tests/qtest/bios-tables-test.c +++ b/tests/qtest/bios-tables-test.c @@ -1044,6 +1044,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 = NULL; /* no smbios */ + data.required_struct_types_len = 0; + 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 = { @@ -1161,6 +1175,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 Tue Sep 8 12:10: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: 11763283 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8784E159A for ; Tue, 8 Sep 2020 12:21:22 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 5027E21D1B for ; Tue, 8 Sep 2020 12:21:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="a4VyJsSR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5027E21D1B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:55052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFccj-0007ZO-CO for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:21:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57998) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTT-0001fB-Se for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:47 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:60907) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kFcT0-0005i5-Ia for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567077; 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=+RoT3UHwL3C3aiK+dtyg81KyFCt1RZ6yhy/ND3g2/ps=; b=a4VyJsSRoMSP9eZguBbc1O8vZRTlNULUxVFdnRWANdVgd+AcnXBnQG0rdbkLncPV5lEG1C zvsFzlIFn9szjqnycfxrcIfTiReez2g78bjVKY+mwW5O59W8f2Sut56w49kJVs1H4va4Lm T/DK746DJyD9ThpLMkPpGW5wUc11b/0= 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-165-WVeKUJlDOTyGGhcztjr6Nw-1; Tue, 08 Sep 2020 08:11:16 -0400 X-MC-Unique: WVeKUJlDOTyGGhcztjr6Nw-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 9325418B9F1D; Tue, 8 Sep 2020 12:11:14 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id C2C10702E7; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 5E09C31FC6; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 20/21] tests/acpi: update expected data files for microvm Date: Tue, 8 Sep 2020 14:10:49 +0200 Message-Id: <20200908121050.1162-21-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/08 02:10:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.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|A7JkCE=5t zE;#2y@U)soH1M>j)Okp0N|?)B()oaTI~2uqaQfeg{#@eeMV8=e3}=mj(J&BYn|!sEgD;aBbPnKQWME*ebMklg2v%^42yk`-iUEZfKx`0ARlp*^z`()4z{IrRAIMxMsv1tD QVL X-Patchwork-Id: 11763285 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 987F6618 for ; Tue, 8 Sep 2020 12:21:39 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 656B521D1B for ; Tue, 8 Sep 2020 12:21:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="SRKFM8fY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 656B521D1B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:56588 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFcd0-0008CD-Hc for patchwork-qemu-devel@patchwork.kernel.org; Tue, 08 Sep 2020 08:21:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57802) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFcTI-0001AY-Uz for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:36 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:35264 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 1kFcSy-0005h2-Ql for qemu-devel@nongnu.org; Tue, 08 Sep 2020 08:11:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599567071; 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=TGos9Q6BbkzS4hgAU4ify92YUlJ0vxyK/3DZMvE0+9Q=; b=SRKFM8fYv1l9AKDv+AKwM28/fBC2YDevoZ9YqxZgwVvHiB3+ntRnzuaRxpUBdaHqkAOZO8 L7ucf22jABYjNMAI3bOjhz5b8Pr/gKfOsVeO5ERUKxMXcYg6zaCwUVxTb9gUqDOcTcduka 8tThn4BX4CrBjx6Q7IOu+ijFqDFyn6c= 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-172-mvcsfWvhPeW1Kq7dGhGexQ-1; Tue, 08 Sep 2020 08:11:10 -0400 X-MC-Unique: mvcsfWvhPeW1Kq7dGhGexQ-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 EC551107B26B; Tue, 8 Sep 2020 12:11:08 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-56.ams2.redhat.com [10.36.112.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id A83FF5C230; Tue, 8 Sep 2020 12:11:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 6737031FC7; Tue, 8 Sep 2020 14:10:51 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v7 21/21] microvm: enable ramfb Date: Tue, 8 Sep 2020 14:10:50 +0200 Message-Id: <20200908121050.1162-22-kraxel@redhat.com> In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com> References: <20200908121050.1162-1-kraxel@redhat.com> MIME-Version: 1.0 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.001 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/09/08 01:08:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- hw/i386/microvm.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 8de8ca864963..60d32722301f 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -39,6 +39,7 @@ #include "hw/timer/i8254.h" #include "hw/rtc/mc146818rtc.h" #include "hw/char/serial.h" +#include "hw/display/ramfb.h" #include "hw/i386/topology.h" #include "hw/i386/e820_memory_layout.h" #include "hw/i386/fw_cfg.h" @@ -604,6 +605,8 @@ static void microvm_class_init(ObjectClass *oc, void *data) object_class_property_set_description(oc, MICROVM_MACHINE_AUTO_KERNEL_CMDLINE, "Set off to disable adding virtio-mmio devices to the kernel cmdline"); + + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_RAMFB_DEVICE); } static const TypeInfo microvm_machine_info = {