User: | Jiri Slaby |
Error type: | Double Lock |
Error type description: | Some lock is locked twice unintentionally in a sequence |
File location: | kernel/sched.c |
Line in file: | 4463 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Undetermined 1
Stanse (1.2) |
Entered: | 2012-02-27 21:22:42 UTC |
4433 class = class->next; 4434 } 4435} 4436 4437/* 4438 * schedule() is the main scheduler function. 4439 */ 4440asmlinkage void __sched schedule(void) 4441{ 4442 struct task_struct *prev, *next; 4443 unsigned long *switch_count; 4444 struct rq *rq; 4445 int cpu; 4446 4447need_resched: 4448 preempt_disable(); 4449 cpu = smp_processor_id(); 4450 rq = cpu_rq(cpu); 4451 rcu_qsctr_inc(cpu); 4452 prev = rq->curr; 4453 switch_count = &prev->nivcsw; 4454 4455 release_kernel_lock(prev); 4456need_resched_nonpreemptible: 4457 4458 schedule_debug(prev); 4459 4460 if (sched_feat(HRTICK)) 4461 hrtick_clear(rq); 4462 4463 spin_lock_irq(&rq->lock); 4464 update_rq_clock(rq); 4465 clear_tsk_need_resched(prev); 4466 4467 if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) { 4468 if (unlikely(signal_pending_state(prev->state, prev))) 4469 prev->state = TASK_RUNNING; 4470 else 4471 deactivate_task(rq, prev, 1); 4472 switch_count = &prev->nvcsw; 4473 }