modular IDE for 2.6.1 ugly but working fix
PATCH 1/1 modular IDE for 2.6.1 ugly but working fix
Here it goes - modular 2.6 IDE - I know it's ugly (and I don't know whether it will work with cmd640 chipset) but it's working for me and several other people.
Signature · 3 lines
Witold Kręcicki (adasi) adasi [at] culm.net GPG key: 7AE20871 http://www.culm.net
drivers/block/ll_rw_blk.c +1 -1
@@ -145,7 +145,7 @@ q->activity_fn = fn; q->activity_data = data; } - +EXPORT_SYMBOL (blk_queue_activity_fn);/** * blk_queue_prep_rq - set a prepare_request function for queue * @q: queue
drivers/ide/ide-probe.c +1 -17
@@ -1354,21 +1354,5 @@return 0 ; } -#ifdef MODULE -int init_module (void ) -{ -unsigned int index; - -for (index =0 ; index <MAX_HWIFS ; ++index) -ide_unregister (index); -ideprobe_init (); -create_proc_ide_interfaces (); -return 0 ; -} -void cleanup_module (void ) -{ - ide_probe =NULL ; -} -MODULE_LICENSE ("GPL" ); -#endif /* MODULE */ +EXPORT_SYMBOL (ideprobe_init);
drivers/ide/ide-probe-mod.c +42 -0
42 lines not on this page · raw message
drivers/ide/Makefile +13 -6
@@ -12,19 +12,26 @@ # Core IDE code - must come before legacy -obj-$(CONFIG_BLK_DEV_IDE) += ide-io.o ide-probe.o ide-iops.o ide-taskfile.o ide.o ide-lib.o ide-default.o +obj-$(CONFIG_BLK_DEV_IDE) += ide-mod.o obj-$(CONFIG_BLK_DEV_IDEDISK) += ide-disk.o obj-$(CONFIG_BLK_DEV_IDECD) += ide-cd.o obj-$(CONFIG_BLK_DEV_IDETAPE) += ide-tape.o obj-$(CONFIG_BLK_DEV_IDEFLOPPY) += ide-floppy.o -obj-$(CONFIG_BLK_DEV_IDEPCI) += setup-pci.o -obj-$(CONFIG_BLK_DEV_IDEDMA_PCI) += ide-dma.o -obj-$(CONFIG_BLK_DEV_IDE_TCQ) += ide-tcq.o -obj-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o + +ide-mod-y += ide.o ide-io.o ide-iops.o ide-taskfile.o ide-lib.o ide-default.o ide-probe.o +ide-mod-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.o +ide-mod-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o +ide-mod-$(CONFIG_BLK_DEV_IDEPCI) += setup-pci.o +ide-mod-$(CONFIG_BLK_DEV_IDEDMA_PCI) += ide-dma.o +ide-mod-$(CONFIG_BLK_DEV_IDE_TCQ) += ide-tcq.o ifeq ($(CONFIG_BLK_DEV_IDE),y) -obj-$(CONFIG_PROC_FS) += ide-proc.o +ide-mod-$(CONFIG_PROC_FS) += ide-proc.o +endif + +ifeq ($(CONFIG_BLK_DEV_IDE),m) +ide-mod-$(CONFIG_PROC_FS) += ide-proc.o endif obj-$(CONFIG_BLK_DEV_IDE) += legacy/ ppc/ arm/
drivers/ide/pci/Makefile +0 -1
@@ -4,7 +4,6 @@ obj-$(CONFIG_BLK_DEV_ALI15X3) += alim15x3.o obj-$(CONFIG_BLK_DEV_AMD74XX) += amd74xx.o -obj-$(CONFIG_BLK_DEV_CMD640) += cmd640.o obj-$(CONFIG_BLK_DEV_CMD64X) += cmd64x.o obj-$(CONFIG_BLK_DEV_CS5520) += cs5520.o obj-$(CONFIG_BLK_DEV_CS5530) += cs5530.o obj-$(CONFIG_BLK_DEV_SC1200) += sc1200.o
PATCH 1/1 fix/improve modular IDE (Re: [PATCH] modular IDE for 2.6.1 ugly but working fix)
Hi,
Quoted 3 lines · Witold Krecicki
Here it goes - modular 2.6 IDE - I know it's ugly (and I don't know whether it will work with cmd640 chipset) but it's working for me and several other people.
It will probably work for cmd640 but won't for all other drivers which can't be build as modules. What about this patch instead? I've been working on it from some time and I think all cornercases are covered.
Cheers,
--bart
- IDE can be used as module again (compiles and works)
- separate module for probing is no longer required
- generic/default host driver is available as ide_generic module
linux-2.6.1-root/drivers/block/ll_rw_blk.c | 2 + linux-2.6.1-root/drivers/ide/Kconfig | 6 +++ linux-2.6.1-root/drivers/ide/Makefile | 39 ++++++++++++++++------ linux-2.6.1-root/drivers/ide/ide-generic.c | 37 +++++++++++++++++++++ linux-2.6.1-root/drivers/ide/ide-probe.c | 23 ------------- linux-2.6.1-root/drivers/ide/ide.c | 46 +++------------------------ linux-2.6.1-root/drivers/ide/legacy/Makefile | 8 ---- linux-2.6.1-root/drivers/ide/pci/Makefile | 1 linux-2.6.1-root/include/linux/ide.h | 1 linux-2.6.1/drivers/ide/ppc/Makefile | 6 --- 10 files changed, 80 insertions(+), 89 deletions(-)
drivers/block/ll_rw_blk.c renamed from drivers/block/ll_rw_blk.c~modular-ide-fix +2 -0
@@ -145,6 +145,8 @@ void blk_queue_activity_fn(request_queue q->activity_data = data; } +EXPORT_SYMBOL (blk_queue_activity_fn); +/** * blk_queue_prep_rq - set a prepare_request function for queue * @q: queue
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +28 -11
@@ -10,22 +10,39 @@ # First come modules that register themselves with the core obj-$(CONFIG_BLK_DEV_IDE) += pci/ +ide-core-objs += ide.o ide-default.o ide-io.o ide-iops.o ide-lib.o \ + ide-probe.o ide-taskfile.o + +ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.o + # Core IDE code - must come before legacy +ide-core-$(CONFIG_BLK_DEV_IDEPCI) += setup-pci.o +ide-core-$(CONFIG_BLK_DEV_IDEDMA_PCI) += ide-dma.o +ide-core-$(CONFIG_BLK_DEV_IDE_TCQ) += ide-tcq.o +ide-core-$(CONFIG_PROC_FS) += ide-proc.o +ide-core-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o + +# built-in only drivers from legacy/ +ide-core-$(CONFIG_BLK_DEV_IDE_PC9800) += pc9800.o +ide-core-$(CONFIG_BLK_DEV_PDC4030) += pdc4030.o +ide-core-$(CONFIG_BLK_DEV_BUDDHA) += buddha.o +ide-core-$(CONFIG_BLK_DEV_FALCON_IDE) += falconide.o +ide-core-$(CONFIG_BLK_DEV_GAYLE) += gayle.o +ide-core-$(CONFIG_BLK_DEV_MAC_IDE) += macide.o +ide-core-$(CONFIG_BLK_DEV_Q40IDE) += q40ide.o + +# built-in only drivers from ppc/ +ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE) += mpc8xx.o +ide-core-$(CONFIG_BLK_DEV_IDE_PMAC) += pmac.o +ide-core-$(CONFIG_BLK_DEV_IDE_SWARM) += swarm.o + +obj-$(CONFIG_BLK_DEV_IDE) += ide-core.o +obj-$(CONFIG_IDE_GENERIC) += ide-generic.o -obj-$(CONFIG_BLK_DEV_IDE) += ide-io.o ide-probe.o ide-iops.o ide-taskfile.o ide.o ide-lib.o ide-default.o obj-$(CONFIG_BLK_DEV_IDEDISK) += ide-disk.o obj-$(CONFIG_BLK_DEV_IDECD) += ide-cd.o obj-$(CONFIG_BLK_DEV_IDETAPE) += ide-tape.o obj-$(CONFIG_BLK_DEV_IDEFLOPPY) += ide-floppy.o -obj-$(CONFIG_BLK_DEV_IDEPCI) += setup-pci.o -obj-$(CONFIG_BLK_DEV_IDEDMA_PCI) += ide-dma.o -obj-$(CONFIG_BLK_DEV_IDE_TCQ) += ide-tcq.o -obj-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o - -ifeq ($(CONFIG_BLK_DEV_IDE),y) -obj-$(CONFIG_PROC_FS) += ide-proc.o -endif - -obj-$(CONFIG_BLK_DEV_IDE) += legacy/ ppc/ arm/ +obj-$(CONFIG_BLK_DEV_IDE) += legacy/ arm/ obj-$(CONFIG_BLK_DEV_HD) += legacy/
drivers/ide/legacy/Makefile renamed from drivers/ide/legacy/Makefile~modular-ide-fix +0 -8
@@ -2,17 +2,9 @@ obj-$(CONFIG_BLK_DEV_ALI14XX) += ali14xx.o obj-$(CONFIG_BLK_DEV_DTC2278) += dtc2278.o obj-$(CONFIG_BLK_DEV_HT6560B) += ht6560b.o -obj-$(CONFIG_BLK_DEV_IDE_PC9800) += pc9800.o -obj-$(CONFIG_BLK_DEV_PDC4030) += pdc4030.o obj-$(CONFIG_BLK_DEV_QD65XX) += qd65xx.o obj-$(CONFIG_BLK_DEV_UMC8672) += umc8672.o -obj-$(CONFIG_BLK_DEV_BUDDHA) += buddha.o -obj-$(CONFIG_BLK_DEV_FALCON_IDE) += falconide.o -obj-$(CONFIG_BLK_DEV_GAYLE) += gayle.o -obj-$(CONFIG_BLK_DEV_MAC_IDE) += macide.o -obj-$(CONFIG_BLK_DEV_Q40IDE) += q40ide.o - obj-$(CONFIG_BLK_DEV_IDECS) += ide-cs.o # Last of all
drivers/ide/pci/Makefile renamed from drivers/ide/pci/Makefile~modular-ide-fix +0 -1
@@ -3,7 +3,6 @@ obj-$(CONFIG_BLK_DEV_ADMA100) += adma10 obj-$(CONFIG_BLK_DEV_AEC62XX) += aec62xx.o obj-$(CONFIG_BLK_DEV_ALI15X3) += alim15x3.o obj-$(CONFIG_BLK_DEV_AMD74XX) += amd74xx.o -obj-$(CONFIG_BLK_DEV_CMD640) += cmd640.o obj-$(CONFIG_BLK_DEV_CMD64X) += cmd64x.o obj-$(CONFIG_BLK_DEV_CS5520) += cs5520.o obj-$(CONFIG_BLK_DEV_CS5530) += cs5530.o
drivers/ide/ppc/Makefile deleted +0 -6
@@ -1,6 +0,0 @@ - -obj-$(CONFIG_BLK_DEV_MPC8xx_IDE) += mpc8xx.o -obj-$(CONFIG_BLK_DEV_IDE_PMAC) += pmac.o -obj-$(CONFIG_BLK_DEV_IDE_SWARM) += swarm.o - -EXTRA_CFLAGS := -Idrivers/ide
drivers/ide/Kconfig renamed from drivers/ide/Kconfig~modular-ide-fix +6 -0
@@ -296,6 +296,12 @@ config IDE_TASKFILE_IO comment "IDE chipset support/bugfixes" +config IDE_GENERIC + tristate "generic/default IDE chipset support" + default y + help + If unsure, say Y. + config BLK_DEV_CMD640 bool "CMD640 chipset bugfix/support" depends on X86
drivers/ide/ide.c renamed from drivers/ide/ide.c~modular-ide-fix +6 -40
78 lines not on this page · raw message
drivers/ide/ide-generic.c new file +37 -0
@@ -0,0 +1,37 @@ + +/* +* generic/default IDE host driver +* +* Copyright (C) 2004 Bartlomiej Zolnierkiewicz +*/ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/module.h> +#include <linux/ide.h> + +static int __init ide_generic_init (void ) +{ +MOD_INC_USE_COUNT ; +if (ide_hwifs[0 ].io_ports[IDE_DATA_OFFSET ]) +ide_get_lock (NULL ,NULL );/* for atari only */ + + (void )ideprobe_init (); + +if (ide_hwifs[0 ].io_ports[IDE_DATA_OFFSET ]) +ide_release_lock ();/* for atari only */ + +#ifdef CONFIG_PROC_FS +create_proc_ide_interfaces (); +#endif +return 0 ; +} + +static void __exit ide_generic_exit(void) +{ +} + +module_init (ide_generic_init); +module_exit (ide_generic_exit); + +MODULE_LICENSE ("GPL" );
drivers/ide/ide-probe.c renamed from drivers/ide/ide-probe.c~modular-ide-fix +1 -22
@@ -1323,7 +1323,6 @@ int ideprobe_init (void)unsigned int index;int probe[MAX_HWIFS ]; -MOD_INC_USE_COUNT ;memset (probe,0 ,MAX_HWIFS *sizeof (int ));for (index =0 ; index <MAX_HWIFS ; ++index) probe[index] = !ide_hwifs[index].present;
@@ -1348,27 +1347,7 @@ int ideprobe_init (void)ata_attach (&hwif->drives[unit]); } } -if (!ide_probe) - ide_probe = &ideprobe_init; -MOD_DEC_USE_COUNT ;return 0 ; } -#ifdef MODULE -int init_module (void ) -{ -unsigned int index; - -for (index =0 ; index <MAX_HWIFS ; ++index) -ide_unregister (index); -ideprobe_init (); -create_proc_ide_interfaces (); -return 0 ; -} - -void cleanup_module (void ) -{ - ide_probe =NULL ; -} -MODULE_LICENSE ("GPL" ); -#endif /* MODULE */ +EXPORT_SYMBOL_GPL (ideprobe_init);
include/linux/ide.h renamed from include/linux/ide.h~modular-ide-fix +0 -1
@@ -1231,7 +1231,6 @@ typedef struct ide_devices_s {*/ #ifndef _IDE_Cextern ide_hwif_t ide_hwifs[];/* master data repository */ -extern int (*ide_probe)(void );extern ide_devices_t *idedisk;extern ide_devices_t *idecd;
_
Re: [PATCH] fix/improve modular IDE (Re: [PATCH] modular IDE for 2.6.1 ugly but working fix)
drivers/ide/Makefile line 14
Quoted 3 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ide-core-objs += ide.o ide-default.o ide-io.o ide-iops.o ide-lib.o \ + ide-probe.o ide-taskfile.o
It would be more consistent to use "ide-core-y" since this is what the following lines are expanded to.
drivers/ide/Makefile line 16
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ +ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.o
Like this line.
Sam
Re: [PATCH] fix/improve modular IDE (Re: [PATCH] modular IDE for 2.6.1 ugly but working fix)
Quoted 10 lines · Sam Ravnborg
drivers/ide/Makefile line 14
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ide-core-objs += ide.o ide-default.o ide-io.o ide-iops.o ide-lib.o \ + ide-probe.o ide-taskfile.oIt would be more consistent to use "ide-core-y" since this is what the following lines are expanded to.
drivers/ide/Makefile line 16
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ +ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.oLike this line.
Yep, thanks!
Re: [PATCH] fix/improve modular IDE (Re: [PATCH] modular IDE for 2.6.1 ugly but working fix)
Quoted 7 lines · Bartlomiej Zolnierkiewicz
Quoted 6 lines · Sam Ravnborg
drivers/ide/Makefile line 14
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ide-core-objs += ide.o ide-default.o ide-io.o ide-iops.o ide-lib.o \ + ide-probe.o ide-taskfile.oIt would be more consistent to use "ide-core-y" since this is what the following lines are expanded to.
Quoted 6 lines
Quoted 4 lines
drivers/ide/Makefile line 16
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ +ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.oLike this line.
Yep, thanks!
Could you send updated patch so we could test it?
Also would be nice if ide-detect name was used instead of ide-generic so it will be consistent with 2.4 naming.
ps. patch by Witold Krecicki works for other drivers - I've seen it working - but it's hacky anyway.
Signature · 2 lines
Arkadiusz Miśkiewicz CS at FoE, Wroclaw University of Technology arekm.pld-linux.org AM2-6BONE, 1024/3DB19BBD, arekm(at)ircnet, PLD/Linux
Re: [PATCH] fix/improve modular IDE (Re: [PATCH] modular IDE for 2.6.1 ugly but working fix)
Quoted 8 lines · Arkadiusz Miskiewicz
Dnia sob 17. stycznia 2004 17:02, Bartlomiej Zolnierkiewicz napisa?:
Quoted 7 lines · Sam Ravnborg
Quoted 6 lines
drivers/ide/Makefile line 14
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ide-core-objs += ide.o ide-default.o ide-io.o ide-iops.o ide-lib.o \ + ide-probe.o ide-taskfile.oIt would be more consistent to use "ide-core-y" since this is what the following lines are expanded to.
Quoted 7 lines
Quoted 6 lines
Quoted 4 lines
drivers/ide/Makefile line 16
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ +ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.oLike this line.
Yep, thanks!
Could you send updated patch so we could test it?
The change I requested is cosmetic only. It may have a small impact on link-order, but that would not make a difference in this case.
Sam
Re: [PATCH] fix/improve modular IDE (Re: [PATCH] modular IDE for 2.6.1 ugly but working fix)
In reply to Arkadiusz MiskiewiczQuoted 13 lines · Arkadiusz Miskiewicz
Quoted 12 lines · Bartlomiej Zolnierkiewicz
Quoted 10 lines · Sam Ravnborg
drivers/ide/Makefile line 14
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ide-core-objs += ide.o ide-default.o ide-io.o ide-iops.o ide-lib.o \ + ide-probe.o ide-taskfile.oIt would be more consistent to use "ide-core-y" since this is what the following lines are expanded to.
drivers/ide/Makefile line 16
Quoted 2 lines
drivers/ide/Makefile renamed from drivers/ide/Makefile~modular-ide-fix +2
-0+ +ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.oLike this line.
Quoted 6 lines
Quoted 1 line
Yep, thanks!
Could you send updated patch so we could test it?
Also would be nice if ide-detect name was used instead of ide-generic so it will be consistent with 2.4 naming.
ide-detect != ide-generic
In 2.4 you have to load ide-detect after loading chipset module. In 2.6+patch you don't have to load anything after loading chipset module.
ide-detect is used for all chipset modules to probe for drives. ide-generic is generic/default host driver - you use it only if you don't have specific modules for your IDE chipsets.
Quoted 2 lines
ps. patch by Witold Krecicki works for other drivers - I've seen it working
- but it's hacky anyway.
Sure, it works for other *PCI* drivers, but not ie. PPC ones (easy to fix).
--bart
Re: [PATCH] fix/improve modular IDE (Re: [PATCH] modular IDE for 2.6.1 ugly but working fix)
In reply to Bartlomiej ZolnierkiewiczIn message <[email protected]> you write:
Quoted 10 lines
drivers/ide/ide-generic.c new file +10
-0+static int __init ide_generic_init (void ) +{ +MOD_INC_USE_COUNT ; +if (ide_hwifs[0 ].io_ports[IDE_DATA_OFFSET ]) +ide_get_lock (NULL ,NULL );/* for atari only */ + + (void )ideprobe_init (); + +if (ide_hwifs[0 ].io_ports[IDE_DATA_OFFSET ]) +ide_release_lock ();/* for atari only */
drivers/ide/ide-generic.c line 32
Quoted 10 lines
drivers/ide/ide-generic.c new file +10
-0+ +#ifdef CONFIG_PROC_FS +create_proc_ide_interfaces (); +#endif +return 0 ; +} + +static void __exit ide_generic_exit(void) +{ +}
If you don't want to be unloadable, just don't have a module_exit() at all.
Thanks,
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
Re: [PATCH] fix/improve modular IDE (Re: [PATCH] modular IDE for 2.6.1 ugly but working fix)
Quoted 16 lines · Rusty Russell
In message <[email protected]> you write:
Quoted 15 lines
drivers/ide/ide-generic.c new file +15
-0+static int __init ide_generic_init (void ) +{ +MOD_INC_USE_COUNT ; +if (ide_hwifs[0 ].io_ports[IDE_DATA_OFFSET ]) +ide_get_lock (NULL ,NULL );/* for atari only */ + + (void )ideprobe_init (); + +if (ide_hwifs[0 ].io_ports[IDE_DATA_OFFSET ]) +ide_release_lock ();/* for atari only */ + +#ifdef CONFIG_PROC_FS +create_proc_ide_interfaces (); +#endif +return 0 ;
Quoted 8 lines
drivers/ide/ide-generic.c line 32
Quoted 5 lines
drivers/ide/ide-generic.c new file +5
-0+} + +static void __exit ide_generic_exit(void) +{ +}If you don't want to be unloadable, just don't have a
module_exit()at all.
Ok, I will update it later. Thanks for a hint!
--bart