netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] bond_alb: do not disable BH under netpoll
@ 2012-01-04  2:20 Maxim Uvarov
  2012-01-04  2:49 ` David Miller
  0 siblings, 1 reply; 5+ messages in thread
From: Maxim Uvarov @ 2012-01-04  2:20 UTC (permalink / raw)
  To: netdev; +Cc: Maxim Uvarov

Do not disable BH if interrupts are already disabled
(netpoll case).
Signed-off-by: Maxim Uvarov <maxim.uvarov@oracle.com>
---
 drivers/net/bonding/bond_alb.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index d4fbd2e..69eeb36 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -101,12 +101,18 @@ static inline u8 _simple_hash(const u8 *hash_start, int hash_size)
 
 static inline void _lock_tx_hashtbl(struct bonding *bond)
 {
-	spin_lock_bh(&(BOND_ALB_INFO(bond).tx_hashtbl_lock));
+	if (unlikely(irqs_disabled())) /*netpoll case*/
+		spin_lock(&(BOND_ALB_INFO(bond).tx_hashtbl_lock));
+	else
+		spin_lock_bh(&(BOND_ALB_INFO(bond).tx_hashtbl_lock));
 }
 
 static inline void _unlock_tx_hashtbl(struct bonding *bond)
 {
-	spin_unlock_bh(&(BOND_ALB_INFO(bond).tx_hashtbl_lock));
+	if (unlikely(irqs_disabled())) /*netpoll case*/
+		spin_unlock(&(BOND_ALB_INFO(bond).tx_hashtbl_lock));
+	else
+		spin_unlock_bh(&(BOND_ALB_INFO(bond).tx_hashtbl_lock));
 }
 
 /* Caller must hold tx_hashtbl lock */
-- 
1.7.4.1

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

* Re: [PATCH] bond_alb: do not disable BH under netpoll
  2012-01-04  2:20 [PATCH] bond_alb: do not disable BH under netpoll Maxim Uvarov
@ 2012-01-04  2:49 ` David Miller
  2012-01-04  8:14   ` Maxim Uvarov
  0 siblings, 1 reply; 5+ messages in thread
From: David Miller @ 2012-01-04  2:49 UTC (permalink / raw)
  To: maxim.uvarov; +Cc: netdev

From: Maxim Uvarov <maxim.uvarov@oracle.com>
Date: Tue,  3 Jan 2012 18:20:18 -0800

> Do not disable BH if interrupts are already disabled
> (netpoll case).
> Signed-off-by: Maxim Uvarov <maxim.uvarov@oracle.com>

Barf...

We should never use conditional locking like this.

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

* Re: [PATCH] bond_alb: do not disable BH under netpoll
  2012-01-04  2:49 ` David Miller
@ 2012-01-04  8:14   ` Maxim Uvarov
  2012-01-04 18:25     ` David Miller
  0 siblings, 1 reply; 5+ messages in thread
From: Maxim Uvarov @ 2012-01-04  8:14 UTC (permalink / raw)
  To: David Miller; +Cc: netdev

On 03.01.2012 18:49, David Miller wrote:
> From: Maxim Uvarov<maxim.uvarov@oracle.com>
> Date: Tue,  3 Jan 2012 18:20:18 -0800
>
>> Do not disable BH if interrupts are already disabled
>> (netpoll case).
>> Signed-off-by: Maxim Uvarov<maxim.uvarov@oracle.com>
> Barf...
>
> We should never use conditional locking like this.


How about change spin_lock_bh  to spin_lock_irqsave at this place?

Maxim.

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

* Re: [PATCH] bond_alb: do not disable BH under netpoll
  2012-01-04  8:14   ` Maxim Uvarov
@ 2012-01-04 18:25     ` David Miller
  2012-01-04 19:35       ` Maxim Uvarov
  0 siblings, 1 reply; 5+ messages in thread
From: David Miller @ 2012-01-04 18:25 UTC (permalink / raw)
  To: maxim.uvarov; +Cc: netdev

From: Maxim Uvarov <maxim.uvarov@oracle.com>
Date: Wed, 04 Jan 2012 00:14:39 -0800

> On 03.01.2012 18:49, David Miller wrote:
>> From: Maxim Uvarov<maxim.uvarov@oracle.com>
>> Date: Tue,  3 Jan 2012 18:20:18 -0800
>>
>>> Do not disable BH if interrupts are already disabled
>>> (netpoll case).
>>> Signed-off-by: Maxim Uvarov<maxim.uvarov@oracle.com>
>> Barf...
>>
>> We should never use conditional locking like this.
> 
> 
> How about change spin_lock_bh  to spin_lock_irqsave at this place?

Then it's ambiguous whether it's a softirq safe lock or a hardirq
safe one.

It's just another way to make the locking inconsistent.

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

* Re: [PATCH] bond_alb: do not disable BH under netpoll
  2012-01-04 18:25     ` David Miller
@ 2012-01-04 19:35       ` Maxim Uvarov
  0 siblings, 0 replies; 5+ messages in thread
From: Maxim Uvarov @ 2012-01-04 19:35 UTC (permalink / raw)
  To: David Miller; +Cc: netdev

On 01/04/2012 10:25 AM, David Miller wrote:
> From: Maxim Uvarov<maxim.uvarov@oracle.com>
> Date: Wed, 04 Jan 2012 00:14:39 -0800
>
>> On 03.01.2012 18:49, David Miller wrote:
>>> From: Maxim Uvarov<maxim.uvarov@oracle.com>
>>> Date: Tue,  3 Jan 2012 18:20:18 -0800
>>>
>>>> Do not disable BH if interrupts are already disabled
>>>> (netpoll case).
>>>> Signed-off-by: Maxim Uvarov<maxim.uvarov@oracle.com>
>>> Barf...
>>>
>>> We should never use conditional locking like this.
>>
>>
>> How about change spin_lock_bh  to spin_lock_irqsave at this place?
>
> Then it's ambiguous whether it's a softirq safe lock or a hardirq
> safe one.
>
> It's just another way to make the locking inconsistent.

at bond_start_xmit() there is check if it's netpoll or not:

	/*
	 * If we risk deadlock from transmitting this in the
	 * netpoll path, tell netpoll to queue the frame for later tx
	 */
	if (is_netpoll_tx_blocked(dev))
		return NETDEV_TX_BUSY;

which is in the end:

static inline int netpoll_tx_running(struct net_device *dev)
{
	return irqs_disabled();
}

So the original patch was in the way as it already implemented.

BTW,
I'm trying to remove warning generated by local_bh_enable_ip:
http://marc.info/?l=linux-netdev&m=132528368523980&w=2

Maxim.

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

end of thread, other threads:[~2012-01-04 19:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-04  2:20 [PATCH] bond_alb: do not disable BH under netpoll Maxim Uvarov
2012-01-04  2:49 ` David Miller
2012-01-04  8:14   ` Maxim Uvarov
2012-01-04 18:25     ` David Miller
2012-01-04 19:35       ` Maxim Uvarov

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).