s390: add error handling to perf_callchain_kernel
[linux-2.6-microblaze.git] / arch / s390 / kernel / perf_event.c
index fcb6c2e..1e75cc9 100644 (file)
@@ -224,9 +224,13 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
                           struct pt_regs *regs)
 {
        struct unwind_state state;
+       unsigned long addr;
 
-       unwind_for_each_frame(&state, current, regs, 0)
-               perf_callchain_store(entry, state.ip);
+       unwind_for_each_frame(&state, current, regs, 0) {
+               addr = unwind_get_return_address(&state);
+               if (!addr || perf_callchain_store(entry, addr))
+                       return;
+       }
 }
 
 /* Perf definitions for PMU event attributes in sysfs */