On FreeBSD with nic_uio, interrupt registration fails silently and
hardware events, including link state notifications, are never processed
via the interrupt path.

For ice, this affects the typical polling-mode configuration: the
interrupt handler is never invoked, AdminQ messages go unprocessed,
and link status is not reliable. A periodic alarm is added to drain
the AdminQ when interrupt delivery is unavailable. For i40e, an
alarm already runs unconditionally in polling mode, so that
configuration is unaffected. The gap is the interrupt-mode
configuration, where the existing alarm was not activated as a
fallback when interrupt enable fails; this patch extends it to do so.

v2:
 * Added warning on rte_eal_alarm_set failure (i40e & ice)
 * Only set use_aq_polling if rte_eal_alarm_set succeeds (i40e & ice)
 * Move alarm cancel in ice_dev_stop to prevent a race (ice)
 * Remove unnecessary alarm cancel from ice_dev_start error path (ice)
 * Added general fix for ice dev_start error path

Ciara Loftus (3):
  net/ice: poll AdminQ if interrupt delivery unavailable
  net/i40e: activate alarm if interrupt delivery unavailable
  net/ice: fix adapter stopped on device start error

 drivers/net/intel/i40e/i40e_ethdev.c | 11 ++++++-
 drivers/net/intel/i40e/i40e_ethdev.h |  2 ++
 drivers/net/intel/ice/ice_ethdev.c   | 44 +++++++++++++++++++++++++++-
 drivers/net/intel/ice/ice_ethdev.h   |  1 +
 4 files changed, 56 insertions(+), 2 deletions(-)

-- 
2.43.0

Reply via email to