• Reinette Chatre's avatar
    x86/intel_rdt: Remove local register variables · b5e4274e
    Reinette Chatre authored
    Local register variables were used in an effort to improve the
    accuracy of the measurement of cache residency of a pseudo-locked
    region. This was done to ensure that only the cache residency of
    the memory is measured and not the cache residency of the variables
    used to perform the measurement.
    
    While local register variables do accomplish the goal they do require
    significant care since different architectures have different registers
    available. Local register variables also cannot be used with valuable
    developer tools like KASAN.
    
    Significant testing has shown that similar accuracy in measurement
    results can be obtained by replacing local register variables with
    regular local variables.
    
    Make use of local variables in the critical code but do so with
    READ_ONCE() to prevent the compiler from merging or refetching reads.
    Ensure these variables are initialized before the measurement starts,
    and ensure it is only the local variables that are accessed during
    the measurement.
    
    With the removal of the local register variables and using READ_ONCE()
    there is no longer a motivation for using a direct wrmsr call (that
    avoids the additional tracing code that may clobber the local register
    variables).
    Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: fenghua.yu@intel.com
    Cc: tony.luck@intel.com
    Cc: acme@kernel.org
    Cc: gavin.hindman@intel.com
    Cc: jithu.joseph@intel.com
    Cc: dave.hansen@intel.com
    Cc: hpa@zytor.com
    Link: https://lkml.kernel.org/r/f430f57347414e0691765d92b144758ab93d8407.1537377064.git.reinette.chatre@intel.com
    b5e4274e
intel_rdt_pseudo_lock.c 41.4 KB