From: ambx1@neo.rr.com (Adam Belay)
To: Andrew Morton <akpm@osdl.org>
Cc: castet.matthieu@free.fr, linux-kernel@vger.kernel.org, vojtech@suse.cz
Subject: Re: [patch] ns558 bug
Date: Fri, 4 Feb 2005 22:48:32 -0500 [thread overview]
Message-ID: <20050205034832.GC7998@neo.rr.com> (raw)
In-Reply-To: <20050204192115.65ea246a.akpm@osdl.org>
On Fri, Feb 04, 2005 at 07:21:15PM -0800, Andrew Morton wrote:
> ambx1@neo.rr.com (Adam Belay) wrote:
> >
> > It looks ok. My only concern is what would happen if the isa probe succeded
> > but the pnp_register_driver failed? "pnp_register_driver" return -ENODEV if
> > "CONFIG_PNP" isn't enabled. Do you think this would conflict with legacy
> > probing?
>
> Fair enough. How about this?
The code no longer is leaking devices. I may be overlooking something, but I
think it still doesn't retain legacy probed devices when PnP isn't available.
If "pnp_register_driver" fails then "ns588_unregister_ports" will unregister
the correctly detected ISA ports. "pnp_register_driver" will always fail if
pnp support isn't compiled into the kernel. We need a way of not
unregistering "ns558_pnp_driver" in "ns558_exit" but retaining the ports
detected by the legacy probe. In a way, this is sort of a driver model
problem.
As a more general solution for all drivers, I've been thinking about doing
something like this in the long term.
int ret;
if (!(ret = register_driver(&ns558_driver)))
return ret;
add_driver_protocol(&ns558_driver, &ns558_pnp);
add_driver_protocol(&ns558_driver, &ns558_isa);
and then on exit:
unregister_driver(&ns558_driver); /* this tears down any successfully
registered bus protocol automatically */
For now a less invasive solution might be better.
Comments?
Thanks,
Adam
>
> static void ns588_unregister_ports(void)
> {
> struct ns558 *port;
>
> list_for_each_entry(port, &ns558_list, node) {
> gameport_unregister_port(&port->gameport);
> switch (port->type) {
>
> #ifdef CONFIG_PNP
> case NS558_PNP:
> /* fall through */
> #endif
> case NS558_ISA:
> release_region(port->gameport.io &
> ~(port->size - 1), port->size);
> kfree(port);
> break;
>
> default:
> break;
> }
> }
> }
>
> static int __init ns558_init(void)
> {
> int i = 0;
> int ret;
>
> /*
> * Probe for ISA ports.
> */
>
> while (ns558_isa_portlist[i])
> ns558_isa_probe(ns558_isa_portlist[i++]);
>
> ret = pnp_register_driver(&ns558_pnp_driver);
> if (ret < 0) {
> ns588_unregister_ports();
> return ret;
> }
> return 0;
> }
>
> static void __exit ns558_exit(void)
> {
> ns588_unregister_ports();
> pnp_unregister_driver(&ns558_pnp_driver);
> }
next prev parent reply other threads:[~2005-02-05 3:53 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-04 20:00 [patch] ns558 bug matthieu castet
2005-02-05 0:43 ` Adam Belay
2005-02-05 3:06 ` Andrew Morton
2005-02-05 3:08 ` Adam Belay
2005-02-05 3:21 ` Andrew Morton
2005-02-05 3:48 ` Adam Belay [this message]
2005-02-05 4:01 ` Andrew Morton
2005-02-05 8:31 ` matthieu castet
2005-02-07 9:53 ` Vojtech Pavlik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050205034832.GC7998@neo.rr.com \
--to=ambx1@neo.rr.com \
--cc=akpm@osdl.org \
--cc=castet.matthieu@free.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=vojtech@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox