• Bharat Bhushan's avatar
    powerpc: Restore dbcr0 on user space exit · 13d543cd
    Bharat Bhushan authored
    On BookE (Branch taken + Single Step) is as same as Branch Taken
    on BookS and in Linux we simulate BookS behavior for BookE as well.
    When doing so, in Branch taken handling we want to set DBCR0_IC but
    we update the current->thread->dbcr0 and not DBCR0.
    
    Now on 64bit the current->thread.dbcr0 (and other debug registers)
    is synchronized ONLY on context switch flow. But after handling
    Branch taken in debug exception if we return back to user space
    without context switch then single stepping change (DBCR0_ICMP)
    does not get written in h/w DBCR0 and Instruction Complete exception
    does not happen.
    
    This fixes using ptrace reliably on BookE-PowerPC
    
    lmbench latency test (lat_syscall) Results are (they varies a little
    on each run)
    
    1) ./lat_syscall <action> /dev/shm/uImage
    
    action:	Open	read	write	stat	fstat	null
    Before:	3.8618	0.2017	0.2851	1.6789	0.2256	0.0856
    After:	3.8580	0.2017	0.2851	1.6955	0.2255	0.0856
    
    1) ./lat_syscall -P 2 -N 10 <action> /dev/shm/uImage
    action:	Open	read	write	stat	fstat	null
    Before:	4.1388	0.2238	0.3066	1.7106	0.2256	0.0856
    After:	4.1413	0.2236	0.3062	1.7107	0.2256	0.0856
    
    [ Slightly modified to avoid extra branch in the fast path
      on Book3S and fix build on all non-BookE 64-bit -- BenH
    ]
    Signed-off-by: default avatarBharat Bhushan <bharat.bhushan@freescale.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    13d543cd
asm-offsets.c 30.5 KB