Hi,
Modular IDE no longer works in 2.4.23 (I'm testing rc3). I'm getting
depmod: *** Unresolved symbols
in /lib/modules/2.4.23-0.1/kernel/drivers/ide/ide-core.o
depmod: init_cmd640_vlb
depmod: ide_wait_hwif_ready
depmod: ide_probe_for_drive
depmod: ide_probe_reset
depmod: ide_tune_drives
This is regression since in 2.4.21 and 2.4.22 modular IDE was working fine on
my x86.
Is anyone working on fixing that regression?
_BLK_ options from config
CONFIG_BLK_DEV_FD=m
CONFIG_BLK_DEV_PS2=m
CONFIG_BLK_DEV_XD=m
CONFIG_BLK_CPQ_DA=m
CONFIG_BLK_CPQ_CISS_DA=m
CONFIG_BLK_DEV_DAC960=m
CONFIG_BLK_DEV_UMEM=m
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_NWD=m
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_BLK_STATS=y
CONFIG_BLK_DEV_MD=m
CONFIG_BLK_DEV_LVM=m
CONFIG_BLK_DEV_DM=m
CONFIG_BLK_DEV_DM_MIRROR=m
CONFIG_BLK_DEV_DM_BBR=m
CONFIG_BLK_DEV_DM_SPARSE=m
CONFIG_BLK_DEV_IDE=m
# CONFIG_BLK_DEV_HD_IDE is not set
# CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDEDISK=m
CONFIG_BLK_DEV_IDECS=m
CONFIG_BLK_DEV_IDECD=m
CONFIG_BLK_DEV_IDETAPE=m
CONFIG_BLK_DEV_IDEFLOPPY=m
CONFIG_BLK_DEV_IDESCSI=m
CONFIG_BLK_DEV_CMD640=y
# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
# CONFIG_BLK_DEV_ISAPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_GENERIC=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_BLK_DEV_OFFBOARD=y
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_BLK_DEV_ADMA100=m
CONFIG_BLK_DEV_AEC62XX=m
CONFIG_BLK_DEV_ALI15X3=m
CONFIG_BLK_DEV_AMD74XX=m
CONFIG_BLK_DEV_CMD64X=m
CONFIG_BLK_DEV_TRIFLEX=m
CONFIG_BLK_DEV_CY82C693=m
CONFIG_BLK_DEV_CS5530=m
CONFIG_BLK_DEV_HPT34X=m
CONFIG_BLK_DEV_HPT366=m
CONFIG_BLK_DEV_PIIX=m
CONFIG_BLK_DEV_NS87415=m
CONFIG_BLK_DEV_OPTI621=m
CONFIG_BLK_DEV_PDC202XX_OLD=m
CONFIG_BLK_DEV_PDC202XX_NEW=m
CONFIG_BLK_DEV_RZ1000=m
CONFIG_BLK_DEV_SC1200=m
CONFIG_BLK_DEV_SVWKS=m
CONFIG_BLK_DEV_SIIMAGE=m
CONFIG_BLK_DEV_SIS5513=m
CONFIG_BLK_DEV_SLC90E66=m
CONFIG_BLK_DEV_TRM290=m
CONFIG_BLK_DEV_VIA82CXXX=m
CONFIG_BLK_DEV_4DRIVES=y
CONFIG_BLK_DEV_ALI14XX=m
CONFIG_BLK_DEV_DTC2278=m
CONFIG_BLK_DEV_HT6560B=m
CONFIG_BLK_DEV_PDC4030=m
CONFIG_BLK_DEV_QD65XX=m
CONFIG_BLK_DEV_UMC8672=m
CONFIG_BLK_DEV_PDC202XX=y
CONFIG_BLK_DEV_IDE_MODES=y
CONFIG_BLK_DEV_ATARAID=m
CONFIG_BLK_DEV_ATARAID_PDC=m
CONFIG_BLK_DEV_ATARAID_HPT=m
CONFIG_BLK_DEV_ATARAID_SII=m
CONFIG_BLK_DEV_SD=m
CONFIG_BLK_DEV_SR=m
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_BLK_DEV_3W_XXXX_RAID=m
--
Arkadiusz Mi?kiewicz CS at FoE, Wroclaw University of Technology
arekm.pld-linux.org AM2-6BONE, 1024/3DB19BBD, arekm(at)ircnet, PLD/Linux
On Sat, 22 Nov 2003, Arkadiusz Miskiewicz wrote:
> Hi,
>
> Modular IDE no longer works in 2.4.23 (I'm testing rc3). I'm getting
>
> depmod: *** Unresolved symbols
> in /lib/modules/2.4.23-0.1/kernel/drivers/ide/ide-core.o
> depmod: init_cmd640_vlb
> depmod: ide_wait_hwif_ready
> depmod: ide_probe_for_drive
> depmod: ide_probe_reset
> depmod: ide_tune_drives
>
> This is regression since in 2.4.21 and 2.4.22 modular IDE was working fine on
> my x86.
>
> Is anyone working on fixing that regression?
>From what I remember its not simple to fix.
Alan?
On Sun, 23 Nov 2003, Arkadiusz Miskiewicz wrote:
> On Sunday 23 of November 2003 01:54, Arkadiusz Miskiewicz wrote:
> > Could you give more specific hints how to fix ,,other stuff''?
> Did this in not the right way probably but it works fine for me (just modular
> ide tested):
>
> http://cvs.pld-linux.org/cgi-bin/cvsweb/SOURCES/linux-2.4.23-modular-ide.patch?rev=1.9
>
> [misiek@arm ~]$ lsmod | grep ide
> ide-scsi 9904 0
> scsi_mod 93888 2 [sg ide-scsi]
> ide-cd 30944 0
> cdrom 29248 0 [ide-cd]
> ide-disk 16076 13
> ide-core 104504 13 [ide-scsi ide-cd ide-disk pdc202xx_new
> via82cxxx]
>
> Thanks for hint (now only cmd640 isse left for me).
>
> > > Alan
Arkadiusz,
I agree with you that modular IDE (I dont care that much about the
cmd640 really) should work on 2.4.23.
I dont think the "ide-probe-mini" is required though. Just calling
the ide-probe.o init functions from IDE init should work right?
Does the attached patch work for you (it moves ide-probe into ide-core,
as Alan mentioned) ?
diff -Naur -X /home/marcelo/lib/dontdiff linux-2.4.23-rc4/drivers/ide/Makefile linux-2.4.23-rc3/drivers/ide/Makefile
--- linux-2.4.23-rc4/drivers/ide/Makefile 2003-11-23 16:45:41.000000000 +0000
+++ linux-2.4.23-rc3/drivers/ide/Makefile 2003-11-23 16:29:04.000000000 +0000
@@ -9,7 +9,7 @@
#
-export-objs := ide-iops.o ide-taskfile.o ide-proc.o ide.o ide-probe.o ide-dma.o ide-lib.o setup-pci.o ide-io.o ide-disk.o
+export-objs := ide-iops.o ide-taskfile.o ide-proc.o ide.o ide-dma.o ide-lib.o setup-pci.o ide-io.o ide-disk.o ide-probe.o
all-subdirs := arm legacy pci ppc raid
mod-subdirs := arm legacy pci ppc raid
@@ -28,8 +28,8 @@
# Core IDE code - must come before legacy
-ide-core-objs := ide-iops.o ide-taskfile.o ide.o ide-lib.o ide-io.o ide-default.o ide-proc.o
-ide-detect-objs := ide-probe.o ide-geometry.o
+ide-core-objs := ide-iops.o ide-taskfile.o ide.o ide-lib.o ide-io.o ide-default.o ide-proc.o ide-probe.o
+ide-detect-objs := ide-geometry.o
ifeq ($(CONFIG_BLK_DEV_IDEPCI),y)
diff -Naur -X /home/marcelo/lib/dontdiff linux-2.4.23-rc4/drivers/ide/ide-probe.c linux-2.4.23-rc3/drivers/ide/ide-probe.c
--- linux-2.4.23-rc4/drivers/ide/ide-probe.c 2003-11-23 16:42:08.000000000 +0000
+++ linux-2.4.23-rc3/drivers/ide/ide-probe.c 2003-11-23 16:27:53.000000000 +0000
@@ -1416,7 +1416,7 @@
#ifdef MODULE
extern int (*ide_xlate_1024_hook)(kdev_t, int, int, const char *);
-int init_module (void)
+int ideprobe_init_module(void)
{
unsigned int index;
@@ -1428,10 +1428,14 @@
return 0;
}
-void cleanup_module (void)
+void ideprobe_cleanup_module (void)
{
ide_probe = NULL;
ide_xlate_1024_hook = 0;
}
+
+EXPORT_SYMBOL(ideprobe_init_module);
+EXPORT_SYMBOL(ideprobe_cleanup_module);
MODULE_LICENSE("GPL");
+
#endif /* MODULE */
diff -Naur -X /home/marcelo/lib/dontdiff linux-2.4.23-rc4/drivers/ide/ide.c linux-2.4.23-rc3/drivers/ide/ide.c
--- linux-2.4.23-rc4/drivers/ide/ide.c 2003-11-23 16:46:51.000000000 +0000
+++ linux-2.4.23-rc3/drivers/ide/ide.c 2003-11-23 16:50:39.000000000 +0000
@@ -3059,6 +3059,7 @@
int init_module (void)
{
+ ideprobe_init_module();
parse_options(options);
return ide_init();
}
@@ -3080,6 +3081,7 @@
proc_ide_destroy();
#endif
devfs_unregister (ide_devfs_handle);
+ ideprobe_cleanup_module();
}
#else /* !MODULE */
diff -Naur -X /home/marcelo/lib/dontdiff linux-2.4.23-rc4/include/linux/ide.h linux-2.4.23-rc3/include/linux/ide.h
--- linux-2.4.23-rc4/include/linux/ide.h 2003-11-23 16:43:17.000000000 +0000
+++ linux-2.4.23-rc3/include/linux/ide.h 2003-11-23 16:29:30.000000000 +0000
@@ -1615,6 +1615,9 @@
extern int idescsi_attach(ide_drive_t *);
extern int idescsi_init(void);
+extern int ideprobe_init_module(void);
+extern void ideprobe_cleanup_module(void);
+
extern void ide_scan_pcibus(int scan_direction) __init;
extern int ide_pci_register_driver(struct pci_driver *driver);
extern void ide_pci_unregister_driver(struct pci_driver *driver);
On Sunday 23 of November 2003 18:08, Marcelo Tosatti wrote:
> On Sun, 23 Nov 2003, Arkadiusz Miskiewicz wrote:
> > On Sunday 23 of November 2003 01:54, Arkadiusz Miskiewicz wrote:
> > > Could you give more specific hints how to fix ,,other stuff''?
> >
> > Did this in not the right way probably but it works fine for me (just
> > modular ide tested):
> >
> > http://cvs.pld-linux.org/cgi-bin/cvsweb/SOURCES/linux-2.4.23-modular-ide.
> >patch?rev=1.9
> >
> > [misiek@arm ~]$ lsmod | grep ide
> > ide-scsi 9904 0
> > scsi_mod 93888 2 [sg ide-scsi]
> > ide-cd 30944 0
> > cdrom 29248 0 [ide-cd]
> > ide-disk 16076 13
> > ide-core 104504 13 [ide-scsi ide-cd ide-disk pdc202xx_new
> > via82cxxx]
> >
> > Thanks for hint (now only cmd640 isse left for me).
> >
> > > > Alan
>
> Arkadiusz,
Unfortunately this patch is not sufficient.
> I agree with you that modular IDE (I dont care that much about the
> cmd640 really) should work on 2.4.23.
Some people want cmd640 fixes in 2.4.23, really!
> I dont think the "ide-probe-mini" is required though. Just calling
> the ide-probe.o init functions from IDE init should work right?
"ide-probe-mini" is not required and just calling init functions from IDE init
won't work (will break modular chipsets).
> Does the attached patch work for you (it moves ide-probe into ide-core,
> as Alan mentioned) ?
It will break drives probing for all modular chipset drivers.
Uh. Oh. 2.4.23 IDE changes are obscure... Modular IDE breakage is caused by
Alan's hotplug changes and is not easy to fix properly.
I would like to have these changes removed:
(a) they break modular IDE
(b) such changes should be first added to 2.6 and then backported to 2.4
(otherwise you are magically creating regression in 2.6)
(c) they are ugly and will cause much maintaining headache
(and it seems it won't be Alan who will suffer ;))
Anyway it is up to you :-).
cheers,
--bart
> Uh. Oh. 2.4.23 IDE changes are obscure... Modular IDE breakage is caused by
> Alan's hotplug changes and is not easy to fix properly.
The fixing is simply a matter of linkage ordering and function execution.
Simple thought experiment
Merge ide-probe into ide-core
Export a symbol for the second initializer function if used modular
Create a mini module that just invokes the exported function on init
You now have the same execution sequence but with the link problem removed.
> I would like to have these changes removed:
> (a) they break modular IDE
> (b) such changes should be first added to 2.6 and then backported to 2.4
> (otherwise you are magically creating regression in 2.6)
Its not my fault the 2.6 code is lagging badly, and I wrote the code
because people using laptops, and people using ATA and SATA for business
expect basic functionality like hotplug to work. For most of them 2.6 doesn't
really matter and won't for another 6 months, but 2.4 matters right now.
The cmd640 stuff is the only hard to fix bit, and its unrelated to the
modular IDE stuff.
On Sunday 23 of November 2003 21:56, Alan Cox wrote:
> > Uh. Oh. 2.4.23 IDE changes are obscure... Modular IDE breakage is caused
> > by Alan's hotplug changes and is not easy to fix properly.
>
> The fixing is simply a matter of linkage ordering and function execution.
>
> Simple thought experiment
>
> Merge ide-probe into ide-core
> Export a symbol for the second initializer function if used modular
> Create a mini module that just invokes the exported function on init
Update ide_probe_module() for new name of probe module.
> You now have the same execution sequence but with the link problem removed.
Hmm, actually you are right. Sorry :-).
> > I would like to have these changes removed:
> > (a) they break modular IDE
> > (b) such changes should be first added to 2.6 and then backported to 2.4
> > (otherwise you are magically creating regression in 2.6)
>
> Its not my fault the 2.6 code is lagging badly, and I wrote the code
2.6 is not "lagging badly", this is a false statement.
> because people using laptops, and people using ATA and SATA for business
> expect basic functionality like hotplug to work. For most of them 2.6
> doesn't really matter and won't for another 6 months, but 2.4 matters right
> now.
I assume you will fix it 6 months from now in 2.6, right? :-)
--bart
> > Its not my fault the 2.6 code is lagging badly, and I wrote the code
>
> 2.6 is not "lagging badly", this is a false statement.
Ok.
> > doesn't really matter and won't for another 6 months, but 2.4 matters right
> > now.
>
> I assume you will fix it 6 months from now in 2.6, right? :-)
If it hasn't already been ported over I suspect I will get considerable
demand to fix that, and yes I intend to do so if nobody else has - although
I'm not sure I'm going to go back to kernel stuff paticularly after the
course. I've been having way too much fun with stuff like X drivers and its
time for something different.
Alan
On Sun, 23 Nov 2003, Bartlomiej Zolnierkiewicz wrote:
>
> On Sunday 23 of November 2003 18:08, Marcelo Tosatti wrote:
> > On Sun, 23 Nov 2003, Arkadiusz Miskiewicz wrote:
> > > On Sunday 23 of November 2003 01:54, Arkadiusz Miskiewicz wrote:
> > > > Could you give more specific hints how to fix ,,other stuff''?
> > >
> > > Did this in not the right way probably but it works fine for me (just
> > > modular ide tested):
> > >
> > > http://cvs.pld-linux.org/cgi-bin/cvsweb/SOURCES/linux-2.4.23-modular-ide.
> > >patch?rev=1.9
> > >
> > > [misiek@arm ~]$ lsmod | grep ide
> > > ide-scsi 9904 0
> > > scsi_mod 93888 2 [sg ide-scsi]
> > > ide-cd 30944 0
> > > cdrom 29248 0 [ide-cd]
> > > ide-disk 16076 13
> > > ide-core 104504 13 [ide-scsi ide-cd ide-disk pdc202xx_new
> > > via82cxxx]
> > >
> > > Thanks for hint (now only cmd640 isse left for me).
> > >
> > > > > Alan
> >
> > Arkadiusz,
>
> Unfortunately this patch is not sufficient.
>
> > I agree with you that modular IDE (I dont care that much about the
> > cmd640 really) should work on 2.4.23.
>
> Some people want cmd640 fixes in 2.4.23, really!
>
> > I dont think the "ide-probe-mini" is required though. Just calling
> > the ide-probe.o init functions from IDE init should work right?
>
> "ide-probe-mini" is not required and just calling init functions from IDE init
> won't work (will break modular chipsets).
>
> > Does the attached patch work for you (it moves ide-probe into ide-core,
> > as Alan mentioned) ?
>
> It will break drives probing for all modular chipset drivers.
>
> Uh. Oh. 2.4.23 IDE changes are obscure... Modular IDE breakage is caused by
> Alan's hotplug changes and is not easy to fix properly.
>
> I would like to have these changes removed:
> (a) they break modular IDE
> (b) such changes should be first added to 2.6 and then backported to 2.4
> (otherwise you are magically creating regression in 2.6)
> (c) they are ugly and will cause much maintaining headache
> (and it seems it won't be Alan who will suffer ;))
>
> Anyway it is up to you :-).
Hum I think the saner approach is to remove the hotplugging indeed.
Mind writting me a patch Bart? :)
On Sun, 23 Nov 2003, Bartlomiej Zolnierkiewicz wrote:
> On Sunday 23 of November 2003 21:56, Alan Cox wrote:
> > > Uh. Oh. 2.4.23 IDE changes are obscure... Modular IDE breakage is caused
> > > by Alan's hotplug changes and is not easy to fix properly.
> >
> > The fixing is simply a matter of linkage ordering and function execution.
> >
> > Simple thought experiment
> >
> > Merge ide-probe into ide-core
> > Export a symbol for the second initializer function if used modular
> > Create a mini module that just invokes the exported function on init
>
> Update ide_probe_module() for new name of probe module.
>
> > You now have the same execution sequence but with the link problem removed.
>
> Hmm, actually you are right. Sorry :-).
So mind you or Alan write a patch for me, please?
On Monday 24 of November 2003 01:22, Marcelo Tosatti wrote:
> Hum I think the saner approach is to remove the hotplugging indeed.
>
> Mind writting me a patch Bart? :)
Hm, maybe for 2.4.23 it is sane but then reapply it again + merge ide-core and ide-detect
since solution with ide-probe-mini works well.
Right now I've cleaned up a bit my old patch and it is attached bellow. I'm currently
compiling kernel with it (so all my tests were done with old (uglier, #include "ide-probe.c" )
version of this patch).
Also probably most of #includes from ide-probe-mini.c could be removed, too.
ps. is there some magic way to avoid need of extern int ideprobe_init_module(void); etc
in ide-probe-mini.c?
diff -urN linux-2.4.22.org/drivers/ide/ide-probe.c linux-2.4.22/drivers/ide/ide-probe.c
--- linux-2.4.22.org/drivers/ide/ide-probe.c 2003-11-23 23:01:39.000000000 +0100
+++ linux-2.4.22/drivers/ide/ide-probe.c 2003-11-23 23:05:18.000000000 +0100
@@ -1416,22 +1416,30 @@
#ifdef MODULE
extern int (*ide_xlate_1024_hook)(kdev_t, int, int, const char *);
-int init_module (void)
+static int ideprobe_done = 0;
+
+int ideprobe_init_module (void)
{
unsigned int index;
+
+ if (ideprobe_done)
+ return -EBUSY;
for (index = 0; index < MAX_HWIFS; ++index)
ide_unregister(index);
ideprobe_init();
create_proc_ide_interfaces();
ide_xlate_1024_hook = ide_xlate_1024;
+ ideprobe_done++;
return 0;
}
-void cleanup_module (void)
+void ideprobe_cleanup_module (void)
{
ide_probe = NULL;
ide_xlate_1024_hook = 0;
}
+EXPORT_SYMBOL(ideprobe_init_module);
+EXPORT_SYMBOL(ideprobe_cleanup_module);
MODULE_LICENSE("GPL");
#endif /* MODULE */
diff -urN linux-2.4.22.org/drivers/ide/ide-probe-mini.c linux-2.4.22/drivers/ide/ide-probe-mini.c
--- linux-2.4.22.org/drivers/ide/ide-probe-mini.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.4.22/drivers/ide/ide-probe-mini.c 2003-11-23 23:08:21.000000000 +0100
@@ -0,0 +1,29 @@
+/*
+ * linux/drivers/ide/ide-probe-mini.c Version 1
+ *
+ * Copyright (C) 1994-1998 Linus Torvalds & authors (see below)
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <linux/kmod.h>
+
+#ifdef MODULE
+extern int ideprobe_init_module(void);
+
+int init_module (void)
+{
+ return ideprobe_init_module();
+}
+
+extern void ideprobe_cleanup_module(void);
+
+void cleanup_module (void)
+{
+ ideprobe_cleanup_module();
+}
+MODULE_LICENSE("GPL");
+#endif /* MODULE */
diff -urN linux-2.4.22.org/drivers/ide/Makefile linux-2.4.22/drivers/ide/Makefile
--- linux-2.4.22.org/drivers/ide/Makefile 2003-11-23 23:01:39.000000000 +0100
+++ linux-2.4.22/drivers/ide/Makefile 2003-11-23 23:02:29.000000000 +0100
@@ -9,7 +9,7 @@
#
-export-objs := ide-iops.o ide-taskfile.o ide-proc.o ide.o ide-probe.o ide-dma.o ide-lib.o setup-pci.o ide-io.o ide-disk.o
+export-objs := ide-iops.o ide-taskfile.o ide-proc.o ide.o ide-probe.o ide-probe-mini.o ide-dma.o ide-lib.o setup-pci.o ide-io.o ide-disk.o
all-subdirs := arm legacy pci ppc raid
mod-subdirs := arm legacy pci ppc raid
@@ -28,9 +28,8 @@
# Core IDE code - must come before legacy
-ide-core-objs := ide-iops.o ide-taskfile.o ide.o ide-lib.o ide-io.o ide-default.o ide-proc.o
-ide-detect-objs := ide-probe.o ide-geometry.o
-
+ide-core-objs := ide-iops.o ide-taskfile.o ide.o ide-lib.o ide-io.o ide-default.o ide-proc.o ide-probe.o ide-geometry.o
+ide-detect-objs := ide-probe-mini.o
ifeq ($(CONFIG_BLK_DEV_IDEPCI),y)
ide-core-objs += setup-pci.o
--
Arkadiusz Mi?kiewicz CS at FoE, Wroclaw University of Technology
arekm.pld-linux.org AM2-6BONE, 1024/3DB19BBD, arekm(at)ircnet, PLD/Linux
> > Hmm, actually you are right. Sorry :-).
>
> So mind you or Alan write a patch for me, please?
If I have time. I can't guarantee that.
If you do pull the hotplug out instead, remember to carefully reverse
the relevant PPC changes too or you'll break all the PPC spin up stuff
> Also probably most of #includes from ide-probe-mini.c could be removed, too.
>
> ps. is there some magic way to avoid need of extern int ideprobe_init_module(void); etc
> in ide-probe-mini.c?
Other than pushing them into a header file, not really.
Looks good.