All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: Andi Kleen <ak@suse.de>
Cc: linux-ide@vger.kernel.org
Subject: Re: [PATCH] Add a global ide=off switch for drivers/ide
Date: Thu, 25 Oct 2007 23:07:23 +0200	[thread overview]
Message-ID: <200710252307.23323.bzolnier@gmail.com> (raw)
In-Reply-To: <200710151243.48577.ak@suse.de>


Hi Andi,

Sorry for the delay (the last week was a bit hectic).

On Monday 15 October 2007, Andi Kleen wrote:
> 
> Had a situation where drivers/ide was compiled in, but I wanted to turn 
> it off to let the drivers/ata drivers take over. I ended up using ide*=noprobe,
> but that was somewhat clumpsy because I wasn't sure how many IDE interfaces
> the machine really had.
> 
> Add a global ide=off switch to handle this situation better.

Overall looks OK but I think we should limit it to IDE built-in case
(when IDE is modular it is all up to the user-space anyway).

> The patch is a little bigger because I tried to cover all modules.

A few still needs to be covered:
- drivers/scsi/ide-scsi.c (other directory)
- drivers/ide/legacy/ide_platform.c (new driver)
- drivers/ide/legacy/ide-cs.c (late_initcall)
- drivers/ide/pci/sgiioc4.c (ditto, not a SFF-PCI driver)

> I'm also not 100% sure ENODEV is the right error return for this 
> case, but I didn't come up with a better one.

-EPERM?  IMO it would be more appropriate (and easy to distinguish
from the "real" -ENODEV).

> The ARM/MIPS part is uncompiled.
> 
> Signed-off-by: Andi Kleen <ak@suse.de>
> 
> Index: linux-2.6.23-rc8-misc/drivers/ide/ide.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/ide.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/ide.c
> @@ -91,6 +91,9 @@ static const u8 ide_hwif_to_major[] = { 
>  static int idebus_parameter;	/* holds the "idebus=" parameter */
>  static int system_bus_speed;	/* holds what we think is VESA/PCI bus speed */
>  
> +int ide_off;
> +EXPORT_SYMBOL(ide_off);
> +

_GPL?

Please cover it with #ifdef/#endif CONFIG_BLK_DEV_IDE as it should be
valid only when IDE is built-in.

>  DEFINE_MUTEX(ide_cfg_mtx);
>   __cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock);
>  
> @@ -1249,6 +1252,13 @@ static int __init ide_setup(char *s)
>  		return 0;
>  
>  	printk(KERN_INFO "ide_setup: %s", s);
> +
> +	if (!strcmp(s, "ide=off")) {
> +		printk(" : IDE disabled\n");
> +		ide_off = 1;
> +		return 1;
> +	}
> +

ditto

>  	init_ide_data ();
>  
>  #ifdef CONFIG_BLK_DEV_IDEDOUBLER
> @@ -1717,6 +1727,9 @@ static int __init ide_init(void)
>  {
>  	int ret;
>  
> +	if (ide_off)
> +		return -ENODEV;
> +

ditto

>  	printk(KERN_INFO "Uniform Multi-Platform E-IDE driver " REVISION "\n");
>  	system_bus_speed = ide_system_bus_speed();
>  
> Index: linux-2.6.23-rc8-misc/drivers/ide/setup-pci.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/setup-pci.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/setup-pci.c
> @@ -793,6 +793,8 @@ static LIST_HEAD(ide_pci_drivers);
>  int __ide_pci_register_driver(struct pci_driver *driver, struct module *module,
>  			      const char *mod_name)
>  {
> +	if (ide_off)
> +		return -ENODEV;

No #ifdef/#endif CONFIG_BLK_DEV_IDE needed because all this code is under
IDEPCI_PCIBUS_ORDER #ifdef/#endif (which depends on BLK_DEV_IDE=y).

[ This also means that in the current form patch doesn't cover SFF-PCI
  host drivers when IDE is not built-in. ]

>  	if(!pre_init)
>  		return __pci_register_driver(driver, module, mod_name);
>  	driver->driver.owner = module;
> Index: linux-2.6.23-rc8-misc/include/linux/ide.h
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/include/linux/ide.h
> +++ linux-2.6.23-rc8-misc/include/linux/ide.h
> @@ -871,6 +871,8 @@ typedef struct ide_driver_s ide_driver_t
>  
>  extern struct mutex ide_setting_mtx;
>  
> +extern int ide_off;
> +

Please add "ide_is_off()" [ or choose some other fancy name :) ] static inline
which returns ide_off if CONFIG_BLK_DEV_IDE is defined and zero otherwise.

This way we don't pollute device/host drivers with CONFIG_BLK_DEV_IDE #ifdefs.

>  int set_io_32bit(ide_drive_t *, int);
>  int set_pio_mode(ide_drive_t *, int);
>  int set_using_dma(ide_drive_t *, int);
> Index: linux-2.6.23-rc8-misc/drivers/ide/arm/bast-ide.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/arm/bast-ide.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/arm/bast-ide.c
> @@ -52,6 +52,9 @@ bastide_register(unsigned int base, unsi
>  
>  static int __init bastide_init(void)
>  {
> +	if (ide_off)

"ide_is_off()"

same for all the drivers below

> +		return -ENODEV;
> +
>  	/* we can treat the VR1000 and the BAST the same */
>  
>  	if (!(machine_is_bast() || machine_is_vr1000()))
> Index: linux-2.6.23-rc8-misc/drivers/ide/arm/icside.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/arm/icside.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/arm/icside.c
> @@ -824,6 +824,8 @@ static struct ecard_driver icside_driver
>  
>  static int __init icside_init(void)
>  {
> +	if (ide_off)
> +		return -ENODEV;
>  	return ecard_register_driver(&icside_driver);
>  }
>  
> Index: linux-2.6.23-rc8-misc/drivers/ide/arm/rapide.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/arm/rapide.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/arm/rapide.c
> @@ -113,6 +113,8 @@ static struct ecard_driver rapide_driver
>  
>  static int __init rapide_init(void)
>  {
> +	if (ide_off)
> +		return -ENODEV;
>  	return ecard_register_driver(&rapide_driver);
>  }
>  
> Index: linux-2.6.23-rc8-misc/drivers/ide/ide-cd.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/ide-cd.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/ide-cd.c
> @@ -3568,6 +3568,8 @@ static void __exit ide_cdrom_exit(void)
>  
>  static int __init ide_cdrom_init(void)
>  {
> +	if (ide_off)
> +		return -ENODEV;
>  	return driver_register(&ide_cdrom_driver.gen_driver);
>  }
>  
> Index: linux-2.6.23-rc8-misc/drivers/ide/ide-disk.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/ide-disk.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/ide-disk.c
> @@ -1329,6 +1329,8 @@ static void __exit idedisk_exit (void)
>  
>  static int __init idedisk_init(void)
>  {
> +	if (ide_off)
> +		return -ENODEV;
>  	return driver_register(&idedisk_driver.gen_driver);
>  }
>  
> Index: linux-2.6.23-rc8-misc/drivers/ide/ide-floppy.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/ide-floppy.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/ide-floppy.c
> @@ -2215,6 +2215,8 @@ static void __exit idefloppy_exit (void)
>  
>  static int __init idefloppy_init(void)
>  {
> +	if (ide_off)
> +		return -ENODEV;
>  	printk("ide-floppy driver " IDEFLOPPY_VERSION "\n");
>  	return driver_register(&idefloppy_driver.gen_driver);
>  }
> Index: linux-2.6.23-rc8-misc/drivers/ide/ide-generic.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/ide-generic.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/ide-generic.c
> @@ -14,6 +14,8 @@
>  
>  static int __init ide_generic_init(void)
>  {
> +	if (ide_off)
> +		return -ENODEV;
>  	if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
>  		ide_get_lock(NULL, NULL); /* for atari only */
>  
> Index: linux-2.6.23-rc8-misc/drivers/ide/ide-tape.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/ide-tape.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/ide-tape.c
> @@ -4914,6 +4914,8 @@ static void __exit idetape_exit (void)
>  static int __init idetape_init(void)
>  {
>  	int error = 1;
> +	if (ide_off)
> +		return -ENODEV;
>  	idetape_sysfs_class = class_create(THIS_MODULE, "ide_tape");
>  	if (IS_ERR(idetape_sysfs_class)) {
>  		idetape_sysfs_class = NULL;
> Index: linux-2.6.23-rc8-misc/drivers/ide/legacy/ali14xx.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/legacy/ali14xx.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/legacy/ali14xx.c
> @@ -238,7 +238,7 @@ MODULE_PARM_DESC(probe, "probe for ALI M
>  /* Can be called directly from ide.c. */
>  int __init ali14xx_init(void)
>  {
> -	if (probe_ali14xx == 0)
> +	if (probe_ali14xx == 0 || ide_off)
>  		goto out;
>  
>  	/* auto-detect IDE controller port */
> Index: linux-2.6.23-rc8-misc/drivers/ide/legacy/dtc2278.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/legacy/dtc2278.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/legacy/dtc2278.c
> @@ -153,7 +153,7 @@ MODULE_PARM_DESC(probe, "probe for DTC22
>  /* Can be called directly from ide.c. */
>  int __init dtc2278_init(void)
>  {
> -	if (probe_dtc2278 == 0)
> +	if (probe_dtc2278 == 0 || ide_off)
>  		return -ENODEV;
>  
>  	if (dtc2278_probe()) {
> Index: linux-2.6.23-rc8-misc/drivers/ide/legacy/ht6560b.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/legacy/ht6560b.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/legacy/ht6560b.c
> @@ -314,7 +314,7 @@ int __init ht6560b_init(void)
>  	ide_hwif_t *hwif, *mate;
>  	int t;
>  
> -	if (probe_ht6560b == 0)
> +	if (probe_ht6560b == 0 || ide_off)
>  		return -ENODEV;
>  
>  	hwif = &ide_hwifs[0];
> Index: linux-2.6.23-rc8-misc/drivers/ide/legacy/qd65xx.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/legacy/qd65xx.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/legacy/qd65xx.c
> @@ -497,7 +497,7 @@ MODULE_PARM_DESC(probe, "probe for QD65x
>  /* Can be called directly from ide.c. */
>  int __init qd65xx_init(void)
>  {
> -	if (probe_qd65xx == 0)
> +	if (probe_qd65xx == 0 || ide_off)
>  		return -ENODEV;
>  
>  	if (qd_probe(0x30))
> Index: linux-2.6.23-rc8-misc/drivers/ide/legacy/umc8672.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/legacy/umc8672.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/legacy/umc8672.c
> @@ -176,7 +176,7 @@ MODULE_PARM_DESC(probe, "probe for UMC86
>  /* Can be called directly from ide.c. */
>  int __init umc8672_init(void)
>  {
> -	if (probe_umc8672 == 0)
> +	if (probe_umc8672 == 0 || ide_off)
>  		goto out;
>  
>  	if (umc8672_probe() == 0)
> Index: linux-2.6.23-rc8-misc/drivers/ide/mips/au1xxx-ide.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/mips/au1xxx-ide.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/mips/au1xxx-ide.c
> @@ -793,6 +793,8 @@ static struct device_driver au1200_ide_d
>  
>  static int __init au_ide_init(void)
>  {
> +	if (ide_off)
> +		return -ENODEV;
>  	return driver_register(&au1200_ide_driver);
>  }
>  
> Index: linux-2.6.23-rc8-misc/drivers/ide/mips/swarm.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/mips/swarm.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/mips/swarm.c
> @@ -157,6 +157,8 @@ static int __devinit swarm_ide_init_modu
>  	struct platform_device *pldev;
>  	int err;
>  
> +	if (ide_off)
> +		return -ENODEV;
>  	printk(KERN_INFO "SWARM IDE driver\n");
>  
>  	if (driver_register(&swarm_ide_driver)) {
> Index: linux-2.6.23-rc8-misc/drivers/ide/pci/piix.c
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/drivers/ide/pci/piix.c
> +++ linux-2.6.23-rc8-misc/drivers/ide/pci/piix.c
> @@ -629,6 +629,8 @@ static struct pci_driver driver = {
>  
>  static int __init piix_ide_init(void)
>  {
> +	if (ide_off)
> +		return -ENODEV;
>  	piix_check_450nx();
>  	return ide_pci_register_driver(&driver);
>  }
> Index: linux-2.6.23-rc8-misc/Documentation/ide.txt
> ===================================================================
> --- linux-2.6.23-rc8-misc.orig/Documentation/ide.txt
> +++ linux-2.6.23-rc8-misc/Documentation/ide.txt
> @@ -290,6 +290,8 @@ Summary of ide driver parameters for ker
>  
>   "ide=nodma"		: disable DMA globally for the IDE subsystem.
>  
> + "ide=off"		: Disable the IDE subsystem completely
> +

Should be updated to reflect the fact that it is valid iff IDE is built-in.

>  The following are valid ONLY on ide0, which usually corresponds
>  to the first ATA interface found on the particular host, and the defaults for
>  the base,ctl ports must not be altered.

Otherwise looks fine.

Please recast the patch so I could push it Linus (I think it is
straightforward enough to be still merged for 2.6.24).

Thanks,
Bart

  reply	other threads:[~2007-10-25 21:01 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-15 10:43 [PATCH] Add a global ide=off switch for drivers/ide Andi Kleen
2007-10-25 21:07 ` Bartlomiej Zolnierkiewicz [this message]
2007-10-25 23:22   ` Andi Kleen
2007-10-26  0:05     ` Bartlomiej Zolnierkiewicz

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=200710252307.23323.bzolnier@gmail.com \
    --to=bzolnier@gmail.com \
    --cc=ak@suse.de \
    --cc=linux-ide@vger.kernel.org \
    /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.