The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c874d312e78fc60e6731a043fc45b47165618370

commit c874d312e78fc60e6731a043fc45b47165618370
Author:     Benjamin Jacobs <[email protected]>
AuthorDate: 2026-09-03 13:52:21 +0000
Commit:     Mark Johnston <[email protected]>
CommitDate: 2026-09-03 15:05:03 +0000

    dtrace/arm: Fix and de-pessimize dtrace_copy
    
    Use an unprivileged load to access user memory from dtrace_copy, which
    is running in SVC mode.
    
    Abort the loop if the load is trapped, as it is useless, hence
    wasteful, to keep faulting on successive addresses. I believe that
    this de-pessimization should also be done on aarch64 and riscv.
    
    PR:             298064
    MFC after:      1 month
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D59280
---
 sys/cddl/dev/dtrace/arm/dtrace_asm.S | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/sys/cddl/dev/dtrace/arm/dtrace_asm.S 
b/sys/cddl/dev/dtrace/arm/dtrace_asm.S
index b0eba6f1ed9f..d4730384b581 100644
--- a/sys/cddl/dev/dtrace/arm/dtrace_asm.S
+++ b/sys/cddl/dev/dtrace/arm/dtrace_asm.S
@@ -130,13 +130,14 @@ dtrace_copy(uintptr_t uaddr, uintptr_t kaddr, size_t size)
 ENTRY(dtrace_copy)
        stmfd   sp!, {r4-r5}                    /* stack is 8 byte aligned */
        teq     r2, #0x00000000
-       mov     r5, #0x00000000
        beq     2f
 
-1:     ldrb    r4, [r0], #0x0001
-       add     r5, r5, #0x00000001
-       strb    r4, [r1], #0x0001
-       teqne   r5, r2
+1:     mov     r4, r0
+       ldrbt   r3, [r0], #1
+       teq     r0, r4                          /* Check if the load was 
trapped */
+       beq     2f                              /* Yes, quit now */
+       strb    r3, [r1], #1
+       subs    r2, r2, #1
        bne     1b
 
 2:     ldmfd   sp!, {r4-r5}                    /* stack is 8 byte aligned */

Reply via email to