ftrace: warn on failure to disable mcount callers
With the recent updates to ftrace, there should not be any failures when modifying the code. If there is, then we need to warn about it. This patch has a cleaned up version of the code that I used to discover that the weak symbols were causing failures. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
		
							parent
							
								
									43a15386c4
								
							
						
					
					
						commit
						05736a427f
					
				| @ -576,6 +576,16 @@ static void ftrace_shutdown_replenish(void) | ||||
| 	ftrace_pages->next = (void *)get_zeroed_page(GFP_KERNEL); | ||||
| } | ||||
| 
 | ||||
| static void print_ip_ins(const char *fmt, unsigned char *p) | ||||
| { | ||||
| 	int i; | ||||
| 
 | ||||
| 	printk(KERN_CONT "%s", fmt); | ||||
| 
 | ||||
| 	for (i = 0; i < MCOUNT_INSN_SIZE; i++) | ||||
| 		printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| ftrace_code_disable(struct dyn_ftrace *rec) | ||||
| { | ||||
| @ -590,6 +600,23 @@ ftrace_code_disable(struct dyn_ftrace *rec) | ||||
| 
 | ||||
| 	failed = ftrace_modify_code(ip, call, nop); | ||||
| 	if (failed) { | ||||
| 		switch (failed) { | ||||
| 		case 1: | ||||
| 			WARN_ON_ONCE(1); | ||||
| 			pr_info("ftrace faulted on modifying "); | ||||
| 			print_ip_sym(ip); | ||||
| 			break; | ||||
| 		case 2: | ||||
| 			WARN_ON_ONCE(1); | ||||
| 			pr_info("ftrace failed to modify "); | ||||
| 			print_ip_sym(ip); | ||||
| 			print_ip_ins(" expected: ", call); | ||||
| 			print_ip_ins(" actual: ", (unsigned char *)ip); | ||||
| 			print_ip_ins(" replace: ", nop); | ||||
| 			printk(KERN_CONT "\n"); | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
| 		rec->flags |= FTRACE_FL_FAILED; | ||||
| 		return 0; | ||||
| 	} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user