Whamcloud - gitweb
LU-8648 all: remove all Sun license and URL references
[fs/lustre-release.git] / libcfs / libcfs / linux / linux-debug.c
index fe93f0c..40ae258 100644 (file)
  *
  * You should have received a copy of the GNU General Public License
  * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * GPL HEADER END
  */
@@ -63,7 +59,6 @@
 # define DEBUG_SUBSYSTEM S_LNET
 
 #include <libcfs/libcfs.h>
-#include <libcfs/linux/portals_compat25.h>
 
 #include "tracefile.h"
 
@@ -159,6 +154,7 @@ void libcfs_run_lbug_upcall(struct libcfs_debug_msg_data *msgdata)
 
         libcfs_run_upcall (argv);
 }
+EXPORT_SYMBOL(libcfs_run_lbug_upcall);
 
 /* coverity[+kill] */
 void lbug_with_loc(struct libcfs_debug_msg_data *msgdata)
@@ -181,9 +177,9 @@ void lbug_with_loc(struct libcfs_debug_msg_data *msgdata)
         while (1)
                 schedule();
 }
+EXPORT_SYMBOL(lbug_with_loc);
 
-#ifdef __KERNEL__
-
+#ifdef CONFIG_X86
 #include <linux/nmi.h>
 #include <asm/stacktrace.h>
 
@@ -208,13 +204,21 @@ static int print_trace_stack(void *data, char *name)
        return 0;
 }
 
-static void print_trace_address(void *data, unsigned long addr, int reliable)
+#ifdef STACKTRACE_OPS_ADDRESS_RETURN_INT
+static int
+#else
+static void
+#endif
+print_trace_address(void *data, unsigned long addr, int reliable)
 {
        char fmt[32];
 
        touch_nmi_watchdog();
        sprintf(fmt, " [<%016lx>] %s%%s\n", addr, reliable ? "": "? ");
        __print_symbol(fmt, addr);
+#ifdef STACKTRACE_OPS_ADDRESS_RETURN_INT
+       return 0;
+#endif
 }
 
 static const struct stacktrace_ops print_trace_ops = {
@@ -229,6 +233,28 @@ static const struct stacktrace_ops print_trace_ops = {
 #endif
 };
 
+static void libcfs_call_trace(struct task_struct *tsk)
+{
+       dump_trace(tsk, NULL, NULL,
+#ifdef HAVE_DUMP_TRACE_ADDRESS
+                  0,
+#endif /* HAVE_DUMP_TRACE_ADDRESS */
+                  &print_trace_ops, NULL);
+       printk("\n");
+}
+
+#else /* !CONFIG_X86 */
+
+static void libcfs_call_trace(struct task_struct *tsk)
+{
+       if ((tsk == NULL) || (tsk == current))
+               dump_stack();
+       else
+               CWARN("can't show stack: kernel doesn't export show_task\n");
+}
+
+#endif /* CONFIG_X86 */
+
 void libcfs_debug_dumpstack(struct task_struct *tsk)
 {
         /* dump_stack() */
@@ -238,13 +264,9 @@ void libcfs_debug_dumpstack(struct task_struct *tsk)
        printk("Pid: %d, comm: %.20s\n", tsk->pid, tsk->comm);
         /* show_trace_log_lvl() */
        printk("\nCall Trace:\n");
-       dump_trace(tsk, NULL, NULL,
-#ifdef HAVE_DUMP_TRACE_ADDRESS
-                   0,
-#endif /* HAVE_DUMP_TRACE_ADDRESS */
-                   &print_trace_ops, NULL);
-       printk("\n");
+       libcfs_call_trace(tsk);
 }
+EXPORT_SYMBOL(libcfs_debug_dumpstack);
 
 struct task_struct *libcfs_current(void)
 {
@@ -268,10 +290,10 @@ static int panic_notifier(struct notifier_block *self, unsigned long unused1,
         if (in_interrupt()) {
                 cfs_trace_debug_print();
         } else {
-# ifdef HAVE_KERNEL_LOCKED
+#ifdef HAVE_KERNEL_LOCKED
                while (kernel_locked())
                        unlock_kernel();
-# endif
+#endif
                libcfs_debug_dumplog_internal((void *)(long)current_pid());
         }
 #endif
@@ -293,12 +315,3 @@ void libcfs_unregister_panic_notifier(void)
 {
         atomic_notifier_chain_unregister(&panic_notifier_list, &libcfs_panic_notifier);
 }
-
-EXPORT_SYMBOL(libcfs_debug_dumpstack);
-EXPORT_SYMBOL(libcfs_current);
-
-#endif /* __KERNEL__ */
-
-EXPORT_SYMBOL(libcfs_run_upcall);
-EXPORT_SYMBOL(libcfs_run_lbug_upcall);
-EXPORT_SYMBOL(lbug_with_loc);