• Paul Mackerras's avatar
    perf_counter: allow arch to supply event misc flags and instruction pointer · 9d23a90a
    Paul Mackerras authored
    At present the values we put in overflow events for the misc
    flags indicating processor mode and the instruction pointer are
    obtained using the standard user_mode() and
    instruction_pointer() functions. Those functions tell you where
    the performance monitor interrupt was taken, which might not be
    exactly where the counter overflow occurred, for example
    because interrupts were disabled at the point where the
    overflow occurred, or because the processor had many
    instructions in flight and chose to complete some more
    instructions beyond the one that caused the counter overflow.
    
    Some architectures (e.g. powerpc) can supply more precise
    information about where the counter overflow occurred and the
    processor mode at that point.  This introduces new functions,
    perf_misc_flags() and perf_instruction_pointer(), which arch
    code can override to provide more precise information if
    available.  They have default implementations which are
    identical to the existing code.
    
    This also adds a new misc flag value,
    PERF_EVENT_MISC_HYPERVISOR, for the case where a counter
    overflow occurred in the hypervisor.  We encode the processor
    mode in the 2 bits previously used to indicate user or kernel
    mode; the values for user and kernel mode are unchanged and
    hypervisor mode is indicated by both bits being set.
    
    [ Impact: generalize perfcounter core facilities ]
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    LKML-Reference: <18956.1272.818511.561835@cargo.ozlabs.ibm.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    9d23a90a
perf_counter.c 81.5 KB