sched_addr = swap_ksyms("__switch_to");
fork_addr = swap_ksyms("do_fork");
exit_addr = swap_ksyms("do_exit");
+ sys_exit_group_addr = swap_ksyms("sys_exit_group");
+ do_group_exit_addr = swap_ksyms("do_group_exit");
if ((void *)sched_addr == NULL ||
- (void *)fork_addr == NULL ||
- (void *)exit_addr == NULL) {
+ (void *)fork_addr == NULL ||
+ (void *)exit_addr == NULL ||
+ (void *)sys_exit_group_addr == NULL ||
+ (void *)do_group_exit_addr == NULL) {
return -ESRCH;
}
} else if ((unsigned long)rp->kp.addr == exit_addr) {
rp->kp.pre_handler = NULL; //not needed for do_exit
rp->maxactive = 0;
+ } else if ((unsigned long)rp->kp.addr == do_group_exit_addr) {
+ rp->kp.pre_handler = NULL;
+ rp->maxactive = 0;
+ } else if ((unsigned long)rp->kp.addr == sys_exit_group_addr) {
+ rp->kp.pre_handler = NULL;
+ rp->maxactive = 0;
} else if (rp->maxactive <= 0) {
#if 1//def CONFIG_PREEMPT
rp->maxactive = max (COMMON_RP_NR, 2 * NR_CPUS);
unsigned long sched_addr;
unsigned long fork_addr;
unsigned long exit_addr;
+unsigned long sys_exit_group_addr;
+unsigned long do_group_exit_addr;
#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 29)
/* kernel define 'pgd_offset_k' redefinition */
extern unsigned long sched_addr;
extern unsigned long fork_addr;
extern unsigned long exit_addr;
-
+extern unsigned long sys_exit_group_addr;
+extern unsigned long do_group_exit_addr;
DECLARE_MOD_DEP_WRAPPER (__flush_anon_page, \
void, struct vm_area_struct *vma, \