mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 14:34:28 +08:00
bnxt_en: Prevent kernel panic when receiving unexpected PHC_UPDATE event
The firmware can send PHC_RTC_UPDATE async event on a PF that may not
have PTP registered. In such a case, there will be a null pointer
deference for bp->ptp_cfg when we try to handle the event.
Fix it by not registering for this event with the firmware if !bp->ptp_cfg.
Also, check that bp->ptp_cfg is valid before proceeding when we receive
the event.
Fixes: 8bcf6f04d4
("bnxt_en: Handle async event when the PHC is updated in RTC mode")
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
83474a9b25
commit
319a7827df
@ -2365,6 +2365,9 @@ static int bnxt_async_event_process(struct bnxt *bp,
|
||||
struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
|
||||
u64 ns;
|
||||
|
||||
if (!ptp)
|
||||
goto async_event_process_exit;
|
||||
|
||||
spin_lock_bh(&ptp->ptp_lock);
|
||||
bnxt_ptp_update_current_time(bp);
|
||||
ns = (((u64)BNXT_EVENT_PHC_RTC_UPDATE(data1) <<
|
||||
@ -4763,6 +4766,9 @@ int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp, unsigned long *bmap, int bmap_size,
|
||||
if (event_id == ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY &&
|
||||
!(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY))
|
||||
continue;
|
||||
if (event_id == ASYNC_EVENT_CMPL_EVENT_ID_PHC_UPDATE &&
|
||||
!bp->ptp_cfg)
|
||||
continue;
|
||||
__set_bit(bnxt_async_events_arr[i], async_events_bmap);
|
||||
}
|
||||
if (bmap && bmap_size) {
|
||||
|
@ -952,6 +952,7 @@ int bnxt_ptp_init(struct bnxt *bp, bool phc_cfg)
|
||||
bnxt_ptp_timecounter_init(bp, true);
|
||||
bnxt_ptp_adjfine_rtc(bp, 0);
|
||||
}
|
||||
bnxt_hwrm_func_drv_rgtr(bp, NULL, 0, true);
|
||||
|
||||
ptp->ptp_info = bnxt_ptp_caps;
|
||||
if ((bp->fw_cap & BNXT_FW_CAP_PTP_PPS)) {
|
||||
|
Loading…
Reference in New Issue
Block a user