Messages in this thread | | | Subject | Re: Process blocking behaviour | From | Daniel Gryniewicz <> | Date | Fri, 07 Jan 2005 12:29:36 -0500 |
| |
On Thu, 2005-01-06 at 22:58 -0800, selvakumar nagendran wrote: > Hello linux-experts, > > I am intercepting system calls in Linux kernel > 2.4.28. > > Pseudo-code: > ------------ > saved_old_syscall = > sys_call_table[sycallno(read)]; > sys_call_table[read] = my_sys_call; > > my_sys_call(file descriptor) > ------------- > Call saved_old_syscall(file descriptor). > > Now at this point, I want to determine whether > the system call blocks waiting for the file descriptor > resource. How can I do that? Should I modify the > kernel code only for this? > > Can I check its state after the call as > if (task_current_state == INTERRUPTIBLE > || UNINTERRUPTIBLE) to do this?
No, you can't, because by the time the syscall returns to you, it's blocked, scheduled, unblocked, and been rescheduled. It's too late. I don't think you can do what you want, without modifying all the syscalls directly.
Besides, most blocks are for data, not on something like a semaphore. What you really want is priority-inheritance semaphores, not modification of syscalls. I seem to remember someone working on such a beast, and the RTOS versions of Linux presumably have something like this, so you could check around.
Daniel - 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/
| |