diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h
index 1ef54be6abfa6272abfe83b1a026def2743a826b..2dafa376a63f60f89b3697a2034c943583a1de87 100644
--- a/include/asm-powerpc/kprobes.h
+++ b/include/asm-powerpc/kprobes.h
@@ -47,16 +47,23 @@ typedef unsigned int kprobe_opcode_t;
 /*
  * 64bit powerpc uses function descriptors.
  * Handle cases where:
- * 		- User passes a <.symbol>
- * 		- User passes a <symbol>
+ * 		- User passes a <.symbol> or <module:.symbol>
+ * 		- User passes a <symbol> or <module:symbol>
  * 		- User passes a non-existant symbol, kallsyms_lookup_name
  * 		  returns 0. Don't deref the NULL pointer in that case
  */
 #define kprobe_lookup_name(name, addr)					\
 {									\
 	addr = (kprobe_opcode_t *)kallsyms_lookup_name(name);		\
-	if (!(name[0] == '.') && addr)					\
-		addr = *(kprobe_opcode_t **)addr;			\
+	if (addr) {							\
+		char *colon;						\
+		if ((colon = strchr(name, ':')) != NULL) {		\
+			colon++;					\
+			if (*colon != '\0' && *colon != '.')		\
+				addr = *(kprobe_opcode_t **)addr;	\
+		} else if (name[0] != '.')				\
+			addr = *(kprobe_opcode_t **)addr;		\
+	}								\
 }
 
 #define JPROBE_ENTRY(pentry)	(kprobe_opcode_t *)((func_descr_t *)pentry)