From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_GIT autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D078C49ED6 for ; Wed, 11 Sep 2019 18:50:55 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 57ACF20578 for ; Wed, 11 Sep 2019 18:50:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="U5gdhnea" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 57ACF20578 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=8ubsRZwq3ZkjS9wojv9f0rxSyH2fis85ov1CEdjNJdw=; b=U5gdhneaxi9XBL y+IG+eROQor4GyUMk0/OXDTFn9GvhoSbjOx8zrDiwXmVKv1e3NmHXoLKviLWEaLCiefNV7Q1vaOC/ T5pydPRFi4be8r34BFB+i1LgDdu+S550t2d8AsppvUaL8sqyToLER/88t6JP1z6cDPjPcbK8CPNE7 lMLPgSxUxfcoFDPPzGII1EEYhOrS4kUXpHoxmVb0ZwA+H1W8ALimgNtIEp3IdlICMFyilvJpJ/OOj RtTeNKmt5gY8N4U6SsnJDfzK2iqMF3rcSi0MR6ln15kk8MFLQTFy+eqX7G4GjBDXBB5SkR3PVVhvm +J54QhySGcWvFhgO0Ceg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1i87hV-0007HD-0A; Wed, 11 Sep 2019 18:50:45 +0000 Received: from mga11.intel.com ([192.55.52.93]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1i87hR-0007Ew-I5 for linux-arm-kernel@lists.infradead.org; Wed, 11 Sep 2019 18:50:42 +0000 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Sep 2019 11:50:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,492,1559545200"; d="scan'208";a="196980862" Received: from sjchrist-coffee.jf.intel.com ([10.54.74.41]) by orsmga002.jf.intel.com with ESMTP; 11 Sep 2019 11:50:40 -0700 From: Sean Christopherson To: James Hogan , Paul Mackerras , Christian Borntraeger , Janosch Frank , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Marc Zyngier Subject: [PATCH 00/13] KVM: Dynamically size memslot arrays Date: Wed, 11 Sep 2019 11:50:25 -0700 Message-Id: <20190911185038.24341-1-sean.j.christopherson@intel.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190911_115041_607025_67FC731B X-CRM114-Status: GOOD ( 11.68 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Julien Thierry , Wanpeng Li , kvm@vger.kernel.org, David Hildenbrand , linux-arm-kernel@lists.infradead.org, Joerg Roedel , Cornelia Huck , linux-mips@vger.kernel.org, Sean Christopherson , linux-kernel@vger.kernel.org, James Morse , kvm-ppc@vger.kernel.org, Vitaly Kuznetsov , kvmarm@lists.cs.columbia.edu, Suzuki K Pouloze , Jim Mattson Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org The end goal of this series is to dynamically size the memslot array so that KVM allocates memory based on the number of memslots in use, as opposed to unconditionally allocating memory for the maximum number of memslots. On x86, each memslot consumes 88 bytes, and so with 2 address spaces of 512 memslots, each VM consumes ~90k bytes for the memslots. E.g. given a VM that uses a total of 30 memslots, dynamic sizing reduces the memory footprint from 90k to ~2.6k bytes. The changes required to support dynamic sizing are relatively small, e.g. are essentially contained in patches 12/13 and 13/13. Patches 1-11 clean up the memslot code, which has gotten quite crusy, especially __kvm_set_memory_region(). The clean up is likely not strictly necessary to switch to dynamic sizing, but I didn't have a remotely reasonable level of confidence in the correctness of the dynamic sizing without first doing the clean up. Testing, especially non-x86 platforms, would be greatly appreciated. I'd really like to get at least one Tested-by from all architectures. The non-x86 changes are for all intents and purposes untested, e.g. I compile tested pieces of the code by copying them into x86, but that's it. In theory, the vast majority of the functional changes are arch agnostic, in theory... Sean Christopherson (13): KVM: Reinstall old memslots if arch preparation fails KVM: PPC: Move memslot memory allocation into prepare_memory_region() KVM: x86: Allocate memslot resources during prepare_memory_region() KVM: Drop kvm_arch_create_memslot() KVM: Refactor error handling for setting memory region KVM: Move setting of memslot into helper routine KVM: Move memslot deletion to helper function KVM: Simplify kvm_free_memslot() and all its descendents KVM: Clean up local variable usage in __kvm_set_memory_region() KVM: Provide common implementation for generic dirty log functions KVM: Ensure validity of memslot with respect to kvm_get_dirty_log() KVM: Terminate memslot walks via used_slots KVM: Dynamically size memslot array based on number of used slots arch/mips/include/asm/kvm_host.h | 2 +- arch/mips/kvm/mips.c | 68 +--- arch/powerpc/include/asm/kvm_ppc.h | 14 +- arch/powerpc/kvm/book3s.c | 22 +- arch/powerpc/kvm/book3s_hv.c | 36 +- arch/powerpc/kvm/book3s_pr.c | 20 +- arch/powerpc/kvm/booke.c | 17 +- arch/powerpc/kvm/powerpc.c | 13 +- arch/s390/include/asm/kvm_host.h | 2 +- arch/s390/kvm/kvm-s390.c | 21 +- arch/x86/include/asm/kvm_page_track.h | 3 +- arch/x86/kvm/page_track.c | 15 +- arch/x86/kvm/x86.c | 100 ++--- include/linux/kvm_host.h | 48 +-- virt/kvm/arm/arm.c | 47 +-- virt/kvm/arm/mmu.c | 18 +- virt/kvm/kvm_main.c | 546 ++++++++++++++++---------- 17 files changed, 467 insertions(+), 525 deletions(-) -- 2.22.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel