Thank you Rene, On Tue, Oct 7, 2008 at 3:33 PM, Rene Herman <rene.herman@xxxxxxxxxxxx> wrote: > On 07-10-08 06:02, Peter Teoh wrote: > >> 2. lsmod will list all the modules loaded. I printk() the "current", >> and each running module have its own task struct ptr >> value. But ps cannot see any of them. But I supposed they should be >> on the schedulable list of task-struct right? Or may be not? > > Definitely not. Modules in Linux are not threads, either kernel- or > fullblown. They are not scheduled but just sit around your RAM waiting to be > called into exactly like other kernel code. They _are_ exactly like other > kernel code once loaded. > > When you print current from a module you're printing the task_struct of > whatever process is running inside that kernel code (at init time, the > insmod process). > OK. But if the module kthread_run() API is called, then it will be running as a "ps"-listable entity, right? For example - I can list these: /root/download/linux-2.6_latest/kernel>ps auxwf |grep kaud root 899 0.0 0.0 0 0 ? S< 15:13 0:00 \_ [kauditd] root 31120 0.0 0.0 4120 676 pts/3 S+ 23:50 0:00 \_ grep kaud And inside kernel/audit.c: audit.c: kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd"); So "kauditd" exists on the runqueue, and the task struct is kauditd_task. So now question is - what is the value of "current" in these context (inside the kauditd kernel thread), since all of them does not have a initial userspace to map to? Is "current" not kauditd_task as well? Moreover, if I were to schedule a workqueue, in the current kernel thread, and since workqueue is implemented on top of kernel thread APIs, it will run with brand new taskstruct right (and thus new "current")? Sorry, I am confused. In general, I am just trying to understand what are the entities that can be schedule on the runqueue. Thanks. -- 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