From patchwork Tue Jul 7 12:53:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648505 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B412013B4 for ; Tue, 7 Jul 2020 12:55: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 8A6B220708 for ; Tue, 7 Jul 2020 12:55: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="IWUOjyKH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8A6B220708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:55390 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsn8B-0000gf-RX for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 08:55:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37916) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn73-0007KH-CV for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:17 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:23532 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn70-0004kE-Qs for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126453; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=d/4SzrO51wLCoiHfnRNqtnLD968Kuwi1FHNsO/et+5g=; b=IWUOjyKHFS52yJEfkohKdELw5yGpVV+QnJqPPSznZZtwQDRHgLl9I8MURMJRgKO2iz3n0X meIZelquIOG4sFpm2Z0FN08hkkxRQ3m48s7At1kZlhLd42mC5qskpNxOgdDOLYhgrKsoxl Vj+e/bW9dkllvaxZl95VBrIwEyNmZTM= 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-408-dqKA9R8iNjyMII90ISFL4A-1; Tue, 07 Jul 2020 08:54:11 -0400 X-MC-Unique: dqKA9R8iNjyMII90ISFL4A-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 9618B108BD0D; Tue, 7 Jul 2020 12:54:10 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id C77C87846E; Tue, 7 Jul 2020 12:53:57 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id EAE0E31F0A; Tue, 7 Jul 2020 14:53:56 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 01/20] microvm: name qboot binary qboot.rom Date: Tue, 7 Jul 2020 14:53:37 +0200 Message-Id: <20200707125356.32450-2-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 06:04:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" qboot isn't a bios and shouldnt be named that way. Signed-off-by: Gerd Hoffmann --- hw/i386/microvm.c | 4 ++-- pc-bios/{bios-microvm.bin => qboot.rom} | Bin roms/Makefile | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) rename pc-bios/{bios-microvm.bin => qboot.rom} (100%) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 5e931975a06d..1300c396947b 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -47,7 +47,7 @@ #include "kvm_i386.h" #include "hw/xen/start_info.h" -#define MICROVM_BIOS_FILENAME "bios-microvm.bin" +#define MICROVM_QBOOT_FILENAME "qboot.rom" static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s) { @@ -158,7 +158,7 @@ static void microvm_devices_init(MicrovmMachineState *mms) } if (bios_name == NULL) { - bios_name = MICROVM_BIOS_FILENAME; + bios_name = MICROVM_QBOOT_FILENAME; } x86_bios_rom_init(get_system_memory(), true); } diff --git a/pc-bios/bios-microvm.bin b/pc-bios/qboot.rom similarity index 100% rename from pc-bios/bios-microvm.bin rename to pc-bios/qboot.rom diff --git a/roms/Makefile b/roms/Makefile index f9acf39954dc..b185c880541c 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -68,7 +68,7 @@ default help: @echo " opensbi64-virt -- update OpenSBI for 64-bit virt machine" @echo " opensbi32-sifive_u -- update OpenSBI for 32-bit sifive_u machine" @echo " opensbi64-sifive_u -- update OpenSBI for 64-bit sifive_u machine" - @echo " bios-microvm -- update bios-microvm.bin (qboot)" + @echo " qboot -- update qboot" @echo " clean -- delete the files generated by the previous" \ "build targets" @@ -194,9 +194,9 @@ opensbi64-sifive_u: PLATFORM="sifive/fu540" cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin -bios-microvm: +qboot: $(MAKE) -C qboot - cp qboot/bios.bin ../pc-bios/bios-microvm.bin + cp qboot/bios.bin ../pc-bios/qboot.rom clean: rm -rf seabios/.config seabios/out seabios/builds From patchwork Tue Jul 7 12:53:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648533 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E979113B4 for ; Tue, 7 Jul 2020 12:59:21 +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 C114620708 for ; Tue, 7 Jul 2020 12:59: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="QxDLqD9S" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C114620708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:44662 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnBx-0007nO-2J for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 08:59:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38054) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7A-0007Y6-Hb for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:24 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:38089 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn78-0004m3-Ny for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126461; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Wy2GQheDSeuYedKPtPUZiomVVNMUQqvM47ukFGtvX+g=; b=QxDLqD9SUYLvMIT6p4uDps841hUHpU45jwBgMfPhNQXHQV1FV4PZRN+yfxXbdtPpD8rSqX XqjVzvqpUHh6OYvgshDE9W8NZHDpC67NpspmfvUjh9c3Yj541o+Qh0p46mHhKwSPLYBB5l 7D1OUth4Q8XPlzOY6kAIX1JZEMQcHuY= 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-171-bcEJzuvKMsO4NRzBJU5x2g-1; Tue, 07 Jul 2020 08:54:20 -0400 X-MC-Unique: bcEJzuvKMsO4NRzBJU5x2g-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 811533476D; Tue, 7 Jul 2020 12:54:18 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id BD17079248; Tue, 7 Jul 2020 12:53:57 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 00E9531F14; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 02/20] seabios: add microvm config, update build rules Date: Tue, 7 Jul 2020 14:53:38 +0200 Message-Id: <20200707125356.32450-3-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:46:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- roms/Makefile | 5 ++++- roms/config.seabios-microvm | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 roms/config.seabios-microvm diff --git a/roms/Makefile b/roms/Makefile index b185c880541c..1a9d14674464 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -72,9 +72,12 @@ default help: @echo " clean -- delete the files generated by the previous" \ "build targets" -bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k +bios: build-seabios-config-seabios-128k \ + build-seabios-config-seabios-256k \ + build-seabios-config-seabios-microvm cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin + cp seabios/builds/seabios-microvm/bios.bin ../pc-bios/bios-microvm.bin vgabios seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants)) diff --git a/roms/config.seabios-microvm b/roms/config.seabios-microvm new file mode 100644 index 000000000000..a253e2edc6ec --- /dev/null +++ b/roms/config.seabios-microvm @@ -0,0 +1,26 @@ +CONFIG_QEMU=y +CONFIG_QEMU_HARDWARE=y +CONFIG_PERMIT_UNALIGNED_PCIROM=y +CONFIG_ROM_SIZE=128 +CONFIG_XEN=n +CONFIG_BOOTSPLASH=n +CONFIG_ATA=n +CONFIG_AHCI=n +CONFIG_SDCARD=n +CONFIG_PVSCSI=n +CONFIG_ESP_SCSI=n +CONFIG_LSI_SCSI=n +CONFIG_MEGASAS=n +CONFIG_MPT_SCSI=n +CONFIG_FLOPPY=n +CONFIG_FLASH_FLOPPY=n +CONFIG_NVME=n +CONFIG_PS2PORT=n +CONFIG_USB=n +CONFIG_LPT=n +CONFIG_RTC_TIMER=n +CONFIG_USE_SMM=n +CONFIG_PMTIMER=n +CONFIG_TCGBIOS=n +CONFIG_HARDWARE_IRQ=n +CONFIG_ACPI_PARSE=y From patchwork Tue Jul 7 12:53:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648555 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 389FF14B7 for ; Tue, 7 Jul 2020 13:04:43 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E2EF020775 for ; Tue, 7 Jul 2020 13:04:42 +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="HFO6l2rn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E2EF020775 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:56968 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnH8-0006MO-7S for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:04:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38114) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7G-0007iG-4Y for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:31 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:57133 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 1jsn7A-0004mY-A9 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126463; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=72IhNZnwYQ6IGrXjvHSLQOh2SmAxBgwccGavr45bvFM=; b=HFO6l2rnzRibiOY3xYFThcFU4ojEjKQK/IXJzAkEF9ws4csHMAXmqjiAomRruCPZRqhy3S z3RoQ73lYy1WaY1fRingLk8VhdwCpYEY+A3375k8gZwoVn+D9md5GdvnF81EeS+pDXVIou qeVCSYT3VmsWkLJUBd5zhx4oDWpbiJI= 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-425-FucCPFfWMzyFP89ROcbRAg-1; Tue, 07 Jul 2020 08:54:21 -0400 X-MC-Unique: FucCPFfWMzyFP89ROcbRAg-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 2B7D319067E4; Tue, 7 Jul 2020 12:54:20 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id D1CC57981B; Tue, 7 Jul 2020 12:53:57 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 09FD731F24; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 03/20] seabios: add bios-microvm.bin binary Date: Tue, 7 Jul 2020 14:53:39 +0200 Message-Id: <20200707125356.32450-4-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:20:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- pc-bios/bios-microvm.bin | Bin 0 -> 131072 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 pc-bios/bios-microvm.bin GIT binary patch literal 131072 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Šz;f~N?32(9N9M2^yf6w4Gyf62=PS&R!ZX_un7f7cPHs70!D<2nP`VC7#^MIgPs?enS zdlI|@{5=-?#uv}fKR#(M{~85L#&P+PR87B%2|u)*ko9{WqOR0UI~38=s68&J%eoA8 z-NQHVVd&vptELNYa`xLHnOl*XEeS9en=CE)!q#N-7!$he6)%Tf49Or-qDtg@iAxq~ znr~0XZQte;yC7qbzIe7wKE7Y|qLK6$pfON%R;rkrNH)D#scqkSg?<}14AAPcZ;~N` zf+70!lsl?H+(M6J+?xZh>B&gpG{xKuDvGw0H;MA>J609hcdRRj>L0e~2e?VO7!~gC zP`ZaQHjo^(?_zyGJELhshLEe@fv5>i(UCLEKybsNw5Wui0_r`BluDbt?YAoWQvD4% zJUFcv8OhS=AAu9t4!%;ff!8`2f<-b83yLuuQR-eua{WGEr1bC8g1-{!dhV!TDVIPX*+AOkncm~cV>}+=pf|W6L&oy~?_!LQ zL-;K*gdgOZCNutpgkMJCql8a;T(Kc$?LkTeAY@`-+{jz)DI@0Y3*(4wCd+YBJrW|K+DAQMjiaZRkzy5*|+F$=O z4))Mn{6~guqPpO9_||sn+$!7;zIH}WHe3=iD7$# z_2)Q6aRrJD&2?Vx!J4_MtScm^LyHVv*Vl-BiQY!+!0zk={@o`3t6E@*EwI3mSF9A< zjbyo!?E54$43~+?Fev}XuPB#ZA)Ows{dJ?{`}Jv*TsY3xZ?aJK(PB6+W2|<$qJz#g z8^#ssV3!*-_>h@kI&*kNEn_7{PmegnlCn=O-qoW1HAb!;+{#OxUkeu5{C7Gu z-(a5Xv_E~E8@``m;S)9FJFjpB77T%M=lKT4b!CM7rO-hmzk*PTXpzq9@r3?;WFOi) zY{mVnM{tW(`t^H+QT1MN_8*-{qcV7S>{*@Ve)=;=aXbpd8Sw`>BrV90VKmAq)LsRz zB?_=CV?W*ePuL)h!uwlFJywVeT9FK5~G5U#o8VA*G zusQVw%T+bqfl%ZOChD&f)`h0Z-kg0+ecO1lopHlrq?iT9hYy4Q^YA8Dux_2j)%5~f zH6I7QKwIRszi|l8fd^(PX$4z~-gi-kZI-{s?0cO$91vv9eFIYut*UH!oA&y zf{%g3uxQrJBIJLb5F@=9%A5}g+cq0^0Z{E1y8z)VG5)}HZh~$KMC||^)(^070Tkr( zJbPxmHR{7ekQf8db>>K{SGu2v6KjEYjOPNlosZCESR?RLQtV2eiKxFH*1rLk?2og1 zZq-B>wD80>8nhz+WeeXG$5F1pG2Tg!fj83&(Fb8)K^ZFE_N)5dXijeGdVWa4b{+S5yy_C#g2a1x|m%8@~ z#?#1%&|9PqU?|Kl5dxv+)UBErbhng>D!L+~iUVHdxFVjKBC+Dh_Faxgz(ee`Z>bQ zA(Mu*uo!gdx%R?9kQ+#Q!G@C{OGUG zh9wEGL&0PNOm7C4-rdU2xnD}<_(0fE$}Q;7QF_6xVu3uBLbw0vdqn;n6@IG;P(mvp zb-(2)0ZA;8=G)bUvTp-Y=0ntZ5%o4t-vWa>f8*?>`>D<$FOWbhJs+`MX`9_dVy-Dc zOmWwd#A4&fNol6#30kI8<2W6(v-KR%BE~4gUD>CE0Zh! zWV^jW&tll-BLRnhA5o3*rpMaaKFhJEKI2<5o^0FS{-E*w+YorR|4AHyz1#mR->!EZ zT_2>Ud}4q0aA1%u$^&Xqeygdpgf7i6)%2GbkUf)RsotZG_uQ8XEhniOrZi)F``kBW z6nFAid4GQ$;+ua1aU~n$Wv2UohH=kde-nS)`%EDVcw7MoM;!^+ zlIS$&N*dqC?M`BLymy!@oH2p^(|Nw*?VZ$U$DN`0pxh(E4nJ=1ei!&QHG}U71uUdj#0OlC>TqbniDWW;~c}`+LmX8&Qzi8^G{0(2$K{=25g3c!N>$goeSo3 z?@2rwM_>yKSk8w6qn!lC+$!;IRB4gR1h&M0jnyUIG6Tl4TjCu$E-+*ViHEc(upX&| zZ56nIt>6PpY;jy*hoimzoWR^hyjzWUHy#z3%oLQ}_+@1eL`hhs^O6ZUs>2~cODVlzc+S;2WPLnZWh@e6kF>f*bwIA+D z)iO0^k8Q6rk8E$3!NM@&#RBWTq+;ph{M-J!=%7;JSZ^N5l%b`F7O&;JL5qD!KWEku z(-!-ZM1&Vt_5nsjnsS|bPJKRpUOw$L;AL=I{O{TWX&GI}QD*-c_9pyi%-&1=yi}YX z*r&`egzbTD<5FB7vP*l$#Ej_n?Fs0tGy4Q`B}=vD>=PI&nIhAQ35v9BPvYsQ_(+P- z?v>GX8-mWZR_4C!L+$qp;3KvIm9W2I2Zh;}l*ibYIu3MYpHkOXHuuM>S!(MUtFKR< zD#DEL(ZES^NZKZGx5`h~kp#Von%pK2G%*ZEbeLrr%7Q?@neoh&|C1ntO<@PQ7M|~Z zKyv>!{gg+cwo1CT>DvRtGZB6%g|l zlH|T5Ng@A2etz8lEd|&&3xf^W+*FsergMQSzM7sso5lW|rS*){o17Q^gd+qCY}LG% zvv%II(fhAu=38RXQ`Fa{oA~xL+j^QUJQC?{hE(Qwy8-C2e@pt`)&A z)Uv6)6`x+6$DvTtW}NMl-;hzZgT`l+?Bt`JFd}Zptxr=CpT*h!9To8xlI9`hd})F*N7O?rgE1Y1lR%=ZdGJS6I9jXLheaV@;Rp96`vHZq@Ws)|J!Q4V=OSx9}uRmTqBE%F?`pWr{EE z4K>R1A`zC|bczs%_o4SIH+A#gihsZ9gUapOKgiGS{9xvG%Lg;<*ts8w{KA2 zuFepfD+g8`uwvB1w0~9S^i8jx2fb@Iy=XeP>frQEhgqa@kh!YUiu#f1u<2ke1{G;; zqjr+SqJu%BJbZKk6?OES?Z1-j9{VON+I>t4eN(~t&XW8C01s_o)NY|SMZ3^2f!-<5 zZwfTQ=vb2l>K5p1I#x99e1Vn-bQ5v)=O@r-5FGyA!_vTprY*bTQT3y8(Nfwl1a$C% z>+Vpi0*kS&9e%%K1&G>Zr&ccm2i$OU$F04f*#_tmRCVd3QlPy_-@;`IJxgcp@bpF; zW<TLkL2R-1-)y4zLbk4R4i$Oy%Bdt(|)fP^y9d+G!P}+ zB4rI-PFfx(bhvW+U?}W3AqEwIwT{UYuDuUib^4#YNe_(Js1!;)Ld z#At5yq!HoJ%S(8X{B}r^ugni!NkbsqVqo@nCTA7zP); zPrD_2g)8@-R$uysO-KDaKpauAlbWDQ+{(S?aE<$rp!>~?^ZiCy4x2CMAgzhMTje>)>o|xpVJs7X%jgM{tt7 zZ@?bV34L3WREd%(jHl&Vr(r06fJx&y3e%)#Vt2IjK2o@zNVgSTxFc z;}HHv@t4Kl6#nw~o6Vo7k;nm8MR93(>{rCcKtP84&6B@UNl`6-?pLJ7-k?eRdkVs+ z%ur!X^s_*B==V$-?G-fO^ZQs97#G<0e)_m;TMJb|Gv3ZeJE6Np4%{1Mp<-}g9wWi= z_rbpD>c!LCnGSCsSFXw7!x$+-;9$l_=})Cn*V;?n!+%8fwJf{o{AjkfAAN_dpAv+F z2-|&HxBNT&vlV`GEdEcqRc7E{B=}RnfAcbhKX(NFPdGt{;zz`k^``zK7L9>!*4FK( z6Y$=T*M#@AcA3lc*7IHoz0L6M=q`3|k_?`t18x;5sP+AmyxyA9P3IP`evDDBS3k{K zl};wYkJ?Sz!_*@8GwmC`2bAkvzALvr&aj4I4E0aZeCh80609ZCtzQw>%86nci%6r{@#S(1E2=ENwSfj5NhF!8oKL9IVPF0P;_fyat^v^4|i$Gm9Kv)%0S zpSjk4&&wbR&K=?kuDXJUHf5*Y5>%raAx$Fxp!`ZDB^^!;6!u;|Re2%LyG2ubWq zn-08o+J7Wb?bNzNW4+V0@c^ogDFy@IoLar4T%Em-Q9P7A&c!D}q%_6JUTuMVe8 z=c?fkf$+@YhA*Tlz^5u9pmXuV(eXR>@su%Tmhoq`oc+jIT(UW6zx!`|cOl4Yf&GZE zrvm$SAsT8}u|IpKwr0XE?H|#QU9A!Lb=sQCcje)6`A<97ICeP=r(;dhF60U(fxTkw zH}EFtKJPe4zA{r-uG7Lkq1fT@T}Ay-6+OqBliGWZa|m+8yi2A`$)5v$qrf{z815VK zY!@u-0ySUadR2e*1DF5YUCqa-Tu7wq!=i*1agO7OQ&(^uPeu~Zu{)YBJ=|XvMG+S% zkJ`|Ova+4;@6iJsTcB|pZbA%o`i!5XeX8p5T9KvfbLE`}7W(Kxw^>-YVeGK?33NG6uZhM9x*+H-v>%^+mL5biK zpciHzzH-}sVi~p;?#Y7FnDSg=c?%0-wjTarCQW^kWX&!A_9e-JT>k0v*b)kKE8D@S zr0&*>NRI~c;-?rHn4Ub`rKcz>oOjYkiI3_tYTvTk#kKOl{_ozJuuCkkjeaG&XXz5% z1fvd4k`oM(Xij-80j^C4Cx`z|8`y$*78=VIyvr6~sd%y*u#Q`uF4#9B=5EC_t&+%5+ic zo-e7NAvFp0J61ybq&?8*2!;xE(E9}?GD2Ch;CtmA&y zTt{1N&-1S{di?)1ufY)LFS0n%T6zP*i89bp!nV)`L0SM(Za{H+!x{eBz9h?2#xkoz z-gi{I@;C%lvV=SFaQxYV|DK51q9K%ZU1Gg|gt_Z+Fvi-f*AbBw5`W@7?ayKJom zjCALwQ2x0NjHQgOrjMdG%D)Z~H2{qSbW14xG*kRTRDb9XpUVvzc}uB9pE*W2%%FPu z{L$$lZwkX!+%jOP#uKB3_nv4gf}5QF=bCzB0p6(}R`A2>&MDCj;0^5SpgKes@i}}j z*8aZhTcD&La#XA!( zRn3J_6dIOiWXPV5m}_*(43npy`kLzM8F1D-2E!=61$@WwoxPVsB$VmFLUZQn-y`ac z2w=V&-LnL<&LY<+j`=1GUZg{5UUTk}^BFMPr#g^wdamurgAU3!Mb9CMx;WDz zXHKffPplAhqW^b@L;dOZoCU=c{VYY|r89O39qv1%R98@{Wg)q$t!_yN4!e#&mj+rj z<$fx;arA&+gdnsyF{-F`4pfvAdKa7tyc1FX^YRQv2qN>L;Cqnr|!m`-5ny9a1 z*OI0PJt4s+35p9|E}NRhdLz2-nC^a3%6BKb5U{8Mw0LLxd0F$HlHV9`X04eXRF+II z`p3IbTqCt{-8gLO>i-&k2mUnZc5tj_;cL4bzvn8`zCf;Mt%aT3)%@uC9HkW%>?h}3 zm%ZxgyGXo$MdSR%+2j1sbanYSRu7N*2 zDt?$fy!3ftee5wl4=ozjj?A8E{+%ZXH~GdfADgu`qp(S6%b>RmYTGF#^M80E=Zhvw z&gnJgz}dhT#$&2C(|8NQn~0FYaZDpD>`yQZy$CRzy@JtyY?pxC zd0Z?YG|TiCQ>qGW7f9|R0rw-(1A;>Wj<#oJ*tJ|i-IQY5oh#P{nvyyMnBCcPNH}C^ z-~~3N0<8XKO2M9D-npe5TQAtw7abfidp;ZsA3zvE-vbgXOwc!%Gl?F6BRt#{x<_F1 z6I{W?)&OGv5iaBLw5{!VsZu4VgssmX7Pr(4S4Io`?{MJ`hU6uSDomyUpG- z`)^-TCqS=#;6H~_j|vE`?i0=Q5|!!F>;sbROVW}j18;?w%dcFIq{Awi3EPPBOv+Y) z8!dfxB*@#wMTtWtrNV^dE|EUn=p*#SaE3(JO;IF+B3MrlL$G4IqKE$U&mQmM!2WqC={b!PVe+kL!hwA-F-VWH(e|xI7gg*~|Tlm|--#fof)t=z*&42Uv4B@-@ zdx^hi_NQvU;cq{Gzvu4|f9vTb8~MABzX$pIHh;DCwcc{MTU^^v?y2(BYOXC?V!Y** z)z#&7zWOi4D__03wt>j8=~vXPii?Lo8qKxk%l~bm3AINl!{hut$=`PVV*mX&{+$=V zV#9wM3G3v$_g}<&nXu-@a#wAAb$Rn`+Lp%3CQnUy0t!`Lx zD}eL}D{+tSpq+ErUuQ(o6lSzXgqzNV?x3yOx?dXh-`3&N$^s@yeIt31Bd+C{>m zDZiAiuCAe~(pz(3nwplHDj(o2p4BUA8$9JT_1>nnM*iiV8n3TW%CNG=TVB&bf$A&k z#2<-USF^IRYHcLi>PBzn3h0O?TH&j$t1e$%h+tggIvWpyMFEago# zD{C9-%d47dpxhu$6S$&Ob+8pa53#C9FYsvDZ>w4DE00z#H7+zOm{dd*zN%(zFI=cJ zT29(hQ*j&XD!s0TrqvOwkvfZ}j%Kx`s-cl8RF$tOw<55~Q{AW;VUdcJyi|B&t?Cz2 z-kN$<<*RE}uc#DY46L@n04Z2wQ^SgyNT2i&Z$(3c*Jx;iIO%&cY5iF>4XbNtf5}V1 zh_|qbZV5nDS3@JixgHuKWfK>1t7{tT8rDW@M#Abn=PSy{<4dq|T8zZe3X%L&<$(`a zIq_Y!O`vb8QRApmI&gV?%^K+NR@SP1SX=L@X`*XR8K0#IkD)0Wg{gSpIFBM=l|F+!Is%Zmn zLs;ftly3+uoh3jlEE*R36@+45U*1EdtBRUe%xwLOD!oV zUL*mt<{18vL?(~IDdiRG~-+b_BjjY z7}zC9Wg`I>Yqs;S3)}D2pQdUTw%^dFQYG&%{Sz!=+*+($n}X5y69|4{_qN|0^Kz}M zwP5C~a#P;~v($=m^E1AYesPjQq?p4fkaHEZ+L=aU=3t$bu$^bQsStO2*YY;5u>CvYlX;yh}5u$b|oJub-Zmm*nHi%Ta@G@O?d z7e<{|7SEeJu~7z*1mh5l$}z88f;I>ONl)i=%x7>&6BJtHeT8Tnm}moPpH`k-yl6hV z8$8C)S2LHbcZh%BlEMWA&f=1Sa%b9PV-N_WqESGVw^vvl6_45;U_d-r!2o((do=Zd z2P?IQDsA#C#N!%6#25zst*Q5ev4TZXYTE2^TJpT&!UZO6ik6r^ zLmY|uGx=DG3ix%*yZl1VlUcGTAJi}&I(}ceyl{tf>!4YtMwV}mgb^BDyGd)(68fyw z%I>~q?#zPT=!uDGDXQ{&>r*AH&?;anvrN@mHQx~lRBPGYU!T8lac@HVzzY*vtVts@ zheW*ITvU+XI~0?(D3cQc;+ULK)XS~uvrL~Pev+t}XPG`v{G56mk*8f{R+(NquXs^! zrsiH$QbQL(<*@dfWok)mNwio-w5s%l=KO{8v!k_>WHJ~+v_w+BUxns$A_s$(5e|i> zNYISG0F5=F7Y_~em3R_3QM8P(fX6Y%a=uT{5t$A8YQMBv7!u;ir#~)s@>Ad}Yb`Cj z9?od_rRu2S$)A~3c)c^tUYuWey{U1n$*l<>ZE|t`f+E_v;;}IgS6GMnDjw~>PVlTX zRdDo|zhF^?>CpiKDL4p)fVrO50e#I3Hf`R5xdocxHsPM3 z4X_E^nt*3!)RTxOUmMWR%mz3-4_|4oPf`&v)d*ARh#K`uO7N?c%&bP-h)+^RqcV&n zN202fcqJvJQE}nGM%;)`QbwaD8YzjYQsR}Alt{&eO&D<_z6gyfs@X^xEj->>I@#YP zWwZoIS}dJOM#^a6@y620acWEn`lyuAsD0w;#2ZUzavYt>DrJ<;av2?;vW9a09txO{3l-#9w^ z#?y&6mQEOZ44t+(I&JZE;*F)VUmTsx`!RI(i>DKBES*R{MqE`|uEQ8*S2dIxPbc13 zI$3KQaaBro=kP__(;iPJ-dH*vadbN3=yb%>i8q!`gfVi7_S^n(boP&@6K^b?1LEi$ z5J%^LcslXM(m61W&Vg}s4veQ0Z!DecMjLgaYA7v^&a`+s@y60QD2~oSadZxfrxR~1 zotMPXc}X0dm&DVFH*BJjL=ioRx2glJlIG#?tv2)T45l<)HSUQKr(K#%R&SCL%;x*_jTc0s5QD#z+@`{n{OvNQP zWLfyhmY?zRGr^KJaLx@(`H!Zov$ndCU{fBq_D!2S=Z5@}6e5&l^-s0-4fN4c)Cyv) zwpn1-B!1^S+V^3%wUyN$?#BgOcK5tw8PQRR#D+91vbN0RrTs6l4h*DfDTz#1tWY#f zRwyha?1rQ#g^=Q<^)D}&Q>xt|ZfmQ8*wsqoaVe7WUs_&TQfk`lHcEkLUNT4Ek=$oq zkUPTFf1G=EOzzn#_iV~1>zrur*=ZNgJ)5<*(4K!m?$(6=MfT%kvLCOqAAdpiHl#pdonl-<;@cM+Z5!U^zib|BM`?S?rw%(>Z{FLW8(ys4= zBcCk_yfv)yMUX8@dbr|VDMbWrg;x2fbzOxuS-X9OX~k9>;2IW)2!JaZ*RfGl_2`Ii zJ;=Ubl`49L_Nev2D${~RMK@NMwp!HJn&_)=EJ!JzRa~g*t>29N;yLWlOxCD`d0AOn z+Mx16_G@BxbwsRAa{wK$EjNUA%Bf;cFcM8PK9h`31k*K!Z;J8BF+MYl&rIW!Z+r@j zPoeQCirGt3`)AiM@kX}<20dx)zjVgzpWXQSSMR^bUX2{wMbrOkpOM}XvnLmY#qP35(wC;0l4HWnsf@-GUz;@MO!4FQEa7wnZ8X>X0d)W${(Oz_3-5B?>R zM^+4dXMwE(AG0gS416~532ej#Fu^Bf(dZHKeeL%buN$kiZ{Mpo+qM7UT;etU&hL1| zyRyemm^f+jHB)jbS5#HkxK_GrZ(UWly1t?DwkD6Sc}>gO+g)2YJ5t*<@hJ_T6i+iz zC}_T?bu2A;!9PpI>AzH-{>zHff2lhC7s4F99s;QNbR)!wm7r-(qV*<$$Wgr>0$9yt z#imcvWVduFXiZ;_?!O77IA7+K-u<`nkzUQDRd)Bt(iyTlQM!16^{MD4#Zy{ZYB|rO znqSj9)jOmHfG4fy!;u z)R{8}gmRNgj#}mD^=Baepjk!_B3)w(I}F@#a7do8449%taywvwe>VV5wFAW{y5^b8QyP4yh@MpgpQ>ig^KsE1QjR$J!t&M zmGQD$LaXq}+4vH+R;8d*j=8_QQIFsB)8LZumGy zz8?inm#K5?$$&7Xuz84O>JTfBi2SgV3m9z$T2DB625;njnB7^{y;XGlgLyWt9FLUe z+|+a4fj4;GqAnxt2R8;@T>l9}Ml1Q@4{o~QhuJUMJKi1CG>mH|V$`31`wEQ@>uNl# z%Q;84+aC+`2@DI&R~L8!4s~H{N$ILdqqf;K8`|8TdM^tG^Y8@y1@imgY<}%o{%%|N zy|P=n<<^v#oUw_m7=GsQQURAK4P~>Np=sGo=O2?&0hl^pJ=bwU0m?#&K$d{ugmF=7x`0pU+ydq1 z_E5pd^Di+tPw0nW*-G7}qt%F;OI!@jV&o4VLfj4+u;BQqL=^d{*mx;42fold|0$4{3?R053(fj307+S=w4OD4 zhn{=MS0vBy>^Gut%ec_2hG{}CE(HsmRM1Ajx8s!yBYz998c?R_12m7h9bwI|J zRYn%tl0mKeUyRC+6(56-1m3i#1m5s}@DDm%;1hb+c6uLI_bhEiWKAs#u`j`*-hEuzVhkM zlRABTuk9^Jv&i#y7M0U4xm~S{DGGx+te6a!i@pOi@MkkP(|(sh5-j&3%;KGd zwg-e+xIXTVPp#^M)SFd(d`03!Bk@sqE1l+zCzE~I)TOe?qW=QoH*~f*{oOPoS~_p$ zeB!%=%X3SC&z3u>&3#XGCwq_NhmR;TO|Z(vfxprHA|r90jKsC)UcwY!XJ{d#-x!Qz z*I3UT@EtuG68l&(FfYZTt?y4C2fFA&A5)6`fww{<2>UoBm)Bh%heQ+JNc*)lDWu(Q ze>Nd}xg@nq(yhV4!RyVT-$~a@2xH46A@mMzM(93nqP=n92>m%NXn%I8F+yiyS6shB zL0)1oHYcfZVg%DwXPI>qfihOtt{E&$B^%<6V0tUTo9K(-CK<;?t!FWD*8hU=n-~s( z?zRPJ!t`dT|Kf{yB$FgkSKx5q#W1>Q63;+B6nGe|w)2p;fzUuu`7Adh)p+;k$}Mfp zH(>kyA2gy>eVcJ@n>y3F6%()-W4{7Gc$f@(ug%|?rkFGar26?gM;Q#8twc?q3O$h_ zVqvy_)Bm9wAZHj1_cJQ#`fUwnB#Fa@9X1Av|AR!VGTA0(ckV4PnI`1%?x^oG`?C|% z{2w^>n$xnlMHZ0c?FbR{dL!}A@Q9+CZ;-lH$TdiZHo9w<^S*N^RmsCk7DXGq@(mfE zhjph^(I-zj0*8GmJJ;0-uj_e-IpYTETR2{qeMjphqiFT+;4==s-1dIP%s1$L1IE1J zwsdjtv`CCkctqZG=G07^$%}2AlGN~VS8!(>pizANa2$zVn)`TD(P zhZg>V?jnu3MCEdd_;h8n(irA%-1E(sC1 zc!##(kT1#qf;pV%f5Eb`XKiXnrh(_3PkVYk$D(eyf3PqvlA1Dp#{ddtgQ4vXb8t1< ztfpe$!XhrAGReK6CNYZg8&GsiHPC$v_vXb~=SPg`L(vEiNrbURgxhdSdjGr0YM_RP zbz~VKOC^@95kWZ@x3YGn2InGtp`Q|B--XW49ddb@=J|Tt9hTr?%#(Ya{*Xls(>)zc zrG(|f`VjnKJ4G*!0PX{DQ+Nds`>w^3&wHN`qXe=%z6Az}*jh{aozVvtQy+AK!}{-t zRTw^26dq;7k;DXvTIyp)P_$JZ#2Yxr9ov7l-DwIPW|%KiLm%nhB4ub_hA6222Kbr3 zhyN)<{msC;>(2}9v^S6|L7>Jzg~%(wMc?~n8{nz(5}?v?Sx^eo91O)fnz{&j2?A@en03?Fzc3O zfj?I)C1_rI%t%k%bof~7S*y?5E{h5MZlc?Fb(e)?5g0gh8ZjoYqys&VKz8 zabi>Bh;GBxkq&n{9yDj@=V%}Qk#pW;{dP(bK5B?7-BAnkR@Gxe-yv)%#yj?P^e5q` zb>$*Z>Hw%ao62@HL{H=SF|j4H6vnV zv$HJp7wT%R|11vz9Swh8)(tC`nr`HcL92VD^ezuwuY*G*?upYq^kdB36gYWrlIm-F zll~%IE;40~V)|)SlMEAM&~KCJ29eUf!*9$l1sSRM9f3Ex-brjTiw?U|I;GyJYSboq z3E3RHHv41L35TF;;0)er#)-w+mQ=p!IV^Kf599?KljwI0VJYqmObNI}dod%>V)5^_ zKy-TeY150r=^3ad;xn60OM*l#I6jcIFOL}l=61a~Fx#S*D2=IsiSl+dZ&p~T^XV`y zExcP&BrqTTT8a%4Y}9PXmnl^FpeK*3=AZvsCRnNFRFp;JLCsP#z561g_jBs38&d~! zq(0xF?U)>Td(c1zL*T`(_Z+g6OfL(`0;0phpl@%WFrgQS4#OG|Z9A*dHVl1TVx4CD zrCqM)g``7tZ!S)N$4rx+XMgrBRK&US{uqLW=$i{&1P(7j&nW@zYW*fv3`r!n)II|(DWXRwOtMRN6ua+|G_qihj`>vmeN?%mpN`iOP@Ead>t_WSBLr~O z;-?sdzovwWizq9Psrn39gkQ{a%5K7J=-c@A+J5eD3*J}ggUiag?K|F9N?tI@Ph||= zNSR%^=xrq#i{`^+q3eJzDdml>{XO~|<}=adXqjW*@u@Px@G)amnc2vu%p`;}Br7ao zTdr(t`!0*FzPFu1lVSH~AW%gK_ZLH+;h(#Ii7{FII#rxo3`yWCH(ZW>EbsOxZG>cY zQu-zM2D{VRNUo85Uy_qu7OC`QA=wZ*?+;EAu_u^o=C}RiA4FT&V*6;D08wM*_XN?m zp5Q6l)|XA&RMS0we!U5+fn$v`@F3uyBj^WI;R32~J?j13Qg^PE0n_?*=Hf*qPUBs!_0vj93vhpv05rRKU%|f)CEaV`LsQpJS;iKzZ#>%e zrY?VHMow4rmBDm>3vWkWhC0ij_0x*jw)OQZb<5Z7BIj_fzta+a0}Z7^-fP!S1@|J~ z7aji2BOJsbI!r$uLTE_{L@JCa3uL%Qg9DKI|UCXpz(Fs*bBnyNd<+YmyM*F z@KqbWOYw<-u{|2x2Y^yI(zd(512Xpy1mkcpV&X-{3~{AKx_js9MbxIALf>KxZ52al zJb3Tx=YC$&y~*IYF+50#p5Oiai(>cd0>z*>Yx&?%iHtC5G4wgZDU>c*y60YD%|m0A zIeUfMh%#rg{tjb2{H8nMKJeWJzMUsf(NYuP?-`={wtF;9WLh<(qr*2rAIb2M(aMy) zX?eya;xu>i(pf>q6(*U)2b((n)@uVLL4OTYbn`1s-eh+wIfc_u;7xa}&pmesDpXH- z`?;q|{wHPZg!_q23+)@s;oH@yhbbDPX_V}svRjK0j2*j+SymUj&uk&t%XGeI(Nguz zjB+UmoJI8BuTq6FKqHKg0~>#0O-xJz3~-^HJXRiN$}+Y>b6~fzoM)d5_TN%|#eT|- zl8gzqn1gGS4J~rANMieVSlCGL^t4U4S;pAHrl+emXEr#9oKhRXm{QE`)?~%FD)svUNj>u_! zHa*Q1d_-1U!Fy!+<_hK|xN>&;vh>X&A4V20NncvL)Dfx{FJ1cEP#Hc(9v>s~fD>7- z2P3J8rptKQ+<%0zJ0`jyS%0)sXmOj7yIarPX5Uaov3U=syY)oF z4Thc=Nxqkk5$aE}U|}AWWtNAE%o!bMl8Q((Tz`b(8i|{%ByJwo`i0ZGR5fTT#wPB4 z16;2i`ROw-J(;S!YAcMC6ZPdn=sHUR<^$hr7v28mj{;bNeL|4)32Cr*iVEaeIC6<9KqITN0h||5R3lY zNA%GkMni*JREKPh?~q>{|5qLIZ9-Lt+@)U+g9#r4kzNK+;TonRCX`gEubel0JXOmp zb)bldp&3LeAv)kAylSqfgt3aI;C*=E3JFHK{rX=ZiF65x{PYn|GITCd{QFTAr z802L6gq&r{f?r6G`}bt1%9E{z^+$)m$^v_1^sgsw6jK*o2g=C^D-K_nFjDnItp;24 z%fT%M9_0C?(Tq@{q2V|T7vsdDKgr02I7b3~ER8#UVuVZ91Ii8x7OsdigwZ8W`dHNd z*>h5R)YZlTpmK?>L8oT9jRJPF-x@c(>u4_LP02D9QqzzRAAPgEKJcx9m1;o|lm; zCT^~E@$OgB^PS1$6v%y<5DXB!$Vb?3UB*mTAoCS`l&WCc9&s#53%v0v9QLtpeExS$ zuE3!Exa>PV^Y2aUIw!VN3S!I80)*MiB9D(_U+$RypUyjze&+-|L!Af4>oNwYDoa+K z*}m~GA)}84^zWKDVeHR*(e<~!I4zVnIoz?~fX}g+Ce)pe?IzREv&8o2ioFoczTt5^ zFwHd>B9g$Uy~`QGKsW&sW!`;B2MICR!)a0HfUsCxP|%FMNrwns7#?XLXg#OQ7P*4= zc2jMxZ4znoy)WQ?OyX_o*TrvmvN}}^k9&?9)WV~lqvvVi;m@g2I`}ymIN^cM$*r)k z?K$C*;iTteT`vzBNH0~LR^*bLq?eH3)L{Tcb%H^}e$Ga@~+?ZvNpea3yiBv~%ZZjjjGWnFR-Pq;BSvxB5^vA1-@y#5`L)4Serj6A^w zjgty>w5vW$#~ zDS>YHaj~ZV6ti6U`m^U0eTB4y-VA@Gw3h_)GNjP!ryw+!`jUf<3}o1hhPe&hOR8Ix zr3U>$7M}WOB&)4?R0PW=ma(1su=fBI!~kA-7r^uwz^xKvN(`W#eEqp%6I1hEwRM9C zuAScDuJuzEKjj;&uOUbL{gJDM4XAKkqb9e?TXt>BPWsQD^iB`XwJpELI;Y*`W@9kF{TWy}7As|?0_lND_=k?!`MYJCK=r=RZFL7Tg)ZRlZ-hen_ zm)U-7*D+q_#EzXI6lTERV}-(B9hKJ&+!G|-0@7`@JVk3$@@dBAS)y;ad%gr_OV)!P zhsN4g$tVz#<74A@Rz^m5ytxyq%D@O@3Krg~l?1+|J&(r|8N?+@rYmB}p{- zM^ui)Ohnd4{S})x?v;XXKXLSr|H9Oy7SGFW>K?UV@w|DXwJOw3vnM;()Oy{{+WO|o zy4q@|$6Hyo${GnOZ)mP*YO1ZSxoDiFGfEcBSuo3)Nn%5N+DYt&CMP2;&4Tb{@xKrS9wWHaL|sEIQ53rW#L!uc@jg z7SDAWZvr{zyKm1O>2r=6=^5RNW4N;jHP>pV4?XVMmGxxLm0l;hvCdJ=)wv_HCbmqK z9}*bx40T@>LDj&D%4%m-MEQKG6Mfv=k&Vu}n)=+4)QWF)?#LFaR$5cpROPO%U+EMr z>&%rAm0~BV&{H8bE&|H94WeFrK5+Jod5g4}zy*OzO4eH{t9G7#vR>tEs$5OQuAuT) z);Q}MykLPiD>^}QraDDK^?dD6O*Ku;HO{KaMyg&^^PT7*RX5al>c8%Ft`@a(YWm+K zgwU0A18A-FL_5R3O>|+oMtYp+oI7)!SuIjqDocS?yW(LeAg``$S{oDDnR#t&qAy2? zVDr?VI$ixQ(_Sn}B(4v>Q~h_tf{AW`lPo+@>_krg{f2eXR*_XCOlM(aiaE( zBWp@sUCS7!r}lPeQyyp8NYBlrpEGCKgmLmak>;)SPIcDQRW&gz#*63)-1s0#L5!bN$;2f1THfQXl3u50eVUlxRasF3SV2!tG9EK#CDl;iTW)tJw z6Ja%sD&a-O;Pg00t*&fQ0O>OfH>rQvlBCDPLuLcI{423U&Z<3*rYkHdSy(dFd7H0> z(W1H)1WEhv(U%ul`>$M&XH(>Q?O0wWgdtXw_mo&Vu7 zsF5wBWfmFLTwCdE!P*C{{N(`5VMu@&5}}vWOm!L^5yrWCwK5dJNKzf1p{5JJfezUU!#NsUA%1h-5_P8TL8YO1F)G5hMO)ku{_Q`I0b zoz=CTRn`mQ3h%Fs$<>Hr*!mdfs;#N39$B3^vRaEkRDpqL4UNu`EgE70rLSpZ7OV0# zdFbtQ4Xzh!O2I*0B$g;j{_xc^w^omnt|c&KW5$p)V05c$8zWuDh{4dC3V%}ki}`*E zS&eTInL$1jr(n+f`Ct=KwOLiJDd5+}P`Ys=J$Zbt(xx&=i=R&(VQLPJ zFpx~_^kfQ`RMH7ORVq<>tr*O4Hs2=G{+FUkkB&^y)wR_!JqwR)qy;eI;-i;ADNzjO zdOiob&=)5p~-{9WYv}^qeZGk>0Y%BRF*a_l3e_G zBeSw6w~V{$OSBqf7XLdsWpZHlFc@xxRGHD3$0D^+o*ktYA&PlOCHS|M0@CwDN}7LD zBe8Uf93p+9#8+Q0;~_@!6A3jc8LHVpd}HKiEN!k8*B3`(i?lXkq-TV4lt?pR8!dC6 zv>B~Y@6FB`BLW%KOa{WW)by>*Q$~bhGSo`3-J-h2`9dHzuB;KeGoEpZ<$Kn8yfrX< zFJgs9K^mJIE9+~kGKF1fq7p-gM(suJ_ro$4EYeD|vdWF=qUpA*%&63^Aoaf0m6`Rl zhk;6YVN#jQ#hO^-8Q05op&5EmDOS~^{X2S=D~0i?ablPu9YwQ>7gB{g$4G4PQRggVj7)_0Gdrno zB;N_+fiqYmA%-gwCZnyv<(xBap^^)c!knH)=Dhge3F8@n7e){%Btn06rXj3l*3?%U zH8gqRSLdl(E-IGR#;mv^nJ!kMn2cQEj8O?6`yP>S<}f_bCLz-K^-iIz4W;qFI(2D{ zS1qdqg&`6#l}9@j$qeyIENVqqt=M4lHZ|0#LBcei$)ND`j)memB^Qo@tg+e7=s&HL zd8biIG{1P!jG6Na=@gA?oz=)ljG4O1CKhd~MMu%JE7mfO85U8YCz>QO%EpQ4YzRA2 z_mTP1_+(brSGgOSR2ky~)WGt{f>b0ZEol!3~ne@r@qR}E_p8W_ahgH5>=STU)MaTAdV{8i#n;MyDjM+JY3TdiW zh#KRR{KA4ci|0EREL+VW8AZrah<{9u_=UF%ytcI;TEmS2D|DO2G*=c0ura~3UhmKGQ0&ncRdKV#9H zg$v^M1B&Vz8XMP=$`H1sgQ;FJyRxa;S%8T3<)DHk1>^Dydf~mYTz8k zM^cLgGa1{e$9cv$y)s6ad|A0-(=4_hD0_-DS2J9vp(*$4BRyY-TQpSrs=S7$sixU* z2%i-BrimqGvt)*cmQxiXYe8p$m_c*mQ2*bIc&E0E40CF=VjNGFCQVoZY?A$=sDv3K zTE$BlB7g$9s9;4%e0K2?l%ijx4Piz9LR3`oj7VxXE2jGXQ)yFB7;#0GoKx>K_&iMA zx0)FMK5ICsVUY`277eFbv(LbrPD2au}LigT5WxH>IO!)?%{tII&5kCI_|XSY1=^8_TMrDYK@^?a>rd z)#zF^n!CZ{%@pakuC}IHt6Nd2EnYBp!NR2r3_j^@Sfjchvsb;(ka1L3{PJQ1h+4FZ ziM^7_)uqhA3*k%?XH8Z63&z}9R<*i8HZkTmG)o0Et}b6u=}~-Mc0G)F1#yAt#E{RL zS5_)n&a<*oHVMZfwWwT#s7z`3%r!6$O}uJ{ug2_RN(|#QhG}!#AM3AR$y5( z^(M&_f&T(GDF)|NA6^1S?l%=y}^!bLOkwc?4_P|XVq zW@sgIr%ah#xJ+Bh%Cu1Sj*$jDHQM}{le4h>zO=GQ#Pq339EfZesmWAiFi&F*Bb7C| z^fzH-jQEJ;pd<#Cgi(qcSjMv%UF*SE(I68c=xBmXa zBymizcPoV|s;#VJ`-h2^W|9pUM!DKrh)9FI8!%3hyNnQnJzyY1dcGQ40x`zc$f~hw z5Gga5u-vJvGiH~v{$&$^|DEj7)qAjDiUg7i-=3!eB}4*^b#keQ%g)MX#;cmfL}pz) ze1KAM8AcPdKkY>JQtCq*(E2E zagI<2bB?Wpsj$L$Qdh$=D_7QB02Rxvy$juX_;0W7>IjE(Nnpl*K(p1CJ zRW&|SQAxz31~XD%+|t)M%2<|(WIS{6oOuNXZ*E+@T5Z-lkzumcxe%L!uo}3sG_4%2 zSv5D@N-PGiruWI-VmV79W5S@kn#hnPO9~5=M6NAZQpyyzxKvgWT73&gu?TFFE*6KZ+z|Fzdz!?AK*D~Xj^*ZN)@<_-)ODHd;@=U@z%(FuewJ6>ApX@0%u%- zlP-NVN+ed6&dHcb-}VMv*an1!UJ78*X?_1xZhm=B(b^Fm58B` z?zZBk{?lUXrZ@{5GNC^Z2gN!68MAlpT{d|a<(9h^Uhj2?!ar`zUq_?EWsxuG4s)7jp>VQ8U6P<*H&N0pzy^J~>V;eQek+xb#$4 zvd=~u`?D|P9QM8*PMi_`JMYN^_KTK)p#$B;wO>O6dY9bhG+tD^Km*#oE0OnBE&7kS zC7d5V$47$>yIM;dx zWogk?RvOuIN4R|?loJ@|6OB62VkQ-WYxCH9K5_eOX6)OUb|=@>p#ZT zAva*LFY-q|t!I4RF|B7>yw`=~d7R+YT;NUecZ)i8w`JqUYi;eKPOUeP?DIbd^l)l0 zF*b&NJJlBYJ5hoIxdLe4#qE65R?Qm@c;~gPvIOUfig;n$veSY6>N2ddfHX6Fdh}~p zJ{m$yrN=_mnspml%;k2!7~rslkI18J(Xxie2`#n^14RfUN`m4b7p>pEGYus2oS#{L ziHmxIz!uhn+~)rfZ@7$vG`;?`coq=NLbLXn?(r3<+KKjxEdq&3<$_gtBAK~E$+)AMr{d1O#bK0yBmVN{{J6k-+AYq zIdkTA=FFLM&RF9FRv%}uMj)g(gTLcxT|^}4xG);V#v!fO{!jwOAq$eiW3i`NRWJ3b z+)E7;bDN#3o~H%ypabe?^iB$W8Qw)Ax!0)tgKtrQZtj^r!)uGb$BNHq~W0H#& zdumi}^CSJbqZfI9MW^pKQzHkP3(kMc5>@7Z-}qflUbsfoWjV+b?JPX=B>V%nFvbJb zXOdQi$G?M*Dl$D1E8}x(EqVSmd@`6KK97`#*I;f&TisK$x{g+3HF*GYqJ-LlIFGKm zTAD!Dtc>f4IaZ~W>CvGSox5*wPwF0u+-N7Nkd&nfdgW)e&A6u`%c|#7Gs)oG+^JU{ zs(s)4)h}xg*^q*9z4<^Z;0Z)r0Nrl&r+A<(*OfP9Ic(nn)rA>>_MXn*eA=mOW&r*9 z;7*w({lx!-SZsFeat5#Cqh-^;1ZOZun)LgxN@MNF&rq#9@>9=$+q}5sC8@Qu6;0y& zG}UVTlth8{bDTk;PGy${+LP=ndYzAoZA_rOw{r#jkHAUobnxry3`kDVM9yd2Sg)H@ zPG@kt38XrMI3^%pigQK1oi8KKVF{XKAjog(O@;ir;*}-rz?S#k;#;T?t877)U(l29 zCY;dP8TszltG`;^emZiG=ISno{|?r1Eb3f1?TPdC&p3A9YsyB6@f@vm(H3+5ZX*4Ngb@sPMLILLo!Ev87L65$3|)B)EAl42RkbKp+ss%=4|lF? z@vQ&2b7k1G{*z9xb~;es_CjvsJnN6~PAI{n*B|fHM$27?-xz1IuKS>K<$lllmd;NW zRc(VgNTL*TJv3me(%rIk| zGa=8~LIu6hOvWet#Wv$8o$1mD#j~SF`x(@Z%$;Ga9HbZ@9oY2k3(J zJl*+`uDR^Zwv}(_kmt=d5>%Y7ecM~3Pu6~@I}g;pTl3L{r>B8z3IjVPj&i% zHcxfRL4F4BZ`00A@6wV9KLP>eR`I;Q#{0x1%!wK`7A3qCICQU_y7J>|B89vaV#aVl zH(Cj`jl?-U-kO0Di)rlHvDgPT^wgnky76d2?KUp_lccHe$fEpC8-2 zmE~#irM>McG7P%9i6ORmLK+zpu6Srn5~?l4TAVE}kKC zV^(i%7$iD__;3%@< zi^Zm6I{Xx^!(f}iRQIRqlFQ+vb@(0XtLH|Rg4{~GLzon-&T-m2ell#9Vcjfj>lO@Z}!r`qAVwgNv6?kkA$&!(N=vWA4~{U&bxn%=l!80qnhzyj{;BWVEXBwbqVtFj8F3jmjwnk1j^d~B7&R4Nr?z(*ar zez09YJcY5unrs8T0d5Z!#>nIu@BHyL=VP-;`~KEWQiKWyoA@c%Z`05TuVxt#RRx(I zZ`F*U(OL}iVuxwy&(;?hC3$gvs=tMho!8gftC!!+UB&Fv!BVeUlBJEIIST^zR4WhH z9)g`aET5>sID=QV0ZqNeMPawCO94TNzv|S7GO>qswX#U-{M4PhmPlsD>W`o3Wru?DuT z_bK_G3ud8yVX;($AGjq-)?(zWCjC6-WMKwKo{370Mb+0G7K-%KQT*16M8vwjElL!q z&<+|}*pt0F{AYN{Dwr3;uAJ1JZ%Gq7H#O;SPb?vYP~Q=4jwT%=E2Id)#q5i5a_?a+ zDuggk@Ll<~4*f-AP^=xNb>rs=dW+{}cCx?i-}%;-F?fEoj^e_+_QP6|9h0UF-w6gf z^r3X6%_v3NT}H?vMkqG+H0cxw#ctggNvOrM-$%kP^y2$#+WGsvdig0??<$;LV|%ZS z@x67N6*|Us5HNYFd(mq?2v}2DBCZ*p*%JZYR(nl&ae zMAwU$QO2p{me!fkTZ>BpuQC0P4v$zLRUUKM{Vap8_-g*<`-=ExcT}xW{|KTo9Coz2ZS3sFXMw>9ex!dj2H1w zinnS`Mqtm+H7q8>D!dsxV3t-_w*e+w7-lILBRonF#v>`!OF_&P9ct0xhXJMgD7+LJ zAk4!DZ6Ij?iETl;@%=wxV9-%!BC%zY{=|k?fXV*C3~X!vS7rqqq5C@#W7U>7Tx zR2QZN+CMC#rJlq60P9$kEvHGgL2;_~oFHGlII=^uMyh9fk!qHn1o8=V-wCP2km=s4 znOW(&K8!R$mh53GcgiEn9%H7V;&eCO@dDig=D&fsUr!__1Qv53t!#96;48+-0gi0JDK ze$1nfbH$T!B%19|R*a5@J>q?ZS`x%2Zyc@f2*{)_=i=!o5hgGz}-;^n|DL;+0tqzs-~5oZg9l>;zsOYYdo+tqQ(mw^|GEout!_$4P)NT?^Byu~rwo+d?BQ7dov@>XOm zYn90oJXn53pxs&aAdP)+q>zLkwbX$sLW6nsv`O;KDC@zbi6p`{^n-0EEwEu&SG7U| zN(aChX9|c>XFwF=Bs9{W4*~g*e&$0aAI#B^HTN`7-icGz&d&|!5_Z5@LX~{yX0P~I&>|3nw%gJ>8N>Fg zk>Bwu^1Bct3+dh4sthkrNxnJGN54-DQo9c%KQcSX))|o040>B;_Yx_ba-IR@*gzOr z-9}RylDaj~07;S4@hft=8n|H&-eh#ui?|Nnnw6kHu-j1pHv9@|h~yF1&C}s^9Ct+K zAeKN}SLj7nC!)Gkk<<;Ez_w%UKtt~1JT*wQ z5bE^9my171;N)8yz~dO}S>$b*8EoC*o^VBWK!^S$j%7v!+FMxsLvJttRCW5Zm$&zB z@%3EZ-bW&xn|1|W&xr6ks>KHj7S3z+572V%pgNfkp#u@t_)}E(#Zi|^)7_9E#>D;J?kYe&CrkQ5e8jh2aom(y5w}b!|E-qeI-l zmEM&N=jg5CK{+ZTU@Q5Gz+;)4)#DiKc5z;@KM4t6=;-mt$l4tuJ0Y9#ODFs|qun8r z7TxxRj{2xe(&0uJ?#N4KY}=cF`a!^Cg2)!TzQ}}cGvP5NTxh~m2wT^8%DkiaMQrd^ z-O6^&&U#6=tV0Pui%0%e8n>0li7#NeNqt>55e+)*khHj{Y@vG5sN>Sp^;eqGK9(?& zISAjgy(KR!%&LND!dLlNb@EKc7fi-Ul2ImoT}M~DPPeDO4t;=VraFCXn`g}$5rYgD z{y{{2VDdfWUb0}|G){-hU_3;Mv%XE|d)DzAeharSUi^W@cXdk5)rHX6ZzS2eHg67} ze2l9wBAV35Ad@w8DyPwZ%&Ih?qG=Yx{e&q7W-eORX3(yMt^mNZ4v|dgq?8!BSwH}+ zpEh21!GJ*xd9ptvFOHR3I?&$q=&Nah96wLJ=?+@13PpQyl?JG zW@JkfJZq<@oNW&d*5MifE^W?O4F4{}?k;4;w_BHghNgi1)kvaZ!_ul^8`EmgKeKBx zf^p#^ZA4k;&cDHbl}vh={8|P+{>7Bu+R&yHoBMZVb59z4UiJo4_SjYFjmW>$^RkwS z%-RZAQk#^pGm*Wie}vVH(_OwBpwKy3It$4M382~ zY&mJ~slzLA`QoiEIA0DWzpu)MbD_n|vQ*k>vK*1_kqxl5f(@8&Hpi$dUQ)tHWLwXx zymNgIm-Wp{^%dEBrM$krdEEGs_dQu_@}6|ActVn%A7J?aMC3{x{#>|#t}f~iyH=19 zSt#vN;G(@hmD>}%&L0vv$L1&QMG(RroF$HICf zxm9xD$X5tFSwb=*$=<+{j3flp-~#gqO^XT>V&@-_20>vlU4w|QUbIX^=5bw)t{1Hn z6V79WjCZkMu>K6oHr!755L*ooBG@E;Zc7zGYvoP{GS;Ij_vEPh;i~pf?S9kNXSOM^ zbDEm;x;E~&34R{WC^=u&)bq;N8Lpbr3FBUt7U{v->F>jYsZRM7eePV*43WmyA}4fZ zj@m*wmZLzGMH0p~-gg6xR2eYWbKMT3|Gy5am@k~N4dF4>85|RDO^p{?P@W-E7epHTx3J2smSdWL@ zDWre$9Az+M!==BXoy?(+Cp4J3*uY+8vOGfRQ+Pb*VvGj~=z3uuJ?o1(z0z$v%6UPO z=2^GFrUvWVgjjgi{gMU8rr--iN>M*w$_URhVLN_?2^X38>rEKxB5AHP;mb{UlnF01 z;R_@z)WBJFUmU|*7>KUcTVJfKnIdJ}REVe*PQ9P?kwb^C=bT#xlk(rmV*p;mM#T|u z5%8GQGoXn1fTx~of(n_pkdjH91vppquoI*St?3qhob}1Msi3b8SJQ5c7JF`Xo8lJByzl)OZ<)iDDhGDwI}K(rfHtf2S4 z#*-M?g&s$WV~26py)1fvJZthZ#DcgMUcs;AQapv8%dD?6X#DfiyNc*jJ!dl4dLf#Mq8H9O@4s*0~c?)e)dTy(?69RD4b~- zu|SNV(Wq>_5DFIRl8VF93j3M-lz6MIf0S0K>?rp4hsGJH4U}$+C`BN`X3&_u$XVQ; zY{W!s<_kwz1W60j9!_84`U(GF3T=^gK_ zxxp@!vqjF!Lc6rBfB}hSQ^>wm8#NRCIiv-O6TM+aK*OPk*31WvvdJ7g; z@Yk(YE~lqBUj==mPxmdnjcSMfOy}50oyD zHB2Ch_-zu&BL_8VH9yifMPMRDtA@Sm0`T6=){izO-y^sGeJ(iRt`f>&j?Ti4X>g`h zW7x?VdhV-iCsyFC)7`13+Nefe@HSs3=ju0SIV=rf`41bHhNboF-ug_I8>_F7GjyV) zc3$*s{%Jo)F=Ck|*Sk>P|FB3eYBb%8{oMMwS-k&!ku)h;?Q%bl+)KmOZJ=v>-xZ8! zB*@y&c5KW@Z%vhG-XIUiWN!4%-MbiyE2=k>qe&i?bkh@7zFsRtR8HbIislVrIjMPH zm^pw1MCnGhu!dg|rVJ*sZlHi#9@|x#NM>DA`)L^`^`glt$FiS1nH+cINjh|-(=qtu zGyJAM|BN%UQ7^|KW9JYNY&nND>Z2##bgCp}y!+R_Q`=a3p!TC$tMlU*Gl6p^LLVLd zCzpCL`|l!$D}jl83}8p||D;-_IQ5&+uL&5yy@R4`=f~_+3ib5b!zm>{`IEPEQ5L72 zi!y1*wu$z2ENF(|5n_ z+D*G{>A(@D^{0-reACw$$MxX@zZVyR#$P>^XP-}cdlM_1*-M9D^sFmgdL~`>i3Uq5 zI!#Z9E1m_5IH%`eZHne{6J39Lq7!si%}l;nzepdj7?uiS1#!;cM9Q4vrVUA?lkWh{ zB6CbMSN}}kwp-6+Q~pm&kOBZZG3#O-zD&3a0r(H$Jgp1=9>JCSYuQu(+2Ak2@@t0* z#d+`B04ld9{A~Br&bpM!gsfEOGwr7fr%j(RYxW%7Q&UG^aD~a&?@*~BI&t0|w-?=d z%UtI(Cdc4^l6u`+f0z2-WA}5|hkt{Pa+Py{~STKQ5_JY3&;>;Kyn(j`^9Kz&xHE}15yw!F{i zgB0+RT0}j!)URL)Z27u-)Jlo^_1ClRzgHYmVm~TQD`R%*qHgB%i$^Bo9xrCsmzkM) zCvNkwFwDFw`ovSDc^982#NUktDJGMd_e7tI?WdRqF1|OKB>KE-k^R0n`kWula<9At zA`>TnJbNo{rq2`?ESYNj%<-U*nW<(J%$RHf-HZzLvHXs6P7eeUE#UXbB{-R=6i}g!!i%Kce~$lPw?b>?(;10ah(OVmg;N@c6jYK$7I#;HryWmsP1s9bf0x>Dt-tJKx%8kMics|l(=O;p#a>(upX zlA5fhs2kLc>LzuwnyL!bG&Nn#P&3smHCxS5bJZ>CR#l{KQ@5)-)I7y~=;|&tU*UUz zyN$i7MBS_IQw!8W^<8zp!sDWPKs~4yE1&YKQdOqP)kErGwS-$A9#Iu4?t&faw6fI4 z>J!zX{-QorM^%KoQ9f74)iJeQy{cYQM^v-=t2&{+R9~x8T)+L6dQYuW>(vJJ>&zz| zAF0pOSE^lop$@3us4eOhm3qPN)XVB6wO0LB{ZT#Pe$xE|cbq%ReW&{__iXnp_k8y> z_Z;`_?%Ui&?o@Z0dz|}XcZOTJ^W1m1=ecin&vf7G*6w0=p?jg*>n?HM?Y_r-i+iqn zx_gFuf%`tU%bo15atGZj-K*UJ_p|XIsvpER#IKKUihn_EkN;KtPvf77e?ETju;%y| z;zta-bJ(-$o?&+n%e-Ld1#N25u#IZKu+3`Vuw|LgsWt93YAT!PIHj(fI?X)urcO7{ ztMGy&@mCj(zO*7iscVWxUoOx5qR~0>9A7j#SDq7!#$?O0plHl!c}^@EGgh8+ipGqS z=iH((6Q~Ojk#>}rDHFTS=g}1n!iB~`LES6I&LUvtMW1N`SBF|(Ab0vKtnw|u16M{acaq> zJ>5NdF1;-Aj>N%<>XFNnJhFSM$m#VR@d&;wxA$<__y)4i86iHwmtT@RFL_9^di1J3 z7s;-nGASh~Wm!sVN-x|Ls~@&*cp!CJYTs0qTGn??-~N47-+Ruz_S_!ls&gMaZ~A%X zo~O?9rOixBOH*kN^}D6tfPSiM>!3aveKLAyv?3O?|Lz<-elQ%<;Kf5`3^{Lz8iFI6%!Evp zsfS)SwC7MY)I03@VTr@ku#yWVU66Evy5PR7DOtUV}vA6YOm zexw>%I%@W)^igWmUD*?|hQQ)sI_6NMimnbM60P?~sU@Oz;v2#Vn@zy^xF9O!oUA8grQP z3m_eHnfMD;J_KPtlYKm7;clk<1c<{uO#A{!gl76rgiv@P0^k0-{_^V~2TD!KnWRMD zVRG(d6;$eyDVHEDYJ~)iy8*JH)Qy+ksDw$r>9U(3BI=@>FS=Q+ZiO_Bo(f4(s&Gu9 zdV=S)vC|+hN=?t6uAbyMW8@668~gU(ZL^ooHgPMsDk-FD)MKhjRjZY;@qFgFdZezr zI_WnEdj9yg?#t}mvdrfHwM&{`c`Q>@En+7ndhJVX@CMw3;H|zE^$*cmL-lSuku@T* zsd+@UmSTwJ{2iz9jYs1Um}$pO-S@D`#?Bh8hz!}GT+2xXo5N5-mUqXs%nJ4|d+JOg zj<}C-s9%R@67@EYr=>uE!&N5h@D=aDI<08H%!I8Og-UsqE%DDK=n-sRHf{6jD-*IR z;;IhwLZKrvvQYo+1q`{L48Xea2ygKy2@1M!mnUNySgjHuiBng8iu?3;R=#W0)KFE1 z$A_bLTq}aEgI>ohl!q$000IOmsSOBnT||7v10+N%uJL4?aJ}igUHdKEE8c}8#srCP ztI~`fi~uvW`6YS}G=;9rLZE|oNmQQD_%X;jxEeAXC-NS|M!ZtAS93c;267Hlw({w& zwgOk#f^=)KBub?W|Ac6T+imS=-fly;1O}}!xTK_oyT$1I7JbzrP63=hX)yT8PS9*ZdJZ?-lz^ zC0u7(k+g+#Fv#dt)4V+ znODSG`$SZ=qCeU=FAc<-J~j^sjrtvVVB@1E z)VBl>yKH$p>lX>KU z$dFh$u`(!c9@t3zO&@eu0q7Fj{-eF(@c-MrVkUdVEXc)KTSTZ?O>rha|G8vkwbk}T z5=^thCxfa>rN=%r^7q#-nz4qBh{zfd!uP_!r;v>?iO>4eC3hWTS9zi}I$>fec_@C$ zc_k-cH5H;+U2`4l3K!JKuPkba(;@VtxQ99ngeIovSt&Lrx~8}MOi#diO%GtqI{rtg z#WTFM@e(~76BSX@6j5OUp0+t^4Yp@=b(-z`9-(TH>%j+ge;FVt$m|v-3VIV?O26H?o=MWlPRGX+>&!ZO+Eg?zjC@ZWaP zD001!x9SEc;2CUa@RD_{wCDS$b;;&83A}l_d&AO_EcT%{==y}Lk=|;^uQTY6!dxXZMTh1MwTUlXNP0ZP^uLD9lnlik8Z$Ar{Sa!b| zNtI>$paCN4@exc`I>n%S7|HH;kY%>9@5XqjInDrh#X(bZs%%?%FItvmth|?yYQ8f# zj|cZ*{{iI@F{fead=2~R7l_5aJLFh4&RBQ<5c<4o2`gC5IocR_>+pQiX=CE8!*e8T zjJy%&a{ZmycwZ(q-czkx$w?+TgG6P&5<72ZQ4@DRz4nk(8&hu`c1iZOcgP!&W&+bw zn0$9n9ln-fY7G%s7t!lmxqXnPhCPv#zIy~YrYPcd;QESqoqJMF3e0)Bj7?vHo)9^q zN4%ji;2va8X42DF;s4%A;WzNY{EoCpuCRyhk5wnE!~J=+R>>$`!gM|wJu1VP45;G; z>Q0$Y0Opj~fShDNa!MH56?vI#M(V$nBe_xXA+#HPF1_kz=_+n4U+kaEo7mUXfS7F` zj)_r%BrU+iD1;jC-iX_jP8y($mVOF-9qAkEvO_y$4%du>wqhV|#-O$In{SQVP$T7u z{StOKTN`wEJ()oNsAzo|OG8LSZaX9Ttw`61?qVrmCB84Lgi~0FbcZOb|IT5(i83tQ z%d4hV&8)=19WqWT=)iXLp>_t2Lr5~bRl>qDH0xUYy*Kt}t{&f*5b5u&PR?qudO%ay z9qTvfuP=|w$qmX=!t}CC4FSw?a?b8?jQM%KgnC*t?J}pCGIvOsGZ?!0G)XONubgZ_ zf%2C|84n>u%q47PyD4tbK+ONGl829TdK}~E)K=a)NAQ(Wtp<)xqcC1JDqqkDeGzCy zHMss3)!=eI_9S!W8wACXKbXd-mu3x_#@N!OAn>mcd!oq7Cdu??AGeu8XfAuXFOA}s#ITpEIt1%6TbFnb3jrA~vl#}S*gi)NZ)`a77NIx2 z)hK$Qfl-!%ippILTs1ZB>1d}ANHAkd!dzarX`hn&xOylQvkI|B9GcLeH{ z^j7R^=SZ&@SlYdAr`>0CW?GH3IF*!J9F^=@SN63w1c?CEs94Qw)p5HXENTOU&h z`{_S3`V-8`#?jUfRfANA>sTw>D@t!Rjllif$9sx33Kk84-GSxp9f@U_cCy#pX?8Y| zfsIG8(cINSBW=^+4R6a>ke%o?$pJJF%hGQI>PX-+Dw!0`1Gtyk}vnbOtYE$(@H{Zx3rL37#l(1-Nau@+0zm-x>T4 zAFHs1i?_BC(dY~=k1rb#XlJAGzddL_;b!Xpc0{>f%a|A;DZe9urv5nf>qOl z?#kfS^Z}5|RFup{<;DARMU^04L9x4;eueXm$Mw9qmm)((b?bs z45>Q9j#ytDggbk>j*X(jcaB)`JA-?b^&(<}f(**eE*mPU49`I4*hkEx^%)ATI5W|8 z$$5p}7Y*T!1$D|DF6>R9bHUF%Jm{FR~oZY=@ z2tAw#dUg!TFA*zYWQE-`^YoW(YyytJ6NhA-W_uwk{y5gTy%_r<{z(YD{sT75d|G78 zJ0~Se+a~=+Pll<7p1g(`^74-ql0mk@*wQWED{6cCm6#%5IS2XV&06^urJpb*|Epq` z@0E;Rea=}W4;L7dE~bRhC(u@aHE#2GosPmJ`;5Mu_Fwg1GgW;m+JE&fR^GNohw=|P zVCkbH4M@ z$1$962A@zOqo`LA4-3vC9lQL4y8{B;nhRlT%IC{y?P1+!!~za@3=}ZvnVk@eo{>JW z7j&HZ#+TkAY2zYym^U91B512MtcwQ`1Zzbkhw7il;6y1^=@%NgMS^w8M8zPAB}^|c zgUp~jC7=?}#^>Rnj#<_;xG7{Ij3j8gI6&Y9bG~Rx)LceMXe?f+bgx~0L|6~8?zb!x z{(5JC59=;8JWMEkn6iHIb(AV4=4JYBvfdQID$RZsZR#jZXI8jWp1wrhWD%k8Gz?LA zPes$z^nr^sLIlt*ksjfh#xoVgCF#NK8!+u%l2$nWrWt+=s2TmKI`_*8CPL*Bm*{*_ zC1w#;29b)DuS){<5~7B>;6$2U-rTZ*f&3!il{j?~pDvQ*hEzQTdZ}{{_!5~R=$Pa) zIAvGKB$lEi;F4T6Cyj}`Of(S-)rSN z;~!A4~g+5R>v$}O^)_sMyGvMn;0G)q0T9*AVO8kS0h2z6PQb@+Vr)N*HObQ6V?CK zNCGUji}Q`{IB#15c7whK6DRWV*4(|$;LD1)3HIw3XaSp7Br<&E^%pEb+mfI^lfc=( zBSzHoIlq%4R*6pVXogbqP`!?Z%v^T0J0-Oi>@J1Z7;baX7u z;TSS!sd?rs&5?+usdmItrCfP=F7aacX%p!?p)V6A=seZg^wi5QKh@OfOmsf7XV0GU zJgs$}tHO27*lV)07qzx5o4;)SeD9Hlr*6&r^wYdsp9-{`>^RvHP;n_&cU+wk2h<9e zt0K=uHmx~sTlVg|O9l-Zq^_RN&51dC$_3ksiVBmCWSu6xi{noIcn7WIj$|GxySSrR z=BsLGXpqZ;vvjA<;zWT-d>X3sv^ghVtZ-0BYXj z%GS*)XJJn1dwWV%adCr5=gKZFF3xr-{<#R#^m(0mnorr;rvYgHWy=R7oUuPX^h_po zLqIKU-uuCcBTH5GBCd7GKCR04BU6`&WO>giZa7J^s?&P_ z0Gx7O5R08a1OqfTqRRO{1p zC+$Xmo?J*jEIg???kXuSxvRr|7Pp%3d-c_dJ|^29MeFfbt_CNACiooD3(FVkBdV3= zxl4Db=Hne5Z#6fo<|8LQ*vm6#VRLiy!W>gxG4LpU&wCh;Ncobld{4`w45{byHe5dQ zcUsB=e6}L@TOG%N2M}OMJSdc_j^>rFF_c$Mxy8lhN-Ce+GftJu0CANwo=JS>uQS`U zjYO0uFQs2wii@c~^9~FeC_f{aXyWDlH0_kLu$U^f@?I(}ezK)_VW|e+Y_-VLKUvug zz=;YCaKyw4UP|qe2H<&8YGB|=JK>v~8Vf)J4-3opO0|J+2A)dIUYeafPWn%>2_8JC zKLhfujt&{CG=QlR@!&&0|1|sV(<&o7yCpk2L*|9~Coe>)QmLB!NkcSusKDuGox!Ac zbV=V&SQNIrqo=b7BL^vYz8e|2*`_`dvmjjDc0B7v)|mgxoT z3#l8i%_imeoygr)(I1AzTm7^{s3FAuDMJ;Jf+7kSyzil#)#gJ1Vwd!XkA78Z)E@ewy~7N)8RM-aQmO z8bD9gI2OHBcTDZkXq01Ra^q@L<7;#`h~b@7+;T|vsEGe)QHyHLzHHQ(v7>TxArk)w*8wHs literal 0 HcmV?d00001 diff --git a/pc-bios/bios-microvm.bin b/pc-bios/bios-microvm.bin new file mode 100644 index 0000000000000000000000000000000000000000..352c82692e11155c3e2c70d226c789a7c2b055f4 From patchwork Tue Jul 7 12:53:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648513 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 76BEC13B4 for ; Tue, 7 Jul 2020 12:57:48 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4C75320708 for ; Tue, 7 Jul 2020 12:57: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="aJ30U1d8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4C75320708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:36890 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnAQ-0004hL-Bv for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 08:57:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38034) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn79-0007U3-4g for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:23 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:55837 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 1jsn76-0004ll-Dv for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126459; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=iZ8q6BNQD71G/ReGAtp/ZouIvCh6XyxiS1/Hett2Vw4=; b=aJ30U1d8yFmcFVe6DraJYaS1x0tZVxXu1RO6+o6GpmHI1FqAqymB9PYm/QEyytiXxjubIb t48VCneZeRklPGihcV+3xCkHzLKRd9PzTeA+kT1ahLQnyuwhdlYLDzK7FULaC7DIVupe4X n0kmUu8E3FkWm87QoiMsEi8GCV7EQtw= 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-62-KeaHNizrNy-Vz10QP_abLw-1; Tue, 07 Jul 2020 08:54:18 -0400 X-MC-Unique: KeaHNizrNy-Vz10QP_abLw-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 0ABC180578F; Tue, 7 Jul 2020 12:54:16 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE66027DE65; Tue, 7 Jul 2020 12:53:57 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 1476C31F2C; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 04/20] acpi: ged: add control regs Date: Tue, 7 Jul 2020 14:53:40 +0200 Message-Id: <20200707125356.32450-5-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:31:00 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Add control regs (sleep, reset) for hw-reduced acpi. Signed-off-by: Gerd Hoffmann --- include/hw/acpi/generic_event_device.h | 7 ++++ hw/acpi/generic_event_device.c | 44 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 90a9180db572..474c92198080 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -72,6 +72,12 @@ #define ACPI_GED_EVT_SEL_OFFSET 0x0 #define ACPI_GED_EVT_SEL_LEN 0x4 +#define ACPI_GED_REG_SLEEP_CTL 0x00 +#define ACPI_GED_REG_SLEEP_STS 0x01 +#define ACPI_GED_REG_RESET 0x02 +#define ACPI_GED_RESET_VALUE 0x42 +#define ACPI_GED_REG_COUNT 0x03 + #define GED_DEVICE "GED" #define AML_GED_EVT_REG "EREG" #define AML_GED_EVT_SEL "ESEL" @@ -87,6 +93,7 @@ typedef struct GEDState { MemoryRegion evt; + MemoryRegion regs; uint32_t sel; } GEDState; diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index b8abdefa1c77..491df80a5cc7 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -20,6 +20,7 @@ #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/error-report.h" +#include "sysemu/runstate.h" static const uint32_t ged_supported_events[] = { ACPI_GED_MEM_HOTPLUG_EVT, @@ -176,6 +177,45 @@ static const MemoryRegionOps ged_evt_ops = { }, }; +static uint64_t ged_regs_read(void *opaque, hwaddr addr, unsigned size) +{ + return 0; +} + +static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data, + unsigned int size) +{ + bool slp_en; + int slp_typ; + + switch (addr) { + case ACPI_GED_REG_SLEEP_CTL: + slp_typ = (data >> 2) & 0x07; + slp_en = (data >> 5) & 0x01; + if (slp_en && slp_typ == 5) { + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + case ACPI_GED_REG_SLEEP_STS: + return; + case ACPI_GED_REG_RESET: + if (data == ACPI_GED_RESET_VALUE) { + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + } +} + +static const MemoryRegionOps ged_regs_ops = { + .read = ged_regs_read, + .write = ged_regs_write, + .endianness = DEVICE_LITTLE_ENDIAN, + .valid = { + .min_access_size = 1, + .max_access_size = 1, + }, +}; + static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -332,6 +372,10 @@ static void acpi_ged_initfn(Object *obj) sysbus_init_mmio(sbd, &s->container_memhp); acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev), &s->memhp_state, 0); + + memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, + TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); + sysbus_init_mmio(sbd, &ged_st->regs); } static void acpi_ged_class_init(ObjectClass *class, void *data) From patchwork Tue Jul 7 12:53:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648511 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 15AB713B4 for ; Tue, 7 Jul 2020 12:55:41 +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 E08DB20708 for ; Tue, 7 Jul 2020 12:55:40 +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="K5otB79v" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E08DB20708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:56588 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsn8O-00019b-36 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 08:55:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37986) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn77-0007PX-Dj for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:21 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:28502 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn75-0004lO-Ot for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126458; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=kAntFizmHpnUAmvFukwiiK0EChGO5UzOb+cqjc0mD1M=; b=K5otB79v072IOFdYvQlFFrUKvuNsarimheGmx5jaS4qE0oaqJp1B5SdM54ol8Z/vKRdgv6 2nMQmXFHtPbgOfGxWE9ZG3I2ZGeiVKeHzgX1t+XrI9bapZY5yYhpR4HFRLPgom2SoX8Our sjlajUAAlJALYL6MmRee6ybj3fT8Eu4= 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-259-DgoZGM9GMayY7QgwdrIYtA-1; Tue, 07 Jul 2020 08:54:17 -0400 X-MC-Unique: DgoZGM9GMayY7QgwdrIYtA-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 E550C805783; Tue, 7 Jul 2020 12:54:15 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 876A77847A; Tue, 7 Jul 2020 12:54:11 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 2092231F50; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 05/20] acpi: ged: add x86 device variant. Date: Tue, 7 Jul 2020 14:53:41 +0200 Message-Id: <20200707125356.32450-6-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:46:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Set AcpiDeviceIfClass->madt_cpu, otherwise identical to TYPE_ACPI_GED. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- include/hw/acpi/generic_event_device.h | 4 +++ hw/i386/generic_event_device_x86.c | 36 ++++++++++++++++++++++++++ hw/i386/Makefile.objs | 1 + 3 files changed, 41 insertions(+) create mode 100644 hw/i386/generic_event_device_x86.c diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 474c92198080..9687cb524258 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -69,6 +69,10 @@ #define ACPI_GED(obj) \ OBJECT_CHECK(AcpiGedState, (obj), TYPE_ACPI_GED) +#define TYPE_ACPI_GED_X86 "acpi-ged-x86" +#define ACPI_GED_X86(obj) \ + OBJECT_CHECK(AcpiGedX86State, (obj), TYPE_ACPI_GED_X86) + #define ACPI_GED_EVT_SEL_OFFSET 0x0 #define ACPI_GED_EVT_SEL_LEN 0x4 diff --git a/hw/i386/generic_event_device_x86.c b/hw/i386/generic_event_device_x86.c new file mode 100644 index 000000000000..e26fb02a2ef6 --- /dev/null +++ b/hw/i386/generic_event_device_x86.c @@ -0,0 +1,36 @@ +/* + * x86 variant of the generic event device for hw reduced acpi + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + */ + +#include "qemu/osdep.h" +#include "hw/acpi/generic_event_device.h" +#include "hw/i386/pc.h" + +static void acpi_ged_x86_class_init(ObjectClass *class, void *data) +{ + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_CLASS(class); + + adevc->madt_cpu = pc_madt_cpu_entry; +} + +static const TypeInfo acpi_ged_x86_info = { + .name = TYPE_ACPI_GED_X86, + .parent = TYPE_ACPI_GED, + .class_init = acpi_ged_x86_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { TYPE_ACPI_DEVICE_IF }, + { } + } +}; + +static void acpi_ged_x86_register_types(void) +{ + type_register_static(&acpi_ged_x86_info); +} + +type_init(acpi_ged_x86_register_types) diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs index 6abc74551a72..622739305882 100644 --- a/hw/i386/Makefile.objs +++ b/hw/i386/Makefile.objs @@ -17,4 +17,5 @@ obj-$(CONFIG_PC) += port92.o obj-y += kvmvapic.o obj-$(CONFIG_ACPI) += acpi-common.o +obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o obj-$(CONFIG_PC) += acpi-build.o From patchwork Tue Jul 7 12:53:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648509 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E8C8A13B4 for ; Tue, 7 Jul 2020 12:55:36 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BED7B20708 for ; Tue, 7 Jul 2020 12:55:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="XXCAzuOJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BED7B20708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:56292 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsn8K-00012X-1j for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 08:55:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38030) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn78-0007TW-V1 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:23 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:23751 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn75-0004lS-Ny for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126459; 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=4iEDlk58UvGIUxWdsvKW8EpyA9NRxYwdCDXExPPm1Ao=; b=XXCAzuOJILZEf0Wowjw0MpM13kInOqpKSg0x/gD5TbD0HrW16aMUusQir3TdLl3ocjaCSM Gmn1g44dSa23ApHfsGDIcL6eVe/Z4ypgA2wtyQeiz4Q6VeVQe30L70tBrvHC7/KaJiz+xU p28E+1GMkKUB30SjvPmBCqmEkI9V90c= 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-426-_kkpZ_v4Pm2Sq6loU19tnQ-1; Tue, 07 Jul 2020 08:54:17 -0400 X-MC-Unique: _kkpZ_v4Pm2Sq6loU19tnQ-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 0112E100CCC2; Tue, 7 Jul 2020 12:54:16 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 908477847B; Tue, 7 Jul 2020 12:54:11 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 2CA6931F51; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 06/20] acpi: move acpi_dsdt_add_power_button() to ged Date: Tue, 7 Jul 2020 14:53:42 +0200 Message-Id: <20200707125356.32450-7-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-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=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 06:04:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Allow reuse for microvm. Signed-off-by: Gerd Hoffmann Reviewed-by: Philippe Mathieu-Daud̩ Reviewed-by: Igor Mammedov --- include/hw/acpi/generic_event_device.h | 1 + hw/acpi/generic_event_device.c | 8 ++++++++ hw/arm/virt-acpi-build.c | 8 -------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 9687cb524258..ebed1ffe4231 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -113,5 +113,6 @@ typedef struct AcpiGedState { void build_ged_aml(Aml *table, const char* name, HotplugHandler *hotplug_dev, uint32_t ged_irq, AmlRegionSpace rs, hwaddr ged_base); +void acpi_dsdt_add_power_button(Aml *scope); #endif diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index 491df80a5cc7..6df400e1ee16 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -142,6 +142,14 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev, aml_append(table, dev); } +void acpi_dsdt_add_power_button(Aml *scope) +{ + Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE); + aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C"))); + aml_append(dev, aml_name_decl("_UID", aml_int(0))); + aml_append(scope, dev); +} + /* Memory read by the GED _EVT AML dynamic method */ static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size) { diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 91f0df7b13a3..775b2acd28c9 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -357,14 +357,6 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap, aml_append(scope, dev); } -static void acpi_dsdt_add_power_button(Aml *scope) -{ - Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE); - aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C"))); - aml_append(dev, aml_name_decl("_UID", aml_int(0))); - aml_append(scope, dev); -} - static void acpi_dsdt_add_tpm(Aml *scope, VirtMachineState *vms) { PlatformBusDevice *pbus = PLATFORM_BUS_DEVICE(vms->platform_bus_dev); From patchwork Tue Jul 7 12:53:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648563 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6200D92A for ; Tue, 7 Jul 2020 13:07:31 +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 3926A20771 for ; Tue, 7 Jul 2020 13:07:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Zp6QHboo" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3926A20771 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:36666 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnJq-0001rz-IX for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:07:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38198) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7V-0007vB-S6 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:45 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:49519 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 1jsn7T-0004pH-DN for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126482; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=3qmo/QC1Uo41VjKsHy5G+USrNARFiKstgjsHC8RmoEs=; b=Zp6QHbook+GDE+QYisOZhrj2AR4RtPF+jlB4MDPlWYZmJy5vfMWGzvcdpbu+B0Qx5he7s+ ap72qMw/7stbThJzubHPvLJcn90b/fpmDB2vqYLWew28jprqSVlFkITwrbEitz5KEnCrFS wiTBVhDEkq9rinqlJyz9M3bSpiSoo8A= 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-154-YymIm8aEMmOaUC2V4APPfg-1; Tue, 07 Jul 2020 08:54:41 -0400 X-MC-Unique: YymIm8aEMmOaUC2V4APPfg-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 4C3B78DFFF1; Tue, 7 Jul 2020 12:54:27 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8B80361100; Tue, 7 Jul 2020 12:54:11 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 376A631F52; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 07/20] microvm: make virtio irq base runtime configurable Date: Tue, 7 Jul 2020 14:53:43 +0200 Message-Id: <20200707125356.32450-8-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:31:00 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- include/hw/i386/microvm.h | 2 +- hw/i386/microvm.c | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index fd34b78e0d2a..03e735723726 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -27,7 +27,6 @@ /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xfeb00000 -#define VIRTIO_IRQ_BASE 5 #define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 @@ -57,6 +56,7 @@ typedef struct { bool auto_kernel_cmdline; /* Machine state */ + uint32_t virtio_irq_base; bool kernel_cmdline_fixed; } MicrovmMachineState; diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 1300c396947b..ab6ee6c67b1a 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -121,10 +121,11 @@ static void microvm_devices_init(MicrovmMachineState *mms) kvmclock_create(); + mms->virtio_irq_base = 5; for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { sysbus_create_simple("virtio-mmio", VIRTIO_MMIO_BASE + i * 512, - x86ms->gsi[VIRTIO_IRQ_BASE + i]); + x86ms->gsi[mms->virtio_irq_base + i]); } /* Optional and legacy devices */ @@ -227,7 +228,7 @@ static void microvm_memory_init(MicrovmMachineState *mms) x86ms->ioapic_as = &address_space_memory; } -static gchar *microvm_get_mmio_cmdline(gchar *name) +static gchar *microvm_get_mmio_cmdline(gchar *name, uint32_t virtio_irq_base) { gchar *cmdline; gchar *separator; @@ -247,7 +248,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name) ret = g_snprintf(cmdline, VIRTIO_CMDLINE_MAXLEN, " virtio_mmio.device=512@0x%lx:%ld", VIRTIO_MMIO_BASE + index * 512, - VIRTIO_IRQ_BASE + index); + virtio_irq_base + index); if (ret < 0 || ret >= VIRTIO_CMDLINE_MAXLEN) { g_free(cmdline); return NULL; @@ -259,6 +260,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name) static void microvm_fix_kernel_cmdline(MachineState *machine) { X86MachineState *x86ms = X86_MACHINE(machine); + MicrovmMachineState *mms = MICROVM_MACHINE(machine); BusState *bus; BusChild *kid; char *cmdline; @@ -282,7 +284,8 @@ static void microvm_fix_kernel_cmdline(MachineState *machine) BusState *mmio_bus = &mmio_virtio_bus->parent_obj; if (!QTAILQ_EMPTY(&mmio_bus->children)) { - gchar *mmio_cmdline = microvm_get_mmio_cmdline(mmio_bus->name); + gchar *mmio_cmdline = microvm_get_mmio_cmdline + (mmio_bus->name, mms->virtio_irq_base); if (mmio_cmdline) { char *newcmd = g_strjoin(NULL, cmdline, mmio_cmdline, NULL); g_free(mmio_cmdline); From patchwork Tue Jul 7 12:53:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648551 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4680D92A for ; Tue, 7 Jul 2020 13:02:31 +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 0449120708 for ; Tue, 7 Jul 2020 13:02:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="O0MKOEXw" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0449120708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:51940 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnF0-0004IX-4o for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:02:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7G-0007iM-Kw for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:31 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:50014 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7A-0004mj-Tm for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126464; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=QiHNwhae1faILH3fFWJWVvTFS2lyaaCkfihiCYGwdXc=; b=O0MKOEXw/jk57vlhl1AMK+ZyZGs6PjlkJejdTwWF8QK9sTLNtTYIfLL6gViuXKn0Mf3PxD OXv5TG2ver0xLwk7YNkVrsUw4BuLuhtCMoX3e0CoquwQiMdxefmQHdDjv/ScIxQw1Zwl2c A0qJSd4L7ZdfRd4Ya0fwqZOEMGmJDVU= 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-421-MMtPCg2nMoe1u5GEJ5emzA-1; Tue, 07 Jul 2020 08:54:21 -0400 X-MC-Unique: MMtPCg2nMoe1u5GEJ5emzA-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 DD6AD835B74; Tue, 7 Jul 2020 12:54:19 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 80E3C27DE61; Tue, 7 Jul 2020 12:54:11 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 490EF31F5C; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 08/20] microvm/acpi: add minimal acpi support Date: Tue, 7 Jul 2020 14:53:44 +0200 Message-Id: <20200707125356.32450-9-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:46:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" $subject says all. Can be controlled using -M microvm,acpi=on/off. Signed-off-by: Gerd Hoffmann Reviewed-by: Michael S. Tsirkin --- hw/i386/acpi-microvm.h | 8 ++ include/hw/i386/microvm.h | 9 ++ hw/i386/acpi-microvm.c | 195 ++++++++++++++++++++++++++++++++++++++ hw/i386/microvm.c | 40 ++++++++ hw/i386/Kconfig | 1 + hw/i386/Makefile.objs | 1 + 6 files changed, 254 insertions(+) create mode 100644 hw/i386/acpi-microvm.h create mode 100644 hw/i386/acpi-microvm.c diff --git a/hw/i386/acpi-microvm.h b/hw/i386/acpi-microvm.h new file mode 100644 index 000000000000..dfe853690e15 --- /dev/null +++ b/hw/i386/acpi-microvm.h @@ -0,0 +1,8 @@ +#ifndef HW_I386_ACPI_MICROVM_H +#define HW_I386_ACPI_MICROVM_H + +#include "hw/i386/microvm.h" + +void acpi_setup_microvm(MicrovmMachineState *mms); + +#endif diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index 03e735723726..b6e0d4395af7 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -24,12 +24,18 @@ #include "hw/boards.h" #include "hw/i386/x86.h" +#include "hw/acpi/acpi_dev_interface.h" /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xfeb00000 #define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 +#define GED_MMIO_BASE 0xfea00000 +#define GED_MMIO_BASE_MEMHP (GED_MMIO_BASE + 0x100) +#define GED_MMIO_BASE_REGS (GED_MMIO_BASE + 0x200) +#define GED_MMIO_IRQ 9 + /* Machine type options */ #define MICROVM_MACHINE_PIT "pit" #define MICROVM_MACHINE_PIC "pic" @@ -58,6 +64,9 @@ typedef struct { /* Machine state */ uint32_t virtio_irq_base; bool kernel_cmdline_fixed; + Notifier machine_done; + Notifier powerdown_req; + AcpiDeviceIf *acpi_dev; } MicrovmMachineState; #define TYPE_MICROVM_MACHINE MACHINE_TYPE_NAME("microvm") diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c new file mode 100644 index 000000000000..6c4178caefee --- /dev/null +++ b/hw/i386/acpi-microvm.c @@ -0,0 +1,195 @@ +/* Support for generating ACPI tables and passing them to Guests + * + * Copyright (C) 2008-2010 Kevin O'Connor + * Copyright (C) 2006 Fabrice Bellard + * Copyright (C) 2013 Red Hat Inc + * + * Author: Michael S. Tsirkin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" + +#include "exec/memory.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/aml-build.h" +#include "hw/acpi/bios-linker-loader.h" +#include "hw/acpi/generic_event_device.h" +#include "hw/acpi/utils.h" +#include "hw/boards.h" +#include "hw/i386/fw_cfg.h" +#include "hw/i386/microvm.h" + +#include "acpi-common.h" +#include "acpi-microvm.h" + +static void +build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, + MicrovmMachineState *mms) +{ + X86MachineState *x86ms = X86_MACHINE(mms); + Aml *dsdt, *sb_scope, *scope, *pkg; + bool ambiguous; + Object *isabus; + + isabus = object_resolve_path_type("", TYPE_ISA_BUS, &ambiguous); + assert(isabus); + assert(!ambiguous); + + dsdt = init_aml_allocator(); + + /* Reserve space for header */ + acpi_data_push(dsdt->buf, sizeof(AcpiTableHeader)); + + sb_scope = aml_scope("_SB"); + fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg); + isa_build_aml(ISA_BUS(isabus), sb_scope); + build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev), + GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); + acpi_dsdt_add_power_button(sb_scope); + aml_append(dsdt, sb_scope); + + scope = aml_scope("\\"); + pkg = aml_package(4); + aml_append(pkg, aml_int(5)); /* SLEEP_CONTROL_REG.SLP_TYP */ + aml_append(pkg, aml_int(0)); /* ignored */ + aml_append(pkg, aml_int(0)); /* reserved */ + aml_append(pkg, aml_int(0)); /* reserved */ + aml_append(scope, aml_name_decl("_S5", pkg)); + aml_append(dsdt, scope); + + /* copy AML table into ACPI tables blob and patch header there */ + g_array_append_vals(table_data, dsdt->buf->data, dsdt->buf->len); + build_header(linker, table_data, + (void *)(table_data->data + table_data->len - dsdt->buf->len), + "DSDT", dsdt->buf->len, 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 = { + /* + * minimum version for ACPI_FADT_F_HW_REDUCED_ACPI, + * see acpi spec "4.1 Hardware-Reduced ACPI" + */ + .rev = 5, + .minor_ver = 1, + + .flags = ((1 << ACPI_FADT_F_HW_REDUCED_ACPI) | + (1 << ACPI_FADT_F_RESET_REG_SUP)), + + /* Table 5-33 FADT Format -- SLEEP_CONTROL_REG */ + .sleep_ctl = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_CTL, + }, + + /* Table 5-33 FADT Format -- SLEEP_STATUS_REG */ + .sleep_sts = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_STS, + }, + + /* Table 5-33 FADT Format -- RESET_REG */ + .reset_reg = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_RESET, + }, + + /* Table 5-33 FADT Format -- RESET_VALUE */ + .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 = { + /* Table 5-27 RSDP Structure */ + .revision = 2, /* rev2 needed for xsdt support */ + .oem_id = ACPI_BUILD_APPNAME6, + .xsdt_tbl_offset = &xsdt, + .rsdt_tbl_offset = NULL, + }; + build_rsdp(tables->rsdp, tables->linker, &rsdp_data); + } + + /* Cleanup memory that's no longer used. */ + g_array_free(table_offsets, true); +} + +static void acpi_build_no_update(void *build_opaque) +{ + /* nothing, microvm tables don't change at runtime */ +} + +void acpi_setup_microvm(MicrovmMachineState *mms) +{ + X86MachineState *x86ms = X86_MACHINE(mms); + AcpiBuildTables tables; + + assert(x86ms->fw_cfg); + + if (!x86_machine_is_acpi_enabled(x86ms)) { + return; + } + + acpi_build_tables_init(&tables); + acpi_build_microvm(&tables, mms); + + /* Now expose it all to Guest */ + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.table_data, + ACPI_BUILD_TABLE_FILE, + ACPI_BUILD_TABLE_MAX_SIZE); + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.linker->cmd_blob, + "etc/table-loader", 0); + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.rsdp, + ACPI_BUILD_RSDP_FILE, 0); + + acpi_build_tables_cleanup(&tables, false); +} diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index ab6ee6c67b1a..75eca7306b11 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -26,6 +26,8 @@ #include "sysemu/cpus.h" #include "sysemu/numa.h" #include "sysemu/reset.h" +#include "sysemu/runstate.h" +#include "acpi-microvm.h" #include "hw/loader.h" #include "hw/irq.h" @@ -41,6 +43,8 @@ #include "hw/i386/e820_memory_layout.h" #include "hw/i386/fw_cfg.h" #include "hw/virtio/virtio-mmio.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/generic_event_device.h" #include "cpu.h" #include "elf.h" @@ -129,6 +133,17 @@ static void microvm_devices_init(MicrovmMachineState *mms) } /* Optional and legacy devices */ + if (x86_machine_is_acpi_enabled(x86ms)) { + DeviceState *dev = qdev_new(TYPE_ACPI_GED_X86); + qdev_prop_set_uint32(dev, "ged-event", ACPI_GED_PWR_DOWN_EVT); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, GED_MMIO_BASE); + /* sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, GED_MMIO_BASE_MEMHP); */ + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 2, GED_MMIO_BASE_REGS); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, + x86ms->gsi[GED_MMIO_IRQ]); + sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal); + mms->acpi_dev = ACPI_DEVICE_IF(dev); + } if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) { qemu_irq *i8259; @@ -438,6 +453,26 @@ static void microvm_machine_set_auto_kernel_cmdline(Object *obj, bool value, mms->auto_kernel_cmdline = value; } +static void microvm_machine_done(Notifier *notifier, void *data) +{ + MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, + machine_done); + + acpi_setup_microvm(mms); +} + +static void microvm_powerdown_req(Notifier *notifier, void *data) +{ + MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, + powerdown_req); + + if (mms->acpi_dev) { + Object *obj = OBJECT(mms->acpi_dev); + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj); + adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS); + } +} + static void microvm_machine_initfn(Object *obj) { MicrovmMachineState *mms = MICROVM_MACHINE(obj); @@ -452,6 +487,11 @@ static void microvm_machine_initfn(Object *obj) /* State */ mms->kernel_cmdline_fixed = false; + + mms->machine_done.notify = microvm_machine_done; + qemu_add_machine_init_done_notifier(&mms->machine_done); + mms->powerdown_req.notify = microvm_powerdown_req; + qemu_register_powerdown_notifier(&mms->powerdown_req); } static void microvm_class_init(ObjectClass *oc, void *data) diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index c93f32f6579d..be746bcb49eb 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -102,6 +102,7 @@ config MICROVM select I8259 select MC146818RTC select VIRTIO_MMIO + select ACPI_HW_REDUCED config X86_IOMMU bool diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs index 622739305882..bbb2fe78f3cd 100644 --- a/hw/i386/Makefile.objs +++ b/hw/i386/Makefile.objs @@ -19,3 +19,4 @@ obj-y += kvmvapic.o obj-$(CONFIG_ACPI) += acpi-common.o obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o obj-$(CONFIG_PC) += acpi-build.o +obj-$(CONFIG_MICROVM) += acpi-microvm.o From patchwork Tue Jul 7 12:53:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648557 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6EAA414B7 for ; Tue, 7 Jul 2020 13:05:19 +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 4521E2075B for ; Tue, 7 Jul 2020 13:05:19 +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="ChES7vMu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4521E2075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:59122 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnHi-0007mF-IJ for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:05:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7q-0008Nw-ON for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:07 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:32134 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 1jsn7l-0004ta-43 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126500; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=7aCyFFwJnH/XozvLc6135xcBscIKe0axRy0qDQOA4eY=; b=ChES7vMu7N0yOQ6GuroPXTQab4enyKLRWReRnv0VKgqAesMSujcr59zaKxXlPW2dPzzX2G LILHR330xNthoTDSrU2yT2cdvdUFPgr09Ic3DojCNr2ueDaZvJiCUY8Qys8LlomJTZHftt u4lIjnkDeNaS4PeO982RUWUx+CXK1rU= 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-395-SDNSg32jN12L6PUZ9_Xm5A-1; Tue, 07 Jul 2020 08:54:55 -0400 X-MC-Unique: SDNSg32jN12L6PUZ9_Xm5A-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 30EF919324A7; Tue, 7 Jul 2020 12:54:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6D12978465; Tue, 7 Jul 2020 12:54:16 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 522BC31F5E; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 09/20] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Date: Tue, 7 Jul 2020 14:53:45 +0200 Message-Id: <20200707125356.32450-10-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:20:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Makes x86 linux kernel find virtio-mmio devices automatically. Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- hw/i386/acpi-microvm.c | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c index 6c4178caefee..d44d7b0cb234 100644 --- a/hw/i386/acpi-microvm.c +++ b/hw/i386/acpi-microvm.c @@ -21,6 +21,7 @@ */ #include "qemu/osdep.h" +#include "qemu/cutils.h" #include "qapi/error.h" #include "exec/memory.h" @@ -32,10 +33,60 @@ #include "hw/boards.h" #include "hw/i386/fw_cfg.h" #include "hw/i386/microvm.h" +#include "hw/virtio/virtio-mmio.h" #include "acpi-common.h" #include "acpi-microvm.h" +static void acpi_dsdt_add_virtio(Aml *scope, + MicrovmMachineState *mms) +{ + gchar *separator; + long int index; + BusState *bus; + BusChild *kid; + + bus = sysbus_get_default(); + QTAILQ_FOREACH(kid, &bus->children, sibling) { + DeviceState *dev = kid->child; + Object *obj = object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MMIO); + + if (obj) { + VirtIOMMIOProxy *mmio = VIRTIO_MMIO(obj); + VirtioBusState *mmio_virtio_bus = &mmio->bus; + BusState *mmio_bus = &mmio_virtio_bus->parent_obj; + + if (QTAILQ_EMPTY(&mmio_bus->children)) { + continue; + } + separator = g_strrstr(mmio_bus->name, "."); + if (!separator) { + continue; + } + if (qemu_strtol(separator + 1, NULL, 10, &index) != 0) { + continue; + } + + uint32_t irq = mms->virtio_irq_base + index; + hwaddr base = VIRTIO_MMIO_BASE + index * 512; + hwaddr size = 512; + + Aml *dev = aml_device("VR%02u", (unsigned)index); + aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); + aml_append(dev, aml_name_decl("_UID", aml_int(index))); + aml_append(dev, aml_name_decl("_CCA", aml_int(1))); + + Aml *crs = aml_resource_template(); + aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); + aml_append(crs, + aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, + AML_EXCLUSIVE, &irq, 1)); + aml_append(dev, aml_name_decl("_CRS", crs)); + aml_append(scope, dev); + } + } +} + static void build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, MicrovmMachineState *mms) @@ -60,6 +111,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev), GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); acpi_dsdt_add_power_button(sb_scope); + acpi_dsdt_add_virtio(sb_scope, mms); aml_append(dsdt, sb_scope); scope = aml_scope("\\"); From patchwork Tue Jul 7 12:53:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648575 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3FE946C1 for ; Tue, 7 Jul 2020 13:11:44 +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 16B642075B for ; Tue, 7 Jul 2020 13:11:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="JQMjLbDu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 16B642075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46228 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnNv-00063u-Co for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:11:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38452) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7n-0008K3-P1 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:03 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:33122 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7k-0004tV-Vj for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126500; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=jEDeQL+0eY+fxl25+8ob2qVPKP/uEkYpHD39mrbj0FQ=; b=JQMjLbDudi4su5yBJ1uo9VzMC1CcSaMz2TkO1LD09VaQ2JjB9LGb4WJ8E5gEaltg0tgKi4 VG+Xin9Rr5l4WUkkXz1MU01HCMMCTDIVUmQ26XIIcJtF3uFMD7IAZl/Q0sXwG2JPFVZ69a agVS3ZJIMul07jdJAkl53wKsSPeZkUI= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-19-cfGlCA8-M02isXM8poGT0A-1; Tue, 07 Jul 2020 08:54:56 -0400 X-MC-Unique: cfGlCA8-M02isXM8poGT0A-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 2DA5F19324A5; Tue, 7 Jul 2020 12:54:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 720D17846C; Tue, 7 Jul 2020 12:54:16 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 5B0CB31F62; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 10/20] microvm/acpi: use GSI 16-23 for virtio Date: Tue, 7 Jul 2020 14:53:46 +0200 Message-Id: <20200707125356.32450-11-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:20:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" With ACPI enabled and IO-APIC being properly declared in the ACPI tables we can use interrupt lines 16-23 for virtio and avoid shared interrupts. With acpi disabled we continue to use lines 5-12. Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 75eca7306b11..1bcd57a6fd80 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -125,7 +125,7 @@ static void microvm_devices_init(MicrovmMachineState *mms) kvmclock_create(); - mms->virtio_irq_base = 5; + mms->virtio_irq_base = x86_machine_is_acpi_enabled(x86ms) ? 16 : 5; for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { sysbus_create_simple("virtio-mmio", VIRTIO_MMIO_BASE + i * 512, From patchwork Tue Jul 7 12:53:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648553 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CD97D912 for ; Tue, 7 Jul 2020 13:03:08 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A40AF20708 for ; Tue, 7 Jul 2020 13:03: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="UsLVdLHy" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A40AF20708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:53702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnFb-000514-UL for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:03:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38394) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7l-0008Fa-5S for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:01 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:24998 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7j-0004t8-G3 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126498; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=WRQFF1Ean5S7aC9TWsKn+9OiHTseT6Iuu52pMwLAYM4=; b=UsLVdLHyWMoqvETHcUjACbaGwmKgwfBKeGPW8wPA0NC4cbP0pVzPV2fsMlt1FGmB6j1ZGd +HeF6JDoPpdCcR841TyB1FXPbkC7HN/dQUWrkcvx41Hf4s+wUmngS8p3WVPhWaGZYAQY0f vW8Ke0Zk/cLKZ7yBCEpDGQf72tDOEsY= 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-326--hNBxjIjN2mYDxfU9a2fxA-1; Tue, 07 Jul 2020 08:54:57 -0400 X-MC-Unique: -hNBxjIjN2mYDxfU9a2fxA-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 9F3AD193F56E; Tue, 7 Jul 2020 12:54:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id CF26861780; Tue, 7 Jul 2020 12:54:16 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 63F9D31F63; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 11/20] microvm/acpi: use seabios with acpi=on Date: Tue, 7 Jul 2020 14:53:47 +0200 Message-Id: <20200707125356.32450-12-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 06:04:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" With acpi=off continue to use qboot. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 1bcd57a6fd80..ac605d92b984 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -52,6 +52,7 @@ #include "hw/xen/start_info.h" #define MICROVM_QBOOT_FILENAME "qboot.rom" +#define MICROVM_BIOS_FILENAME "bios-microvm.bin" static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s) { @@ -174,7 +175,9 @@ static void microvm_devices_init(MicrovmMachineState *mms) } if (bios_name == NULL) { - bios_name = MICROVM_QBOOT_FILENAME; + bios_name = x86_machine_is_acpi_enabled(x86ms) + ? MICROVM_BIOS_FILENAME + : MICROVM_QBOOT_FILENAME; } x86_bios_rom_init(get_system_memory(), true); } From patchwork Tue Jul 7 12:53:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648565 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AE09D92A for ; Tue, 7 Jul 2020 13:08:37 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 84FED2075B for ; Tue, 7 Jul 2020 13:08: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="BNAFWs+r" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 84FED2075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:39304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnKu-0002vk-S1 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:08:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38328) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7g-0008Aq-2c for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:56 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:32171 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7e-0004ri-A8 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126493; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=sQJ0YdLK1hV5ZbuEPLWSu+ZGB5W4m1BLGPxWcQ/+h54=; b=BNAFWs+ruCVs2El0DlF0lWKlXWQffdECIwOnVZmmlsL9oR/Hm0hvhXQYYesedArgGDQHBZ o4Lp3KO+xaexmp5Ulw0uTte6OXuBaEvmpbCp3ZsMtMcCllVmBxkAwaNZN7+EoBunL3TDfV GuAxXLjK0cCc81+pHtKmhlXB1ZhxyDY= 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-276-ORwh-sUUMPSq2U8fhLpC0w-1; Tue, 07 Jul 2020 08:54:49 -0400 X-MC-Unique: ORwh-sUUMPSq2U8fhLpC0w-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id F2B11832BF5; Tue, 7 Jul 2020 12:54:31 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id D442910023A0; Tue, 7 Jul 2020 12:54:16 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 6CEE631F68; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 12/20] microvm/acpi: disable virtio-mmio cmdline hack Date: Tue, 7 Jul 2020 14:53:48 +0200 Message-Id: <20200707125356.32450-13-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 06:04:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" ... in case we are using ACPI. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index ac605d92b984..fbda323f3b2a 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -343,7 +343,8 @@ static void microvm_machine_reset(MachineState *machine) CPUState *cs; X86CPU *cpu; - if (machine->kernel_filename != NULL && + if (!x86_machine_is_acpi_enabled(X86_MACHINE(machine)) && + machine->kernel_filename != NULL && mms->auto_kernel_cmdline && !mms->kernel_cmdline_fixed) { microvm_fix_kernel_cmdline(machine); mms->kernel_cmdline_fixed = true; From patchwork Tue Jul 7 12:53:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648517 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0828F14B7 for ; Tue, 7 Jul 2020 12:58:02 +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 D405C20771 for ; Tue, 7 Jul 2020 12:58:01 +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="TZzMNINw" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D405C20771 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:37514 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnAf-0004wg-37 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 08:58:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38288) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7e-0008A0-L4 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:55 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:35627 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 1jsn7c-0004r8-HL for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126490; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Wc9PJg0y+gZhnz3nm4G7K97xAl+wSVatR2UZc498+YQ=; b=TZzMNINwR4Q1X2hmNe5sW9phCl5Le7xEXeitPhJCpkKtzx/Bt53eot5/cd0UgpgxOFmahJ xdITqGM5f12VknptKRWz2lYpwhjISIbowoxuJrx9BDMntA7Gi9YfmSJlRpLJBijyZkyh3Y qEBHHKvN6J+/alygHCdcdLWAVR3snq4= 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-274-rGa8oTprOhuGOAAV5d4ISw-1; Tue, 07 Jul 2020 08:54:47 -0400 X-MC-Unique: rGa8oTprOhuGOAAV5d4ISw-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 3885469899; Tue, 7 Jul 2020 12:54:29 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id D9B017610C; Tue, 7 Jul 2020 12:54:16 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 777FD31F73; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 13/20] x86: constify x86_machine_is_*_enabled Date: Tue, 7 Jul 2020 14:53:49 +0200 Message-Id: <20200707125356.32450-14-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:31:00 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- include/hw/i386/x86.h | 4 ++-- hw/i386/x86.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index b79f24e28545..a350ea3609f5 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -110,8 +110,8 @@ void x86_load_linux(X86MachineState *x86ms, bool pvh_enabled, bool linuxboot_dma_enabled); -bool x86_machine_is_smm_enabled(X86MachineState *x86ms); -bool x86_machine_is_acpi_enabled(X86MachineState *x86ms); +bool x86_machine_is_smm_enabled(const X86MachineState *x86ms); +bool x86_machine_is_acpi_enabled(const X86MachineState *x86ms); /* Global System Interrupts */ diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 93f7371a5693..2d2beff3d4f6 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -848,7 +848,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; @@ -890,7 +890,7 @@ static void x86_machine_set_smm(Object *obj, Visitor *v, const char *name, visit_type_OnOffAuto(v, name, &x86ms->smm, errp); } -bool x86_machine_is_acpi_enabled(X86MachineState *x86ms) +bool x86_machine_is_acpi_enabled(const X86MachineState *x86ms) { if (x86ms->acpi == ON_OFF_AUTO_OFF) { return false; From patchwork Tue Jul 7 12:53:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648559 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 631E41709 for ; Tue, 7 Jul 2020 13:05:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 295FF2075B for ; Tue, 7 Jul 2020 13:05:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="MRRUX2SX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 295FF2075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:33202 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnIH-0000Rj-EO for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:05:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38136) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7I-0007jP-0o for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:32 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:57950 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7F-0004nG-HP for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126468; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=WOoLMQruTF3OJc3r1oTR3cRJ4afwnm2UQjKXJ94oies=; b=MRRUX2SXe3lBgXGwHxmY+NyEB+ZEgtoFp/HjxaZqRc/QE0DO0mZG4zsl53LZ4pEWoaxHU8 61MXFKRSCmPi5TdKFj/27MuYwCzeTzn2mDKSVwYhg5qTtVPER4S5eOnjwLEgQ06EOgcTrj /wxxGIsOIhJh2SOReuwtwQtjyFk6rRg= 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-107-KvJGmzWlORGBBO9IogPz6A-1; Tue, 07 Jul 2020 08:54:24 -0400 X-MC-Unique: KvJGmzWlORGBBO9IogPz6A-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 612888057B0; Tue, 7 Jul 2020 12:54:22 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE9E1797F5; Tue, 7 Jul 2020 12:54:16 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 8D2CC31F93; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 14/20] x86: move acpi_dev from pc/microvm Date: Tue, 7 Jul 2020 14:53:50 +0200 Message-Id: <20200707125356.32450-15-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:46:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Both pc and microvm machine types have a acpi_dev field. Move it to the common base type. Signed-off-by: Gerd Hoffmann --- include/hw/i386/microvm.h | 1 - include/hw/i386/pc.h | 1 - include/hw/i386/x86.h | 1 + hw/i386/acpi-build.c | 2 +- hw/i386/acpi-microvm.c | 5 +++-- hw/i386/microvm.c | 10 ++++++---- hw/i386/pc.c | 34 +++++++++++++++++++--------------- hw/i386/pc_piix.c | 2 +- hw/i386/pc_q35.c | 2 +- 9 files changed, 32 insertions(+), 26 deletions(-) diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index b6e0d4395af7..b8ec99aeb051 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -66,7 +66,6 @@ typedef struct { bool kernel_cmdline_fixed; Notifier machine_done; Notifier powerdown_req; - AcpiDeviceIf *acpi_dev; } MicrovmMachineState; #define TYPE_MICROVM_MACHINE MACHINE_TYPE_NAME("microvm") diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index dce1273c7dad..5e4126fe817d 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -29,7 +29,6 @@ struct PCMachineState { Notifier machine_done; /* Pointers to devices and objects: */ - HotplugHandler *acpi_dev; PCIBus *bus; I2CBus *smbus; PFlashCFI01 *flash[2]; diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index a350ea3609f5..de74c831c3ab 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -50,6 +50,7 @@ typedef struct { FWCfgState *fw_cfg; qemu_irq *gsi; GMappedFile *initrd_mapped_file; + HotplugHandler *acpi_dev; /* RAM information (sizes, addresses, configuration): */ ram_addr_t below_4g_mem_size, above_4g_mem_size; diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index b7bcbbbb2a35..c356cc71fe08 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2431,7 +2431,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) acpi_add_table(table_offsets, tables_blob); acpi_build_madt(tables_blob, tables->linker, x86ms, - ACPI_DEVICE_IF(pcms->acpi_dev), true); + ACPI_DEVICE_IF(x86ms->acpi_dev), true); vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c index d44d7b0cb234..70fba7ca04dd 100644 --- a/hw/i386/acpi-microvm.c +++ b/hw/i386/acpi-microvm.c @@ -108,7 +108,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, sb_scope = aml_scope("_SB"); fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg); isa_build_aml(ISA_BUS(isabus), sb_scope); - build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev), + build_ged_aml(sb_scope, GED_DEVICE, x86ms->acpi_dev, GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); acpi_dsdt_add_power_button(sb_scope); acpi_dsdt_add_virtio(sb_scope, mms); @@ -135,6 +135,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, MicrovmMachineState *mms) { MachineState *machine = MACHINE(mms); + X86MachineState *x86ms = X86_MACHINE(mms); GArray *table_offsets; GArray *tables_blob = tables->table_data; unsigned dsdt, xsdt; @@ -191,7 +192,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, acpi_add_table(table_offsets, tables_blob); acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine), - mms->acpi_dev, false); + ACPI_DEVICE_IF(x86ms->acpi_dev), false); xsdt = tables_blob->len; build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL); diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index fbda323f3b2a..3d8a66cfc3ac 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -143,7 +143,7 @@ static void microvm_devices_init(MicrovmMachineState *mms) sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, x86ms->gsi[GED_MMIO_IRQ]); sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal); - mms->acpi_dev = ACPI_DEVICE_IF(dev); + x86ms->acpi_dev = HOTPLUG_HANDLER(dev); } if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) { @@ -469,11 +469,13 @@ static void microvm_powerdown_req(Notifier *notifier, void *data) { MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, powerdown_req); + X86MachineState *x86ms = X86_MACHINE(mms); - if (mms->acpi_dev) { - Object *obj = OBJECT(mms->acpi_dev); + if (x86ms->acpi_dev) { + Object *obj = OBJECT(x86ms->acpi_dev); AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj); - adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS); + adevc->send_event(ACPI_DEVICE_IF(x86ms->acpi_dev), + ACPI_POWER_DOWN_STATUS); } } diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 4af9679d039b..98d29ead09b0 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1270,6 +1270,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { const PCMachineState *pcms = PC_MACHINE(hotplug_dev); + const X86MachineState *x86ms = X86_MACHINE(hotplug_dev); const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); const MachineState *ms = MACHINE(hotplug_dev); const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); @@ -1281,7 +1282,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, * but pcms->acpi_dev is still created. Check !acpi_enabled in * addition to cover this case. */ - if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) { + if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) { error_setg(errp, "memory hotplug is not enabled: missing acpi device or acpi disabled"); return; @@ -1292,7 +1293,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, return; } - hotplug_handler_pre_plug(pcms->acpi_dev, dev, &local_err); + hotplug_handler_pre_plug(x86ms->acpi_dev, dev, &local_err); if (local_err) { error_propagate(errp, local_err); return; @@ -1307,6 +1308,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev, { Error *local_err = NULL; PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); MachineState *ms = MACHINE(hotplug_dev); bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); @@ -1319,7 +1321,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev, nvdimm_plug(ms->nvdimms_state); } - hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &error_abort); + hotplug_handler_plug(x86ms->acpi_dev, dev, &error_abort); out: error_propagate(errp, local_err); } @@ -1328,14 +1330,14 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { Error *local_err = NULL; - PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); /* * When -no-acpi is used with Q35 machine type, no ACPI is built, * but pcms->acpi_dev is still created. Check !acpi_enabled in * addition to cover this case. */ - if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) { + if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) { error_setg(&local_err, "memory hotplug is not enabled: missing acpi device or acpi disabled"); goto out; @@ -1347,7 +1349,7 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev, goto out; } - hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev, + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, &local_err); out: error_propagate(errp, local_err); @@ -1357,9 +1359,10 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); Error *local_err = NULL; - hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); + hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; } @@ -1403,10 +1406,10 @@ static void pc_cpu_plug(HotplugHandler *hotplug_dev, Error *local_err = NULL; X86CPU *cpu = X86_CPU(dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - if (pcms->acpi_dev) { - hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); + if (x86ms->acpi_dev) { + hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; } @@ -1433,8 +1436,9 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, Error *local_err = NULL; X86CPU *cpu = X86_CPU(dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - if (!pcms->acpi_dev) { + if (!x86ms->acpi_dev) { error_setg(&local_err, "CPU hot unplug not supported without ACPI"); goto out; } @@ -1446,7 +1450,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, goto out; } - hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev, + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; @@ -1464,9 +1468,9 @@ static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev, Error *local_err = NULL; X86CPU *cpu = X86_CPU(dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); + hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; } @@ -1495,7 +1499,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, CPUX86State *env = &cpu->env; MachineState *ms = MACHINE(hotplug_dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); unsigned int smp_cores = ms->smp.cores; unsigned int smp_threads = ms->smp.threads; X86CPUTopoInfo topo_info; diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 1d832b2878b1..34944bd383e3 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -291,7 +291,7 @@ static void pc_init1(MachineState *machine, object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP, TYPE_HOTPLUG_HANDLER, - (Object **)&pcms->acpi_dev, + (Object **)&x86ms->acpi_dev, object_property_allow_set_link, OBJ_PROP_LINK_STRONG); object_property_set_link(OBJECT(machine), OBJECT(piix4_pm), diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 047ea8db28ea..92a104059076 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -240,7 +240,7 @@ static void pc_q35_init(MachineState *machine) object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP, TYPE_HOTPLUG_HANDLER, - (Object **)&pcms->acpi_dev, + (Object **)&x86ms->acpi_dev, object_property_allow_set_link, OBJ_PROP_LINK_STRONG); object_property_set_link(OBJECT(machine), OBJECT(lpc), From patchwork Tue Jul 7 12:53:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648531 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7C88F13B4 for ; Tue, 7 Jul 2020 12:59:02 +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 43FE720708 for ; Tue, 7 Jul 2020 12:59:02 +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="OZwEWyIS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 43FE720708 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:42908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnBd-00075f-Il for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 08:59:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38432) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7m-0008Ib-QW for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:03 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:59544 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 1jsn7j-0004tH-Vu for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126499; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=WNvGE26EXXT9ZlwxajIizLr5ieaNxTDEJbAMXfB2e5U=; b=OZwEWyISFyzOv3KurV/+qGwMIhm5KO/yGgfs4Yja0BcWQw5BxAn2G6zjixXXXAT1Ip8Ivp 1t1LtBLXEypUI7KdG8B8KsZHxuEfy6hbjpuNZW/klM9GzdAs0xVi/PSwHM/Lsee5NEiQof RkDwCXyd9GkChux7STLTkZyPe4u5Xew= 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-438-DuDceBZ9PfOQvb9jw3f4Sg-1; Tue, 07 Jul 2020 08:54:57 -0400 X-MC-Unique: DuDceBZ9PfOQvb9jw3f4Sg-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 C102F193F581; Tue, 7 Jul 2020 12:54:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 47ED17846D; Tue, 7 Jul 2020 12:54:20 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 9A32131F98; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 15/20] x86: move cpu plug from pc to x86 Date: Tue, 7 Jul 2020 14:53:51 +0200 Message-Id: <20200707125356.32450-16-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:31:00 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The cpu hotplug code handles the initialization of coldplugged cpus too, so it is needed even in case cpu hotplug is not supported. Move the code from pc to x86, so microvm can use it. Signed-off-by: Gerd Hoffmann --- include/hw/i386/x86.h | 6 ++ hw/i386/pc.c | 234 ++---------------------------------------- hw/i386/x86.c | 222 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 234 insertions(+), 228 deletions(-) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index de74c831c3ab..23c964471802 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -102,6 +102,12 @@ CpuInstanceProperties x86_cpu_index_to_props(MachineState *ms, unsigned cpu_index); int64_t x86_get_default_cpu_node_id(const MachineState *ms, int idx); const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms); +CPUArchId *x86_find_cpu_slot(MachineState *ms, uint32_t id, int *idx); +void x86_rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count); +void x86_cpu_pre_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); +void x86_cpu_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); void x86_bios_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw); diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 98d29ead09b0..14036fcd4e3a 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -798,19 +798,6 @@ void pc_hot_add_cpu(MachineState *ms, const int64_t id, Error **errp) } } -static void rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count) -{ - if (cpus_count > 0xff) { - /* If the number of CPUs can't be represented in 8 bits, the - * BIOS must use "FW_CFG_NB_CPUS". Set RTC field to 0 just - * to make old BIOSes fail more predictably. - */ - rtc_set_memory(rtc, 0x5f, 0); - } else { - rtc_set_memory(rtc, 0x5f, cpus_count - 1); - } -} - static void pc_machine_done(Notifier *notifier, void *data) { @@ -820,7 +807,7 @@ void pc_machine_done(Notifier *notifier, void *data) PCIBus *bus = pcms->bus; /* set the number of CPUs */ - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); if (bus) { int extra_hosts = 0; @@ -1373,62 +1360,6 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev, error_propagate(errp, local_err); } -static int pc_apic_cmp(const void *a, const void *b) -{ - CPUArchId *apic_a = (CPUArchId *)a; - CPUArchId *apic_b = (CPUArchId *)b; - - return apic_a->arch_id - apic_b->arch_id; -} - -/* returns pointer to CPUArchId descriptor that matches CPU's apic_id - * in ms->possible_cpus->cpus, if ms->possible_cpus->cpus has no - * entry corresponding to CPU's apic_id returns NULL. - */ -static CPUArchId *pc_find_cpu_slot(MachineState *ms, uint32_t id, int *idx) -{ - CPUArchId apic_id, *found_cpu; - - apic_id.arch_id = id; - found_cpu = bsearch(&apic_id, ms->possible_cpus->cpus, - ms->possible_cpus->len, sizeof(*ms->possible_cpus->cpus), - pc_apic_cmp); - if (found_cpu && idx) { - *idx = found_cpu - ms->possible_cpus->cpus; - } - return found_cpu; -} - -static void pc_cpu_plug(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - CPUArchId *found_cpu; - Error *local_err = NULL; - X86CPU *cpu = X86_CPU(dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - - if (x86ms->acpi_dev) { - hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err); - if (local_err) { - goto out; - } - } - - /* increment the number of CPUs */ - x86ms->boot_cpus++; - if (x86ms->rtc) { - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); - } - if (x86ms->fw_cfg) { - fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); - } - - found_cpu = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, NULL); - found_cpu->cpu = OBJECT(dev); -out: - error_propagate(errp, local_err); -} static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1443,7 +1374,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, goto out; } - pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); + x86_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); assert(idx != -1); if (idx == 0) { error_setg(&local_err, "Boot CPU is unpluggable"); @@ -1475,172 +1406,19 @@ static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev, goto out; } - found_cpu = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, NULL); + found_cpu = x86_find_cpu_slot(MACHINE(pcms), cpu->apic_id, NULL); found_cpu->cpu = NULL; qdev_unrealize(dev); /* decrement the number of CPUs */ x86ms->boot_cpus--; /* Update the number of CPUs in CMOS */ - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); out: error_propagate(errp, local_err); } -static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - int idx; - CPUState *cs; - CPUArchId *cpu_slot; - X86CPUTopoIDs topo_ids; - X86CPU *cpu = X86_CPU(dev); - CPUX86State *env = &cpu->env; - MachineState *ms = MACHINE(hotplug_dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(hotplug_dev); - unsigned int smp_cores = ms->smp.cores; - unsigned int smp_threads = ms->smp.threads; - X86CPUTopoInfo topo_info; - - if(!object_dynamic_cast(OBJECT(cpu), ms->cpu_type)) { - error_setg(errp, "Invalid CPU type, expected cpu type: '%s'", - ms->cpu_type); - return; - } - - init_topo_info(&topo_info, x86ms); - - env->nr_dies = x86ms->smp_dies; - env->nr_nodes = topo_info.nodes_per_pkg; - env->pkg_offset = x86ms->apicid_pkg_offset(&topo_info); - - /* - * If APIC ID is not set, - * set it based on socket/die/core/thread properties. - */ - if (cpu->apic_id == UNASSIGNED_APIC_ID) { - int max_socket = (ms->smp.max_cpus - 1) / - smp_threads / smp_cores / x86ms->smp_dies; - - /* - * die-id was optional in QEMU 4.0 and older, so keep it optional - * if there's only one die per socket. - */ - if (cpu->die_id < 0 && x86ms->smp_dies == 1) { - cpu->die_id = 0; - } - - if (cpu->socket_id < 0) { - error_setg(errp, "CPU socket-id is not set"); - return; - } else if (cpu->socket_id > max_socket) { - error_setg(errp, "Invalid CPU socket-id: %u must be in range 0:%u", - cpu->socket_id, max_socket); - return; - } - if (cpu->die_id < 0) { - error_setg(errp, "CPU die-id is not set"); - return; - } else if (cpu->die_id > x86ms->smp_dies - 1) { - error_setg(errp, "Invalid CPU die-id: %u must be in range 0:%u", - cpu->die_id, x86ms->smp_dies - 1); - return; - } - if (cpu->core_id < 0) { - error_setg(errp, "CPU core-id is not set"); - return; - } else if (cpu->core_id > (smp_cores - 1)) { - error_setg(errp, "Invalid CPU core-id: %u must be in range 0:%u", - cpu->core_id, smp_cores - 1); - return; - } - if (cpu->thread_id < 0) { - error_setg(errp, "CPU thread-id is not set"); - return; - } else if (cpu->thread_id > (smp_threads - 1)) { - error_setg(errp, "Invalid CPU thread-id: %u must be in range 0:%u", - cpu->thread_id, smp_threads - 1); - return; - } - - topo_ids.pkg_id = cpu->socket_id; - topo_ids.die_id = cpu->die_id; - topo_ids.core_id = cpu->core_id; - topo_ids.smt_id = cpu->thread_id; - cpu->apic_id = x86ms->apicid_from_topo_ids(&topo_info, &topo_ids); - } - - cpu_slot = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); - if (!cpu_slot) { - MachineState *ms = MACHINE(pcms); - - x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); - error_setg(errp, - "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" - " APIC ID %" PRIu32 ", valid index range 0:%d", - topo_ids.pkg_id, topo_ids.die_id, topo_ids.core_id, topo_ids.smt_id, - cpu->apic_id, ms->possible_cpus->len - 1); - return; - } - - if (cpu_slot->cpu) { - error_setg(errp, "CPU[%d] with APIC ID %" PRIu32 " exists", - idx, cpu->apic_id); - return; - } - - /* if 'address' properties socket-id/core-id/thread-id are not set, set them - * so that machine_query_hotpluggable_cpus would show correct values - */ - /* TODO: move socket_id/core_id/thread_id checks into x86_cpu_realizefn() - * once -smp refactoring is complete and there will be CPU private - * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ - x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); - if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { - error_setg(errp, "property socket-id: %u doesn't match set apic-id:" - " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, - topo_ids.pkg_id); - return; - } - cpu->socket_id = topo_ids.pkg_id; - - if (cpu->die_id != -1 && cpu->die_id != topo_ids.die_id) { - error_setg(errp, "property die-id: %u doesn't match set apic-id:" - " 0x%x (die-id: %u)", cpu->die_id, cpu->apic_id, topo_ids.die_id); - return; - } - cpu->die_id = topo_ids.die_id; - - if (cpu->core_id != -1 && cpu->core_id != topo_ids.core_id) { - error_setg(errp, "property core-id: %u doesn't match set apic-id:" - " 0x%x (core-id: %u)", cpu->core_id, cpu->apic_id, - topo_ids.core_id); - return; - } - cpu->core_id = topo_ids.core_id; - - if (cpu->thread_id != -1 && cpu->thread_id != topo_ids.smt_id) { - error_setg(errp, "property thread-id: %u doesn't match set apic-id:" - " 0x%x (thread-id: %u)", cpu->thread_id, cpu->apic_id, - topo_ids.smt_id); - return; - } - cpu->thread_id = topo_ids.smt_id; - - if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && - !kvm_hv_vpindex_settable()) { - error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX"); - return; - } - - cs = CPU(cpu); - cs->cpu_index = idx; - - numa_cpu_pre_plug(cpu_slot, dev, errp); -} - static void pc_virtio_pmem_pci_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1706,7 +1484,7 @@ static void pc_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_pre_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_pre_plug(hotplug_dev, dev, errp); + x86_cpu_pre_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI)) { pc_virtio_pmem_pci_pre_plug(hotplug_dev, dev, errp); } @@ -1718,7 +1496,7 @@ static void pc_machine_device_plug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_plug(hotplug_dev, dev, errp); + x86_cpu_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI)) { pc_virtio_pmem_pci_plug(hotplug_dev, dev, errp); } diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 2d2beff3d4f6..b11fcb90b9cd 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" @@ -168,6 +169,227 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version) } } +void x86_cpu_pre_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + int idx; + CPUState *cs; + CPUArchId *cpu_slot; + X86CPUTopoIDs topo_ids; + X86CPU *cpu = X86_CPU(dev); + CPUX86State *env = &cpu->env; + MachineState *ms = MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + unsigned int smp_cores = ms->smp.cores; + unsigned int smp_threads = ms->smp.threads; + X86CPUTopoInfo topo_info; + + if(!object_dynamic_cast(OBJECT(cpu), ms->cpu_type)) { + error_setg(errp, "Invalid CPU type, expected cpu type: '%s'", + ms->cpu_type); + return; + } + + init_topo_info(&topo_info, x86ms); + + env->nr_dies = x86ms->smp_dies; + env->nr_nodes = topo_info.nodes_per_pkg; + env->pkg_offset = x86ms->apicid_pkg_offset(&topo_info); + + /* + * If APIC ID is not set, + * set it based on socket/die/core/thread properties. + */ + if (cpu->apic_id == UNASSIGNED_APIC_ID) { + int max_socket = (ms->smp.max_cpus - 1) / + smp_threads / smp_cores / x86ms->smp_dies; + + /* + * die-id was optional in QEMU 4.0 and older, so keep it optional + * if there's only one die per socket. + */ + if (cpu->die_id < 0 && x86ms->smp_dies == 1) { + cpu->die_id = 0; + } + + if (cpu->socket_id < 0) { + error_setg(errp, "CPU socket-id is not set"); + return; + } else if (cpu->socket_id > max_socket) { + error_setg(errp, "Invalid CPU socket-id: %u must be in range 0:%u", + cpu->socket_id, max_socket); + return; + } + if (cpu->die_id < 0) { + error_setg(errp, "CPU die-id is not set"); + return; + } else if (cpu->die_id > x86ms->smp_dies - 1) { + error_setg(errp, "Invalid CPU die-id: %u must be in range 0:%u", + cpu->die_id, x86ms->smp_dies - 1); + return; + } + if (cpu->core_id < 0) { + error_setg(errp, "CPU core-id is not set"); + return; + } else if (cpu->core_id > (smp_cores - 1)) { + error_setg(errp, "Invalid CPU core-id: %u must be in range 0:%u", + cpu->core_id, smp_cores - 1); + return; + } + if (cpu->thread_id < 0) { + error_setg(errp, "CPU thread-id is not set"); + return; + } else if (cpu->thread_id > (smp_threads - 1)) { + error_setg(errp, "Invalid CPU thread-id: %u must be in range 0:%u", + cpu->thread_id, smp_threads - 1); + return; + } + + topo_ids.pkg_id = cpu->socket_id; + topo_ids.die_id = cpu->die_id; + topo_ids.core_id = cpu->core_id; + topo_ids.smt_id = cpu->thread_id; + cpu->apic_id = x86ms->apicid_from_topo_ids(&topo_info, &topo_ids); + } + + cpu_slot = x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, &idx); + if (!cpu_slot) { + MachineState *ms = MACHINE(x86ms); + + x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); + error_setg(errp, + "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" + " APIC ID %" PRIu32 ", valid index range 0:%d", + topo_ids.pkg_id, topo_ids.die_id, topo_ids.core_id, topo_ids.smt_id, + cpu->apic_id, ms->possible_cpus->len - 1); + return; + } + + if (cpu_slot->cpu) { + error_setg(errp, "CPU[%d] with APIC ID %" PRIu32 " exists", + idx, cpu->apic_id); + return; + } + + /* if 'address' properties socket-id/core-id/thread-id are not set, set them + * so that machine_query_hotpluggable_cpus would show correct values + */ + /* TODO: move socket_id/core_id/thread_id checks into x86_cpu_realizefn() + * once -smp refactoring is complete and there will be CPU private + * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ + x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); + if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { + error_setg(errp, "property socket-id: %u doesn't match set apic-id:" + " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, + topo_ids.pkg_id); + return; + } + cpu->socket_id = topo_ids.pkg_id; + + if (cpu->die_id != -1 && cpu->die_id != topo_ids.die_id) { + error_setg(errp, "property die-id: %u doesn't match set apic-id:" + " 0x%x (die-id: %u)", cpu->die_id, cpu->apic_id, topo_ids.die_id); + return; + } + cpu->die_id = topo_ids.die_id; + + if (cpu->core_id != -1 && cpu->core_id != topo_ids.core_id) { + error_setg(errp, "property core-id: %u doesn't match set apic-id:" + " 0x%x (core-id: %u)", cpu->core_id, cpu->apic_id, + topo_ids.core_id); + return; + } + cpu->core_id = topo_ids.core_id; + + if (cpu->thread_id != -1 && cpu->thread_id != topo_ids.smt_id) { + error_setg(errp, "property thread-id: %u doesn't match set apic-id:" + " 0x%x (thread-id: %u)", cpu->thread_id, cpu->apic_id, + topo_ids.smt_id); + return; + } + cpu->thread_id = topo_ids.smt_id; + + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && + !kvm_hv_vpindex_settable()) { + error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX"); + return; + } + + cs = CPU(cpu); + cs->cpu_index = idx; + + numa_cpu_pre_plug(cpu_slot, dev, errp); +} + +void x86_rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count) +{ + if (cpus_count > 0xff) { + /* If the number of CPUs can't be represented in 8 bits, the + * BIOS must use "FW_CFG_NB_CPUS". Set RTC field to 0 just + * to make old BIOSes fail more predictably. + */ + rtc_set_memory(rtc, 0x5f, 0); + } else { + rtc_set_memory(rtc, 0x5f, cpus_count - 1); + } +} + +static int x86_apic_cmp(const void *a, const void *b) +{ + CPUArchId *apic_a = (CPUArchId *)a; + CPUArchId *apic_b = (CPUArchId *)b; + + return apic_a->arch_id - apic_b->arch_id; +} + +/* returns pointer to CPUArchId descriptor that matches CPU's apic_id + * in ms->possible_cpus->cpus, if ms->possible_cpus->cpus has no + * entry corresponding to CPU's apic_id returns NULL. + */ +CPUArchId *x86_find_cpu_slot(MachineState *ms, uint32_t id, int *idx) +{ + CPUArchId apic_id, *found_cpu; + + apic_id.arch_id = id; + found_cpu = bsearch(&apic_id, ms->possible_cpus->cpus, + ms->possible_cpus->len, sizeof(*ms->possible_cpus->cpus), + x86_apic_cmp); + if (found_cpu && idx) { + *idx = found_cpu - ms->possible_cpus->cpus; + } + return found_cpu; +} + +void x86_cpu_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + CPUArchId *found_cpu; + Error *local_err = NULL; + X86CPU *cpu = X86_CPU(dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + + if (x86ms->acpi_dev) { + hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err); + if (local_err) { + goto out; + } + } + + /* increment the number of CPUs */ + x86ms->boot_cpus++; + if (x86ms->rtc) { + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + } + if (x86ms->fw_cfg) { + fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); + } + + found_cpu = x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, NULL); + found_cpu->cpu = OBJECT(dev); +out: + error_propagate(errp, local_err); +} + CpuInstanceProperties x86_cpu_index_to_props(MachineState *ms, unsigned cpu_index) { From patchwork Tue Jul 7 12:53:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648547 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D260B912 for ; Tue, 7 Jul 2020 13:00:31 +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 A8E9D206CD for ; Tue, 7 Jul 2020 13:00:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ZfeU8iAJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A8E9D206CD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:47376 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnD3-0000sb-BS for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:00:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38372) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7j-0008EJ-Ns for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:59 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:52783 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7i-0004sv-6u for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126497; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Z16Tgq/lHTtNURBIfdG7/VdPyWMNzUE7lIxlb0vcRX8=; b=ZfeU8iAJQGCCP5d9TsHsCahp9gffcp0ICsTHErZvDJ8gtN3qUmt/WjADgfYv1OjjnN7I/e M0JlUg+iaJp/5HupBiwM7TlkiZ+c7fOSP8n/NAQi8czcjIK0i6sAMDBB1EX/b0OmvilpBF 2BP4x5QL2KH6XXLzcRzs/y6o+hg5Wqk= 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-187-RkvcAhOnMXm2yandsucMjA-1; Tue, 07 Jul 2020 08:54:52 -0400 X-MC-Unique: RkvcAhOnMXm2yandsucMjA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DAF17891555; Tue, 7 Jul 2020 12:54:31 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4CB2610023A7; Tue, 7 Jul 2020 12:54:20 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id A338231F99; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 16/20] microvm: wire up hotplug Date: Tue, 7 Jul 2020 14:53:52 +0200 Message-Id: <20200707125356.32450-17-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:46:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The cpu hotplug code handles the initialization of coldplugged cpus too, so it is needed even in case cpu hotplug is not supported. Wire cpu hotplug up for microvm. Without this we get a broken MADT table. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 3d8a66cfc3ac..a5b16b728f9f 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -320,6 +320,39 @@ static void microvm_fix_kernel_cmdline(MachineState *machine) g_free(cmdline); } +static void microvm_device_pre_plug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + x86_cpu_pre_plug(hotplug_dev, dev, errp); +} + +static void microvm_device_plug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + x86_cpu_plug(hotplug_dev, dev, errp); +} + +static void microvm_device_unplug_request_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + error_setg(errp, "unplug not supported by microvm"); +} + +static void microvm_device_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + error_setg(errp, "unplug not supported by microvm"); +} + +static HotplugHandler *microvm_get_hotplug_handler(MachineState *machine, + DeviceState *dev) +{ + if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { + return HOTPLUG_HANDLER(machine); + } + return NULL; +} + static void microvm_machine_state_init(MachineState *machine) { MicrovmMachineState *mms = MICROVM_MACHINE(machine); @@ -503,6 +536,7 @@ static void microvm_machine_initfn(Object *obj) static void microvm_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); mc->init = microvm_machine_state_init; @@ -523,6 +557,13 @@ static void microvm_class_init(ObjectClass *oc, void *data) /* Machine class handlers */ mc->reset = microvm_machine_reset; + /* hotplug (for cpu coldplug) */ + mc->get_hotplug_handler = microvm_get_hotplug_handler; + hc->pre_plug = microvm_device_pre_plug_cb; + hc->plug = microvm_device_plug_cb; + hc->unplug_request = microvm_device_unplug_request_cb; + hc->unplug = microvm_device_unplug_cb; + object_class_property_add(oc, MICROVM_MACHINE_PIC, "OnOffAuto", microvm_machine_get_pic, microvm_machine_set_pic, @@ -572,6 +613,7 @@ static const TypeInfo microvm_machine_info = { .class_size = sizeof(MicrovmMachineClass), .class_init = microvm_class_init, .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, { } }, }; From patchwork Tue Jul 7 12:53:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648567 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3F3B92A for ; Tue, 7 Jul 2020 13:09: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 88C212075B for ; Tue, 7 Jul 2020 13:09:42 +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="GtWM3KlU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 88C212075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:41702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnLx-0003zW-Ja for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:09:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38340) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7g-0008Bc-Ck for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:57 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:31408 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7e-0004rt-JV for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126493; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=yIBA7QMbjRBBosF8Z/aCMKZ6+Ye92UgyjrSu7U7xbDM=; b=GtWM3KlU+y/ZpUKNtTYOSZOTn4mQHVaMDGslM2MILCU2oAPbtTrGYviOMGiAbbHztAiefS t2pNBgkCL5J2ObLLQM1XvE+ZVC38l1yy67WOxnJpJTCSk9GFgryhDoHnQOjqeArm/nEmen PT6d7uwaMJQ+ir6owyILWqp2LPltoWw= 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-280-wzx07mdZMDKl64AUVcbilw-1; Tue, 07 Jul 2020 08:54:47 -0400 X-MC-Unique: wzx07mdZMDKl64AUVcbilw-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 DF2CA80DAF3; Tue, 7 Jul 2020 12:54:30 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id 511EDC007C; Tue, 7 Jul 2020 12:54:20 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id AC44E31F9A; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 17/20] tests/acpi: allow microvm test data updates. Date: Tue, 7 Jul 2020 14:53:53 +0200 Message-Id: <20200707125356.32450-18-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 06:04:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Also add empty test data files. Signed-off-by: Gerd Hoffmann --- tests/qtest/bios-tables-test-allowed-diff.h | 3 +++ tests/data/acpi/microvm/APIC | 0 tests/data/acpi/microvm/DSDT | 0 tests/data/acpi/microvm/FACP | 0 4 files changed, 3 insertions(+) create mode 100644 tests/data/acpi/microvm/APIC create mode 100644 tests/data/acpi/microvm/DSDT create mode 100644 tests/data/acpi/microvm/FACP diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index dfb8523c8bf4..97c3fa621b7f 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1 +1,4 @@ /* List of comma-separated changed AML files to ignore */ +"tests/data/acpi/microvm/APIC", +"tests/data/acpi/microvm/DSDT", +"tests/data/acpi/microvm/FACP", diff --git a/tests/data/acpi/microvm/APIC b/tests/data/acpi/microvm/APIC new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/data/acpi/microvm/DSDT b/tests/data/acpi/microvm/DSDT new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/data/acpi/microvm/FACP b/tests/data/acpi/microvm/FACP new file mode 100644 index 000000000000..e69de29bb2d1 From patchwork Tue Jul 7 12:53:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648577 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A91DA92A for ; Tue, 7 Jul 2020 13:12:36 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7FB1A2075B for ; Tue, 7 Jul 2020 13:12:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="GImDlXyc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7FB1A2075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:48410 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnOl-0006wV-R7 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:12:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7r-0008OV-RK for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:07 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:22393 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7q-0004uV-CE for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126504; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=xZdFqrgR1JarvVVCRgTMEg19qCkFtkK1L1XpMKaNaII=; b=GImDlXyc2m6Oob0yq05NlUCEsCTL1dFxf0zyB5lRAPNaZ/eQC+HXLdaG1gTzhR4vxoGNat eqSrWC9F8s5a0Gx7Op/Qj0UshmbFYgdOwCewIHCDloyKYh/XlKUboxPQKzuI0LOJGW2b1e HKePzuew6kbMPfG2FzdC8ySSacBH1Ck= 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-398-38uoFztIMkqEJ6DxqUAjsg-1; Tue, 07 Jul 2020 08:55:01 -0400 X-MC-Unique: 38uoFztIMkqEJ6DxqUAjsg-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 5626A106B24B; Tue, 7 Jul 2020 12:54:36 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id B2DE32E037; Tue, 7 Jul 2020 12:54:20 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id B8D0331F9C; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 18/20] tests/acpi: allow override blkdev Date: Tue, 7 Jul 2020 14:53:54 +0200 Message-Id: <20200707125356.32450-19-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 06:04:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" microvm needs virtio-blk instead of ide. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- tests/qtest/bios-tables-test.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c index c315156858f4..24b715dce780 100644 --- a/tests/qtest/bios-tables-test.c +++ b/tests/qtest/bios-tables-test.c @@ -72,6 +72,7 @@ typedef struct { const char *variant; const char *uefi_fl1; const char *uefi_fl2; + const char *blkdev; const char *cd; const uint64_t ram_start; const uint64_t scan_len; @@ -635,9 +636,10 @@ static void test_acpi_one(const char *params, test_data *data) args = g_strdup_printf("-machine %s,kernel-irqchip=off %s -accel tcg " "-net none -display none %s " "-drive id=hd0,if=none,file=%s,format=raw " - "-device ide-hd,drive=hd0 ", + "-device %s,drive=hd0 ", data->machine, data->tcg_only ? "" : "-accel kvm", - params ? params : "", disk); + params ? params : "", disk, + data->blkdev ?: "ide-hd"); } data->qts = qtest_init(args); From patchwork Tue Jul 7 12:53:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648571 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BA04292A for ; Tue, 7 Jul 2020 13:10: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 90B712075B for ; Tue, 7 Jul 2020 13:10:34 +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="LDycx/I6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 90B712075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:43842 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnMn-0004wS-Pf for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 09:10:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38380) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7j-0008F4-VM for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:55:00 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:25362 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 1jsn7c-0004rL-I1 for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126491; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Jc3CkjMTS6eJgOpPYjcQtTYta9twaD8HtlqKoRcWa3g=; b=LDycx/I6osABxEirXebiIqOmsuKeZPdzcdt+etz229wzyDmiCQJ6JiPlLcI5nxYkawCWMC o5AkQ16LeUhyftsDp39RDSFHl6eKVstRprS5dW0lltUfW35mYRQVhf/6+dPuJLr9gLubxG 8qjz0pGiz2j4O4wMVWM6ESLipYPSKsg= 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-486-SEuGukI6Nx6nATJjUp5Aeg-1; Tue, 07 Jul 2020 08:54:48 -0400 X-MC-Unique: SEuGukI6Nx6nATJjUp5Aeg-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 DB1AD1011F6A; Tue, 7 Jul 2020 12:54:30 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id DFE92C009A; Tue, 7 Jul 2020 12:54:20 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id C1AAC31FA5; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 19/20] tests/acpi: add microvm test Date: Tue, 7 Jul 2020 14:53:55 +0200 Message-Id: <20200707125356.32450-20-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:31:00 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- tests/qtest/bios-tables-test.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c index 24b715dce780..b5b98d5c0742 100644 --- a/tests/qtest/bios-tables-test.c +++ b/tests/qtest/bios-tables-test.c @@ -1007,6 +1007,20 @@ static void test_acpi_virt_tcg_memhp(void) } +static void test_acpi_microvm_tcg(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = "microvm"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + data.blkdev = "virtio-blk-device"; + test_acpi_one(" -machine microvm,acpi=on,rtc=off", + &data); + free_test_data(&data); +} + static void test_acpi_virt_tcg_numamem(void) { test_data data = { @@ -1118,6 +1132,7 @@ int main(int argc, char *argv[]) qtest_add_func("acpi/q35/dimmpxm", test_acpi_q35_tcg_dimm_pxm); qtest_add_func("acpi/piix4/acpihmat", test_acpi_piix4_tcg_acpi_hmat); qtest_add_func("acpi/q35/acpihmat", test_acpi_q35_tcg_acpi_hmat); + qtest_add_func("acpi/microvm", test_acpi_microvm_tcg); } else if (strcmp(arch, "aarch64") == 0) { qtest_add_func("acpi/virt", test_acpi_virt_tcg); qtest_add_func("acpi/virt/numamem", test_acpi_virt_tcg_numamem); From patchwork Tue Jul 7 12:53:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11648515 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 95AE5912 for ; Tue, 7 Jul 2020 12:58: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 6CCCD20773 for ; Tue, 7 Jul 2020 12:58:01 +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="E0JfvDek" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6CCCD20773 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:37494 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jsnAe-0004wE-LS for patchwork-qemu-devel@patchwork.kernel.org; Tue, 07 Jul 2020 08:58:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38170) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jsn7S-0007sz-0o for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:42 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:20703 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jsn7Q-0004oS-4a for qemu-devel@nongnu.org; Tue, 07 Jul 2020 08:54:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594126479; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=MNTlxHdwoZD1i7fR0/VxIsjSfZdUtlBEEDJL/FTCXj8=; b=E0JfvDekVN0Ufy23cw96yO0DpmIJt7QqPes335UVx52NlSLWbyq3w4ECfwTpM/+NXb0x8K d3nYVgv6oEhmDahQuZUqiaVXxZCBZt6CjiAuHfC7eur0oNxsl51DdIkytE/kx+K/KdKQRM bWEcQL2eYRvakqi0C7xIWd2lclBi+QU= 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-357-vdRgpab0Oyu0ysiBpjyUEQ-1; Tue, 07 Jul 2020 08:54:36 -0400 X-MC-Unique: vdRgpab0Oyu0ysiBpjyUEQ-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 0CCB38AF840; Tue, 7 Jul 2020 12:54:27 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id E570660BF3; Tue, 7 Jul 2020 12:54:20 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id CA71B31FAA; Tue, 7 Jul 2020 14:53:57 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v5 20/20] tests/acpi: update expected data files for microvm Date: Tue, 7 Jul 2020 14:53:56 +0200 Message-Id: <20200707125356.32450-21-kraxel@redhat.com> In-Reply-To: <20200707125356.32450-1-kraxel@redhat.com> References: <20200707125356.32450-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/07 00:46:09 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Igor Mammedov , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Also clear tests/qtest/bios-tables-test-allowed-diff.h Signed-off-by: Gerd Hoffmann --- tests/qtest/bios-tables-test-allowed-diff.h | 3 --- tests/data/acpi/microvm/APIC | Bin 0 -> 70 bytes tests/data/acpi/microvm/DSDT | Bin 0 -> 365 bytes tests/data/acpi/microvm/FACP | Bin 0 -> 268 bytes 4 files changed, 3 deletions(-) diff --git a/tests/data/acpi/microvm/APIC b/tests/data/acpi/microvm/APIC index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7472c7e830b6c7139720e93dd544d4441556661d 100644 GIT binary patch literal 70 zcmZ<^@N{-#U|?Xp?&R<65v<@85#a0y6k`O6f!H9Lf#JbFFwFr}2jnsGfW!{`1CcCj H|A7JkC_j6YE5wz#n_gs%GoenLN` zpW{k;$86@Fd(Irrxsi_M?+m~-VJ0WKAHL=?B917q*iIf_8y%W*_c&h3v1cYpDFd20*z#XX{ze8pGFMFpU84R0aBbPnKQWME*eb@F%i2v%^42yk`-iUEZfKx`0ARlp*^z`()4z{IrRAIMxM1_r8I SLD0QG`x&72gWSRhWdi`;u?ztK literal 0 HcmV?d00001 diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index 97c3fa621b7f..dfb8523c8bf4 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1,4 +1 @@ /* List of comma-separated changed AML files to ignore */ -"tests/data/acpi/microvm/APIC", -"tests/data/acpi/microvm/DSDT", -"tests/data/acpi/microvm/FACP",