Commit 9f0844de authored by John Ogness's avatar John Ogness Committed by Petr Mladek
Browse files

printk: get caller_id/timestamp after migration disable



Currently the local CPU timestamp and caller_id for the record are
collected while migration is enabled. Since this information is
CPU-specific, it should be collected with migration disabled.

Migration is disabled immediately after collecting this information
anyway, so just move the information collection to after the
migration disabling.

Signed-off-by: default avatarJohn Ogness <john.ogness@linutronix.de>
Reviewed-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20220421212250.565456-7-john.ogness@linutronix.de
parent 5341b93d
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -2063,7 +2063,7 @@ static inline void printk_delay(void)
static inline u32 printk_caller_id(void)
{
	return in_task() ? task_pid_nr(current) :
		0x80000000 + raw_smp_processor_id();
		0x80000000 + smp_processor_id();
}

/**
@@ -2145,7 +2145,6 @@ int vprintk_store(int facility, int level,
		  const struct dev_printk_info *dev_info,
		  const char *fmt, va_list args)
{
	const u32 caller_id = printk_caller_id();
	struct prb_reserved_entry e;
	enum printk_info_flags flags = 0;
	struct printk_record r;
@@ -2155,10 +2154,14 @@ int vprintk_store(int facility, int level,
	u8 *recursion_ptr;
	u16 reserve_size;
	va_list args2;
	u32 caller_id;
	u16 text_len;
	int ret = 0;
	u64 ts_nsec;

	if (!printk_enter_irqsave(recursion_ptr, irqflags))
		return 0;

	/*
	 * Since the duration of printk() can vary depending on the message
	 * and state of the ringbuffer, grab the timestamp now so that it is
@@ -2167,8 +2170,7 @@ int vprintk_store(int facility, int level,
	 */
	ts_nsec = local_clock();

	if (!printk_enter_irqsave(recursion_ptr, irqflags))
		return 0;
	caller_id = printk_caller_id();

	/*
	 * The sprintf needs to come first since the syslog prefix might be