Received: by 2002:a25:b323:0:0:0:0:0 with SMTP id l35csp1795718ybj; Sun, 22 Sep 2019 12:06:51 -0700 (PDT) X-Google-Smtp-Source: APXvYqxqr0OppDy7SMQZC5QjMLH8Npqxg8rxoS6NkB9Xz1bHehYzyMtWwcmKGk0QebwjZE5hMAQ0 X-Received: by 2002:a50:d090:: with SMTP id v16mr33415214edd.176.1569179211626; Sun, 22 Sep 2019 12:06:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569179211; cv=none; d=google.com; s=arc-20160816; b=w+MIJeoVEDpwHU67/vu9D8+XR1gIEVfSgQTA25Xj+RaxE0lMwktugJX2wID0zIMyAM z2iT8qiYGdDwZSQYGOtfCBFxpUzO6zCGd7BHt8L5Kyc5RgCauE2c4Kzu2h6LlfxFcBfd oUYBRwRC2RWYouRKbU380GdsE4ZWICrW69eqLp4qUd/ajAO5Trzhz79lOZQfy7DH6D7M gL6THXDf8oK8E+xLLb/V3dQARAgMReYNgcKaGmYD2n/3c4mJ7jIwiA/+XQ4tp6wXUeHY DDTmY+8TSWzGYLCWt3lH/dpADMcqpeg4InrmbMzKnR9hEG3PjcRdMJXEbL3YJ4mEKYDz tsSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=PVSf0mdTfdygjqgue8VD0O6b4GdlCZ4nD91qPiO3lNo=; b=KVJMYPUx8FQ6080gK4xrT1FXTUq0zAA+GYbzk6YtO+nrKwut1I8ZeH6qzJ/fN8VejT tHrxLTbRBPxnrJCh4DxrWiZG0L9E+o3FOkUjBk4/isc93kWjHr9MZImOmRwAEqgwN1GF UEZI5bdTOellQDpXbZwK/aKshNsXxXdileXn7vUO1iuBuLjIRziYFHmxGIek1oLbQyfM QDmZbEpM19KxeCifl6zd44EOJCzmmMEWMVcqERo7Pgo1ov+gXqij0ZcizdwREW4xcrC3 DrG7FNaOzo1NvlVUoF+qzuQOCWl8kK8adqmfL+hmhMszyPWkzkwZd0jSjQGC9FIHRpT6 ZAGA== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a26si5338230edv.35.2019.09.22.12.06.27; Sun, 22 Sep 2019 12:06:51 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394025AbfITV0R (ORCPT + 99 others); Fri, 20 Sep 2019 17:26:17 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40482 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730151AbfITVZN (ORCPT ); Fri, 20 Sep 2019 17:25:13 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B089530833C1; Fri, 20 Sep 2019 21:25:12 +0000 (UTC) Received: from mail (ovpn-120-159.rdu2.redhat.com [10.10.120.159]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1868819C68; Fri, 20 Sep 2019 21:25:10 +0000 (UTC) From: Andrea Arcangeli To: Paolo Bonzini Cc: Vitaly Kuznetsov , "Dr. David Alan Gilbert" , Marcelo Tosatti , Peter Xu , kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 04/17] KVM: monolithic: x86: convert the kvm_pmu_ops methods to external functions Date: Fri, 20 Sep 2019 17:24:56 -0400 Message-Id: <20190920212509.2578-5-aarcange@redhat.com> In-Reply-To: <20190920212509.2578-1-aarcange@redhat.com> References: <20190920212509.2578-1-aarcange@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Fri, 20 Sep 2019 21:25:12 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This replaces all kvm_pmu_ops pointer to functions with regular external functions that don't require indirect calls. Signed-off-by: Andrea Arcangeli --- arch/x86/kvm/pmu_amd_ops.c | 68 ++++++++++++++++++++++++++++++++ arch/x86/kvm/pmu_ops.h | 22 +++++++++++ arch/x86/kvm/vmx/pmu_intel_ops.c | 68 ++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 arch/x86/kvm/pmu_amd_ops.c create mode 100644 arch/x86/kvm/pmu_ops.h create mode 100644 arch/x86/kvm/vmx/pmu_intel_ops.c diff --git a/arch/x86/kvm/pmu_amd_ops.c b/arch/x86/kvm/pmu_amd_ops.c new file mode 100644 index 000000000000..d2e9a244caa8 --- /dev/null +++ b/arch/x86/kvm/pmu_amd_ops.c @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * arch/x86/kvm/pmu_amd_ops.c + * + * Copyright 2019 Red Hat, Inc. + */ + +unsigned kvm_pmu_ops_find_arch_event(struct kvm_pmu *pmu, u8 event_select, + u8 unit_mask) +{ + return amd_find_arch_event(pmu, event_select, unit_mask); +} + +unsigned kvm_pmu_ops_find_fixed_event(int idx) +{ + return amd_find_fixed_event(idx); +} + +bool kvm_pmu_ops_pmc_is_enabled(struct kvm_pmc *pmc) +{ + return amd_pmc_is_enabled(pmc); +} + +struct kvm_pmc *kvm_pmu_ops_pmc_idx_to_pmc(struct kvm_pmu *pmu, int pmc_idx) +{ + return amd_pmc_idx_to_pmc(pmu, pmc_idx); +} + +struct kvm_pmc *kvm_pmu_ops_msr_idx_to_pmc(struct kvm_vcpu *vcpu, unsigned idx, + u64 *mask) +{ + return amd_msr_idx_to_pmc(vcpu, idx, mask); +} + +int kvm_pmu_ops_is_valid_msr_idx(struct kvm_vcpu *vcpu, unsigned idx) +{ + return amd_is_valid_msr_idx(vcpu, idx); +} + +bool kvm_pmu_ops_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr) +{ + return amd_is_valid_msr(vcpu, msr); +} + +int kvm_pmu_ops_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *data) +{ + return amd_pmu_get_msr(vcpu, msr, data); +} + +int kvm_pmu_ops_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) +{ + return amd_pmu_set_msr(vcpu, msr_info); +} + +void kvm_pmu_ops_refresh(struct kvm_vcpu *vcpu) +{ + amd_pmu_refresh(vcpu); +} + +void kvm_pmu_ops_init(struct kvm_vcpu *vcpu) +{ + amd_pmu_init(vcpu); +} + +void kvm_pmu_ops_reset(struct kvm_vcpu *vcpu) +{ + amd_pmu_reset(vcpu); +} diff --git a/arch/x86/kvm/pmu_ops.h b/arch/x86/kvm/pmu_ops.h new file mode 100644 index 000000000000..6230ce300cbe --- /dev/null +++ b/arch/x86/kvm/pmu_ops.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __KVM_X86_PMU_OPS_H +#define __KVM_X86_PMU_OPS_H + +extern unsigned kvm_pmu_ops_find_arch_event(struct kvm_pmu *pmu, + u8 event_select, u8 unit_mask); +extern unsigned kvm_pmu_ops_find_fixed_event(int idx); +extern bool kvm_pmu_ops_pmc_is_enabled(struct kvm_pmc *pmc); +extern struct kvm_pmc *kvm_pmu_ops_pmc_idx_to_pmc(struct kvm_pmu *pmu, + int pmc_idx); +extern struct kvm_pmc *kvm_pmu_ops_msr_idx_to_pmc(struct kvm_vcpu *vcpu, + unsigned idx, u64 *mask); +extern int kvm_pmu_ops_is_valid_msr_idx(struct kvm_vcpu *vcpu, unsigned idx); +extern bool kvm_pmu_ops_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr); +extern int kvm_pmu_ops_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *data); +extern int kvm_pmu_ops_set_msr(struct kvm_vcpu *vcpu, + struct msr_data *msr_info); +extern void kvm_pmu_ops_refresh(struct kvm_vcpu *vcpu); +extern void kvm_pmu_ops_init(struct kvm_vcpu *vcpu); +extern void kvm_pmu_ops_reset(struct kvm_vcpu *vcpu); + +#endif /* __KVM_X86_PMU_OPS_H */ diff --git a/arch/x86/kvm/vmx/pmu_intel_ops.c b/arch/x86/kvm/vmx/pmu_intel_ops.c new file mode 100644 index 000000000000..39f1b4af85e3 --- /dev/null +++ b/arch/x86/kvm/vmx/pmu_intel_ops.c @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * arch/x86/kvm/vmx/pmu_intel_ops.c + * + * Copyright 2019 Red Hat, Inc. + */ + +unsigned kvm_pmu_ops_find_arch_event(struct kvm_pmu *pmu, u8 event_select, + u8 unit_mask) +{ + return intel_find_arch_event(pmu, event_select, unit_mask); +} + +unsigned kvm_pmu_ops_find_fixed_event(int idx) +{ + return intel_find_fixed_event(idx); +} + +bool kvm_pmu_ops_pmc_is_enabled(struct kvm_pmc *pmc) +{ + return intel_pmc_is_enabled(pmc); +} + +struct kvm_pmc *kvm_pmu_ops_pmc_idx_to_pmc(struct kvm_pmu *pmu, int pmc_idx) +{ + return intel_pmc_idx_to_pmc(pmu, pmc_idx); +} + +struct kvm_pmc *kvm_pmu_ops_msr_idx_to_pmc(struct kvm_vcpu *vcpu, unsigned idx, + u64 *mask) +{ + return intel_msr_idx_to_pmc(vcpu, idx, mask); +} + +int kvm_pmu_ops_is_valid_msr_idx(struct kvm_vcpu *vcpu, unsigned idx) +{ + return intel_is_valid_msr_idx(vcpu, idx); +} + +bool kvm_pmu_ops_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr) +{ + return intel_is_valid_msr(vcpu, msr); +} + +int kvm_pmu_ops_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *data) +{ + return intel_pmu_get_msr(vcpu, msr, data); +} + +int kvm_pmu_ops_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) +{ + return intel_pmu_set_msr(vcpu, msr_info); +} + +void kvm_pmu_ops_refresh(struct kvm_vcpu *vcpu) +{ + intel_pmu_refresh(vcpu); +} + +void kvm_pmu_ops_init(struct kvm_vcpu *vcpu) +{ + intel_pmu_init(vcpu); +} + +void kvm_pmu_ops_reset(struct kvm_vcpu *vcpu) +{ + intel_pmu_reset(vcpu); +}