From patchwork Thu Sep 17 13:53:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305142 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C0DE7C433E2 for ; Thu, 17 Sep 2020 13:55:23 +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 1FB0221974 for ; Thu, 17 Sep 2020 13:55:23 +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="c0ibKFTR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1FB0221974 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:34688 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuNe-0001st-3W for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 09:55:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34298) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuM5-0008LT-5u for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:45 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:35367) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM0-00082w-Oa for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350819; 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=oU8DAi3wzJDMM8p7HnpBH93/drFjfBnH98R9AFQajIA=; b=c0ibKFTROQ2/NvWagtUGjkmwg/cZuyOg0hYDQaE6RpHrpS0wsQ7RkjEbJtCHp4GArA95dZ 5wSkWB3hnS26pO4knuY+yrfrj7Gb6/Kn+iJTo8z1FgLxLH0yGwa/oz0ku/pcYZ/CeOGJpU uDEHmq32PNPiapnjF0qSKWweeZDKMC0= 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-588-n9H4j5knNImFx3qUZk2wTg-1; Thu, 17 Sep 2020 09:53:37 -0400 X-MC-Unique: n9H4j5knNImFx3qUZk2wTg-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 8B957802B60; Thu, 17 Sep 2020 13:53:36 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id A9C103782; Thu, 17 Sep 2020 13:53:24 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 955529CBA; Thu, 17 Sep 2020 15:53:23 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 01/21] microvm: name qboot binary qboot.rom Date: Thu, 17 Sep 2020 15:53:03 +0200 Message-Id: <20200917135323.18022-2-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?b?w6k=?= , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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é Message-id: 20200915120909.20838-2-kraxel@redhat.com --- 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 182d5ebb35de..9759dba09714 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 3726f06fe7eb..1395a46695be 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -68,7 +68,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" @@ -183,9 +183,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 npcm7xx_bootrom: $(MAKE) -C vbootrom CROSS_COMPILE=$(arm_cross_prefix) From patchwork Thu Sep 17 13:53:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305141 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5DA2DC433E2 for ; Thu, 17 Sep 2020 13:56:06 +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 EC48420663 for ; Thu, 17 Sep 2020 13:56:05 +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="OkIJ3yn0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EC48420663 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:36254 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuOK-0002Yg-Ud for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 09:56:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34250) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuM3-0008IO-VZ for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:42796) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuLz-00082l-Sf for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350819; 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=ZLD+Sit25/qmgfx5038iz6MD+ijxOcduhMfIIhwKx9Y=; b=OkIJ3yn0rjiJhSlBtItZ56+Ij8Ov5wuB7MLuXsLleHezzNTG+Zd9emEUAQS9MUjD0N+KVp OUJJySVAnCenG41tzdFpl7jh3v2fJO1HbRyXwDkPyoQcKgDltz6buV2OfymuhxzMw69n5c xFZT2wwh3+1SX/hlQgMFP5Hex5T+MGA= 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-18-PU9re5w9NLy6BLSD8YvVGQ-1; Thu, 17 Sep 2020 09:53:35 -0400 X-MC-Unique: PU9re5w9NLy6BLSD8YvVGQ-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 7F2CB80732A; Thu, 17 Sep 2020 13:53:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id B12DE5DE51; Thu, 17 Sep 2020 13:53:24 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 9F9DF9CBC; Thu, 17 Sep 2020 15:53:23 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 02/21] seabios: add microvm config, update build rules Date: Thu, 17 Sep 2020 15:53:04 +0200 Message-Id: <20200917135323.18022-3-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Message-id: 20200915120909.20838-3-kraxel@redhat.com --- 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 1395a46695be..1489d47350f2 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -72,9 +72,12 @@ default help: @echo " clean -- delete the files generated by the previous" \ "build targets" -bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k +bios: build-seabios-config-seabios-128k \ + build-seabios-config-seabios-256k \ + build-seabios-config-seabios-microvm cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin + cp seabios/builds/seabios-microvm/bios.bin ../pc-bios/bios-microvm.bin vgabios seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants)) diff --git a/roms/config.seabios-microvm b/roms/config.seabios-microvm new file mode 100644 index 000000000000..a253e2edc6ec --- /dev/null +++ b/roms/config.seabios-microvm @@ -0,0 +1,26 @@ +CONFIG_QEMU=y +CONFIG_QEMU_HARDWARE=y +CONFIG_PERMIT_UNALIGNED_PCIROM=y +CONFIG_ROM_SIZE=128 +CONFIG_XEN=n +CONFIG_BOOTSPLASH=n +CONFIG_ATA=n +CONFIG_AHCI=n +CONFIG_SDCARD=n +CONFIG_PVSCSI=n +CONFIG_ESP_SCSI=n +CONFIG_LSI_SCSI=n +CONFIG_MEGASAS=n +CONFIG_MPT_SCSI=n +CONFIG_FLOPPY=n +CONFIG_FLASH_FLOPPY=n +CONFIG_NVME=n +CONFIG_PS2PORT=n +CONFIG_USB=n +CONFIG_LPT=n +CONFIG_RTC_TIMER=n +CONFIG_USE_SMM=n +CONFIG_PMTIMER=n +CONFIG_TCGBIOS=n +CONFIG_HARDWARE_IRQ=n +CONFIG_ACPI_PARSE=y From patchwork Thu Sep 17 13:53:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273476 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, NORMAL_HTTP_TO_IP, NUMERIC_HTTP_ADDR, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, UNWANTED_LANGUAGE_BODY, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6987CC43461 for ; Thu, 17 Sep 2020 14:02:42 +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 99E8A2065C for ; Thu, 17 Sep 2020 14:02:41 +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="BvgGXofT" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 99E8A2065C 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:54378 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuUi-0002Up-By for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:02:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34554) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMP-00007X-6n for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:05 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:22064) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM3-00084P-Ri for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350823; 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=WztY2AdGHnLUGtchVcjlsudNOgt7EytOF42g40JZ6xY=; b=BvgGXofT8ifi4utW0xeGSoJCvwz3vaKdTQGtyW/UZUcLW+4T59Yi0stdEZ5JPf1WIkMpxH 7w6FZDstx5wJfJEeLMxpahuVy8V2rzRBq1m3aBNSASfL12Ixg8ea/0EB4YlIumiAElj0hX FhOAl49h+Mq7aCfLURr8V0mKewYdYpk= 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-137-UnCqr1MsNw-9tdDUBH7nbA-1; Thu, 17 Sep 2020 09:53:39 -0400 X-MC-Unique: UnCqr1MsNw-9tdDUBH7nbA-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 66B331084CA2; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id BB5315DA30; Thu, 17 Sep 2020 13:53:24 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id ABCA49A83; Thu, 17 Sep 2020 15:53:23 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 03/21] seabios: add bios-microvm.bin binary Date: Thu, 17 Sep 2020 15:53:05 +0200 Message-Id: <20200917135323.18022-4-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=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/17 02:01:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Message-id: 20200915120909.20838-4-kraxel@redhat.com --- 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: 273480 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70F91C2BBD1 for ; Thu, 17 Sep 2020 13:55:49 +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 012D9206C3 for ; Thu, 17 Sep 2020 13:55: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="OMhOhh9Y" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 012D9206C3 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:35506 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuO3-0002Cv-O1 for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 09:55:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34240) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuM3-0008HO-Kk for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:22874) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuLz-00082N-BK for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350817; 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=ChUqQNnAXkzHIQx9TB59mjS7APRGCrp3vPf9nY/htpQ=; b=OMhOhh9YPu6+BDdzy3TCPEBcxlsSmf+1vZzcBqNdJptMwT/odfS94jPxSiGegQ5yVZgHIF LwKOAAHnEeoJt+myFteEGqs5cVSX7lM+Dn797NhJtohtWLfyoEkPa1pZ5Jy0XoZ2pxGbL/ 4HHb0n1EsvNyqgdz0v0q9MpDooMO0AM= 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-40-f7NAHvD-OS-D0mVTn9xnag-1; Thu, 17 Sep 2020 09:53:35 -0400 X-MC-Unique: f7NAHvD-OS-D0mVTn9xnag-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 63A22107465C; Thu, 17 Sep 2020 13:53:34 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id E266367CF0; Thu, 17 Sep 2020 13:53:24 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id B69899A8F; Thu, 17 Sep 2020 15:53:23 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 04/21] acpi: ged: add control regs Date: Thu, 17 Sep 2020 15:53:06 +0200 Message-Id: <20200917135323.18022-5-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-5-kraxel@redhat.com --- 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 1be05a3c0f8c..38aec526f944 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -74,6 +74,17 @@ DECLARE_INSTANCE_CHECKER(AcpiGedState, ACPI_GED, #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" @@ -89,6 +100,7 @@ DECLARE_INSTANCE_CHECKER(AcpiGedState, ACPI_GED, typedef struct GEDState { MemoryRegion evt; + MemoryRegion regs; uint32_t sel; } GEDState; diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index b8abdefa1c77..491df80a5cc7 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -20,6 +20,7 @@ #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/error-report.h" +#include "sysemu/runstate.h" static const uint32_t ged_supported_events[] = { ACPI_GED_MEM_HOTPLUG_EVT, @@ -176,6 +177,45 @@ static const MemoryRegionOps ged_evt_ops = { }, }; +static uint64_t ged_regs_read(void *opaque, hwaddr addr, unsigned size) +{ + return 0; +} + +static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data, + unsigned int size) +{ + bool slp_en; + int slp_typ; + + switch (addr) { + case ACPI_GED_REG_SLEEP_CTL: + slp_typ = (data >> 2) & 0x07; + slp_en = (data >> 5) & 0x01; + if (slp_en && slp_typ == 5) { + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + case ACPI_GED_REG_SLEEP_STS: + return; + case ACPI_GED_REG_RESET: + if (data == ACPI_GED_RESET_VALUE) { + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + } +} + +static const MemoryRegionOps ged_regs_ops = { + .read = ged_regs_read, + .write = ged_regs_write, + .endianness = DEVICE_LITTLE_ENDIAN, + .valid = { + .min_access_size = 1, + .max_access_size = 1, + }, +}; + static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -332,6 +372,10 @@ static void acpi_ged_initfn(Object *obj) sysbus_init_mmio(sbd, &s->container_memhp); acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev), &s->memhp_state, 0); + + memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, + TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); + sysbus_init_mmio(sbd, &ged_st->regs); } static void acpi_ged_class_init(ObjectClass *class, void *data) From patchwork Thu Sep 17 13:53:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273478 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7EBEAC43461 for ; Thu, 17 Sep 2020 13:58: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 000C6206DB for ; Thu, 17 Sep 2020 13:58: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="cM/10c+r" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 000C6206DB 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:43890 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuQd-0005vz-S1 for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 09:58:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34276) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuM4-0008Ji-Eb for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:29665) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM0-00082s-9L for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350819; 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=Y+PVz2MpfLfRicNjuH1LTOEzfqVbAcIOIGoxgEQDM3g=; b=cM/10c+rUUmxINXnZpG9GwEJ4P+a+5p8VP8fteVr3sa4Ea48zroU39j9eU+SjQPB8FHNd8 qp78RxqBaaPjD9wgBPq5zSWkmMsb02gsEnnlfyKFUUJvwFvwyaHYUyW7HruK6Y2xu8UfQT WKeLex2NnH/xznyp3QImsQtpC3sFPUA= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-142-l13mXQDSNyOFqLEIgPUkNA-1; Thu, 17 Sep 2020 09:53:36 -0400 X-MC-Unique: l13mXQDSNyOFqLEIgPUkNA-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 41B52186DD4C; Thu, 17 Sep 2020 13:53:35 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id D6BCF5DE51; Thu, 17 Sep 2020 13:53:34 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id C30DF9982; Thu, 17 Sep 2020 15:53:23 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 05/21] acpi: ged: add x86 device variant. Date: Thu, 17 Sep 2020 15:53:07 +0200 Message-Id: <20200917135323.18022-6-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-6-kraxel@redhat.com --- 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 38aec526f944..241151662b45 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -71,6 +71,10 @@ typedef struct AcpiGedState AcpiGedState; DECLARE_INSTANCE_CHECKER(AcpiGedState, ACPI_GED, 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 Thu Sep 17 13:53:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305136 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1F092C43461 for ; Thu, 17 Sep 2020 14:05:12 +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 8A94D22244 for ; Thu, 17 Sep 2020 14:05:11 +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="eQfdEL+u" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8A94D22244 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:60918 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuX8-0005MN-9O for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:05:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34630) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMS-0000GF-CP for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:08 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:38675) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuME-00086N-Rr for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350829; 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=H2HG8z4AfXckt/p30HUekyr0AnHaq1mT32M/WgTfr3g=; b=eQfdEL+uZO4TRJFE8d0/8t+/3sI44ALHrXguOVtkXUFpUlMEeCubtBMP4aNf5nOjml59Ma fDLXgGlhNQepl171Z8Er2ngRgd82QZyABFgDj2LW1CV6lVHcb1qnXc5zxGmJrGzm8l6JY8 v45prhLNc4qBG/bj5P2gjTULhGdIehM= 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-170-_cYU_CrCOHePpcK9QOQUzQ-1; Thu, 17 Sep 2020 09:53:47 -0400 X-MC-Unique: _cYU_CrCOHePpcK9QOQUzQ-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 33D85802EA6; Thu, 17 Sep 2020 13:53:46 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id EEF3578815; Thu, 17 Sep 2020 13:53:34 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id CF41B783B; Thu, 17 Sep 2020 15:53:23 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 06/21] acpi: move acpi_dsdt_add_power_button() to ged Date: Thu, 17 Sep 2020 15:53:08 +0200 Message-Id: <20200917135323.18022-7-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?b?w6k=?= , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-7-kraxel@redhat.com --- 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 241151662b45..ac921e9f0c15 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -120,5 +120,6 @@ 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 Thu Sep 17 13:53:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305140 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3694DC433E2 for ; Thu, 17 Sep 2020 13:58:05 +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 B4FB8206DB for ; Thu, 17 Sep 2020 13:58:04 +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="VXiMmY37" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B4FB8206DB 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:42928 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuQF-0005Un-OK for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 09:58:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34362) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuM7-0008Ob-9b for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:48 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:60308) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM1-00083A-CX for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350820; 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=TuItMlpz3oyY7fQG4iAnhQ4/Ntvos+fF0mHSveJa+/8=; b=VXiMmY379d7v+s1Os1GIlc+RVcihS+3AuV41t+eIoz0o38zkRQxE+XS1ALNaVrWRrL83/B vgSjD+GcQ3YA2wH7cpx8zghCDAcvitiqpegmVqF4nQzUUEsi4zyFXvWuDrGxNNMbxHr1y5 C5af9A2fuhgKolvjwgQkWlSK1YMfRWA= 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-535-VzL6VocAOQu_KwBBNLCW8A-1; Thu, 17 Sep 2020 09:53:38 -0400 X-MC-Unique: VzL6VocAOQu_KwBBNLCW8A-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 DB7AA100747E; Thu, 17 Sep 2020 13:53:36 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7EB475576A; Thu, 17 Sep 2020 13:53:35 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id DA1F11FCEE; Thu, 17 Sep 2020 15:53:23 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 07/21] microvm: make virtio irq base runtime configurable Date: Thu, 17 Sep 2020 15:53:09 +0200 Message-Id: <20200917135323.18022-8-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/17 02:01:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov Message-id: 20200915120909.20838-8-kraxel@redhat.com --- 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 36dbcdd12351..87593694eb0e 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -28,7 +28,6 @@ /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xfeb00000 -#define VIRTIO_IRQ_BASE 5 #define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 @@ -59,6 +58,7 @@ struct MicrovmMachineState { bool auto_kernel_cmdline; /* Machine state */ + uint32_t virtio_irq_base; bool kernel_cmdline_fixed; }; typedef struct MicrovmMachineState 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 Thu Sep 17 13:53:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305132 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 267D6C433E2 for ; Thu, 17 Sep 2020 14:16:27 +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 8309420708 for ; Thu, 17 Sep 2020 14:16:26 +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="iNwkaUqu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8309420708 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:42000 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIui1-0004Nx-DC for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:16:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34694) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMW-0000Rn-98 for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:12 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:60347) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuME-00086u-Rp for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350832; 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=V1NCgt4l64gt68xjIJWkKuSXQKSC44wW0nyYcU64st4=; b=iNwkaUquwi19sLWVJIWzRvQQYLZyRQUphjrtP9nAT8fgfgH5rGuu9pIMa7a+yE4zVCEmGl qBG92wDf84pMMdwuo7ATL3RNXfoypiIKsgrwXoRfueeSAiGvQ0kcp59x3MAWUlzpANumbO O8ZXh9zlVoA+uyMm2Q+xKIQjD+rHp3M= 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-434-LPnEItxFO7yAJw24sIKDJw-1; Thu, 17 Sep 2020 09:53:47 -0400 X-MC-Unique: LPnEItxFO7yAJw24sIKDJw-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 83CDA1084C93; Thu, 17 Sep 2020 13:53:46 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9806D73662; Thu, 17 Sep 2020 13:53:36 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id EC13D1FCF5; Thu, 17 Sep 2020 15:53:23 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 08/21] microvm/acpi: add minimal acpi support Date: Thu, 17 Sep 2020 15:53:10 +0200 Message-Id: <20200917135323.18022-9-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-9-kraxel@redhat.com --- 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 87593694eb0e..d75dcf8203b7 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -24,6 +24,7 @@ #include "hw/boards.h" #include "hw/i386/x86.h" +#include "hw/acpi/acpi_dev_interface.h" #include "qom/object.h" /* Platform virtio definitions */ @@ -31,6 +32,11 @@ #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" @@ -60,6 +66,9 @@ struct MicrovmMachineState { /* Machine state */ uint32_t virtio_irq_base; bool kernel_cmdline_fixed; + Notifier machine_done; + Notifier powerdown_req; + AcpiDeviceIf *acpi_dev; }; typedef struct MicrovmMachineState MicrovmMachineState; 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 Thu Sep 17 13:53:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273471 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27F3BC433E2 for ; Thu, 17 Sep 2020 14:13:50 +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 891942075B for ; Thu, 17 Sep 2020 14:13:49 +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="dDrsmenk" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 891942075B 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:33488 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIufU-0000mT-FX for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:13:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34636) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMT-0000Iu-9F for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:09 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:58265) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuMI-000878-4a for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350832; 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=GvC7vKRHjyjn+KlERNQs29jkZR6kPHQjuMCCOocdJao=; b=dDrsmenkFW/MD41RUIshb2xhq5ArrYTLHFbQ/7fZgjN5GfcnOmIp/+xNau1c/kV2nSkS88 Xk9Lyd5oepSK79mApZhkUZDwdPYeWWSaUsdnjOOl3DZqiyp4n0r1KhVZ5pCgp/UCikEFmz 1Rt7LOs7vK+KzUCRpD+2iqkSdtA5UZw= 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-214-30OcqD5UNZ-YSmnbl7KNTg-1; Thu, 17 Sep 2020 09:53:47 -0400 X-MC-Unique: 30OcqD5UNZ-YSmnbl7KNTg-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 5F488186DD30; Thu, 17 Sep 2020 13:53:46 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id EBAA978819; Thu, 17 Sep 2020 13:53:35 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 00FB71FCF6; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 09/21] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Date: Thu, 17 Sep 2020 15:53:11 +0200 Message-Id: <20200917135323.18022-10-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-10-kraxel@redhat.com --- 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 Thu Sep 17 13:53:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305139 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08F18C433E2 for ; Thu, 17 Sep 2020 13:58:38 +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 7E669206DB for ; Thu, 17 Sep 2020 13:58: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="Zyz4jnUL" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E669206DB 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:44446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuQi-0006DB-Gv for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 09:58:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34302) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuM5-0008Lp-8C for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:45 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:25282) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM1-000835-8E for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350820; 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=JuG/z6BjYQ5l9a9uP7lC2JZPoe8P4OOJmc/JyMXmHiY=; b=Zyz4jnULKM5NehdBTOhFoaHjOMLlI7biGSonN6l5qV1RKvcxuhhA89qMoQurbEwMJUMtYB 03GSumBqcv+5dh3TDEK/JoYQERCm0E/7/lE6kh6rTXkZ22qpdCcas39W2nW5+5rkRHZYTP gBiXqvZhFwMfiogEZuXr4tVHM28APnc= 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-584-L_k4octtMzefUOCwrN18kQ-1; Thu, 17 Sep 2020 09:53:37 -0400 X-MC-Unique: L_k4octtMzefUOCwrN18kQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6E4171074666; Thu, 17 Sep 2020 13:53:36 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 02A9B19D6C; Thu, 17 Sep 2020 13:53:36 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 0A05E204A1; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 10/21] microvm/acpi: use GSI 16-23 for virtio Date: Thu, 17 Sep 2020 15:53:12 +0200 Message-Id: <20200917135323.18022-11-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-11-kraxel@redhat.com --- 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 Thu Sep 17 13:53:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273472 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 016DBC433E2 for ; Thu, 17 Sep 2020 14:11:38 +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 72A87206CA for ; Thu, 17 Sep 2020 14:11: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="FGo6ChnH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 72A87206CA 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:52148 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIudM-0005Cz-DV for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:11:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34566) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMP-00008R-MR for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:05 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:58034 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 1kIuM6-00085S-MH for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350825; 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=oEcSaQ5hQpGZ/LSYwjiqxuRmgK+CFde8gH6ebQuIY0g=; b=FGo6ChnHyfKQNGEaJLyInklBphsNxDazQ4/OlyIUJPR+UdVKpdDGctVopIi84ZRvd5x7Wr P1YGEUojzyXzxLvtc6OYKNp/KpEnRi0OYF7HsnYjXB9pS8KLpTWPEDFpy4cxzP3VDI/M+w jQ6pwHIuLn3hwNqTSBBy9zfuOu/Hjsc= 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-331-9bT2kc0DNqmkcxbkNyfx7w-1; Thu, 17 Sep 2020 09:53:43 -0400 X-MC-Unique: 9bT2kc0DNqmkcxbkNyfx7w-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 1D6D91084CB5; Thu, 17 Sep 2020 13:53:42 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id B399F5DE51; Thu, 17 Sep 2020 13:53:35 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 1328731E60; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 11/21] microvm/acpi: use seabios with acpi=on Date: Thu, 17 Sep 2020 15:53:13 +0200 Message-Id: <20200917135323.18022-12-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/17 03:47:35 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-12-kraxel@redhat.com --- 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 Thu Sep 17 13:53:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273477 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62755C43461 for ; Thu, 17 Sep 2020 14:01: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 0071F2223F for ; Thu, 17 Sep 2020 14:01:21 +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="f/IS46/Q" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0071F2223F 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51148 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuTQ-0000qw-So for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:01:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34476) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMI-0008SQ-Eo for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:58 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:24746) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM3-000843-Aa for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350822; 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=UGLxMrpkKhqK5mTfhq0kqEXzGV/9xdyAKVyd1JQHn40=; b=f/IS46/Q/ks0YJ+5BnZtodd9E6jnKOBuIX3wtBj8786rTbjeSNDkHyQqKSqpxeZcV31y90 xmZSgR1yUkMbQuBQGjIvsKyMz6Q2sCbTgSOYMbbEOY3UKw8DGqAonfKQUyir9/PZiG4tLK vNHzy1IsSwLaPfIxysKlYrz5pr4LwfA= 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-300-xpIHZYRjNsaCLYb1-e4kjw-1; Thu, 17 Sep 2020 09:53:38 -0400 X-MC-Unique: xpIHZYRjNsaCLYb1-e4kjw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D0A0964098; Thu, 17 Sep 2020 13:53:36 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3BE4E19D7C; Thu, 17 Sep 2020 13:53:36 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 1C29031E63; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 12/21] microvm/acpi: disable virtio-mmio cmdline hack Date: Thu, 17 Sep 2020 15:53:14 +0200 Message-Id: <20200917135323.18022-13-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-13-kraxel@redhat.com --- 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 Thu Sep 17 13:53:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305137 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60F8CC43461 for ; Thu, 17 Sep 2020 14:04:01 +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 AACC42220F for ; Thu, 17 Sep 2020 14:04:00 +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="UEIDPH4+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AACC42220F 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:58320 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuVz-0004As-LE for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:03:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMI-0008Si-GW for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:58 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:36132) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM3-000840-6V for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350822; 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=8thKQIwuLTZAgWNn8lV+yrwLMliMZT2x6MVCovLEtGY=; b=UEIDPH4+t81MZOisE0AXSTwAisEFiWjFxf8UPsyPSGB2a022+MOXXWji6Mvui8t6ZVEWit QLIt+CHVNrpZIDrjfAfJbEKewMEY+4Aty8lMr/lxSNkgFlAqKnzRh20uKkxPbd1tD3p+kB zpXiOEeXTuREpurxUWoRfRNXKEVtVDA= 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-587-ftRE2BA7MQeOchJ8njL67A-1; Thu, 17 Sep 2020 09:53:40 -0400 X-MC-Unique: ftRE2BA7MQeOchJ8njL67A-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1962D64142; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 352D019D6C; Thu, 17 Sep 2020 13:53:37 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 26CF931E68; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 13/21] x86: constify x86_machine_is_*_enabled Date: Thu, 17 Sep 2020 15:53:15 +0200 Message-Id: <20200917135323.18022-14-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=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/17 02:01:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?b?w6k=?= , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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é Message-id: 20200915120909.20838-14-kraxel@redhat.com --- 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 1a188a7deabb..25c904638c11 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -100,8 +100,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 Thu Sep 17 13:53:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273474 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F25EBC43461 for ; Thu, 17 Sep 2020 14:06:55 +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 3D29D206B6 for ; Thu, 17 Sep 2020 14:06: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="GKOOtMRg" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3D29D206B6 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:37398 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuYo-0007SM-8s for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:06:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34670) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMU-0000Ml-LE for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:10 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:58580) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuMI-00087B-7N for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350832; 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=ujv/CFbULyntOLoQmwRM5dWpP9RTJ3+bB2TQbKYEIx4=; b=GKOOtMRgy/jo+0SrIIetekofoIA0nKjIygjmArdRm/9qGxSPElXA+4uRafhmV6xvB36qD0 xXA8RZo178XkSHyeZ7nMKAFIVOgOOSPpDZys0oIlijU6zY0uEd/f4PxqWWTkqkrMr4gqvo EwCBb9cqDh5OWPUGYYlZM5vuBizjDRA= 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-301-zmGI77YkOP6JBDb6ZsMNvQ-1; Thu, 17 Sep 2020 09:53:48 -0400 X-MC-Unique: zmGI77YkOP6JBDb6ZsMNvQ-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 EA2F81084C9B; Thu, 17 Sep 2020 13:53:46 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 667137881A; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 3D9F831E7F; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 14/21] x86: move acpi_dev from pc/microvm Date: Thu, 17 Sep 2020 15:53:16 +0200 Message-Id: <20200917135323.18022-15-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/17 02:01:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-15-kraxel@redhat.com --- 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 d75dcf8203b7..be2d95af4d74 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -68,7 +68,6 @@ struct MicrovmMachineState { bool kernel_cmdline_fixed; Notifier machine_done; Notifier powerdown_req; - AcpiDeviceIf *acpi_dev; }; typedef struct MicrovmMachineState MicrovmMachineState; diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 421a77acc223..c14e14dfe0c7 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -30,7 +30,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 25c904638c11..f540e801a837 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -52,6 +52,7 @@ struct X86MachineState { 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 33fa035fb7fe..6f3e78bb6053 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 Thu Sep 17 13:53:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305134 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0526AC433E2 for ; Thu, 17 Sep 2020 14:08:04 +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 619BE206B6 for ; Thu, 17 Sep 2020 14:08: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="Erkjq/QX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 619BE206B6 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:41054 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuZu-0000W1-9m for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:08:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34672) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMV-0000P9-Ay for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:42412) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuMI-000876-4Z for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350832; 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=Hf+XvVIQKl9M6UvuRXtUf2LV2e6Cjbb4CzGODn0sFbQ=; b=Erkjq/QXPQYDXdH1ZJwOg4Z9JMN+JI3q09eMeJObV1qwDDxdt24TeEIKQhtQDgaIefaMmL qtBkpLo3Ej/YleefAq225jSu4FpGG2mkViZkEuSpryfrxW8oBwX3Z4OA9PbWUfw4NSGVhL JW/0rpYD4k3gU0E4mvmth8GBXF9f3Mc= 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-576-Uqb8xC6OP5yNJMEX984LAw-1; Thu, 17 Sep 2020 09:53:50 -0400 X-MC-Unique: Uqb8xC6OP5yNJMEX984LAw-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 30D071084D81; Thu, 17 Sep 2020 13:53:49 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 720B5610F3; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 4BDFF31E88; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 15/21] x86: move cpu hotplug from pc to x86 Date: Thu, 17 Sep 2020 15:53:17 +0200 Message-Id: <20200917135323.18022-16-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Reviewed-by: Igor Mammedov Message-id: 20200915120909.20838-16-kraxel@redhat.com --- 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 f540e801a837..0eef9fb0c0d7 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -92,6 +92,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 Thu Sep 17 13:53:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273473 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9FC0CC433E2 for ; Thu, 17 Sep 2020 14:07: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 1B30220838 for ; Thu, 17 Sep 2020 14:07:45 +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="S18CL7q4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1B30220838 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:40384 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuZc-0000Eh-1i for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:07:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34560) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMP-00007d-FB for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:05 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:47601) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM5-000856-6k for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350824; 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=odgLodS2G/U0lzGZ6RFORwdviL3pGpTx11UsgTu+KT0=; b=S18CL7q4stA8su88+UDmkda/P5bGsRhcN1xCXjrYe2uM+amWqRWCwtnMTrWKWpq+K0+vQk 3THr+dCXS+r5D693zcyZp/KLrYuuslMnsAovL3kfnsnjS+tKrWtVzGtWZkPuohfO22tNdN q2S+wTpCQTa1n0TzctRIP6N22Tt/Pe0= 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-K4P10ie-NWCDuFsZ-vrseQ-1; Thu, 17 Sep 2020 09:53:40 -0400 X-MC-Unique: K4P10ie-NWCDuFsZ-vrseQ-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 1F2F21084CA4; Thu, 17 Sep 2020 13:53:39 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6C3FF55767; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 5519031F09; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 16/21] microvm: wire up hotplug Date: Thu, 17 Sep 2020 15:53:18 +0200 Message-Id: <20200917135323.18022-17-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/17 02:01:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-17-kraxel@redhat.com --- 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 Thu Sep 17 13:53:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273479 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E08BC433E2 for ; Thu, 17 Sep 2020 13:57:47 +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 0D71220663 for ; Thu, 17 Sep 2020 13:57:46 +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="NnVOV7Zn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0D71220663 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:42484 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuPx-0005IC-TR for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 09:57:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34364) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuM7-0008On-BW for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:48 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:25270) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM2-00083c-JT for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350821; 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=qwyoKzUwKaOUmHybY8aN3Lg4BOl/jco1XTCKerjjwGg=; b=NnVOV7ZncHRr9Z1jP4RapqCdWnvOQj4gyjhPOX6RvqFDfeqr8OjXbUfELLMHAHJ7NsRcVF cMHYnIZj5u5ITvcNcWb8jTHt0hf65rN89HlghrwYB2VwoHAVIfOyl/LMdmhB7DxbN0vobz zaDe042dN+rQ6A/PdoQgOk293+mht3s= 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-164-52qU0Hk9OXK2YE6fCBEshA-1; Thu, 17 Sep 2020 09:53:39 -0400 X-MC-Unique: 52qU0Hk9OXK2YE6fCBEshA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8821C64145; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id D9F0719D7C; Thu, 17 Sep 2020 13:53:37 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 5DFE531F93; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 17/21] tests/acpi: allow microvm test data updates. Date: Thu, 17 Sep 2020 15:53:19 +0200 Message-Id: <20200917135323.18022-18-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Also add empty test data files. Signed-off-by: Gerd Hoffmann Message-id: 20200915120909.20838-18-kraxel@redhat.com --- 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/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 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", From patchwork Thu Sep 17 13:53:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305133 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4BCD1C433E2 for ; Thu, 17 Sep 2020 14:10: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 BADB9206B6 for ; Thu, 17 Sep 2020 14:10: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="Gny0fN0S" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BADB9206B6 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:49478 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIubv-00040S-MH for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:10:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34676) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMV-0000PV-FJ for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:11 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:38853 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 1kIuMI-00086q-7r for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350831; 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=6dXo9mEeo5X1ztcjNyLshZ6Dr/bA7itz3qp8Aev5p5M=; b=Gny0fN0S4qPid+kv1gWbME1R8muAyww/P5YvIp4qPj9r4t9mPXebVvkTvdgqscvCTxDGT6 KgBlhRpUho2KHzuDqedlIaofowOQmt2nrSlFlrHxshl6FIdGC7AJ1ZGqGA9b2RA4lR06aA SSr0zYPEJJhythITkFB/SBc3weNb9Go= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-437-sWTB2SoYOJuaPBlGneOPVg-1; Thu, 17 Sep 2020 09:53:49 -0400 X-MC-Unique: sWTB2SoYOJuaPBlGneOPVg-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 58D361084D74; Thu, 17 Sep 2020 13:53:48 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id B6EF061100; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 6702831F96; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 18/21] tests/acpi: allow override blkdev Date: Thu, 17 Sep 2020 15:53:20 +0200 Message-Id: <20200917135323.18022-19-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/17 03:47:35 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.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 Message-id: 20200915120909.20838-19-kraxel@redhat.com --- 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 Thu Sep 17 13:53:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 273475 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4DE63C433E2 for ; Thu, 17 Sep 2020 14:04: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 947E82220F for ; Thu, 17 Sep 2020 14:04:27 +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="aVymR4zN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 947E82220F 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:59108 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuWQ-0004Xg-Gb for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:04:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34480) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMJ-0008UA-Kx for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:59 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:59236 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 1kIuM3-00083i-6c for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350822; 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=OBWwH2JOgMjl175A0Nv8hCTs4F3D2NFsUPK+rhSJCCw=; b=aVymR4zN6wOXMimkkDEW8VTnl7DR08i4IwNUXEKcNZlYYqq2JWFtId5rQEyKYTVqOZSSEA 8v+aiBmYLrvRGcj/uXGTKr1EH4BLQW8m6vtBIKOST54gQixpqvHtSqkzgv3HLaEJpptHmm KiMl9xYo0/kBYTGbmCI7DgjixvigRS0= 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-454-Gj1dXkIQNsmY_zD6qY41VQ-1; Thu, 17 Sep 2020 09:53:39 -0400 X-MC-Unique: Gj1dXkIQNsmY_zD6qY41VQ-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 97C5F1084CA3; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id F07363782; Thu, 17 Sep 2020 13:53:37 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 702A331FAA; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 19/21] tests/acpi: add microvm test Date: Thu, 17 Sep 2020 15:53:21 +0200 Message-Id: <20200917135323.18022-20-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/17 08:56:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov Message-id: 20200915120909.20838-20-kraxel@redhat.com --- 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 Thu Sep 17 13:53:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 305138 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A480C43461 for ; Thu, 17 Sep 2020 14:01:34 +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 F1C6E22246 for ; Thu, 17 Sep 2020 14:01: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="NcvFw7d7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F1C6E22246 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51916 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuTc-0001IW-VR for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:01:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMQ-0000Bp-NU for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:06 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:21502) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuMA-00086K-FI for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350829; 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=6KCenPeUzK5ZyBxIuzmFituXr7VoUzx6fBMypE+JXJg=; b=NcvFw7d73Ous6n47XaHx8KvG4Il7d53hw//5togpdqaRFkrBpVW3JAXOwiXAMf07WUHAWQ 6dPZgWiJ5SL9vlEMeUCMYUbMqOarRj+9lO6YvXoxsp2zpWBxiwpPmySPG3mk8XNWHrGnPc wHLgf8++uqXO+mqC647eCbs9G6ZOnsA= 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-44-3by9eunCMjCavdpMxwMqQQ-1; Thu, 17 Sep 2020 09:53:47 -0400 X-MC-Unique: 3by9eunCMjCavdpMxwMqQQ-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 215381084C81; Thu, 17 Sep 2020 13:53:46 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id D30EB7881B; Thu, 17 Sep 2020 13:53:38 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 792A731FC7; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 20/21] tests/acpi: update expected data files for microvm Date: Thu, 17 Sep 2020 15:53:22 +0200 Message-Id: <20200917135323.18022-21-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-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 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/16 20:51:18 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Also clear tests/qtest/bios-tables-test-allowed-diff.h Signed-off-by: Gerd Hoffmann Message-id: 20200915120909.20838-21-kraxel@redhat.com --- 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: 305135 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3CF49C43461 for ; Thu, 17 Sep 2020 14:07:27 +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 B851A206B6 for ; Thu, 17 Sep 2020 14:07:26 +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="h+HC6R/i" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B851A206B6 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+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:39038 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIuZJ-00086e-N4 for qemu-devel@archiver.kernel.org; Thu, 17 Sep 2020 10:07:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIuMK-0008Um-9J for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:54:00 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:50526) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kIuM3-00084K-Qh for qemu-devel@nongnu.org; Thu, 17 Sep 2020 09:53:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600350822; 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=PKcG2d+YGr8WfUNwJYdVrxDHm1+AQbWAXfetZQSmt1s=; b=h+HC6R/iUd/EMCVTKBUrt8yZ/u2acaLsKz+VcbJkobCWukYNFX6Adwuy0oBRLRz9I+txrp N9IysBfH7V7tbxivHGb7rO96FDhCF6B8RRIvvpaERhQA+MRx6OFuEyAmbd5KDRwy2Ki5/Q bygoT9m0ObTw2aC0oSOUILtP5JbxJJI= 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-279-b3aCnK5COhOLgbnkbRZb6Q-1; Thu, 17 Sep 2020 09:53:40 -0400 X-MC-Unique: b3aCnK5COhOLgbnkbRZb6Q-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 870E8186DD39; Thu, 17 Sep 2020 13:53:39 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-85.ams2.redhat.com [10.36.112.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1E71919D6C; Thu, 17 Sep 2020 13:53:39 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 8220040BFB; Thu, 17 Sep 2020 15:53:24 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 21/21] microvm: enable ramfb Date: Thu, 17 Sep 2020 15:53:23 +0200 Message-Id: <20200917135323.18022-22-kraxel@redhat.com> In-Reply-To: <20200917135323.18022-1-kraxel@redhat.com> References: <20200917135323.18022-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=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/17 02:01:40 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -50 X-Spam_score: -5.1 X-Spam_bar: ----- X-Spam_report: (-5.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.997, 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 , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Message-id: 20200915120909.20838-22-kraxel@redhat.com --- 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 = {