igb: Avoid starting unnecessary workqueues
[ Upstream commit b888c510f7b3d64ca75fc0f43b4a4bd1a611312f ] If ptp_clock_register() fails or CONFIG_PTP isn't enabled, avoid starting PTP related workqueues. In this way we can fix this: BUG: unable to handle page fault for address: ffffc9000440b6f8 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 100000067 P4D 100000067 PUD 1001e0067 PMD 107dc5067 PTE 0 Oops: 0000 [#1] PREEMPT SMP [...] Workqueue: events igb_ptp_overflow_check RIP: 0010:igb_rd32+0x1f/0x60 [...] Call Trace: igb_ptp_read_82580+0x20/0x50 timecounter_read+0x15/0x60 igb_ptp_overflow_check+0x1a/0x50 process_one_work+0x1cb/0x3c0 worker_thread+0x53/0x3f0 ? rescuer_thread+0x370/0x370 kthread+0x142/0x160 ? kthread_associate_blkcg+0xc0/0xc0 ret_from_fork+0x1f/0x30 Fixes:1f6e8178d6
("igb: Prevent dropped Tx timestamps via work items and interrupts.") Fixes:d339b13316
("igb: add PTP Hardware Clock code") Signed-off-by: Alessio Igor Bogani <alessio.bogani@elettra.eu> Tested-by: Arpana Arland <arpanax.arland@intel.com> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://lore.kernel.org/r/20230821171927.2203644-1-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
adef04cc48
commit
62383d9fa1
@ -1245,18 +1245,6 @@ void igb_ptp_init(struct igb_adapter *adapter)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_init(&adapter->tmreg_lock);
|
|
||||||
INIT_WORK(&adapter->ptp_tx_work, igb_ptp_tx_work);
|
|
||||||
|
|
||||||
if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK)
|
|
||||||
INIT_DELAYED_WORK(&adapter->ptp_overflow_work,
|
|
||||||
igb_ptp_overflow_check);
|
|
||||||
|
|
||||||
adapter->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE;
|
|
||||||
adapter->tstamp_config.tx_type = HWTSTAMP_TX_OFF;
|
|
||||||
|
|
||||||
igb_ptp_reset(adapter);
|
|
||||||
|
|
||||||
adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps,
|
adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps,
|
||||||
&adapter->pdev->dev);
|
&adapter->pdev->dev);
|
||||||
if (IS_ERR(adapter->ptp_clock)) {
|
if (IS_ERR(adapter->ptp_clock)) {
|
||||||
@ -1266,6 +1254,18 @@ void igb_ptp_init(struct igb_adapter *adapter)
|
|||||||
dev_info(&adapter->pdev->dev, "added PHC on %s\n",
|
dev_info(&adapter->pdev->dev, "added PHC on %s\n",
|
||||||
adapter->netdev->name);
|
adapter->netdev->name);
|
||||||
adapter->ptp_flags |= IGB_PTP_ENABLED;
|
adapter->ptp_flags |= IGB_PTP_ENABLED;
|
||||||
|
|
||||||
|
spin_lock_init(&adapter->tmreg_lock);
|
||||||
|
INIT_WORK(&adapter->ptp_tx_work, igb_ptp_tx_work);
|
||||||
|
|
||||||
|
if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK)
|
||||||
|
INIT_DELAYED_WORK(&adapter->ptp_overflow_work,
|
||||||
|
igb_ptp_overflow_check);
|
||||||
|
|
||||||
|
adapter->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE;
|
||||||
|
adapter->tstamp_config.tx_type = HWTSTAMP_TX_OFF;
|
||||||
|
|
||||||
|
igb_ptp_reset(adapter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user