u8 facility; /* syslog facility */
u8 flags:5; /* internal record flags */
u8 level:3; /* syslog level */
+#ifdef CONFIG_PRINTK_PROCESS
+ char process[16]; /* process name */
+ pid_t pid; /* process id */
+ u8 cpu; /* cpu id */
+ u8 in_interrupt; /* interrupt context */
+#endif
}
#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
__packed __aligned(4)
static u64 clear_seq;
static u32 clear_idx;
+#ifdef CONFIG_PRINTK_PROCESS
+#define PREFIX_MAX 48
+#else
#define PREFIX_MAX 32
+#endif
#define LOG_LINE_MAX (1024 - PREFIX_MAX)
#define LOG_LEVEL(v) ((v) & 0x07)
return size;
}
+#ifdef CONFIG_PRINTK_PROCESS
+static bool printk_process = 1;
+static size_t print_process(const struct printk_log *msg, char *buf)
+
+{
+ if (!printk_process)
+ return 0;
+
+ if (!buf)
+ return snprintf(NULL, 0, "%c[%1d:%15s:%5d] ", ' ', 0, " ", 0);
+
+ return sprintf(buf, "%c[%1d:%15s:%5d] ",
+ msg->in_interrupt ? 'I' : ' ',
+ msg->cpu,
+ msg->process,
+ msg->pid);
+}
+#else
+static bool printk_process = 0;
+static size_t print_process(const struct printk_log *msg, char *buf)
+{
+ return 0;
+}
+#endif
+module_param_named(process, printk_process, bool, S_IRUGO | S_IWUSR);
+
/*
* Define how much of the log buffer we could take at maximum. The value
* must be greater than two. Note that only half of the buffer is available
memset(log_dict(msg) + dict_len, 0, pad_len);
msg->len = size;
+#ifdef CONFIG_PRINTK_PROCESS
+ if (printk_process) {
+ strncpy(msg->process, current->comm, sizeof(msg->process) - 1);
+ msg->process[sizeof(msg->process) - 1] = '\0';
+ msg->pid = task_pid_nr(current);
+ msg->cpu = smp_processor_id();
+ msg->in_interrupt = in_interrupt() ? 1 : 0;
+ }
+#endif
/* insert message */
log_next_idx += msg->len;
log_next_seq++;
}
len += print_time(msg->ts_nsec, buf ? buf + len : NULL);
+ len += print_process(msg, buf ? buf + len : NULL);
return len;
}
size_t text_len;
enum log_flags lflags = 0;
unsigned long flags;
+ int this_cpu;
int printed_len;
bool in_sched = false;
/* This stops the holder of console_sem just where we want him */
logbuf_lock_irqsave(flags);
+ this_cpu = smp_processor_id();
/*
* The printf needs to come first; we need the syslog
* prefix which might be passed-in as a parameter.