All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aleksandar Dezelin <dezelin@gmail.com>
To: linux-kernel@vger.kernel.org
Subject: Possible kernel lock in semaphore's __down()
Date: Wed, 29 Aug 2007 23:52:51 +0200	[thread overview]
Message-ID: <1188424371.8853.9.camel@synaptical> (raw)

Hi!

I'm a newbie here on the list and also as a "kernel hacker". There's a
bug reported in bugzilla (Bug 7927), cite:


> In the function __down
>  
> fastcall void __sched __down(struct semaphore * sem)
> {
>  struct task_struct *tsk = current;
>  DECLARE_WAITQUEUE(wait, tsk);
>  unsigned long flags;
>  
>  tsk->state = TASK_UNINTERRUPTIBLE;
>  spin_lock_irqsave(&sem->wait.lock, flags);
>  add_wait_queue_exclusive_locked(&sem->wait, &wait);
>  ...
> }
>  
> 
> From this code fragment, it sets the tsk->state to TASK_UNINTERRUPTIBLE before 
> gets the spinlock. Assume at that moment, a interrupt ocuur and and after the 
> interrupt handle ends, an other process is scheduled to run (assume the kernel 
> is preemptalbe). In this case, the previous process ( its state has set to 
> TASK_UNINTERRUPTIBLE) has been picked off the run queue, and it has not yet add 
> to the wait queue( sem->wait ), so it may be never waited up forever. 
> 

I have marked it as rejected as as I can see at the time this function is called,
it is guaranteed that ret_from_intr() will not call schedule() on return from an 
interrupt handler to either kernel space or user space because of the call 
to macro might_sleep() in semaphore's down(). Am I wrong?

Thanks and best regards,
Aleksandar Dezelin




             reply	other threads:[~2007-08-29 21:53 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-29 21:52 Aleksandar Dezelin [this message]
2007-08-30  7:16 ` Possible kernel lock in semaphore's __down() Peter Zijlstra
2007-08-30  9:12   ` Oleg Nesterov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1188424371.8853.9.camel@synaptical \
    --to=dezelin@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.