From: Vyacheslav Cherkashin Date: Mon, 22 Jul 2013 07:20:15 +0000 (+0400) Subject: [FIX] definition mapping pages by means of handle_mm_fault() X-Git-Tag: Tizen_SDK_2.3~336 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=994c40477ee20a35908e08bbe629c3e7e476a3f8;p=kernel%2Fswap-modules.git [FIX] definition mapping pages by means of handle_mm_fault() --- diff --git a/us_manager/helper.c b/us_manager/helper.c index c44d637..8c0ef56 100644 --- a/us_manager/helper.c +++ b/us_manager/helper.c @@ -44,14 +44,14 @@ struct pf_data { unsigned long addr; }; -static int entry_handler_pf(struct kretprobe_instance *ri, struct pt_regs *regs) +static int entry_handler_mf(struct kretprobe_instance *ri, struct pt_regs *regs) { struct pf_data *data = (struct pf_data *)ri->data; #if defined(CONFIG_X86) - data->addr = read_cr2(); + data->addr = regs->EREG(cx); #elif defined(CONFIG_ARM) - data->addr = regs->ARM_r0; + data->addr = regs->ARM_r2; #else #error this architecture is not supported #endif @@ -60,7 +60,7 @@ static int entry_handler_pf(struct kretprobe_instance *ri, struct pt_regs *regs) } /* Detects when IPs are really loaded into phy mem and installs probes. */ -static int ret_handler_pf(struct kretprobe_instance *ri, struct pt_regs *regs) +static int ret_handler_mf(struct kretprobe_instance *ri, struct pt_regs *regs) { struct task_struct *task; unsigned long page_addr; @@ -69,15 +69,16 @@ static int ret_handler_pf(struct kretprobe_instance *ri, struct pt_regs *regs) if (is_kthread(task)) return 0; + /* TODO: check return value */ page_addr = ((struct pf_data *)ri->data)->addr & PAGE_MASK; call_page_fault(task, page_addr); return 0; } -static struct kretprobe pf_kretprobe = { - .entry_handler = entry_handler_pf, - .handler = ret_handler_pf, +static struct kretprobe mf_kretprobe = { + .entry_handler = entry_handler_mf, + .handler = ret_handler_mf, .data_size = sizeof(struct pf_data) }; @@ -291,8 +292,8 @@ int register_helper(void) goto unregister_mr; } - /* install kretprobe on 'do_page_fault' to detect when they will be loaded */ - ret = dbi_register_kretprobe(&pf_kretprobe); + /* install kretprobe on 'handle_mm_fault' to detect when they will be loaded */ + ret = dbi_register_kretprobe(&mf_kretprobe); if (ret) { printk("dbi_register_kretprobe(do_page_fault) result=%d!\n", ret); goto unregister_cp; @@ -314,8 +315,8 @@ unregister_unmap: void unregister_helper(void) { - /* uninstall kretprobe with 'do_page_fault' */ - dbi_unregister_kretprobe(&pf_kretprobe); + /* uninstall kretprobe with 'handle_mm_fault' */ + dbi_unregister_kretprobe(&mf_kretprobe); /* uninstall kretprobe with 'copy_process' */ dbi_unregister_kretprobe(&cp_kretprobe); @@ -330,12 +331,12 @@ void unregister_helper(void) int init_helper(void) { unsigned long addr; - addr = swap_ksyms("do_page_fault"); + addr = swap_ksyms("handle_mm_fault"); if (addr == 0) { - printk("Cannot find address for page fault function!\n"); + printk("Cannot find address for handle_mm_fault function!\n"); return -EINVAL; } - pf_kretprobe.kp.addr = (kprobe_opcode_t *)addr; + mf_kretprobe.kp.addr = (kprobe_opcode_t *)addr; addr = swap_ksyms("copy_process"); if (addr == 0) {