Messages in this thread | | | Date | Fri, 06 Apr 2012 12:10:25 +0200 | From | Clemens Ladisch <> | Subject | Re: semaphore and mutex in current Linux kernel (3.2.2) |
| |
Chen, Dennis (SRDC SW) wrote: > On Thu, Apr 5, 2012 at 10:15 PM, Clemens Ladisch <clemens@ladisch.de> wrote: >> It would not make sense to spin too long, especially if some other >> process wants to run on the same CPU. >> >>> int mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner) >>> { >>> ... >>> while (owner_running(lock, owner)) { >>> if (need_resched()) >>> break; >>> >>> arch_mutex_cpu_relax(); >>> } >>> ... >>> } >>> >>> D+ means the App in CPU1 is sleeping in a UNINTERRUPTIBLE state. This is very interesting, >>> How does this happen? >> >> Your experiment shows that there must be some condition that makes the >> code break out of the spin loop ... > > I guess this is related with RCU component, but I don't found the right place where the code > Located yet.
"On the internet, nobody can hear you being subtle."
If some other process wants to run on the same CPU, needs_resched() is set. (This might happen to make the cursor blink, for keyboard input, or when somebody starts a rogue process like ps.)
Regards, Clemens
| |