mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
posix-timers: use "struct pid*" instead of "struct task_struct*"
Impact: restructure, clean up code k_itimer holds the ref to the ->it_process until sys_timer_delete(). This allows to pin up to RLIMIT_SIGPENDING dead task_struct's. Change the code to use "struct pid *" instead. The patch doesn't kill ->it_process, it places ->it_pid into the union. ->it_process is still used by do_cpu_nanosleep() as before. It would be trivial to change the nanosleep code as well, but since it uses it_process in a special way I think it is better to keep this field for grep. The patch bloats the kernel by 104 bytes and it also adds the new pointer, ->it_signal, to k_itimer. It is used by lock_timer() to verify that the found timer was not created by another process. It is not clear why do we use the global database (and thus the global idr_lock) for posix timers. We still need the signal_struct->posix_timers which contains all useable timers, perhaps it is better to use some form of per-process array instead. Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
6c34bc2976
commit
27af4245b6
2 changed files with 28 additions and 21 deletions
|
@ -45,7 +45,11 @@ struct k_itimer {
|
|||
int it_requeue_pending; /* waiting to requeue this timer */
|
||||
#define REQUEUE_PENDING 1
|
||||
int it_sigev_notify; /* notify word of sigevent struct */
|
||||
struct task_struct *it_process; /* process to send signal to */
|
||||
struct signal_struct *it_signal;
|
||||
union {
|
||||
struct pid *it_pid; /* pid of process to send signal to */
|
||||
struct task_struct *it_process; /* for clock_nanosleep */
|
||||
};
|
||||
struct sigqueue *sigq; /* signal queue entry. */
|
||||
union {
|
||||
struct {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue