diff options
| -rw-r--r-- | arch/x86/events/intel/rapl.c | 82 |
1 files changed, 3 insertions, 79 deletions
diff --git a/arch/x86/events/intel/rapl.c b/arch/x86/events/intel/rapl.c index 460196c02bae..64ab51ffdf06 100644 --- a/arch/x86/events/intel/rapl.c +++ b/arch/x86/events/intel/rapl.c | |||
| @@ -671,75 +671,6 @@ static int __init init_rapl_pmus(void) | |||
| 671 | #define X86_RAPL_MODEL_MATCH(model, init) \ | 671 | #define X86_RAPL_MODEL_MATCH(model, init) \ |
| 672 | { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&init } | 672 | { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&init } |
| 673 | 673 | ||
| 674 | struct intel_rapl_init_fun { | ||
| 675 | bool apply_quirk; | ||
| 676 | }; | ||
| 677 | |||
| 678 | static const struct intel_rapl_init_fun snb_rapl_init __initconst = { | ||
| 679 | .apply_quirk = false, | ||
| 680 | }; | ||
| 681 | |||
| 682 | static const struct intel_rapl_init_fun hsx_rapl_init __initconst = { | ||
| 683 | .apply_quirk = true, | ||
| 684 | }; | ||
| 685 | |||
| 686 | static const struct intel_rapl_init_fun hsw_rapl_init __initconst = { | ||
| 687 | .apply_quirk = false, | ||
| 688 | }; | ||
| 689 | |||
| 690 | static const struct intel_rapl_init_fun snbep_rapl_init __initconst = { | ||
| 691 | .apply_quirk = false, | ||
| 692 | }; | ||
| 693 | |||
| 694 | static const struct intel_rapl_init_fun knl_rapl_init __initconst = { | ||
| 695 | .apply_quirk = true, | ||
| 696 | }; | ||
| 697 | |||
| 698 | static const struct intel_rapl_init_fun skl_rapl_init __initconst = { | ||
| 699 | .apply_quirk = false, | ||
| 700 | }; | ||
| 701 | |||
| 702 | static const struct x86_cpu_id rapl_cpu_match[] __initconst = { | ||
| 703 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_SANDYBRIDGE, snb_rapl_init), | ||
| 704 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_SANDYBRIDGE_X, snbep_rapl_init), | ||
| 705 | |||
| 706 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_IVYBRIDGE, snb_rapl_init), | ||
| 707 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_IVYBRIDGE_X, snbep_rapl_init), | ||
| 708 | |||
| 709 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_CORE, hsw_rapl_init), | ||
| 710 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_X, hsx_rapl_init), | ||
| 711 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_ULT, hsw_rapl_init), | ||
| 712 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_GT3E, hsw_rapl_init), | ||
| 713 | |||
| 714 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_CORE, hsw_rapl_init), | ||
| 715 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_GT3E, hsw_rapl_init), | ||
| 716 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_X, hsx_rapl_init), | ||
| 717 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_XEON_D, hsx_rapl_init), | ||
| 718 | |||
| 719 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_XEON_PHI_KNL, knl_rapl_init), | ||
| 720 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_XEON_PHI_KNM, knl_rapl_init), | ||
| 721 | |||
| 722 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_MOBILE, skl_rapl_init), | ||
| 723 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_DESKTOP, skl_rapl_init), | ||
| 724 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_X, hsx_rapl_init), | ||
| 725 | |||
| 726 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE_MOBILE, skl_rapl_init), | ||
| 727 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE_DESKTOP, skl_rapl_init), | ||
| 728 | |||
| 729 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_CANNONLAKE_MOBILE, skl_rapl_init), | ||
| 730 | |||
| 731 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT, hsw_rapl_init), | ||
| 732 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT_X, hsw_rapl_init), | ||
| 733 | |||
| 734 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT_PLUS, hsw_rapl_init), | ||
| 735 | |||
| 736 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_ICELAKE_MOBILE, skl_rapl_init), | ||
| 737 | X86_RAPL_MODEL_MATCH(INTEL_FAM6_ICELAKE_DESKTOP, skl_rapl_init), | ||
| 738 | {}, | ||
| 739 | }; | ||
| 740 | |||
| 741 | MODULE_DEVICE_TABLE(x86cpu, rapl_cpu_match); | ||
| 742 | |||
| 743 | static struct rapl_model model_snb = { | 674 | static struct rapl_model model_snb = { |
| 744 | .events = BIT(PERF_RAPL_PP0) | | 675 | .events = BIT(PERF_RAPL_PP0) | |
| 745 | BIT(PERF_RAPL_PKG) | | 676 | BIT(PERF_RAPL_PKG) | |
| @@ -813,12 +744,12 @@ static const struct x86_cpu_id rapl_model_match[] __initconst = { | |||
| 813 | {}, | 744 | {}, |
| 814 | }; | 745 | }; |
| 815 | 746 | ||
| 747 | MODULE_DEVICE_TABLE(x86cpu, rapl_model_match); | ||
| 748 | |||
| 816 | static int __init rapl_pmu_init(void) | 749 | static int __init rapl_pmu_init(void) |
| 817 | { | 750 | { |
| 818 | const struct x86_cpu_id *id; | 751 | const struct x86_cpu_id *id; |
| 819 | struct intel_rapl_init_fun *rapl_init; | ||
| 820 | struct rapl_model *rm; | 752 | struct rapl_model *rm; |
| 821 | bool apply_quirk; | ||
| 822 | int ret; | 753 | int ret; |
| 823 | 754 | ||
| 824 | id = x86_match_cpu(rapl_model_match); | 755 | id = x86_match_cpu(rapl_model_match); |
| @@ -829,14 +760,7 @@ static int __init rapl_pmu_init(void) | |||
| 829 | rapl_cntr_mask = perf_msr_probe(rapl_msrs, PERF_RAPL_MAX, | 760 | rapl_cntr_mask = perf_msr_probe(rapl_msrs, PERF_RAPL_MAX, |
| 830 | false, (void *) &rm->events); | 761 | false, (void *) &rm->events); |
| 831 | 762 | ||
| 832 | id = x86_match_cpu(rapl_cpu_match); | 763 | ret = rapl_check_hw_unit(rm->apply_quirk); |
| 833 | if (!id) | ||
| 834 | return -ENODEV; | ||
| 835 | |||
| 836 | rapl_init = (struct intel_rapl_init_fun *)id->driver_data; | ||
| 837 | apply_quirk = rapl_init->apply_quirk; | ||
| 838 | |||
| 839 | ret = rapl_check_hw_unit(apply_quirk); | ||
| 840 | if (ret) | 764 | if (ret) |
| 841 | return ret; | 765 | return ret; |
| 842 | 766 | ||
