Thank you very much! I know that from 2.6.11 to now it implements with semaphore but my research is in 2.6.10
1. as you say the scheduler gives the time to "A"(never another one like "B") again after invoking release_kernel_lock(). so why scheduler invokes release_kernel_lock()?
2. I understand from your speech that BKL in 2.6.10 and before was very bad.
you think that process "A" gives BKL and invokes unlock_kernel() after some times scheduler gives the time to it again, while it's lock_depth=0 then scheduler gives BKL to it again while it does'nt need it. is it true?
3. you say that lock_kernel() can be invoken more than once by a process but in unlock_kernel() we have if(likely(--current->lock_depth<0) --unlock_kernel(); so when lock_depth!=0 never BKL will be freed and it has made a dealock. is it true?