How task_struct.rt.time_slice is initialized?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Thanks,
Simon

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux