diff options
Diffstat (limited to 'drivers/firmware/efi/cper.c')
| -rw-r--r-- | drivers/firmware/efi/cper.c | 19 | 
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c index 3bf0dca378a6..a7902fccdcfa 100644 --- a/drivers/firmware/efi/cper.c +++ b/drivers/firmware/efi/cper.c @@ -48,8 +48,21 @@ u64 cper_next_record_id(void)  {  	static atomic64_t seq; -	if (!atomic64_read(&seq)) -		atomic64_set(&seq, ((u64)get_seconds()) << 32); +	if (!atomic64_read(&seq)) { +		time64_t time = ktime_get_real_seconds(); + +		/* +		 * This code is unlikely to still be needed in year 2106, +		 * but just in case, let's use a few more bits for timestamps +		 * after y2038 to be sure they keep increasing monotonically +		 * for the next few hundred years... +		 */ +		if (time < 0x80000000) +			atomic64_set(&seq, (ktime_get_real_seconds()) << 32); +		else +			atomic64_set(&seq, 0x8000000000000000ull | +					   ktime_get_real_seconds() << 24); +	}  	return atomic64_inc_return(&seq);  } @@ -459,7 +472,7 @@ cper_estatus_print_section(const char *pfx, struct acpi_hest_generic_data *gdata  		else  			goto err_section_too_small;  #if defined(CONFIG_ARM64) || defined(CONFIG_ARM) -	} else if (!uuid_le_cmp(*sec_type, CPER_SEC_PROC_ARM)) { +	} else if (guid_equal(sec_type, &CPER_SEC_PROC_ARM)) {  		struct cper_sec_proc_arm *arm_err = acpi_hest_get_payload(gdata);  		printk("%ssection_type: ARM processor error\n", newpfx);  |