> Again, the trick is to not
> sync the state of the kernel and the user level. It comes naturally 
> if you properly separate the duties.
> 
Your code for usema_down is simply:
int usema_down(ulock_t *ulock)
{
	if (!__ulock_down(ulock)) {
		return 0;
	}
	return ulock_wait(ulock,0);
}
This means you do not recheck if the usema is really available after you 
return form ulock_wait(), but you may have the following situtation:
Process 1             Process 2                        Process 3
  down
                       down
                         -> call usema_wait
                         but gets preempted shortly
                         before it
                         can enter kernel mode
  up
   (kernel sema is free)
                                                          down -> got it
                       resume execution,
                       thinks its also got it
                       because kernel sema is free!
Now you have two owners!!
Martin Wirth
-
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/