On Tue, Mar 31, 2009 at 4:42 PM, Peter Teoh <htmldeveloper@xxxxxxxxx> wrote: > On Tue, Mar 31, 2009 at 4:00 PM, <kristrev@xxxxxxxxx> wrote: >>> sounds like u need a mutex or semaphore lock. not the spinlock type, >>> nevertheless, pick your choice: >>> >>> c06f5040 T _read_trylock >>> c06f5028 T _spin_trylock >>> c06f5154 T _spin_trylock_bh >>> c06f5061 T _write_trylock >>> c0444958 T down_read_trylock >>> c0444ec4 T down_trylock >>> c0444978 T down_write_trylock >>> c06f4096 T mutex_trylock >>> c044e86e t rt_mutex_slowtrylock >>> c06f4844 T rt_mutex_trylock >>> c067ccc2 T rtnl_trylock >> >> Thank you, I will look into those. >> >>> >>> but sorry, why "proc-variable" need bh-kind of lock? >> >> When reading/writing to a proc-variable, a softirq is triggered. And since > > any specific scenario where this can happened? as far as i know, > procfs is just a filesystem, and when u read/write to it, it gets > treated as a filesystem operation: fs/proc/: > > http://www.faqs.org/docs/kernel/x716.html > http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/procfs-guide/index.html > http://linuxgazette.net/115/nirendra.html > http://en.wikipedia.org/wiki/Procfs > > whereas softirq are handled via a kernel thread: ksoftirqd. correctly? > > As for executing procfs operation inside the ksoftirqd context, I am > not sure if it will happen or not, or what will happen if procfs > operation is executed. (by operations I meant for example: > fs/proc/base.c: sorry, i think i just worked out the logic (correct me if wrong). ksoftirqd does not have any process context, so the input/output of procfs comes / goes to where? therefore, it becomes illegal to access the procfs interface inside ksoftirqd context (kernel thread, which does not have any process context, so can be executed in any arbitrary process). > > base.c:static const struct file_operations proc_lstats_operations = { > base.c:static const struct file_operations proc_mounts_operations = { > base.c:static const struct file_operations proc_mountinfo_operations = { > base.c:static const struct file_operations proc_mountstats_operations = { > base.c:static const struct file_operations proc_info_file_operations = { > base.c:static const struct file_operations proc_single_file_operations = { > base.c:static const struct file_operations proc_mem_operations = { > base.c:static const struct file_operations proc_environ_operations = { > base.c:static const struct file_operations proc_oom_adjust_operations = { > base.c:static const struct file_operations proc_loginuid_operations = { > base.c:static const struct file_operations proc_sessionid_operations = { > base.c:static const struct file_operations proc_fault_inject_operations = { > base.c:static const struct file_operations proc_pid_sched_operations = { > base.c:static const struct file_operations proc_fdinfo_file_operations = { > base.c:static const struct file_operations proc_fd_operations = { > > ?????? > >> the read/write-functions of my proc variable is accsessing a shared value, >> I need to have locks that disable softirqs for the time being. >> >> -Kristian >> -- Regards, Peter Teoh -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ