From: Maneesh Soni <maneesh@in.ibm.com>
To: Russell King <rmk+lkml@arm.linux.org.uk>
Cc: Matthew Reppert <repp0017@tc.umn.edu>,
Guennadi Liakhovetski <gl@dsa-ac.de>,
LKML <linux-kernel@vger.kernel.org>,
Patrick Mochel <mochel@osdl.org>
Subject: Re: [OOPS] 2.6.0-test11 sysfs
Date: Wed, 10 Dec 2003 16:36:33 +0530 [thread overview]
Message-ID: <20031210110632.GA1314@in.ibm.com> (raw)
In-Reply-To: <20031209211440.A16651@flint.arm.linux.org.uk>
On Tue, Dec 09, 2003 at 09:19:52PM +0000, Russell King wrote:
> On Tue, Dec 09, 2003 at 11:57:28AM -0600, Matthew Reppert wrote:
> > Try this patch. (Patrick, is this the sane thing to do? And is it worth
> > it? If so, I can do similar things to the other sysfs_create_* functions
> > if you would like.)
>
> Actually the "right" thing to do is to drop the file creation stuff from
> i82365; due to an interaction between sysfs and pcmcia, we can't register
> class device files in the initialisation path.
>
Hi Russell,
How is the following patch? It moves the complete() call in the "pccardd"
thread after class_device_register(), so that in init_i82365() when
pcmcia_register_socket() is done we are sure that class device is
registered before creating the attribute files.
I must be missing lots of things as I could not understand the interaction
you mentioned, but still after seeing the code I did this patch.
IMHO we should propogate the error code if returned by class_device_register(),
back to pcmcia_register_socket() so that in case of error we can fail the
pcmcia_registera_socket(). For this purpose, I used socket->driver_data() in
pccardd() and also checking it in pcmcia_register_socket().
Thanks
Maneesh
o pcmcia_register_socket() should be woken up only after registering the
class device so that it doesnot create attribute files before registering
the class device.
o The error, if returned from class_device_register() is propogated back
to pcmcia_register_socket() using the ->driver_data field in the
pcmcia_socket. pcmcia_register_socket() is failed if socket->driver_data
has error in it, so that the driver init routine can process the failuer
properly.
drivers/pcmcia/cs.c | 16 +++++++++++-----
1 files changed, 11 insertions(+), 5 deletions(-)
diff -puN drivers/pcmcia/cs.c~pcmcia-sysfs-initialisation-fix drivers/pcmcia/cs.c
--- linux-2.6.0-test11/drivers/pcmcia/cs.c~pcmcia-sysfs-initialisation-fix 2003-12-10 15:27:41.000000000 +0530
+++ linux-2.6.0-test11-maneesh/drivers/pcmcia/cs.c 2003-12-10 16:27:33.000000000 +0530
@@ -356,6 +356,10 @@ int pcmcia_register_socket(struct pcmcia
wait_for_completion(&socket->thread_done);
BUG_ON(!socket->thread);
+ if (IS_ERR(socket->driver_data)) {
+ ret = PTR_ERR(socket->driver_data);
+ goto err;
+ }
pcmcia_parse_events(socket, SS_DETECT);
return 0;
@@ -772,19 +776,21 @@ static int pccardd(void *__skt)
daemonize("pccardd");
skt->thread = current;
- complete(&skt->thread_done);
-
- skt->socket = dead_socket;
- skt->ops->init(skt);
- skt->ops->set_socket(skt, &skt->socket);
/* register with the device core */
ret = class_device_register(&skt->dev);
if (ret) {
printk(KERN_WARNING "PCMCIA: unable to register socket 0x%p\n",
skt);
+ skt->driver_data = ERR_PTR(ret);
}
+ complete(&skt->thread_done);
+
+ skt->socket = dead_socket;
+ skt->ops->init(skt);
+ skt->ops->set_socket(skt, &skt->socket);
+
add_wait_queue(&skt->thread_wait, &wait);
for (;;) {
unsigned long flags;
_
--
Maneesh Soni
Linux Technology Center,
IBM Software Lab, Bangalore, India
email: maneesh@in.ibm.com
Phone: 91-80-5044999 Fax: 91-80-5268553
T/L : 9243696
next prev parent reply other threads:[~2003-12-10 11:07 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-09 17:35 [OOPS] 2.6.0-test11 sysfs Guennadi Liakhovetski
2003-12-09 17:57 ` Matthew Reppert
2003-12-09 18:17 ` Guennadi Liakhovetski
2003-12-09 21:14 ` Russell King
2003-12-10 9:30 ` Guennadi Liakhovetski
2003-12-10 11:06 ` Maneesh Soni [this message]
2003-12-10 11:14 ` Russell King
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=20031210110632.GA1314@in.ibm.com \
--to=maneesh@in.ibm.com \
--cc=gl@dsa-ac.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mochel@osdl.org \
--cc=repp0017@tc.umn.edu \
--cc=rmk+lkml@arm.linux.org.uk \
/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 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.