forked from Minki/linux
bnxt: fix bnxt_hwrm_fw_set_time for y2038
On 32-bit architectures, rtc_time_to_tm() returns incorrect results in 2038 or later, and do_gettimeofday() is broken for the same reason. This changes the code to use ktime_get_real_seconds() and time64_to_tm() instead, both of them are 2038-safe, and we can also get rid of the CONFIG_RTC_LIB dependency that way. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
96c623e51f
commit
7dfaa7bc99
@ -4915,16 +4915,14 @@ hwrm_ver_get_exit:
|
||||
|
||||
int bnxt_hwrm_fw_set_time(struct bnxt *bp)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_RTC_LIB)
|
||||
struct hwrm_fw_set_time_input req = {0};
|
||||
struct rtc_time tm;
|
||||
struct timeval tv;
|
||||
struct tm tm;
|
||||
time64_t now = ktime_get_real_seconds();
|
||||
|
||||
if (bp->hwrm_spec_code < 0x10400)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
do_gettimeofday(&tv);
|
||||
rtc_time_to_tm(tv.tv_sec, &tm);
|
||||
time64_to_tm(now, 0, &tm);
|
||||
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FW_SET_TIME, -1, -1);
|
||||
req.year = cpu_to_le16(1900 + tm.tm_year);
|
||||
req.month = 1 + tm.tm_mon;
|
||||
@ -4933,9 +4931,6 @@ int bnxt_hwrm_fw_set_time(struct bnxt *bp)
|
||||
req.minute = tm.tm_min;
|
||||
req.second = tm.tm_sec;
|
||||
return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
#else
|
||||
return -EOPNOTSUPP;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int bnxt_hwrm_port_qstats(struct bnxt *bp)
|
||||
|
Loading…
Reference in New Issue
Block a user