All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Prarit Bhargava <prarit@redhat.com>
Cc: michael@tweakoz.com, alsa-devel@lists.sourceforge.net, perex@suse.cz
Subject: Re: [PATCH]: Fix __devinit and __devexit issues with sound drivers
Date: Fri, 09 Feb 2007 17:12:43 +0100	[thread overview]
Message-ID: <s5hveibmhs4.wl%tiwai@suse.de> (raw)
In-Reply-To: <20070209144903.22210.59758.sendpatchset@prarit.boston.redhat.com>

At Fri, 9 Feb 2007 09:49:03 -0500,
Prarit Bhargava wrote:
> 
> Fix __devinit and __devexit issues with sound drivers.
> 
> Resolves MODPOST warnings similar to:
> 
> WARNING: sound/drivers/snd-dummy.o - Section mismatch: reference to
> .init.text:snd_dummy_probe from .data.rel.local between 'snd_dummy_driver' (at
> 		offset 0x0) and 'snd_dummy_controls'
> WARNING: sound/drivers/snd-mtpav.o - Section mismatch: reference to
> .init.text:snd_mtpav_probe from .data.rel.local between 'snd_mtpav_driver' (at
> 		offset 0x0) and 'snd_mtpav_input'
> WARNING: sound/drivers/snd-virmidi.o - Section mismatch: reference to
> .init.text:snd_virmidi_probe from .data.rel.local after 'snd_virmidi_driver' (at
> 		offset 0x0)
> 
> Signed-off-by: Prarit Bhargava <prarit@redhat.com>

Thanks for the patch.  But I'm afraid we need to change more from
__init* to __devinit*, i.e. the functions called from __devinit
shouldn't be __init but also __deveinit (for example, some functions
in sound/drivers/dummy.c should be __devinit too).  Ditto for
__initdata.

Also, could you separate patches for sound/oss/* and others?  We keep
only ALSA stuff in our tree and it's not easy to apply the patches to
old OSS drivers all together.

More comments below...


> --- linux-2.6.19.ia64.orig/sound/aoa/soundbus/i2sbus/i2sbus-core.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/aoa/soundbus/i2sbus/i2sbus-core.c	2007-02-09 09:07:25.000000000 -0500
> @@ -321,7 +321,7 @@ static int i2sbus_add_dev(struct macio_d
>  	return 0;
>  }
>  
> -static int i2sbus_probe(struct macio_dev* dev, const struct of_device_id *match)
> +static int __devinit i2sbus_probe(struct macio_dev* dev, const struct of_device_id *match)
>  {
>  	struct device_node *np = NULL;
>  	int got = 0, err;
> @@ -353,7 +353,7 @@ static int i2sbus_probe(struct macio_dev
>  	return 0;
>  }
>  
> -static int i2sbus_remove(struct macio_dev* dev)
> +static int __devexit i2sbus_remove(struct macio_dev* dev)
>  {
>  	struct i2sbus_control *control = dev->ofdev.dev.driver_data;
>  	struct i2sbus_dev *i2sdev, *tmp;
> @@ -432,7 +432,7 @@ static struct macio_driver i2sbus_drv = 
>  	.owner = THIS_MODULE,
>  	.match_table = i2sbus_match,
>  	.probe = i2sbus_probe,
> -	.remove = i2sbus_remove,
> +	.remove = __devexit_p(i2sbus_remove),
>  #ifdef CONFIG_PM
>  	.suspend = i2sbus_suspend,
>  	.resume = i2sbus_resume,

Hm, I'm not pretty sure this is OK, especially in error paths.
We'll need a double check.


> --- linux-2.6.19.ia64.orig/sound/aoa/soundbus/core.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/aoa/soundbus/core.c	2007-02-09 09:13:02.000000000 -0500
> @@ -34,7 +34,7 @@ void soundbus_dev_put(struct soundbus_de
>  }
>  EXPORT_SYMBOL_GPL(soundbus_dev_put);
>  
> -static int soundbus_probe(struct device *dev)
> +static int __devinit soundbus_probe(struct device *dev)
>  {
>  	int error = -ENODEV;
>  	struct soundbus_driver *drv;
> @@ -134,7 +134,7 @@ static int soundbus_uevent(struct device
>  	return 0;
>  }
>  
> -static int soundbus_device_remove(struct device *dev)
> +static int __devexit soundbus_device_remove(struct device *dev)
>  {
>  	struct soundbus_dev * soundbus_dev = to_soundbus_device(dev);
>  	struct soundbus_driver * drv = to_soundbus_driver(dev->driver);
> @@ -185,7 +185,7 @@ static struct bus_type soundbus_bus_type
>  	.name		= "aoa-soundbus",
>  	.probe		= soundbus_probe,
>  	.uevent		= soundbus_uevent,
> -	.remove		= soundbus_device_remove,
> +	.remove		= __devexit_p(soundbus_device_remove),
>  	.shutdown	= soundbus_device_shutdown,
>  #ifdef CONFIG_PM
>  	.suspend	= soundbus_device_suspend,

Ditto.


> --- linux-2.6.19.ia64.orig/sound/arm/pxa2xx-ac97.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/arm/pxa2xx-ac97.c	2007-02-09 09:14:47.000000000 -0500
> @@ -305,7 +305,7 @@ static int pxa2xx_ac97_resume(struct pla
>  #define pxa2xx_ac97_resume	NULL
>  #endif
>  
> -static int pxa2xx_ac97_probe(struct platform_device *dev)
> +static int __devinit pxa2xx_ac97_probe(struct platform_device *dev)
>  {
>  	struct snd_card *card;
>  	struct snd_ac97_bus *ac97_bus;
> @@ -369,7 +369,7 @@ static int pxa2xx_ac97_probe(struct plat
>  	return ret;
>  }
>  
> -static int pxa2xx_ac97_remove(struct platform_device *dev)
> +static int __devexit pxa2xx_ac97_remove(struct platform_device *dev)
>  {
>  	struct snd_card *card = platform_get_drvdata(dev);
>  
> @@ -386,7 +386,7 @@ static int pxa2xx_ac97_remove(struct pla
>  
>  static struct platform_driver pxa2xx_ac97_driver = {
>  	.probe		= pxa2xx_ac97_probe,
> -	.remove		= pxa2xx_ac97_remove,
> +	.remove		= __devexit_p(pxa2xx_ac97_remove),
>  	.suspend	= pxa2xx_ac97_suspend,
>  	.resume		= pxa2xx_ac97_resume,
>  	.driver		= {

That looks good.


> --- linux-2.6.19.ia64.orig/sound/drivers/dummy.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/drivers/dummy.c	2007-02-09 09:42:45.000000000 -0500
> @@ -579,7 +579,7 @@ static int __init snd_card_dummy_new_mix
>  	return 0;
>  }
>  
> -static int __init snd_dummy_probe(struct platform_device *devptr)
> +static int __devinit snd_dummy_probe(struct platform_device *devptr)
>  {
>  	struct snd_card *card;
>  	struct snd_dummy *dummy;
> @@ -617,7 +617,7 @@ static int __init snd_dummy_probe(struct
>  	return err;
>  }
>  
> -static int snd_dummy_remove(struct platform_device *devptr)
> +static int __devexit snd_dummy_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -648,7 +648,7 @@ static int snd_dummy_resume(struct platf
>  
>  static struct platform_driver snd_dummy_driver = {
>  	.probe		= snd_dummy_probe,
> -	.remove		= snd_dummy_remove,
> +	.remove		= __devexit_p(snd_dummy_remove),
>  #ifdef CONFIG_PM
>  	.suspend	= snd_dummy_suspend,
>  	.resume		= snd_dummy_resume,

That's OK, too.  But don't forget to change other __init*.

> --- linux-2.6.19.ia64.orig/sound/drivers/mtpav.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/drivers/mtpav.c	2007-02-08 11:55:55.000000000 -0500
> @@ -619,7 +619,7 @@ static struct snd_rawmidi_ops snd_mtpav_
>   * get RAWMIDI resources
>   */
>  
> -static void __init snd_mtpav_set_name(struct mtpav *chip,
> +static void __devinit snd_mtpav_set_name(struct mtpav *chip,
>  				      struct snd_rawmidi_substream *substream)
>  {
>  	if (substream->number >= 0 && substream->number < chip->num_ports)
> @@ -634,7 +634,7 @@ static void __init snd_mtpav_set_name(st
>  		strcpy(substream->name, "MTP broadcast");
>  }
>  
> -static int __init snd_mtpav_get_RAWMIDI(struct mtpav *mcard)
> +static int __devinit snd_mtpav_get_RAWMIDI(struct mtpav *mcard)
>  {
>  	int rval;
>  	struct snd_rawmidi *rawmidi;
> @@ -691,7 +691,7 @@ static void snd_mtpav_free(struct snd_ca
>  
>  /*
>   */
> -static int __init snd_mtpav_probe(struct platform_device *dev)
> +static int __devinit snd_mtpav_probe(struct platform_device *dev)
>  {
>  	struct snd_card *card;
>  	int err;
> @@ -745,7 +745,7 @@ static int __init snd_mtpav_probe(struct
>  	return err;
>  }
>  
> -static int snd_mtpav_remove(struct platform_device *devptr)
> +static int __devexit snd_mtpav_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -756,7 +756,7 @@ static int snd_mtpav_remove(struct platf
>  
>  static struct platform_driver snd_mtpav_driver = {
>  	.probe		= snd_mtpav_probe,
> -	.remove		= snd_mtpav_remove,
> +	.remove		= __devexit_p(snd_mtpav_remove),
>  	.driver		= {
>  		.name	= SND_MTPAV_DRIVER
>  	},

Also other functions with __init should be changed.


> --- linux-2.6.19.ia64.orig/sound/drivers/mts64.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/drivers/mts64.c	2007-02-09 09:15:14.000000000 -0500
> @@ -1026,7 +1026,7 @@ __err:
>  	return err;
>  }
>  
> -static int snd_mts64_remove(struct platform_device *pdev)
> +static int __devexit snd_mts64_remove(struct platform_device *pdev)
>  {
>  	struct snd_card *card = platform_get_drvdata(pdev);
>  
> @@ -1039,7 +1039,7 @@ static int snd_mts64_remove(struct platf
>  
>  static struct platform_driver snd_mts64_driver = {
>  	.probe  = snd_mts64_probe,
> -	.remove = snd_mts64_remove,
> +	.remove = __devexit_p(snd_mts64_remove),
>  	.driver = {
>  		.name = PLATFORM_DRIVER
>  	}

This looks OK.


> --- linux-2.6.19.ia64.orig/sound/drivers/serial-u16550.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/drivers/serial-u16550.c	2007-02-09 09:28:43.000000000 -0500
> @@ -841,7 +841,7 @@ static int __init snd_uart16550_create(s
>  	return 0;
>  }
>  
> -static void __init snd_uart16550_substreams(struct snd_rawmidi_str *stream)
> +static void __devinit snd_uart16550_substreams(struct snd_rawmidi_str *stream)
>  {
>  	struct list_head *list;
>  
> @@ -851,7 +851,7 @@ static void __init snd_uart16550_substre
>  	}
>  }
>  
> -static int __init snd_uart16550_rmidi(snd_uart16550_t *uart, int device, int outs, int ins, struct snd_rawmidi **rmidi)
> +static int __devinit snd_uart16550_rmidi(snd_uart16550_t *uart, int device, int outs, int ins, struct snd_rawmidi **rmidi)
>  {
>  	struct snd_rawmidi *rrawmidi;
>  	int err;
> @@ -872,7 +872,7 @@ static int __init snd_uart16550_rmidi(sn
>  	return 0;
>  }
>  
> -static int __init snd_serial_probe(struct platform_device *devptr)
> +static int __devinit snd_serial_probe(struct platform_device *devptr)
>  {
>  	struct snd_card *card;
>  	snd_uart16550_t *uart;
> @@ -956,7 +956,7 @@ static int __init snd_serial_probe(struc
>  	return err;
>  }
>  
> -static int snd_serial_remove(struct platform_device *devptr)
> +static int __devexit snd_serial_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -967,7 +967,7 @@ static int snd_serial_remove(struct plat
>  
>  static struct platform_driver snd_serial_driver = {
>  	.probe		= snd_serial_probe,
> -	.remove		= snd_serial_remove,
> +	.remove		= __devexit_p( snd_serial_remove),
>  	.driver		= {
>  		.name	= SND_SERIAL_DRIVER
>  	},

Still other __init are there.


> --- linux-2.6.19.ia64.orig/sound/drivers/virmidi.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/drivers/virmidi.c	2007-02-08 11:53:10.000000000 -0500
> @@ -85,7 +85,7 @@ struct snd_card_virmidi {
>  static struct platform_device *devices[SNDRV_CARDS];
>  
>  
> -static int __init snd_virmidi_probe(struct platform_device *devptr)
> +static int __devinit snd_virmidi_probe(struct platform_device *devptr)
>  {
>  	struct snd_card *card;
>  	struct snd_card_virmidi *vmidi;
> @@ -129,7 +129,7 @@ static int __init snd_virmidi_probe(stru
>  	return err;
>  }
>  
> -static int snd_virmidi_remove(struct platform_device *devptr)
> +static int __devexit snd_virmidi_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -140,7 +140,7 @@ static int snd_virmidi_remove(struct pla
>  
>  static struct platform_driver snd_virmidi_driver = {
>  	.probe		= snd_virmidi_probe,
> -	.remove		= snd_virmidi_remove,
> +	.remove		= __devexit_p(snd_virmidi_remove),
>  	.driver		= {
>  		.name	= SND_VIRMIDI_DRIVER
>  	},

This looks OK.


> --- linux-2.6.19.ia64.orig/sound/isa/es1688/es1688.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/isa/es1688/es1688.c	2007-02-09 09:16:34.000000000 -0500
> @@ -73,7 +73,7 @@ static struct platform_device *devices[S
>  
>  #define PFX	"es1688: "
>  
> -static int __init snd_es1688_probe(struct platform_device *pdev)
> +static int __devinit snd_es1688_probe(struct platform_device *pdev)
>  {
>  	int dev = pdev->id;
>  	static int possible_irqs[] = {5, 9, 10, 7, -1};
> @@ -171,7 +171,7 @@ static int __init snd_es1688_probe(struc
>  	return err;
>  }
>  
> -static int snd_es1688_remove(struct platform_device *devptr)
> +static int __devexit snd_es1688_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -182,7 +182,7 @@ static int snd_es1688_remove(struct plat
>  
>  static struct platform_driver snd_es1688_driver = {
>  	.probe		= snd_es1688_probe,
> -	.remove		= snd_es1688_remove,
> +	.remove		= __devexit_p(snd_es1688_remove),
>  	/* FIXME: suspend/resume */
>  	.driver		= {
>  		.name	= ES1688_DRIVER
> --- linux-2.6.19.ia64.orig/sound/isa/sb/sb8.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/isa/sb/sb8.c	2007-02-09 09:17:21.000000000 -0500
> @@ -83,7 +83,7 @@ static void snd_sb8_free(struct snd_card
>  	release_and_free_resource(acard->fm_res);
>  }
>  
> -static int __init snd_sb8_probe(struct platform_device *pdev)
> +static int __devinit snd_sb8_probe(struct platform_device *pdev)
>  {
>  	int dev = pdev->id;
>  	struct snd_sb *chip;
> @@ -193,7 +193,7 @@ static int __init snd_sb8_probe(struct p
>  	return err;
>  }
>  
> -static int snd_sb8_remove(struct platform_device *pdev)
> +static int __devexit snd_sb8_remove(struct platform_device *pdev)
>  {
>  	snd_card_free(platform_get_drvdata(pdev));
>  	platform_set_drvdata(pdev, NULL);
> @@ -230,7 +230,7 @@ static int snd_sb8_resume(struct platfor
>  
>  static struct platform_driver snd_sb8_driver = {
>  	.probe		= snd_sb8_probe,
> -	.remove		= snd_sb8_remove,
> +	.remove		= __devexit_p(snd_sb8_remove),
>  #ifdef CONFIG_PM
>  	.suspend	= snd_sb8_suspend,
>  	.resume		= snd_sb8_resume,
> --- linux-2.6.19.ia64.orig/sound/isa/opl3sa2.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/isa/opl3sa2.c	2007-02-09 09:17:52.000000000 -0500
> @@ -919,7 +919,7 @@ static int __devinit snd_opl3sa2_nonpnp_
>  	return 0;
>  }
>  
> -static int snd_opl3sa2_nonpnp_remove(struct platform_device *devptr)
> +static int __devexit snd_opl3sa2_nonpnp_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -942,7 +942,7 @@ static int snd_opl3sa2_nonpnp_resume(str
>  
>  static struct platform_driver snd_opl3sa2_nonpnp_driver = {
>  	.probe		= snd_opl3sa2_nonpnp_probe,
> -	.remove		= snd_opl3sa2_nonpnp_remove,
> +	.remove		= __devexit( snd_opl3sa2_nonpnp_remove),
>  #ifdef CONFIG_PM
>  	.suspend	= snd_opl3sa2_nonpnp_suspend,
>  	.resume		= snd_opl3sa2_nonpnp_resume,
> --- linux-2.6.19.ia64.orig/sound/isa/cmi8330.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/isa/cmi8330.c	2007-02-09 09:18:31.000000000 -0500
> @@ -574,7 +574,7 @@ static int __devinit snd_cmi8330_nonpnp_
>  	return 0;
>  }
>  
> -static int snd_cmi8330_nonpnp_remove(struct platform_device *devptr)
> +static int __devexit snd_cmi8330_nonpnp_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -597,7 +597,7 @@ static int snd_cmi8330_nonpnp_resume(str
>  
>  static struct platform_driver snd_cmi8330_driver = {
>  	.probe		= snd_cmi8330_nonpnp_probe,
> -	.remove		= snd_cmi8330_nonpnp_remove,
> +	.remove		= __devexit_p(snd_cmi8330_nonpnp_remove),
>  #ifdef CONFIG_PM
>  	.suspend	= snd_cmi8330_nonpnp_suspend,
>  	.resume		= snd_cmi8330_nonpnp_resume,

These look fine, too.


> --- linux-2.6.19.ia64.orig/sound/isa/gus/gusmax.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/isa/gus/gusmax.c	2007-02-09 09:19:20.000000000 -0500
> @@ -204,7 +204,7 @@ static void snd_gusmax_free(struct snd_c
>  		free_irq(maxcard->irq, (void *)maxcard);
>  }
>  
> -static int __init snd_gusmax_probe(struct platform_device *pdev)
> +static int __devinit snd_gusmax_probe(struct platform_device *pdev)
>  {
>  	int dev = pdev->id;
>  	static int possible_irqs[] = {5, 11, 12, 9, 7, 15, 3, -1};
> @@ -348,7 +348,7 @@ static int __init snd_gusmax_probe(struc
>  	return err;
>  }
>  
> -static int snd_gusmax_remove(struct platform_device *devptr)
> +static int __devexit snd_gusmax_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -359,7 +359,7 @@ static int snd_gusmax_remove(struct plat
>  
>  static struct platform_driver snd_gusmax_driver = {
>  	.probe		= snd_gusmax_probe,
> -	.remove		= snd_gusmax_remove,
> +	.remove		= __devexit_p(snd_gusmax_remove),
>  	/* FIXME: suspend/resume */
>  	.driver		= {
>  		.name	= GUSMAX_DRIVER

There are more __init*.


> --- linux-2.6.19.ia64.orig/sound/isa/gus/gusclassic.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/isa/gus/gusclassic.c	2007-02-09 09:19:58.000000000 -0500
> @@ -103,7 +103,7 @@ static void __init snd_gusclassic_init(i
>  	gus->joystick_dac = joystick_dac[dev];
>  }
>  
> -static int __init snd_gusclassic_probe(struct platform_device *pdev)
> +static int __devinit snd_gusclassic_probe(struct platform_device *pdev)
>  {
>  	int dev = pdev->id;
>  	static int possible_irqs[] = {5, 11, 12, 9, 7, 15, 3, 4, -1};
> @@ -211,7 +211,7 @@ static int __init snd_gusclassic_probe(s
>  	return err;
>  }
>  
> -static int snd_gusclassic_remove(struct platform_device *devptr)
> +static int __devexit snd_gusclassic_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -222,7 +222,7 @@ static int snd_gusclassic_remove(struct 
>  
>  static struct platform_driver snd_gusclassic_driver = {
>  	.probe		= snd_gusclassic_probe,
> -	.remove		= snd_gusclassic_remove,
> +	.remove		= __devexit_p(snd_gusclassic_remove),
>  	/* FIXME: suspend/resume */
>  	.driver		= {
>  		.name	= GUSCLASSIC_DRIVER
> --- linux-2.6.19.ia64.orig/sound/isa/gus/gusextreme.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/isa/gus/gusextreme.c	2007-02-09 09:20:27.000000000 -0500
> @@ -169,7 +169,7 @@ static int __init snd_gusextreme_mixer(s
>  	return 0;
>  }
>  
> -static int __init snd_gusextreme_probe(struct platform_device *pdev)
> +static int __devinit snd_gusextreme_probe(struct platform_device *pdev)
>  {
>  	int dev = pdev->id;
>  	static int possible_ess_irqs[] = {5, 9, 10, 7, -1};
> @@ -321,7 +321,7 @@ static int __init snd_gusextreme_probe(s
>  	return err;
>  }
>  
> -static int snd_gusextreme_remove(struct platform_device *devptr)
> +static int __devexit snd_gusextreme_remove(struct platform_device *devptr)
>  {
>  	snd_card_free(platform_get_drvdata(devptr));
>  	platform_set_drvdata(devptr, NULL);
> @@ -332,7 +332,7 @@ static int snd_gusextreme_remove(struct 
>  
>  static struct platform_driver snd_gusextreme_driver = {
>  	.probe		= snd_gusextreme_probe,
> -	.remove		= snd_gusextreme_remove,
> +	.remove		= __devexit_p(snd_gusextreme_remove),
>  	/* FIXME: suspend/resume */
>  	.driver		= {
>  		.name	= GUSEXTREME_DRIVER

... in these, too.


> --- linux-2.6.19.ia64.orig/sound/oss/sb_card.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/oss/sb_card.c	2007-02-09 09:21:09.000000000 -0500
> @@ -237,7 +237,7 @@ static void sb_dev2cfg(struct pnp_dev *d
>  static unsigned int sb_pnp_devices;
>  
>  /* Probe callback function for the PnP API */
> -static int sb_pnp_probe(struct pnp_card_link *card, const struct pnp_card_device_id *card_id)
> +static int __devinit sb_pnp_probe(struct pnp_card_link *card, const struct pnp_card_device_id *card_id)
>  {
>  	struct sb_card_config *scc;
>  	struct sb_module_options sbmo = {0}; /* Default to 0 for PnP */
> @@ -271,7 +271,7 @@ static int sb_pnp_probe(struct pnp_card_
>  	return sb_register_oss(scc, &sbmo);
>  }
>  
> -static void sb_pnp_remove(struct pnp_card_link *card)
> +static void __devexit sb_pnp_remove(struct pnp_card_link *card)
>  {
>  	struct sb_card_config *scc = pnp_get_card_drvdata(card);
>  
> @@ -287,7 +287,7 @@ static struct pnp_card_driver sb_pnp_dri
>  	.name          = "OSS SndBlstr", /* 16 character limit */
>  	.id_table      = sb_pnp_card_table,
>  	.probe         = sb_pnp_probe,
> -	.remove        = sb_pnp_remove,
> +	.remove        = __devexit_p( sb_pnp_remove),
>  };
>  MODULE_DEVICE_TABLE(pnp_card, sb_pnp_card_table);
>  #endif /* CONFIG_PNP */

They look OK, but put them to a separate patch.


> --- linux-2.6.19.ia64.orig/sound/oss/nm256_audio.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/oss/nm256_audio.c	2007-02-09 09:21:47.000000000 -0500
> @@ -1237,7 +1237,7 @@ nm256_probe(struct pci_dev *pcidev,const
>      return -1; /* should not come here ... */
>  }
>  
> -static void __devinit
> +static void __devexit
>  nm256_remove(struct pci_dev *pcidev) {
>      struct nm256_info *xcard = pci_get_drvdata(pcidev);
>      struct nm256_info *card,*next_card = NULL;

Wow.  A good catch.

> @@ -1632,7 +1632,7 @@ MODULE_LICENSE("GPL");
>  static struct pci_driver nm256_pci_driver = {
>  	.name		= "nm256_audio",
>  	.id_table	= nm256_pci_tbl,
> -	.probe		= nm256_probe,
> +	.probe		= __devexit_p(nm256_probe),
>  	.remove		= nm256_remove,
>  };
>  

... But this isn't.


> --- linux-2.6.19.ia64.orig/sound/parisc/harmony.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/parisc/harmony.c	2007-02-09 09:22:12.000000000 -0500
> @@ -1019,7 +1019,7 @@ snd_harmony_remove(struct parisc_device 
>  static struct parisc_driver snd_harmony_driver = {
>  	.name = "harmony",
>  	.id_table = snd_harmony_devtable,
> -	.probe = snd_harmony_probe,
> +	.probe = __devexit_p(snd_harmony_probe),
>  	.remove = snd_harmony_remove,
>  };
>  

This also bad.


> --- linux-2.6.19.ia64.orig/sound/pcmcia/vx/vxpocket.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/pcmcia/vx/vxpocket.c	2007-02-09 09:22:44.000000000 -0500
> @@ -289,7 +289,7 @@ static int vxp_resume(struct pcmcia_devi
>  
>  /*
>   */
> -static int vxpocket_probe(struct pcmcia_device *p_dev)
> +static int __devinit vxpocket_probe(struct pcmcia_device *p_dev)
>  {
>  	struct snd_card *card;
>  	struct snd_vxpocket *vxp;
> @@ -329,7 +329,7 @@ static int vxpocket_probe(struct pcmcia_
>  	return vxpocket_config(p_dev);
>  }
>  
> -static void vxpocket_detach(struct pcmcia_device *link)
> +static void __devexit vxpocket_detach(struct pcmcia_device *link)
>  {
>  	struct snd_vxpocket *vxp;
>  	struct vx_core *chip;
> @@ -363,7 +363,7 @@ static struct pcmcia_driver vxp_cs_drive
>  		.name	= "snd-vxpocket",
>  	},
>  	.probe		= vxpocket_probe,
> -	.remove		= vxpocket_detach,
> +	.remove		= __devexit_p(vxpocket_detach),
>  	.id_table	= vxp_ids,
>  #ifdef CONFIG_PM
>  	.suspend	= vxp_suspend,

I haven't seen pcmcia (-cs) drivers with __dev* prefix, so I'm not
100% sure that's correct although it should work, I guess.


> --- linux-2.6.19.ia64.orig/sound/pcmcia/pdaudiocf/pdaudiocf.c	2007-02-07 09:56:36.000000000 -0500
> +++ linux-2.6.19.ia64/sound/pcmcia/pdaudiocf/pdaudiocf.c	2007-02-09 09:24:29.000000000 -0500
> @@ -90,7 +90,7 @@ static int snd_pdacf_dev_free(struct snd
>  /*
>   * snd_pdacf_attach - attach callback for cs
>   */
> -static int snd_pdacf_probe(struct pcmcia_device *link)
> +static int __devinit snd_pdacf_probe(struct pcmcia_device *link)
>  {
>  	int i;
>  	struct snd_pdacf *pdacf;
> @@ -196,7 +196,7 @@ static int snd_pdacf_assign_resources(st
>  /*
>   * snd_pdacf_detach - detach callback for cs
>   */
> -static void snd_pdacf_detach(struct pcmcia_device *link)
> +static void __devexit snd_pdacf_detach(struct pcmcia_device *link)
>  {
>  	struct snd_pdacf *chip = link->priv;
>  
> @@ -290,7 +290,7 @@ static struct pcmcia_driver pdacf_cs_dri
>  		.name	= "snd-pdaudiocf",
>  	},
>  	.probe		= snd_pdacf_probe,
> -	.remove		= snd_pdacf_detach,
> +	.remove		= __devexit_p(snd_pdacf_detach),
>  	.id_table	= snd_pdacf_ids,
>  #ifdef CONFIG_PM
>  	.suspend	= pdacf_suspend,
> 

Ditto.


Thanks,

Takashi

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

       reply	other threads:[~2007-02-09 16:12 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20070209144903.22210.59758.sendpatchset@prarit.boston.redhat.com>
2007-02-09 16:12 ` Takashi Iwai [this message]
2007-02-14 15:09   ` [PATCH]: Fix __devinit and __devexit issues with sound drivers Prarit Bhargava
2007-02-14 15:23     ` Takashi Iwai

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=s5hveibmhs4.wl%tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@lists.sourceforge.net \
    --cc=michael@tweakoz.com \
    --cc=perex@suse.cz \
    --cc=prarit@redhat.com \
    /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.