Message ID | 20230821171927.2203644-1-anthony.l.nguyen@intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | b888c510f7b3d64ca75fc0f43b4a4bd1a611312f |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] igb: Avoid starting unnecessary workqueues | expand |
On Mon, Aug 21, 2023 at 10:19:27AM -0700, Tony Nguyen wrote: > From: Alessio Igor Bogani <alessio.bogani@elettra.eu> > > 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: 1f6e8178d685 ("igb: Prevent dropped Tx timestamps via work items and interrupts.") > Fixes: d339b1331616 ("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>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Mon, 21 Aug 2023 10:19:27 -0700 you wrote: > From: Alessio Igor Bogani <alessio.bogani@elettra.eu> > > 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 > > [...] Here is the summary with links: - [net] igb: Avoid starting unnecessary workqueues https://git.kernel.org/netdev/net/c/b888c510f7b3 You are awesome, thank you!
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c index 405886ee5261..319c544b9f04 100644 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c @@ -1385,18 +1385,6 @@ void igb_ptp_init(struct igb_adapter *adapter) 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->pdev->dev); if (IS_ERR(adapter->ptp_clock)) { @@ -1406,6 +1394,18 @@ void igb_ptp_init(struct igb_adapter *adapter) dev_info(&adapter->pdev->dev, "added PHC on %s\n", adapter->netdev->name); 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); } }