Patch "net: ena: unmask MSI-X only after device initialization is completed" has been added to the 4.14-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
net: ena: unmask MSI-X only after device initialization is completed
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-ena-unmask-msi-x-only-after-device-initialization-is-completed.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Wed Feb 28 16:23:28 CET 2018
From: Netanel Belgazal <[email protected]>
Date: Wed, 3 Jan 2018 06:17:29 +0000
Subject: net: ena: unmask MSI-X only after device initialization is completed
From: Netanel Belgazal <[email protected]>
[ Upstream commit 7853b49ce8e0ef6364d24512b287463841d71bd3 ]
Under certain conditions MSI-X interrupt might arrive right after it was unmasked in ena_up(). There is a chance it would be processed by the driver before device ENA_FLAG_DEV_UP flag is set. In such a case the interrupt is ignored.
ENA device operates in auto-masked mode, therefore ignoring interrupt leaves it masked for good.
Moving unmask of interrupt to be the last step in ena_up().
--- drivers/net/ethernet/amazon/ena/ena_netdev.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-)
drivers/net/ethernet/amazon/ena/ena_netdev.c +13 -13
@@ -1565,7 +1565,7 @@ static int ena_rss_configure(struct ena_static int ena_up_complete (struct ena_adapter *adapter) { -int rc, i; +int rc; rc =ena_rss_configure (adapter);if (rc)
@@ -1584,17 +1584,6 @@ static int ena_up_complete(struct ena_adena_napi_enable_all (adapter); -/* Enable completion queues interrupt */ -for (i =0 ; i < adapter->num_queues; i++) -ena_unmask_interrupt (&adapter->tx_ring[i], - &adapter->rx_ring[i]); - -/* schedule napi in case we had pending packets -* from the last time we disable napi -*/ -for (i =0 ; i < adapter->num_queues; i++) -napi_schedule (&adapter->ena_napi[i].napi); -return 0 ; }
@@ -1731,7 +1720,7 @@ create_err:static int ena_up (struct ena_adapter *adapter) { -int rc; +int rc, i;netdev_dbg (adapter->netdev,"%s\n" , __func__);
@@ -1774,6 +1763,17 @@ static int ena_up(struct ena_adapter *adset_bit (ENA_FLAG_DEV_UP , &adapter->flags); +/* Enable completion queues interrupt */ +for (i =0 ; i < adapter->num_queues; i++) +ena_unmask_interrupt (&adapter->tx_ring[i], + &adapter->rx_ring[i]); + +/* schedule napi in case we had pending packets +* from the last time we disable napi +*/ +for (i =0 ; i < adapter->num_queues; i++) +napi_schedule (&adapter->ena_napi[i].napi); +return rc; err_up:
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/net-ena-unmask-msi-x-only-after-device-initialization-is-completed.patch