pid_task function fails to execute
Hello friends, I am having issue with the pid_task function with arguments first as userspace pid (using getpid fn) and 2nd argument PIDTYPE_PID. "pid_task(<pid from userspace>, PIDTYPE_PID);" Can anyone assist me what can be the cause? Have a Good Day, Thank you, Ankur. *The kernel gives exception as below:* Unable to handle kernel NULL pointer dereference at virtual address 000001dd pgd = c7c04000 [000001dd] *pgd=779fe031, *pte=00000000, *ppte=00000000 Internal error: Oops: 1 [#1] last sysfs file: /sys/devices/platform/i2c-gpio.1/i2c-1/1-0048/temp1_pid <8>Modules linked in: tmp102 <8>CPU: 0 Tainted: G W (2.6.33.2 #100) <8>PC is at pid_task+0x18/0x44
I found the issue: one has to pass arguments to pid_task as: pid_task(find_get_pid(<pid found using sys_getpid in userspace>) , PIDTYPE_PID); I am trying to understand how the pid value using find_get_pid function differs from the pid found in the userspace. It seems that they are different and due to that kernel get exception. Feel free to share comments. Thank you, Ankur.
Hi, On Thu, May 5, 2011 at 1:42 AM, conn intel <connintel@gmail.com> wrote:
I found the issue:
one has to pass arguments to pid_task as: pid_task(find_get_pid(<pid found using sys_getpid in userspace>) , PIDTYPE_PID);
I am trying to understand how the pid value using find_get_pid function differs from the pid found in the userspace. It seems that they are different and due to that kernel get exception.
In the kernel, the pid is like a thread-id and the tgid is the process id. In user space, the ps command shows the tgid. The /proc table also shows the tgid. You can see all of the pids associated with a process by looking at /proc/999/task/888 Replace 999 with tthe tgid and 888 with the pid. ls -1 -d /proc/*/task/* will show all of the threads running in the system ls -1 -d /proc/* will show all of the processes running in the system (which is what ps shows). -- Dave Hylands Shuswap, BC, Canada http://www.davehylands.com
On Thu, May 5, 2011 at 7:59 PM, Dave Hylands <dhylands@gmail.com> wrote:
Hi,
On Thu, May 5, 2011 at 1:42 AM, conn intel <connintel@gmail.com> wrote:
I found the issue:
one has to pass arguments to pid_task as: pid_task(find_get_pid(<pid
found
using sys_getpid in userspace>) , PIDTYPE_PID);
I am trying to understand how the pid value using find_get_pid function differs from the pid found in the userspace. It seems that they are different and due to that kernel get exception.
In the kernel, the pid is like a thread-id and the tgid is the process id.
In user space, the ps command shows the tgid. The /proc table also shows the tgid. You can see all of the pids associated with a process by looking at /proc/999/task/888
Replace 999 with tthe tgid and 888 with the pid.
ls -1 -d /proc/*/task/*
will show all of the threads running in the system
ls -1 -d /proc/*
will show all of the processes running in the system (which is what ps shows).
Thank you.
participants (2)
-
conn intel -
Dave Hylands