Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92af254a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
parents f747307e 5a94bcfd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ EXPORT_SYMBOL(clear_page);

#ifdef CONFIG_VIRTUAL_MEM_MAP
#include <linux/bootmem.h>
EXPORT_SYMBOL(min_low_pfn);	/* defined by bootmem.c, but not exported by generic code */
EXPORT_SYMBOL(max_low_pfn);	/* defined by bootmem.c, but not exported by generic code */
#endif

+1 −1
Original line number Diff line number Diff line
@@ -740,7 +740,7 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
	switch(val) {
	case DIE_BREAK:
		/* err is break number from ia64_bad_break() */
		if (args->err == 0x80200 || args->err == 0x80300)
		if (args->err == 0x80200 || args->err == 0x80300 || args->err == 0)
			if (pre_kprobes_handler(args))
				ret = NOTIFY_STOP;
		break;
+0 −18
Original line number Diff line number Diff line
@@ -132,24 +132,6 @@ __kprobes ia64_bad_break (unsigned long break_num, struct pt_regs *regs)
	siginfo_t siginfo;
	int sig, code;

	/* break.b always sets cr.iim to 0, which causes problems for
	 * debuggers.  Get the real break number from the original instruction,
	 * but only for kernel code.  User space break.b is left alone, to
	 * preserve the existing behaviour.  All break codings have the same
	 * format, so there is no need to check the slot type.
	 */
	if (break_num == 0 && !user_mode(regs)) {
		struct ia64_psr *ipsr = ia64_psr(regs);
		unsigned long *bundle = (unsigned long *)regs->cr_iip;
		unsigned long slot;
		switch (ipsr->ri) {
		      case 0:  slot = (bundle[0] >>  5); break;
		      case 1:  slot = (bundle[0] >> 46) | (bundle[1] << 18); break;
		      default: slot = (bundle[1] >> 23); break;
		}
		break_num = ((slot >> 36 & 1) << 20) | (slot >> 6 & 0xfffff);
	}

	/* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */
	siginfo.si_addr = (void __user *) (regs->cr_iip + ia64_psr(regs)->ri);
	siginfo.si_imm = break_num;
+2 −1
Original line number Diff line number Diff line
@@ -110,8 +110,9 @@ extern int ia64_pfn_valid (unsigned long pfn);
# define pfn_to_page(pfn)	(mem_map + (pfn))
#elif defined(CONFIG_DISCONTIGMEM)
extern struct page *vmem_map;
extern unsigned long min_low_pfn;
extern unsigned long max_low_pfn;
# define pfn_valid(pfn)		(((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
# define pfn_valid(pfn)		(((pfn) >= min_low_pfn) && ((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
# define page_to_pfn(page)	((unsigned long) (page - vmem_map))
# define pfn_to_page(pfn)	(vmem_map + (pfn))
#endif