• Sai Prakash Ranjan's avatar
    asm-generic/io: Add _RET_IP_ to MMIO trace for more accurate debug info · 5e5ff73c
    Sai Prakash Ranjan authored
    Due to compiler optimizations like inlining, there are cases where
    MMIO traces using _THIS_IP_ for caller information might not be
    sufficient to provide accurate debug traces.
    
    1) With optimizations (Seen with GCC):
    
    In this case, _THIS_IP_ works fine and prints the caller information
    since it will be inlined into the caller and we get the debug traces
    on who made the MMIO access, for ex:
    
    rwmmio_read: qcom_smmu_tlb_sync+0xe0/0x1b0 width=32 addr=0xffff8000087447f4
    rwmmio_post_read: qcom_smmu_tlb_sync+0xe0/0x1b0 width=32 val=0x0 addr=0xffff8000087447f4
    
    2) Without optimizations (Seen with Clang):
    
    _THIS_IP_ will not be sufficient in this case as it will print only
    the MMIO accessors itself which is of not much use since it is not
    inlined as below for example:
    
    rwmmio_read: readl+0x4/0x80 width=32 addr=0xffff8000087447f4
    rwmmio_post_read: readl+0x48/0x80 width=32 val=0x4 addr=0xffff8000087447f4
    
    So in order to handle this second case as well irrespective of the compiler
    optimizations, add _RET_IP_ to MMIO trace to make it provide more accurate
    debug information in all these scenarios.
    
    Before:
    
    rwmmio_read: readl+0x4/0x80 width=32 addr=0xffff8000087447f4
    rwmmio_post_read: readl+0x48/0x80 width=32 val=0x4 addr=0xffff8000087447f4
    
    After:
    
    rwmmio_read: qcom_smmu_tlb_sync+0xe0/0x1b0 -> readl+0x4/0x80 width=32 addr=0xffff8000087447f4
    rwmmio_post_read: qcom_smmu_tlb_sync+0xe0/0x1b0 -> readl+0x4/0x80 width=32 val=0x0 addr=0xffff8000087447f4
    
    Fixes: 21003197 ("asm-generic/io: Add logging support for MMIO accessors")
    Signed-off-by: default avatarSai Prakash Ranjan <quic_saipraka@quicinc.com>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    5e5ff73c
io.h 26.8 KB