• Kan Liang's avatar
    perf/x86: Register hybrid PMUs · d9977c43
    Kan Liang authored
    Different hybrid PMUs have different PMU capabilities and events. Perf
    should registers a dedicated PMU for each of them.
    
    To check the X86 event, perf has to go through all possible hybrid pmus.
    
    All the hybrid PMUs are registered at boot time. Before the
    registration, add intel_pmu_check_hybrid_pmus() to check and update the
    counters information, the event constraints, the extra registers and the
    unique capabilities for each hybrid PMUs.
    
    Postpone the display of the PMU information and HW check to
    CPU_STARTING, because the boot CPU is the only online CPU in the
    init_hw_perf_events(). Perf doesn't know the availability of the other
    PMUs. Perf should display the PMU information only if the counters of
    the PMU are available.
    
    One type of CPUs may be all offline. For this case, users can still
    observe the PMU in /sys/devices, but its CPU mask is 0.
    
    All hybrid PMUs have capability PERF_PMU_CAP_HETEROGENEOUS_CPUS.
    The PMU name for hybrid PMUs will be "cpu_XXX", which will be assigned
    later in a separated patch.
    
    The PMU type id for the core PMU is still PERF_TYPE_RAW. For the other
    hybrid PMUs, the PMU type id is not hard code.
    
    The event->cpu must be compatitable with the supported CPUs of the PMU.
    Add a check in the x86_pmu_event_init().
    
    The events in a group must be from the same type of hybrid PMU.
    The fake cpuc used in the validation must be from the supported CPU of
    the event->pmu.
    
    Perf may not retrieve a valid core type from get_this_hybrid_cpu_type().
    For example, ADL may have an alternative configuration. With that
    configuration, Perf cannot retrieve the core type from the CPUID leaf
    0x1a. Add a platform specific get_hybrid_cpu_type(). If the generic way
    fails, invoke the platform specific get_hybrid_cpu_type().
    Suggested-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/1618237865-33448-17-git-send-email-kan.liang@linux.intel.com
    d9977c43
core.c 166 KB