Using semaphores in kernel level driver