From patchwork Fri May 4 16:05:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Martin X-Patchwork-Id: 134982 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp223970lji; Fri, 4 May 2018 09:05:45 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrwhpxMoVNqQ5fr6wVWBSnlSNJZp7GGpQPK20SZqQUWrCBYddruQo/nYjJbWjgevFygHoWF X-Received: by 2002:a17:902:be06:: with SMTP id r6-v6mr28460415pls.158.1525449945611; Fri, 04 May 2018 09:05:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525449945; cv=none; d=google.com; s=arc-20160816; b=Iq5LAluPf5+D/u6ySO3xITxvmmTaiQTSX55lbv8vBZuPMBBDCCuweS0n5NQweENBOF 4YR1N3nX3TqAW4NAMnItpjEeZGQhilxdjL1rgonlNqGwPeLKMx4oa+6956zcjhqQUmiT D7oO4Q34SuyCN0lE2huaF5oAe0qFy+DPSLBAAdQUPDrnAa+COUapPc3GmlauC0lRByb3 zgi19wKfQqYF4efstrsGvPFvEcomt3laADtkZn2ydHscTRO5qqjHI0KGv+fJPl7IXZzy MyzO5zz7Zi2Z2XfxBRofiKLT2GAPGRw6aO73GaJpq5Dpbdta8L2g2aQtNQdfu0j4uE/q jN3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=J3Up0BNsu6VUVTc/Grab42eXv5uOMLTh9axUFREpI5w=; b=FIXx0e+QKOoPmR+M4UzYoGajmQYy47N/5LxO12daxjbc6ODyorEanRdC9YkbTrdiPg y7PSo2tvFwUffbi55yU/pPX5Q1l5mYE0k0ejdVLdxYndX/Vrw40kkZ4SL7FQLmBfhTI7 39Qdd0CVe0MHDAg0yUXLWFW4Xi9936xs5lMagmMFZhEjn2FM+QLNzP7rVlync5QjjHFN OMdPpIiEgFP1MzhzzorbB939LajZxbCOBr1KxtJWz1QqLWMZ9ARPU4U9i3A/6ymgDktb TAsKscqyY5AA0S+FrnR0CloB5+1ojylNPeSp/c5srBIdYpyNEGWFKyj551H3eiJKpYWi UFPw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s67-v6si6997749pgc.204.2018.05.04.09.05.45; Fri, 04 May 2018 09:05:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751599AbeEDQFm (ORCPT + 29 others); Fri, 4 May 2018 12:05:42 -0400 Received: from foss.arm.com ([217.140.101.70]:55594 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751229AbeEDQFl (ORCPT ); Fri, 4 May 2018 12:05:41 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 354371435; Fri, 4 May 2018 09:05:41 -0700 (PDT) Received: from e103592.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 4609F3F25D; Fri, 4 May 2018 09:05:39 -0700 (PDT) From: Dave Martin To: kvmarm@lists.cs.columbia.edu Cc: linux-arm-kernel@lists.infradead.org, Christoffer Dall , Marc Zyngier , Ard Biesheuvel , Catalin Marinas , linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, Ingo Molnar , Peter Zijlstra , Steven Rostedt , Oleg Nesterov Subject: [PATCH v5 00/14] KVM: arm64: Optimise FPSIMD context switching Date: Fri, 4 May 2018 17:05:21 +0100 Message-Id: <1525449935-31424-1-git-send-email-Dave.Martin@arm.com> X-Mailer: git-send-email 2.1.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Note: Most of these patches are Arm-specific. People not Cc'd on the whole series can find it in the linux-arm-kernel archive [3]. This series aims to improve the way FPSIMD context is handled by KVM, building on the previous RFC v4 [1]. Patches 1-2 are picked from a separate RFC series [2] since they introduce a helper I wanted to use here. The main changes since RFC v4 are: * Rebased to -rc3. * Patches 1-2 pulled into series from [2], and other patches modified to use it. * Redundant additions by patch 3 that were reverted by other patches are now gone. * New patches 12-14 move the call to __hyp_switch_fpsimd() out of asm completely, moving it to the fixup_guest_exit() path instead. This should significantly cleaner, but does add a bit of overhead to FPSIMD trapping. This is presented as an independent change in case people want to benchmark with/without. Other minor changes as noted. Some testing done on Juno and the Arm fast model (arm64), including combinations of (non-)SVE and (non-)VHE configurations. Cheers ---Dave [1] [RFC PATCH 0/8] KVM: arm64: Optimise FPSIMD context switching http://lists.infradead.org/pipermail/linux-arm-kernel/2018-April/572781.html [2] [RFC PATCH 0/6] Simplify setting thread flags to a particular value https://lkml.org/lkml/2018/4/19/225 [3] linux-arm-kernel archive http://lists.infradead.org/pipermail/linux-arm-kernel/2018-May/thread.html Christoffer Dall (1): KVM: arm/arm64: Introduce kvm_arch_vcpu_run_pid_change Dave Martin (13): thread_info: Add update_thread_flag() helpers arm64: Use update{,_tsk}_thread_flag() KVM: arm64: Convert lazy FPSIMD context switch trap to C arm64: fpsimd: Generalise context saving for non-task contexts KVM: arm64: Optimise FPSIMD handling to reduce guest/host thrashing arm64/sve: Move read_zcr_features() out of cpufeature.h arm64/sve: Switch sve_pffr() argument from task to thread arm64/sve: Move sve_pffr() to fpsimd.h and make inline KVM: arm64: Save host SVE context as appropriate KVM: arm64: Remove eager host SVE state saving KVM: arm64: Remove redundant *exit_code changes in fpsimd_guest_exit() KVM: arm64: Fold redundant exit code checks out of fixup_guest_exit() KVM: arm64: Invoke FPSIMD context switch trap from C arch/arm/include/asm/kvm_host.h | 9 ++- arch/arm64/Kconfig | 7 +++ arch/arm64/include/asm/cpufeature.h | 29 --------- arch/arm64/include/asm/fpsimd.h | 20 ++++++ arch/arm64/include/asm/kvm_host.h | 22 ++++--- arch/arm64/include/asm/processor.h | 2 + arch/arm64/kernel/fpsimd.c | 120 +++++++++++++++++------------------ arch/arm64/kernel/ptrace.c | 1 + arch/arm64/kvm/Kconfig | 1 + arch/arm64/kvm/Makefile | 2 +- arch/arm64/kvm/fpsimd.c | 105 +++++++++++++++++++++++++++++++ arch/arm64/kvm/hyp/entry.S | 43 ------------- arch/arm64/kvm/hyp/hyp-entry.S | 19 ------ arch/arm64/kvm/hyp/switch.c | 121 +++++++++++++++++++++++++----------- include/linux/kvm_host.h | 9 +++ include/linux/sched.h | 6 ++ include/linux/thread_info.h | 11 ++++ virt/kvm/Kconfig | 3 + virt/kvm/arm/arm.c | 25 +++++++- virt/kvm/kvm_main.c | 7 ++- 20 files changed, 360 insertions(+), 202 deletions(-) create mode 100644 arch/arm64/kvm/fpsimd.c -- 2.1.4