Hi, On Sat, Jun 06, 2015 at 06:53:22PM +0800, Simon Guo wrote: > Dear alias, > > I noticed there is a time_slice variable for SCHED_RR policy in > task_struct.rt member (I am using 4.1.0 kernel): > struct sched_rt_entity { > ... > unsigned int time_slice; > ... > }; > > Per my understanding, the task_struct.rt.time_slice should be > initialized to sched_rr_timeslice or RR_TIMESLICE . Like what process 0 has done: > #define INIT_TASK(tsk) \ > { > ... > .rt = { \ > .run_list = LIST_HEAD_INIT(tsk.rt.run_list), \ > .time_slice = RR_TIMESLICE, \ > }, > ... > } > > However I didn't see somewhere in copy_process() to set time_slice > value for a new forked SCHED_RR process. > > If time_slice is not initialized, time_slice will be with value 0 and > will be overflow to a big value in following "if (--p->rt.time_slice)" statement: > static void task_tick_rt(struct rq *rq, struct task_struct *p, int queued) > { > ... > /* > * RR tasks need a special form of timeslice management. > * FIFO tasks have no timeslices. > */ > if (p->policy != SCHED_RR) > return; > > if (--p->rt.time_slice) > return; > > p->rt.time_slice = sched_rr_timeslice; > ... > } > > Is it a bug? Please correct me if I am wrong. Looks the initialization logic is in arch_dup_task_struct(). Please ignore my previous question. Thanks, Simon _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies