summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Russkikh <Igor.Russkikh@aquantia.com>2019-08-30 12:08:36 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-09-21 07:18:45 +0200
commit95acd66ba70a1b0327de04d3a4de459d83b7c082 (patch)
tree4d204b156f1541b922d62fd0287a184504d7b521
parente4d1449ca4a59c24ad7ef9bdabd876301675247b (diff)
downloadlinux-stable-95acd66ba70a1b0327de04d3a4de459d83b7c082.tar.gz
linux-stable-95acd66ba70a1b0327de04d3a4de459d83b7c082.tar.bz2
linux-stable-95acd66ba70a1b0327de04d3a4de459d83b7c082.zip
net: aquantia: linkstate irq should be oneshot
[ Upstream commit 5c47e3ba6fe52465603cf9d816b3371e6881d649 ] Declaring threaded irq handler should also indicate the irq is oneshot. It is oneshot indeed, because HW implements irq automasking on trigger. Not declaring this causes some kernel configurations to fail on interface up, because request_threaded_irq returned an err code. The issue was originally hidden on normal x86_64 configuration with latest kernel, because depending on interrupt controller, irq driver added ONESHOT flag on its own. Issue was observed on older kernels (4.14) where no such logic exists. Fixes: 4c83f170b3ac ("net: aquantia: link status irq handling") Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com> Reported-by: Michael Symolkin <Michael.Symolkin@aquantia.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_nic.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
index 41172fbebddd..1a2b09065293 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
@@ -390,7 +390,7 @@ int aq_nic_start(struct aq_nic_s *self)
self->aq_nic_cfg.link_irq_vec);
err = request_threaded_irq(irqvec, NULL,
aq_linkstate_threaded_isr,
- IRQF_SHARED,
+ IRQF_SHARED | IRQF_ONESHOT,
self->ndev->name, self);
if (err < 0)
goto err_exit;