printk("\n");
 }
 
-static struct regbit {
+struct regbit {
        unsigned long bit;
        const char *name;
-} msr_bits[] = {
+};
+
+static struct regbit msr_bits[] = {
 #if defined(CONFIG_PPC64) && !defined(CONFIG_BOOKE)
        {MSR_SF,        "SF"},
        {MSR_HV,        "HV"},
        {0,             NULL}
 };
 
-static void printbits(unsigned long val, struct regbit *bits)
+static void print_bits(unsigned long val, struct regbit *bits, const char *sep)
 {
-       const char *sep = "";
+       const char *s = "";
 
-       printk("<");
        for (; bits->bit; ++bits)
                if (val & bits->bit) {
-                       printk("%s%s", sep, bits->name);
-                       sep = ",";
+                       printk("%s%s", s, bits->name);
+                       s = sep;
                }
+}
+
+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+static struct regbit msr_tm_bits[] = {
+       {MSR_TS_T,      "T"},
+       {MSR_TS_S,      "S"},
+       {MSR_TM,        "E"},
+       {0,             NULL}
+};
+
+static void print_tm_bits(unsigned long val)
+{
+/*
+ * This only prints something if at least one of the TM bit is set.
+ * Inside the TM[], the output means:
+ *   E: Enabled                (bit 32)
+ *   S: Suspended      (bit 33)
+ *   T: Transactional  (bit 34)
+ */
+       if (val & (MSR_TM | MSR_TS_S | MSR_TS_T)) {
+               printk(",TM[");
+               print_bits(val, msr_tm_bits, "");
+               printk("]");
+       }
+}
+#else
+static void print_tm_bits(unsigned long val) {}
+#endif
+
+static void print_msr_bits(unsigned long val)
+{
+       printk("<");
+       print_bits(val, msr_bits, ",");
+       print_tm_bits(val);
        printk(">");
 }
 
        printk("REGS: %p TRAP: %04lx   %s  (%s)\n",
               regs, regs->trap, print_tainted(), init_utsname()->release);
        printk("MSR: "REG" ", regs->msr);
-       printbits(regs->msr, msr_bits);
+       print_msr_bits(regs->msr);
        printk("  CR: %08lx  XER: %08lx\n", regs->ccr, regs->xer);
        trap = TRAP(regs);
        if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR))