> could you please try the following hunk? > > diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S > index 6808cd9526c67..63c6960262861 100644 > --- a/arch/arm64/kernel/entry.S > +++ b/arch/arm64/kernel/entry.S > @@ -648,7 +648,8 @@ alternative_if ARM64_HAS_IRQ_PRIO_MASKING > orr x24, x24, x0 > alternative_else_nop_endif > > - cbnz x24, 2f // preempt count != 0 > + cbz x24, 1f // (need_resched + count) == 0 > + cbnz w24, 2f // count != 0 > > ldr w24, [tsk, #TSK_TI_PREEMPT_LAZY] // get preempt lazy count > cbnz w24, 2f // preempt lazy count != 0 > After correctly applying this patch I do not see large latencies, >15M iterations and counting. # ./cyclictest -S -m -n -p 99 -i 200 -h 700 -f # /dev/cpu_dma_latency set to 0us policy: fifo: loadavg: 0.04 0.06 0.18 1/134 2043 T: 0 ( 1968) P:99 I:200 C:15081932 Min: 6 Act: 8 Avg: 7 Max: 22 T: 1 ( 1969) P:99 I:200 C:15081831 Min: 6 Act: 9 Avg: 7 Max: 17 T: 2 ( 1970) P:99 I:200 C:15081727 Min: 6 Act: 9 Avg: 8 Max: 17 T: 3 ( 1971) P:99 I:200 C:15081619 Min: 6 Act: 9 Avg: 8 Max: 18 I apologize for messing this up the first time. I had copied the text strait from gmail and it failed to apply. If I had used 'patch -l' or copied it from the archive, then it directly applies and I wouldn't have messed up when I put it in manually. Just for reference here's how I screwed it up: diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 6808cd9526c6..be0933a3f5e3 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -651,7 +651,8 @@ alternative_else_nop_endif cbnz x24, 2f // preempt count != 0 ldr w24, [tsk, #TSK_TI_PREEMPT_LAZY] // get preempt lazy count - cbnz w24, 2f // preempt lazy count != 0 + cbz x24, 1f // (need_resched + count) == 0 + cbnz w24, 2f // count != 0 ldr x0, [tsk, #TSK_TI_FLAGS] // get flags tbz x0, #TIF_NEED_RESCHED_LAZY, 2f // needs rescheduling? thanks, Paul