Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp159733ybn; Thu, 3 Oct 2019 03:12:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqwHO/U7HlwAUPoSqfIMO7j0f2uB5LhB+VlBG5GDLaKx6e/oKndl8c5PUoDBxHrF7NlUlWNm X-Received: by 2002:a17:906:1659:: with SMTP id n25mr7127840ejd.258.1570097544500; Thu, 03 Oct 2019 03:12:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570097544; cv=none; d=google.com; s=arc-20160816; b=mSPGcXdDZ9BKfB65cdPQsIfSKUBXj9CEph8N9mWM+lNn8qL/lxZ6WLzI0gJFcLKjlM 1+HAJRX7f0GPkbJYur0U4ABoGbja4NbX8so+QloWkKPvAfBUVucdZHVvRRcYqdnK4L9j hndHkcvPnBqovE6SNEjzAnxj0pXKlE2XWNwYVG3+d2jqiKEDGhDVFuGjba8rFiQOm5rw i443rCjtngdGSDQORhAsoYX1tSB6RnS0244INl6ry5UzYRa7H0MQDmMVl3Pc0ysewyLe 1gYYpaqJ6LGWFtom5SYWX1qeXoCiNPB6/S1lDjebg0da6Zr35JH28XFVIFeN3fgTc4VZ ie+A== 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 :dkim-signature; bh=ottjOaTEs3Ikgb7CnHP3dioI7rwiHnXtk/G5yLxaaPo=; b=JmTgDpsNgif+zaRkOloNOxLaLXE6vbB6Uu4rWeuFfsz4vuDg4h8WVRgJC9bmPBzkV4 D3XM2UyTjLsPkgsGhp8gGtfBLW/PMMTercpwVjbG+iS7JgRa7HxxfdztwFQMPqQ3Nf0m RINDP1fvbqSYMrGuwp0Q1zc6yOrkcOrhufteZRP+RpfwebIUMGobmMChj8gPzLStrYUv YF6EcSJwRuPU89c0doOIvyrgsw++MLIHf4pTeTOLXUfQDGnBwkT+hDJCIzCXh4HKt0P6 X5obKHzqxfpbo5tHPVnt04GEvSH8QVCSs6gV9fqU1Rgj9BrUKg3qO+KBp0ciOZpxfpao kMnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=seTVmCw1; 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 h13si1068595edw.348.2019.10.03.03.11.59; Thu, 03 Oct 2019 03:12:24 -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; dkim=fail header.i=@gmail.com header.s=20161025 header.b=seTVmCw1; 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 S1728666AbfJCKKY (ORCPT + 99 others); Thu, 3 Oct 2019 06:10:24 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:44894 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725827AbfJCKKY (ORCPT ); Thu, 3 Oct 2019 06:10:24 -0400 Received: by mail-wr1-f66.google.com with SMTP id z9so2251896wrl.11; Thu, 03 Oct 2019 03:10:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=ottjOaTEs3Ikgb7CnHP3dioI7rwiHnXtk/G5yLxaaPo=; b=seTVmCw1DuIF0JANo3cCvEMKzbuNRA6FupcEyAP8s+iQ44VKrfzN+QttsFwMgdYEvi JWawy6V9Uuy/2t3xVz/mKTS9lHiIYFvcZ26TmH9229Ab8WkIbg5K3PWhw8S21jDXG1M+ Zegi3vYe3exoL/+Ld8mflSsckdCRJ1iFHTFKU8Va6rumr7Edid7Chc2OXs5uOBcc6wf/ Rkh0lBsO98fXe3pF/DJWcNM5uIfZm9zwIUf+vD8lydzCGHPi6RSbVirIrGcAtHIN8QSx ch7CBYluAImlhLCWwquTokGx2Seh3oooWzeRxte5NFx/3Vrmo7Pu2uYmpwR8b8NW/37c b3FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=ottjOaTEs3Ikgb7CnHP3dioI7rwiHnXtk/G5yLxaaPo=; b=hdy2PG+f5xh+GxQDsyzNjzGGTYuPXJaVBrVhAaU1OhxNLZtL+mYclA5mHfTcJOtY3u NSJXYPKVO1Lzn63mpdEzx5PPGbzH1e+fvNdwx+cc2n8gPdctXYMaSqez//OJMfdZO9r+ BGwfrMRjqDO+IGdpvJDLBZTj8bNdZO/TQEn/nBhzGpTB5kmweaSehHJ+9iAOSRG5F4ry Hdr1/rEZ/7dWdSh17DrIImFmK2nFhzPUFP1ELvGPt1GWUgMlxz84e4x4tja5o4ZPhuy9 KQgJBkHl6v9CTiqMpSevqgDOmXBT9G65Wgj0/VyJZehasBhl9BJy6vUvdZAXZzrXn/aI 81Aw== X-Gm-Message-State: APjAAAWERNdEASr0nLxM3N3BOdTIfhTyezhxRS4rfRXenJsVhm+8aM12 fRITVM1Z3fYgFDNRIq+ZVnJOQcm/ X-Received: by 2002:a5d:4b46:: with SMTP id w6mr6827233wrs.223.1570097421982; Thu, 03 Oct 2019 03:10:21 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id r20sm4003148wrg.61.2019.10.03.03.10.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 03 Oct 2019 03:10:21 -0700 (PDT) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: vkuznets@redhat.com, Jim Mattson Subject: [PATCH v2] KVM: x86: omit absent pmu MSRs from MSR list Date: Thu, 3 Oct 2019 12:10:18 +0200 Message-Id: <1570097418-42233-1-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org INTEL_PMC_MAX_GENERIC is currently 32, which exceeds the 18 contiguous MSR indices reserved by Intel for event selectors. Since some machines actually have MSRs past the reserved range, these may survive the filtering of msrs_to_save array and would be rejected by KVM_GET/SET_MSR. To avoid this, cut the list to whatever CPUID reports for the host's architectural PMU. Reported-by: Vitaly Kuznetsov Suggested-by: Vitaly Kuznetsov Cc: Jim Mattson Fixes: e2ada66ec418 ("kvm: x86: Add Intel PMU MSRs to msrs_to_save[]", 2019-08-21) Signed-off-by: Paolo Bonzini --- arch/x86/kvm/x86.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 8072acaaf028..31607174f442 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -5105,13 +5105,14 @@ long kvm_arch_vm_ioctl(struct file *filp, static void kvm_init_msr_list(void) { + struct x86_pmu_capability x86_pmu; u32 dummy[2]; unsigned i, j; BUILD_BUG_ON_MSG(INTEL_PMC_MAX_FIXED != 4, "Please update the fixed PMCs in msrs_to_save[]"); - BUILD_BUG_ON_MSG(INTEL_PMC_MAX_GENERIC != 32, - "Please update the generic perfctr/eventsel MSRs in msrs_to_save[]"); + + perf_get_x86_pmu_capability(&x86_pmu); for (i = j = 0; i < ARRAY_SIZE(msrs_to_save); i++) { if (rdmsr_safe(msrs_to_save[i], &dummy[0], &dummy[1]) < 0) @@ -5153,6 +5154,15 @@ static void kvm_init_msr_list(void) intel_pt_validate_hw_cap(PT_CAP_num_address_ranges) * 2) continue; break; + case MSR_ARCH_PERFMON_PERFCTR0 ... MSR_ARCH_PERFMON_PERFCTR0 + 31: + if (msrs_to_save[i] - MSR_ARCH_PERFMON_PERFCTR0 >= + min(INTEL_PMC_MAX_GENERIC, x86_pmu.num_counters_gp)) + continue; + break; + case MSR_ARCH_PERFMON_EVENTSEL0 ... MSR_ARCH_PERFMON_EVENTSEL0 + 31: + if (msrs_to_save[i] - MSR_ARCH_PERFMON_EVENTSEL0 >= + min(INTEL_PMC_MAX_GENERIC, x86_pmu.num_counters_gp)) + continue; } default: break; -- 1.8.3.1