Messages in this thread | | | Date | Sat, 28 Apr 2001 09:32:36 +0100 | From | Anton Altaparmakov <> | Subject | Re: Question regarding kernel threads and userlevel |
| |
At 01:42 28/04/2001, Steffen Persvold wrote: >I have a question regarding kernel threads : Are kernel threads treated >equally in terms of scheduling as normal userlevel processes ??
I'm sure someone will correct me if I am wrong but I would think that kernel threads are treated the same as the kernel, i.e. they are not pre-emptied unless you call schedule yourself or you sleep.
>kernel thread gets scheduled and tries to get the same lock it will >deadlock because the userlevel process never gets back control and >releases the lock.
It never gets pre-emptied according to the above so it would spin for ever. You would need a SMP system which would be running the user space code on a second CPU to unlock again. (And if your kernel thread is holding any other locks which the user mode thread will take along it's kernel code path you will deadlock, too.)
If my suggestion above is correct then you can fix this by doing:
while (!spin_trylock()) schedule();
Which will forcefully schedule to allow your processes to run and you know that as soon as you drop out of the loop you are holding the lock. If you want you could also add in a counter a display a warning or something if you don't manage to acquire a lock after several tries, perhaps just for debugging purposes.
Best regards,
Anton
-- Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @) Linux NTFS Maintainer / WWW: http://sourceforge.net/projects/linux-ntfs/ ICQ: 8561279 / WWW: http://www-stu.christs.cam.ac.uk/~aia21/
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |