From patchwork Tue Nov 5 11:03:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoffer Dall X-Patchwork-Id: 11228495 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 A27DD1850 for ; Tue, 5 Nov 2019 20:30:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 948A221D7F for ; Tue, 5 Nov 2019 20:30:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728400AbfKEU35 (ORCPT ); Tue, 5 Nov 2019 15:29:57 -0500 Received: from foss.arm.com ([217.140.110.172]:59866 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727339AbfKEU35 (ORCPT ); Tue, 5 Nov 2019 15:29:57 -0500 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 9120064F; Tue, 5 Nov 2019 12:29:56 -0800 (PST) Received: from localhost (e113682-lin.copenhagen.arm.com [10.32.145.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1C9EE3FE14; Tue, 5 Nov 2019 03:04:00 -0800 (PST) From: Christoffer Dall To: kvm@vger.kernel.org Cc: kvmarm@lists.cs.columbia.edu, Christoffer Dall , James Hogan , Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= , Joerg Roedel , Marc Zyngier , Paul Mackerras , Christian Borntraeger , Anshuman Khandual , Suzuki K Poulose , James Morse , Julien Thierry , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Mike Rapoport Subject: [PATCH v4 0/5] KVM: Unify mmu_memory_cache functionality across architectures Date: Tue, 5 Nov 2019 12:03:52 +0100 Message-Id: <20191105110357.8607-1-christoffer.dall@arm.com> X-Mailer: git-send-email 2.18.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org We currently have duplicated functionality for the mmu_memory_cache used to pre-allocate memory for the page table manipulation code which cannot allocate memory while holding spinlocks. This functionality is duplicated across x86, arm/arm64, and mips. This was motivated by a debate of modifying the arm code to be more in line with the x86 code and some discussions around changing the page flags used for allocation. This series should make it easier to take a uniform approach across architectures. While there's not a huge amount of code sharing, we come out with a net gain, and the real win is in the consistency of how we allocate memory for page tables used by secondary MMUs driven by KVM in Linux. Only tested on arm/arm64, and only compile-tested on x86 and mips. I'm especially curious on getting feedback on the change of GFP flags for x86 (patch 1) and on the use of __GFP_ACCOUNT for mips. Changes since v3: - Moved to common GFP_PGTABLE_USER definition for page allocations in the MMU cache for all three architectures. This follows recent work which already did this for arm/arm64. - Rebased on v5.4-rc4. Changes since v2: - Simplified kalloc flag definitions as per Paolo's review comment. Changes since v1: - Split out rename from initial x86 patch to have separate patches to move the logic to common code and to rename. - Introduce KVM_ARCH_WANT_MMU_MEMCACHE to avoid compile breakage on architectures that don't use this functionality. - Rename KVM_NR_MEM_OBJS to KVM_MMU_NR_MEMCACHE_OBJS Christoffer Dall (5): KVM: x86: Move memcache allocation to GFP_PGTABLE_USER KVM: x86: Move mmu_memory_cache functions to common code KVM: x86: Rename mmu_memory_cache to kvm_mmu_memcache KVM: arm/arm64: Move to common kvm_mmu_memcache infrastructure KVM: mips: Move to common kvm_mmu_memcache infrastructure arch/arm/include/asm/kvm_host.h | 13 +--- arch/arm/include/asm/kvm_mmu.h | 2 +- arch/arm/include/asm/kvm_types.h | 9 +++ arch/arm64/include/asm/kvm_host.h | 13 +--- arch/arm64/include/asm/kvm_mmu.h | 2 +- arch/arm64/include/asm/kvm_types.h | 9 +++ arch/mips/include/asm/kvm_host.h | 15 +---- arch/mips/include/asm/kvm_types.h | 9 +++ arch/mips/kvm/mips.c | 2 +- arch/mips/kvm/mmu.c | 54 +++------------- arch/powerpc/include/asm/kvm_types.h | 5 ++ arch/s390/include/asm/kvm_types.h | 5 ++ arch/x86/include/asm/kvm_host.h | 17 +---- arch/x86/include/asm/kvm_types.h | 9 +++ arch/x86/kvm/mmu.c | 97 ++++++---------------------- arch/x86/kvm/paging_tmpl.h | 4 +- include/linux/kvm_host.h | 11 ++++ include/linux/kvm_types.h | 13 ++++ virt/kvm/arm/arm.c | 2 +- virt/kvm/arm/mmu.c | 68 +++++-------------- virt/kvm/kvm_main.c | 61 +++++++++++++++++ 21 files changed, 190 insertions(+), 230 deletions(-) create mode 100644 arch/arm/include/asm/kvm_types.h create mode 100644 arch/arm64/include/asm/kvm_types.h create mode 100644 arch/mips/include/asm/kvm_types.h create mode 100644 arch/powerpc/include/asm/kvm_types.h create mode 100644 arch/s390/include/asm/kvm_types.h create mode 100644 arch/x86/include/asm/kvm_types.h