Skip to content

Commit 2d5438f

Browse files
committed
Merge tag 'perf-urgent-2023-05-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Thomas Gleixner: "A small set of perf fixes: - Make the MSR-readout based CHA discovery work around broken discovery tables in some SPR firmwares. - Prevent saving PEBS configuration which has software bits set that cause a crash when restored into the relevant MSR" * tag 'perf-urgent-2023-05-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf/x86/uncore: Correct the number of CHAs on SPR perf/x86/intel: Save/restore cpuc->active_pebs_data_cfg when using guest PEBS
2 parents abbf7fa + 38776cc commit 2d5438f

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

arch/x86/events/intel/core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4074,7 +4074,7 @@ static struct perf_guest_switch_msr *intel_guest_get_msrs(int *nr, void *data)
40744074
if (x86_pmu.intel_cap.pebs_baseline) {
40754075
arr[(*nr)++] = (struct perf_guest_switch_msr){
40764076
.msr = MSR_PEBS_DATA_CFG,
4077-
.host = cpuc->pebs_data_cfg,
4077+
.host = cpuc->active_pebs_data_cfg,
40784078
.guest = kvm_pmu->pebs_data_cfg,
40794079
};
40804080
}

arch/x86/events/intel/uncore_snbep.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6150,6 +6150,7 @@ static struct intel_uncore_type spr_uncore_mdf = {
61506150
};
61516151

61526152
#define UNCORE_SPR_NUM_UNCORE_TYPES 12
6153+
#define UNCORE_SPR_CHA 0
61536154
#define UNCORE_SPR_IIO 1
61546155
#define UNCORE_SPR_IMC 6
61556156
#define UNCORE_SPR_UPI 8
@@ -6460,12 +6461,22 @@ static int uncore_type_max_boxes(struct intel_uncore_type **types,
64606461
return max + 1;
64616462
}
64626463

6464+
#define SPR_MSR_UNC_CBO_CONFIG 0x2FFE
6465+
64636466
void spr_uncore_cpu_init(void)
64646467
{
6468+
struct intel_uncore_type *type;
6469+
u64 num_cbo;
6470+
64656471
uncore_msr_uncores = uncore_get_uncores(UNCORE_ACCESS_MSR,
64666472
UNCORE_SPR_MSR_EXTRA_UNCORES,
64676473
spr_msr_uncores);
64686474

6475+
type = uncore_find_type_by_id(uncore_msr_uncores, UNCORE_SPR_CHA);
6476+
if (type) {
6477+
rdmsrl(SPR_MSR_UNC_CBO_CONFIG, num_cbo);
6478+
type->num_boxes = num_cbo;
6479+
}
64696480
spr_uncore_iio_free_running.num_boxes = uncore_type_max_boxes(uncore_msr_uncores, UNCORE_SPR_IIO);
64706481
}
64716482

0 commit comments

Comments
 (0)