Re: Question regarding kernel threads and userlevel

Anton Altaparmakov (aia21@cam.ac.uk)
Sat, 28 Apr 2001 09:32:36 +0100


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/