Thread (9 messages) flat view 9 messages, 4 authors, 2019-06-06

Re: [RFC V2] mm: Generalize notify_page_fault()

From: Anshuman Khandual <hidden>
Date: 2019-06-06 02:03:48
Also in: linux-arm-kernel, linux-mm, linux-s390, linux-sh, lkml, sparclinux


On 06/05/2019 03:23 AM, Matthew Wilcox wrote:
On Tue, Jun 04, 2019 at 12:04:06PM +0530, Anshuman Khandual wrote:
quoted
+++ b/arch/x86/mm/fault.c
@@ -46,23 +46,6 @@ kmmio_fault(struct pt_regs *regs, unsigned long addr)
 	return 0;
 }
 
-static nokprobe_inline int kprobes_fault(struct pt_regs *regs)
-{
...
quoted
-}
quoted
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 0e8834a..c5a8dcf 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1778,6 +1778,7 @@ static inline int pte_devmap(pte_t pte)
 }
 #endif
 
+int notify_page_fault(struct pt_regs *regs, unsigned int trap);
Why is it now out-of-line?  
Did not get it. AFAICS it is the same from last version and does not cross
80 characters limit on that line.
quoted
+++ b/mm/memory.c
+int __kprobes notify_page_fault(struct pt_regs *regs, unsigned int trap)
+{
+	int ret = 0;
+
+	/*
+	 * To be potentially processing a kprobe fault and to be allowed
+	 * to call kprobe_running(), we have to be non-preemptible.
+	 */
+	if (kprobes_built_in() && !preemptible() && !user_mode(regs)) {
+		if (kprobe_running() && kprobe_fault_handler(regs, trap))
+			ret = 1;
+	}
+	return ret;
+}
+
I would argue this should be in kprobes.h as a static nokprobe_inline.
We can do that. Though it will be a stand alone (not inside #ifdef) as it
already takes care of CONFIG_KPROBES via kprobes_built_in(). Will change
it and in which case the above declaration in mm.h would not be required.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help