[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230608202115.453965-1-anthony.l.nguyen@intel.com>
Date: Thu, 8 Jun 2023 13:21:10 -0700
From: Tony Nguyen <anthony.l.nguyen@...el.com>
To: davem@...emloft.net,
kuba@...nel.org,
pabeni@...hat.com,
edumazet@...gle.com,
netdev@...r.kernel.org
Cc: Tony Nguyen <anthony.l.nguyen@...el.com>,
jacob.e.keller@...el.com,
richardcochran@...il.com
Subject: [PATCH net-next 0/5][pull request] ice: Improve miscellaneous interrupt code
Jacob Keller says:
This series improves the driver's use of the threaded IRQ and the
communication between ice_misc_intr() and the ice_misc_intr_thread_fn()
which was previously introduced by commit 1229b33973c7 ("ice: Add low
latency Tx timestamp read").
First, a new custom enumerated return value is used instead of a boolean for
ice_ptp_process_ts(). This significantly reduces the cognitive burden when
reviewing the logic for this function, as the expected action is clear from
the return value name.
Second, the unconditional loop in ice_misc_intr_thread_fn() is removed,
replacing it with a write to the Other Interrupt Cause register. This causes
the MAC to trigger the Tx timestamp interrupt again. This makes it possible
to safely use the ice_misc_intr_thread_fn() to handle other tasks beyond
just the Tx timestamps. It is also easier to reason about since the thread
function will exit cleanly if we do something like disable the interrupt and
call synchronize_irq().
Third, refactor the handling for external timestamp events to use the
miscellaneous thread function. This resolves an issue with the external
time stamps getting blocked while processing the periodic work function
task.
Fourth, a simplification of the ice_misc_intr() function to always return
IRQ_WAKE_THREAD, and schedule the ice service task in the
ice_misc_intr_thread_fn() instead.
Finally, the Other Interrupt Cause is kept disabled over the thread function
processing, rather than immediately re-enabled.
Special thanks to Michal Schmidt for the careful review of the series and
pointing out my misunderstandings of the kernel IRQ code. It has been
determined that the race outlined as being fixed in previous series was
actually introduced by this series itself, which I've since corrected.
The following are changes since commit bfd019d10fdabf70f9b01264aea6d6c7595f9226:
Merge branch 'crypto-splice-net-make-af_alg-handle-sendmsg-msg_splice_pages'
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue 100GbE
Jacob Keller (3):
ice: introduce ICE_TX_TSTAMP_WORK enumeration
ice: trigger PFINT_OICR_TSYN_TX interrupt instead of polling
ice: do not re-enable miscellaneous interrupt until thread_fn
completes
Karol Kolacinski (2):
ice: handle extts in the miscellaneous interrupt thread
ice: always return IRQ_WAKE_THREAD in ice_misc_intr()
drivers/net/ethernet/intel/ice/ice.h | 7 +++
drivers/net/ethernet/intel/ice/ice_main.c | 47 +++++++++++------
drivers/net/ethernet/intel/ice/ice_ptp.c | 62 ++++++++++++-----------
drivers/net/ethernet/intel/ice/ice_ptp.h | 16 ++++--
4 files changed, 84 insertions(+), 48 deletions(-)
--
2.38.1
Powered by blists - more mailing lists