jerpelea opened a new pull request, #20259:
URL: https://github.com/apache/nuttx/pull/20259

   ## Summary
   
   Fix three issues in the tickless scheduler / hrtimer path:
   
       sched/hrtimer: Fix reprogram with wrong expiration when reinserting 
hrtimer. In hrtimer_start_absolute(), when a pending hrtimer (previously the 
head of the queue) is removed and reinserted with a later expiration, the 
reprogram flag remains set although the timer is no longer the earliest one in 
the queue. The old code passed hrtimer->expired to hrtimer_reprogram(); use 
hrtimer_get_first()->expired instead so the hardware timer is always 
reprogrammed with the actual earliest expiration.
   
       sched/sched: Fix roundrobin if SCHED_TICKLESS enabled. In tickless mode 
the scheduler timer is stopped whenever the running task requires no time 
slicing (CLOCK_MAX). When a SCHED_RR task was later switched in, nothing 
re-armed the timer, so the task could run indefinitely without round-robin 
rotation. Reassess the scheduler timer in nxsched_switch_context() before the 
context switch when the incoming task uses round-robin scheduling. Every 
architecture invokes nxsched_switch_context() exactly once per context switch 
(task switch, syscall, IRQ exit and task exit paths), so this covers all switch 
paths.
   
       sched/tickless: Fix SCHED_RR timeslice accounting on preemption. When an 
RR task was preempted, its timeslice counter was not decremented for the time 
already consumed, effectively granting the task bonus CPU time when resumed. 
Perform RR accounting on context switches: nxsched_suspend_roundrobin() charges 
the elapsed execution time against the timeslice of the RR task being switched 
out, and nxsched_resume_roundrobin() re-arms the scheduler timer for the 
remaining timeslice of the RR task being switched in, so the timer is always 
armed while an RR task is running. This also removes the previous workaround in 
nxsched_process_timer() that ran the scheduler logic on every timer tick.
   
   ## Impact
   
   RELEASE
   
   ## Testing
   
   CI


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to