mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] fix/improve modular IDE (-mm)
@ 2004-01-18 23:41 Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; only message in thread
From: Bartlomiej Zolnierkiewicz @ 2004-01-18 23:41 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel


Hi,

Please add this patch to -mm and remove modular-ide-is-broken.patch.

Thanks,
--bart

- IDE can be used as module again (compiles and works),
  this fixes bugzilla bugs #576 and #1700
- 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   |   36 +++++++++++++++++++
 linux-2.6.1-root/drivers/ide/ide-probe.c     |   25 +------------
 linux-2.6.1-root/drivers/ide/ide.c           |   49 +++------------------------
 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(+), 93 deletions(-)

diff -puN drivers/block/ll_rw_blk.c~modular-ide-fix drivers/block/ll_rw_blk.c
--- linux-2.6.1/drivers/block/ll_rw_blk.c~modular-ide-fix	2004-01-18 20:45:38.984746320 +0100
+++ linux-2.6.1-root/drivers/block/ll_rw_blk.c	2004-01-18 20:45:39.026739936 +0100
@@ -146,6 +146,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
diff -puN drivers/ide/Makefile~modular-ide-fix drivers/ide/Makefile
--- linux-2.6.1/drivers/ide/Makefile~modular-ide-fix	2004-01-18 20:45:38.990745408 +0100
+++ linux-2.6.1-root/drivers/ide/Makefile	2004-01-18 20:50:48.661668272 +0100
@@ -10,22 +10,39 @@
 # First come modules that register themselves with the core
 obj-$(CONFIG_BLK_DEV_IDE)		+= pci/
 
+ide-core-y += 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/
diff -puN drivers/ide/legacy/Makefile~modular-ide-fix drivers/ide/legacy/Makefile
--- linux-2.6.1/drivers/ide/legacy/Makefile~modular-ide-fix	2004-01-18 20:45:38.993744952 +0100
+++ linux-2.6.1-root/drivers/ide/legacy/Makefile	2004-01-18 20:45:39.028739632 +0100
@@ -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
diff -puN drivers/ide/pci/Makefile~modular-ide-fix drivers/ide/pci/Makefile
--- linux-2.6.1/drivers/ide/pci/Makefile~modular-ide-fix	2004-01-18 20:45:38.997744344 +0100
+++ linux-2.6.1-root/drivers/ide/pci/Makefile	2004-01-18 20:45:39.029739480 +0100
@@ -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
diff -puN -L drivers/ide/ppc/Makefile drivers/ide/ppc/Makefile~modular-ide-fix /dev/null
--- linux-2.6.1/drivers/ide/ppc/Makefile
+++ /dev/null	2004-01-17 00:25:55.000000000 +0100
@@ -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
diff -puN drivers/ide/Kconfig~modular-ide-fix drivers/ide/Kconfig
--- linux-2.6.1/drivers/ide/Kconfig~modular-ide-fix	2004-01-18 20:45:39.004743280 +0100
+++ linux-2.6.1-root/drivers/ide/Kconfig	2004-01-18 20:45:39.031739176 +0100
@@ -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
diff -puN drivers/ide/ide.c~modular-ide-fix drivers/ide/ide.c
--- linux-2.6.1/drivers/ide/ide.c~modular-ide-fix	2004-01-18 20:45:39.007742824 +0100
+++ linux-2.6.1-root/drivers/ide/ide.c	2004-01-18 21:01:11.762942480 +0100
@@ -153,7 +153,6 @@
 #include <linux/cdrom.h>
 #include <linux/seq_file.h>
 #include <linux/device.h>
-#include <linux/kmod.h>
 
 #include <asm/byteorder.h>
 #include <asm/irq.h>
@@ -191,8 +190,6 @@ int noautodma = 1;
 EXPORT_SYMBOL(noautodma);
 EXPORT_SYMBOL(ide_bus_type);
 
-int (*ide_probe)(void);
-
 /*
  * This is declared extern in ide.h, for access by other IDE modules:
  */
@@ -443,21 +440,6 @@ u8 ide_dump_status (ide_drive_t *drive, 
 
 EXPORT_SYMBOL(ide_dump_status);
 
-
-
-void ide_probe_module (void)
-{
-	if (!ide_probe) {
-#if defined(CONFIG_KMOD) && defined(CONFIG_BLK_DEV_IDE_MODULE)
-		(void) request_module("ide-probe-mod");
-#endif /* (CONFIG_KMOD) && (CONFIG_BLK_DEV_IDE_MODULE) */
-	} else {
-		(void)ide_probe();
-	}
-}
-
-EXPORT_SYMBOL(ide_probe_module);
-
 static int ide_open (struct inode * inode, struct file * filp)
 {
 	return -ENXIO;
@@ -1033,7 +1015,7 @@ found:
 	hwif->chipset = hw->chipset;
 
 	if (!initializing) {
-		ide_probe_module();
+		probe_hwif_init(hwif);
 #ifdef CONFIG_PROC_FS
 		create_proc_ide_interfaces();
 #endif
@@ -2282,28 +2264,6 @@ static void __init probe_for_hwifs (void
 #endif /* CONFIG_BLK_DEV_IDEPNP */
 }
 
-void __init ide_init_builtin_drivers (void)
-{
-	/*
-	 * Probe for special PCI and other "known" interface chipsets
-	 */
-	probe_for_hwifs ();
-
-#ifdef CONFIG_BLK_DEV_IDE
-	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 */
-#endif /* CONFIG_BLK_DEV_IDE */
-
-#ifdef CONFIG_PROC_FS
-	proc_ide_create();
-#endif
-}
-
 /*
  *	Actually unregister the subdriver. Called with the
  *	request lock dropped.
@@ -2564,7 +2524,6 @@ EXPORT_SYMBOL(ide_fops);
  */
 
 EXPORT_SYMBOL(ide_lock);
-EXPORT_SYMBOL(ide_probe);
 
 struct bus_type ide_bus_type = {
 	.name		= "ide",
@@ -2607,9 +2566,13 @@ int __init ide_init (void)
 #endif
 
 	initializing = 1;
-	ide_init_builtin_drivers();
+	/* Probe for special PCI and other "known" interface chipsets. */
+	probe_for_hwifs();
 	initializing = 0;
 
+#ifdef CONFIG_PROC_FS
+	proc_ide_create();
+#endif
 	return 0;
 }
 
diff -puN /dev/null drivers/ide/ide-generic.c
--- /dev/null	2004-01-17 00:25:55.000000000 +0100
+++ linux-2.6.1-root/drivers/ide/ide-generic.c	2004-01-18 21:20:33.301361800 +0100
@@ -0,0 +1,36 @@
+/*
+ * 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");
diff -puN drivers/ide/ide-probe.c~modular-ide-fix drivers/ide/ide-probe.c
--- linux-2.6.1/drivers/ide/ide-probe.c~modular-ide-fix	2004-01-18 20:45:39.012742064 +0100
+++ linux-2.6.1-root/drivers/ide/ide-probe.c	2004-01-18 21:16:19.570934688 +0100
@@ -1322,8 +1322,7 @@ 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;
@@ -1350,27 +1349,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);
diff -puN include/linux/ide.h~modular-ide-fix include/linux/ide.h
--- linux-2.6.1/include/linux/ide.h~modular-ide-fix	2004-01-18 20:45:39.019741000 +0100
+++ linux-2.6.1-root/include/linux/ide.h	2004-01-18 20:45:39.044737200 +0100
@@ -1231,7 +1231,6 @@ typedef struct ide_devices_s {
  */
 #ifndef _IDE_C
 extern	ide_hwif_t	ide_hwifs[];		/* master data repository */
-extern int (*ide_probe)(void);
 
 extern ide_devices_t   *idedisk;
 extern ide_devices_t   *idecd;

_


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-01-18 23:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-18 23:41 [PATCH] fix/improve modular IDE (-mm) Bartlomiej Zolnierkiewicz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®