All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler"
@ 2009-09-14  5:18 Mike Frysinger
  2009-09-14  9:58 ` Marcel Holtmann
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Mike Frysinger @ 2009-09-14  5:18 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: linux-bluetooth, linux-kernel, Michael Hennerich

Commit ac019360fe3 changed the irq handler logic to BUG_ON rather than
returning IRQ_NONE when the incoming argument is invalid.  While this
works in most cases, it doesn't work when the IRQ is shared with other
devices (or when DEBUG_SHIRQ is enabled).

So revert the previous change and replace the warning message with a
comment.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/bluetooth/bluecard_cs.c |    4 +++-
 drivers/bluetooth/bt3c_cs.c     |    4 +++-
 drivers/bluetooth/btuart_cs.c   |    4 +++-
 drivers/bluetooth/dtl1_cs.c     |    4 +++-
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/bluetooth/bluecard_cs.c b/drivers/bluetooth/bluecard_cs.c
index b0e569b..a3a8f4d 100644
--- a/drivers/bluetooth/bluecard_cs.c
+++ b/drivers/bluetooth/bluecard_cs.c
@@ -503,7 +503,9 @@ static irqreturn_t bluecard_interrupt(int irq, void *dev_inst)
 	unsigned int iobase;
 	unsigned char reg;
 
-	BUG_ON(!info->hdev);
+	if (!info || !info->hdev)
+		/* our irq handler is shared */
+		return IRQ_NONE;
 
 	if (!test_bit(CARD_READY, &(info->hw_state)))
 		return IRQ_HANDLED;
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c
index d58e22b..9a7578e 100644
--- a/drivers/bluetooth/bt3c_cs.c
+++ b/drivers/bluetooth/bt3c_cs.c
@@ -345,7 +345,9 @@ static irqreturn_t bt3c_interrupt(int irq, void *dev_inst)
 	int iir;
 	irqreturn_t r = IRQ_NONE;
 
-	BUG_ON(!info->hdev);
+	if (!info || !info->hdev)
+		/* our irq handler is shared */
+		return IRQ_NONE;
 
 	iobase = info->p_dev->io.BasePort1;
 
diff --git a/drivers/bluetooth/btuart_cs.c b/drivers/bluetooth/btuart_cs.c
index efd689a..cd9cb6c 100644
--- a/drivers/bluetooth/btuart_cs.c
+++ b/drivers/bluetooth/btuart_cs.c
@@ -295,7 +295,9 @@ static irqreturn_t btuart_interrupt(int irq, void *dev_inst)
 	int iir, lsr;
 	irqreturn_t r = IRQ_NONE;
 
-	BUG_ON(!info->hdev);
+	if (!info || !info->hdev)
+		/* our irq handler is shared */
+		return IRQ_NONE;
 
 	iobase = info->p_dev->io.BasePort1;
 
diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c
index 2cc7b32..588678a 100644
--- a/drivers/bluetooth/dtl1_cs.c
+++ b/drivers/bluetooth/dtl1_cs.c
@@ -299,7 +299,9 @@ static irqreturn_t dtl1_interrupt(int irq, void *dev_inst)
 	int iir, lsr;
 	irqreturn_t r = IRQ_NONE;
 
-	BUG_ON(!info->hdev);
+	if (!info || !info->hdev)
+		/* our irq handler is shared */
+		return IRQ_NONE;
 
 	iobase = info->p_dev->io.BasePort1;
 
-- 
1.6.4.2


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

* Re: [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler"
  2009-09-14  5:18 [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler" Mike Frysinger
@ 2009-09-14  9:58 ` Marcel Holtmann
  2009-09-14 17:43 ` [PATCH v2] [Bluetooth] redo checks in IRQ handler for shared IRQ support Mike Frysinger
  2009-09-14 23:17 ` [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler" Robert Hancock
  2 siblings, 0 replies; 8+ messages in thread
From: Marcel Holtmann @ 2009-09-14  9:58 UTC (permalink / raw)
  To: Mike Frysinger; +Cc: linux-bluetooth, linux-kernel, Michael Hennerich

Hi Mike,

> Commit ac019360fe3 changed the irq handler logic to BUG_ON rather than
> returning IRQ_NONE when the incoming argument is invalid.  While this
> works in most cases, it doesn't work when the IRQ is shared with other
> devices (or when DEBUG_SHIRQ is enabled).
> 
> So revert the previous change and replace the warning message with a
> comment.

please don't use git revert here. Send an updated patch that fixes this
issue correct and please send it with a proper subject line.

Regards

Marcel



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

* [PATCH v2] [Bluetooth] redo checks in IRQ handler for shared IRQ support
  2009-09-14  5:18 [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler" Mike Frysinger
  2009-09-14  9:58 ` Marcel Holtmann
@ 2009-09-14 17:43 ` Mike Frysinger
  2010-01-19 11:16     ` Mike Frysinger
  2009-09-14 23:17 ` [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler" Robert Hancock
  2 siblings, 1 reply; 8+ messages in thread
From: Mike Frysinger @ 2009-09-14 17:43 UTC (permalink / raw)
  To: linux-bluetooth, Marcel Holtmann; +Cc: linux-kernel, Michael Hennerich

Commit ac019360fe3 changed the irq handler logic to BUG_ON rather than
returning IRQ_NONE when the incoming argument is invalid.  While this
works in most cases, it doesn't work when the IRQ is shared with other
devices (or when DEBUG_SHIRQ is enabled).

So revert the previous change and replace the warning message with a
comment explaining that we want this behavior.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
v2
	- tweak commit log to not use git-revert

 drivers/bluetooth/bluecard_cs.c |    4 +++-
 drivers/bluetooth/bt3c_cs.c     |    4 +++-
 drivers/bluetooth/btuart_cs.c   |    4 +++-
 drivers/bluetooth/dtl1_cs.c     |    4 +++-
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/bluetooth/bluecard_cs.c b/drivers/bluetooth/bluecard_cs.c
index b0e569b..a3a8f4d 100644
--- a/drivers/bluetooth/bluecard_cs.c
+++ b/drivers/bluetooth/bluecard_cs.c
@@ -503,7 +503,9 @@ static irqreturn_t bluecard_interrupt(int irq, void *dev_inst)
 	unsigned int iobase;
 	unsigned char reg;
 
-	BUG_ON(!info->hdev);
+	if (!info || !info->hdev)
+		/* our irq handler is shared */
+		return IRQ_NONE;
 
 	if (!test_bit(CARD_READY, &(info->hw_state)))
 		return IRQ_HANDLED;
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c
index d58e22b..9a7578e 100644
--- a/drivers/bluetooth/bt3c_cs.c
+++ b/drivers/bluetooth/bt3c_cs.c
@@ -345,7 +345,9 @@ static irqreturn_t bt3c_interrupt(int irq, void *dev_inst)
 	int iir;
 	irqreturn_t r = IRQ_NONE;
 
-	BUG_ON(!info->hdev);
+	if (!info || !info->hdev)
+		/* our irq handler is shared */
+		return IRQ_NONE;
 
 	iobase = info->p_dev->io.BasePort1;
 
diff --git a/drivers/bluetooth/btuart_cs.c b/drivers/bluetooth/btuart_cs.c
index efd689a..cd9cb6c 100644
--- a/drivers/bluetooth/btuart_cs.c
+++ b/drivers/bluetooth/btuart_cs.c
@@ -295,7 +295,9 @@ static irqreturn_t btuart_interrupt(int irq, void *dev_inst)
 	int iir, lsr;
 	irqreturn_t r = IRQ_NONE;
 
-	BUG_ON(!info->hdev);
+	if (!info || !info->hdev)
+		/* our irq handler is shared */
+		return IRQ_NONE;
 
 	iobase = info->p_dev->io.BasePort1;
 
diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c
index 2cc7b32..588678a 100644
--- a/drivers/bluetooth/dtl1_cs.c
+++ b/drivers/bluetooth/dtl1_cs.c
@@ -299,7 +299,9 @@ static irqreturn_t dtl1_interrupt(int irq, void *dev_inst)
 	int iir, lsr;
 	irqreturn_t r = IRQ_NONE;
 
-	BUG_ON(!info->hdev);
+	if (!info || !info->hdev)
+		/* our irq handler is shared */
+		return IRQ_NONE;
 
 	iobase = info->p_dev->io.BasePort1;
 
-- 
1.6.4.2


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

* Re: [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler"
  2009-09-14  5:18 [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler" Mike Frysinger
  2009-09-14  9:58 ` Marcel Holtmann
  2009-09-14 17:43 ` [PATCH v2] [Bluetooth] redo checks in IRQ handler for shared IRQ support Mike Frysinger
@ 2009-09-14 23:17 ` Robert Hancock
  2009-09-15 11:28   ` Mike Frysinger
  2 siblings, 1 reply; 8+ messages in thread
From: Robert Hancock @ 2009-09-14 23:17 UTC (permalink / raw)
  To: Mike Frysinger
  Cc: Marcel Holtmann, public-linux-bluetooth-u79uwXL29TY76Z2rM5mHXA,
	public-linux-kernel-u79uwXL29TY76Z2rM5mHXA, Michael Hennerich



On 09/13/2009 11:18 PM, Mike Frysinger wrote:
> Commit ac019360fe3 changed the irq handler logic to BUG_ON rather than
> returning IRQ_NONE when the incoming argument is invalid.  While this
> works in most cases, it doesn't work when the IRQ is shared with other
> devices (or when DEBUG_SHIRQ is enabled).

Something doesn't add up here. It shouldn't be possible for the incoming 
argument to be invalid. I'd think that if it is it means that the IRQ 
handler is being registered too soon, before the data structures it 
requires are set up fully. If that's the case, reverting the change just 
partially papers over the bug.

>
> So revert the previous change and replace the warning message with a
> comment.
>
> Signed-off-by: Michael Hennerich<michael.hennerich-OyLXuOCK7orQT0dZR+AlfA@public.gmane.org>
> Signed-off-by: Mike Frysinger<vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
> ---
>   drivers/bluetooth/bluecard_cs.c |    4 +++-
>   drivers/bluetooth/bt3c_cs.c     |    4 +++-
>   drivers/bluetooth/btuart_cs.c   |    4 +++-
>   drivers/bluetooth/dtl1_cs.c     |    4 +++-
>   4 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/bluetooth/bluecard_cs.c b/drivers/bluetooth/bluecard_cs.c
> index b0e569b..a3a8f4d 100644
> --- a/drivers/bluetooth/bluecard_cs.c
> +++ b/drivers/bluetooth/bluecard_cs.c
> @@ -503,7 +503,9 @@ static irqreturn_t bluecard_interrupt(int irq, void *dev_inst)
>   	unsigned int iobase;
>   	unsigned char reg;
>
> -	BUG_ON(!info->hdev);
> +	if (!info || !info->hdev)
> +		/* our irq handler is shared */
> +		return IRQ_NONE;
>
>   	if (!test_bit(CARD_READY,&(info->hw_state)))
>   		return IRQ_HANDLED;
> diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c
> index d58e22b..9a7578e 100644
> --- a/drivers/bluetooth/bt3c_cs.c
> +++ b/drivers/bluetooth/bt3c_cs.c
> @@ -345,7 +345,9 @@ static irqreturn_t bt3c_interrupt(int irq, void *dev_inst)
>   	int iir;
>   	irqreturn_t r = IRQ_NONE;
>
> -	BUG_ON(!info->hdev);
> +	if (!info || !info->hdev)
> +		/* our irq handler is shared */
> +		return IRQ_NONE;
>
>   	iobase = info->p_dev->io.BasePort1;
>
> diff --git a/drivers/bluetooth/btuart_cs.c b/drivers/bluetooth/btuart_cs.c
> index efd689a..cd9cb6c 100644
> --- a/drivers/bluetooth/btuart_cs.c
> +++ b/drivers/bluetooth/btuart_cs.c
> @@ -295,7 +295,9 @@ static irqreturn_t btuart_interrupt(int irq, void *dev_inst)
>   	int iir, lsr;
>   	irqreturn_t r = IRQ_NONE;
>
> -	BUG_ON(!info->hdev);
> +	if (!info || !info->hdev)
> +		/* our irq handler is shared */
> +		return IRQ_NONE;
>
>   	iobase = info->p_dev->io.BasePort1;
>
> diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c
> index 2cc7b32..588678a 100644
> --- a/drivers/bluetooth/dtl1_cs.c
> +++ b/drivers/bluetooth/dtl1_cs.c
> @@ -299,7 +299,9 @@ static irqreturn_t dtl1_interrupt(int irq, void *dev_inst)
>   	int iir, lsr;
>   	irqreturn_t r = IRQ_NONE;
>
> -	BUG_ON(!info->hdev);
> +	if (!info || !info->hdev)
> +		/* our irq handler is shared */
> +		return IRQ_NONE;
>
>   	iobase = info->p_dev->io.BasePort1;
>



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

* Re: [PATCH] Revert "[Bluetooth] Eliminate checks for impossible  conditions in IRQ handler"
  2009-09-14 23:17 ` [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler" Robert Hancock
@ 2009-09-15 11:28   ` Mike Frysinger
  0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2009-09-15 11:28 UTC (permalink / raw)
  To: Robert Hancock
  Cc: Marcel Holtmann, public-linux-bluetooth-u79uwXL29TY76Z2rM5mHXA,
	public-linux-kernel-u79uwXL29TY76Z2rM5mHXA, Michael Hennerich



On Mon, Sep 14, 2009 at 19:17, Robert Hancock wrote:
> On 09/13/2009 11:18 PM, Mike Frysinger wrote:
>> Commit ac019360fe3 changed the irq handler logic to BUG_ON rather than
>> returning IRQ_NONE when the incoming argument is invalid.  While this
>> works in most cases, it doesn't work when the IRQ is shared with other
>> devices (or when DEBUG_SHIRQ is enabled).
>
> Something doesn't add up here. It shouldn't be possible for the incoming
> argument to be invalid. I'd think that if it is it means that the IRQ
> handler is being registered too soon, before the data structures it requires
> are set up fully. If that's the case, reverting the change just partially
> papers over the bug.

it's a shared irq.  so there is no way to guarantee that the incoming
interrupt is from the bluetooth device.

aaaand there's the issue of registering too soon, but the pcmcia
framework doesnt seem to provide a way to fix this.  enable
DEBUG_SHIRQ and you too will see the kernel crash (since this causes
the IRQ to "fire" as soon as it's generated).

i dont know anything about these devices, but another fix may be to
remove the shareable flag from the irq registration.
-mike


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

* Re: [PATCH v2] [Bluetooth] redo checks in IRQ handler for shared IRQ  support
  2009-09-14 17:43 ` [PATCH v2] [Bluetooth] redo checks in IRQ handler for shared IRQ support Mike Frysinger
@ 2010-01-19 11:16     ` Mike Frysinger
  0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2010-01-19 11:16 UTC (permalink / raw)
  To: linux-bluetooth, Marcel Holtmann
  Cc: linux-kernel, Michael Hennerich, Andrew Morton

On Mon, Sep 14, 2009 at 12:43, Mike Frysinger wrote:
> Commit ac019360fe3 changed the irq handler logic to BUG_ON rather than
> returning IRQ_NONE when the incoming argument is invalid.  While this
> works in most cases, it doesn't work when the IRQ is shared with other
> devices (or when DEBUG_SHIRQ is enabled).
>
> So revert the previous change and replace the warning message with a
> comment explaining that we want this behavior.

was this picked up ?
-mike

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

* Re: [PATCH v2] [Bluetooth] redo checks in IRQ handler for shared IRQ support
@ 2010-01-19 11:16     ` Mike Frysinger
  0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2010-01-19 11:16 UTC (permalink / raw)
  To: linux-bluetooth, Marcel Holtmann
  Cc: linux-kernel, Michael Hennerich, Andrew Morton

On Mon, Sep 14, 2009 at 12:43, Mike Frysinger wrote:
> Commit ac019360fe3 changed the irq handler logic to BUG_ON rather than
> returning IRQ_NONE when the incoming argument is invalid. =C2=A0While thi=
s
> works in most cases, it doesn't work when the IRQ is shared with other
> devices (or when DEBUG_SHIRQ is enabled).
>
> So revert the previous change and replace the warning message with a
> comment explaining that we want this behavior.

was this picked up ?
-mike

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

* Re: [PATCH v2] [Bluetooth] redo checks in IRQ handler for shared IRQ  support
  2010-01-19 11:16     ` Mike Frysinger
  (?)
@ 2010-01-19 18:21     ` Marcel Holtmann
  -1 siblings, 0 replies; 8+ messages in thread
From: Marcel Holtmann @ 2010-01-19 18:21 UTC (permalink / raw)
  To: Mike Frysinger
  Cc: linux-bluetooth, linux-kernel, Michael Hennerich, Andrew Morton

Hi Mike,

> > Commit ac019360fe3 changed the irq handler logic to BUG_ON rather than
> > returning IRQ_NONE when the incoming argument is invalid.  While this
> > works in most cases, it doesn't work when the IRQ is shared with other
> > devices (or when DEBUG_SHIRQ is enabled).
> >
> > So revert the previous change and replace the warning message with a
> > comment explaining that we want this behavior.
> 
> was this picked up ?

not it was not, but now it has been applied to my trees. Thanks.

Regards

Marcel



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

end of thread, other threads:[~2010-01-19 18:22 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-14  5:18 [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler" Mike Frysinger
2009-09-14  9:58 ` Marcel Holtmann
2009-09-14 17:43 ` [PATCH v2] [Bluetooth] redo checks in IRQ handler for shared IRQ support Mike Frysinger
2010-01-19 11:16   ` Mike Frysinger
2010-01-19 11:16     ` Mike Frysinger
2010-01-19 18:21     ` Marcel Holtmann
2009-09-14 23:17 ` [PATCH] Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ handler" Robert Hancock
2009-09-15 11:28   ` Mike Frysinger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.