![]() | |||||||||||||
Messages in this thread Patch in this message |
On Thu, 12 May 2005 19:02:06 -0400 Wakko Warner wrote: | Wakko Warner wrote: | > 3) I put together a boot kernel/initrd using 2.6.12-rc2 (also tested | > 2.6.12-rc4) which seems to work, except that pcmcia does not function | > properly. When pcmcia.ko gets loaded, it is unable to register it's char | > dev. I'm not sure why this is. 2.6.11.8 worked fine with no modifications | > to the system. This is a system designed to boot from floppy minimally, | > search for a device which has some files that populates a tmpfs filesystem | > which becomes the root filesystem. This module is loaded from the tmpfs | > filesystem. Module-init-tools version is 3.2-pre (Not sure if this makes a | > difference). I tested this on a notebook that I have. I also have this | > same kernel version installed which works fine. It could be a different | > version of module-init-tools, but I'm unsure at this point (I do not have | > access to the notebook at this time. | | I tested this again today with a few changes. It appears that if pcmcia.ko | (or rather the .c files that make it up) are compiled with -Os, it will fail | to register a character device. Being that one of my goals for this was to | fit everything on a floppy, I had to use -Os when building the kernel. | (pcmcia was not one of the modules that belongs on the floppy, however I | did not want to have to compile the kernel and then again for the modules | w/o -Os) | | I believe that pcmcia.ko is the only module I am using that uses a dynamic | major. There is some small difference in locking in fs/char_dev.c between 2.6.12-rc4 and 2.6.11.8, but I don't yet see why it would cause a failure in register_chrdev(). Oh, there's a big difference in drivers/pcmcia/ds.c, lots of probe changes. This is where to look further (but not tonight). The question then becomes is this a real regression? Do you suspect a problem with -Os code generation? Looks to me like ds.c needs at least this small fix... --- register_chrdev() can return errors (negative) other then -EBUSY, so check for any negative error code. Signed-off-by: Randy Dunlap <rdunlap@xenotime.net> diffstat:= drivers/pcmcia/ds.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -Naurp ./drivers/pcmcia/ds.c~ds_check_major ./drivers/pcmcia/ds.c --- ./drivers/pcmcia/ds.c~ds_check_major 2005-05-12 13:16:41.000000000 -0700 +++ ./drivers/pcmcia/ds.c 2005-05-12 19:45:36.000000000 -0700 @@ -1592,9 +1592,9 @@ static int __init init_pcmcia_bus(void) /* Set up character device for user mode clients */ i = register_chrdev(0, "pcmcia", &ds_fops); - if (i == -EBUSY) + if (i < 0) printk(KERN_NOTICE "unable to find a free device # for " - "Driver Services\n"); + "Driver Services (error=%d)\n", i); else major_dev = i; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ | ||||||||||||
| Last update: 2005-05-13 07:23 [from the cache] ©2003-2008 | |||||||||||||