• Paul Mackerras's avatar
    perf_counters: allow users to count user, kernel and/or hypervisor events · 0475f9ea
    Paul Mackerras authored
    Impact: new perf_counter feature
    
    This extends the perf_counter_hw_event struct with bits that specify
    that events in user, kernel and/or hypervisor mode should not be
    counted (i.e. should be excluded), and adds code to program the PMU
    mode selection bits accordingly on x86 and powerpc.
    
    For software counters, we don't currently have the infrastructure to
    distinguish which mode an event occurs in, so we currently fail the
    counter initialization if the setting of the hw_event.exclude_* bits
    would require us to distinguish.  Context switches and CPU migrations
    are currently considered to occur in kernel mode.
    
    On x86, this changes the previous policy that only root can count
    kernel events.  Now non-root users can count kernel events or exclude
    them.  Non-root users still can't use NMI events, though.  On x86 we
    don't appear to have any way to control whether hypervisor events are
    counted or not, so hw_event.exclude_hv is ignored.
    
    On powerpc, the selection of whether to count events in user, kernel
    and/or hypervisor mode is PMU-wide, not per-counter, so this adds a
    check that the hw_event.exclude_* settings are the same as other events
    on the PMU.  Counters being added to a group have to have the same
    settings as the other hardware counters in the group.  Counters and
    groups can only be enabled in hw_perf_group_sched_in or power_perf_enable
    if they have the same settings as any other counters already on the
    PMU.  If we are not running on a hypervisor, the exclude_hv setting
    is ignored (by forcing it to 0) since we can't ever get any
    hypervisor events.
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    0475f9ea
perf_counter.c 20.1 KB