From patchwork Tue Nov 6 22:20:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Orr X-Patchwork-Id: 10671559 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2AF5315A6 for ; Tue, 6 Nov 2018 22:20:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1F1E72B2D8 for ; Tue, 6 Nov 2018 22:20:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 133F52B31D; Tue, 6 Nov 2018 22:20:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, USER_IN_DEF_DKIM_WL autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 878E02B2F9 for ; Tue, 6 Nov 2018 22:20:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730746AbeKGHrt (ORCPT ); Wed, 7 Nov 2018 02:47:49 -0500 Received: from mail-pf1-f202.google.com ([209.85.210.202]:42650 "EHLO mail-pf1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727364AbeKGHrt (ORCPT ); Wed, 7 Nov 2018 02:47:49 -0500 Received: by mail-pf1-f202.google.com with SMTP id g63-v6so13672200pfc.9 for ; Tue, 06 Nov 2018 14:20:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=m2iqjlD99uhLk3TcwseOpc1O1utdKyZJoe8g5b3aQf4=; b=Q6PKKVxMJYGLUvKL7E/LbHiccXDRh+0kDvxS8eJv4xlHpevvl/v9cl9mVdW1uIGvkO BSFsl9WWwH6FV/bASr5jqk+NaGJbXIHWzCY2q3K4XGrlcn0hKMw1I80XmMD5k4d7b3/e 1OncDlTJ2HXOSzfmHECyuK0v1iTlF8N7Qvagjvi4GrFdprPLnEMcI4+aLB9ihh4b8l3m yrMikInWztfVIRTBq/2UtLKSMjUJSxaC5MbiGfWJQ/EItscWu6hBcnm7oPPdjKStsRcH XOjf20fijy9h2RKPUTnqK+gNhEoi7OgKtKWImOLR3WLBJPMc0s2yXG3l8nGXtGnky4AA kdxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=m2iqjlD99uhLk3TcwseOpc1O1utdKyZJoe8g5b3aQf4=; b=r25USszx/utnpW6O45zLz7JiAiRRmwmSXek3lhEdLy/CFM3UWgi1FhNz6cAbAOUL8B BrqvAg3J1+ldDUZzXuhpKjK/LHqT54RQglenQrTiLjpi+eKkHYj/pJ4IX9IFfylO3q7+ /B2jg7PThM4pG4Tbly1HRzHMp/yi6ePEgh/9i1hsWw452+gz9E6fQiRk4nfgvYQP34pp +PaucxNWYHoK+RTj+tHxvvqmqP7h9Ajump293ENWWfcYAz061LWfqeWSCclt0xcMG1cY +dk4/E2Bhlh5kZkZCUULiwsKBQQCuwYf+e4mxcfqINIuRU793KXlOsf4K+iHV5GbdK7g vp1A== X-Gm-Message-State: AGRZ1gJbNl1Z674NeWLYIqa0nQaZUE6K7WtmRKk15TJNrC/r2N8j2Qgv CVvSeI2RQJCTtnqE5zmw1UQTxe0ncILnQWeQlv3MtqSpWnEHNaH3eLMBoLLKkeuxxHq78cnZLUl 1jLojqI/1afVOoLaS/Lu5gb75jAFKSEkwYyMhyMwBqZacim/0+eXsY+/wC5qi X-Google-Smtp-Source: AJdET5cMYaY8o6gqnYE9E61HX98GXy0M+cR43vucBeBi/1XWdw1wvPbWi4mxAXj5TP5Rz3y9W6jTaU2DWJ48 X-Received: by 2002:a17:902:e08c:: with SMTP id cb12-v6mr400090plb.117.1541542823152; Tue, 06 Nov 2018 14:20:23 -0800 (PST) Date: Tue, 6 Nov 2018 14:20:08 -0800 In-Reply-To: <20181106222009.90833-1-marcorr@google.com> Message-Id: <20181106222009.90833-2-marcorr@google.com> Mime-Version: 1.0 References: <20181106222009.90833-1-marcorr@google.com> X-Mailer: git-send-email 2.19.1.930.g4563a0d9d0-goog Subject: [kvm PATCH v7 1/2] kvm: x86: Use task structs fpu field for user From: Marc Orr To: kvm@vger.kernel.org, jmattson@google.com, rientjes@google.com, konrad.wilk@oracle.com, linux-mm@kvack.org, akpm@linux-foundation.org, pbonzini@redhat.com, rkrcmar@redhat.com, willy@infradead.org, sean.j.christopherson@intel.com, dave.hansen@linux.intel.com, kernellwp@gmail.com Cc: Marc Orr , Dave Hansen Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Previously, x86's instantiation of 'struct kvm_vcpu_arch' added an fpu field to save/restore fpu-related architectural state, which will differ from kvm's fpu state. However, this is redundant to the 'struct fpu' field, called fpu, embedded in the task struct, via the thread field. Thus, this patch removes the user_fpu field from the kvm_vcpu_arch struct and replaces it with the task struct's fpu field. This change is significant because the fpu struct is actually quite large. For example, on the system used to develop this patch, this change reduces the size of the vcpu_vmx struct from 23680 bytes down to 19520 bytes, when building the kernel with kvmconfig. This reduction in the size of the vcpu_vmx struct moves us closer to being able to allocate the struct at order 2, rather than order 3. Suggested-by: Dave Hansen Signed-off-by: Marc Orr --- arch/x86/include/asm/kvm_host.h | 7 +++---- arch/x86/kvm/x86.c | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 55e51ff7e421..ebb1d7a755d4 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -601,16 +601,15 @@ struct kvm_vcpu_arch { /* * QEMU userspace and the guest each have their own FPU state. - * In vcpu_run, we switch between the user and guest FPU contexts. - * While running a VCPU, the VCPU thread will have the guest FPU - * context. + * In vcpu_run, we switch between the user, maintained in the + * task_struct struct, and guest FPU contexts. While running a VCPU, + * the VCPU thread will have the guest FPU context. * * Note that while the PKRU state lives inside the fpu registers, * it is switched out separately at VMENTER and VMEXIT time. The * "guest_fpu" state here contains the guest FPU context, with the * host PRKU bits. */ - struct fpu user_fpu; struct fpu guest_fpu; u64 xcr0; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index bdcb5babfb68..ff77514f7367 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -7999,7 +7999,7 @@ static int complete_emulated_mmio(struct kvm_vcpu *vcpu) static void kvm_load_guest_fpu(struct kvm_vcpu *vcpu) { preempt_disable(); - copy_fpregs_to_fpstate(&vcpu->arch.user_fpu); + copy_fpregs_to_fpstate(¤t->thread.fpu); /* PKRU is separately restored in kvm_x86_ops->run. */ __copy_kernel_to_fpregs(&vcpu->arch.guest_fpu.state, ~XFEATURE_MASK_PKRU); @@ -8012,7 +8012,7 @@ static void kvm_put_guest_fpu(struct kvm_vcpu *vcpu) { preempt_disable(); copy_fpregs_to_fpstate(&vcpu->arch.guest_fpu); - copy_kernel_to_fpregs(&vcpu->arch.user_fpu.state); + copy_kernel_to_fpregs(¤t->thread.fpu.state); preempt_enable(); ++vcpu->stat.fpu_reload; trace_kvm_fpu(0);