netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v1 1/2] lan743x: clean up software_isr function
@ 2020-11-23 19:15 Sven Van Asbroeck
  2020-11-23 19:15 ` [PATCH net-next v1 2/2] lan743x: replace polling loop by wait_event_timeout() Sven Van Asbroeck
  2020-11-25  0:17 ` [PATCH net-next v1 1/2] lan743x: clean up software_isr function Jakub Kicinski
  0 siblings, 2 replies; 4+ messages in thread
From: Sven Van Asbroeck @ 2020-11-23 19:15 UTC (permalink / raw)
  To: Bryan Whitehead, Jakub Kicinski, David S Miller
  Cc: Sven Van Asbroeck, Andrew Lunn, Microchip Linux Driver Support,
	netdev, linux-kernel

From: Sven Van Asbroeck <thesven73@gmail.com>

For no apparent reason, this function reads the INT_STS register, and
checks if the software interrupt bit is set. These things have already
been carried out by this function's only caller.

Clean up by removing the redundant code.

Tested-by: Sven Van Asbroeck <thesven73@gmail.com> # lan7430
Signed-off-by: Sven Van Asbroeck <thesven73@gmail.com>
---

Tree: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git # f9e425e99b07

To: Bryan Whitehead <bryan.whitehead@microchip.com>
To: Jakub Kicinski <kuba@kernel.org>
To: "David S. Miller" <davem@davemloft.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org

 drivers/net/ethernet/microchip/lan743x_main.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
index 87b6c59a1e03..bdc80098c240 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.c
+++ b/drivers/net/ethernet/microchip/lan743x_main.c
@@ -140,18 +140,13 @@ static int lan743x_csr_init(struct lan743x_adapter *adapter)
 	return result;
 }
 
-static void lan743x_intr_software_isr(void *context)
+static void lan743x_intr_software_isr(struct lan743x_adapter *adapter)
 {
-	struct lan743x_adapter *adapter = context;
 	struct lan743x_intr *intr = &adapter->intr;
-	u32 int_sts;
 
-	int_sts = lan743x_csr_read(adapter, INT_STS);
-	if (int_sts & INT_BIT_SW_GP_) {
-		/* disable the interrupt to prevent repeated re-triggering */
-		lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_SW_GP_);
-		intr->software_isr_flag = 1;
-	}
+	/* disable the interrupt to prevent repeated re-triggering */
+	lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_SW_GP_);
+	intr->software_isr_flag = 1;
 }
 
 static void lan743x_tx_isr(void *context, u32 int_sts, u32 flags)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net-next v1 2/2] lan743x: replace polling loop by wait_event_timeout()
  2020-11-23 19:15 [PATCH net-next v1 1/2] lan743x: clean up software_isr function Sven Van Asbroeck
@ 2020-11-23 19:15 ` Sven Van Asbroeck
  2020-11-25  0:17 ` [PATCH net-next v1 1/2] lan743x: clean up software_isr function Jakub Kicinski
  1 sibling, 0 replies; 4+ messages in thread
From: Sven Van Asbroeck @ 2020-11-23 19:15 UTC (permalink / raw)
  To: Bryan Whitehead, Jakub Kicinski, David S Miller
  Cc: Sven Van Asbroeck, Andrew Lunn, Microchip Linux Driver Support,
	netdev, linux-kernel

From: Sven Van Asbroeck <thesven73@gmail.com>

The driver's ISR sends a 'software interrupt' event to the probe()
thread using the following method:
- probe(): write 0 to flag, enable s/w interrupt
- probe(): poll on flag, relax using usleep_range()
- ISR    : write 1 to flag

Replace with wake_up() / wait_event_timeout(). Besides being easier
to get right, this abstraction has better timing and memory
consistency properties.

Tested-by: Sven Van Asbroeck <thesven73@gmail.com> # lan7430
Signed-off-by: Sven Van Asbroeck <thesven73@gmail.com>
---

To: Bryan Whitehead <bryan.whitehead@microchip.com>
To: Jakub Kicinski <kuba@kernel.org>
To: "David S. Miller" <davem@davemloft.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org

 drivers/net/ethernet/microchip/lan743x_main.c | 28 +++++++++----------
 drivers/net/ethernet/microchip/lan743x_main.h |  3 +-
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
index bdc80098c240..96d34b001198 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.c
+++ b/drivers/net/ethernet/microchip/lan743x_main.c
@@ -146,7 +146,8 @@ static void lan743x_intr_software_isr(struct lan743x_adapter *adapter)
 
 	/* disable the interrupt to prevent repeated re-triggering */
 	lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_SW_GP_);
-	intr->software_isr_flag = 1;
+	intr->software_isr_flag = true;
+	wake_up(&intr->software_isr_wq);
 }
 
 static void lan743x_tx_isr(void *context, u32 int_sts, u32 flags)
@@ -344,27 +345,22 @@ static irqreturn_t lan743x_intr_entry_isr(int irq, void *ptr)
 static int lan743x_intr_test_isr(struct lan743x_adapter *adapter)
 {
 	struct lan743x_intr *intr = &adapter->intr;
-	int result = -ENODEV;
-	int timeout = 10;
+	int ret;
 
-	intr->software_isr_flag = 0;
+	intr->software_isr_flag = false;
 
-	/* enable interrupt */
+	/* enable and activate test interrupt */
 	lan743x_csr_write(adapter, INT_EN_SET, INT_BIT_SW_GP_);
-
-	/* activate interrupt here */
 	lan743x_csr_write(adapter, INT_SET, INT_BIT_SW_GP_);
-	while ((timeout > 0) && (!(intr->software_isr_flag))) {
-		usleep_range(1000, 20000);
-		timeout--;
-	}
 
-	if (intr->software_isr_flag)
-		result = 0;
+	ret = wait_event_timeout(intr->software_isr_wq,
+				 intr->software_isr_flag,
+				 msecs_to_jiffies(200));
 
-	/* disable interrupts */
+	/* disable test interrupt */
 	lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_SW_GP_);
-	return result;
+
+	return ret > 0 ? 0 : -ENODEV;
 }
 
 static int lan743x_intr_register_isr(struct lan743x_adapter *adapter,
@@ -538,6 +534,8 @@ static int lan743x_intr_open(struct lan743x_adapter *adapter)
 		flags |= LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C;
 	}
 
+	init_waitqueue_head(&intr->software_isr_wq);
+
 	ret = lan743x_intr_register_isr(adapter, 0, flags,
 					INT_BIT_ALL_RX_ | INT_BIT_ALL_TX_ |
 					INT_BIT_ALL_OTHER_,
diff --git a/drivers/net/ethernet/microchip/lan743x_main.h b/drivers/net/ethernet/microchip/lan743x_main.h
index a536f4a4994d..b92864913e6c 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.h
+++ b/drivers/net/ethernet/microchip/lan743x_main.h
@@ -616,7 +616,8 @@ struct lan743x_intr {
 	int			number_of_vectors;
 	bool			using_vectors;
 
-	int			software_isr_flag;
+	bool			software_isr_flag;
+	wait_queue_head_t	software_isr_wq;
 };
 
 #define LAN743X_MAX_FRAME_SIZE			(9 * 1024)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next v1 1/2] lan743x: clean up software_isr function
  2020-11-23 19:15 [PATCH net-next v1 1/2] lan743x: clean up software_isr function Sven Van Asbroeck
  2020-11-23 19:15 ` [PATCH net-next v1 2/2] lan743x: replace polling loop by wait_event_timeout() Sven Van Asbroeck
@ 2020-11-25  0:17 ` Jakub Kicinski
  2020-11-26 14:14   ` Sven Van Asbroeck
  1 sibling, 1 reply; 4+ messages in thread
From: Jakub Kicinski @ 2020-11-25  0:17 UTC (permalink / raw)
  To: Sven Van Asbroeck
  Cc: Bryan Whitehead, David S Miller, Andrew Lunn,
	Microchip Linux Driver Support, netdev, linux-kernel

On Mon, 23 Nov 2020 14:15:28 -0500 Sven Van Asbroeck wrote:
> From: Sven Van Asbroeck <thesven73@gmail.com>
> 
> For no apparent reason, this function reads the INT_STS register, and
> checks if the software interrupt bit is set. These things have already
> been carried out by this function's only caller.
> 
> Clean up by removing the redundant code.
> 
> Tested-by: Sven Van Asbroeck <thesven73@gmail.com> # lan7430
> Signed-off-by: Sven Van Asbroeck <thesven73@gmail.com>

Applied both, thank you!

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next v1 1/2] lan743x: clean up software_isr function
  2020-11-25  0:17 ` [PATCH net-next v1 1/2] lan743x: clean up software_isr function Jakub Kicinski
@ 2020-11-26 14:14   ` Sven Van Asbroeck
  0 siblings, 0 replies; 4+ messages in thread
From: Sven Van Asbroeck @ 2020-11-26 14:14 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: netdev, Linux Kernel Mailing List

On Tue, Nov 24, 2020 at 7:17 PM Jakub Kicinski <kuba@kernel.org> wrote:
>
> Applied both, thank you!

Thank you Jakub !

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-11-26 14:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-23 19:15 [PATCH net-next v1 1/2] lan743x: clean up software_isr function Sven Van Asbroeck
2020-11-23 19:15 ` [PATCH net-next v1 2/2] lan743x: replace polling loop by wait_event_timeout() Sven Van Asbroeck
2020-11-25  0:17 ` [PATCH net-next v1 1/2] lan743x: clean up software_isr function Jakub Kicinski
2020-11-26 14:14   ` Sven Van Asbroeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).