#include <linux/wait.h>
#include <linux/workqueue.h>
#include <linux/module.h>
+#include <linux/vs_context.h>
/*
* Management arrays for POSIX timers. Timers are kept in slab memory
int posix_timer_event(struct k_itimer *timr,int si_private)
{
+ struct vx_info_save vxis;
+ int ret;
+
+ enter_vx_info(task_get_vx_info(timr->it_process), &vxis);
memset(&timr->sigq->info, 0, sizeof(siginfo_t));
timr->sigq->info.si_sys_private = si_private;
/* Send signal to the process that owns this timer.*/
if (timr->it_sigev_notify & SIGEV_THREAD_ID) {
struct task_struct *leader;
- int ret = send_sigqueue(timr->it_sigev_signo, timr->sigq,
- timr->it_process);
+ ret = send_sigqueue(timr->it_sigev_signo, timr->sigq,
+ timr->it_process);
if (likely(ret >= 0))
- return ret;
+ goto out;
timr->it_sigev_notify = SIGEV_SIGNAL;
leader = timr->it_process->group_leader;
timr->it_process = leader;
}
- return send_group_sigqueue(timr->it_sigev_signo, timr->sigq,
- timr->it_process);
+ ret = send_group_sigqueue(timr->it_sigev_signo, timr->sigq,
+ timr->it_process);
+out:
+ leave_vx_info(&vxis);
+ put_vx_info(vxis.vxi);
+ return ret;
}
EXPORT_SYMBOL_GPL(posix_timer_event);