public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [bug] pnp_register_card_driver/pnp_unregister_card_driver
@ 2005-02-07 19:33 matthieu castet
  2005-02-07 20:01 ` Adam Belay
  0 siblings, 1 reply; 3+ messages in thread
From: matthieu castet @ 2005-02-07 19:33 UTC (permalink / raw)
  To: Linux Kernel list, Adam Belay

Hi,

pnp_register_driver could fail and return <0 result, in this case the 
driver shouldn't be pnp_unregister_driver.

But if you look in pnp_register_card_driver, the result isn't checked. 
And it is always pnp_unregister_driver in pnp_unregister_card_driver.

I know that pnp_register_card_driver shouldn't fail in normal condition, 
but who know...


Matthieu

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

* Re: [bug] pnp_register_card_driver/pnp_unregister_card_driver
  2005-02-07 19:33 [bug] pnp_register_card_driver/pnp_unregister_card_driver matthieu castet
@ 2005-02-07 20:01 ` Adam Belay
  2005-02-07 20:23   ` matthieu castet
  0 siblings, 1 reply; 3+ messages in thread
From: Adam Belay @ 2005-02-07 20:01 UTC (permalink / raw)
  To: matthieu castet; +Cc: Linux Kernel list

On Mon, Feb 07, 2005 at 08:33:47PM +0100, matthieu castet wrote:
> Hi,
> 
> pnp_register_driver could fail and return <0 result, in this case the 
> driver shouldn't be pnp_unregister_driver.
> 
> But if you look in pnp_register_card_driver, the result isn't checked. 
> And it is always pnp_unregister_driver in pnp_unregister_card_driver.
> 
> I know that pnp_register_card_driver shouldn't fail in normal condition, 
> but who know...
> 
> 
> Matthieu

Yeah, you're right.  I'm probably going to do something like this.

--- a/drivers/pnp/card.c	2005-01-20 17:38:02.000000000 -0500
+++ b/drivers/pnp/card.c	2005-02-07 14:53:24.000000000 -0500
@@ -355,10 +355,12 @@
 	drv->link.probe = NULL;
 	drv->link.remove = &card_remove_first;
 
+	if ((count = pnp_register_driver(&drv->link) < 0))
+		return count;
+
 	spin_lock(&pnp_lock);
 	list_add_tail(&drv->global_list, &pnp_card_drivers);
 	spin_unlock(&pnp_lock);
-	pnp_register_driver(&drv->link);
 
 	list_for_each_safe(pos,temp,&pnp_cards){
 		struct pnp_card *card = list_entry(pos, struct pnp_card, global_list);

Thanks,
Adam

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

* Re: [bug] pnp_register_card_driver/pnp_unregister_card_driver
  2005-02-07 20:01 ` Adam Belay
@ 2005-02-07 20:23   ` matthieu castet
  0 siblings, 0 replies; 3+ messages in thread
From: matthieu castet @ 2005-02-07 20:23 UTC (permalink / raw)
  To: Adam Belay; +Cc: Linux Kernel list

Hi,

Adam Belay wrote:
> On Mon, Feb 07, 2005 at 08:33:47PM +0100, matthieu castet wrote:
> 
>>Hi,
>>
>>pnp_register_driver could fail and return <0 result, in this case the 
>>driver shouldn't be pnp_unregister_driver.
>>
>>But if you look in pnp_register_card_driver, the result isn't checked. 
>>And it is always pnp_unregister_driver in pnp_unregister_card_driver.
>>
>>I know that pnp_register_card_driver shouldn't fail in normal condition, 
>>but who know...
>>
>>
>>Matthieu
> 
> 
> Yeah, you're right.  I'm probably going to do something like this.
> 
If you do something like this there will be some broken driver to 
correct. See [1] for isa alsa driver that assume that the result is >=0.


Matthieu

[1]
$grep -rI pnp_register_card_driver /usr/src/linux/sound/isa/
/usr/src/linux/sound/isa/cs423x/cs4236.c:       cards += 
pnp_register_card_driver(&cs423x_pnpc_driver);
/usr/src/linux/sound/isa/gus/interwave.c:       i = 
pnp_register_card_driver(&interwave_pnpc_driver);
/usr/src/linux/sound/isa/sb/es968.c:    int cards = 
pnp_register_card_driver(&es968_pnpc_driver);
/usr/src/linux/sound/isa/sb/sb16.c:     i = 
pnp_register_card_driver(&sb16_pnpc_driver);
/usr/src/linux/sound/isa/als100.c:      cards += 
pnp_register_card_driver(&als100_pnpc_driver);
/usr/src/linux/sound/isa/sscape.c:              ret = 
pnp_register_card_driver(&sscape_pnpc_driver);
/usr/src/linux/sound/isa/opti9xx/opti92x-ad1848.c:      cards = 
pnp_register_card_driver(&opti9xx_pnpc_driver);
/usr/src/linux/sound/isa/ad1816a/ad1816a.c:     cards += 
pnp_register_card_driver(&ad1816a_pnpc_driver);
/usr/src/linux/sound/isa/wavefront/wavefront.c: cards += 
pnp_register_card_driver(&wavefront_pnpc_driver);
/usr/src/linux/sound/isa/dt019x.c:      cards += 
pnp_register_card_driver(&dt019x_pnpc_driver);
/usr/src/linux/sound/isa/es18xx.c:      i = 
pnp_register_card_driver(&es18xx_pnpc_driver);
/usr/src/linux/sound/isa/azt2320.c:     cards += 
pnp_register_card_driver(&azt2320_pnpc_driver);
/usr/src/linux/sound/isa/opl3sa2.c:     cards += 
pnp_register_card_driver(&opl3sa2_pnpc_driver);
/usr/src/linux/sound/isa/cmi8330.c:     cards += 
pnp_register_card_driver(&cmi8330_pnpc_driver);

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

end of thread, other threads:[~2005-02-07 20:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-02-07 19:33 [bug] pnp_register_card_driver/pnp_unregister_card_driver matthieu castet
2005-02-07 20:01 ` Adam Belay
2005-02-07 20:23   ` matthieu castet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox