From patchwork Wed May 25 11:23:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CB6F7C433EF for ; Wed, 25 May 2022 11:25:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9/yfpND9cnUt3+YPcAmyOsejSOvWBzXUYsEtaVy0oUo=; b=HdUt54BPibTbAH 4m3I/lIXSL8svuRVc2HH52nTKs4gqor2SBYKOqAXmu8PvhuVCWNyu6NB8uVmi8Q+SsCOzyiHXStAu TXYoAYQTH/8r8Mmt1r1YtdIoW0Kiwlo6cJoQihSoOA5T0PTBoP8TDgAyDBxy8/0LZkJ8wgvpjaZnt FuxZ/0Ql/zI24PEyyCMskVTqvy5vP+iyacJ+9eZDB6mqf6Kk5R90CwGAiaMpRGtc+V9ZZlaGaGHb8 eqA5Je0uZhWzvGzbvdl7eqWg3OQ1I3mp1F09gEkpqKqLTE5Yflg5g6sWAf1aIKVV8ovPkONR5N4dx vk3J+1+oaOF3zarPcjjg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7X-00At7F-D3; Wed, 25 May 2022 11:24:07 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp76-00Asxu-8k for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:42 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 83DC01042; Wed, 25 May 2022 04:23:39 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 84B823F800; Wed, 25 May 2022 04:23:37 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 01/13] Use MB for megabytes consistently Date: Wed, 25 May 2022 12:23:33 +0100 Message-Id: <20220525112345.121321-2-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042340_419178_21533059 X-CRM114-Status: GOOD ( 12.40 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The help text for the -m/--mem argument states that the guest memory size is in MiB (mebibyte). MiB is the same thing as MB (megabyte), and indeed this is how MB is used throughout kvmtool. Replace MiB with MB, so people don't get the wrong idea and start believing that for kvmtool a MB is 10^6 bytes instead of 2^20. Signed-off-by: Alexandru Elisei --- Documentation/kvmtool.1 | 4 ++-- builtin-run.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/kvmtool.1 b/Documentation/kvmtool.1 index 2b8c274dc3ff..25d46f8f51f9 100644 --- a/Documentation/kvmtool.1 +++ b/Documentation/kvmtool.1 @@ -10,7 +10,7 @@ kvmtool is a userland tool for creating and controlling KVM guests. .SH "KVMTOOL COMMANDS" .sp .PP -.B run -k [\-c ] [\-m ] [\-p ] +.B run -k [\-c ] [\-m ] [\-p ] .br .B [\-i ] [\-d ] [\-\-console serial|virtio|hv] .br @@ -30,7 +30,7 @@ The number of virtual CPUs to run. .sp .B \-m, \-\-mem .RS 4 -Virtual machine memory size in MiB. +Virtual machine memory size in MB. .RE .sp .B \-p, \-\-params diff --git a/builtin-run.c b/builtin-run.c index 9a1a0c1fa6fb..0126c9fbcba6 100644 --- a/builtin-run.c +++ b/builtin-run.c @@ -97,7 +97,7 @@ void kvm_run_set_wrapper_sandbox(void) "A name for the guest"), \ OPT_INTEGER('c', "cpus", &(cfg)->nrcpus, "Number of CPUs"), \ OPT_U64('m', "mem", &(cfg)->ram_size, "Virtual machine memory" \ - " size in MiB."), \ + " size in MB."), \ OPT_CALLBACK('d', "disk", kvm, "image or rootfs_dir", "Disk " \ " image or rootfs directory", img_name_parser, \ kvm), \ From patchwork Wed May 25 11:23:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861027 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B1B80C433EF for ; Wed, 25 May 2022 11:25:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=izJ/HG2QIoTOppQlU3KR9eAF00Vgg3tL0IaGd96C1Io=; b=tYbnTcyBsstkSv VR4u41VOj8H1obexXkOTknGml3g0YgHXgoe63xE7ipP+KKqsC2CfR52iYx382Ft0dtl3qi9nFnElE mJnNVU5+3dZKWgYRM49FfvAwpTPSKiA4MJB8QlvC9NA6VIruykTdvxqV9Jxj2c9Q1OAIEN40/xsF9 /3mqI0dp3QtXpWUsARlnXCMHJC6bpkzISVQoAqQgh3vfPXH8/hiYwIxiVqUVGtHs8jW2wpbGAT9Ri y4tFTDvOCFaLsXLphwC2xOUG0DP8g1hE0MqqJuD/k19DnHn40YSuDo9V1tdg7qTQiUYna95lhdWtF DPV+EUkE7H8pGrPNBRlw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7q-00AtAa-2f; Wed, 25 May 2022 11:24:26 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp78-00Asyk-JW for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:44 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 629401FB; Wed, 25 May 2022 04:23:41 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D1EF23F70D; Wed, 25 May 2022 04:23:39 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 02/13] sizes.h: Make all sizes 64bit Date: Wed, 25 May 2022 12:23:34 +0100 Message-Id: <20220525112345.121321-3-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042342_729333_EF1A6D86 X-CRM114-Status: UNSURE ( 7.41 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Append ULL to all of the size definitions to make them 64bit and avoid overflows. Reported-by: Andre Przywara Signed-off-by: Alexandru Elisei --- include/linux/sizes.h | 64 +++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/include/linux/sizes.h b/include/linux/sizes.h index ce3e8150c174..b2b5c457cf1c 100644 --- a/include/linux/sizes.h +++ b/include/linux/sizes.h @@ -8,40 +8,40 @@ #ifndef __LINUX_SIZES_H__ #define __LINUX_SIZES_H__ -#define SZ_1 0x00000001 -#define SZ_2 0x00000002 -#define SZ_4 0x00000004 -#define SZ_8 0x00000008 -#define SZ_16 0x00000010 -#define SZ_32 0x00000020 -#define SZ_64 0x00000040 -#define SZ_128 0x00000080 -#define SZ_256 0x00000100 -#define SZ_512 0x00000200 +#define SZ_1 0x00000001ULL +#define SZ_2 0x00000002ULL +#define SZ_4 0x00000004ULL +#define SZ_8 0x00000008ULL +#define SZ_16 0x00000010ULL +#define SZ_32 0x00000020ULL +#define SZ_64 0x00000040ULL +#define SZ_128 0x00000080ULL +#define SZ_256 0x00000100ULL +#define SZ_512 0x00000200ULL -#define SZ_1K 0x00000400 -#define SZ_2K 0x00000800 -#define SZ_4K 0x00001000 -#define SZ_8K 0x00002000 -#define SZ_16K 0x00004000 -#define SZ_32K 0x00008000 -#define SZ_64K 0x00010000 -#define SZ_128K 0x00020000 -#define SZ_256K 0x00040000 -#define SZ_512K 0x00080000 +#define SZ_1K 0x00000400ULL +#define SZ_2K 0x00000800ULL +#define SZ_4K 0x00001000ULL +#define SZ_8K 0x00002000ULL +#define SZ_16K 0x00004000ULL +#define SZ_32K 0x00008000ULL +#define SZ_64K 0x00010000ULL +#define SZ_128K 0x00020000ULL +#define SZ_256K 0x00040000ULL +#define SZ_512K 0x00080000ULL -#define SZ_1M 0x00100000 -#define SZ_2M 0x00200000 -#define SZ_4M 0x00400000 -#define SZ_8M 0x00800000 -#define SZ_16M 0x01000000 -#define SZ_32M 0x02000000 -#define SZ_64M 0x04000000 -#define SZ_128M 0x08000000 -#define SZ_256M 0x10000000 -#define SZ_512M 0x20000000 +#define SZ_1M 0x00100000ULL +#define SZ_2M 0x00200000ULL +#define SZ_4M 0x00400000ULL +#define SZ_8M 0x00800000ULL +#define SZ_16M 0x01000000ULL +#define SZ_32M 0x02000000ULL +#define SZ_64M 0x04000000ULL +#define SZ_128M 0x08000000ULL +#define SZ_256M 0x10000000ULL +#define SZ_512M 0x20000000ULL -#define SZ_1G 0x40000000 -#define SZ_2G 0x80000000 +#define SZ_1G 0x40000000ULL +#define SZ_2G 0x80000000ULL #endif /* __LINUX_SIZES_H__ */ From patchwork Wed May 25 11:23:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861028 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 47D46C433EF for ; Wed, 25 May 2022 11:25:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kfMK+e1h1tvRjiO8M2o6+EQYitGU+QVwKdopSOh4xSI=; b=3YZQRTO382rvhm yyzVC9lluWXyu2y+TB2k4+SX100JuBubytjttIRHocVJVq/qJSV8dy4eGE+qYnCVvA6ofGHu4Web4 VAPjGGV3rW5Q9CMcvMBRE19bQrU8ruf2XmRtbWlDSpDrOCZxVcHUZw74v4IZ06NgDZIXe5AMu7pYT tG6pyC9i2AjEUAL64JghDfNPFshBw9Lb/1n2K5XCcjrnyQvpVwjl3Uv/73J2NacFyDSYH3T3hd7tz nWyEvMpJERUI3YqoCEk+3h573WcKMP1l73vnW7aWna9Gond+Vbw69tp0/u1rBSlNDuoPnwsaf8JbA dDiMnBAJu+aGjNmD890w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp82-00AtDy-Jd; Wed, 25 May 2022 11:24:38 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7A-00Asyk-KE for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:46 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 792CA23A; Wed, 25 May 2022 04:23:43 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AFE3F3F70D; Wed, 25 May 2022 04:23:41 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 03/13] builtin-run: Always use RAM size in bytes Date: Wed, 25 May 2022 12:23:35 +0100 Message-Id: <20220525112345.121321-4-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042344_784267_DFFD1D91 X-CRM114-Status: GOOD ( 15.59 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The user can specify the virtual machine memory size in MB, which is saved in cfg->ram_size. kvmtool validates it against the host memory size, converted from bytes to MB. ram_size is then converted to bytes, and this is how it is used throughout the rest of kvmtool. To avoid any confusion about the unit of measurement, especially once the user is allowed to specify the unit of measurement, always use ram_size in bytes. Signed-off-by: Alexandru Elisei --- builtin-run.c | 19 ++++++++++--------- include/kvm/kvm-config.h | 7 ++++--- include/kvm/kvm.h | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/builtin-run.c b/builtin-run.c index 0126c9fbcba6..4fc7cbed1d17 100644 --- a/builtin-run.c +++ b/builtin-run.c @@ -36,6 +36,7 @@ #include #include +#include #include #include @@ -264,7 +265,7 @@ static u64 host_ram_size(void) return 0; } - return (nr_pages * page_size) >> MB_SHIFT; + return (u64)nr_pages * page_size; } /* @@ -278,11 +279,11 @@ static u64 get_ram_size(int nr_cpus) u64 available; u64 ram_size; - ram_size = 64 * (nr_cpus + 3); + ram_size = SZ_64M * (nr_cpus + 3); available = host_ram_size() * RAM_SIZE_RATIO; if (!available) - available = MIN_RAM_SIZE_MB; + available = MIN_RAM_SIZE; if (ram_size > available) ram_size = available; @@ -595,13 +596,13 @@ static struct kvm *kvm_cmd_run_init(int argc, const char **argv) if (!kvm->cfg.ram_size) kvm->cfg.ram_size = get_ram_size(kvm->cfg.nrcpus); + else + kvm->cfg.ram_size <<= MB_SHIFT; if (kvm->cfg.ram_size > host_ram_size()) pr_warning("Guest memory size %lluMB exceeds host physical RAM size %lluMB", - (unsigned long long)kvm->cfg.ram_size, - (unsigned long long)host_ram_size()); - - kvm->cfg.ram_size <<= MB_SHIFT; + (unsigned long long)kvm->cfg.ram_size >> MB_SHIFT, + (unsigned long long)host_ram_size() >> MB_SHIFT); if (!kvm->cfg.dev) kvm->cfg.dev = DEFAULT_KVM_DEV; @@ -676,12 +677,12 @@ static struct kvm *kvm_cmd_run_init(int argc, const char **argv) if (kvm->cfg.kernel_filename) { printf(" # %s run -k %s -m %Lu -c %d --name %s\n", KVM_BINARY_NAME, kvm->cfg.kernel_filename, - (unsigned long long)kvm->cfg.ram_size / 1024 / 1024, + (unsigned long long)kvm->cfg.ram_size >> MB_SHIFT, kvm->cfg.nrcpus, kvm->cfg.guest_name); } else if (kvm->cfg.firmware_filename) { printf(" # %s run --firmware %s -m %Lu -c %d --name %s\n", KVM_BINARY_NAME, kvm->cfg.firmware_filename, - (unsigned long long)kvm->cfg.ram_size / 1024 / 1024, + (unsigned long long)kvm->cfg.ram_size >> MB_SHIFT, kvm->cfg.nrcpus, kvm->cfg.guest_name); } diff --git a/include/kvm/kvm-config.h b/include/kvm/kvm-config.h index 6a5720c4c7d4..31bc89520d52 100644 --- a/include/kvm/kvm-config.h +++ b/include/kvm/kvm-config.h @@ -5,6 +5,8 @@ #include "kvm/vfio.h" #include "kvm/kvm-config-arch.h" +#include + #define DEFAULT_KVM_DEV "/dev/kvm" #define DEFAULT_CONSOLE "serial" #define DEFAULT_NETWORK "user" @@ -15,14 +17,13 @@ #define DEFAULT_SCRIPT "none" #define DEFAULT_SANDBOX_FILENAME "guest/sandbox.sh" -#define MIN_RAM_SIZE_MB (64ULL) -#define MIN_RAM_SIZE_BYTE (MIN_RAM_SIZE_MB << MB_SHIFT) +#define MIN_RAM_SIZE SZ_64M struct kvm_config { struct kvm_config_arch arch; struct disk_image_params disk_image[MAX_DISK_IMAGES]; struct vfio_device_params *vfio_devices; - u64 ram_size; + u64 ram_size; /* Guest memory size, in bytes */ u8 num_net_devices; u8 num_vfio_devices; u64 vsock_cid; diff --git a/include/kvm/kvm.h b/include/kvm/kvm.h index ad732e56f5ed..7b14b33b50ca 100644 --- a/include/kvm/kvm.h +++ b/include/kvm/kvm.h @@ -87,7 +87,7 @@ struct kvm { struct kvm_cpu **cpus; u32 mem_slots; /* for KVM_SET_USER_MEMORY_REGION */ - u64 ram_size; + u64 ram_size; /* Guest memory size, in bytes */ void *ram_start; u64 ram_pagesize; struct mutex mem_banks_lock; From patchwork Wed May 25 11:23:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861029 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1B3F5C433F5 for ; Wed, 25 May 2022 11:26:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3wb8MS/piSuXz1TLgJf1ceY31E1h6mZWBr5A/d+Yh6U=; b=BvMfCCBRitIPNg 8dd92ENGZLVqCDvD25PGDFQcW+3K0+vCO+VVUcxApsgOxAr87sNvVcWmmfkkFU0ap8J+gygzB/B1Q /fn7szDu3xdhV5WutuaSZoFNdEUCsmev07dpJOvxKFcBKP7S5XU/mllTnQyXb7CSalXycYtEaXdYn F4AVKs9/DWAB7vKAY3NMJyi7mD9Tczg0cz5MOvKvtZshQoxF8MckwVfwNceZAjg6pA1psSJ5CFr9W k9yhlshqaxQBT+IDbDKcwNKIA3tpxKE1MAbrrAzt4qxRkeBlQeUap/s6kxYydh6SpxUhP8aXQr1ov Nzk7IDNVpajmsvc7Zm3w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp8O-00AtLQ-7b; Wed, 25 May 2022 11:25:00 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7C-00At0M-7C for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:48 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 475711FB; Wed, 25 May 2022 04:23:45 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C65ED3F70D; Wed, 25 May 2022 04:23:43 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 04/13] builtin-run: Rework RAM size validation Date: Wed, 25 May 2022 12:23:36 +0100 Message-Id: <20220525112345.121321-5-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042346_401108_FF2E4A2A X-CRM114-Status: GOOD ( 13.37 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org host_ram_size() uses sysconf() to calculate the available ram, and sysconf() can fail. When that happens, host_ram_size() returns 0. kvmtool warns the user when the configured VM ram size exceeds the size of the host's memory, but doesn't take into account that host_ram_size() can return 0. If the function returns zero, skip the warning. Since this can only happen when the user sets the memory size (via the -m/--mem command line argument), skip the check entirely if the user hasn't set it. Move the check to kvm_run_validate_cfg(), as it checks for valid user configuration. Signed-off-by: Alexandru Elisei Reviewed-by: Andre Przywara --- builtin-run.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/builtin-run.c b/builtin-run.c index 4fc7cbed1d17..b1accbce7da3 100644 --- a/builtin-run.c +++ b/builtin-run.c @@ -509,6 +509,8 @@ static void kvm_run_set_real_cmdline(struct kvm *kvm) static void kvm_run_validate_cfg(struct kvm *kvm) { + u64 available_ram; + if (kvm->cfg.kernel_filename && kvm->cfg.firmware_filename) die("Only one of --kernel or --firmware can be specified"); @@ -518,6 +520,17 @@ static void kvm_run_validate_cfg(struct kvm *kvm) if (kvm->cfg.firmware_filename && kvm->cfg.initrd_filename) pr_warning("Ignoring initrd file when loading a firmware image"); + + if (kvm->cfg.ram_size) { + /* User specifies RAM size in megabytes. */ + kvm->cfg.ram_size <<= MB_SHIFT; + available_ram = host_ram_size(); + if (available_ram && kvm->cfg.ram_size > available_ram) { + pr_warning("Guest memory size %lluMB exceeds host physical RAM size %lluMB", + (unsigned long long)kvm->cfg.ram_size >> MB_SHIFT, + (unsigned long long)available_ram >> MB_SHIFT); + } + } } static struct kvm *kvm_cmd_run_init(int argc, const char **argv) @@ -596,13 +609,6 @@ static struct kvm *kvm_cmd_run_init(int argc, const char **argv) if (!kvm->cfg.ram_size) kvm->cfg.ram_size = get_ram_size(kvm->cfg.nrcpus); - else - kvm->cfg.ram_size <<= MB_SHIFT; - - if (kvm->cfg.ram_size > host_ram_size()) - pr_warning("Guest memory size %lluMB exceeds host physical RAM size %lluMB", - (unsigned long long)kvm->cfg.ram_size >> MB_SHIFT, - (unsigned long long)host_ram_size() >> MB_SHIFT); if (!kvm->cfg.dev) kvm->cfg.dev = DEFAULT_KVM_DEV; From patchwork Wed May 25 11:23:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861030 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 79A82C433F5 for ; Wed, 25 May 2022 11:26:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zPA0oPMHLJCA44lEgO49z71+MtQlSdvIfSHV5767fQo=; b=f1KezmHL2Puo4e FXDzy0qLqcOjNyqA9DYNrtKvPM53sq2QLuo9YtynDJPA7Q4oNS7TQId3tRgJi0NYW0q5gJn7jJVVv v7z7ufdks8vFGeKHT6WBRchv/8VzVMfWPQJtQHmETlp+eQOSmGKOGdeIlEZt0SL/DIkuS+NJe4yJY XVRHxxFT5NEonqKXNpTP7tzEQO+mArTb1tqI0+q6uyshNFGXICddWeOYEXpKOzfNmoaTTye8iBilZ VMg13UV4xngYiXNWciSyPaaEbCFThGRwr8jpbw7vOnIKXK/wJNikuf6E3Dpz8q8chorFdgy7Xnmh8 7/rysOiEyj1MVIsCuXFA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp8b-00AtQY-9T; Wed, 25 May 2022 11:25:13 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7D-00Asyk-NQ for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:49 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 59E5E1042; Wed, 25 May 2022 04:23:47 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 94A353F70D; Wed, 25 May 2022 04:23:45 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 05/13] builtin-run: Add arch hook to validate VM configuration Date: Wed, 25 May 2022 12:23:37 +0100 Message-Id: <20220525112345.121321-6-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042347_917749_5F2BE703 X-CRM114-Status: GOOD ( 16.11 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Architectures are free to set their own command line options. Add an architecture specific hook to validate these options. For now, the hook does nothing, but it will be used in later patches. Signed-off-by: Alexandru Elisei --- Makefile | 1 + arm/aarch32/kvm.c | 5 +++++ arm/aarch64/kvm.c | 4 ++++ builtin-run.c | 2 ++ include/kvm/kvm.h | 1 + mips/kvm.c | 4 ++++ powerpc/kvm.c | 4 ++++ riscv/kvm.c | 4 ++++ x86/kvm.c | 4 ++++ 9 files changed, 29 insertions(+) create mode 100644 arm/aarch32/kvm.c diff --git a/Makefile b/Makefile index 9e67c7637b1e..25d79637b561 100644 --- a/Makefile +++ b/Makefile @@ -168,6 +168,7 @@ ifeq ($(ARCH), arm) OBJS += $(OBJS_ARM_COMMON) OBJS += arm/aarch32/arm-cpu.o OBJS += arm/aarch32/kvm-cpu.o + OBJS += arm/aarch32/kvm.o ARCH_INCLUDE := $(HDRS_ARM_COMMON) ARCH_INCLUDE += -Iarm/aarch32/include CFLAGS += -march=armv7-a diff --git a/arm/aarch32/kvm.c b/arm/aarch32/kvm.c new file mode 100644 index 000000000000..ae33ac92479a --- /dev/null +++ b/arm/aarch32/kvm.c @@ -0,0 +1,5 @@ +#include "kvm/kvm.h" + +void kvm__arch_validate_cfg(struct kvm *kvm) +{ +} diff --git a/arm/aarch64/kvm.c b/arm/aarch64/kvm.c index f3fe854e0b3f..ca348f118a56 100644 --- a/arm/aarch64/kvm.c +++ b/arm/aarch64/kvm.c @@ -37,6 +37,10 @@ int vcpu_affinity_parser(const struct option *opt, const char *arg, int unset) return 0; } +void kvm__arch_validate_cfg(struct kvm *kvm) +{ +} + /* * Return the TEXT_OFFSET value that the guest kernel expects. Note * that pre-3.17 kernels expose this value using the native endianness diff --git a/builtin-run.c b/builtin-run.c index b1accbce7da3..2ef159cdb2a3 100644 --- a/builtin-run.c +++ b/builtin-run.c @@ -531,6 +531,8 @@ static void kvm_run_validate_cfg(struct kvm *kvm) (unsigned long long)available_ram >> MB_SHIFT); } } + + kvm__arch_validate_cfg(kvm); } static struct kvm *kvm_cmd_run_init(int argc, const char **argv) diff --git a/include/kvm/kvm.h b/include/kvm/kvm.h index 7b14b33b50ca..9f7b2fb26e95 100644 --- a/include/kvm/kvm.h +++ b/include/kvm/kvm.h @@ -187,6 +187,7 @@ int kvm__get_sock_by_instance(const char *name); int kvm__enumerate_instances(int (*callback)(const char *name, int pid)); void kvm__remove_socket(const char *name); +void kvm__arch_validate_cfg(struct kvm *kvm); void kvm__arch_set_cmdline(char *cmdline, bool video); void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size); void kvm__arch_delete_ram(struct kvm *kvm); diff --git a/mips/kvm.c b/mips/kvm.c index 3470dbb2e433..f5b137f46dff 100644 --- a/mips/kvm.c +++ b/mips/kvm.c @@ -12,6 +12,10 @@ struct kvm_ext kvm_req_ext[] = { { 0, 0 } }; +void kvm__arch_validate_cfg(struct kvm *kvm) +{ +} + void kvm__arch_read_term(struct kvm *kvm) { virtio_console__inject_interrupt(kvm); diff --git a/powerpc/kvm.c b/powerpc/kvm.c index 702d67dca614..3215b579f5dc 100644 --- a/powerpc/kvm.c +++ b/powerpc/kvm.c @@ -48,6 +48,10 @@ struct kvm_ext kvm_req_ext[] = { { 0, 0 } }; +void kvm__arch_validate_cfg(struct kvm *kvm) +{ +} + static uint32_t mfpvr(void) { uint32_t r; diff --git a/riscv/kvm.c b/riscv/kvm.c index 84e02779a91c..7fb496282f4c 100644 --- a/riscv/kvm.c +++ b/riscv/kvm.c @@ -13,6 +13,10 @@ struct kvm_ext kvm_req_ext[] = { { 0, 0 }, }; +void kvm__arch_validate_cfg(struct kvm *kvm) +{ +} + bool kvm__arch_cpu_supports_vm(void) { /* The KVM capability check is enough. */ diff --git a/x86/kvm.c b/x86/kvm.c index 3e0f0b743f8c..6683a5c81d49 100644 --- a/x86/kvm.c +++ b/x86/kvm.c @@ -35,6 +35,10 @@ struct kvm_ext kvm_req_ext[] = { { 0, 0 } }; +void kvm__arch_validate_cfg(struct kvm *kvm) +{ +} + bool kvm__arch_cpu_supports_vm(void) { struct cpuid_regs regs; From patchwork Wed May 25 11:23:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861031 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 01CE6C433F5 for ; Wed, 25 May 2022 11:26:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=E+9SYvkkj0UtY5rQnIdpSEabX857YRDvrb91tPu22yE=; b=c2i3LSL72ZPYS8 R3TaZM4rMtd64r/us1D+phj82eNkH1hsaBX/IygREKknko29L2I2dm73nK3QWy+y3Rg1t2hXUzR5N s+Ny0J/dM6uhjGDsK2HolJb7AwnYgFsTWnikq6ZsMfzIlFNwUlS+bfG1vmr3C8XsYdrDlk4A7m49s UlC+9eg34qw+UVrkYYlHS7JW5UEyA4pip6npWP3mW7W3IlUsbGQXPFHljTHSHJ0ubKJAF75d+MoPH FJ0lNCtCNNkujPCd+UGZhYdNYrgHKmD6SbU5ZswOXx0Svx5vJgHYI04oy12vPYr6ieSAsATRi1xLS s5o+HT9hy62XGnWc/pRg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp95-00AtcQ-K8; Wed, 25 May 2022 11:25:43 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7F-00At0M-J4 for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:51 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4CC881FB; Wed, 25 May 2022 04:23:49 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A72D53F70D; Wed, 25 May 2022 04:23:47 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 06/13] arm/arm64: Fail if RAM size is too large for 32-bit guests Date: Wed, 25 May 2022 12:23:38 +0100 Message-Id: <20220525112345.121321-7-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042349_729634_E56EE6F7 X-CRM114-Status: GOOD ( 11.81 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org For 64-bit guests, kvmtool exists with an error in kvm__get_vm_type() if the memory size is larger than what KVM supports. For 32-bit guests, the RAM size is silently rounded down to ARM_LOMAP_MAX_MEMORY in kvm__arch_init(). Be consistent and exit with an error when the user has configured the wrong RAM size for 32-bit guests. Signed-off-by: Alexandru Elisei Reviewed-by: Andre Przywara --- arm/aarch32/kvm.c | 4 ++++ arm/aarch64/kvm.c | 5 +++++ arm/kvm.c | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/arm/aarch32/kvm.c b/arm/aarch32/kvm.c index ae33ac92479a..9d68d7a15ee2 100644 --- a/arm/aarch32/kvm.c +++ b/arm/aarch32/kvm.c @@ -2,4 +2,8 @@ void kvm__arch_validate_cfg(struct kvm *kvm) { + if (kvm->cfg.ram_size > ARM_LOMAP_MAX_MEMORY) { + die("RAM size 0x%llx exceeds maximum allowed 0x%llx", + kvm->cfg.ram_size, ARM_LOMAP_MAX_MEMORY); + } } diff --git a/arm/aarch64/kvm.c b/arm/aarch64/kvm.c index ca348f118a56..2134528bf7f2 100644 --- a/arm/aarch64/kvm.c +++ b/arm/aarch64/kvm.c @@ -39,6 +39,11 @@ int vcpu_affinity_parser(const struct option *opt, const char *arg, int unset) void kvm__arch_validate_cfg(struct kvm *kvm) { + if (kvm->cfg.arch.aarch32_guest && + kvm->cfg.ram_size > ARM_LOMAP_MAX_MEMORY) { + die("RAM size 0x%llx exceeds maximum allowed 0x%llx", + kvm->cfg.ram_size, ARM_LOMAP_MAX_MEMORY); + } } /* diff --git a/arm/kvm.c b/arm/kvm.c index c5913000e1ed..af0feae495d7 100644 --- a/arm/kvm.c +++ b/arm/kvm.c @@ -65,7 +65,7 @@ void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size) * If using THP, then our minimal alignment becomes 2M. * 2M trumps 64K, so let's go with that. */ - kvm->ram_size = min(ram_size, (u64)ARM_MAX_MEMORY(kvm)); + kvm->ram_size = ram_size; kvm->arch.ram_alloc_size = kvm->ram_size + SZ_2M; kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm, hugetlbfs_path, kvm->arch.ram_alloc_size); From patchwork Wed May 25 11:23:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861032 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2DB2FC433FE for ; Wed, 25 May 2022 11:27:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2MTlipO/nbxWzkxx5+u3sA41mscmR1fSvUk4XGtff/g=; b=UAKT3xb72aFWaB ipRz8BNLZomj8ZgHYIoKSwTX4Gv0QQ6AUUxgv3RD/pqgWMo42ILCZF4dPJBiG+gP1UUh9VkvwU96O tN8ItVLyPOJb31AMFDxFhO25pQiLwOMr4t+5EQVKVkHmmUXDG8qCizo86TY37Dr5Q3OL767s2dlkS SI7ZuncB7ONviSUEO1sb/ctsERghKVM1dDh5/EUEgR0xS4/+NjGxdLiCWg644PjtgGRdHvcHuOebe oUpM/wZK7U+mnPYqOGm2yKuGprNsChC0ePutEPFyYWxMcZaKPsEes6fT8TU5gcrmv0nlGkxGia/t6 NwPKG/Cpa4J1D0cMgdUw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp9H-00Atix-Nw; Wed, 25 May 2022 11:25:55 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7H-00At0M-Cm for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:52 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1CB9623A; Wed, 25 May 2022 04:23:51 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 99F073F70D; Wed, 25 May 2022 04:23:49 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 07/13] arm/arm64: Kill the ARM_MAX_MEMORY() macro Date: Wed, 25 May 2022 12:23:39 +0100 Message-Id: <20220525112345.121321-8-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042351_516952_005D58E0 X-CRM114-Status: UNSURE ( 9.11 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org For 32-bit guests, the maximum memory size is represented by the define ARM_LOMAP_MAX_MEMORY, which ARM_MAX_MEMORY() returns. For 64-bit guests, the RAM size is checked against the maximum allowed by KVM in kvm__get_vm_type(). There are no users left for the ARM_MAX_MEMORY() macro, remove it. Signed-off-by: Alexandru Elisei Reviewed-by: Andre Przywara --- arm/aarch32/include/kvm/kvm-arch.h | 2 -- arm/aarch64/include/kvm/kvm-arch.h | 16 ---------------- 2 files changed, 18 deletions(-) diff --git a/arm/aarch32/include/kvm/kvm-arch.h b/arm/aarch32/include/kvm/kvm-arch.h index 5616b27e257e..467fb09175b8 100644 --- a/arm/aarch32/include/kvm/kvm-arch.h +++ b/arm/aarch32/include/kvm/kvm-arch.h @@ -8,8 +8,6 @@ struct kvm; static inline void kvm__arch_enable_mte(struct kvm *kvm) {} -#define ARM_MAX_MEMORY(...) ARM_LOMAP_MAX_MEMORY - #define MAX_PAGE_SIZE SZ_4K #include "arm-common/kvm-arch.h" diff --git a/arm/aarch64/include/kvm/kvm-arch.h b/arm/aarch64/include/kvm/kvm-arch.h index 9124f6919d0f..ff857ca6e7b4 100644 --- a/arm/aarch64/include/kvm/kvm-arch.h +++ b/arm/aarch64/include/kvm/kvm-arch.h @@ -8,22 +8,6 @@ unsigned long long kvm__arch_get_kern_offset(struct kvm *kvm, int fd); int kvm__arch_get_ipa_limit(struct kvm *kvm); void kvm__arch_enable_mte(struct kvm *kvm); -#define ARM_MAX_MEMORY(kvm) ({ \ - u64 max_ram; \ - \ - if ((kvm)->cfg.arch.aarch32_guest) { \ - max_ram = ARM_LOMAP_MAX_MEMORY; \ - } else { \ - int ipabits = kvm__arch_get_ipa_limit(kvm); \ - if (ipabits <= 0) \ - max_ram = ARM_HIMAP_MAX_MEMORY; \ - else \ - max_ram = (1ULL << ipabits) - ARM_MEMORY_AREA; \ - } \ - \ - max_ram; \ -}) - #define MAX_PAGE_SIZE SZ_64K #include "arm-common/kvm-arch.h" From patchwork Wed May 25 11:23:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861033 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4C7EEC433F5 for ; Wed, 25 May 2022 11:27:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZFIM0hci2Xvk9eLW3BIZxnFsp7QYP7q6RutGLQCJLXM=; b=TH1c+YBH2mPx2d IGLbnizTZYXKr5/RQt3nVGgxnqy3mk98ntUAlqFheID0zNBA6qqlMwkOku628w2ENhMsqieC9Zfm5 ytZZgEdmnJuz5qwVQlpDpbHV6Co4aMcCWxlMNfpp54Jl8XZkFNxPovN/UJXlhwOPNDTm3qf6DEA9C g5VXExAiaVlMCxbL8QGXfB9fYRqhyLzqD1oDZzCFgn9Shqu+xtTTPmXu0st2ayX3S5/j/tLfCXbXP 7WCKJoVY0MsDBfRrUL8GpqXYZljPzF/Mqd3cZ1FFyX484BxT+dREbU5K6lJtKd5imx99KmQb42CW2 /yr6aA44XFgOSBd4y3ow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp9W-00Atqb-Qe; Wed, 25 May 2022 11:26:11 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7J-00At3P-O5 for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:55 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E11EF1FB; Wed, 25 May 2022 04:23:52 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6A9633F70D; Wed, 25 May 2022 04:23:51 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 08/13] arm/arm64: Kill the ARM_HIMAP_MAX_MEMORY() macro Date: Wed, 25 May 2022 12:23:40 +0100 Message-Id: <20220525112345.121321-9-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042353_893593_3B23A50C X-CRM114-Status: UNSURE ( 8.53 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The ARM_HIMAP_MAX_MEMORY() is a remnant of a time when KVM only supported 40 bits if IPA. There are no users left for this macro, remove it. Signed-off-by: Alexandru Elisei Reviewed-by: Andre Przywara --- arm/include/arm-common/kvm-arch.h | 1 - 1 file changed, 1 deletion(-) diff --git a/arm/include/arm-common/kvm-arch.h b/arm/include/arm-common/kvm-arch.h index fc55360d4d15..6d80aac17125 100644 --- a/arm/include/arm-common/kvm-arch.h +++ b/arm/include/arm-common/kvm-arch.h @@ -65,7 +65,6 @@ #define ARM_LOMAP_MAX_MEMORY ((1ULL << 32) - ARM_MEMORY_AREA) -#define ARM_HIMAP_MAX_MEMORY ((1ULL << 40) - ARM_MEMORY_AREA) #define KVM_IOEVENTFD_HAS_PIO 0 From patchwork Wed May 25 11:23:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861053 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A1848C433FE for ; Wed, 25 May 2022 11:27:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MB0Zu+T842TK1vPkJUE1EdlL+iEVYQfbIbXK5Atn8kA=; b=k5YtCQivXNXFHR P59T5uHrKm7nE6meg1KUJVaACUAXof4ZbQk0uJkj7JZ6wBEej7UPWjGPg0iAE0F2ivw+x7cDlu6/i qmECvJ5Ct+AfcP6pS2BbRwvH1vNDsiBZyh34qklqczTm9ChllPZ0ux8U3mAgJZ4sb+M3TZNJjvaUn h8xx1s8ntdlTq2VyzxyM+0TsenouVn351V+iDkiWW/8KEupDMNRWKwimQ9m3GC6KppjaDx6/d38au fscX7otYI2mS3dSx7GQizXanUVMU20CbSykH/u3sNhcjhKxNRk7+UfqpWS2NsVnKkKO3XvXRGGpJY diCGnpr73LWLt5tGbJsw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp9o-00Au0x-Sp; Wed, 25 May 2022 11:26:29 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7M-00At4H-04 for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:23:59 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F40E623A; Wed, 25 May 2022 04:23:54 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3A5663F70D; Wed, 25 May 2022 04:23:53 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 09/13] builtin_run: Allow standard size specifiers for memory Date: Wed, 25 May 2022 12:23:41 +0100 Message-Id: <20220525112345.121321-10-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042356_254962_DB583ABE X-CRM114-Status: GOOD ( 15.26 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Suzuki K Poulose Allow the user to use the standard B (bytes), K (kilobytes), M (megabytes), G (gigabytes), T (terabytes) and P (petabytes) suffixes for memory size. When none are specified, the default is megabytes. Also raise an error if the guest specifies 0 as the memory size, instead of treating it as uninitialized, as kvmtool has done so far. Signed-off-by: Suzuki K Poulose Signed-off-by: Alexandru Elisei --- builtin-run.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/builtin-run.c b/builtin-run.c index 2ef159cdb2a3..a49698d5b2fe 100644 --- a/builtin-run.c +++ b/builtin-run.c @@ -49,9 +49,11 @@ #include #include -#define MB_SHIFT (20) #define KB_SHIFT (10) +#define MB_SHIFT (20) #define GB_SHIFT (30) +#define TB_SHIFT (40) +#define PB_SHIFT (50) __thread struct kvm_cpu *current_kvm_cpu; @@ -87,6 +89,60 @@ void kvm_run_set_wrapper_sandbox(void) kvm_run_wrapper = KVM_RUN_SANDBOX; } +static int parse_mem_unit(char **next) +{ + int shift = -1; + + switch (**next) { + case 'B': case 'b': shift = 0; break; + case 'K': case 'k': shift = KB_SHIFT; break; + case 'M': case 'm': shift = MB_SHIFT; break; + case 'G': case 'g': shift = GB_SHIFT; break; + case 'T': case 't': shift = TB_SHIFT; break; + case 'P': case 'p': shift = PB_SHIFT; break; + } + + if (shift == -1) { + /* The default is megabytes. */ + shift = MB_SHIFT; + } else { + (*next)++; + } + + return shift; +} + +static u64 parse_mem_option(const char *nptr, char **next) +{ + u64 shift; + u64 val; + + val = strtoull(nptr, next, 10); + if (errno == ERANGE) + die("Memory too large: %s", nptr); + shift = parse_mem_unit(next); + + if ((val << shift) < val) + die("Memory too large: %s", nptr); + + return val << shift; +} + +static int mem_parser(const struct option *opt, const char *arg, int unset) +{ + struct kvm *kvm = opt->ptr; + char *next; + + kvm->cfg.ram_size = parse_mem_option(arg, &next); + if (kvm->cfg.ram_size == 0) + die("Invalid RAM size: %s", arg); + + if (*next != '\0') + die("Invalid memory specifier: %s", arg); + + return 0; +} + #ifndef OPT_ARCH_RUN #define OPT_ARCH_RUN(...) #endif @@ -97,8 +153,9 @@ void kvm_run_set_wrapper_sandbox(void) OPT_STRING('\0', "name", &(cfg)->guest_name, "guest name", \ "A name for the guest"), \ OPT_INTEGER('c', "cpus", &(cfg)->nrcpus, "Number of CPUs"), \ - OPT_U64('m', "mem", &(cfg)->ram_size, "Virtual machine memory" \ - " size in MB."), \ + OPT_CALLBACK('m', "mem", NULL, "size[BKMGTP]", \ + "Virtual machine memory size, by default measured" \ + " in megabytes (M)", mem_parser, kvm), \ OPT_CALLBACK('d', "disk", kvm, "image or rootfs_dir", "Disk " \ " image or rootfs directory", img_name_parser, \ kvm), \ @@ -522,8 +579,6 @@ static void kvm_run_validate_cfg(struct kvm *kvm) pr_warning("Ignoring initrd file when loading a firmware image"); if (kvm->cfg.ram_size) { - /* User specifies RAM size in megabytes. */ - kvm->cfg.ram_size <<= MB_SHIFT; available_ram = host_ram_size(); if (available_ram && kvm->cfg.ram_size > available_ram) { pr_warning("Guest memory size %lluMB exceeds host physical RAM size %lluMB", From patchwork Wed May 25 11:23:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861054 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8D33CC433F5 for ; Wed, 25 May 2022 11:27:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WAPe3yX+nnbPu8UADNVCyhKSjcnl2lrOpRZxRmWew/0=; b=TzUQm6NOcv31BS M+ujBKYMH9lKUG3BgR0P4mq5IE8kZ08Xt3GrySM6Oovof5k+hToEGrpzv/WDfn612/U5rK6RQXBYD yB6Z/E1mDwGQ8ljBiFL6b4wdLjDDo0phf86x0+Vo+Ftbc5ewnl/W8+Wu9QXOqaHX+qzYfMWFZ9RHq cuRG1MXUhSJRCWIg3LsLrLX44MWX1JB135wzgW3fJJ7SDvaRYnI5lMz0EpAtYRphe6x3uJSgg1RQQ QCczLps9BbxVtod1YSro+CWW5gd1jkU3BBIqcjAYT37vipR0UondjG/xwdZL1v1g1+jgTcZP4K8yM zMyB7YZPTf6xh5G3SezQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntpA2-00Au8r-9a; Wed, 25 May 2022 11:26:42 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7O-00At51-7m for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:24:02 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 600B01FB; Wed, 25 May 2022 04:23:57 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4D5C93F70D; Wed, 25 May 2022 04:23:55 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Cc: Julien Grall Subject: [PATCH v3 kvmtool 10/13] kvm__arch_init: Remove hugetlbfs_path and ram_size as parameters Date: Wed, 25 May 2022 12:23:42 +0100 Message-Id: <20220525112345.121321-11-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042358_454004_2128DF5E X-CRM114-Status: GOOD ( 13.01 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Julien Grall The kvm struct already contains a pointer to the configuration, which contains both hugetlbfs_path and ram_size, so is it not necessary to pass them as arguments to kvm__arch_init(). Signed-off-by: Julien Grall Signed-off-by: Alexandru Elisei Reviewed-by: Andre Przywara --- arm/kvm.c | 7 ++++--- include/kvm/kvm.h | 2 +- kvm.c | 2 +- mips/kvm.c | 7 ++++--- powerpc/kvm.c | 5 +++-- riscv/kvm.c | 7 ++++--- x86/kvm.c | 4 +++- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/arm/kvm.c b/arm/kvm.c index af0feae495d7..bd44aa350796 100644 --- a/arm/kvm.c +++ b/arm/kvm.c @@ -57,7 +57,7 @@ void kvm__arch_set_cmdline(char *cmdline, bool video) { } -void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size) +void kvm__arch_init(struct kvm *kvm) { /* * Allocate guest memory. We must align our buffer to 64K to @@ -65,9 +65,10 @@ void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size) * If using THP, then our minimal alignment becomes 2M. * 2M trumps 64K, so let's go with that. */ - kvm->ram_size = ram_size; + kvm->ram_size = kvm->cfg.ram_size; kvm->arch.ram_alloc_size = kvm->ram_size + SZ_2M; - kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm, hugetlbfs_path, + kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm, + kvm->cfg.hugetlbfs_path, kvm->arch.ram_alloc_size); if (kvm->arch.ram_alloc_start == MAP_FAILED) diff --git a/include/kvm/kvm.h b/include/kvm/kvm.h index 9f7b2fb26e95..640b76c095f9 100644 --- a/include/kvm/kvm.h +++ b/include/kvm/kvm.h @@ -189,7 +189,7 @@ void kvm__remove_socket(const char *name); void kvm__arch_validate_cfg(struct kvm *kvm); void kvm__arch_set_cmdline(char *cmdline, bool video); -void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size); +void kvm__arch_init(struct kvm *kvm); void kvm__arch_delete_ram(struct kvm *kvm); int kvm__arch_setup_firmware(struct kvm *kvm); int kvm__arch_free_firmware(struct kvm *kvm); diff --git a/kvm.c b/kvm.c index 952ef1fbb41c..42b881217df6 100644 --- a/kvm.c +++ b/kvm.c @@ -479,7 +479,7 @@ int kvm__init(struct kvm *kvm) goto err_vm_fd; } - kvm__arch_init(kvm, kvm->cfg.hugetlbfs_path, kvm->cfg.ram_size); + kvm__arch_init(kvm); INIT_LIST_HEAD(&kvm->mem_banks); kvm__init_ram(kvm); diff --git a/mips/kvm.c b/mips/kvm.c index f5b137f46dff..d8610cf81b94 100644 --- a/mips/kvm.c +++ b/mips/kvm.c @@ -61,12 +61,13 @@ void kvm__arch_set_cmdline(char *cmdline, bool video) } /* Architecture-specific KVM init */ -void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size) +void kvm__arch_init(struct kvm *kvm) { int ret; - kvm->ram_start = mmap_anon_or_hugetlbfs(kvm, hugetlbfs_path, ram_size); - kvm->ram_size = ram_size; + kvm->ram_size = kvm->cfg.ram_size; + kvm->ram_start = mmap_anon_or_hugetlbfs(kvm, kvm->cfg.hugetlbfs_path, + kvm->ram_size); if (kvm->ram_start == MAP_FAILED) die("out of memory"); diff --git a/powerpc/kvm.c b/powerpc/kvm.c index 3215b579f5dc..d281b070fd0e 100644 --- a/powerpc/kvm.c +++ b/powerpc/kvm.c @@ -92,12 +92,13 @@ void kvm__arch_set_cmdline(char *cmdline, bool video) } /* Architecture-specific KVM init */ -void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size) +void kvm__arch_init(struct kvm *kvm) { + const char *hugetlbfs_path = kvm->cfg.hugetlbfs_path; int cap_ppc_rma; unsigned long hpt; - kvm->ram_size = ram_size; + kvm->ram_size = kvm->cfg.ram_size; /* Map "default" hugetblfs path to the standard 16M mount point */ if (hugetlbfs_path && !strcmp(hugetlbfs_path, "default")) diff --git a/riscv/kvm.c b/riscv/kvm.c index 7fb496282f4c..c46660772aa0 100644 --- a/riscv/kvm.c +++ b/riscv/kvm.c @@ -56,7 +56,7 @@ void kvm__arch_set_cmdline(char *cmdline, bool video) { } -void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size) +void kvm__arch_init(struct kvm *kvm) { /* * Allocate guest memory. We must align our buffer to 64K to @@ -64,9 +64,10 @@ void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size) * If using THP, then our minimal alignment becomes 2M. * 2M trumps 64K, so let's go with that. */ - kvm->ram_size = min(ram_size, (u64)RISCV_MAX_MEMORY(kvm)); + kvm->ram_size = min(kvm->cfg.ram_size, (u64)RISCV_MAX_MEMORY(kvm)); kvm->arch.ram_alloc_size = kvm->ram_size + SZ_2M; - kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm, hugetlbfs_path, + kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm, + kvm->cfg.hugetlbfs_path, kvm->arch.ram_alloc_size); if (kvm->arch.ram_alloc_start == MAP_FAILED) diff --git a/x86/kvm.c b/x86/kvm.c index 6683a5c81d49..24b0305a1841 100644 --- a/x86/kvm.c +++ b/x86/kvm.c @@ -134,9 +134,11 @@ void kvm__arch_set_cmdline(char *cmdline, bool video) } /* Architecture-specific KVM init */ -void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size) +void kvm__arch_init(struct kvm *kvm) { + const char *hugetlbfs_path = kvm->cfg.hugetlbfs_path; struct kvm_pit_config pit_config = { .flags = 0, }; + u64 ram_size = kvm->cfg.ram_size; int ret; ret = ioctl(kvm->vm_fd, KVM_SET_TSS_ADDR, 0xfffbd000); From patchwork Wed May 25 11:23:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861055 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1CA81C433EF for ; Wed, 25 May 2022 11:28:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=bW9dVy48syr1vh3lqMwURQnyJEMW0LZkjtnctQuCiL8=; b=HxLK/Nhlxr61AS a4pQoMcxCpmpoZzzkkrsbm5407RIUzIXvZB9C56Y5zr9xiFZckEGxn7wK2QInFWiqId1m45jrTXE5 1JNBvCDLgIdnbLkqE8yvSMi7rG1cZo4a8nMjpokzj+FA88NFFh070DfmSfDX7WS4Npmqa6rFevyyE 6ExX7KS0Bh8NAyZFyqgyL58pxv8rNRccD58PQ2w4eMWGBhlQOS9rWOx1iOvpTvS5c/XgW8m5RR9W/ sBAAVHGoBWvpXz1h42w9qbYQLGIC+Y1Y71GHD4wOclCRQYDX7CAVrAsFjKvewhbHuNqlDMKtZ3oPg UIsNdfJ55ROtzO1xJtFQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntpAK-00AuJW-BT; Wed, 25 May 2022 11:27:00 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7Q-00At5Z-AH for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:24:04 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7557323A; Wed, 25 May 2022 04:23:59 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AFF873F70D; Wed, 25 May 2022 04:23:57 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Cc: Julien Grall Subject: [PATCH v3 kvmtool 11/13] arm/arm64: Consolidate RAM initialization in kvm__init_ram() Date: Wed, 25 May 2022 12:23:43 +0100 Message-Id: <20220525112345.121321-12-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042400_541663_8AB31FE1 X-CRM114-Status: GOOD ( 13.63 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Julien Grall RAM initialization is unnecessarily split between kvm__init_ram() and kvm__arch_init(). Move all code related to RAM initialization to kvm__init_ram(), making the code easier to follow and to modify. One thing to note is that the initialization order is slightly altered: kvm__arch_enable_mte() and gic__create() are now called before mmap'ing the guest RAM. That is perfectly fine, as they don't use the host's mapping of the guest memory. Signed-off-by: Julien Grall Signed-off-by: Alexandru Elisei Reviewed-by: Andre Przywara --- arm/kvm.c | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/arm/kvm.c b/arm/kvm.c index bd44aa350796..abcccfabf59e 100644 --- a/arm/kvm.c +++ b/arm/kvm.c @@ -26,9 +26,34 @@ bool kvm__arch_cpu_supports_vm(void) void kvm__init_ram(struct kvm *kvm) { - int err; u64 phys_start, phys_size; void *host_mem; + int err; + + /* + * Allocate guest memory. We must align our buffer to 64K to + * correlate with the maximum guest page size for virtio-mmio. + * If using THP, then our minimal alignment becomes 2M. + * 2M trumps 64K, so let's go with that. + */ + kvm->ram_size = kvm->cfg.ram_size; + kvm->arch.ram_alloc_size = kvm->ram_size + SZ_2M; + kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm, + kvm->cfg.hugetlbfs_path, + kvm->arch.ram_alloc_size); + + if (kvm->arch.ram_alloc_start == MAP_FAILED) + die("Failed to map %lld bytes for guest memory (%d)", + kvm->arch.ram_alloc_size, errno); + + kvm->ram_start = (void *)ALIGN((unsigned long)kvm->arch.ram_alloc_start, + SZ_2M); + + madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size, + MADV_MERGEABLE); + + madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size, + MADV_HUGEPAGE); phys_start = ARM_MEMORY_AREA; phys_size = kvm->ram_size; @@ -59,31 +84,6 @@ void kvm__arch_set_cmdline(char *cmdline, bool video) void kvm__arch_init(struct kvm *kvm) { - /* - * Allocate guest memory. We must align our buffer to 64K to - * correlate with the maximum guest page size for virtio-mmio. - * If using THP, then our minimal alignment becomes 2M. - * 2M trumps 64K, so let's go with that. - */ - kvm->ram_size = kvm->cfg.ram_size; - kvm->arch.ram_alloc_size = kvm->ram_size + SZ_2M; - kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm, - kvm->cfg.hugetlbfs_path, - kvm->arch.ram_alloc_size); - - if (kvm->arch.ram_alloc_start == MAP_FAILED) - die("Failed to map %lld bytes for guest memory (%d)", - kvm->arch.ram_alloc_size, errno); - - kvm->ram_start = (void *)ALIGN((unsigned long)kvm->arch.ram_alloc_start, - SZ_2M); - - madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size, - MADV_MERGEABLE); - - madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size, - MADV_HUGEPAGE); - /* Create the virtual GIC. */ if (gic__create(kvm, kvm->cfg.arch.irqchip)) die("Failed to create virtual GIC"); From patchwork Wed May 25 11:23:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861056 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 41E8CC433EF for ; Wed, 25 May 2022 11:28:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wdQ8BpxRUSBR1EV30NXi6Q/Anx+ddYiRBvvMRAoZgl8=; b=Sx35ckdWbm7HX6 sCKBVDPA07sKde2+qk9Q+qt6cigNnIJIrqVR2SQ4IDEXq445fVox0T0/x/pvfP75Ub7LLnQO+8Ycf bebFpTkeSqJSUXVTsRCtWG8eAAkGgRD3rnNM6zyNE1Z5N70BhjO2eEVLu5eqcjWsHcRqYr6ZXcWxZ SZW1jIgRk1z6URCwsXla7E5nlDgPUxZ7PmYCfqS0RG7A3AzhvrHIM8E8THnqPUj92ezmnwaSqB94V upKw3UY4Cm+ChkaWENqWfuQuudEyZepj6hoX5qi/zLZzvZNg57LIo/kX9lZ52rZFkw9Z3tEg+1Gxa yohyeeIhAi4sXs3cGfRA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntpAe-00AuVY-Ry; Wed, 25 May 2022 11:27:20 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7S-00At6D-Mg for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:24:12 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8A04A1042; Wed, 25 May 2022 04:24:01 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C28E43F70D; Wed, 25 May 2022 04:23:59 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 12/13] Introduce kvm__arch_default_ram_address() Date: Wed, 25 May 2022 12:23:44 +0100 Message-Id: <20220525112345.121321-13-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042402_875635_740C3A6E X-CRM114-Status: GOOD ( 10.88 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add a new function, kvm__arch_default_ram_address(), which returns the default address for guest RAM for each architecture. Signed-off-by: Alexandru Elisei Reviewed-by: Andre Przywara --- arm/aarch32/kvm.c | 5 +++++ arm/aarch64/kvm.c | 5 +++++ include/kvm/kvm.h | 1 + mips/kvm.c | 5 +++++ powerpc/kvm.c | 5 +++++ riscv/kvm.c | 5 +++++ x86/kvm.c | 5 +++++ 7 files changed, 31 insertions(+) diff --git a/arm/aarch32/kvm.c b/arm/aarch32/kvm.c index 9d68d7a15ee2..768a56bbb5b4 100644 --- a/arm/aarch32/kvm.c +++ b/arm/aarch32/kvm.c @@ -7,3 +7,8 @@ void kvm__arch_validate_cfg(struct kvm *kvm) kvm->cfg.ram_size, ARM_LOMAP_MAX_MEMORY); } } + +u64 kvm__arch_default_ram_address(void) +{ + return ARM_MEMORY_AREA; +} diff --git a/arm/aarch64/kvm.c b/arm/aarch64/kvm.c index 2134528bf7f2..357936844046 100644 --- a/arm/aarch64/kvm.c +++ b/arm/aarch64/kvm.c @@ -46,6 +46,11 @@ void kvm__arch_validate_cfg(struct kvm *kvm) } } +u64 kvm__arch_default_ram_address(void) +{ + return ARM_MEMORY_AREA; +} + /* * Return the TEXT_OFFSET value that the guest kernel expects. Note * that pre-3.17 kernels expose this value using the native endianness diff --git a/include/kvm/kvm.h b/include/kvm/kvm.h index 640b76c095f9..360430b78b1e 100644 --- a/include/kvm/kvm.h +++ b/include/kvm/kvm.h @@ -190,6 +190,7 @@ void kvm__remove_socket(const char *name); void kvm__arch_validate_cfg(struct kvm *kvm); void kvm__arch_set_cmdline(char *cmdline, bool video); void kvm__arch_init(struct kvm *kvm); +u64 kvm__arch_default_ram_address(void); void kvm__arch_delete_ram(struct kvm *kvm); int kvm__arch_setup_firmware(struct kvm *kvm); int kvm__arch_free_firmware(struct kvm *kvm); diff --git a/mips/kvm.c b/mips/kvm.c index d8610cf81b94..4cbc9907731b 100644 --- a/mips/kvm.c +++ b/mips/kvm.c @@ -12,6 +12,11 @@ struct kvm_ext kvm_req_ext[] = { { 0, 0 } }; +u64 kvm__arch_default_ram_address(void) +{ + return 0; +} + void kvm__arch_validate_cfg(struct kvm *kvm) { } diff --git a/powerpc/kvm.c b/powerpc/kvm.c index d281b070fd0e..7b0d0669aff4 100644 --- a/powerpc/kvm.c +++ b/powerpc/kvm.c @@ -48,6 +48,11 @@ struct kvm_ext kvm_req_ext[] = { { 0, 0 } }; +u64 kvm__arch_default_ram_address(void) +{ + return 0; +} + void kvm__arch_validate_cfg(struct kvm *kvm) { } diff --git a/riscv/kvm.c b/riscv/kvm.c index c46660772aa0..4d6f5cb57ac8 100644 --- a/riscv/kvm.c +++ b/riscv/kvm.c @@ -13,6 +13,11 @@ struct kvm_ext kvm_req_ext[] = { { 0, 0 }, }; +u64 kvm__arch_default_ram_address(void) +{ + return RISCV_RAM; +} + void kvm__arch_validate_cfg(struct kvm *kvm) { } diff --git a/x86/kvm.c b/x86/kvm.c index 24b0305a1841..328fa7500596 100644 --- a/x86/kvm.c +++ b/x86/kvm.c @@ -35,6 +35,11 @@ struct kvm_ext kvm_req_ext[] = { { 0, 0 } }; +u64 kvm__arch_default_ram_address(void) +{ + return 0; +} + void kvm__arch_validate_cfg(struct kvm *kvm) { } From patchwork Wed May 25 11:23:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 12861057 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 57483C433F5 for ; Wed, 25 May 2022 11:28:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qwdw4EKaPV9MU9ihk3T+f4Io0tn6ef9CV/6GOZtE1eA=; b=IxMbWeXZLpbjIl a0QmfE+cg43kx4q50X05N3sz3XlEKRpiJjpusgd454UtPowqN2d6aPVoN9AreUe5EYuHBVd+ilVlv xLXY6gm+COJH+S5U7kDLyjk/m7cUsyOreaPwr9API1q7j6gk2WnjaH/qDJCtMbvAVbS6C8OGPZ7NP ax3xNUSNl/wcYAbSJALo74iOMnmjlIhNIvY9RgfNJfypKinjGNW7qpAm51LKYOMHI3Yr49MhImo0X EB+IBilKhzmkf6Ja4v7Cbbz492nyBEBz3UgOjdGgqPcefTXA9eo6rO3O0av6SL5CmOdFM/EGsonjF UqyVWV/3oWq9pM9uMj8Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntpB1-00AuiY-HS; Wed, 25 May 2022 11:27:43 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntp7U-00At6q-Sy for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 11:24:15 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E2A1B1FB; Wed, 25 May 2022 04:24:03 -0700 (PDT) Received: from monolith.localdoman (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D713F3F70D; Wed, 25 May 2022 04:24:01 -0700 (PDT) From: Alexandru Elisei To: will@kernel.org, julien.thierry.kdev@gmail.com, maz@kernel.org, suzuki.poulose@arm.com, julien@xen.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, andre.przywara@arm.com Subject: [PATCH v3 kvmtool 13/13] arm64: Allow the user to specify the RAM base address Date: Wed, 25 May 2022 12:23:45 +0100 Message-Id: <20220525112345.121321-14-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220525112345.121321-1-alexandru.elisei@arm.com> References: <20220525112345.121321-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_042405_093421_2A8ABFF8 X-CRM114-Status: GOOD ( 20.84 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Allow the user to specify the RAM base address by using -m/--mem size@addr command line argument. The base address must be above 2GB, as to not overlap with the MMIO I/O region. Signed-off-by: Alexandru Elisei Reviewed-by: Andre Przywara --- arm/aarch64/include/kvm/kvm-arch.h | 2 ++ arm/aarch64/kvm.c | 14 ++++++++---- arm/kvm.c | 7 ++++-- builtin-run.c | 36 ++++++++++++++++++++++++++---- include/kvm/kvm-config.h | 1 + include/kvm/kvm.h | 12 ++++++++++ include/linux/sizes.h | 2 ++ 7 files changed, 64 insertions(+), 10 deletions(-) diff --git a/arm/aarch64/include/kvm/kvm-arch.h b/arm/aarch64/include/kvm/kvm-arch.h index ff857ca6e7b4..02d09a413831 100644 --- a/arm/aarch64/include/kvm/kvm-arch.h +++ b/arm/aarch64/include/kvm/kvm-arch.h @@ -10,6 +10,8 @@ void kvm__arch_enable_mte(struct kvm *kvm); #define MAX_PAGE_SIZE SZ_64K +#define ARCH_HAS_CFG_RAM_ADDRESS 1 + #include "arm-common/kvm-arch.h" #endif /* KVM__KVM_ARCH_H */ diff --git a/arm/aarch64/kvm.c b/arm/aarch64/kvm.c index 357936844046..54200c9eec9d 100644 --- a/arm/aarch64/kvm.c +++ b/arm/aarch64/kvm.c @@ -4,6 +4,7 @@ #include #include +#include #include @@ -39,10 +40,15 @@ int vcpu_affinity_parser(const struct option *opt, const char *arg, int unset) void kvm__arch_validate_cfg(struct kvm *kvm) { + + if (kvm->cfg.ram_addr < ARM_MEMORY_AREA) { + die("RAM address is below the I/O region ending at %luGB", + ARM_MEMORY_AREA >> 30); + } + if (kvm->cfg.arch.aarch32_guest && - kvm->cfg.ram_size > ARM_LOMAP_MAX_MEMORY) { - die("RAM size 0x%llx exceeds maximum allowed 0x%llx", - kvm->cfg.ram_size, ARM_LOMAP_MAX_MEMORY); + kvm->cfg.ram_addr + kvm->cfg.ram_size > SZ_4G) { + die("RAM extends above 4GB"); } } @@ -117,7 +123,7 @@ int kvm__get_vm_type(struct kvm *kvm) return 0; /* Otherwise, compute the minimal required IPA size */ - max_ipa = ARM_MEMORY_AREA + kvm->cfg.ram_size - 1; + max_ipa = kvm->cfg.ram_addr + kvm->cfg.ram_size - 1; ipa_bits = max(32, fls_long(max_ipa)); pr_debug("max_ipa %lx ipa_bits %d max_ipa_bits %d", max_ipa, ipa_bits, max_ipa_bits); diff --git a/arm/kvm.c b/arm/kvm.c index abcccfabf59e..d51cc15d8b1c 100644 --- a/arm/kvm.c +++ b/arm/kvm.c @@ -55,7 +55,7 @@ void kvm__init_ram(struct kvm *kvm) madvise(kvm->arch.ram_alloc_start, kvm->arch.ram_alloc_size, MADV_HUGEPAGE); - phys_start = ARM_MEMORY_AREA; + phys_start = kvm->cfg.ram_addr; phys_size = kvm->ram_size; host_mem = kvm->ram_start; @@ -65,6 +65,9 @@ void kvm__init_ram(struct kvm *kvm) "address 0x%llx [err %d]", phys_size, phys_start, err); kvm->arch.memory_guest_start = phys_start; + + pr_debug("RAM created at 0x%llx - 0x%llx", + phys_start, phys_start + phys_size - 1); } void kvm__arch_delete_ram(struct kvm *kvm) @@ -201,7 +204,7 @@ bool kvm__load_firmware(struct kvm *kvm, const char *firmware_filename) /* For default firmware address, lets load it at the begining of RAM */ if (fw_addr == 0) - fw_addr = ARM_MEMORY_AREA; + fw_addr = kvm->arch.memory_guest_start; if (!validate_fw_addr(kvm, fw_addr)) die("Bad firmware destination: 0x%016llx", fw_addr); diff --git a/builtin-run.c b/builtin-run.c index a49698d5b2fe..68beaaa7c06f 100644 --- a/builtin-run.c +++ b/builtin-run.c @@ -131,12 +131,21 @@ static u64 parse_mem_option(const char *nptr, char **next) static int mem_parser(const struct option *opt, const char *arg, int unset) { struct kvm *kvm = opt->ptr; - char *next; + char *next, *nptr; kvm->cfg.ram_size = parse_mem_option(arg, &next); if (kvm->cfg.ram_size == 0) die("Invalid RAM size: %s", arg); + if (kvm__arch_has_cfg_ram_address() && *next == '@') { + next++; + if (*next == '\0') + die("Missing memory address: %s", arg); + + nptr = next; + kvm->cfg.ram_addr = parse_mem_option(nptr, &next); + } + if (*next != '\0') die("Invalid memory specifier: %s", arg); @@ -147,15 +156,26 @@ static int mem_parser(const struct option *opt, const char *arg, int unset) #define OPT_ARCH_RUN(...) #endif +#ifdef ARCH_HAS_CFG_RAM_ADDRESS +#define MEM_OPT_HELP_SHORT "size[BKMGTP][@addr[BKMGTP]]" +#define MEM_OPT_HELP_LONG \ + "Virtual machine memory size and optional base address, both" \ + " measured by default in megabytes (M)" +#else +#define MEM_OPT_HELP_SHORT "size[BKMGTP]" +#define MEM_OPT_HELP_LONG \ + "Virtual machine memory size, by default measured in" \ + " in megabytes (M)" +#endif + #define BUILD_OPTIONS(name, cfg, kvm) \ struct option name[] = { \ OPT_GROUP("Basic options:"), \ OPT_STRING('\0', "name", &(cfg)->guest_name, "guest name", \ "A name for the guest"), \ OPT_INTEGER('c', "cpus", &(cfg)->nrcpus, "Number of CPUs"), \ - OPT_CALLBACK('m', "mem", NULL, "size[BKMGTP]", \ - "Virtual machine memory size, by default measured" \ - " in megabytes (M)", mem_parser, kvm), \ + OPT_CALLBACK('m', "mem", NULL, MEM_OPT_HELP_SHORT, \ + MEM_OPT_HELP_LONG, mem_parser, kvm), \ OPT_CALLBACK('d', "disk", kvm, "image or rootfs_dir", "Disk " \ " image or rootfs directory", img_name_parser, \ kvm), \ @@ -601,6 +621,14 @@ static struct kvm *kvm_cmd_run_init(int argc, const char **argv) nr_online_cpus = sysconf(_SC_NPROCESSORS_ONLN); kvm->cfg.custom_rootfs_name = "default"; + /* + * An architecture might allow the user to set the RAM base address to + * zero. Initialize the address before parsing the command line + * arguments, because otherwise it will be impossible to distinguish + * between the user setting the base address to zero or letting it + * unspecified. + */ + kvm->cfg.ram_addr = kvm__arch_default_ram_address(); while (argc != 0) { BUILD_OPTIONS(options, &kvm->cfg, kvm); diff --git a/include/kvm/kvm-config.h b/include/kvm/kvm-config.h index 31bc89520d52..45fe1caaebce 100644 --- a/include/kvm/kvm-config.h +++ b/include/kvm/kvm-config.h @@ -23,6 +23,7 @@ struct kvm_config { struct kvm_config_arch arch; struct disk_image_params disk_image[MAX_DISK_IMAGES]; struct vfio_device_params *vfio_devices; + u64 ram_addr; /* Guest memory physical base address, in bytes */ u64 ram_size; /* Guest memory size, in bytes */ u8 num_net_devices; u8 num_vfio_devices; diff --git a/include/kvm/kvm.h b/include/kvm/kvm.h index 360430b78b1e..eb23e2f77310 100644 --- a/include/kvm/kvm.h +++ b/include/kvm/kvm.h @@ -197,6 +197,18 @@ int kvm__arch_free_firmware(struct kvm *kvm); bool kvm__arch_cpu_supports_vm(void); void kvm__arch_read_term(struct kvm *kvm); +#ifdef ARCH_HAS_CFG_RAM_ADDRESS +static inline bool kvm__arch_has_cfg_ram_address(void) +{ + return true; +} +#else +static inline bool kvm__arch_has_cfg_ram_address(void) +{ + return false; +} +#endif + void *guest_flat_to_host(struct kvm *kvm, u64 offset); u64 host_to_guest_flat(struct kvm *kvm, void *ptr); diff --git a/include/linux/sizes.h b/include/linux/sizes.h index b2b5c457cf1c..52afca02aa6e 100644 --- a/include/linux/sizes.h +++ b/include/linux/sizes.h @@ -44,4 +44,6 @@ #define SZ_1G 0x40000000ULL #define SZ_2G 0x80000000ULL +#define SZ_4G 0x100000000ULL + #endif /* __LINUX_SIZES_H__ */