• Kan Liang's avatar
    perf/x86/intel/lbr: Factor out a new struct for generic optimization · 530bfff6
    Kan Liang authored
    To reduce the overhead of a context switch with LBR enabled, some
    generic optimizations were introduced, e.g. avoiding restore LBR if no
    one else touched them. The generic optimizations can also be used by
    Architecture LBR later. Currently, the fields for the generic
    optimizations are part of structure x86_perf_task_context, which will be
    deprecated by Architecture LBR. A new structure should be introduced
    for the common fields of generic optimization, which can be shared
    between Architecture LBR and model-specific LBR.
    
    Both 'valid_lbrs' and 'tos' are also used by the generic optimizations,
    but they are not moved into the new structure, because Architecture LBR
    is stack-like. The 'valid_lbrs' which records the index of the valid LBR
    is not required anymore. The TOS MSR will be removed.
    
    LBR registers may be cleared in the deep Cstate. If so, the generic
    optimizations should not be applied. Perf has to unconditionally
    restore the LBR registers. A generic function is required to detect the
    reset due to the deep Cstate. lbr_is_reset_in_cstate() is introduced.
    Currently, for the model-specific LBR, the TOS MSR is used to detect the
    reset. There will be another method introduced for Architecture LBR
    later.
    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/1593780569-62993-6-git-send-email-kan.liang@linux.intel.com
    530bfff6
lbr.c 35.2 KB