LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH v3 06/12] memory-hotplug: unregister memory section on SPARSEMEM_VMEMMAP
From: Jaegeuk Hanse @ 2012-11-20 11:03 UTC (permalink / raw)
  To: Wen Congyang
  Cc: linux-s390, linux-ia64, Len Brown, linux-acpi, linux-sh, x86,
	linux-kernel, cmetcalf, Jianguo Wu, linux-mm, Yasuaki Ishimatsu,
	paulus, Minchan Kim, KOSAKI Motohiro, David Rientjes, sparclinux,
	Christoph Lameter, linuxppc-dev, Andrew Morton, Jiang Liu
In-Reply-To: <50AB4F6D.3050002@cn.fujitsu.com>

On 11/20/2012 05:37 PM, Wen Congyang wrote:
> At 11/20/2012 02:58 PM, Jaegeuk Hanse Wrote:
>> On 11/20/2012 02:55 PM, Wen Congyang wrote:
>>> At 11/20/2012 02:22 PM, Jaegeuk Hanse Wrote:
>>>> On 11/01/2012 05:44 PM, Wen Congyang wrote:
>>>>> From: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>>>>>
>>>>> Currently __remove_section for SPARSEMEM_VMEMMAP does nothing. But
>>>>> even if
>>>>> we use SPARSEMEM_VMEMMAP, we can unregister the memory_section.
>>>>>
>>>>> So the patch add unregister_memory_section() into __remove_section().
>>>> Hi Yasuaki,
>>>>
>>>> In order to review this patch, I should dig sparse memory codes in
>>>> advance. But I have some confuse of codes. Why need encode/decode mem
>>>> map instead of set mem_map to ms->section_mem_map directly?
>>> The memmap is aligned, and the low bits are zero. We store some
>>> information
>>> in these bits. So we need to encode/decode memmap here.
>> Hi Congyang,
>>
>> Thanks for you reponse. But I mean why return (unsigned long)(mem_map -
>> (section_nr_to_pfn(pnum))); in function sparse_encode_mem_map, and then
>> return ((struct page *)coded_mem_map) + section_nr_to_pfn(pnum); in
>> funtion sparse_decode_mem_map instead of just store mem_map in
>> ms->section_mep_map directly.
> I don't know why. I try to find the reason, but I don't find any
> place to use the pfn stored in the mem_map except in the decode
> function. Maybe the designer doesn't want us to access the mem_map
> directly.

It seems that mem_map is per node, but pfn is real pfn.
you can check __page_to_pfn.

>
> Thanks
> Wen Congyang
>
>> Regards,
>> Jaegeuk
>>
>>> Thanks
>>> Wen Congyang
>>>
>>>> Regards,
>>>> Jaegeuk
>>>>
>>>>> CC: David Rientjes <rientjes@google.com>
>>>>> CC: Jiang Liu <liuj97@gmail.com>
>>>>> CC: Len Brown <len.brown@intel.com>
>>>>> CC: Christoph Lameter <cl@linux.com>
>>>>> Cc: Minchan Kim <minchan.kim@gmail.com>
>>>>> CC: Andrew Morton <akpm@linux-foundation.org>
>>>>> CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
>>>>> CC: Wen Congyang <wency@cn.fujitsu.com>
>>>>> Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>>>>> ---
>>>>>     mm/memory_hotplug.c | 13 ++++++++-----
>>>>>     1 file changed, 8 insertions(+), 5 deletions(-)
>>>>>
>>>>> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
>>>>> index ca07433..66a79a7 100644
>>>>> --- a/mm/memory_hotplug.c
>>>>> +++ b/mm/memory_hotplug.c
>>>>> @@ -286,11 +286,14 @@ static int __meminit __add_section(int nid,
>>>>> struct zone *zone,
>>>>>     #ifdef CONFIG_SPARSEMEM_VMEMMAP
>>>>>     static int __remove_section(struct zone *zone, struct mem_section
>>>>> *ms)
>>>>>     {
>>>>> -    /*
>>>>> -     * XXX: Freeing memmap with vmemmap is not implement yet.
>>>>> -     *      This should be removed later.
>>>>> -     */
>>>>> -    return -EBUSY;
>>>>> +    int ret = -EINVAL;
>>>>> +
>>>>> +    if (!valid_section(ms))
>>>>> +        return ret;
>>>>> +
>>>>> +    ret = unregister_memory_section(ms);
>>>>> +
>>>>> +    return ret;
>>>>>     }
>>>>>     #else
>>>>>     static int __remove_section(struct zone *zone, struct mem_section
>>>>> *ms)
>>

^ permalink raw reply

* Re: [PATCH 1/4] perf/powerpc: Use uapi/unistd.h to fix build error
From: Suzuki K. Poulose @ 2012-11-20 10:43 UTC (permalink / raw)
  To: Sukadev Bhattiprolu
  Cc: Peter Zijlstra, robert.richter, Anton Blanchard, linux-kernel,
	linuxppc-dev, Ingo Molnar, Paul Mackerras,
	Arnaldo Carvalho de Melo
In-Reply-To: <20121107191818.GA16211@us.ibm.com>

On 11/08/2012 12:48 AM, Sukadev Bhattiprolu wrote:
>
>  From b8beef080260c1625c8f801105504a82005295e5 Mon Sep 17 00:00:00 2001
> From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
> Date: Wed, 31 Oct 2012 11:21:28 -0700
> Subject: [PATCH 1/4] perf/powerpc: Use uapi/unistd.h to fix build error
>
> Use the 'unistd.h' from arch/powerpc/include/uapi to build the perf tool.
>
> Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Without this patch, I couldn't build perf on powerpc, with 3.7.0-rc2

Tested-by: Suzuki K. Poulose <suzuki@in.ibm.com>

Thanks
Suzuki
> ---
>   tools/perf/perf.h |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/tools/perf/perf.h b/tools/perf/perf.h
> index 054182e..f4952da 100644
> --- a/tools/perf/perf.h
> +++ b/tools/perf/perf.h
> @@ -26,7 +26,7 @@ void get_term_dimensions(struct winsize *ws);
>   #endif
>
>   #ifdef __powerpc__
> -#include "../../arch/powerpc/include/asm/unistd.h"
> +#include "../../arch/powerpc/include/uapi/asm/unistd.h"
>   #define rmb()		asm volatile ("sync" ::: "memory")
>   #define cpu_relax()	asm volatile ("" ::: "memory");
>   #define CPUINFO_PROC	"cpu"
>

^ permalink raw reply

* Re: [PATCH 429/493] tty: remove use of __devexit
From: Tobias Klauser @ 2012-11-20  9:45 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: nios2-dev, Jiri Slaby, gregkh, linux-arm-msm, uclinux-dist-devel,
	Tony Prisk, Bryan Huntsman, linux-serial, Lucas Tavares,
	sparclinux, Daniel Walker, David Brown, linuxppc-dev,
	David S. Miller, linux-arm-kernel, Alan Cox
In-Reply-To: <1353349642-3677-429-git-send-email-wfp5p@virginia.edu>

On 2012-11-19 at 19:26:18 +0100, Bill Pemberton <wfp5p@virginia.edu> wrote:
> CONFIG_HOTPLUG is going away as an option so __devexit is no
> longer needed.
> 
> Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
> Cc: Jiri Slaby <jirislaby@gmail.com> 
> Cc: Alan Cox <alan@linux.intel.com> 
> Cc: Tobias Klauser <tklauser@distanz.ch> 
> Cc: Lucas Tavares <lucaskt@linux.vnet.ibm.com> 
> Cc: David Brown <davidb@codeaurora.org> 
> Cc: Daniel Walker <dwalker@fifo99.com> 
> Cc: Bryan Huntsman <bryanh@codeaurora.org> 
> Cc: "David S. Miller" <davem@davemloft.net> 
> Cc: Peter Korsgaard <jacmet@sunsite.dk> 
> Cc: Tony Prisk <linux@prisktech.co.nz> 
> Cc: linuxppc-dev@lists.ozlabs.org 
> Cc: linux-serial@vger.kernel.org 
> Cc: nios2-dev@sopc.et.ntust.edu.tw 
> Cc: uclinux-dist-devel@blackfin.uclinux.org 
> Cc: linux-arm-msm@vger.kernel.org 
> Cc: sparclinux@vger.kernel.org 
> Cc: linux-arm-kernel@lists.infradead.org 
> ---
[...]
>  drivers/tty/serial/altera_jtaguart.c        |  2 +-
>  drivers/tty/serial/altera_uart.c            |  2 +-

Acked-by: Tobias Klauser <tklauser@distanz.ch>

^ permalink raw reply

* Re: [PATCH 161/493] tty: remove use of __devinit
From: Tobias Klauser @ 2012-11-20  9:44 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: nios2-dev, linux-ia64, Jiri Slaby, gregkh, Tony Prisk,
	linux-serial, Lucas Tavares, sparclinux, linuxppc-dev,
	David S. Miller, linux-arm-kernel, Alan Cox
In-Reply-To: <1353349642-3677-161-git-send-email-wfp5p@virginia.edu>

On 2012-11-19 at 19:21:50 +0100, Bill Pemberton <wfp5p@virginia.edu> wrote:
> CONFIG_HOTPLUG is going away as an option so __devinit is no longer
> needed.
> 
> Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
> Cc: Jiri Slaby <jirislaby@gmail.com> 
> Cc: Alan Cox <alan@linux.intel.com> 
> Cc: Tobias Klauser <tklauser@distanz.ch> 
> Cc: Lucas Tavares <lucaskt@linux.vnet.ibm.com> 
> Cc: "David S. Miller" <davem@davemloft.net> 
> Cc: Peter Korsgaard <jacmet@sunsite.dk> 
> Cc: Tony Prisk <linux@prisktech.co.nz> 
> Cc: linuxppc-dev@lists.ozlabs.org 
> Cc: linux-serial@vger.kernel.org 
> Cc: nios2-dev@sopc.et.ntust.edu.tw 
> Cc: linux-ia64@vger.kernel.org 
> Cc: sparclinux@vger.kernel.org 
> Cc: linux-arm-kernel@lists.infradead.org 
> ---
[...]
>  drivers/tty/serial/altera_jtaguart.c        |  2 +-
>  drivers/tty/serial/altera_uart.c            |  2 +-

Acked-by: Tobias Klauser <tklauser@distanz.ch>

^ permalink raw reply

* Re: [PATCH 161/493] tty: remove use of __devinit
From: Nicolas Ferre @ 2012-11-20  9:34 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: nios2-dev, linux-ia64, Jiri Slaby, gregkh, linux-serial,
	Lucas Tavares, sparclinux, Tobias Klauser, linuxppc-dev,
	David S. Miller, linux-arm-kernel, Alan Cox
In-Reply-To: <1353349642-3677-161-git-send-email-wfp5p@virginia.edu>

On 11/19/2012 07:21 PM, Bill Pemberton :
> CONFIG_HOTPLUG is going away as an option so __devinit is no longer
> needed.
> 
> Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
> Cc: Jiri Slaby <jirislaby@gmail.com> 
> Cc: Alan Cox <alan@linux.intel.com> 
> Cc: Tobias Klauser <tklauser@distanz.ch> 
> Cc: Lucas Tavares <lucaskt@linux.vnet.ibm.com> 
> Cc: "David S. Miller" <davem@davemloft.net> 
> Cc: Peter Korsgaard <jacmet@sunsite.dk> 
> Cc: Tony Prisk <linux@prisktech.co.nz> 
> Cc: linuxppc-dev@lists.ozlabs.org 
> Cc: linux-serial@vger.kernel.org 
> Cc: nios2-dev@sopc.et.ntust.edu.tw 
> Cc: linux-ia64@vger.kernel.org 
> Cc: sparclinux@vger.kernel.org 
> Cc: linux-arm-kernel@lists.infradead.org 

>  drivers/tty/serial/atmel_serial.c           |  6 +++---

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

> diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
> index 0244acf..444b544 100644
> --- a/drivers/tty/cyclades.c
> +++ b/drivers/tty/cyclades.c
> @@ -3099,7 +3099,7 @@ static const struct tty_port_operations cyz_port_ops = {
>   * ---------------------------------------------------------------------
>   */
>  
> -static int __devinit cy_init_card(struct cyclades_card *cinfo)
> +static int cy_init_card(struct cyclades_card *cinfo)
>  {
>  	struct cyclades_port *info;
>  	unsigned int channel, port;
> @@ -3196,7 +3196,7 @@ static int __devinit cy_init_card(struct cyclades_card *cinfo)
>  
>  /* initialize chips on Cyclom-Y card -- return number of valid
>     chips (which is number of ports/4) */
> -static unsigned short __devinit cyy_init_card(void __iomem *true_base_addr,
> +static unsigned short cyy_init_card(void __iomem *true_base_addr,
>  		int index)
>  {
>  	unsigned int chip_number;
> @@ -3405,7 +3405,7 @@ static int __init cy_detect_isa(void)
>  }				/* cy_detect_isa */
>  
>  #ifdef CONFIG_PCI
> -static inline int __devinit cyc_isfwstr(const char *str, unsigned int size)
> +static inline int cyc_isfwstr(const char *str, unsigned int size)
>  {
>  	unsigned int a;
>  
> @@ -3420,7 +3420,7 @@ static inline int __devinit cyc_isfwstr(const char *str, unsigned int size)
>  	return 0;
>  }
>  
> -static inline void __devinit cyz_fpga_copy(void __iomem *fpga, const u8 *data,
> +static inline void cyz_fpga_copy(void __iomem *fpga, const u8 *data,
>  		unsigned int size)
>  {
>  	for (; size > 0; size--) {
> @@ -3429,7 +3429,7 @@ static inline void __devinit cyz_fpga_copy(void __iomem *fpga, const u8 *data,
>  	}
>  }
>  
> -static void __devinit plx_init(struct pci_dev *pdev, int irq,
> +static void plx_init(struct pci_dev *pdev, int irq,
>  		struct RUNTIME_9060 __iomem *addr)
>  {
>  	/* Reset PLX */
> @@ -3449,7 +3449,7 @@ static void __devinit plx_init(struct pci_dev *pdev, int irq,
>  	pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, irq);
>  }
>  
> -static int __devinit __cyz_load_fw(const struct firmware *fw,
> +static int __cyz_load_fw(const struct firmware *fw,
>  		const char *name, const u32 mailbox, void __iomem *base,
>  		void __iomem *fpga)
>  {
> @@ -3526,7 +3526,7 @@ static int __devinit __cyz_load_fw(const struct firmware *fw,
>  	return 0;
>  }
>  
> -static int __devinit cyz_load_fw(struct pci_dev *pdev, void __iomem *base_addr,
> +static int cyz_load_fw(struct pci_dev *pdev, void __iomem *base_addr,
>  		struct RUNTIME_9060 __iomem *ctl_addr, int irq)
>  {
>  	const struct firmware *fw;
> @@ -3692,7 +3692,7 @@ err:
>  	return retval;
>  }
>  
> -static int __devinit cy_pci_probe(struct pci_dev *pdev,
> +static int cy_pci_probe(struct pci_dev *pdev,
>  		const struct pci_device_id *ent)
>  {
>  	struct cyclades_card *card;
> diff --git a/drivers/tty/ehv_bytechan.c b/drivers/tty/ehv_bytechan.c
> index 4ab936b..65d4320 100644
> --- a/drivers/tty/ehv_bytechan.c
> +++ b/drivers/tty/ehv_bytechan.c
> @@ -699,7 +699,7 @@ static const struct tty_port_operations ehv_bc_tty_port_ops = {
>  	.shutdown = ehv_bc_tty_port_shutdown,
>  };
>  
> -static int __devinit ehv_bc_tty_probe(struct platform_device *pdev)
> +static int ehv_bc_tty_probe(struct platform_device *pdev)
>  {
>  	struct device_node *np = pdev->dev.of_node;
>  	struct ehv_bc_data *bc;
> diff --git a/drivers/tty/hvc/hvc_opal.c b/drivers/tty/hvc/hvc_opal.c
> index f39337f..5ddd6f5 100644
> --- a/drivers/tty/hvc/hvc_opal.c
> +++ b/drivers/tty/hvc/hvc_opal.c
> @@ -161,7 +161,7 @@ static const struct hv_ops hvc_opal_hvsi_ops = {
>  	.tiocmset = hvc_opal_hvsi_tiocmset,
>  };
>  
> -static int __devinit hvc_opal_probe(struct platform_device *dev)
> +static int hvc_opal_probe(struct platform_device *dev)
>  {
>  	const struct hv_ops *ops;
>  	struct hvc_struct *hp;
> diff --git a/drivers/tty/hvc/hvc_vio.c b/drivers/tty/hvc/hvc_vio.c
> index 1a5894c..f7333e3 100644
> --- a/drivers/tty/hvc/hvc_vio.c
> +++ b/drivers/tty/hvc/hvc_vio.c
> @@ -293,7 +293,7 @@ static int udbg_hvc_getc(void)
>  	}
>  }
>  
> -static int __devinit hvc_vio_probe(struct vio_dev *vdev,
> +static int hvc_vio_probe(struct vio_dev *vdev,
>  				   const struct vio_device_id *id)
>  {
>  	const struct hv_ops *ops;
> diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
> index f4abfe2..19843ec 100644
> --- a/drivers/tty/hvc/hvc_xen.c
> +++ b/drivers/tty/hvc/hvc_xen.c
> @@ -422,7 +422,7 @@ static int xencons_connect_backend(struct xenbus_device *dev,
>  	return ret;
>  }
>  
> -static int __devinit xencons_probe(struct xenbus_device *dev,
> +static int xencons_probe(struct xenbus_device *dev,
>  				  const struct xenbus_device_id *id)
>  {
>  	int ret, devid;
> diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
> index 888af58..506a28e 100644
> --- a/drivers/tty/hvc/hvcs.c
> +++ b/drivers/tty/hvc/hvcs.c
> @@ -330,12 +330,12 @@ static int hvcs_open(struct tty_struct *tty, struct file *filp);
>  static void hvcs_close(struct tty_struct *tty, struct file *filp);
>  static void hvcs_hangup(struct tty_struct * tty);
>  
> -static int __devinit hvcs_probe(struct vio_dev *dev,
> +static int hvcs_probe(struct vio_dev *dev,
>  		const struct vio_device_id *id);
>  static int __devexit hvcs_remove(struct vio_dev *dev);
>  static int __init hvcs_module_init(void);
>  static void __exit hvcs_module_exit(void);
> -static int __devinit hvcs_initialize(void);
> +static int hvcs_initialize(void);
>  
>  #define HVCS_SCHED_READ	0x00000001
>  #define HVCS_QUICK_READ	0x00000002
> @@ -756,7 +756,7 @@ static int hvcs_get_index(void)
>  	return -1;
>  }
>  
> -static int __devinit hvcs_probe(
> +static int hvcs_probe(
>  	struct vio_dev *dev,
>  	const struct vio_device_id *id)
>  {
> @@ -1478,7 +1478,7 @@ static void hvcs_free_index_list(void)
>  	hvcs_index_count = 0;
>  }
>  
> -static int __devinit hvcs_initialize(void)
> +static int hvcs_initialize(void)
>  {
>  	int rc, num_ttys_to_alloc;
>  
> diff --git a/drivers/tty/isicom.c b/drivers/tty/isicom.c
> index 4775747..d1c1fef 100644
> --- a/drivers/tty/isicom.c
> +++ b/drivers/tty/isicom.c
> @@ -1307,7 +1307,7 @@ static const struct tty_port_operations isicom_port_ops = {
>  	.shutdown		= isicom_shutdown,
>  };
>  
> -static int __devinit reset_card(struct pci_dev *pdev,
> +static int reset_card(struct pci_dev *pdev,
>  	const unsigned int card, unsigned int *signature)
>  {
>  	struct isi_board *board = pci_get_drvdata(pdev);
> @@ -1368,7 +1368,7 @@ end:
>  	return retval;
>  }
>  
> -static int __devinit load_firmware(struct pci_dev *pdev,
> +static int load_firmware(struct pci_dev *pdev,
>  	const unsigned int index, const unsigned int signature)
>  {
>  	struct isi_board *board = pci_get_drvdata(pdev);
> @@ -1548,7 +1548,7 @@ end:
>   */
>  static unsigned int card_count;
>  
> -static int __devinit isicom_probe(struct pci_dev *pdev,
> +static int isicom_probe(struct pci_dev *pdev,
>  	const struct pci_device_id *ent)
>  {
>  	unsigned int uninitialized_var(signature), index;
> diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c
> index c2d0cc3..0998773 100644
> --- a/drivers/tty/moxa.c
> +++ b/drivers/tty/moxa.c
> @@ -941,7 +941,7 @@ static void moxa_board_deinit(struct moxa_board_conf *brd)
>  }
>  
>  #ifdef CONFIG_PCI
> -static int __devinit moxa_pci_probe(struct pci_dev *pdev,
> +static int moxa_pci_probe(struct pci_dev *pdev,
>  		const struct pci_device_id *ent)
>  {
>  	struct moxa_board_conf *board;
> diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
> index f026797..9de9753 100644
> --- a/drivers/tty/mxser.c
> +++ b/drivers/tty/mxser.c
> @@ -487,7 +487,7 @@ static void mxser_disable_must_rx_software_flow_control(unsigned long baseio)
>  }
>  
>  #ifdef CONFIG_PCI
> -static int __devinit CheckIsMoxaMust(unsigned long io)
> +static int CheckIsMoxaMust(unsigned long io)
>  {
>  	u8 oldmcr, hwid;
>  	int i;
> @@ -2369,7 +2369,7 @@ static void mxser_release_ISA_res(struct mxser_board *brd)
>  	mxser_release_vector(brd);
>  }
>  
> -static int __devinit mxser_initbrd(struct mxser_board *brd,
> +static int mxser_initbrd(struct mxser_board *brd,
>  		struct pci_dev *pdev)
>  {
>  	struct mxser_port *info;
> @@ -2534,7 +2534,7 @@ err_irqconflict:
>  	return -EIO;
>  }
>  
> -static int __devinit mxser_probe(struct pci_dev *pdev,
> +static int mxser_probe(struct pci_dev *pdev,
>  		const struct pci_device_id *ent)
>  {
>  #ifdef CONFIG_PCI
> diff --git a/drivers/tty/nozomi.c b/drivers/tty/nozomi.c
> index dc0213e..645f54a 100644
> --- a/drivers/tty/nozomi.c
> +++ b/drivers/tty/nozomi.c
> @@ -1360,7 +1360,7 @@ static void remove_sysfs_files(struct nozomi *dc)
>  }
>  
>  /* Allocate memory for one device */
> -static int __devinit nozomi_card_init(struct pci_dev *pdev,
> +static int nozomi_card_init(struct pci_dev *pdev,
>  				      const struct pci_device_id *ent)
>  {
>  	resource_size_t start;
> diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c
> index 870c5f2..40ba8cc 100644
> --- a/drivers/tty/serial/8250/8250.c
> +++ b/drivers/tty/serial/8250/8250.c
> @@ -2989,7 +2989,7 @@ void serial8250_resume_port(int line)
>   * list is terminated with a zero flags entry, which means we expect
>   * all entries to have at least UPF_BOOT_AUTOCONF set.
>   */
> -static int __devinit serial8250_probe(struct platform_device *dev)
> +static int serial8250_probe(struct platform_device *dev)
>  {
>  	struct plat_serial8250_port *p = dev->dev.platform_data;
>  	struct uart_8250_port uart;
> diff --git a/drivers/tty/serial/8250/8250_acorn.c b/drivers/tty/serial/8250/8250_acorn.c
> index b5e4b49..ed095eb 100644
> --- a/drivers/tty/serial/8250/8250_acorn.c
> +++ b/drivers/tty/serial/8250/8250_acorn.c
> @@ -38,7 +38,7 @@ struct serial_card_info {
>  	void __iomem *vaddr;
>  };
>  
> -static int __devinit
> +static int
>  serial_card_probe(struct expansion_card *ec, const struct ecard_id *id)
>  {
>  	struct serial_card_info *info;
> diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
> index 2db80d0..7664750 100644
> --- a/drivers/tty/serial/8250/8250_dw.c
> +++ b/drivers/tty/serial/8250/8250_dw.c
> @@ -87,7 +87,7 @@ static int dw8250_handle_irq(struct uart_port *p)
>  	return 0;
>  }
>  
> -static int __devinit dw8250_probe(struct platform_device *pdev)
> +static int dw8250_probe(struct platform_device *pdev)
>  {
>  	struct uart_8250_port uart = {};
>  	struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> diff --git a/drivers/tty/serial/8250/8250_em.c b/drivers/tty/serial/8250/8250_em.c
> index 80c0a62..f59bff5 100644
> --- a/drivers/tty/serial/8250/8250_em.c
> +++ b/drivers/tty/serial/8250/8250_em.c
> @@ -89,7 +89,7 @@ static void serial8250_em_serial_dl_write(struct uart_8250_port *up, int value)
>  	serial_out(up, UART_DLM_EM, value >> 8 & 0xff);
>  }
>  
> -static int __devinit serial8250_em_probe(struct platform_device *pdev)
> +static int serial8250_em_probe(struct platform_device *pdev)
>  {
>  	struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  	struct resource *irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> diff --git a/drivers/tty/serial/8250/8250_hp300.c b/drivers/tty/serial/8250/8250_hp300.c
> index 89e8855..2b94505 100644
> --- a/drivers/tty/serial/8250/8250_hp300.c
> +++ b/drivers/tty/serial/8250/8250_hp300.c
> @@ -36,7 +36,7 @@ static struct hp300_port *hp300_ports;
>  
>  #ifdef CONFIG_HPDCA
>  
> -static int __devinit hpdca_init_one(struct dio_dev *d,
> +static int hpdca_init_one(struct dio_dev *d,
>  					const struct dio_device_id *ent);
>  static void __devexit hpdca_remove_one(struct dio_dev *d);
>  
> @@ -159,7 +159,7 @@ int __init hp300_setup_serial_console(void)
>  #endif /* CONFIG_SERIAL_8250_CONSOLE */
>  
>  #ifdef CONFIG_HPDCA
> -static int __devinit hpdca_init_one(struct dio_dev *d,
> +static int hpdca_init_one(struct dio_dev *d,
>  				const struct dio_device_id *ent)
>  {
>  	struct uart_8250_port uart;
> diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
> index c049cfa..a5acb57 100644
> --- a/drivers/tty/serial/8250/8250_pci.c
> +++ b/drivers/tty/serial/8250/8250_pci.c
> @@ -2691,7 +2691,7 @@ static const struct pci_device_id blacklist[] = {
>   * guess what the configuration might be, based on the pitiful PCI
>   * serial specs.  Returns 0 on success, 1 on failure.
>   */
> -static int __devinit
> +static int
>  serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
>  {
>  	const struct pci_device_id *bldev;
> @@ -2917,7 +2917,7 @@ EXPORT_SYMBOL_GPL(pciserial_resume_ports);
>   * Probe one serial board.  Unfortunately, there is no rhyme nor reason
>   * to the arrangement of serial ports on a PCI card.
>   */
> -static int __devinit
> +static int
>  pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
>  {
>  	struct pci_serial_quirk *quirk;
> diff --git a/drivers/tty/serial/8250/8250_pnp.c b/drivers/tty/serial/8250/8250_pnp.c
> index e566220..2b8a6ac 100644
> --- a/drivers/tty/serial/8250/8250_pnp.c
> +++ b/drivers/tty/serial/8250/8250_pnp.c
> @@ -377,7 +377,7 @@ static char *modem_names[] __devinitdata = {
>  	"33600", "28800", "14400", "V.90", "V.34", "V.32", NULL
>  };
>  
> -static int __devinit check_name(char *name)
> +static int check_name(char *name)
>  {
>  	char **tmp;
>  
> @@ -388,7 +388,7 @@ static int __devinit check_name(char *name)
>  	return 0;
>  }
>  
> -static int __devinit check_resources(struct pnp_dev *dev)
> +static int check_resources(struct pnp_dev *dev)
>  {
>  	resource_size_t base[] = {0x2f8, 0x3f8, 0x2e8, 0x3e8};
>  	int i;
> @@ -412,7 +412,7 @@ static int __devinit check_resources(struct pnp_dev *dev)
>   * PnP modems, alternatively we must hardcode all modems in pnp_devices[]
>   * table.
>   */
> -static int __devinit serial_pnp_guess_board(struct pnp_dev *dev)
> +static int serial_pnp_guess_board(struct pnp_dev *dev)
>  {
>  	if (!(check_name(pnp_dev_name(dev)) ||
>  		(dev->card && check_name(dev->card->name))))
> @@ -424,7 +424,7 @@ static int __devinit serial_pnp_guess_board(struct pnp_dev *dev)
>  	return -ENODEV;
>  }
>  
> -static int __devinit
> +static int
>  serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id)
>  {
>  	struct uart_8250_port uart;
> diff --git a/drivers/tty/serial/altera_jtaguart.c b/drivers/tty/serial/altera_jtaguart.c
> index ef16b0a..ef5c705 100644
> --- a/drivers/tty/serial/altera_jtaguart.c
> +++ b/drivers/tty/serial/altera_jtaguart.c
> @@ -406,7 +406,7 @@ static struct uart_driver altera_jtaguart_driver = {
>  	.cons		= ALTERA_JTAGUART_CONSOLE,
>  };
>  
> -static int __devinit altera_jtaguart_probe(struct platform_device *pdev)
> +static int altera_jtaguart_probe(struct platform_device *pdev)
>  {
>  	struct altera_jtaguart_platform_uart *platp = pdev->dev.platform_data;
>  	struct uart_port *port;
> diff --git a/drivers/tty/serial/altera_uart.c b/drivers/tty/serial/altera_uart.c
> index 117ea2c..066b503 100644
> --- a/drivers/tty/serial/altera_uart.c
> +++ b/drivers/tty/serial/altera_uart.c
> @@ -532,7 +532,7 @@ static int altera_uart_get_of_uartclk(struct platform_device *pdev,
>  }
>  #endif /* CONFIG_OF */
>  
> -static int __devinit altera_uart_probe(struct platform_device *pdev)
> +static int altera_uart_probe(struct platform_device *pdev)
>  {
>  	struct altera_uart_platform_uart *platp = pdev->dev.platform_data;
>  	struct uart_port *port;
> diff --git a/drivers/tty/serial/apbuart.c b/drivers/tty/serial/apbuart.c
> index 7162f70..59ae2b5 100644
> --- a/drivers/tty/serial/apbuart.c
> +++ b/drivers/tty/serial/apbuart.c
> @@ -554,7 +554,7 @@ static struct uart_driver grlib_apbuart_driver = {
>  /* OF Platform Driver                                                       */
>  /* ======================================================================== */
>  
> -static int __devinit apbuart_probe(struct platform_device *op)
> +static int apbuart_probe(struct platform_device *op)
>  {
>  	int i;
>  	struct uart_port *port = NULL;
> diff --git a/drivers/tty/serial/ar933x_uart.c b/drivers/tty/serial/ar933x_uart.c
> index 33122f9..fab0a91 100644
> --- a/drivers/tty/serial/ar933x_uart.c
> +++ b/drivers/tty/serial/ar933x_uart.c
> @@ -554,7 +554,7 @@ static struct uart_driver ar933x_uart_driver = {
>  	.cons		= AR933X_SERIAL_CONSOLE,
>  };
>  
> -static int __devinit ar933x_uart_probe(struct platform_device *pdev)
> +static int ar933x_uart_probe(struct platform_device *pdev)
>  {
>  	struct ar933x_uart_platform_data *pdata;
>  	struct ar933x_uart_port *up;
> diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c
> index d652569..158d798 100644
> --- a/drivers/tty/serial/arc_uart.c
> +++ b/drivers/tty/serial/arc_uart.c
> @@ -525,7 +525,7 @@ static struct uart_ops arc_serial_pops = {
>  #endif
>  };
>  
> -static int __devinit
> +static int
>  arc_uart_init_one(struct platform_device *pdev, struct arc_uart_port *uart)
>  {
>  	struct resource *res, *res2;
> @@ -577,7 +577,7 @@ arc_uart_init_one(struct platform_device *pdev, struct arc_uart_port *uart)
>  
>  #ifdef CONFIG_SERIAL_ARC_CONSOLE
>  
> -static int __devinit arc_serial_console_setup(struct console *co, char *options)
> +static int arc_serial_console_setup(struct console *co, char *options)
>  {
>  	struct uart_port *port;
>  	int baud = 115200;
> @@ -655,7 +655,7 @@ static struct __initdata console arc_early_serial_console = {
>  	.index = -1
>  };
>  
> -static int __devinit arc_serial_probe_earlyprintk(struct platform_device *pdev)
> +static int arc_serial_probe_earlyprintk(struct platform_device *pdev)
>  {
>  	arc_early_serial_console.index = pdev->id;
>  
> @@ -667,13 +667,13 @@ static int __devinit arc_serial_probe_earlyprintk(struct platform_device *pdev)
>  	return 0;
>  }
>  #else
> -static int __devinit arc_serial_probe_earlyprintk(struct platform_device *pdev)
> +static int arc_serial_probe_earlyprintk(struct platform_device *pdev)
>  {
>  	return -ENODEV;
>  }
>  #endif	/* CONFIG_SERIAL_ARC_CONSOLE */
>  
> -static int __devinit arc_serial_probe(struct platform_device *pdev)
> +static int arc_serial_probe(struct platform_device *pdev)
>  {
>  	struct arc_uart_port *uart;
>  	int rc;
> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
> index 7f91d08..c1f6c0b 100644
> --- a/drivers/tty/serial/atmel_serial.c
> +++ b/drivers/tty/serial/atmel_serial.c
> @@ -1424,7 +1424,7 @@ static struct uart_ops atmel_pops = {
>  #endif
>  };
>  
> -static void __devinit atmel_of_init_port(struct atmel_uart_port *atmel_port,
> +static void atmel_of_init_port(struct atmel_uart_port *atmel_port,
>  					 struct device_node *np)
>  {
>  	u32 rs485_delay[2];
> @@ -1459,7 +1459,7 @@ static void __devinit atmel_of_init_port(struct atmel_uart_port *atmel_port,
>  /*
>   * Configure the port from the platform device resource info.
>   */
> -static void __devinit atmel_init_port(struct atmel_uart_port *atmel_port,
> +static void atmel_init_port(struct atmel_uart_port *atmel_port,
>  				      struct platform_device *pdev)
>  {
>  	struct uart_port *port = &atmel_port->uart;
> @@ -1767,7 +1767,7 @@ static int atmel_serial_resume(struct platform_device *pdev)
>  #define atmel_serial_resume NULL
>  #endif
>  
> -static int __devinit atmel_serial_probe(struct platform_device *pdev)
> +static int atmel_serial_probe(struct platform_device *pdev)
>  {
>  	struct atmel_uart_port *port;
>  	struct device_node *np = pdev->dev.of_node;
> diff --git a/drivers/tty/serial/bcm63xx_uart.c b/drivers/tty/serial/bcm63xx_uart.c
> index 7f631d4..e54d170 100644
> --- a/drivers/tty/serial/bcm63xx_uart.c
> +++ b/drivers/tty/serial/bcm63xx_uart.c
> @@ -801,7 +801,7 @@ static struct uart_driver bcm_uart_driver = {
>  /*
>   * platform driver probe/remove callback
>   */
> -static int __devinit bcm_uart_probe(struct platform_device *pdev)
> +static int bcm_uart_probe(struct platform_device *pdev)
>  {
>  	struct resource *res_mem, *res_irq;
>  	struct uart_port *port;
> diff --git a/drivers/tty/serial/bfin_sport_uart.c b/drivers/tty/serial/bfin_sport_uart.c
> index b4a18c7..a47e00b 100644
> --- a/drivers/tty/serial/bfin_sport_uart.c
> +++ b/drivers/tty/serial/bfin_sport_uart.c
> @@ -740,7 +740,7 @@ static struct dev_pm_ops bfin_sport_uart_dev_pm_ops = {
>  };
>  #endif
>  
> -static int __devinit sport_uart_probe(struct platform_device *pdev)
> +static int sport_uart_probe(struct platform_device *pdev)
>  {
>  	struct resource *res;
>  	struct sport_uart_port *sport;
> diff --git a/drivers/tty/serial/clps711x.c b/drivers/tty/serial/clps711x.c
> index d631ef5..006d283 100644
> --- a/drivers/tty/serial/clps711x.c
> +++ b/drivers/tty/serial/clps711x.c
> @@ -429,7 +429,7 @@ static int uart_clps711x_console_setup(struct console *co, char *options)
>  }
>  #endif
>  
> -static int __devinit uart_clps711x_probe(struct platform_device *pdev)
> +static int uart_clps711x_probe(struct platform_device *pdev)
>  {
>  	struct clps711x_port *s;
>  	int ret, i;
> diff --git a/drivers/tty/serial/cpm_uart/cpm_uart_core.c b/drivers/tty/serial/cpm_uart/cpm_uart_core.c
> index d0dd919..de3f0f6 100644
> --- a/drivers/tty/serial/cpm_uart/cpm_uart_core.c
> +++ b/drivers/tty/serial/cpm_uart/cpm_uart_core.c
> @@ -1373,7 +1373,7 @@ static struct uart_driver cpm_reg = {
>  
>  static int probe_index;
>  
> -static int __devinit cpm_uart_probe(struct platform_device *ofdev)
> +static int cpm_uart_probe(struct platform_device *ofdev)
>  {
>  	int index = probe_index++;
>  	struct uart_cpm_port *pinfo = &cpm_uart_ports[index];
> diff --git a/drivers/tty/serial/efm32-uart.c b/drivers/tty/serial/efm32-uart.c
> index 1e8bacf..833c33a 100644
> --- a/drivers/tty/serial/efm32-uart.c
> +++ b/drivers/tty/serial/efm32-uart.c
> @@ -690,7 +690,7 @@ static int efm32_uart_probe_dt(struct platform_device *pdev,
>  
>  }
>  
> -static int __devinit efm32_uart_probe(struct platform_device *pdev)
> +static int efm32_uart_probe(struct platform_device *pdev)
>  {
>  	struct efm32_uart_port *efm_port;
>  	struct resource *res;
> diff --git a/drivers/tty/serial/icom.c b/drivers/tty/serial/icom.c
> index 82671b5..8c5ad58 100644
> --- a/drivers/tty/serial/icom.c
> +++ b/drivers/tty/serial/icom.c
> @@ -175,7 +175,7 @@ static void free_port_memory(struct icom_port *icom_port)
>  	}
>  }
>  
> -static int __devinit get_port_memory(struct icom_port *icom_port)
> +static int get_port_memory(struct icom_port *icom_port)
>  {
>  	int index;
>  	unsigned long stgAddr;
> @@ -1314,7 +1314,7 @@ static struct uart_driver icom_uart_driver = {
>  	.cons = ICOM_CONSOLE,
>  };
>  
> -static int __devinit icom_init_ports(struct icom_adapter *icom_adapter)
> +static int icom_init_ports(struct icom_adapter *icom_adapter)
>  {
>  	u32 subsystem_id = icom_adapter->subsystem_id;
>  	int i;
> @@ -1381,7 +1381,7 @@ static void icom_port_active(struct icom_port *icom_port, struct icom_adapter *i
>  			    0x8024 + 2 - 2 * (icom_port->port - 2);
>  	}
>  }
> -static int __devinit icom_load_ports(struct icom_adapter *icom_adapter)
> +static int icom_load_ports(struct icom_adapter *icom_adapter)
>  {
>  	struct icom_port *icom_port;
>  	int port_num;
> @@ -1407,7 +1407,7 @@ static int __devinit icom_load_ports(struct icom_adapter *icom_adapter)
>  	return 0;
>  }
>  
> -static int __devinit icom_alloc_adapter(struct icom_adapter
> +static int icom_alloc_adapter(struct icom_adapter
>  					**icom_adapter_ref)
>  {
>  	int adapter_count = 0;
> @@ -1487,7 +1487,7 @@ static void icom_kref_release(struct kref *kref)
>  	icom_remove_adapter(icom_adapter);
>  }
>  
> -static int __devinit icom_probe(struct pci_dev *dev,
> +static int icom_probe(struct pci_dev *dev,
>  				const struct pci_device_id *ent)
>  {
>  	int index;
> diff --git a/drivers/tty/serial/ioc3_serial.c b/drivers/tty/serial/ioc3_serial.c
> index 5ac5289..d8f1d1d 100644
> --- a/drivers/tty/serial/ioc3_serial.c
> +++ b/drivers/tty/serial/ioc3_serial.c
> @@ -2010,7 +2010,7 @@ static int ioc3uart_remove(struct ioc3_submodule *is,
>   * @idd: ioc3 driver data for this card
>   */
>  
> -static int __devinit
> +static int
>  ioc3uart_probe(struct ioc3_submodule *is, struct ioc3_driver_data *idd)
>  {
>  	struct pci_dev *pdev = idd->pdev;
> diff --git a/drivers/tty/serial/jsm/jsm_driver.c b/drivers/tty/serial/jsm/jsm_driver.c
> index bbd4592..5b57c8e 100644
> --- a/drivers/tty/serial/jsm/jsm_driver.c
> +++ b/drivers/tty/serial/jsm/jsm_driver.c
> @@ -64,7 +64,7 @@ int jsm_debug;
>  module_param(jsm_debug, int, 0);
>  MODULE_PARM_DESC(jsm_debug, "Driver debugging level");
>  
> -static int __devinit jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
> +static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
>  {
>  	int rc = 0;
>  	struct jsm_board *brd;
> diff --git a/drivers/tty/serial/jsm/jsm_tty.c b/drivers/tty/serial/jsm/jsm_tty.c
> index 7d2c1f3..4c00c55 100644
> --- a/drivers/tty/serial/jsm/jsm_tty.c
> +++ b/drivers/tty/serial/jsm/jsm_tty.c
> @@ -371,7 +371,7 @@ static struct uart_ops jsm_ops = {
>   * Init the tty subsystem.  Called once per board after board has been
>   * downloaded and init'ed.
>   */
> -int __devinit jsm_tty_init(struct jsm_board *brd)
> +int jsm_tty_init(struct jsm_board *brd)
>  {
>  	int i;
>  	void __iomem *vaddr;
> diff --git a/drivers/tty/serial/lpc32xx_hs.c b/drivers/tty/serial/lpc32xx_hs.c
> index 7b0f5b4..3651dab 100644
> --- a/drivers/tty/serial/lpc32xx_hs.c
> +++ b/drivers/tty/serial/lpc32xx_hs.c
> @@ -686,7 +686,7 @@ static struct uart_ops serial_lpc32xx_pops = {
>  /*
>   * Register a set of serial devices attached to a platform device
>   */
> -static int __devinit serial_hs_lpc32xx_probe(struct platform_device *pdev)
> +static int serial_hs_lpc32xx_probe(struct platform_device *pdev)
>  {
>  	struct lpc32xx_hsuart_port *p = &lpc32xx_hs_ports[uarts_registered];
>  	int ret = 0;
> diff --git a/drivers/tty/serial/max3100.c b/drivers/tty/serial/max3100.c
> index 2ffd7f0..8dd6189 100644
> --- a/drivers/tty/serial/max3100.c
> +++ b/drivers/tty/serial/max3100.c
> @@ -742,7 +742,7 @@ static struct uart_driver max3100_uart_driver = {
>  };
>  static int uart_driver_registered;
>  
> -static int __devinit max3100_probe(struct spi_device *spi)
> +static int max3100_probe(struct spi_device *spi)
>  {
>  	int i, retval;
>  	struct plat_max3100 *pdata;
> diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
> index a332327..88a227f 100644
> --- a/drivers/tty/serial/max310x.c
> +++ b/drivers/tty/serial/max310x.c
> @@ -378,7 +378,7 @@ static void max310x_wait_pll(struct max310x_port *s)
>  	}
>  }
>  
> -static int __devinit max310x_update_best_err(unsigned long f, long *besterr)
> +static int max310x_update_best_err(unsigned long f, long *besterr)
>  {
>  	/* Use baudrate 115200 for calculate error */
>  	long err = f % (115200 * 16);
> @@ -391,7 +391,7 @@ static int __devinit max310x_update_best_err(unsigned long f, long *besterr)
>  	return 1;
>  }
>  
> -static int __devinit max310x_set_ref_clk(struct max310x_port *s)
> +static int max310x_set_ref_clk(struct max310x_port *s)
>  {
>  	unsigned int div, clksrc, pllcfg = 0;
>  	long besterr = -1;
> @@ -995,7 +995,7 @@ static struct max310x_pdata generic_plat_data = {
>  	.frequency	= 26000000,
>  };
>  
> -static int __devinit max310x_probe(struct spi_device *spi)
> +static int max310x_probe(struct spi_device *spi)
>  {
>  	struct max310x_port *s;
>  	struct device *dev = &spi->dev;
> diff --git a/drivers/tty/serial/mcf.c b/drivers/tty/serial/mcf.c
> index e3de785..e2b93d2 100644
> --- a/drivers/tty/serial/mcf.c
> +++ b/drivers/tty/serial/mcf.c
> @@ -571,7 +571,7 @@ static struct uart_driver mcf_driver = {
>  
>  /****************************************************************************/
>  
> -static int __devinit mcf_probe(struct platform_device *pdev)
> +static int mcf_probe(struct platform_device *pdev)
>  {
>  	struct mcf_platform_uart *platp = pdev->dev.platform_data;
>  	struct uart_port *port;
> diff --git a/drivers/tty/serial/mpc52xx_uart.c b/drivers/tty/serial/mpc52xx_uart.c
> index 8cf5770..7c23c4f 100644
> --- a/drivers/tty/serial/mpc52xx_uart.c
> +++ b/drivers/tty/serial/mpc52xx_uart.c
> @@ -1308,7 +1308,7 @@ static struct of_device_id mpc52xx_uart_of_match[] = {
>  	{},
>  };
>  
> -static int __devinit mpc52xx_uart_of_probe(struct platform_device *op)
> +static int mpc52xx_uart_of_probe(struct platform_device *op)
>  {
>  	int idx = -1;
>  	unsigned int uartclk;
> diff --git a/drivers/tty/serial/mrst_max3110.c b/drivers/tty/serial/mrst_max3110.c
> index 649ce12..41497fd 100644
> --- a/drivers/tty/serial/mrst_max3110.c
> +++ b/drivers/tty/serial/mrst_max3110.c
> @@ -773,7 +773,7 @@ static int serial_m3110_resume(struct spi_device *spi)
>  #define serial_m3110_resume	NULL
>  #endif
>  
> -static int __devinit serial_m3110_probe(struct spi_device *spi)
> +static int serial_m3110_probe(struct spi_device *spi)
>  {
>  	struct uart_max3110 *max;
>  	void *buffer;
> diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
> index 1361ad5..02fb63e 100644
> --- a/drivers/tty/serial/msm_serial_hs.c
> +++ b/drivers/tty/serial/msm_serial_hs.c
> @@ -1521,7 +1521,7 @@ err_msm_hs_init_clk:
>  }
>  
>  /* Initialize tx and rx data structures */
> -static int __devinit uartdm_init_port(struct uart_port *uport)
> +static int uartdm_init_port(struct uart_port *uport)
>  {
>  	int ret = 0;
>  	struct msm_hs_port *msm_uport = UARTDM_TO_MSM(uport);
> @@ -1614,7 +1614,7 @@ err_tx_command_ptr_ptr:
>  	return ret;
>  }
>  
> -static int __devinit msm_hs_probe(struct platform_device *pdev)
> +static int msm_hs_probe(struct platform_device *pdev)
>  {
>  	int ret;
>  	struct uart_port *uport;
> diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
> index 7554045..ed09bd4 100644
> --- a/drivers/tty/serial/mxs-auart.c
> +++ b/drivers/tty/serial/mxs-auart.c
> @@ -704,7 +704,7 @@ static int serial_mxs_probe_dt(struct mxs_auart_port *s,
>  	return 0;
>  }
>  
> -static int __devinit mxs_auart_probe(struct platform_device *pdev)
> +static int mxs_auart_probe(struct platform_device *pdev)
>  {
>  	struct mxs_auart_port *s;
>  	u32 version;
> diff --git a/drivers/tty/serial/of_serial.c b/drivers/tty/serial/of_serial.c
> index b9fdccb2..1bce344 100644
> --- a/drivers/tty/serial/of_serial.c
> +++ b/drivers/tty/serial/of_serial.c
> @@ -52,7 +52,7 @@ EXPORT_SYMBOL_GPL(tegra_serial_handle_break);
>  /*
>   * Fill a struct uart_port for a given device node
>   */
> -static int __devinit of_platform_serial_setup(struct platform_device *ofdev,
> +static int of_platform_serial_setup(struct platform_device *ofdev,
>  			int type, struct uart_port *port,
>  			struct of_serial_info *info)
>  {
> @@ -138,7 +138,7 @@ out:
>   * Try to register a serial port
>   */
>  static struct of_device_id of_platform_serial_table[];
> -static int __devinit of_platform_serial_probe(struct platform_device *ofdev)
> +static int of_platform_serial_probe(struct platform_device *ofdev)
>  {
>  	const struct of_device_id *match;
>  	struct of_serial_info *info;
> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
> index 624e6b5..1e988f7 100644
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -1307,7 +1307,7 @@ static int serial_omap_resume(struct device *dev)
>  }
>  #endif
>  
> -static void __devinit omap_serial_fill_features_erratas(struct uart_omap_port *up)
> +static void omap_serial_fill_features_erratas(struct uart_omap_port *up)
>  {
>  	u32 mvr, scheme;
>  	u16 revision, major, minor;
> @@ -1360,7 +1360,7 @@ static void __devinit omap_serial_fill_features_erratas(struct uart_omap_port *u
>  	}
>  }
>  
> -static __devinit struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
> +static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
>  {
>  	struct omap_uart_port_info *omap_up_info;
>  
> @@ -1373,7 +1373,7 @@ static __devinit struct omap_uart_port_info *of_get_uart_port_info(struct device
>  	return omap_up_info;
>  }
>  
> -static int __devinit serial_omap_probe(struct platform_device *pdev)
> +static int serial_omap_probe(struct platform_device *pdev)
>  {
>  	struct uart_omap_port	*up;
>  	struct resource		*mem, *irq;
> diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
> index f5fb9bd..8318925 100644
> --- a/drivers/tty/serial/pch_uart.c
> +++ b/drivers/tty/serial/pch_uart.c
> @@ -1839,7 +1839,7 @@ static DEFINE_PCI_DEVICE_TABLE(pch_uart_pci_id) = {
>  	{0,},
>  };
>  
> -static int __devinit pch_uart_pci_probe(struct pci_dev *pdev,
> +static int pch_uart_pci_probe(struct pci_dev *pdev,
>  					const struct pci_device_id *id)
>  {
>  	int ret;
> diff --git a/drivers/tty/serial/sa1100.c b/drivers/tty/serial/sa1100.c
> index 2ca5959..da56c8a 100644
> --- a/drivers/tty/serial/sa1100.c
> +++ b/drivers/tty/serial/sa1100.c
> @@ -637,7 +637,7 @@ static void __init sa1100_init_ports(void)
>  	PPSR |= PPC_TXD1 | PPC_TXD3;
>  }
>  
> -void __devinit sa1100_register_uart_fns(struct sa1100_port_fns *fns)
> +void sa1100_register_uart_fns(struct sa1100_port_fns *fns)
>  {
>  	if (fns->get_mctrl)
>  		sa1100_pops.get_mctrl = fns->get_mctrl;
> diff --git a/drivers/tty/serial/sc26xx.c b/drivers/tty/serial/sc26xx.c
> index 9a40659..aced1dd 100644
> --- a/drivers/tty/serial/sc26xx.c
> +++ b/drivers/tty/serial/sc26xx.c
> @@ -621,7 +621,7 @@ static u8 sc26xx_flags2mask(unsigned int flags, unsigned int bitpos)
>  	return bit ? (1 << (bit - 1)) : 0;
>  }
>  
> -static void __devinit sc26xx_init_masks(struct uart_sc26xx_port *up,
> +static void sc26xx_init_masks(struct uart_sc26xx_port *up,
>  					int line, unsigned int data)
>  {
>  	up->dtr_mask[line] = sc26xx_flags2mask(data,  0);
> @@ -632,7 +632,7 @@ static void __devinit sc26xx_init_masks(struct uart_sc26xx_port *up,
>  	up->ri_mask[line]  = sc26xx_flags2mask(data, 20);
>  }
>  
> -static int __devinit sc26xx_probe(struct platform_device *dev)
> +static int sc26xx_probe(struct platform_device *dev)
>  {
>  	struct resource *res;
>  	struct uart_sc26xx_port *up;
> diff --git a/drivers/tty/serial/sccnxp.c b/drivers/tty/serial/sccnxp.c
> index 810853f..1ddace8 100644
> --- a/drivers/tty/serial/sccnxp.c
> +++ b/drivers/tty/serial/sccnxp.c
> @@ -740,7 +740,7 @@ static int sccnxp_console_setup(struct console *co, char *options)
>  }
>  #endif
>  
> -static int __devinit sccnxp_probe(struct platform_device *pdev)
> +static int sccnxp_probe(struct platform_device *pdev)
>  {
>  	struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  	int chiptype = pdev->id_entry->driver_data;
> diff --git a/drivers/tty/serial/serial_txx9.c b/drivers/tty/serial/serial_txx9.c
> index 9d979a9..23b28b8 100644
> --- a/drivers/tty/serial/serial_txx9.c
> +++ b/drivers/tty/serial/serial_txx9.c
> @@ -1030,7 +1030,7 @@ static DEFINE_MUTEX(serial_txx9_mutex);
>   *
>   *	On success the port is ready to use and the line number is returned.
>   */
> -static int __devinit serial_txx9_register_port(struct uart_port *port)
> +static int serial_txx9_register_port(struct uart_port *port)
>  {
>  	int i;
>  	struct uart_txx9_port *uart;
> @@ -1096,7 +1096,7 @@ static void __devexit serial_txx9_unregister_port(int line)
>  /*
>   * Register a set of serial devices attached to a platform device.
>   */
> -static int __devinit serial_txx9_probe(struct platform_device *dev)
> +static int serial_txx9_probe(struct platform_device *dev)
>  {
>  	struct uart_port *p = dev->dev.platform_data;
>  	struct uart_port port;
> @@ -1187,7 +1187,7 @@ static struct platform_driver serial_txx9_plat_driver = {
>   * Probe one serial board.  Unfortunately, there is no rhyme nor reason
>   * to the arrangement of serial ports on a PCI card.
>   */
> -static int __devinit
> +static int
>  pciserial_txx9_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
>  {
>  	struct uart_port port;
> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> index 6ee5900..390fdc7 100644
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -1132,7 +1132,7 @@ static const char *sci_gpio_str(unsigned int index)
>  	return sci_gpio_names[index];
>  }
>  
> -static void __devinit sci_init_gpios(struct sci_port *port)
> +static void sci_init_gpios(struct sci_port *port)
>  {
>  	struct uart_port *up = &port->port;
>  	int i;
> @@ -2064,7 +2064,7 @@ static struct uart_ops sci_uart_ops = {
>  #endif
>  };
>  
> -static int __devinit sci_init_single(struct platform_device *dev,
> +static int sci_init_single(struct platform_device *dev,
>  				     struct sci_port *sci_port,
>  				     unsigned int index,
>  				     struct plat_sci_port *p)
> @@ -2220,7 +2220,7 @@ static void serial_console_write(struct console *co, const char *s,
>  	sci_port_disable(sci_port);
>  }
>  
> -static int __devinit serial_console_setup(struct console *co, char *options)
> +static int serial_console_setup(struct console *co, char *options)
>  {
>  	struct sci_port *sci_port;
>  	struct uart_port *port;
> @@ -2278,7 +2278,7 @@ static struct console early_serial_console = {
>  
>  static char early_serial_buf[32];
>  
> -static int __devinit sci_probe_earlyprintk(struct platform_device *pdev)
> +static int sci_probe_earlyprintk(struct platform_device *pdev)
>  {
>  	struct plat_sci_port *cfg = pdev->dev.platform_data;
>  
> @@ -2341,7 +2341,7 @@ static int sci_runtime_resume(struct device *dev)
>  #define SCI_CONSOLE	(&serial_console)
>  
>  #else
> -static inline int __devinit sci_probe_earlyprintk(struct platform_device *pdev)
> +static inline int sci_probe_earlyprintk(struct platform_device *pdev)
>  {
>  	return -EINVAL;
>  }
> @@ -2379,7 +2379,7 @@ static int sci_remove(struct platform_device *dev)
>  	return 0;
>  }
>  
> -static int __devinit sci_probe_single(struct platform_device *dev,
> +static int sci_probe_single(struct platform_device *dev,
>  				      unsigned int index,
>  				      struct plat_sci_port *p,
>  				      struct sci_port *sciport)
> @@ -2409,7 +2409,7 @@ static int __devinit sci_probe_single(struct platform_device *dev,
>  	return 0;
>  }
>  
> -static int __devinit sci_probe(struct platform_device *dev)
> +static int sci_probe(struct platform_device *dev)
>  {
>  	struct plat_sci_port *p = dev->dev.platform_data;
>  	struct sci_port *sp = &sci_ports[dev->id];
> diff --git a/drivers/tty/serial/sunhv.c b/drivers/tty/serial/sunhv.c
> index 949b2d3..cb58867 100644
> --- a/drivers/tty/serial/sunhv.c
> +++ b/drivers/tty/serial/sunhv.c
> @@ -519,7 +519,7 @@ static struct console sunhv_console = {
>  	.data	=	&sunhv_reg,
>  };
>  
> -static int __devinit hv_probe(struct platform_device *op)
> +static int hv_probe(struct platform_device *op)
>  {
>  	struct uart_port *port;
>  	unsigned long minor;
> diff --git a/drivers/tty/serial/sunsab.c b/drivers/tty/serial/sunsab.c
> index bbb07bc..9a13c54 100644
> --- a/drivers/tty/serial/sunsab.c
> +++ b/drivers/tty/serial/sunsab.c
> @@ -954,7 +954,7 @@ static inline struct console *SUNSAB_CONSOLE(void)
>  #define sunsab_console_init()	do { } while (0)
>  #endif
>  
> -static int __devinit sunsab_init_one(struct uart_sunsab_port *up,
> +static int sunsab_init_one(struct uart_sunsab_port *up,
>  				     struct platform_device *op,
>  				     unsigned long offset,
>  				     int line)
> @@ -1007,7 +1007,7 @@ static int __devinit sunsab_init_one(struct uart_sunsab_port *up,
>  	return 0;
>  }
>  
> -static int __devinit sab_probe(struct platform_device *op)
> +static int sab_probe(struct platform_device *op)
>  {
>  	static int inst;
>  	struct uart_sunsab_port *up;
> diff --git a/drivers/tty/serial/sunsu.c b/drivers/tty/serial/sunsu.c
> index c0658f0..049bbc5 100644
> --- a/drivers/tty/serial/sunsu.c
> +++ b/drivers/tty/serial/sunsu.c
> @@ -1185,7 +1185,7 @@ static struct uart_driver sunsu_reg = {
>  	.major			= TTY_MAJOR,
>  };
>  
> -static int __devinit sunsu_kbd_ms_init(struct uart_sunsu_port *up)
> +static int sunsu_kbd_ms_init(struct uart_sunsu_port *up)
>  {
>  	int quot, baud;
>  #ifdef CONFIG_SERIO
> @@ -1391,7 +1391,7 @@ static inline struct console *SUNSU_CONSOLE(void)
>  #define sunsu_serial_console_init()	do { } while (0)
>  #endif
>  
> -static enum su_type __devinit su_get_type(struct device_node *dp)
> +static enum su_type su_get_type(struct device_node *dp)
>  {
>  	struct device_node *ap = of_find_node_by_path("/aliases");
>  
> @@ -1412,7 +1412,7 @@ static enum su_type __devinit su_get_type(struct device_node *dp)
>  	return SU_PORT_PORT;
>  }
>  
> -static int __devinit su_probe(struct platform_device *op)
> +static int su_probe(struct platform_device *op)
>  {
>  	static int inst;
>  	struct device_node *dp = op->dev.of_node;
> diff --git a/drivers/tty/serial/sunzilog.c b/drivers/tty/serial/sunzilog.c
> index c2ef475..02c058f 100644
> --- a/drivers/tty/serial/sunzilog.c
> +++ b/drivers/tty/serial/sunzilog.c
> @@ -1282,7 +1282,7 @@ static inline struct console *SUNZILOG_CONSOLE(void)
>  #define SUNZILOG_CONSOLE()	(NULL)
>  #endif
>  
> -static void __devinit sunzilog_init_kbdms(struct uart_sunzilog_port *up)
> +static void sunzilog_init_kbdms(struct uart_sunzilog_port *up)
>  {
>  	int baud, brg;
>  
> @@ -1302,7 +1302,7 @@ static void __devinit sunzilog_init_kbdms(struct uart_sunzilog_port *up)
>  }
>  
>  #ifdef CONFIG_SERIO
> -static void __devinit sunzilog_register_serio(struct uart_sunzilog_port *up)
> +static void sunzilog_register_serio(struct uart_sunzilog_port *up)
>  {
>  	struct serio *serio = &up->serio;
>  
> @@ -1331,7 +1331,7 @@ static void __devinit sunzilog_register_serio(struct uart_sunzilog_port *up)
>  }
>  #endif
>  
> -static void __devinit sunzilog_init_hw(struct uart_sunzilog_port *up)
> +static void sunzilog_init_hw(struct uart_sunzilog_port *up)
>  {
>  	struct zilog_channel __iomem *channel;
>  	unsigned long flags;
> @@ -1400,7 +1400,7 @@ static void __devinit sunzilog_init_hw(struct uart_sunzilog_port *up)
>  
>  static int zilog_irq;
>  
> -static int __devinit zs_probe(struct platform_device *op)
> +static int zs_probe(struct platform_device *op)
>  {
>  	static int kbm_inst, uart_inst;
>  	int inst;
> diff --git a/drivers/tty/serial/timbuart.c b/drivers/tty/serial/timbuart.c
> index 5fc11f2..c833f50 100644
> --- a/drivers/tty/serial/timbuart.c
> +++ b/drivers/tty/serial/timbuart.c
> @@ -426,7 +426,7 @@ static struct uart_driver timbuart_driver = {
>  	.nr = 1
>  };
>  
> -static int __devinit timbuart_probe(struct platform_device *dev)
> +static int timbuart_probe(struct platform_device *dev)
>  {
>  	int err, irq;
>  	struct timbuart_port *uart;
> diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c
> index 1d44383..df9eeb4 100644
> --- a/drivers/tty/serial/uartlite.c
> +++ b/drivers/tty/serial/uartlite.c
> @@ -408,7 +408,7 @@ static void ulite_console_write(struct console *co, const char *s,
>  		spin_unlock_irqrestore(&port->lock, flags);
>  }
>  
> -static int __devinit ulite_console_setup(struct console *co, char *options)
> +static int ulite_console_setup(struct console *co, char *options)
>  {
>  	struct uart_port *port;
>  	int baud = 9600;
> @@ -486,7 +486,7 @@ static struct uart_driver ulite_uart_driver = {
>   *
>   * Returns: 0 on success, <0 otherwise
>   */
> -static int __devinit ulite_assign(struct device *dev, int id, u32 base, int irq)
> +static int ulite_assign(struct device *dev, int id, u32 base, int irq)
>  {
>  	struct uart_port *port;
>  	int rc;
> @@ -570,7 +570,7 @@ static struct of_device_id ulite_of_match[] __devinitdata = {
>  MODULE_DEVICE_TABLE(of, ulite_of_match);
>  #endif /* CONFIG_OF */
>  
> -static int __devinit ulite_probe(struct platform_device *pdev)
> +static int ulite_probe(struct platform_device *pdev)
>  {
>  	struct resource *res, *res2;
>  	int id = pdev->id;
> diff --git a/drivers/tty/serial/vr41xx_siu.c b/drivers/tty/serial/vr41xx_siu.c
> index 9d3bf75..c046c99 100644
> --- a/drivers/tty/serial/vr41xx_siu.c
> +++ b/drivers/tty/serial/vr41xx_siu.c
> @@ -823,7 +823,7 @@ static struct console siu_console = {
>  	.data	= &siu_uart_driver,
>  };
>  
> -static int __devinit siu_console_init(void)
> +static int siu_console_init(void)
>  {
>  	struct uart_port *port;
>  	int i;
> @@ -867,7 +867,7 @@ static struct uart_driver siu_uart_driver = {
>  	.cons		= SERIAL_VR41XX_CONSOLE,
>  };
>  
> -static int __devinit siu_probe(struct platform_device *dev)
> +static int siu_probe(struct platform_device *dev)
>  {
>  	struct uart_port *port;
>  	int num, i, retval;
> diff --git a/drivers/tty/serial/vt8500_serial.c b/drivers/tty/serial/vt8500_serial.c
> index dbcc909..80530c7 100644
> --- a/drivers/tty/serial/vt8500_serial.c
> +++ b/drivers/tty/serial/vt8500_serial.c
> @@ -554,7 +554,7 @@ static struct uart_driver vt8500_uart_driver = {
>  	.cons		= VT8500_CONSOLE,
>  };
>  
> -static int __devinit vt8500_serial_probe(struct platform_device *pdev)
> +static int vt8500_serial_probe(struct platform_device *pdev)
>  {
>  	struct vt8500_port *vt8500_port;
>  	struct resource *mmres, *irqres;
> diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
> index b627363..6e9ce65 100644
> --- a/drivers/tty/serial/xilinx_uartps.c
> +++ b/drivers/tty/serial/xilinx_uartps.c
> @@ -939,7 +939,7 @@ static struct uart_driver xuartps_uart_driver = {
>   *
>   * Returns 0 on success, negative error otherwise
>   **/
> -static int __devinit xuartps_probe(struct platform_device *pdev)
> +static int xuartps_probe(struct platform_device *pdev)
>  {
>  	int rc;
>  	struct uart_port *port;
> diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c
> index 65b8669..87ba4ca 100644
> --- a/drivers/tty/synclink.c
> +++ b/drivers/tty/synclink.c
> @@ -8064,7 +8064,7 @@ static void hdlcdev_exit(struct mgsl_struct *info)
>  #endif /* CONFIG_HDLC */
>  
>  
> -static int __devinit synclink_init_one (struct pci_dev *dev,
> +static int synclink_init_one (struct pci_dev *dev,
>  					const struct pci_device_id *ent)
>  {
>  	struct mgsl_struct *info;
> diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c
> index 28a2ccf..cdd1ba7 100644
> --- a/drivers/tty/synclink_gt.c
> +++ b/drivers/tty/synclink_gt.c
> @@ -3696,7 +3696,7 @@ static void device_init(int adapter_num, struct pci_dev *pdev)
>  	}
>  }
>  
> -static int __devinit init_one(struct pci_dev *dev,
> +static int init_one(struct pci_dev *dev,
>  			      const struct pci_device_id *ent)
>  {
>  	if (pci_enable_device(dev)) {
> diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c
> index 3e56e1e..17454da 100644
> --- a/drivers/tty/synclinkmp.c
> +++ b/drivers/tty/synclinkmp.c
> @@ -5592,7 +5592,7 @@ static void write_control_reg(SLMP_INFO * info)
>  }
>  
>  
> -static int __devinit synclinkmp_init_one (struct pci_dev *dev,
> +static int synclinkmp_init_one (struct pci_dev *dev,
>  					  const struct pci_device_id *ent)
>  {
>  	if (pci_enable_device(dev)) {
> 


-- 
Nicolas Ferre

^ permalink raw reply

* Re: [PATCH 119/493] usb: remove use of __devexit_p
From: Nicolas Ferre @ 2012-11-20  9:29 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: Kukjin Kim, Wan ZongShun, Alexander Shishkin, gregkh, linux-usb,
	Felipe Balbi, linux-samsung-soc, Alan Stern, Ben Dooks,
	linux-omap, linuxppc-dev, linux-arm-kernel
In-Reply-To: <1353349642-3677-119-git-send-email-wfp5p@virginia.edu>

On 11/19/2012 07:21 PM, Bill Pemberton :
> CONFIG_HOTPLUG is going away as an option so __devexit_p is no longer
> needed.
> 
> Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
> Cc: Peter Korsgaard <jacmet@sunsite.dk> 
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> 
> Cc: Felipe Balbi <balbi@ti.com> 
> Cc: Li Yang <leoli@freescale.com> 
> Cc: Alan Stern <stern@rowland.harvard.edu> 
> Cc: Wan ZongShun <mcuos.com@gmail.com> 
> Cc: Ben Dooks <ben-linux@fluff.org> 
> Cc: Kukjin Kim <kgene.kim@samsung.com> 
> Cc: linux-usb@vger.kernel.org 
> Cc: linux-omap@vger.kernel.org 
> Cc: linuxppc-dev@lists.ozlabs.org 
> Cc: linux-arm-kernel@lists.infradead.org 
> Cc: linux-samsung-soc@vger.kernel.org 

[..]

>  drivers/usb/host/ehci-atmel.c        | 2 +-

>  drivers/usb/host/ohci-at91.c         | 2 +-

For Atmel:

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

[..]

> diff --git a/drivers/usb/c67x00/c67x00-drv.c b/drivers/usb/c67x00/c67x00-drv.c
> index 6f3b6e2..855d538 100644
> --- a/drivers/usb/c67x00/c67x00-drv.c
> +++ b/drivers/usb/c67x00/c67x00-drv.c
> @@ -219,7 +219,7 @@ static int __devexit c67x00_drv_remove(struct platform_device *pdev)
>  
>  static struct platform_driver c67x00_driver = {
>  	.probe	= c67x00_drv_probe,
> -	.remove	= __devexit_p(c67x00_drv_remove),
> +	.remove	= c67x00_drv_remove,
>  	.driver	= {
>  		.owner = THIS_MODULE,
>  		.name = "c67x00",
> diff --git a/drivers/usb/chipidea/ci13xxx_imx.c b/drivers/usb/chipidea/ci13xxx_imx.c
> index 0f5ca4b..5659730 100644
> --- a/drivers/usb/chipidea/ci13xxx_imx.c
> +++ b/drivers/usb/chipidea/ci13xxx_imx.c
> @@ -252,7 +252,7 @@ MODULE_DEVICE_TABLE(of, ci13xxx_imx_dt_ids);
>  
>  static struct platform_driver ci13xxx_imx_driver = {
>  	.probe = ci13xxx_imx_probe,
> -	.remove = __devexit_p(ci13xxx_imx_remove),
> +	.remove = ci13xxx_imx_remove,
>  	.driver = {
>  		.name = "imx_usb",
>  		.owner = THIS_MODULE,
> diff --git a/drivers/usb/chipidea/ci13xxx_msm.c b/drivers/usb/chipidea/ci13xxx_msm.c
> index b01feb3..406c5af 100644
> --- a/drivers/usb/chipidea/ci13xxx_msm.c
> +++ b/drivers/usb/chipidea/ci13xxx_msm.c
> @@ -89,7 +89,7 @@ static int __devexit ci13xxx_msm_remove(struct platform_device *pdev)
>  
>  static struct platform_driver ci13xxx_msm_driver = {
>  	.probe = ci13xxx_msm_probe,
> -	.remove = __devexit_p(ci13xxx_msm_remove),
> +	.remove = ci13xxx_msm_remove,
>  	.driver = { .name = "msm_hsusb", },
>  };
>  
> diff --git a/drivers/usb/chipidea/ci13xxx_pci.c b/drivers/usb/chipidea/ci13xxx_pci.c
> index 918e149..e1cb2fb 100644
> --- a/drivers/usb/chipidea/ci13xxx_pci.c
> +++ b/drivers/usb/chipidea/ci13xxx_pci.c
> @@ -147,7 +147,7 @@ static struct pci_driver ci13xxx_pci_driver = {
>  	.name         =	UDC_DRIVER_NAME,
>  	.id_table     =	ci13xxx_pci_id_table,
>  	.probe        =	ci13xxx_pci_probe,
> -	.remove       =	__devexit_p(ci13xxx_pci_remove),
> +	.remove       =	ci13xxx_pci_remove,
>  };
>  
>  module_pci_driver(ci13xxx_pci_driver);
> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> index f69d029..46f23f2 100644
> --- a/drivers/usb/chipidea/core.c
> +++ b/drivers/usb/chipidea/core.c
> @@ -523,7 +523,7 @@ static int __devexit ci_hdrc_remove(struct platform_device *pdev)
>  
>  static struct platform_driver ci_hdrc_driver = {
>  	.probe	= ci_hdrc_probe,
> -	.remove	= __devexit_p(ci_hdrc_remove),
> +	.remove	= ci_hdrc_remove,
>  	.driver	= {
>  		.name	= "ci_hdrc",
>  	},
> diff --git a/drivers/usb/chipidea/usbmisc_imx6q.c b/drivers/usb/chipidea/usbmisc_imx6q.c
> index 416e3fc..81238a4 100644
> --- a/drivers/usb/chipidea/usbmisc_imx6q.c
> +++ b/drivers/usb/chipidea/usbmisc_imx6q.c
> @@ -136,7 +136,7 @@ static int __devexit usbmisc_imx6q_remove(struct platform_device *pdev)
>  
>  static struct platform_driver usbmisc_imx6q_driver = {
>  	.probe = usbmisc_imx6q_probe,
> -	.remove = __devexit_p(usbmisc_imx6q_remove),
> +	.remove = usbmisc_imx6q_remove,
>  	.driver = {
>  		.name = "usbmisc_imx6q",
>  		.owner = THIS_MODULE,
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index e71a62a..1a02442 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -583,7 +583,7 @@ static int __devexit dwc3_remove(struct platform_device *pdev)
>  
>  static struct platform_driver dwc3_driver = {
>  	.probe		= dwc3_probe,
> -	.remove		= __devexit_p(dwc3_remove),
> +	.remove		= dwc3_remove,
>  	.driver		= {
>  		.name	= "dwc3",
>  	},
> diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
> index dc35c54..19a9818 100644
> --- a/drivers/usb/dwc3/dwc3-exynos.c
> +++ b/drivers/usb/dwc3/dwc3-exynos.c
> @@ -196,7 +196,7 @@ MODULE_DEVICE_TABLE(of, exynos_dwc3_match);
>  
>  static struct platform_driver dwc3_exynos_driver = {
>  	.probe		= dwc3_exynos_probe,
> -	.remove		= __devexit_p(dwc3_exynos_remove),
> +	.remove		= dwc3_exynos_remove,
>  	.driver		= {
>  		.name	= "exynos-dwc3",
>  		.of_match_table = of_match_ptr(exynos_dwc3_match),
> diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
> index 900d435f..afbc6e9 100644
> --- a/drivers/usb/dwc3/dwc3-omap.c
> +++ b/drivers/usb/dwc3/dwc3-omap.c
> @@ -441,7 +441,7 @@ MODULE_DEVICE_TABLE(of, of_dwc3_matach);
>  
>  static struct platform_driver dwc3_omap_driver = {
>  	.probe		= dwc3_omap_probe,
> -	.remove		= __devexit_p(dwc3_omap_remove),
> +	.remove		= dwc3_omap_remove,
>  	.driver		= {
>  		.name	= "omap-dwc3",
>  		.of_match_table	= of_dwc3_matach,
> diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
> index 1396259..b3eeec7 100644
> --- a/drivers/usb/dwc3/dwc3-pci.c
> +++ b/drivers/usb/dwc3/dwc3-pci.c
> @@ -218,7 +218,7 @@ static struct pci_driver dwc3_pci_driver = {
>  	.name		= "dwc3-pci",
>  	.id_table	= dwc3_pci_id_table,
>  	.probe		= dwc3_pci_probe,
> -	.remove		= __devexit_p(dwc3_pci_remove),
> +	.remove		= dwc3_pci_remove,
>  };
>  
>  MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
> diff --git a/drivers/usb/gadget/bcm63xx_udc.c b/drivers/usb/gadget/bcm63xx_udc.c
> index 9ca7922..b44e436 100644
> --- a/drivers/usb/gadget/bcm63xx_udc.c
> +++ b/drivers/usb/gadget/bcm63xx_udc.c
> @@ -2450,7 +2450,7 @@ static int __devexit bcm63xx_udc_remove(struct platform_device *pdev)
>  
>  static struct platform_driver bcm63xx_udc_driver = {
>  	.probe		= bcm63xx_udc_probe,
> -	.remove		= __devexit_p(bcm63xx_udc_remove),
> +	.remove		= bcm63xx_udc_remove,
>  	.driver		= {
>  		.name	= DRV_MODULE_NAME,
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c
> index b09452d..21db1f7 100644
> --- a/drivers/usb/gadget/fsl_qe_udc.c
> +++ b/drivers/usb/gadget/fsl_qe_udc.c
> @@ -2735,7 +2735,7 @@ static struct platform_driver udc_driver = {
>  		.of_match_table = qe_udc_match,
>  	},
>  	.probe          = qe_udc_probe,
> -	.remove         = __devexit_p(qe_udc_remove),
> +	.remove         = qe_udc_remove,
>  #ifdef CONFIG_PM
>  	.suspend        = qe_udc_suspend,
>  	.resume         = qe_udc_resume,
> diff --git a/drivers/usb/gadget/hid.c b/drivers/usb/gadget/hid.c
> index 74130f6..33deed6 100644
> --- a/drivers/usb/gadget/hid.c
> +++ b/drivers/usb/gadget/hid.c
> @@ -229,7 +229,7 @@ static __refdata struct usb_composite_driver hidg_driver = {
>  };
>  
>  static struct platform_driver hidg_plat_driver = {
> -	.remove		= __devexit_p(hidg_plat_driver_remove),
> +	.remove		= hidg_plat_driver_remove,
>  	.driver		= {
>  		.owner	= THIS_MODULE,
>  		.name	= "hidg",
> diff --git a/drivers/usb/gadget/lpc32xx_udc.c b/drivers/usb/gadget/lpc32xx_udc.c
> index d1cf1f4..52ad15c 100644
> --- a/drivers/usb/gadget/lpc32xx_udc.c
> +++ b/drivers/usb/gadget/lpc32xx_udc.c
> @@ -3447,7 +3447,7 @@ MODULE_DEVICE_TABLE(of, lpc32xx_udc_of_match);
>  #endif
>  
>  static struct platform_driver lpc32xx_udc_driver = {
> -	.remove		= __devexit_p(lpc32xx_udc_remove),
> +	.remove		= lpc32xx_udc_remove,
>  	.shutdown	= lpc32xx_udc_shutdown,
>  	.suspend	= lpc32xx_udc_suspend,
>  	.resume		= lpc32xx_udc_resume,
> diff --git a/drivers/usb/gadget/net2272.c b/drivers/usb/gadget/net2272.c
> index c009263..26c3053 100644
> --- a/drivers/usb/gadget/net2272.c
> +++ b/drivers/usb/gadget/net2272.c
> @@ -2575,7 +2575,7 @@ static struct pci_driver net2272_pci_driver = {
>  	.id_table = pci_ids,
>  
>  	.probe    = net2272_pci_probe,
> -	.remove   = __devexit_p(net2272_pci_remove),
> +	.remove   = net2272_pci_remove,
>  };
>  
>  static int net2272_pci_register(void)
> @@ -2678,7 +2678,7 @@ net2272_plat_remove(struct platform_device *pdev)
>  
>  static struct platform_driver net2272_plat_driver = {
>  	.probe   = net2272_plat_probe,
> -	.remove  = __devexit_p(net2272_plat_remove),
> +	.remove  = net2272_plat_remove,
>  	.driver  = {
>  		.name  = driver_name,
>  		.owner = THIS_MODULE,
> diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c
> index 23afa06..650fa23 100644
> --- a/drivers/usb/gadget/omap_udc.c
> +++ b/drivers/usb/gadget/omap_udc.c
> @@ -3062,7 +3062,7 @@ static int omap_udc_resume(struct platform_device *dev)
>  
>  static struct platform_driver udc_driver = {
>  	.probe		= omap_udc_probe,
> -	.remove		= __devexit_p(omap_udc_remove),
> +	.remove		= omap_udc_remove,
>  	.suspend	= omap_udc_suspend,
>  	.resume		= omap_udc_resume,
>  	.driver		= {
> diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
> index 6f696ee..9fd6e5f 100644
> --- a/drivers/usb/gadget/s3c-hsotg.c
> +++ b/drivers/usb/gadget/s3c-hsotg.c
> @@ -3708,7 +3708,7 @@ static struct platform_driver s3c_hsotg_driver = {
>  		.owner	= THIS_MODULE,
>  	},
>  	.probe		= s3c_hsotg_probe,
> -	.remove		= __devexit_p(s3c_hsotg_remove),
> +	.remove		= s3c_hsotg_remove,
>  	.suspend	= s3c_hsotg_suspend,
>  	.resume		= s3c_hsotg_resume,
>  };
> diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
> index 443da21..f5143a0 100644
> --- a/drivers/usb/host/bcma-hcd.c
> +++ b/drivers/usb/host/bcma-hcd.c
> @@ -316,7 +316,7 @@ static struct bcma_driver bcma_hcd_driver = {
>  	.name		= KBUILD_MODNAME,
>  	.id_table	= bcma_hcd_table,
>  	.probe		= bcma_hcd_probe,
> -	.remove		= __devexit_p(bcma_hcd_remove),
> +	.remove		= bcma_hcd_remove,
>  	.shutdown	= bcma_hcd_shutdown,
>  	.suspend	= bcma_hcd_suspend,
>  	.resume		= bcma_hcd_resume,
> diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c
> index d23321e..33f798e 100644
> --- a/drivers/usb/host/ehci-atmel.c
> +++ b/drivers/usb/host/ehci-atmel.c
> @@ -207,7 +207,7 @@ MODULE_DEVICE_TABLE(of, atmel_ehci_dt_ids);
>  
>  static struct platform_driver ehci_atmel_driver = {
>  	.probe		= ehci_atmel_drv_probe,
> -	.remove		= __devexit_p(ehci_atmel_drv_remove),
> +	.remove		= ehci_atmel_drv_remove,
>  	.shutdown	= usb_hcd_platform_shutdown,
>  	.driver		= {
>  		.name	= "atmel-ehci",
> diff --git a/drivers/usb/host/ehci-msm.c b/drivers/usb/host/ehci-msm.c
> index 7fa1ba4..e0acfd5 100644
> --- a/drivers/usb/host/ehci-msm.c
> +++ b/drivers/usb/host/ehci-msm.c
> @@ -220,7 +220,7 @@ static const struct dev_pm_ops ehci_msm_dev_pm_ops = {
>  
>  static struct platform_driver ehci_msm_driver = {
>  	.probe	= ehci_msm_probe,
> -	.remove	= __devexit_p(ehci_msm_remove),
> +	.remove	= ehci_msm_remove,
>  	.driver = {
>  		   .name = "msm_hsusb_host",
>  		   .pm = &ehci_msm_dev_pm_ops,
> diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
> index f14c542..b807648 100644
> --- a/drivers/usb/host/ehci-platform.c
> +++ b/drivers/usb/host/ehci-platform.c
> @@ -196,7 +196,7 @@ static const struct dev_pm_ops ehci_platform_pm_ops = {
>  static struct platform_driver ehci_platform_driver = {
>  	.id_table	= ehci_platform_table,
>  	.probe		= ehci_platform_probe,
> -	.remove		= __devexit_p(ehci_platform_remove),
> +	.remove		= ehci_platform_remove,
>  	.shutdown	= usb_hcd_platform_shutdown,
>  	.driver		= {
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c
> index abc178d..f90a881 100644
> --- a/drivers/usb/host/ehci-s5p.c
> +++ b/drivers/usb/host/ehci-s5p.c
> @@ -274,7 +274,7 @@ MODULE_DEVICE_TABLE(of, exynos_ehci_match);
>  
>  static struct platform_driver s5p_ehci_driver = {
>  	.probe		= s5p_ehci_probe,
> -	.remove		= __devexit_p(s5p_ehci_remove),
> +	.remove		= s5p_ehci_remove,
>  	.shutdown	= s5p_ehci_shutdown,
>  	.driver = {
>  		.name	= "s5p-ehci",
> diff --git a/drivers/usb/host/ehci-w90x900.c b/drivers/usb/host/ehci-w90x900.c
> index fdd7c48..7bcb8b2 100644
> --- a/drivers/usb/host/ehci-w90x900.c
> +++ b/drivers/usb/host/ehci-w90x900.c
> @@ -166,7 +166,7 @@ static int __devexit ehci_w90x900_remove(struct platform_device *pdev)
>  
>  static struct platform_driver ehci_hcd_w90x900_driver = {
>  	.probe  = ehci_w90x900_probe,
> -	.remove = __devexit_p(ehci_w90x900_remove),
> +	.remove = ehci_w90x900_remove,
>  	.driver = {
>  		.name = "w90x900-ehci",
>  		.owner = THIS_MODULE,
> diff --git a/drivers/usb/host/fhci-hcd.c b/drivers/usb/host/fhci-hcd.c
> index 7da1a26..92f4b99 100644
> --- a/drivers/usb/host/fhci-hcd.c
> +++ b/drivers/usb/host/fhci-hcd.c
> @@ -821,7 +821,7 @@ static struct platform_driver of_fhci_driver = {
>  		.of_match_table = of_fhci_match,
>  	},
>  	.probe		= of_fhci_probe,
> -	.remove		= __devexit_p(of_fhci_remove),
> +	.remove		= of_fhci_remove,
>  };
>  
>  module_platform_driver(of_fhci_driver);
> diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c
> index 1e77129..3a5c82f 100644
> --- a/drivers/usb/host/fsl-mph-dr-of.c
> +++ b/drivers/usb/host/fsl-mph-dr-of.c
> @@ -336,7 +336,7 @@ static struct platform_driver fsl_usb2_mph_dr_driver = {
>  		.of_match_table = fsl_usb2_mph_dr_of_match,
>  	},
>  	.probe	= fsl_usb2_mph_dr_of_probe,
> -	.remove	= __devexit_p(fsl_usb2_mph_dr_of_remove),
> +	.remove	= fsl_usb2_mph_dr_of_remove,
>  };
>  
>  module_platform_driver(fsl_usb2_mph_dr_driver);
> diff --git a/drivers/usb/host/isp1362-hcd.c b/drivers/usb/host/isp1362-hcd.c
> index 2563263..1ad9d20 100644
> --- a/drivers/usb/host/isp1362-hcd.c
> +++ b/drivers/usb/host/isp1362-hcd.c
> @@ -2856,7 +2856,7 @@ static int isp1362_resume(struct platform_device *pdev)
>  
>  static struct platform_driver isp1362_driver = {
>  	.probe = isp1362_probe,
> -	.remove = __devexit_p(isp1362_remove),
> +	.remove = isp1362_remove,
>  
>  	.suspend = isp1362_suspend,
>  	.resume = isp1362_resume,
> diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c
> index 958379f..5fb3cae 100644
> --- a/drivers/usb/host/isp1760-if.c
> +++ b/drivers/usb/host/isp1760-if.c
> @@ -432,7 +432,7 @@ static int __devexit isp1760_plat_remove(struct platform_device *pdev)
>  
>  static struct platform_driver isp1760_plat_driver = {
>  	.probe	= isp1760_plat_probe,
> -	.remove	= __devexit_p(isp1760_plat_remove),
> +	.remove	= isp1760_plat_remove,
>  	.driver	= {
>  		.name	= "isp1760",
>  	},
> diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
> index 1c0a042..51de2f9 100644
> --- a/drivers/usb/host/ohci-at91.c
> +++ b/drivers/usb/host/ohci-at91.c
> @@ -717,7 +717,7 @@ MODULE_ALIAS("platform:at91_ohci");
>  
>  static struct platform_driver ohci_hcd_at91_driver = {
>  	.probe		= ohci_hcd_at91_drv_probe,
> -	.remove		= __devexit_p(ohci_hcd_at91_drv_remove),
> +	.remove		= ohci_hcd_at91_drv_remove,
>  	.shutdown	= usb_hcd_platform_shutdown,
>  	.suspend	= ohci_hcd_at91_drv_suspend,
>  	.resume		= ohci_hcd_at91_drv_resume,
> diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c
> index 6a30fc5..2f673e8 100644
> --- a/drivers/usb/host/ohci-exynos.c
> +++ b/drivers/usb/host/ohci-exynos.c
> @@ -275,7 +275,7 @@ MODULE_DEVICE_TABLE(of, exynos_ohci_match);
>  
>  static struct platform_driver exynos_ohci_driver = {
>  	.probe		= exynos_ohci_probe,
> -	.remove		= __devexit_p(exynos_ohci_remove),
> +	.remove		= exynos_ohci_remove,
>  	.shutdown	= exynos_ohci_shutdown,
>  	.driver = {
>  		.name	= "exynos-ohci",
> diff --git a/drivers/usb/host/ohci-jz4740.c b/drivers/usb/host/ohci-jz4740.c
> index 931d588..b4921b7 100644
> --- a/drivers/usb/host/ohci-jz4740.c
> +++ b/drivers/usb/host/ohci-jz4740.c
> @@ -266,7 +266,7 @@ static __devexit int jz4740_ohci_remove(struct platform_device *pdev)
>  
>  static struct platform_driver ohci_hcd_jz4740_driver = {
>  	.probe = jz4740_ohci_probe,
> -	.remove = __devexit_p(jz4740_ohci_remove),
> +	.remove = jz4740_ohci_remove,
>  	.driver = {
>  		.name = "jz4740-ohci",
>  		.owner = THIS_MODULE,
> diff --git a/drivers/usb/host/ohci-omap3.c b/drivers/usb/host/ohci-omap3.c
> index bd7803d..002c812 100644
> --- a/drivers/usb/host/ohci-omap3.c
> +++ b/drivers/usb/host/ohci-omap3.c
> @@ -231,7 +231,7 @@ static void ohci_hcd_omap3_shutdown(struct platform_device *pdev)
>  
>  static struct platform_driver ohci_hcd_omap3_driver = {
>  	.probe		= ohci_hcd_omap3_probe,
> -	.remove		= __devexit_p(ohci_hcd_omap3_remove),
> +	.remove		= ohci_hcd_omap3_remove,
>  	.shutdown	= ohci_hcd_omap3_shutdown,
>  	.driver		= {
>  		.name	= "ohci-omap3",
> diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
> index bda4e0b..ffe6c98 100644
> --- a/drivers/usb/host/ohci-platform.c
> +++ b/drivers/usb/host/ohci-platform.c
> @@ -214,7 +214,7 @@ static const struct dev_pm_ops ohci_platform_pm_ops = {
>  static struct platform_driver ohci_platform_driver = {
>  	.id_table	= ohci_platform_table,
>  	.probe		= ohci_platform_probe,
> -	.remove		= __devexit_p(ohci_platform_remove),
> +	.remove		= ohci_platform_remove,
>  	.shutdown	= usb_hcd_platform_shutdown,
>  	.driver		= {
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c
> index e84190f..5c5c017 100644
> --- a/drivers/usb/host/ohci-s3c2410.c
> +++ b/drivers/usb/host/ohci-s3c2410.c
> @@ -524,7 +524,7 @@ static const struct dev_pm_ops ohci_hcd_s3c2410_pm_ops = {
>  
>  static struct platform_driver ohci_hcd_s3c2410_driver = {
>  	.probe		= ohci_hcd_s3c2410_drv_probe,
> -	.remove		= __devexit_p(ohci_hcd_s3c2410_drv_remove),
> +	.remove		= ohci_hcd_s3c2410_drv_remove,
>  	.shutdown	= usb_hcd_platform_shutdown,
>  	.driver		= {
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/host/ohci-tmio.c b/drivers/usb/host/ohci-tmio.c
> index 2c9ab8f..94c6c55 100644
> --- a/drivers/usb/host/ohci-tmio.c
> +++ b/drivers/usb/host/ohci-tmio.c
> @@ -363,7 +363,7 @@ static int ohci_hcd_tmio_drv_resume(struct platform_device *dev)
>  
>  static struct platform_driver ohci_hcd_tmio_driver = {
>  	.probe		= ohci_hcd_tmio_drv_probe,
> -	.remove		= __devexit_p(ohci_hcd_tmio_drv_remove),
> +	.remove		= ohci_hcd_tmio_drv_remove,
>  	.shutdown	= usb_hcd_platform_shutdown,
>  	.suspend	= ohci_hcd_tmio_drv_suspend,
>  	.resume		= ohci_hcd_tmio_drv_resume,
> diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
> index b3eea0b..4e0436f 100644
> --- a/drivers/usb/host/r8a66597-hcd.c
> +++ b/drivers/usb/host/r8a66597-hcd.c
> @@ -2532,7 +2532,7 @@ clean_up:
>  
>  static struct platform_driver r8a66597_driver = {
>  	.probe =	r8a66597_probe,
> -	.remove =	__devexit_p(r8a66597_remove),
> +	.remove =	r8a66597_remove,
>  	.driver		= {
>  		.name = (char *) hcd_name,
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
> index 619b05f..15f20de 100644
> --- a/drivers/usb/host/sl811-hcd.c
> +++ b/drivers/usb/host/sl811-hcd.c
> @@ -1808,7 +1808,7 @@ sl811h_resume(struct platform_device *dev)
>  /* this driver is exported so sl811_cs can depend on it */
>  struct platform_driver sl811h_driver = {
>  	.probe =	sl811h_probe,
> -	.remove =	__devexit_p(sl811h_remove),
> +	.remove =	sl811h_remove,
>  
>  	.suspend =	sl811h_suspend,
>  	.resume =	sl811h_resume,
> diff --git a/drivers/usb/host/ssb-hcd.c b/drivers/usb/host/ssb-hcd.c
> index c2a29fa..4dc9a09 100644
> --- a/drivers/usb/host/ssb-hcd.c
> +++ b/drivers/usb/host/ssb-hcd.c
> @@ -261,7 +261,7 @@ static struct ssb_driver ssb_hcd_driver = {
>  	.name		= KBUILD_MODNAME,
>  	.id_table	= ssb_hcd_table,
>  	.probe		= ssb_hcd_probe,
> -	.remove		= __devexit_p(ssb_hcd_remove),
> +	.remove		= ssb_hcd_remove,
>  	.shutdown	= ssb_hcd_shutdown,
>  	.suspend	= ssb_hcd_suspend,
>  	.resume		= ssb_hcd_resume,
> diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c
> index dbbd1ba..8836898 100644
> --- a/drivers/usb/host/u132-hcd.c
> +++ b/drivers/usb/host/u132-hcd.c
> @@ -3212,7 +3212,7 @@ static int u132_resume(struct platform_device *pdev)
>  */
>  static struct platform_driver u132_platform_driver = {
>  	.probe = u132_probe,
> -	.remove = __devexit_p(u132_remove),
> +	.remove = u132_remove,
>  	.suspend = u132_suspend,
>  	.resume = u132_resume,
>  	.driver = {
> diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
> index dfb7b73..35d94ac 100644
> --- a/drivers/usb/musb/am35x.c
> +++ b/drivers/usb/musb/am35x.c
> @@ -628,7 +628,7 @@ static struct dev_pm_ops am35x_pm_ops = {
>  
>  static struct platform_driver am35x_driver = {
>  	.probe		= am35x_probe,
> -	.remove		= __devexit_p(am35x_remove),
> +	.remove		= am35x_remove,
>  	.driver		= {
>  		.name	= "musb-am35x",
>  		.pm	= DEV_PM_OPS,
> diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
> index 67b8ae7..51ace9b 100644
> --- a/drivers/usb/musb/da8xx.c
> +++ b/drivers/usb/musb/da8xx.c
> @@ -569,7 +569,7 @@ static int __devexit da8xx_remove(struct platform_device *pdev)
>  
>  static struct platform_driver da8xx_driver = {
>  	.probe		= da8xx_probe,
> -	.remove		= __devexit_p(da8xx_remove),
> +	.remove		= da8xx_remove,
>  	.driver		= {
>  		.name	= "musb-da8xx",
>  	},
> diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
> index b3c0a94..e01087b 100644
> --- a/drivers/usb/musb/davinci.c
> +++ b/drivers/usb/musb/davinci.c
> @@ -601,7 +601,7 @@ static int __devexit davinci_remove(struct platform_device *pdev)
>  
>  static struct platform_driver davinci_driver = {
>  	.probe		= davinci_probe,
> -	.remove		= __devexit_p(davinci_remove),
> +	.remove		= davinci_remove,
>  	.driver		= {
>  		.name	= "musb-davinci",
>  	},
> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
> index 774d815..69cfa18 100644
> --- a/drivers/usb/musb/musb_core.c
> +++ b/drivers/usb/musb/musb_core.c
> @@ -2288,7 +2288,7 @@ static struct platform_driver musb_driver = {
>  		.pm		= MUSB_DEV_PM_OPS,
>  	},
>  	.probe		= musb_probe,
> -	.remove		= __devexit_p(musb_remove),
> +	.remove		= musb_remove,
>  	.shutdown	= musb_shutdown,
>  };
>  
> diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
> index 7185eb0..5daea65 100644
> --- a/drivers/usb/musb/musb_dsps.c
> +++ b/drivers/usb/musb/musb_dsps.c
> @@ -766,7 +766,7 @@ MODULE_DEVICE_TABLE(of, musb_dsps_of_match);
>  
>  static struct platform_driver dsps_usbss_driver = {
>  	.probe		= dsps_probe,
> -	.remove         = __devexit_p(dsps_remove),
> +	.remove         = dsps_remove,
>  	.driver         = {
>  		.name   = "musb-dsps",
>  		.pm	= &dsps_pm_ops,
> diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
> index 32f531e..1150b4b 100644
> --- a/drivers/usb/musb/omap2430.c
> +++ b/drivers/usb/musb/omap2430.c
> @@ -674,7 +674,7 @@ MODULE_DEVICE_TABLE(of, omap2430_id_table);
>  
>  static struct platform_driver omap2430_driver = {
>  	.probe		= omap2430_probe,
> -	.remove		= __devexit_p(omap2430_remove),
> +	.remove		= omap2430_remove,
>  	.driver		= {
>  		.name	= "musb-omap2430",
>  		.pm	= DEV_PM_OPS,
> diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
> index 812719b..b816517 100644
> --- a/drivers/usb/musb/tusb6010.c
> +++ b/drivers/usb/musb/tusb6010.c
> @@ -1227,7 +1227,7 @@ static int __devexit tusb_remove(struct platform_device *pdev)
>  
>  static struct platform_driver tusb_driver = {
>  	.probe		= tusb_probe,
> -	.remove		= __devexit_p(tusb_remove),
> +	.remove		= tusb_remove,
>  	.driver		= {
>  		.name	= "musb-tusb",
>  	},
> diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c
> index 286f1be..1d81557 100644
> --- a/drivers/usb/musb/ux500.c
> +++ b/drivers/usb/musb/ux500.c
> @@ -216,7 +216,7 @@ static const struct dev_pm_ops ux500_pm_ops = {
>  
>  static struct platform_driver ux500_driver = {
>  	.probe		= ux500_probe,
> -	.remove		= __devexit_p(ux500_remove),
> +	.remove		= ux500_remove,
>  	.driver		= {
>  		.name	= "musb-ux500",
>  		.pm	= DEV_PM_OPS,
> diff --git a/drivers/usb/otg/ab8500-usb.c b/drivers/usb/otg/ab8500-usb.c
> index ae8ad56..62ea0c2 100644
> --- a/drivers/usb/otg/ab8500-usb.c
> +++ b/drivers/usb/otg/ab8500-usb.c
> @@ -571,7 +571,7 @@ static int __devexit ab8500_usb_remove(struct platform_device *pdev)
>  
>  static struct platform_driver ab8500_usb_driver = {
>  	.probe		= ab8500_usb_probe,
> -	.remove		= __devexit_p(ab8500_usb_remove),
> +	.remove		= ab8500_usb_remove,
>  	.driver		= {
>  		.name	= "ab8500-usb",
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/otg/fsl_otg.c b/drivers/usb/otg/fsl_otg.c
> index c19d1d7..77dad18 100644
> --- a/drivers/usb/otg/fsl_otg.c
> +++ b/drivers/usb/otg/fsl_otg.c
> @@ -1169,7 +1169,7 @@ static int __devexit fsl_otg_remove(struct platform_device *pdev)
>  
>  struct platform_driver fsl_otg_driver = {
>  	.probe = fsl_otg_probe,
> -	.remove = __devexit_p(fsl_otg_remove),
> +	.remove = fsl_otg_remove,
>  	.driver = {
>  		.name = driver_name,
>  		.owner = THIS_MODULE,
> diff --git a/drivers/usb/otg/msm_otg.c b/drivers/usb/otg/msm_otg.c
> index 9f5fc90..eef0dd2 100644
> --- a/drivers/usb/otg/msm_otg.c
> +++ b/drivers/usb/otg/msm_otg.c
> @@ -1746,7 +1746,7 @@ static const struct dev_pm_ops msm_otg_dev_pm_ops = {
>  #endif
>  
>  static struct platform_driver msm_otg_driver = {
> -	.remove = __devexit_p(msm_otg_remove),
> +	.remove = msm_otg_remove,
>  	.driver = {
>  		.name = DRIVER_NAME,
>  		.owner = THIS_MODULE,
> diff --git a/drivers/usb/otg/mxs-phy.c b/drivers/usb/otg/mxs-phy.c
> index 88db976..825d860 100644
> --- a/drivers/usb/otg/mxs-phy.c
> +++ b/drivers/usb/otg/mxs-phy.c
> @@ -191,7 +191,7 @@ MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids);
>  
>  static struct platform_driver mxs_phy_driver = {
>  	.probe = mxs_phy_probe,
> -	.remove = __devexit_p(mxs_phy_remove),
> +	.remove = mxs_phy_remove,
>  	.driver = {
>  		.name = DRIVER_NAME,
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/otg/nop-usb-xceiv.c b/drivers/usb/otg/nop-usb-xceiv.c
> index e52e35e..0502c24 100644
> --- a/drivers/usb/otg/nop-usb-xceiv.c
> +++ b/drivers/usb/otg/nop-usb-xceiv.c
> @@ -156,7 +156,7 @@ static int __devexit nop_usb_xceiv_remove(struct platform_device *pdev)
>  
>  static struct platform_driver nop_usb_xceiv_driver = {
>  	.probe		= nop_usb_xceiv_probe,
> -	.remove		= __devexit_p(nop_usb_xceiv_remove),
> +	.remove		= nop_usb_xceiv_remove,
>  	.driver		= {
>  		.name	= "nop_usb_xceiv",
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/phy/mv_u3d_phy.c b/drivers/usb/phy/mv_u3d_phy.c
> index 9f1c5d3..80cf57e 100644
> --- a/drivers/usb/phy/mv_u3d_phy.c
> +++ b/drivers/usb/phy/mv_u3d_phy.c
> @@ -331,7 +331,7 @@ static int __exit mv_u3d_phy_remove(struct platform_device *pdev)
>  
>  static struct platform_driver mv_u3d_phy_driver = {
>  	.probe		= mv_u3d_phy_probe,
> -	.remove		= __devexit_p(mv_u3d_phy_remove),
> +	.remove		= mv_u3d_phy_remove,
>  	.driver		= {
>  		.name	= "mv-u3d-phy",
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/phy/omap-usb2.c b/drivers/usb/phy/omap-usb2.c
> index 15ab3d6..f1ed872 100644
> --- a/drivers/usb/phy/omap-usb2.c
> +++ b/drivers/usb/phy/omap-usb2.c
> @@ -254,7 +254,7 @@ MODULE_DEVICE_TABLE(of, omap_usb2_id_table);
>  
>  static struct platform_driver omap_usb2_driver = {
>  	.probe		= omap_usb2_probe,
> -	.remove		= __devexit_p(omap_usb2_remove),
> +	.remove		= omap_usb2_remove,
>  	.driver		= {
>  		.name	= "omap-usb2",
>  		.owner	= THIS_MODULE,
> diff --git a/drivers/usb/phy/rcar-phy.c b/drivers/usb/phy/rcar-phy.c
> index 792f505..703a295 100644
> --- a/drivers/usb/phy/rcar-phy.c
> +++ b/drivers/usb/phy/rcar-phy.c
> @@ -210,7 +210,7 @@ static struct platform_driver rcar_usb_phy_driver = {
>  		.name	= "rcar_usb_phy",
>  	},
>  	.probe		= rcar_usb_phy_probe,
> -	.remove		= __devexit_p(rcar_usb_phy_remove),
> +	.remove		= rcar_usb_phy_remove,
>  };
>  
>  module_platform_driver(rcar_usb_phy_driver);
> diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
> index 3bf922ab..2aa7c1a 100644
> --- a/drivers/usb/renesas_usbhs/common.c
> +++ b/drivers/usb/renesas_usbhs/common.c
> @@ -636,7 +636,7 @@ static struct platform_driver renesas_usbhs_driver = {
>  		.pm	= &usbhsc_pm_ops,
>  	},
>  	.probe		= usbhs_probe,
> -	.remove		= __devexit_p(usbhs_remove),
> +	.remove		= usbhs_remove,
>  };
>  
>  module_platform_driver(renesas_usbhs_driver);
> 


-- 
Nicolas Ferre

^ permalink raw reply

* Re: [PATCH 159/493] usb: remove use of __devinit
From: Nicolas Ferre @ 2012-11-20  9:33 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: cbe-oss-dev, Kukjin Kim, Wan ZongShun, Alexander Shishkin, gregkh,
	linux-usb, Felipe Balbi, Geoff Levand, linux-samsung-soc,
	Alan Stern, Ben Dooks, Olav Kongas, linux-omap, linuxppc-dev,
	Lennert Buytenhek, linux-arm-kernel
In-Reply-To: <1353349642-3677-159-git-send-email-wfp5p@virginia.edu>

On 11/19/2012 07:21 PM, Bill Pemberton :
> CONFIG_HOTPLUG is going away as an option so __devinit is no longer
> needed.
> 
> Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
> Cc: Peter Korsgaard <jacmet@sunsite.dk> 
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> 
> Cc: Felipe Balbi <balbi@ti.com> 
> Cc: Li Yang <leoli@freescale.com> 
> Cc: Alan Stern <stern@rowland.harvard.edu> 
> Cc: Geoff Levand <geoff@infradead.org> 
> Cc: Wan ZongShun <mcuos.com@gmail.com> 
> Cc: Olav Kongas <ok@artecdesign.ee> 
> Cc: Lennert Buytenhek <kernel@wantstofly.org> 
> Cc: Ben Dooks <ben-linux@fluff.org> 
> Cc: Kukjin Kim <kgene.kim@samsung.com> 
> Cc: linux-usb@vger.kernel.org 
> Cc: linux-omap@vger.kernel.org 
> Cc: linuxppc-dev@lists.ozlabs.org 
> Cc: cbe-oss-dev@lists.ozlabs.org 
> Cc: linux-arm-kernel@lists.infradead.org 
> Cc: linux-samsung-soc@vger.kernel.org 
> ---


>  drivers/usb/gadget/at91_udc.c        |  4 ++--
>  drivers/usb/host/ehci-atmel.c        |  2 +-
>  drivers/usb/host/ohci-at91.c         | 12 ++++++------

For Atmel's drivers:
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>


> diff --git a/drivers/usb/c67x00/c67x00-drv.c b/drivers/usb/c67x00/c67x00-drv.c
> index 855d538..21913dfe 100644
> --- a/drivers/usb/c67x00/c67x00-drv.c
> +++ b/drivers/usb/c67x00/c67x00-drv.c
> @@ -116,7 +116,7 @@ static irqreturn_t c67x00_irq(int irq, void *__dev)
>  
>  /* ------------------------------------------------------------------------- */
>  
> -static int __devinit c67x00_drv_probe(struct platform_device *pdev)
> +static int c67x00_drv_probe(struct platform_device *pdev)
>  {
>  	struct c67x00_device *c67x00;
>  	struct c67x00_platform_data *pdata;
> diff --git a/drivers/usb/chipidea/ci13xxx_imx.c b/drivers/usb/chipidea/ci13xxx_imx.c
> index 5659730..424bff9 100644
> --- a/drivers/usb/chipidea/ci13xxx_imx.c
> +++ b/drivers/usb/chipidea/ci13xxx_imx.c
> @@ -93,7 +93,7 @@ static struct ci13xxx_platform_data ci13xxx_imx_platdata __devinitdata  = {
>  	.capoffset		= DEF_CAPOFFSET,
>  };
>  
> -static int __devinit ci13xxx_imx_probe(struct platform_device *pdev)
> +static int ci13xxx_imx_probe(struct platform_device *pdev)
>  {
>  	struct ci13xxx_imx_data *data;
>  	struct platform_device *plat_ci, *phy_pdev;
> diff --git a/drivers/usb/chipidea/ci13xxx_msm.c b/drivers/usb/chipidea/ci13xxx_msm.c
> index 406c5af..e8a8ba3 100644
> --- a/drivers/usb/chipidea/ci13xxx_msm.c
> +++ b/drivers/usb/chipidea/ci13xxx_msm.c
> @@ -55,7 +55,7 @@ static struct ci13xxx_platform_data ci13xxx_msm_platdata = {
>  	.notify_event		= ci13xxx_msm_notify_event,
>  };
>  
> -static int __devinit ci13xxx_msm_probe(struct platform_device *pdev)
> +static int ci13xxx_msm_probe(struct platform_device *pdev)
>  {
>  	struct platform_device *plat_ci;
>  
> diff --git a/drivers/usb/chipidea/ci13xxx_pci.c b/drivers/usb/chipidea/ci13xxx_pci.c
> index e1cb2fb..cb7eb3e 100644
> --- a/drivers/usb/chipidea/ci13xxx_pci.c
> +++ b/drivers/usb/chipidea/ci13xxx_pci.c
> @@ -48,7 +48,7 @@ struct ci13xxx_platform_data penwell_pci_platdata = {
>   * Allocates basic PCI resources for this USB device controller, and then
>   * invokes the udc_probe() method to start the UDC associated with it
>   */
> -static int __devinit ci13xxx_pci_probe(struct pci_dev *pdev,
> +static int ci13xxx_pci_probe(struct pci_dev *pdev,
>  				       const struct pci_device_id *id)
>  {
>  	struct ci13xxx_platform_data *platdata = (void *)id->driver_data;
> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> index 46f23f2..7f9c0d2 100644
> --- a/drivers/usb/chipidea/core.c
> +++ b/drivers/usb/chipidea/core.c
> @@ -390,7 +390,7 @@ void ci13xxx_remove_device(struct platform_device *pdev)
>  }
>  EXPORT_SYMBOL_GPL(ci13xxx_remove_device);
>  
> -static int __devinit ci_hdrc_probe(struct platform_device *pdev)
> +static int ci_hdrc_probe(struct platform_device *pdev)
>  {
>  	struct device	*dev = &pdev->dev;
>  	struct ci13xxx	*ci;
> diff --git a/drivers/usb/chipidea/usbmisc_imx6q.c b/drivers/usb/chipidea/usbmisc_imx6q.c
> index 81238a4..ee6fa87 100644
> --- a/drivers/usb/chipidea/usbmisc_imx6q.c
> +++ b/drivers/usb/chipidea/usbmisc_imx6q.c
> @@ -82,7 +82,7 @@ static const struct of_device_id usbmisc_imx6q_dt_ids[] = {
>  	{ /* sentinel */ }
>  };
>  
> -static int __devinit usbmisc_imx6q_probe(struct platform_device *pdev)
> +static int usbmisc_imx6q_probe(struct platform_device *pdev)
>  {
>  	struct resource	*res;
>  	struct imx6q_usbmisc *data;
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index 1a02442..8dceb83 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -140,8 +140,7 @@ static void dwc3_free_one_event_buffer(struct dwc3 *dwc,
>   * Returns a pointer to the allocated event buffer structure on success
>   * otherwise ERR_PTR(errno).
>   */
> -static struct dwc3_event_buffer *__devinit
> -dwc3_alloc_one_event_buffer(struct dwc3 *dwc, unsigned length)
> +static struct dwc3_event_buffer *dwc3_alloc_one_event_buffer(struct dwc3 *dwc, unsigned length)
>  {
>  	struct dwc3_event_buffer	*evt;
>  
> @@ -183,7 +182,7 @@ static void dwc3_free_event_buffers(struct dwc3 *dwc)
>   * Returns 0 on success otherwise negative errno. In the error case, dwc
>   * may contain some buffers allocated but not all which were requested.
>   */
> -static int __devinit dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length)
> +static int dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length)
>  {
>  	int			num;
>  	int			i;
> @@ -260,7 +259,7 @@ static void dwc3_event_buffers_cleanup(struct dwc3 *dwc)
>  	}
>  }
>  
> -static void __devinit dwc3_cache_hwparams(struct dwc3 *dwc)
> +static void dwc3_cache_hwparams(struct dwc3 *dwc)
>  {
>  	struct dwc3_hwparams	*parms = &dwc->hwparams;
>  
> @@ -281,7 +280,7 @@ static void __devinit dwc3_cache_hwparams(struct dwc3 *dwc)
>   *
>   * Returns 0 on success otherwise negative errno.
>   */
> -static int __devinit dwc3_core_init(struct dwc3 *dwc)
> +static int dwc3_core_init(struct dwc3 *dwc)
>  {
>  	unsigned long		timeout;
>  	u32			reg;
> @@ -362,7 +361,7 @@ static void dwc3_core_exit(struct dwc3 *dwc)
>  
>  #define DWC3_ALIGN_MASK		(16 - 1)
>  
> -static int __devinit dwc3_probe(struct platform_device *pdev)
> +static int dwc3_probe(struct platform_device *pdev)
>  {
>  	struct device_node	*node = pdev->dev.of_node;
>  	struct resource		*res;
> diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
> index d4a30f1..33ae98c5 100644
> --- a/drivers/usb/dwc3/debugfs.c
> +++ b/drivers/usb/dwc3/debugfs.c
> @@ -652,7 +652,7 @@ static const struct file_operations dwc3_link_state_fops = {
>  	.release		= single_release,
>  };
>  
> -int __devinit dwc3_debugfs_init(struct dwc3 *dwc)
> +int dwc3_debugfs_init(struct dwc3 *dwc)
>  {
>  	struct dentry		*root;
>  	struct dentry		*file;
> diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
> index 19a9818..d43f076 100644
> --- a/drivers/usb/dwc3/dwc3-exynos.c
> +++ b/drivers/usb/dwc3/dwc3-exynos.c
> @@ -34,7 +34,7 @@ struct dwc3_exynos {
>  	struct clk		*clk;
>  };
>  
> -static int __devinit dwc3_exynos_register_phys(struct dwc3_exynos *exynos)
> +static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos)
>  {
>  	struct nop_usb_xceiv_platform_data pdata;
>  	struct platform_device	*pdev;
> @@ -90,7 +90,7 @@ err1:
>  
>  static u64 dwc3_exynos_dma_mask = DMA_BIT_MASK(32);
>  
> -static int __devinit dwc3_exynos_probe(struct platform_device *pdev)
> +static int dwc3_exynos_probe(struct platform_device *pdev)
>  {
>  	struct platform_device	*dwc3;
>  	struct dwc3_exynos	*exynos;
> diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
> index afbc6e9..e114bb5 100644
> --- a/drivers/usb/dwc3/dwc3-omap.c
> +++ b/drivers/usb/dwc3/dwc3-omap.c
> @@ -157,7 +157,7 @@ static inline void dwc3_omap_writel(void __iomem *base, u32 offset, u32 value)
>  	writel(value, base + offset);
>  }
>  
> -static int __devinit dwc3_omap_register_phys(struct dwc3_omap *omap)
> +static int dwc3_omap_register_phys(struct dwc3_omap *omap)
>  {
>  	struct nop_usb_xceiv_platform_data pdata;
>  	struct platform_device	*pdev;
> @@ -262,7 +262,7 @@ static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap)
>  	return IRQ_HANDLED;
>  }
>  
> -static int __devinit dwc3_omap_probe(struct platform_device *pdev)
> +static int dwc3_omap_probe(struct platform_device *pdev)
>  {
>  	struct dwc3_omap_data	*pdata = pdev->dev.platform_data;
>  	struct device_node	*node = pdev->dev.of_node;
> diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
> index b3eeec7..68e389b 100644
> --- a/drivers/usb/dwc3/dwc3-pci.c
> +++ b/drivers/usb/dwc3/dwc3-pci.c
> @@ -58,7 +58,7 @@ struct dwc3_pci {
>  	struct platform_device	*usb3_phy;
>  };
>  
> -static int __devinit dwc3_pci_register_phys(struct dwc3_pci *glue)
> +static int dwc3_pci_register_phys(struct dwc3_pci *glue)
>  {
>  	struct nop_usb_xceiv_platform_data pdata;
>  	struct platform_device	*pdev;
> @@ -112,7 +112,7 @@ err1:
>  	return ret;
>  }
>  
> -static int __devinit dwc3_pci_probe(struct pci_dev *pci,
> +static int dwc3_pci_probe(struct pci_dev *pci,
>  		const struct pci_device_id *id)
>  {
>  	struct resource		res[2];
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 7b7dedd..2e43b33 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -1579,7 +1579,7 @@ static const struct usb_gadget_ops dwc3_gadget_ops = {
>  
>  /* -------------------------------------------------------------------------- */
>  
> -static int __devinit dwc3_gadget_init_endpoints(struct dwc3 *dwc)
> +static int dwc3_gadget_init_endpoints(struct dwc3 *dwc)
>  {
>  	struct dwc3_ep			*dep;
>  	u8				epnum;
> @@ -2374,7 +2374,7 @@ static irqreturn_t dwc3_interrupt(int irq, void *_dwc)
>   *
>   * Returns 0 on success otherwise negative errno.
>   */
> -int __devinit dwc3_gadget_init(struct dwc3 *dwc)
> +int dwc3_gadget_init(struct dwc3 *dwc)
>  {
>  	u32					reg;
>  	int					ret;
> diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c
> index a7b042b..59dcea2 100644
> --- a/drivers/usb/gadget/at91_udc.c
> +++ b/drivers/usb/gadget/at91_udc.c
> @@ -1673,7 +1673,7 @@ static void at91udc_shutdown(struct platform_device *dev)
>  	spin_unlock_irqrestore(&udc->lock, flags);
>  }
>  
> -static void __devinit at91udc_of_init(struct at91_udc *udc,
> +static void at91udc_of_init(struct at91_udc *udc,
>  				     struct device_node *np)
>  {
>  	struct at91_udc_data *board = &udc->board;
> @@ -1693,7 +1693,7 @@ static void __devinit at91udc_of_init(struct at91_udc *udc,
>  	board->pullup_active_low = (flags & OF_GPIO_ACTIVE_LOW) ? 1 : 0;
>  }
>  
> -static int __devinit at91udc_probe(struct platform_device *pdev)
> +static int at91udc_probe(struct platform_device *pdev)
>  {
>  	struct device	*dev = &pdev->dev;
>  	struct at91_udc	*udc;
> diff --git a/drivers/usb/gadget/bcm63xx_udc.c b/drivers/usb/gadget/bcm63xx_udc.c
> index b44e436..18eff74 100644
> --- a/drivers/usb/gadget/bcm63xx_udc.c
> +++ b/drivers/usb/gadget/bcm63xx_udc.c
> @@ -2323,7 +2323,7 @@ static void bcm63xx_udc_gadget_release(struct device *dev)
>   * Note that platform data is required, because pd.port_no varies from chip
>   * to chip and is used to switch the correct USB port to device mode.
>   */
> -static int __devinit bcm63xx_udc_probe(struct platform_device *pdev)
> +static int bcm63xx_udc_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
>  	struct bcm63xx_usbd_platform_data *pd = dev->platform_data;
> diff --git a/drivers/usb/gadget/f_uac2.c b/drivers/usb/gadget/f_uac2.c
> index 91396a1..d7da258 100644
> --- a/drivers/usb/gadget/f_uac2.c
> +++ b/drivers/usb/gadget/f_uac2.c
> @@ -402,7 +402,7 @@ static struct snd_pcm_ops uac2_pcm_ops = {
>  	.prepare = uac2_pcm_null,
>  };
>  
> -static int __devinit snd_uac2_probe(struct platform_device *pdev)
> +static int snd_uac2_probe(struct platform_device *pdev)
>  {
>  	struct snd_uac2_chip *uac2 = pdev_to_uac2(pdev);
>  	struct snd_card *card;
> diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c
> index 21db1f7..8ad04a0 100644
> --- a/drivers/usb/gadget/fsl_qe_udc.c
> +++ b/drivers/usb/gadget/fsl_qe_udc.c
> @@ -2347,7 +2347,7 @@ static int fsl_qe_stop(struct usb_gadget *gadget,
>  }
>  
>  /* udc structure's alloc and setup, include ep-param alloc */
> -static struct qe_udc __devinit *qe_udc_config(struct platform_device *ofdev)
> +static struct qe_udc *qe_udc_config(struct platform_device *ofdev)
>  {
>  	struct qe_udc *udc;
>  	struct device_node *np = ofdev->dev.of_node;
> @@ -2402,7 +2402,7 @@ cleanup:
>  }
>  
>  /* USB Controller register init */
> -static int __devinit qe_udc_reg_init(struct qe_udc *udc)
> +static int qe_udc_reg_init(struct qe_udc *udc)
>  {
>  	struct usb_ctlr __iomem *qe_usbregs;
>  	qe_usbregs = udc->usb_regs;
> @@ -2420,7 +2420,7 @@ static int __devinit qe_udc_reg_init(struct qe_udc *udc)
>  	return 0;
>  }
>  
> -static int __devinit qe_ep_config(struct qe_udc *udc, unsigned char pipe_num)
> +static int qe_ep_config(struct qe_udc *udc, unsigned char pipe_num)
>  {
>  	struct qe_ep *ep = &udc->eps[pipe_num];
>  
> @@ -2473,7 +2473,7 @@ static void qe_udc_release(struct device *dev)
>  
>  /* Driver probe functions */
>  static const struct of_device_id qe_udc_match[];
> -static int __devinit qe_udc_probe(struct platform_device *ofdev)
> +static int qe_udc_probe(struct platform_device *ofdev)
>  {
>  	struct qe_udc *udc;
>  	const struct of_device_id *match;
> diff --git a/drivers/usb/gadget/mv_udc_core.c b/drivers/usb/gadget/mv_udc_core.c
> index ea45224..2419649 100644
> --- a/drivers/usb/gadget/mv_udc_core.c
> +++ b/drivers/usb/gadget/mv_udc_core.c
> @@ -2188,7 +2188,7 @@ static int __devexit mv_udc_remove(struct platform_device *dev)
>  	return 0;
>  }
>  
> -static int __devinit mv_udc_probe(struct platform_device *dev)
> +static int mv_udc_probe(struct platform_device *dev)
>  {
>  	struct mv_usb_platform_data *pdata = dev->dev.platform_data;
>  	struct mv_udc *udc;
> diff --git a/drivers/usb/gadget/net2272.c b/drivers/usb/gadget/net2272.c
> index 26c3053..f0103dd 100644
> --- a/drivers/usb/gadget/net2272.c
> +++ b/drivers/usb/gadget/net2272.c
> @@ -2215,8 +2215,7 @@ net2272_remove(struct net2272 *dev)
>  	dev_info(dev->dev, "unbind\n");
>  }
>  
> -static struct net2272 * __devinit
> -net2272_probe_init(struct device *dev, unsigned int irq)
> +static struct net2272 *net2272_probe_init(struct device *dev, unsigned int irq)
>  {
>  	struct net2272 *ret;
>  
> @@ -2246,7 +2245,7 @@ net2272_probe_init(struct device *dev, unsigned int irq)
>  	return ret;
>  }
>  
> -static int __devinit
> +static int
>  net2272_probe_fin(struct net2272 *dev, unsigned int irqflags)
>  {
>  	int ret;
> @@ -2306,7 +2305,7 @@ err_add_udc:
>   * don't respond over USB until a gadget driver binds to us
>   */
>  
> -static int __devinit
> +static int
>  net2272_rdk1_probe(struct pci_dev *pdev, struct net2272 *dev)
>  {
>  	unsigned long resource, len, tmp;
> @@ -2389,7 +2388,7 @@ net2272_rdk1_probe(struct pci_dev *pdev, struct net2272 *dev)
>  	return ret;
>  }
>  
> -static int __devinit
> +static int
>  net2272_rdk2_probe(struct pci_dev *pdev, struct net2272 *dev)
>  {
>  	unsigned long resource, len;
> @@ -2447,7 +2446,7 @@ net2272_rdk2_probe(struct pci_dev *pdev, struct net2272 *dev)
>  	return ret;
>  }
>  
> -static int __devinit
> +static int
>  net2272_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
>  {
>  	struct net2272 *dev;
> @@ -2595,7 +2594,7 @@ static inline void net2272_pci_unregister(void) { }
>  
>  /*---------------------------------------------------------------------------*/
>  
> -static int __devinit
> +static int
>  net2272_plat_probe(struct platform_device *pdev)
>  {
>  	struct net2272 *dev;
> diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c
> index 650fa23..164526f 100644
> --- a/drivers/usb/gadget/omap_udc.c
> +++ b/drivers/usb/gadget/omap_udc.c
> @@ -2508,7 +2508,7 @@ static inline void remove_proc_file(void) {}
>   * UDC_SYSCON_1.CFG_LOCK is set can now work.  We won't use that
>   * capability yet though.
>   */
> -static unsigned __devinit
> +static unsigned
>  omap_ep_setup(char *name, u8 addr, u8 type,
>  		unsigned buf, unsigned maxp, int dbuf)
>  {
> @@ -2626,7 +2626,7 @@ static void omap_udc_release(struct device *dev)
>  	udc = NULL;
>  }
>  
> -static int __devinit
> +static int
>  omap_udc_setup(struct platform_device *odev, struct usb_phy *xceiv)
>  {
>  	unsigned	tmp, buf;
> @@ -2763,7 +2763,7 @@ omap_udc_setup(struct platform_device *odev, struct usb_phy *xceiv)
>  	return 0;
>  }
>  
> -static int __devinit omap_udc_probe(struct platform_device *pdev)
> +static int omap_udc_probe(struct platform_device *pdev)
>  {
>  	int			status = -ENODEV;
>  	int			hmc;
> diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
> index 9fd6e5f..6fdb1bd 100644
> --- a/drivers/usb/gadget/s3c-hsotg.c
> +++ b/drivers/usb/gadget/s3c-hsotg.c
> @@ -3072,7 +3072,7 @@ static struct usb_gadget_ops s3c_hsotg_gadget_ops = {
>   * creation) to give to the gadget driver. Setup the endpoint name, any
>   * direction information and other state that may be required.
>   */
> -static void __devinit s3c_hsotg_initep(struct s3c_hsotg *hsotg,
> +static void s3c_hsotg_initep(struct s3c_hsotg *hsotg,
>  				       struct s3c_hsotg_ep *hs_ep,
>  				       int epnum)
>  {
> @@ -3414,7 +3414,7 @@ static const struct file_operations ep_fops = {
>   * with the same name as the device itself, in case we end up
>   * with multiple blocks in future systems.
>   */
> -static void __devinit s3c_hsotg_create_debug(struct s3c_hsotg *hsotg)
> +static void s3c_hsotg_create_debug(struct s3c_hsotg *hsotg)
>  {
>  	struct dentry *root;
>  	unsigned epidx;
> @@ -3490,7 +3490,7 @@ static void s3c_hsotg_release(struct device *dev)
>   * @pdev: The platform information for the driver
>   */
>  
> -static int __devinit s3c_hsotg_probe(struct platform_device *pdev)
> +static int s3c_hsotg_probe(struct platform_device *pdev)
>  {
>  	struct s3c_hsotg_plat *plat = pdev->dev.platform_data;
>  	struct device *dev = &pdev->dev;
> diff --git a/drivers/usb/gadget/s3c-hsudc.c b/drivers/usb/gadget/s3c-hsudc.c
> index d8e785d..52379b1 100644
> --- a/drivers/usb/gadget/s3c-hsudc.c
> +++ b/drivers/usb/gadget/s3c-hsudc.c
> @@ -1261,7 +1261,7 @@ static struct usb_gadget_ops s3c_hsudc_gadget_ops = {
>  	.vbus_draw	= s3c_hsudc_vbus_draw,
>  };
>  
> -static int __devinit s3c_hsudc_probe(struct platform_device *pdev)
> +static int s3c_hsudc_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
>  	struct resource *res;
> diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
> index f5143a0..8c83ed9 100644
> --- a/drivers/usb/host/bcma-hcd.c
> +++ b/drivers/usb/host/bcma-hcd.c
> @@ -54,7 +54,7 @@ static int bcma_wait_bits(struct bcma_device *dev, u16 reg, u32 bitmask,
>  	return -ETIMEDOUT;
>  }
>  
> -static void __devinit bcma_hcd_4716wa(struct bcma_device *dev)
> +static void bcma_hcd_4716wa(struct bcma_device *dev)
>  {
>  #ifdef CONFIG_BCMA_DRIVER_MIPS
>  	/* Work around for 4716 failures. */
> @@ -88,7 +88,7 @@ static void __devinit bcma_hcd_4716wa(struct bcma_device *dev)
>  }
>  
>  /* based on arch/mips/brcm-boards/bcm947xx/pcibios.c */
> -static void __devinit bcma_hcd_init_chip(struct bcma_device *dev)
> +static void bcma_hcd_init_chip(struct bcma_device *dev)
>  {
>  	u32 tmp;
>  
> @@ -165,8 +165,7 @@ static const struct usb_ehci_pdata ehci_pdata = {
>  static const struct usb_ohci_pdata ohci_pdata = {
>  };
>  
> -static struct platform_device * __devinit
> -bcma_hcd_create_pdev(struct bcma_device *dev, bool ohci, u32 addr)
> +static struct platform_device *bcma_hcd_create_pdev(struct bcma_device *dev, bool ohci, u32 addr)
>  {
>  	struct platform_device *hci_dev;
>  	struct resource hci_res[2];
> @@ -212,7 +211,7 @@ err_alloc:
>  	return ERR_PTR(ret);
>  }
>  
> -static int __devinit bcma_hcd_probe(struct bcma_device *dev)
> +static int bcma_hcd_probe(struct bcma_device *dev)
>  {
>  	int err;
>  	u16 chipid_top;
> diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c
> index 33f798e..96bf00d 100644
> --- a/drivers/usb/host/ehci-atmel.c
> +++ b/drivers/usb/host/ehci-atmel.c
> @@ -97,7 +97,7 @@ static const struct hc_driver ehci_atmel_hc_driver = {
>  
>  static u64 at91_ehci_dma_mask = DMA_BIT_MASK(32);
>  
> -static int __devinit ehci_atmel_drv_probe(struct platform_device *pdev)
> +static int ehci_atmel_drv_probe(struct platform_device *pdev)
>  {
>  	struct usb_hcd *hcd;
>  	const struct hc_driver *driver = &ehci_atmel_hc_driver;
> diff --git a/drivers/usb/host/ehci-grlib.c b/drivers/usb/host/ehci-grlib.c
> index da42695..1fc8929 100644
> --- a/drivers/usb/host/ehci-grlib.c
> +++ b/drivers/usb/host/ehci-grlib.c
> @@ -82,7 +82,7 @@ static const struct hc_driver ehci_grlib_hc_driver = {
>  };
>  
>  
> -static int __devinit ehci_hcd_grlib_probe(struct platform_device *op)
> +static int ehci_hcd_grlib_probe(struct platform_device *op)
>  {
>  	struct device_node *dn = op->dev.of_node;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c
> index 96da679..f74794c 100644
> --- a/drivers/usb/host/ehci-orion.c
> +++ b/drivers/usb/host/ehci-orion.c
> @@ -146,7 +146,7 @@ static const struct hc_driver ehci_orion_hc_driver = {
>  	.clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
>  };
>  
> -static void __devinit
> +static void
>  ehci_orion_conf_mbus_windows(struct usb_hcd *hcd,
>  			     const struct mbus_dram_target_info *dram)
>  {
> @@ -167,7 +167,7 @@ ehci_orion_conf_mbus_windows(struct usb_hcd *hcd,
>  	}
>  }
>  
> -static int __devinit ehci_orion_drv_probe(struct platform_device *pdev)
> +static int ehci_orion_drv_probe(struct platform_device *pdev)
>  {
>  	struct orion_ehci_data *pd = pdev->dev.platform_data;
>  	const struct mbus_dram_target_info *dram;
> diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
> index b807648..615cba0 100644
> --- a/drivers/usb/host/ehci-platform.c
> +++ b/drivers/usb/host/ehci-platform.c
> @@ -61,7 +61,7 @@ static const struct ehci_driver_overrides platform_overrides __initdata = {
>  	.reset =	ehci_platform_reset,
>  };
>  
> -static int __devinit ehci_platform_probe(struct platform_device *dev)
> +static int ehci_platform_probe(struct platform_device *dev)
>  {
>  	struct usb_hcd *hcd;
>  	struct resource *res_mem;
> diff --git a/drivers/usb/host/ehci-ppc-of.c b/drivers/usb/host/ehci-ppc-of.c
> index fa937d0..45aceef 100644
> --- a/drivers/usb/host/ehci-ppc-of.c
> +++ b/drivers/usb/host/ehci-ppc-of.c
> @@ -71,7 +71,7 @@ static const struct hc_driver ehci_ppc_of_hc_driver = {
>   * Fix: Enable Break Memory Transfer (BMT) in INSNREG3
>   */
>  #define PPC440EPX_EHCI0_INSREG_BMT	(0x1 << 0)
> -static int __devinit
> +static int
>  ppc44x_enable_bmt(struct device_node *dn)
>  {
>  	__iomem u32 *insreg_virt;
> @@ -87,7 +87,7 @@ ppc44x_enable_bmt(struct device_node *dn)
>  }
>  
>  
> -static int __devinit ehci_hcd_ppc_of_probe(struct platform_device *op)
> +static int ehci_hcd_ppc_of_probe(struct platform_device *op)
>  {
>  	struct device_node *dn = op->dev.of_node;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/ehci-ps3.c b/drivers/usb/host/ehci-ps3.c
> index 45a356e..df5925a 100644
> --- a/drivers/usb/host/ehci-ps3.c
> +++ b/drivers/usb/host/ehci-ps3.c
> @@ -93,7 +93,7 @@ static const struct hc_driver ps3_ehci_hc_driver = {
>  	.clear_tt_buffer_complete	= ehci_clear_tt_buffer_complete,
>  };
>  
> -static int __devinit ps3_ehci_probe(struct ps3_system_bus_device *dev)
> +static int ps3_ehci_probe(struct ps3_system_bus_device *dev)
>  {
>  	int result;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c
> index f90a881..2cf19d1 100644
> --- a/drivers/usb/host/ehci-s5p.c
> +++ b/drivers/usb/host/ehci-s5p.c
> @@ -85,7 +85,7 @@ static void s5p_setup_vbus_gpio(struct platform_device *pdev)
>  
>  static u64 ehci_s5p_dma_mask = DMA_BIT_MASK(32);
>  
> -static int __devinit s5p_ehci_probe(struct platform_device *pdev)
> +static int s5p_ehci_probe(struct platform_device *pdev)
>  {
>  	struct s5p_ehci_platdata *pdata;
>  	struct s5p_ehci_hcd *s5p_ehci;
> diff --git a/drivers/usb/host/ehci-w90x900.c b/drivers/usb/host/ehci-w90x900.c
> index 7bcb8b2..bf8d462 100644
> --- a/drivers/usb/host/ehci-w90x900.c
> +++ b/drivers/usb/host/ehci-w90x900.c
> @@ -18,7 +18,7 @@
>  #define PHY0_CTR	(0xA4)
>  #define PHY1_CTR	(0xA8)
>  
> -static int __devinit usb_w90x900_probe(const struct hc_driver *driver,
> +static int usb_w90x900_probe(const struct hc_driver *driver,
>  		      struct platform_device *pdev)
>  {
>  	struct usb_hcd *hcd;
> @@ -147,7 +147,7 @@ static const struct hc_driver ehci_w90x900_hc_driver = {
>  	.clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
>  };
>  
> -static int __devinit ehci_w90x900_probe(struct platform_device *pdev)
> +static int ehci_w90x900_probe(struct platform_device *pdev)
>  {
>  	if (usb_disabled())
>  		return -ENODEV;
> diff --git a/drivers/usb/host/ehci-xilinx-of.c b/drivers/usb/host/ehci-xilinx-of.c
> index 6a3f921..4f285e8 100644
> --- a/drivers/usb/host/ehci-xilinx-of.c
> +++ b/drivers/usb/host/ehci-xilinx-of.c
> @@ -125,7 +125,7 @@ static const struct hc_driver ehci_xilinx_of_hc_driver = {
>   * as HS only or HS/FS only, it checks the configuration in the device tree
>   * entry, and sets an appropriate value for hcd->has_tt.
>   */
> -static int __devinit ehci_hcd_xilinx_of_probe(struct platform_device *op)
> +static int ehci_hcd_xilinx_of_probe(struct platform_device *op)
>  {
>  	struct device_node *dn = op->dev.of_node;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/fhci-hcd.c b/drivers/usb/host/fhci-hcd.c
> index 92f4b99..618f143 100644
> --- a/drivers/usb/host/fhci-hcd.c
> +++ b/drivers/usb/host/fhci-hcd.c
> @@ -561,7 +561,7 @@ static const struct hc_driver fhci_driver = {
>  	.hub_control = fhci_hub_control,
>  };
>  
> -static int __devinit of_fhci_probe(struct platform_device *ofdev)
> +static int of_fhci_probe(struct platform_device *ofdev)
>  {
>  	struct device *dev = &ofdev->dev;
>  	struct device_node *node = dev->of_node;
> diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c
> index 3a5c82f..dc0aeba 100644
> --- a/drivers/usb/host/fsl-mph-dr-of.c
> +++ b/drivers/usb/host/fsl-mph-dr-of.c
> @@ -42,7 +42,7 @@ struct fsl_usb2_dev_data dr_mode_data[] __devinitdata = {
>  	},
>  };
>  
> -struct fsl_usb2_dev_data * __devinit get_dr_mode_data(struct device_node *np)
> +struct fsl_usb2_dev_data *get_dr_mode_data(struct device_node *np)
>  {
>  	const unsigned char *prop;
>  	int i;
> @@ -59,7 +59,7 @@ struct fsl_usb2_dev_data * __devinit get_dr_mode_data(struct device_node *np)
>  	return &dr_mode_data[0]; /* mode not specified, use host */
>  }
>  
> -static enum fsl_usb2_phy_modes __devinit determine_usb_phy(const char *phy_type)
> +static enum fsl_usb2_phy_modes determine_usb_phy(const char *phy_type)
>  {
>  	if (!phy_type)
>  		return FSL_USB2_PHY_NONE;
> @@ -75,7 +75,7 @@ static enum fsl_usb2_phy_modes __devinit determine_usb_phy(const char *phy_type)
>  	return FSL_USB2_PHY_NONE;
>  }
>  
> -struct platform_device * __devinit fsl_usb2_device_register(
> +struct platform_device *fsl_usb2_device_register(
>  					struct platform_device *ofdev,
>  					struct fsl_usb2_platform_data *pdata,
>  					const char *name, int id)
> @@ -154,7 +154,7 @@ static int usb_get_ver_info(struct device_node *np)
>  	return ver;
>  }
>  
> -static int __devinit fsl_usb2_mph_dr_of_probe(struct platform_device *ofdev)
> +static int fsl_usb2_mph_dr_of_probe(struct platform_device *ofdev)
>  {
>  	struct device_node *np = ofdev->dev.of_node;
>  	struct platform_device *usb_dev;
> diff --git a/drivers/usb/host/imx21-hcd.c b/drivers/usb/host/imx21-hcd.c
> index f19e269..bd6a744 100644
> --- a/drivers/usb/host/imx21-hcd.c
> +++ b/drivers/usb/host/imx21-hcd.c
> @@ -1680,7 +1680,7 @@ static int imx21_hc_reset(struct usb_hcd *hcd)
>  	return 0;
>  }
>  
> -static int __devinit imx21_hc_start(struct usb_hcd *hcd)
> +static int imx21_hc_start(struct usb_hcd *hcd)
>  {
>  	struct imx21 *imx21 = hcd_to_imx21(hcd);
>  	unsigned long flags;
> diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c
> index 9e65e30..b64e661 100644
> --- a/drivers/usb/host/isp116x-hcd.c
> +++ b/drivers/usb/host/isp116x-hcd.c
> @@ -1557,7 +1557,7 @@ static int isp116x_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -static int __devinit isp116x_probe(struct platform_device *pdev)
> +static int isp116x_probe(struct platform_device *pdev)
>  {
>  	struct usb_hcd *hcd;
>  	struct isp116x *isp116x;
> diff --git a/drivers/usb/host/isp1362-hcd.c b/drivers/usb/host/isp1362-hcd.c
> index 1ad9d20..5f8b63c 100644
> --- a/drivers/usb/host/isp1362-hcd.c
> +++ b/drivers/usb/host/isp1362-hcd.c
> @@ -2680,7 +2680,7 @@ static int __devexit isp1362_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -static int __devinit isp1362_probe(struct platform_device *pdev)
> +static int isp1362_probe(struct platform_device *pdev)
>  {
>  	struct usb_hcd *hcd;
>  	struct isp1362_hcd *isp1362_hcd;
> diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c
> index 5fb3cae..d752a4c 100644
> --- a/drivers/usb/host/isp1760-if.c
> +++ b/drivers/usb/host/isp1760-if.c
> @@ -172,7 +172,7 @@ static struct platform_driver isp1760_of_driver = {
>  #endif
>  
>  #ifdef CONFIG_PCI
> -static int __devinit isp1761_pci_probe(struct pci_dev *dev,
> +static int isp1761_pci_probe(struct pci_dev *dev,
>  		const struct pci_device_id *id)
>  {
>  	u8 latency, limit;
> @@ -346,7 +346,7 @@ static struct pci_driver isp1761_pci_driver = {
>  };
>  #endif
>  
> -static int __devinit isp1760_plat_probe(struct platform_device *pdev)
> +static int isp1760_plat_probe(struct platform_device *pdev)
>  {
>  	int ret = 0;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
> index 51de2f9..0518348 100644
> --- a/drivers/usb/host/ohci-at91.c
> +++ b/drivers/usb/host/ohci-at91.c
> @@ -108,7 +108,7 @@ static void __devexit usb_hcd_at91_remove (struct usb_hcd *, struct platform_dev
>   * then invokes the start() method for the HCD associated with it
>   * through the hotplug entry's driver_data.
>   */
> -static int __devinit usb_hcd_at91_probe(const struct hc_driver *driver,
> +static int usb_hcd_at91_probe(const struct hc_driver *driver,
>  			struct platform_device *pdev)
>  {
>  	int retval;
> @@ -222,7 +222,7 @@ static void __devexit usb_hcd_at91_remove(struct usb_hcd *hcd,
>  
>  /*-------------------------------------------------------------------------*/
>  
> -static int __devinit
> +static int
>  ohci_at91_reset (struct usb_hcd *hcd)
>  {
>  	struct at91_usbh_data	*board = hcd->self.controller->platform_data;
> @@ -236,7 +236,7 @@ ohci_at91_reset (struct usb_hcd *hcd)
>  	return 0;
>  }
>  
> -static int __devinit
> +static int
>  ohci_at91_start (struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd		*ohci = hcd_to_ohci (hcd);
> @@ -506,7 +506,7 @@ MODULE_DEVICE_TABLE(of, at91_ohci_dt_ids);
>  
>  static u64 at91_ohci_dma_mask = DMA_BIT_MASK(32);
>  
> -static int __devinit ohci_at91_of_init(struct platform_device *pdev)
> +static int ohci_at91_of_init(struct platform_device *pdev)
>  {
>  	struct device_node *np = pdev->dev.of_node;
>  	int i, gpio;
> @@ -548,7 +548,7 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev)
>  	return 0;
>  }
>  #else
> -static int __devinit ohci_at91_of_init(struct platform_device *pdev)
> +static int ohci_at91_of_init(struct platform_device *pdev)
>  {
>  	return 0;
>  }
> @@ -556,7 +556,7 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev)
>  
>  /*-------------------------------------------------------------------------*/
>  
> -static int __devinit ohci_hcd_at91_drv_probe(struct platform_device *pdev)
> +static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
>  {
>  	struct at91_usbh_data	*pdata;
>  	int			i;
> diff --git a/drivers/usb/host/ohci-ep93xx.c b/drivers/usb/host/ohci-ep93xx.c
> index a982f04..8704e9fa 100644
> --- a/drivers/usb/host/ohci-ep93xx.c
> +++ b/drivers/usb/host/ohci-ep93xx.c
> @@ -107,7 +107,7 @@ static void usb_hcd_ep93xx_remove(struct usb_hcd *hcd,
>  	usb_put_hcd(hcd);
>  }
>  
> -static int __devinit ohci_ep93xx_start(struct usb_hcd *hcd)
> +static int ohci_ep93xx_start(struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd *ohci = hcd_to_ohci(hcd);
>  	int ret;
> diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c
> index 2f673e8..1288cdb 100644
> --- a/drivers/usb/host/ohci-exynos.c
> +++ b/drivers/usb/host/ohci-exynos.c
> @@ -76,7 +76,7 @@ static const struct hc_driver exynos_ohci_hc_driver = {
>  
>  static u64 ohci_exynos_dma_mask = DMA_BIT_MASK(32);
>  
> -static int __devinit exynos_ohci_probe(struct platform_device *pdev)
> +static int exynos_ohci_probe(struct platform_device *pdev)
>  {
>  	struct exynos4_ohci_platdata *pdata;
>  	struct exynos_ohci_hcd *exynos_ohci;
> diff --git a/drivers/usb/host/ohci-jz4740.c b/drivers/usb/host/ohci-jz4740.c
> index b4921b7..59feb87 100644
> --- a/drivers/usb/host/ohci-jz4740.c
> +++ b/drivers/usb/host/ohci-jz4740.c
> @@ -145,7 +145,7 @@ static const struct hc_driver ohci_jz4740_hc_driver = {
>  };
>  
>  
> -static __devinit int jz4740_ohci_probe(struct platform_device *pdev)
> +static int jz4740_ohci_probe(struct platform_device *pdev)
>  {
>  	int ret;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/ohci-nxp.c b/drivers/usb/host/ohci-nxp.c
> index e068f03..2344040 100644
> --- a/drivers/usb/host/ohci-nxp.c
> +++ b/drivers/usb/host/ohci-nxp.c
> @@ -147,7 +147,7 @@ static void nxp_stop_hc(void)
>  	__raw_writel(tmp, USB_OTG_STAT_CONTROL);
>  }
>  
> -static int __devinit ohci_nxp_start(struct usb_hcd *hcd)
> +static int ohci_nxp_start(struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd *ohci = hcd_to_ohci(hcd);
>  	int ret;
> @@ -205,7 +205,7 @@ static const struct hc_driver ohci_nxp_hc_driver = {
>  	.start_port_reset = ohci_start_port_reset,
>  };
>  
> -static int __devinit usb_hcd_nxp_probe(struct platform_device *pdev)
> +static int usb_hcd_nxp_probe(struct platform_device *pdev)
>  {
>  	struct usb_hcd *hcd = 0;
>  	struct ohci_hcd *ohci;
> diff --git a/drivers/usb/host/ohci-octeon.c b/drivers/usb/host/ohci-octeon.c
> index d469bf9..d44430d 100644
> --- a/drivers/usb/host/ohci-octeon.c
> +++ b/drivers/usb/host/ohci-octeon.c
> @@ -42,7 +42,7 @@ static void ohci_octeon_hw_stop(void)
>  	octeon2_usb_clocks_stop();
>  }
>  
> -static int __devinit ohci_octeon_start(struct usb_hcd *hcd)
> +static int ohci_octeon_start(struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd	*ohci = hcd_to_ohci(hcd);
>  	int ret;
> diff --git a/drivers/usb/host/ohci-omap3.c b/drivers/usb/host/ohci-omap3.c
> index 002c812..41382fc 100644
> --- a/drivers/usb/host/ohci-omap3.c
> +++ b/drivers/usb/host/ohci-omap3.c
> @@ -124,7 +124,7 @@ static const struct hc_driver ohci_omap3_hc_driver = {
>   * then invokes the start() method for the HCD associated with it
>   * through the hotplug entry's driver_data.
>   */
> -static int __devinit ohci_hcd_omap3_probe(struct platform_device *pdev)
> +static int ohci_hcd_omap3_probe(struct platform_device *pdev)
>  {
>  	struct device		*dev = &pdev->dev;
>  	struct usb_hcd		*hcd = NULL;
> diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c
> index 6afa7dc..951514e 100644
> --- a/drivers/usb/host/ohci-pci.c
> +++ b/drivers/usb/host/ohci-pci.c
> @@ -270,7 +270,7 @@ static int ohci_pci_reset (struct usb_hcd *hcd)
>  }
>  
>  
> -static int __devinit ohci_pci_start (struct usb_hcd *hcd)
> +static int ohci_pci_start (struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd	*ohci = hcd_to_ohci (hcd);
>  	int		ret;
> diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
> index ffe6c98..c3f76fa 100644
> --- a/drivers/usb/host/ohci-platform.c
> +++ b/drivers/usb/host/ohci-platform.c
> @@ -83,7 +83,7 @@ static const struct hc_driver ohci_platform_hc_driver = {
>  	.start_port_reset	= ohci_start_port_reset,
>  };
>  
> -static int __devinit ohci_platform_probe(struct platform_device *dev)
> +static int ohci_platform_probe(struct platform_device *dev)
>  {
>  	struct usb_hcd *hcd;
>  	struct resource *res_mem;
> diff --git a/drivers/usb/host/ohci-ppc-of.c b/drivers/usb/host/ohci-ppc-of.c
> index e27d5ae..64c2ed9f 100644
> --- a/drivers/usb/host/ohci-ppc-of.c
> +++ b/drivers/usb/host/ohci-ppc-of.c
> @@ -19,7 +19,7 @@
>  #include <asm/prom.h>
>  
>  
> -static int __devinit
> +static int
>  ohci_ppc_of_start(struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd	*ohci = hcd_to_ohci(hcd);
> @@ -81,7 +81,7 @@ static const struct hc_driver ohci_ppc_of_hc_driver = {
>  };
>  
>  
> -static int __devinit ohci_hcd_ppc_of_probe(struct platform_device *op)
> +static int ohci_hcd_ppc_of_probe(struct platform_device *op)
>  {
>  	struct device_node *dn = op->dev.of_node;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/ohci-ps3.c b/drivers/usb/host/ohci-ps3.c
> index 2ee1d8d..7d35cd9 100644
> --- a/drivers/usb/host/ohci-ps3.c
> +++ b/drivers/usb/host/ohci-ps3.c
> @@ -30,7 +30,7 @@ static int ps3_ohci_hc_reset(struct usb_hcd *hcd)
>  	return ohci_init(ohci);
>  }
>  
> -static int __devinit ps3_ohci_hc_start(struct usb_hcd *hcd)
> +static int ps3_ohci_hc_start(struct usb_hcd *hcd)
>  {
>  	int result;
>  	struct ohci_hcd *ohci = hcd_to_ohci(hcd);
> @@ -76,7 +76,7 @@ static const struct hc_driver ps3_ohci_hc_driver = {
>  #endif
>  };
>  
> -static int __devinit ps3_ohci_probe(struct ps3_system_bus_device *dev)
> +static int ps3_ohci_probe(struct ps3_system_bus_device *dev)
>  {
>  	int result;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c
> index 156d289..efe71f3 100644
> --- a/drivers/usb/host/ohci-pxa27x.c
> +++ b/drivers/usb/host/ohci-pxa27x.c
> @@ -284,7 +284,7 @@ MODULE_DEVICE_TABLE(of, pxa_ohci_dt_ids);
>  
>  static u64 pxa_ohci_dma_mask = DMA_BIT_MASK(32);
>  
> -static int __devinit ohci_pxa_of_init(struct platform_device *pdev)
> +static int ohci_pxa_of_init(struct platform_device *pdev)
>  {
>  	struct device_node *np = pdev->dev.of_node;
>  	struct pxaohci_platform_data *pdata;
> @@ -330,7 +330,7 @@ static int __devinit ohci_pxa_of_init(struct platform_device *pdev)
>  	return 0;
>  }
>  #else
> -static int __devinit ohci_pxa_of_init(struct platform_device *pdev)
> +static int ohci_pxa_of_init(struct platform_device *pdev)
>  {
>  	return 0;
>  }
> @@ -471,7 +471,7 @@ void usb_hcd_pxa27x_remove (struct usb_hcd *hcd, struct platform_device *pdev)
>  
>  /*-------------------------------------------------------------------------*/
>  
> -static int __devinit
> +static int
>  ohci_pxa27x_start (struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd	*ohci = hcd_to_ohci (hcd);
> diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c
> index 5c5c017..4f29e0b 100644
> --- a/drivers/usb/host/ohci-s3c2410.c
> +++ b/drivers/usb/host/ohci-s3c2410.c
> @@ -458,7 +458,7 @@ static const struct hc_driver ohci_s3c2410_hc_driver = {
>  
>  /* device driver */
>  
> -static int __devinit ohci_hcd_s3c2410_drv_probe(struct platform_device *pdev)
> +static int ohci_hcd_s3c2410_drv_probe(struct platform_device *pdev)
>  {
>  	return usb_hcd_s3c2410_probe(&ohci_s3c2410_hc_driver, pdev);
>  }
> diff --git a/drivers/usb/host/ohci-sa1111.c b/drivers/usb/host/ohci-sa1111.c
> index b6cc925..17b2a7d 100644
> --- a/drivers/usb/host/ohci-sa1111.c
> +++ b/drivers/usb/host/ohci-sa1111.c
> @@ -63,7 +63,7 @@ static int ohci_sa1111_reset(struct usb_hcd *hcd)
>  	return ohci_init(ohci);
>  }
>  
> -static int __devinit ohci_sa1111_start(struct usb_hcd *hcd)
> +static int ohci_sa1111_start(struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd	*ohci = hcd_to_ohci(hcd);
>  	int ret;
> diff --git a/drivers/usb/host/ohci-spear.c b/drivers/usb/host/ohci-spear.c
> index c69725d..b7fc2fc 100644
> --- a/drivers/usb/host/ohci-spear.c
> +++ b/drivers/usb/host/ohci-spear.c
> @@ -33,7 +33,7 @@ static void spear_stop_ohci(struct spear_ohci *ohci)
>  	clk_disable_unprepare(ohci->clk);
>  }
>  
> -static int __devinit ohci_spear_start(struct usb_hcd *hcd)
> +static int ohci_spear_start(struct usb_hcd *hcd)
>  {
>  	struct ohci_hcd *ohci = hcd_to_ohci(hcd);
>  	int ret;
> diff --git a/drivers/usb/host/ohci-tmio.c b/drivers/usb/host/ohci-tmio.c
> index 94c6c55..5996a3b 100644
> --- a/drivers/usb/host/ohci-tmio.c
> +++ b/drivers/usb/host/ohci-tmio.c
> @@ -184,7 +184,7 @@ static const struct hc_driver ohci_tmio_hc_driver = {
>  /*-------------------------------------------------------------------------*/
>  static struct platform_driver ohci_hcd_tmio_driver;
>  
> -static int __devinit ohci_hcd_tmio_drv_probe(struct platform_device *dev)
> +static int ohci_hcd_tmio_drv_probe(struct platform_device *dev)
>  {
>  	const struct mfd_cell *cell = mfd_get_cell(dev);
>  	struct resource *regs = platform_get_resource(dev, IORESOURCE_MEM, 0);
> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index 39f9e4a..a018e70 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -443,7 +443,7 @@ static inline int io_type_enabled(struct pci_dev *pdev, unsigned int mask)
>  #define pio_enabled(dev) io_type_enabled(dev, PCI_COMMAND_IO)
>  #define mmio_enabled(dev) io_type_enabled(dev, PCI_COMMAND_MEMORY)
>  
> -static void __devinit quirk_usb_handoff_uhci(struct pci_dev *pdev)
> +static void quirk_usb_handoff_uhci(struct pci_dev *pdev)
>  {
>  	unsigned long base = 0;
>  	int i;
> @@ -461,12 +461,12 @@ static void __devinit quirk_usb_handoff_uhci(struct pci_dev *pdev)
>  		uhci_check_and_reset_hc(pdev, base);
>  }
>  
> -static int __devinit mmio_resource_enabled(struct pci_dev *pdev, int idx)
> +static int mmio_resource_enabled(struct pci_dev *pdev, int idx)
>  {
>  	return pci_resource_start(pdev, idx) && mmio_enabled(pdev);
>  }
>  
> -static void __devinit quirk_usb_handoff_ohci(struct pci_dev *pdev)
> +static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
>  {
>  	void __iomem *base;
>  	u32 control;
> @@ -558,7 +558,7 @@ static const struct dmi_system_id __devinitconst ehci_dmi_nohandoff_table[] = {
>  	{ }
>  };
>  
> -static void __devinit ehci_bios_handoff(struct pci_dev *pdev,
> +static void ehci_bios_handoff(struct pci_dev *pdev,
>  					void __iomem *op_reg_base,
>  					u32 cap, u8 offset)
>  {
> @@ -626,7 +626,7 @@ static void __devinit ehci_bios_handoff(struct pci_dev *pdev,
>  		writel(0, op_reg_base + EHCI_CONFIGFLAG);
>  }
>  
> -static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev)
> +static void quirk_usb_disable_ehci(struct pci_dev *pdev)
>  {
>  	void __iomem *base, *op_reg_base;
>  	u32	hcc_params, cap, val;
> @@ -841,7 +841,7 @@ EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
>   * and then waits 5 seconds for the BIOS to hand over control.
>   * If we timeout, assume the BIOS is broken and take control anyway.
>   */
> -static void __devinit quirk_usb_handoff_xhci(struct pci_dev *pdev)
> +static void quirk_usb_handoff_xhci(struct pci_dev *pdev)
>  {
>  	void __iomem *base;
>  	int ext_cap_offset;
> @@ -941,7 +941,7 @@ hc_init:
>  	iounmap(base);
>  }
>  
> -static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev)
> +static void quirk_usb_early_handoff(struct pci_dev *pdev)
>  {
>  	/* Skip Netlogic mips SoC's internal PCI USB controller.
>  	 * This device does not need/support EHCI/OHCI handoff
> diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
> index 4e0436f..e97dfad 100644
> --- a/drivers/usb/host/r8a66597-hcd.c
> +++ b/drivers/usb/host/r8a66597-hcd.c
> @@ -2405,7 +2405,7 @@ static int __devexit r8a66597_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -static int __devinit r8a66597_probe(struct platform_device *pdev)
> +static int r8a66597_probe(struct platform_device *pdev)
>  {
>  	char clk_name[8];
>  	struct resource *res = NULL, *ires;
> diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
> index 15f20de..782127d 100644
> --- a/drivers/usb/host/sl811-hcd.c
> +++ b/drivers/usb/host/sl811-hcd.c
> @@ -1618,7 +1618,7 @@ sl811h_remove(struct platform_device *dev)
>  	return 0;
>  }
>  
> -static int __devinit
> +static int
>  sl811h_probe(struct platform_device *dev)
>  {
>  	struct usb_hcd		*hcd;
> diff --git a/drivers/usb/host/ssb-hcd.c b/drivers/usb/host/ssb-hcd.c
> index 4dc9a09..79aa958 100644
> --- a/drivers/usb/host/ssb-hcd.c
> +++ b/drivers/usb/host/ssb-hcd.c
> @@ -39,7 +39,7 @@ struct ssb_hcd_device {
>  	u32 enable_flags;
>  };
>  
> -static void __devinit ssb_hcd_5354wa(struct ssb_device *dev)
> +static void ssb_hcd_5354wa(struct ssb_device *dev)
>  {
>  #ifdef CONFIG_SSB_DRIVER_MIPS
>  	/* Work around for 5354 failures */
> @@ -53,7 +53,7 @@ static void __devinit ssb_hcd_5354wa(struct ssb_device *dev)
>  #endif
>  }
>  
> -static void __devinit ssb_hcd_usb20wa(struct ssb_device *dev)
> +static void ssb_hcd_usb20wa(struct ssb_device *dev)
>  {
>  	if (dev->id.coreid == SSB_DEV_USB20_HOST) {
>  		/*
> @@ -80,7 +80,7 @@ static void __devinit ssb_hcd_usb20wa(struct ssb_device *dev)
>  }
>  
>  /* based on arch/mips/brcm-boards/bcm947xx/pcibios.c */
> -static u32 __devinit ssb_hcd_init_chip(struct ssb_device *dev)
> +static u32 ssb_hcd_init_chip(struct ssb_device *dev)
>  {
>  	u32 flags = 0;
>  
> @@ -101,8 +101,7 @@ static const struct usb_ehci_pdata ehci_pdata = {
>  static const struct usb_ohci_pdata ohci_pdata = {
>  };
>  
> -static struct platform_device * __devinit
> -ssb_hcd_create_pdev(struct ssb_device *dev, bool ohci, u32 addr, u32 len)
> +static struct platform_device *ssb_hcd_create_pdev(struct ssb_device *dev, bool ohci, u32 addr, u32 len)
>  {
>  	struct platform_device *hci_dev;
>  	struct resource hci_res[2];
> @@ -148,7 +147,7 @@ err_alloc:
>  	return ERR_PTR(ret);
>  }
>  
> -static int __devinit ssb_hcd_probe(struct ssb_device *dev,
> +static int ssb_hcd_probe(struct ssb_device *dev,
>  				   const struct ssb_device_id *id)
>  {
>  	int err, tmp;
> diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c
> index 8836898..8bf78e6 100644
> --- a/drivers/usb/host/u132-hcd.c
> +++ b/drivers/usb/host/u132-hcd.c
> @@ -3084,7 +3084,7 @@ static void u132_initialise(struct u132 *u132, struct platform_device *pdev)
>  	mutex_unlock(&u132->sw_lock);
>  }
>  
> -static int __devinit u132_probe(struct platform_device *pdev)
> +static int u132_probe(struct platform_device *pdev)
>  {
>  	struct usb_hcd *hcd;
>  	int retval;
> diff --git a/drivers/usb/host/uhci-grlib.c b/drivers/usb/host/uhci-grlib.c
> index f7a6213..511bfc4 100644
> --- a/drivers/usb/host/uhci-grlib.c
> +++ b/drivers/usb/host/uhci-grlib.c
> @@ -85,7 +85,7 @@ static const struct hc_driver uhci_grlib_hc_driver = {
>  };
>  
>  
> -static int __devinit uhci_hcd_grlib_probe(struct platform_device *op)
> +static int uhci_hcd_grlib_probe(struct platform_device *op)
>  {
>  	struct device_node *dn = op->dev.of_node;
>  	struct usb_hcd *hcd;
> diff --git a/drivers/usb/host/uhci-platform.c b/drivers/usb/host/uhci-platform.c
> index 68ebf20..8c4dace 100644
> --- a/drivers/usb/host/uhci-platform.c
> +++ b/drivers/usb/host/uhci-platform.c
> @@ -62,7 +62,7 @@ static const struct hc_driver uhci_platform_hc_driver = {
>  
>  static u64 platform_uhci_dma_mask = DMA_BIT_MASK(32);
>  
> -static int __devinit uhci_hcd_platform_probe(struct platform_device *pdev)
> +static int uhci_hcd_platform_probe(struct platform_device *pdev)
>  {
>  	struct usb_hcd *hcd;
>  	struct uhci_hcd	*uhci;
> diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
> index 35d94ac..2363819 100644
> --- a/drivers/usb/musb/am35x.c
> +++ b/drivers/usb/musb/am35x.c
> @@ -454,7 +454,7 @@ static const struct musb_platform_ops am35x_ops = {
>  
>  static u64 am35x_dmamask = DMA_BIT_MASK(32);
>  
> -static int __devinit am35x_probe(struct platform_device *pdev)
> +static int am35x_probe(struct platform_device *pdev)
>  {
>  	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
>  	struct platform_device		*musb;
> diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c
> index 7e4d60a..12beb0e 100644
> --- a/drivers/usb/musb/blackfin.c
> +++ b/drivers/usb/musb/blackfin.c
> @@ -448,7 +448,7 @@ static const struct musb_platform_ops bfin_ops = {
>  
>  static u64 bfin_dmamask = DMA_BIT_MASK(32);
>  
> -static int __devinit bfin_probe(struct platform_device *pdev)
> +static int bfin_probe(struct platform_device *pdev)
>  {
>  	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
>  	struct platform_device		*musb;
> diff --git a/drivers/usb/musb/cppi_dma.c b/drivers/usb/musb/cppi_dma.c
> index 3a6c2fd..0968dd7 100644
> --- a/drivers/usb/musb/cppi_dma.c
> +++ b/drivers/usb/musb/cppi_dma.c
> @@ -1317,8 +1317,7 @@ irqreturn_t cppi_interrupt(int irq, void *dev_id)
>  EXPORT_SYMBOL_GPL(cppi_interrupt);
>  
>  /* Instantiate a software object representing a DMA controller. */
> -struct dma_controller *__devinit
> -dma_controller_create(struct musb *musb, void __iomem *mregs)
> +struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *mregs)
>  {
>  	struct cppi		*controller;
>  	struct device		*dev = musb->controller;
> diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
> index 51ace9b..c4fb235 100644
> --- a/drivers/usb/musb/da8xx.c
> +++ b/drivers/usb/musb/da8xx.c
> @@ -471,7 +471,7 @@ static const struct musb_platform_ops da8xx_ops = {
>  
>  static u64 da8xx_dmamask = DMA_BIT_MASK(32);
>  
> -static int __devinit da8xx_probe(struct platform_device *pdev)
> +static int da8xx_probe(struct platform_device *pdev)
>  {
>  	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
>  	struct platform_device		*musb;
> diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
> index e01087b..8877c1a 100644
> --- a/drivers/usb/musb/davinci.c
> +++ b/drivers/usb/musb/davinci.c
> @@ -504,7 +504,7 @@ static const struct musb_platform_ops davinci_ops = {
>  
>  static u64 davinci_dmamask = DMA_BIT_MASK(32);
>  
> -static int __devinit davinci_probe(struct platform_device *pdev)
> +static int davinci_probe(struct platform_device *pdev)
>  {
>  	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
>  	struct platform_device		*musb;
> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
> index 69cfa18..f17a3e7 100644
> --- a/drivers/usb/musb/musb_core.c
> +++ b/drivers/usb/musb/musb_core.c
> @@ -1163,7 +1163,7 @@ static struct musb_fifo_cfg __devinitdata mode_5_cfg[] = {
>   *
>   * returns negative errno or offset for next fifo.
>   */
> -static int __devinit
> +static int
>  fifo_setup(struct musb *musb, struct musb_hw_ep  *hw_ep,
>  		const struct musb_fifo_cfg *cfg, u16 offset)
>  {
> @@ -1238,7 +1238,7 @@ static struct musb_fifo_cfg __devinitdata ep0_cfg = {
>  	.style = FIFO_RXTX, .maxpacket = 64,
>  };
>  
> -static int __devinit ep_config_from_table(struct musb *musb)
> +static int ep_config_from_table(struct musb *musb)
>  {
>  	const struct musb_fifo_cfg	*cfg;
>  	unsigned		i, n;
> @@ -1329,7 +1329,7 @@ done:
>   * ep_config_from_hw - when MUSB_C_DYNFIFO_DEF is false
>   * @param musb the controller
>   */
> -static int __devinit ep_config_from_hw(struct musb *musb)
> +static int ep_config_from_hw(struct musb *musb)
>  {
>  	u8 epnum = 0;
>  	struct musb_hw_ep *hw_ep;
> @@ -1376,7 +1376,7 @@ enum { MUSB_CONTROLLER_MHDRC, MUSB_CONTROLLER_HDRC, };
>  /* Initialize MUSB (M)HDRC part of the USB hardware subsystem;
>   * configure endpoints, or take their config from silicon
>   */
> -static int __devinit musb_core_init(u16 musb_type, struct musb *musb)
> +static int musb_core_init(u16 musb_type, struct musb *musb)
>  {
>  	u8 reg;
>  	char *type;
> @@ -1759,8 +1759,7 @@ static void musb_irq_work(struct work_struct *data)
>   * Init support
>   */
>  
> -static struct musb *__devinit
> -allocate_instance(struct device *dev,
> +static struct musb *allocate_instance(struct device *dev,
>  		struct musb_hdrc_config *config, void __iomem *mbase)
>  {
>  	struct musb		*musb;
> @@ -1835,7 +1834,7 @@ static void musb_free(struct musb *musb)
>   * @ctrl: virtual address of controller registers,
>   *	not yet corrected for platform-specific offsets
>   */
> -static int __devinit
> +static int
>  musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
>  {
>  	int			status;
> @@ -2010,7 +2009,7 @@ fail0:
>  /* all implementations (PCI bridge to FPGA, VLYNQ, etc) should just
>   * bridge to a platform device; this driver then suffices.
>   */
> -static int __devinit musb_probe(struct platform_device *pdev)
> +static int musb_probe(struct platform_device *pdev)
>  {
>  	struct device	*dev = &pdev->dev;
>  	int		irq = platform_get_irq_byname(pdev, "mc");
> diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c
> index 1d6e8af..4c21679 100644
> --- a/drivers/usb/musb/musb_debugfs.c
> +++ b/drivers/usb/musb/musb_debugfs.c
> @@ -233,7 +233,7 @@ static const struct file_operations musb_test_mode_fops = {
>  	.release		= single_release,
>  };
>  
> -int __devinit musb_init_debugfs(struct musb *musb)
> +int musb_init_debugfs(struct musb *musb)
>  {
>  	struct dentry		*root;
>  	struct dentry		*file;
> diff --git a/drivers/usb/musb/musb_dma.h b/drivers/usb/musb/musb_dma.h
> index 24d3921..1b6b827 100644
> --- a/drivers/usb/musb/musb_dma.h
> +++ b/drivers/usb/musb/musb_dma.h
> @@ -178,8 +178,7 @@ struct dma_controller {
>  extern void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit);
>  
>  
> -extern struct dma_controller *__devinit
> -dma_controller_create(struct musb *, void __iomem *);
> +extern struct dma_controller *dma_controller_create(struct musb *, void __iomem *);
>  
>  extern void dma_controller_destroy(struct dma_controller *);
>  
> diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
> index 5daea65..faeacd4 100644
> --- a/drivers/usb/musb/musb_dsps.c
> +++ b/drivers/usb/musb/musb_dsps.c
> @@ -478,7 +478,7 @@ static struct musb_platform_ops dsps_ops = {
>  
>  static u64 musb_dmamask = DMA_BIT_MASK(32);
>  
> -static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
> +static int dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
>  {
>  	struct device *dev = glue->dev;
>  	struct platform_device *pdev = to_platform_device(dev);
> @@ -591,7 +591,7 @@ err0:
>  	return ret;
>  }
>  
> -static int __devinit dsps_probe(struct platform_device *pdev)
> +static int dsps_probe(struct platform_device *pdev)
>  {
>  	struct device_node *np = pdev->dev.of_node;
>  	const struct of_device_id *match;
> diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
> index 4f23b12..8767874 100644
> --- a/drivers/usb/musb/musb_gadget.c
> +++ b/drivers/usb/musb/musb_gadget.c
> @@ -1787,7 +1787,7 @@ static void musb_gadget_release(struct device *dev)
>  }
>  
>  
> -static void __devinit
> +static void
>  init_peripheral_ep(struct musb *musb, struct musb_ep *ep, u8 epnum, int is_in)
>  {
>  	struct musb_hw_ep	*hw_ep = musb->endpoints + epnum;
> @@ -1824,7 +1824,7 @@ init_peripheral_ep(struct musb *musb, struct musb_ep *ep, u8 epnum, int is_in)
>   * Initialize the endpoints exposed to peripheral drivers, with backlinks
>   * to the rest of the driver state.
>   */
> -static inline void __devinit musb_g_init_endpoints(struct musb *musb)
> +static inline void musb_g_init_endpoints(struct musb *musb)
>  {
>  	u8			epnum;
>  	struct musb_hw_ep	*hw_ep;
> @@ -1857,7 +1857,7 @@ static inline void __devinit musb_g_init_endpoints(struct musb *musb)
>  /* called once during driver setup to initialize and link into
>   * the driver model; memory is zeroed.
>   */
> -int __devinit musb_gadget_setup(struct musb *musb)
> +int musb_gadget_setup(struct musb *musb)
>  {
>  	int status;
>  
> diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
> index 0fc6ca6..3d1fd52 100644
> --- a/drivers/usb/musb/musbhsdma.c
> +++ b/drivers/usb/musb/musbhsdma.c
> @@ -380,8 +380,7 @@ void dma_controller_destroy(struct dma_controller *c)
>  	kfree(controller);
>  }
>  
> -struct dma_controller *__devinit
> -dma_controller_create(struct musb *musb, void __iomem *base)
> +struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *base)
>  {
>  	struct musb_dma_controller *controller;
>  	struct device *dev = musb->controller;
> diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
> index 1150b4b..06850f2 100644
> --- a/drivers/usb/musb/omap2430.c
> +++ b/drivers/usb/musb/omap2430.c
> @@ -490,7 +490,7 @@ static const struct musb_platform_ops omap2430_ops = {
>  
>  static u64 omap2430_dmamask = DMA_BIT_MASK(32);
>  
> -static int __devinit omap2430_probe(struct platform_device *pdev)
> +static int omap2430_probe(struct platform_device *pdev)
>  {
>  	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
>  	struct omap_musb_board_data	*data;
> diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
> index b816517..a03b7be 100644
> --- a/drivers/usb/musb/tusb6010.c
> +++ b/drivers/usb/musb/tusb6010.c
> @@ -1153,7 +1153,7 @@ static const struct musb_platform_ops tusb_ops = {
>  
>  static u64 tusb_dmamask = DMA_BIT_MASK(32);
>  
> -static int __devinit tusb_probe(struct platform_device *pdev)
> +static int tusb_probe(struct platform_device *pdev)
>  {
>  	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
>  	struct platform_device		*musb;
> diff --git a/drivers/usb/musb/tusb6010_omap.c b/drivers/usb/musb/tusb6010_omap.c
> index bfca114..9716850 100644
> --- a/drivers/usb/musb/tusb6010_omap.c
> +++ b/drivers/usb/musb/tusb6010_omap.c
> @@ -668,8 +668,7 @@ void dma_controller_destroy(struct dma_controller *c)
>  	kfree(tusb_dma);
>  }
>  
> -struct dma_controller *__devinit
> -dma_controller_create(struct musb *musb, void __iomem *base)
> +struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *base)
>  {
>  	void __iomem		*tbase = musb->ctrl_base;
>  	struct tusb_omap_dma	*tusb_dma;
> diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c
> index 1d81557..6b12001 100644
> --- a/drivers/usb/musb/ux500.c
> +++ b/drivers/usb/musb/ux500.c
> @@ -81,7 +81,7 @@ static const struct musb_platform_ops ux500_ops = {
>  	.exit		= ux500_musb_exit,
>  };
>  
> -static int __devinit ux500_probe(struct platform_device *pdev)
> +static int ux500_probe(struct platform_device *pdev)
>  {
>  	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
>  	struct platform_device		*musb;
> diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c
> index f1059e7..039e567 100644
> --- a/drivers/usb/musb/ux500_dma.c
> +++ b/drivers/usb/musb/ux500_dma.c
> @@ -364,8 +364,7 @@ void dma_controller_destroy(struct dma_controller *c)
>  	kfree(controller);
>  }
>  
> -struct dma_controller *__devinit
> -dma_controller_create(struct musb *musb, void __iomem *base)
> +struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *base)
>  {
>  	struct ux500_dma_controller *controller;
>  	struct platform_device *pdev = to_platform_device(musb->controller);
> diff --git a/drivers/usb/otg/ab8500-usb.c b/drivers/usb/otg/ab8500-usb.c
> index 62ea0c2..f0ba931 100644
> --- a/drivers/usb/otg/ab8500-usb.c
> +++ b/drivers/usb/otg/ab8500-usb.c
> @@ -468,7 +468,7 @@ static int ab8500_usb_v2_res_setup(struct platform_device *pdev,
>  	return 0;
>  }
>  
> -static int __devinit ab8500_usb_probe(struct platform_device *pdev)
> +static int ab8500_usb_probe(struct platform_device *pdev)
>  {
>  	struct ab8500_usb	*ab;
>  	struct usb_otg		*otg;
> diff --git a/drivers/usb/otg/fsl_otg.c b/drivers/usb/otg/fsl_otg.c
> index 77dad18..2b9a838 100644
> --- a/drivers/usb/otg/fsl_otg.c
> +++ b/drivers/usb/otg/fsl_otg.c
> @@ -1110,7 +1110,7 @@ static const struct file_operations otg_fops = {
>  	.release = fsl_otg_release,
>  };
>  
> -static int __devinit fsl_otg_probe(struct platform_device *pdev)
> +static int fsl_otg_probe(struct platform_device *pdev)
>  {
>  	int ret;
>  
> diff --git a/drivers/usb/otg/isp1301_omap.c b/drivers/usb/otg/isp1301_omap.c
> index ceee211..af9cb11 100644
> --- a/drivers/usb/otg/isp1301_omap.c
> +++ b/drivers/usb/otg/isp1301_omap.c
> @@ -1493,7 +1493,7 @@ isp1301_start_hnp(struct usb_otg *otg)
>  
>  /*-------------------------------------------------------------------------*/
>  
> -static int __devinit
> +static int
>  isp1301_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
>  {
>  	int			status;
> diff --git a/drivers/usb/otg/nop-usb-xceiv.c b/drivers/usb/otg/nop-usb-xceiv.c
> index 0502c24..28f70e2 100644
> --- a/drivers/usb/otg/nop-usb-xceiv.c
> +++ b/drivers/usb/otg/nop-usb-xceiv.c
> @@ -93,7 +93,7 @@ static int nop_set_host(struct usb_otg *otg, struct usb_bus *host)
>  	return 0;
>  }
>  
> -static int __devinit nop_usb_xceiv_probe(struct platform_device *pdev)
> +static int nop_usb_xceiv_probe(struct platform_device *pdev)
>  {
>  	struct nop_usb_xceiv_platform_data *pdata = pdev->dev.platform_data;
>  	struct nop_usb_xceiv	*nop;
> diff --git a/drivers/usb/otg/twl4030-usb.c b/drivers/usb/otg/twl4030-usb.c
> index 11b2a12..0a70193 100644
> --- a/drivers/usb/otg/twl4030-usb.c
> +++ b/drivers/usb/otg/twl4030-usb.c
> @@ -575,7 +575,7 @@ static int twl4030_set_host(struct usb_otg *otg, struct usb_bus *host)
>  	return 0;
>  }
>  
> -static int __devinit twl4030_usb_probe(struct platform_device *pdev)
> +static int twl4030_usb_probe(struct platform_device *pdev)
>  {
>  	struct twl4030_usb_data *pdata = pdev->dev.platform_data;
>  	struct twl4030_usb	*twl;
> diff --git a/drivers/usb/otg/twl6030-usb.c b/drivers/usb/otg/twl6030-usb.c
> index fcadef7..8cd6cf4 100644
> --- a/drivers/usb/otg/twl6030-usb.c
> +++ b/drivers/usb/otg/twl6030-usb.c
> @@ -310,7 +310,7 @@ static int twl6030_set_vbus(struct phy_companion *comparator, bool enabled)
>  	return 0;
>  }
>  
> -static int __devinit twl6030_usb_probe(struct platform_device *pdev)
> +static int twl6030_usb_probe(struct platform_device *pdev)
>  {
>  	u32 ret;
>  	struct twl6030_usb	*twl;
> diff --git a/drivers/usb/phy/mv_u3d_phy.c b/drivers/usb/phy/mv_u3d_phy.c
> index 80cf57e..eaddbe3 100644
> --- a/drivers/usb/phy/mv_u3d_phy.c
> +++ b/drivers/usb/phy/mv_u3d_phy.c
> @@ -262,7 +262,7 @@ calstart:
>  	return 0;
>  }
>  
> -static int __devinit mv_u3d_phy_probe(struct platform_device *pdev)
> +static int mv_u3d_phy_probe(struct platform_device *pdev)
>  {
>  	struct mv_u3d_phy *mv_u3d_phy;
>  	struct mv_usb_platform_data *pdata;
> diff --git a/drivers/usb/phy/omap-usb2.c b/drivers/usb/phy/omap-usb2.c
> index f1ed872..c10fb8b 100644
> --- a/drivers/usb/phy/omap-usb2.c
> +++ b/drivers/usb/phy/omap-usb2.c
> @@ -141,7 +141,7 @@ static int omap_usb2_suspend(struct usb_phy *x, int suspend)
>  	return 0;
>  }
>  
> -static int __devinit omap_usb2_probe(struct platform_device *pdev)
> +static int omap_usb2_probe(struct platform_device *pdev)
>  {
>  	struct omap_usb			*phy;
>  	struct usb_otg			*otg;
> diff --git a/drivers/usb/phy/rcar-phy.c b/drivers/usb/phy/rcar-phy.c
> index 703a295..84ac2a7 100644
> --- a/drivers/usb/phy/rcar-phy.c
> +++ b/drivers/usb/phy/rcar-phy.c
> @@ -142,7 +142,7 @@ static void rcar_usb_phy_shutdown(struct usb_phy *phy)
>  	spin_unlock_irqrestore(&priv->lock, flags);
>  }
>  
> -static int __devinit rcar_usb_phy_probe(struct platform_device *pdev)
> +static int rcar_usb_phy_probe(struct platform_device *pdev)
>  {
>  	struct rcar_usb_phy_priv *priv;
>  	struct resource *res0, *res1;
> 


-- 
Nicolas Ferre

^ permalink raw reply

* Re: [PATCH v3 06/12] memory-hotplug: unregister memory section on SPARSEMEM_VMEMMAP
From: Wen Congyang @ 2012-11-20  9:37 UTC (permalink / raw)
  To: Jaegeuk Hanse
  Cc: linux-s390, linux-ia64, Len Brown, linux-acpi, linux-sh, x86,
	linux-kernel, cmetcalf, Jianguo Wu, linux-mm, Yasuaki Ishimatsu,
	paulus, Minchan Kim, KOSAKI Motohiro, David Rientjes, sparclinux,
	Christoph Lameter, linuxppc-dev, Andrew Morton, Jiang Liu
In-Reply-To: <50AB2A1A.6040606@gmail.com>

At 11/20/2012 02:58 PM, Jaegeuk Hanse Wrote:
> On 11/20/2012 02:55 PM, Wen Congyang wrote:
>> At 11/20/2012 02:22 PM, Jaegeuk Hanse Wrote:
>>> On 11/01/2012 05:44 PM, Wen Congyang wrote:
>>>> From: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>>>>
>>>> Currently __remove_section for SPARSEMEM_VMEMMAP does nothing. But
>>>> even if
>>>> we use SPARSEMEM_VMEMMAP, we can unregister the memory_section.
>>>>
>>>> So the patch add unregister_memory_section() into __remove_section().
>>> Hi Yasuaki,
>>>
>>> In order to review this patch, I should dig sparse memory codes in
>>> advance. But I have some confuse of codes. Why need encode/decode mem
>>> map instead of set mem_map to ms->section_mem_map directly?
>> The memmap is aligned, and the low bits are zero. We store some
>> information
>> in these bits. So we need to encode/decode memmap here.
> 
> Hi Congyang,
> 
> Thanks for you reponse. But I mean why return (unsigned long)(mem_map -
> (section_nr_to_pfn(pnum))); in function sparse_encode_mem_map, and then
> return ((struct page *)coded_mem_map) + section_nr_to_pfn(pnum); in
> funtion sparse_decode_mem_map instead of just store mem_map in
> ms->section_mep_map directly.

I don't know why. I try to find the reason, but I don't find any
place to use the pfn stored in the mem_map except in the decode
function. Maybe the designer doesn't want us to access the mem_map
directly.

Thanks
Wen Congyang

> 
> Regards,
> Jaegeuk
> 
>>
>> Thanks
>> Wen Congyang
>>
>>> Regards,
>>> Jaegeuk
>>>
>>>> CC: David Rientjes <rientjes@google.com>
>>>> CC: Jiang Liu <liuj97@gmail.com>
>>>> CC: Len Brown <len.brown@intel.com>
>>>> CC: Christoph Lameter <cl@linux.com>
>>>> Cc: Minchan Kim <minchan.kim@gmail.com>
>>>> CC: Andrew Morton <akpm@linux-foundation.org>
>>>> CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
>>>> CC: Wen Congyang <wency@cn.fujitsu.com>
>>>> Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>>>> ---
>>>>    mm/memory_hotplug.c | 13 ++++++++-----
>>>>    1 file changed, 8 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
>>>> index ca07433..66a79a7 100644
>>>> --- a/mm/memory_hotplug.c
>>>> +++ b/mm/memory_hotplug.c
>>>> @@ -286,11 +286,14 @@ static int __meminit __add_section(int nid,
>>>> struct zone *zone,
>>>>    #ifdef CONFIG_SPARSEMEM_VMEMMAP
>>>>    static int __remove_section(struct zone *zone, struct mem_section
>>>> *ms)
>>>>    {
>>>> -    /*
>>>> -     * XXX: Freeing memmap with vmemmap is not implement yet.
>>>> -     *      This should be removed later.
>>>> -     */
>>>> -    return -EBUSY;
>>>> +    int ret = -EINVAL;
>>>> +
>>>> +    if (!valid_section(ms))
>>>> +        return ret;
>>>> +
>>>> +    ret = unregister_memory_section(ms);
>>>> +
>>>> +    return ret;
>>>>    }
>>>>    #else
>>>>    static int __remove_section(struct zone *zone, struct mem_section
>>>> *ms)
>>>
> 
> 

^ permalink raw reply

* Re: [PATCH v3 11/12] memory-hotplug: remove sysfs file of node
From: Wen Congyang @ 2012-11-20  9:35 UTC (permalink / raw)
  To: Yasuaki Ishimatsu
  Cc: linux-s390, linux-ia64, Len Brown, linux-acpi, linux-sh, x86,
	linux-kernel, cmetcalf, Jianguo Wu, linux-mm, paulus, Minchan Kim,
	KOSAKI Motohiro, David Rientjes, sparclinux, Christoph Lameter,
	linuxppc-dev, Andrew Morton, Jiang Liu
In-Reply-To: <50AA0537.1000501@jp.fujitsu.com>

At 11/19/2012 06:08 PM, Yasuaki Ishimatsu Wrote:
> Hi Wen,
> 
> This patch cannot be applied, if I apply latest acpi framework's patch-set:
> 
> https://lkml.org/lkml/2012/11/15/21
> 
> Because acpi_memory_disable_device() is gone by the patch-set.

The patchset is not for pm tree, so I don't apply the patchset in pm tree
before generating this patchset.

Thanks
Wen Congyang

> 
> I updated the patch and attached it on the mail.
> 
> 2012/11/01 18:44, Wen Congyang wrote:
>> This patch introduces a new function try_offline_node() to
>> remove sysfs file of node when all memory sections of this
>> node are removed. If some memory sections of this node are
>> not removed, this function does nothing.
>>
>> CC: David Rientjes <rientjes@google.com>
>> CC: Jiang Liu <liuj97@gmail.com>
>> CC: Len Brown <len.brown@intel.com>
>> CC: Christoph Lameter <cl@linux.com>
>> Cc: Minchan Kim <minchan.kim@gmail.com>
>> CC: Andrew Morton <akpm@linux-foundation.org>
>> CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
>> CC: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
>> ---
>>   drivers/acpi/acpi_memhotplug.c |  8 +++++-
>>   include/linux/memory_hotplug.h |  2 +-
>>   mm/memory_hotplug.c            | 58 ++++++++++++++++++++++++++++++++++++++++--
>>   3 files changed, 64 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c
>> index 24c807f..0780f99 100644
>> --- a/drivers/acpi/acpi_memhotplug.c
>> +++ b/drivers/acpi/acpi_memhotplug.c
>> @@ -310,7 +310,9 @@ static int acpi_memory_disable_device(struct acpi_memory_device *mem_device)
>>   {
>>   	int result;
>>   	struct acpi_memory_info *info, *n;
>> +	int node;
>>   
>> +	node = acpi_get_node(mem_device->device->handle);
>>   
>>   	/*
>>   	 * Ask the VM to offline this memory range.
>> @@ -318,7 +320,11 @@ static int acpi_memory_disable_device(struct acpi_memory_device *mem_device)
>>   	 */
>>   	list_for_each_entry_safe(info, n, &mem_device->res_list, list) {
>>   		if (info->enabled) {
>> -			result = remove_memory(info->start_addr, info->length);
>> +			if (node < 0)
>> +				node = memory_add_physaddr_to_nid(
>> +					info->start_addr);
>> +			result = remove_memory(node, info->start_addr,
>> +				info->length);
>>   			if (result)
>>   				return result;
>>   		}
>> diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
>> index d4c4402..7b4cfe6 100644
>> --- a/include/linux/memory_hotplug.h
>> +++ b/include/linux/memory_hotplug.h
>> @@ -231,7 +231,7 @@ extern int arch_add_memory(int nid, u64 start, u64 size);
>>   extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
>>   extern int offline_memory_block(struct memory_block *mem);
>>   extern bool is_memblock_offlined(struct memory_block *mem);
>> -extern int remove_memory(u64 start, u64 size);
>> +extern int remove_memory(int node, u64 start, u64 size);
>>   extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn,
>>   								int nr_pages);
>>   extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms);
>> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
>> index 7bcced0..d965da3 100644
>> --- a/mm/memory_hotplug.c
>> +++ b/mm/memory_hotplug.c
>> @@ -29,6 +29,7 @@
>>   #include <linux/suspend.h>
>>   #include <linux/mm_inline.h>
>>   #include <linux/firmware-map.h>
>> +#include <linux/stop_machine.h>
>>   
>>   #include <asm/tlbflush.h>
>>   
>> @@ -1299,7 +1300,58 @@ static int is_memblock_offlined_cb(struct memory_block *mem, void *arg)
>>   	return ret;
>>   }
>>   
>> -int __ref remove_memory(u64 start, u64 size)
>> +static int check_cpu_on_node(void *data)
>> +{
>> +	struct pglist_data *pgdat = data;
>> +	int cpu;
>> +
>> +	for_each_present_cpu(cpu) {
>> +		if (cpu_to_node(cpu) == pgdat->node_id)
>> +			/*
>> +			 * the cpu on this node isn't removed, and we can't
>> +			 * offline this node.
>> +			 */
>> +			return -EBUSY;
>> +	}
>> +
>> +	return 0;
>> +}
>> +
>> +/* offline the node if all memory sections of this node are removed */
>> +static void try_offline_node(int nid)
>> +{
>> +	unsigned long start_pfn = NODE_DATA(nid)->node_start_pfn;
>> +	unsigned long end_pfn = start_pfn + NODE_DATA(nid)->node_spanned_pages;
>> +	unsigned long pfn;
>> +
>> +	for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
>> +		unsigned long section_nr = pfn_to_section_nr(pfn);
>> +
>> +		if (!present_section_nr(section_nr))
>> +			continue;
>> +
>> +		if (pfn_to_nid(pfn) != nid)
>> +			continue;
>> +
>> +		/*
>> +		 * some memory sections of this node are not removed, and we
>> +		 * can't offline node now.
>> +		 */
>> +		return;
>> +	}
>> +
>> +	if (stop_machine(check_cpu_on_node, NODE_DATA(nid), NULL))
>> +		return;
>> +
>> +	/*
>> +	 * all memory/cpu of this node are removed, we can offline this
>> +	 * node now.
>> +	 */
>> +	node_set_offline(nid);
>> +	unregister_one_node(nid);
>> +}
>> +
>> +int __ref remove_memory(int nid, u64 start, u64 size)
>>   {
>>   	unsigned long start_pfn, end_pfn;
>>   	int ret = 0;
>> @@ -1346,6 +1398,8 @@ repeat:
>>   
>>   	arch_remove_memory(start, size);
>>   
>> +	try_offline_node(nid);
>> +
>>   	unlock_memory_hotplug();
>>   
>>   	return 0;
>> @@ -1355,7 +1409,7 @@ int offline_pages(unsigned long start_pfn, unsigned long nr_pages)
>>   {
>>   	return -EINVAL;
>>   }
>> -int remove_memory(u64 start, u64 size)
>> +int remove_memory(int nid, u64 start, u64 size)
>>   {
>>   	return -EINVAL;
>>   }
>>
> 
> ---
> This patch introduces a new function try_offline_node() to
> remove sysfs file of node when all memory sections of this
> node are removed. If some memory sections of this node are
> not removed, this function does nothing.
> 
> CC: David Rientjes <rientjes@google.com>
> CC: Jiang Liu <liuj97@gmail.com>
> CC: Len Brown <len.brown@intel.com>
> CC: Christoph Lameter <cl@linux.com>
> Cc: Minchan Kim <minchan.kim@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> CC: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> ---
>  drivers/acpi/acpi_memhotplug.c |    9 +++++-
>  include/linux/memory_hotplug.h |    2 -
>  mm/memory_hotplug.c            |   58 +++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 65 insertions(+), 4 deletions(-)
> 
> Index: linux-3.7-rc6/drivers/acpi/acpi_memhotplug.c
> ===================================================================
> --- linux-3.7-rc6.orig/drivers/acpi/acpi_memhotplug.c	2012-11-19 16:16:55.161912688 +0900
> +++ linux-3.7-rc6/drivers/acpi/acpi_memhotplug.c	2012-11-19 16:17:05.346912109 +0900
> @@ -295,6 +295,9 @@ static int acpi_memory_remove_memory(str
>  {
>  	int result = 0;
>  	struct acpi_memory_info *info, *n;
> +	int node;
> +
> +	node = acpi_get_node(mem_device->device->handle);
>  
>  	list_for_each_entry_safe(info, n, &mem_device->res_list, list) {
>  		if (info->failed)
> @@ -308,7 +311,11 @@ static int acpi_memory_remove_memory(str
>  			 */
>  			return -EBUSY;
>  
> -		result = remove_memory(info->start_addr, info->length);
> +		if (node < 0)
> +			node = memory_add_physaddr_to_nid(
> +				info->start_addr);
> +		result = remove_memory(node, info->start_addr,
> +			info->length);
>  		if (result)
>  			return result;
>  
> Index: linux-3.7-rc6/include/linux/memory_hotplug.h
> ===================================================================
> --- linux-3.7-rc6.orig/include/linux/memory_hotplug.h	2012-11-19 16:16:55.167912687 +0900
> +++ linux-3.7-rc6/include/linux/memory_hotplug.h	2012-11-19 16:17:05.348912109 +0900
> @@ -242,7 +242,7 @@ extern int arch_add_memory(int nid, u64 
>  extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
>  extern int offline_memory_block(struct memory_block *mem);
>  extern bool is_memblock_offlined(struct memory_block *mem);
> -extern int remove_memory(u64 start, u64 size);
> +extern int remove_memory(int node, u64 start, u64 size);
>  extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn,
>  								int nr_pages);
>  extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms);
> Index: linux-3.7-rc6/mm/memory_hotplug.c
> ===================================================================
> --- linux-3.7-rc6.orig/mm/memory_hotplug.c	2012-11-19 16:16:55.164912687 +0900
> +++ linux-3.7-rc6/mm/memory_hotplug.c	2012-11-19 16:17:05.356912108 +0900
> @@ -29,6 +29,7 @@
>  #include <linux/suspend.h>
>  #include <linux/mm_inline.h>
>  #include <linux/firmware-map.h>
> +#include <linux/stop_machine.h>
>  
>  #include <asm/tlbflush.h>
>  
> @@ -1652,7 +1653,58 @@ static int is_memblock_offlined_cb(struc
>  	return ret;
>  }
>  
> -int __ref remove_memory(u64 start, u64 size)
> +static int check_cpu_on_node(void *data)
> +{
> +	struct pglist_data *pgdat = data;
> +	int cpu;
> +
> +	for_each_present_cpu(cpu) {
> +		if (cpu_to_node(cpu) == pgdat->node_id)
> +			/*
> +			 * the cpu on this node isn't removed, and we can't
> +			 * offline this node.
> +			 */
> +			return -EBUSY;
> +	}
> +
> +	return 0;
> +}
> +
> +/* offline the node if all memory sections of this node are removed */
> +static void try_offline_node(int nid)
> +{
> +	unsigned long start_pfn = NODE_DATA(nid)->node_start_pfn;
> +	unsigned long end_pfn = start_pfn + NODE_DATA(nid)->node_spanned_pages;
> +	unsigned long pfn;
> +
> +	for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
> +		unsigned long section_nr = pfn_to_section_nr(pfn);
> +
> +		if (!present_section_nr(section_nr))
> +			continue;
> +
> +		if (pfn_to_nid(pfn) != nid)
> +			continue;
> +
> +		/*
> +		 * some memory sections of this node are not removed, and we
> +		 * can't offline node now.
> +		 */
> +		return;
> +	}
> +
> +	if (stop_machine(check_cpu_on_node, NODE_DATA(nid), NULL))
> +		return;
> +
> +	/*
> +	 * all memory/cpu of this node are removed, we can offline this
> +	 * node now.
> +	 */
> +	node_set_offline(nid);
> +	unregister_one_node(nid);
> +}
> +
> +int __ref remove_memory(int nid, u64 start, u64 size)
>  {
>  	unsigned long start_pfn, end_pfn;
>  	int ret = 0;
> @@ -1699,6 +1751,8 @@ repeat:
>  
>  	arch_remove_memory(start, size);
>  
> +	try_offline_node(nid);
> +
>  	unlock_memory_hotplug();
>  
>  	return 0;
> @@ -1708,7 +1762,7 @@ int offline_pages(unsigned long start_pf
>  {
>  	return -EINVAL;
>  }
> -int remove_memory(u64 start, u64 size)
> +int remove_memory(int nid, u64 start, u64 size)
>  {
>  	return -EINVAL;
>  }
> 
> 

^ permalink raw reply

* Re: [PATCH 207/493] i2c: remove use of __devinit
From: Jean Delvare @ 2012-11-20  8:20 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: Rudolf Marek, Tony Lindgren, gregkh, Wolfram Sang,
	Mark M. Hoffman, linux-omap, linux-i2c, Ben Dooks, Barry Song,
	Olof Johansson, Guan Xuetao, linuxppc-dev, linux-arm-kernel
In-Reply-To: <1353349642-3677-207-git-send-email-wfp5p@virginia.edu>

Hi Bill,

On Mon, 19 Nov 2012 13:22:36 -0500, Bill Pemberton wrote:
> CONFIG_HOTPLUG is going away as an option so __devinit is no longer
> needed.

Can you please point me/us to the discussion explaining the rationale
behind this move, and the explanation of what will be done exactly?
While I can easily understand that we want to drop CONFIG_HOTPLUG and
always enable hot-plug support, I don't see where we are going with
removing __devinit annotations and the like.

Thanks,
-- 
Jean Delvare

^ permalink raw reply

* Re: Please pull 'merge' branch of 5xxx tree
From: Anatolij Gustschin @ 2012-11-20  8:27 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <20121025224113.5a67a77d@wker>

Hi Ben,

On Thu, 25 Oct 2012 22:41:13 +0200
Anatolij Gustschin <agust@denx.de> wrote:

> Hi Ben,
> 
> please pull three mpc5200 fixes for 3.7:

Ping.

^ permalink raw reply

* Re: [PATCH] PCI: MSI: Restore read_msi_msg_desc(); add get_cached_msi_msg_desc()
From: Benjamin Herrenschmidt @ 2012-11-20  7:20 UTC (permalink / raw)
  To: Ben Hutchings
  Cc: Stephen Rothwell, linux-pci, LKML, Jesse Barnes, Bjorn Helgaas,
	ppc-dev
In-Reply-To: <1279893388.2089.9.camel@achroite.uk.solarflarecom.com>

On Fri, 2010-07-23 at 14:56 +0100, Ben Hutchings wrote:
> commit 2ca1af9aa3285c6a5f103ed31ad09f7399fc65d7 "PCI: MSI: Remove
> unsafe and unnecessary hardware access" changed read_msi_msg_desc() to
> return the last MSI message written instead of reading it from the
> device, since it may be called while the device is in a reduced
> power state.

Looks reasonable... Jesse ?

Cheers,
Ben.

> However, the pSeries platform code really does need to read messages
> from the device, since they are initially written by firmware.
> Therefore:
> - Restore the previous behaviour of read_msi_msg_desc()
> - Add new functions get_cached_msi_msg{,_desc}() which return the
>   last MSI message written
> - Use the new functions where appropriate
> 
> Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
> ---
> Compile-tested only.
> 
> Ben.
> 
>  arch/ia64/kernel/msi_ia64.c    |    2 +-
>  arch/ia64/sn/kernel/msi_sn.c   |    2 +-
>  arch/x86/kernel/apic/io_apic.c |    2 +-
>  drivers/pci/msi.c              |   47 +++++++++++++++++++++++++++++++++++----
>  include/linux/msi.h            |    2 +
>  5 files changed, 47 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/ia64/kernel/msi_ia64.c b/arch/ia64/kernel/msi_ia64.c
> index 6c89228..4a746ea 100644
> --- a/arch/ia64/kernel/msi_ia64.c
> +++ b/arch/ia64/kernel/msi_ia64.c
> @@ -25,7 +25,7 @@ static int ia64_set_msi_irq_affinity(unsigned int irq,
>  	if (irq_prepare_move(irq, cpu))
>  		return -1;
>  
> -	read_msi_msg(irq, &msg);
> +	get_cached_msi_msg(irq, &msg);
>  
>  	addr = msg.address_lo;
>  	addr &= MSI_ADDR_DEST_ID_MASK;
> diff --git a/arch/ia64/sn/kernel/msi_sn.c b/arch/ia64/sn/kernel/msi_sn.c
> index ebfdd6a..0c72dd4 100644
> --- a/arch/ia64/sn/kernel/msi_sn.c
> +++ b/arch/ia64/sn/kernel/msi_sn.c
> @@ -175,7 +175,7 @@ static int sn_set_msi_irq_affinity(unsigned int irq,
>  	 * Release XIO resources for the old MSI PCI address
>  	 */
>  
> -	read_msi_msg(irq, &msg);
> +	get_cached_msi_msg(irq, &msg);
>          sn_pdev = (struct pcidev_info *)sn_irq_info->irq_pciioinfo;
>  	pdev = sn_pdev->pdi_linux_pcidev;
>  	provider = SN_PCIDEV_BUSPROVIDER(pdev);
> diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
> index e41ed24..4dc0084 100644
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -3397,7 +3397,7 @@ static int set_msi_irq_affinity(unsigned int irq, const struct cpumask *mask)
>  
>  	cfg = desc->chip_data;
>  
> -	read_msi_msg_desc(desc, &msg);
> +	get_cached_msi_msg_desc(desc, &msg);
>  
>  	msg.data &= ~MSI_DATA_VECTOR_MASK;
>  	msg.data |= MSI_DATA_VECTOR(cfg->vector);
> diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
> index 4c14f31..69b7be3 100644
> --- a/drivers/pci/msi.c
> +++ b/drivers/pci/msi.c
> @@ -197,9 +197,46 @@ void read_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg)
>  {
>  	struct msi_desc *entry = get_irq_desc_msi(desc);
>  
> -	/* We do not touch the hardware (which may not even be
> -	 * accessible at the moment) but return the last message
> -	 * written.  Assert that this is valid, assuming that
> +	BUG_ON(entry->dev->current_state != PCI_D0);
> +
> +	if (entry->msi_attrib.is_msix) {
> +		void __iomem *base = entry->mask_base +
> +			entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
> +
> +		msg->address_lo = readl(base + PCI_MSIX_ENTRY_LOWER_ADDR);
> +		msg->address_hi = readl(base + PCI_MSIX_ENTRY_UPPER_ADDR);
> +		msg->data = readl(base + PCI_MSIX_ENTRY_DATA);
> +	} else {
> +		struct pci_dev *dev = entry->dev;
> +		int pos = entry->msi_attrib.pos;
> +		u16 data;
> +
> +		pci_read_config_dword(dev, msi_lower_address_reg(pos),
> +					&msg->address_lo);
> +		if (entry->msi_attrib.is_64) {
> +			pci_read_config_dword(dev, msi_upper_address_reg(pos),
> +						&msg->address_hi);
> +			pci_read_config_word(dev, msi_data_reg(pos, 1), &data);
> +		} else {
> +			msg->address_hi = 0;
> +			pci_read_config_word(dev, msi_data_reg(pos, 0), &data);
> +		}
> +		msg->data = data;
> +	}
> +}
> +
> +void read_msi_msg(unsigned int irq, struct msi_msg *msg)
> +{
> +	struct irq_desc *desc = irq_to_desc(irq);
> +
> +	read_msi_msg_desc(desc, msg);
> +}
> +
> +void get_cached_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg)
> +{
> +	struct msi_desc *entry = get_irq_desc_msi(desc);
> +
> +	/* Assert that the cache is valid, assuming that
>  	 * valid messages are not all-zeroes. */
>  	BUG_ON(!(entry->msg.address_hi | entry->msg.address_lo |
>  		 entry->msg.data));
> @@ -207,11 +244,11 @@ void read_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg)
>  	*msg = entry->msg;
>  }
>  
> -void read_msi_msg(unsigned int irq, struct msi_msg *msg)
> +void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg)
>  {
>  	struct irq_desc *desc = irq_to_desc(irq);
>  
> -	read_msi_msg_desc(desc, msg);
> +	get_cached_msi_msg_desc(desc, msg);
>  }
>  
>  void write_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg)
> diff --git a/include/linux/msi.h b/include/linux/msi.h
> index 6991ab5..91b05c1 100644
> --- a/include/linux/msi.h
> +++ b/include/linux/msi.h
> @@ -14,8 +14,10 @@ struct irq_desc;
>  extern void mask_msi_irq(unsigned int irq);
>  extern void unmask_msi_irq(unsigned int irq);
>  extern void read_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg);
> +extern void get_cached_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg);
>  extern void write_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg);
>  extern void read_msi_msg(unsigned int irq, struct msi_msg *msg);
> +extern void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg);
>  extern void write_msi_msg(unsigned int irq, struct msi_msg *msg);
>  
>  struct msi_desc {
> -- 
> 1.6.2.5
> 

^ permalink raw reply

* Re: [PATCH 065/493] i2c: remove use of __devexit_p
From: Shubhrajyoti Datta @ 2012-11-20  6:59 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: Rudolf Marek, Tony Lindgren, gregkh, Wolfram Sang, Olof Johansson,
	linux-omap, Mark M. Hoffman, linux-i2c, Ben Dooks, Barry Song,
	Jean Delvare, Guan Xuetao, linuxppc-dev, linux-arm-kernel
In-Reply-To: <1353349642-3677-65-git-send-email-wfp5p@virginia.edu>

On Mon, Nov 19, 2012 at 11:50 PM, Bill Pemberton <wfp5p@virginia.edu> wrote:
> CONFIG_HOTPLUG is going away as an option so __devexit_p is no longer
> needed.
>
 Reviewed-by: Shubhrajyoti D <shubhrajyoti@ti.com>

^ permalink raw reply

* Re: [PATCH v3 06/12] memory-hotplug: unregister memory section on SPARSEMEM_VMEMMAP
From: Jaegeuk Hanse @ 2012-11-20  6:58 UTC (permalink / raw)
  To: Wen Congyang
  Cc: linux-s390, linux-ia64, Len Brown, linux-acpi, linux-sh, x86,
	linux-kernel, cmetcalf, Jianguo Wu, linux-mm, Yasuaki Ishimatsu,
	paulus, Minchan Kim, KOSAKI Motohiro, David Rientjes, sparclinux,
	Christoph Lameter, linuxppc-dev, Andrew Morton, Jiang Liu
In-Reply-To: <50AB2967.5010302@cn.fujitsu.com>

On 11/20/2012 02:55 PM, Wen Congyang wrote:
> At 11/20/2012 02:22 PM, Jaegeuk Hanse Wrote:
>> On 11/01/2012 05:44 PM, Wen Congyang wrote:
>>> From: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>>>
>>> Currently __remove_section for SPARSEMEM_VMEMMAP does nothing. But
>>> even if
>>> we use SPARSEMEM_VMEMMAP, we can unregister the memory_section.
>>>
>>> So the patch add unregister_memory_section() into __remove_section().
>> Hi Yasuaki,
>>
>> In order to review this patch, I should dig sparse memory codes in
>> advance. But I have some confuse of codes. Why need encode/decode mem
>> map instead of set mem_map to ms->section_mem_map directly?
> The memmap is aligned, and the low bits are zero. We store some information
> in these bits. So we need to encode/decode memmap here.

Hi Congyang,

Thanks for you reponse. But I mean why return (unsigned long)(mem_map - 
(section_nr_to_pfn(pnum))); in function sparse_encode_mem_map, and then 
return ((struct page *)coded_mem_map) + section_nr_to_pfn(pnum); in 
funtion sparse_decode_mem_map instead of just store mem_map in 
ms->section_mep_map directly.

Regards,
Jaegeuk

>
> Thanks
> Wen Congyang
>
>> Regards,
>> Jaegeuk
>>
>>> CC: David Rientjes <rientjes@google.com>
>>> CC: Jiang Liu <liuj97@gmail.com>
>>> CC: Len Brown <len.brown@intel.com>
>>> CC: Christoph Lameter <cl@linux.com>
>>> Cc: Minchan Kim <minchan.kim@gmail.com>
>>> CC: Andrew Morton <akpm@linux-foundation.org>
>>> CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
>>> CC: Wen Congyang <wency@cn.fujitsu.com>
>>> Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>>> ---
>>>    mm/memory_hotplug.c | 13 ++++++++-----
>>>    1 file changed, 8 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
>>> index ca07433..66a79a7 100644
>>> --- a/mm/memory_hotplug.c
>>> +++ b/mm/memory_hotplug.c
>>> @@ -286,11 +286,14 @@ static int __meminit __add_section(int nid,
>>> struct zone *zone,
>>>    #ifdef CONFIG_SPARSEMEM_VMEMMAP
>>>    static int __remove_section(struct zone *zone, struct mem_section *ms)
>>>    {
>>> -    /*
>>> -     * XXX: Freeing memmap with vmemmap is not implement yet.
>>> -     *      This should be removed later.
>>> -     */
>>> -    return -EBUSY;
>>> +    int ret = -EINVAL;
>>> +
>>> +    if (!valid_section(ms))
>>> +        return ret;
>>> +
>>> +    ret = unregister_memory_section(ms);
>>> +
>>> +    return ret;
>>>    }
>>>    #else
>>>    static int __remove_section(struct zone *zone, struct mem_section *ms)
>>

^ permalink raw reply

* Re: [PATCH v3 06/12] memory-hotplug: unregister memory section on SPARSEMEM_VMEMMAP
From: Wen Congyang @ 2012-11-20  6:55 UTC (permalink / raw)
  To: Jaegeuk Hanse
  Cc: linux-s390, linux-ia64, Len Brown, linux-acpi, linux-sh, x86,
	linux-kernel, cmetcalf, Jianguo Wu, linux-mm, Yasuaki Ishimatsu,
	paulus, Minchan Kim, KOSAKI Motohiro, David Rientjes, sparclinux,
	Christoph Lameter, linuxppc-dev, Andrew Morton, Jiang Liu
In-Reply-To: <50AB21A4.8050709@gmail.com>

At 11/20/2012 02:22 PM, Jaegeuk Hanse Wrote:
> On 11/01/2012 05:44 PM, Wen Congyang wrote:
>> From: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>>
>> Currently __remove_section for SPARSEMEM_VMEMMAP does nothing. But
>> even if
>> we use SPARSEMEM_VMEMMAP, we can unregister the memory_section.
>>
>> So the patch add unregister_memory_section() into __remove_section().
> 
> Hi Yasuaki,
> 
> In order to review this patch, I should dig sparse memory codes in
> advance. But I have some confuse of codes. Why need encode/decode mem
> map instead of set mem_map to ms->section_mem_map directly?

The memmap is aligned, and the low bits are zero. We store some information
in these bits. So we need to encode/decode memmap here.

Thanks
Wen Congyang

> 
> Regards,
> Jaegeuk
> 
>>
>> CC: David Rientjes <rientjes@google.com>
>> CC: Jiang Liu <liuj97@gmail.com>
>> CC: Len Brown <len.brown@intel.com>
>> CC: Christoph Lameter <cl@linux.com>
>> Cc: Minchan Kim <minchan.kim@gmail.com>
>> CC: Andrew Morton <akpm@linux-foundation.org>
>> CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
>> CC: Wen Congyang <wency@cn.fujitsu.com>
>> Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>> ---
>>   mm/memory_hotplug.c | 13 ++++++++-----
>>   1 file changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
>> index ca07433..66a79a7 100644
>> --- a/mm/memory_hotplug.c
>> +++ b/mm/memory_hotplug.c
>> @@ -286,11 +286,14 @@ static int __meminit __add_section(int nid,
>> struct zone *zone,
>>   #ifdef CONFIG_SPARSEMEM_VMEMMAP
>>   static int __remove_section(struct zone *zone, struct mem_section *ms)
>>   {
>> -    /*
>> -     * XXX: Freeing memmap with vmemmap is not implement yet.
>> -     *      This should be removed later.
>> -     */
>> -    return -EBUSY;
>> +    int ret = -EINVAL;
>> +
>> +    if (!valid_section(ms))
>> +        return ret;
>> +
>> +    ret = unregister_memory_section(ms);
>> +
>> +    return ret;
>>   }
>>   #else
>>   static int __remove_section(struct zone *zone, struct mem_section *ms)
> 
> 

^ permalink raw reply

* Re: Forward: [PATCH 146/493] ASoC: remove use of __devexit_p
From: Mark Brown @ 2012-11-20  6:30 UTC (permalink / raw)
  To: Takashi Iwai, Bill Pemberton
  Cc: alsa-devel, Philipp Zabel, Takashi Iwai, Jaroslav Kysela,
	Peter Ujfalusi, M R Swami Reddy, device-drivers-devel, Kukjin Kim,
	Russell King, patches, Vishwas A Deshpande, Paul Parsons,
	Haojian Zhuang, linux-samsung-soc, Ben Dooks, linux-omap,
	linux-arm-kernel, Eric Miao, gregkh, uclinux-dist-devel,
	linuxppc-dev, Jarkko Nikula
In-Reply-To: <s5hehjordzj.wl%tiwai@suse.de>

[-- Attachment #1: Type: text/plain, Size: 1296 bytes --]

On Tue, Nov 20, 2012 at 07:21:36AM +0100, Takashi Iwai wrote:
> Yet another one for ASoC.

> Date: Mon, 19 Nov 2012 13:21:35 -0500
> From: Bill Pemberton <wfp5p@virginia.edu>
> To: gregkh@linuxfoundation.org
> Cc: Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.de>, M R
>  Swami Reddy <mr.swami.reddy@ti.com>, Vishwas A Deshpande
>  <vishwas.a.deshpande@ti.com>, Peter Ujfalusi <peter.ujfalusi@ti.com>,
>  Jarkko Nikula <jarkko.nikula@bitmer.com>, Eric Miao
>  <eric.y.miao@gmail.com>, Russell King <linux@arm.linux.org.uk>, Haojian
>  Zhuang <haojian.zhuang@gmail.com>, Philipp Zabel
>  <philipp.zabel@gmail.com>, Paul Parsons <lost.distance@yahoo.com>, Ben
>  Dooks <ben-linux@fluff.org>, Kukjin Kim <kgene.kim@samsung.com>,
>  alsa-devel@alsa-project.org, uclinux-dist-devel@blackfin.uclinux.org,
>  device-drivers-devel@blackfin.uclinux.org,
>  patches@opensource.wolfsonmicro.com, linuxppc-dev@lists.ozlabs.org,
>  linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
>  linux-samsung-soc@vger.kernel.org

This time you've got an extravagantly large CC list but not managed to
CC the maintainers at all...  ho hum.  Anyway, this doesn't apply
against current code due to the Atmel changes.  Please rebase against
for-next (or ideally the topic branches) and resend.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply

* Re: [PATCH v3 06/12] memory-hotplug: unregister memory section on SPARSEMEM_VMEMMAP
From: Jaegeuk Hanse @ 2012-11-20  6:22 UTC (permalink / raw)
  To: Yasuaki Ishimatsu, Wen Congyang
  Cc: linux-s390, linux-ia64, Len Brown, linux-acpi, linux-sh, x86,
	linux-kernel, cmetcalf, Jianguo Wu, linux-mm, Yasuaki Ishimatsu,
	paulus, Minchan Kim, KOSAKI Motohiro, David Rientjes, sparclinux,
	Christoph Lameter, linuxppc-dev, Andrew Morton, Jiang Liu
In-Reply-To: <1351763083-7905-7-git-send-email-wency@cn.fujitsu.com>

On 11/01/2012 05:44 PM, Wen Congyang wrote:
> From: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
>
> Currently __remove_section for SPARSEMEM_VMEMMAP does nothing. But even if
> we use SPARSEMEM_VMEMMAP, we can unregister the memory_section.
>
> So the patch add unregister_memory_section() into __remove_section().

Hi Yasuaki,

In order to review this patch, I should dig sparse memory codes in 
advance. But I have some confuse of codes. Why need encode/decode mem 
map instead of set mem_map to ms->section_mem_map directly?

Regards,
Jaegeuk

>
> CC: David Rientjes <rientjes@google.com>
> CC: Jiang Liu <liuj97@gmail.com>
> CC: Len Brown <len.brown@intel.com>
> CC: Christoph Lameter <cl@linux.com>
> Cc: Minchan Kim <minchan.kim@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> CC: Wen Congyang <wency@cn.fujitsu.com>
> Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
> ---
>   mm/memory_hotplug.c | 13 ++++++++-----
>   1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index ca07433..66a79a7 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -286,11 +286,14 @@ static int __meminit __add_section(int nid, struct zone *zone,
>   #ifdef CONFIG_SPARSEMEM_VMEMMAP
>   static int __remove_section(struct zone *zone, struct mem_section *ms)
>   {
> -	/*
> -	 * XXX: Freeing memmap with vmemmap is not implement yet.
> -	 *      This should be removed later.
> -	 */
> -	return -EBUSY;
> +	int ret = -EINVAL;
> +
> +	if (!valid_section(ms))
> +		return ret;
> +
> +	ret = unregister_memory_section(ms);
> +
> +	return ret;
>   }
>   #else
>   static int __remove_section(struct zone *zone, struct mem_section *ms)

^ permalink raw reply

* [PATCH 2/2] powerpc/pseries: pci: Use NULL instead of 0 for pointers
From: Tushar Behera @ 2012-11-20  4:31 UTC (permalink / raw)
  To: linuxppc-dev, devicetree-discuss; +Cc: patches
In-Reply-To: <1353385912-25882-1-git-send-email-tushar.behera@linaro.org>

The third argument for of_get_property() is a pointer, hence pass
NULL instead of 0.

Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
---
This code is in a '#if 0' section, but I went ahead with the patch as
this is the only location in kernel where of_get_property is passed 0
as the third argument. If this function is not going to be used again,
then we may consider removing the code altogether.

 arch/powerpc/platforms/pseries/pci.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
index 56b864d..0b580f4 100644
--- a/arch/powerpc/platforms/pseries/pci.c
+++ b/arch/powerpc/platforms/pseries/pci.c
@@ -40,7 +40,8 @@ void pcibios_name_device(struct pci_dev *dev)
 	 */
 	dn = pci_device_to_OF_node(dev);
 	if (dn) {
-		const char *loc_code = of_get_property(dn, "ibm,loc-code", 0);
+		const char *loc_code = of_get_property(dn, "ibm,loc-code",
+				NULL);
 		if (loc_code) {
 			int loc_len = strlen(loc_code);
 			if (loc_len < sizeof(dev->dev.name)) {
-- 
1.7.4.1

^ permalink raw reply related

* [PATCH 1/2] powerpc/85xx: p1022ds: Use NULL instead of 0 for pointers
From: Tushar Behera @ 2012-11-20  4:31 UTC (permalink / raw)
  To: linuxppc-dev, devicetree-discuss; +Cc: patches

The third argument for of_get_property() is a pointer, hence pass
NULL instead of 0.

Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
---
 arch/powerpc/platforms/85xx/p1022_ds.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/platforms/85xx/p1022_ds.c b/arch/powerpc/platforms/85xx/p1022_ds.c
index 8fb1257..7328b8d 100644
--- a/arch/powerpc/platforms/85xx/p1022_ds.c
+++ b/arch/powerpc/platforms/85xx/p1022_ds.c
@@ -249,7 +249,7 @@ static void p1022ds_set_monitor_port(enum fsl_diu_monitor_port port)
 		goto exit;
 	}
 
-	iprop = of_get_property(law_node, "fsl,num-laws", 0);
+	iprop = of_get_property(law_node, "fsl,num-laws", NULL);
 	if (!iprop) {
 		pr_err("p1022ds: LAW node is missing fsl,num-laws property\n");
 		goto exit;
-- 
1.7.4.1

^ permalink raw reply related

* Re: [PATCH 226/493] dma: remove use of __devinit
From: viresh kumar @ 2012-11-20  3:07 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: gregkh, Zhang Wei, Barry Song, linuxppc-dev, linux-arm-kernel
In-Reply-To: <1353349642-3677-226-git-send-email-wfp5p@virginia.edu>

On Mon, Nov 19, 2012 at 11:52 PM, Bill Pemberton <wfp5p@virginia.edu> wrote:
> CONFIG_HOTPLUG is going away as an option so __devinit is no longer
> needed.
>
> Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
> Cc: Viresh Kumar <viresh.linux@gmail.com>
> Cc: Li Yang <leoli@freescale.com>
> Cc: Zhang Wei <zw@zh-kernel.org>
> Cc: Barry Song <baohua.song@csr.com>
> Cc: linuxppc-dev@lists.ozlabs.org
> Cc: linux-arm-kernel@lists.infradead.org
> ---
>  drivers/dma/dw_dmac.c         | 4 ++--

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>

^ permalink raw reply

* Re: [PATCH 158/493] video: remove use of __devinit
From: Jingoo Han @ 2012-11-20  1:58 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: linux-fbdev@vger.kernel.org,
	virtualization@lists.linux-foundation.org, Michal Januszewski,
	Paul Mackerras, linux-nvidia@lists.surfsouth.com, Daniel Walker,
	Kukjin Kim, Russell King, Wan ZongShun, Florian Tobias Schandinat,
	Jingoo Han, Tomi Valkeinen, David Brown, Jaya Kumar,
	cbe-oss-dev@lists.ozlabs.org, Antonino Daplas,
	linux-arm-msm@vger.kernel.org, Thomas Winischhofer,
	linux-geode@lists.infradead.org,
	linux-samsung-soc@vger.kernel.org, Ben Dooks,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	Maik Broemme, Geoff Levand, gregkh@linuxfoundation.org,
	Ferenc Bakonyi, Tony Prisk, Bryan Huntsman, Kristoffer Ericson,
	linuxppc-dev@lists.ozlabs.org, xen-devel@lists.xensource.com

T24gVHVlc2RheSwgTm92ZW1iZXIgMjAsIDIwMTIgMzoyMiBBTSwgQmlsbCBQZW1iZXJ0b24gd3Jv
dGUNCj4gDQo+IENPTkZJR19IT1RQTFVHIGlzIGdvaW5nIGF3YXkgYXMgYW4gb3B0aW9uIHNvIF9f
ZGV2aW5pdCBpcyBubyBsb25nZXINCj4gbmVlZGVkLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQmls
bCBQZW1iZXJ0b24gPHdmcDVwQHZpcmdpbmlhLmVkdT4NCj4gQ2M6IEZsb3JpYW4gVG9iaWFzIFNj
aGFuZGluYXQgPEZsb3JpYW5TY2hhbmRpbmF0QGdteC5kZT4NCj4gQ2M6IEpheWEgS3VtYXIgPGph
eWFsa0BpbnR3b3Jrcy5iaXo+DQo+IENjOiBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9y
Zz4NCj4gQ2M6IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9y
Zz4NCj4gQ2M6IFJ1c3NlbGwgS2luZyA8bGludXhAYXJtLmxpbnV4Lm9yZy51az4NCj4gQ2M6IEpp
bmdvbyBIYW4gPGpnMS5oYW5Ac2Ftc3VuZy5jb20+DQo+IENjOiBGZXJlbmMgQmFrb255aSA8ZmVy
b0BkcmFtYS5vYnVkYS5rYW5kby5odT4NCj4gQ2M6IEFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bn
bWFpbC5jb20+DQo+IENjOiBNYWlrIEJyb2VtbWUgPG1icm9lbW1lQHBsdXNzZXJ2ZXIuZGU+DQo+
IENjOiBEYXZpZCBCcm93biA8ZGF2aWRiQGNvZGVhdXJvcmEub3JnPg0KPiBDYzogRGFuaWVsIFdh
bGtlciA8ZHdhbGtlckBmaWZvOTkuY29tPg0KPiBDYzogQnJ5YW4gSHVudHNtYW4gPGJyeWFuaEBj
b2RlYXVyb3JhLm9yZz4NCj4gQ2M6IFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4N
Cj4gQ2M6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+DQo+IENjOiBHZW9m
ZiBMZXZhbmQgPGdlb2ZmQGluZnJhZGVhZC5vcmc+DQo+IENjOiBLcmlzdG9mZmVyIEVyaWNzb24g
PGtyaXN0b2ZmZXIuZXJpY3NvbkBnbWFpbC5jb20+DQo+IENjOiBCZW4gRG9va3MgPGJlbi1saW51
eEBmbHVmZi5vcmc+DQo+IENjOiBLdWtqaW4gS2ltIDxrZ2VuZS5raW1Ac2Ftc3VuZy5jb20+DQo+
IENjOiBUaG9tYXMgV2luaXNjaGhvZmVyIDx0aG9tYXNAd2luaXNjaGhvZmVyLm5ldD4NCj4gQ2M6
IE1pY2hhbCBKYW51c3pld3NraSA8c3BvY2tAZ2VudG9vLm9yZz4NCj4gQ2M6IFRvbnkgUHJpc2sg
PGxpbnV4QHByaXNrdGVjaC5jby5uej4NCj4gQ2M6IGxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9y
Zw0KPiBDYzogbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnDQo+IENjOiBsaW51
eC1nZW9kZUBsaXN0cy5pbmZyYWRlYWQub3JnDQo+IENjOiBsaW51eC1udmlkaWFAbGlzdHMuc3Vy
ZnNvdXRoLmNvbQ0KPiBDYzogbGludXgtYXJtLW1zbUB2Z2VyLmtlcm5lbC5vcmcNCj4gQ2M6IGxp
bnV4LW9tYXBAdmdlci5rZXJuZWwub3JnDQo+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJz
Lm9yZw0KPiBDYzogY2JlLW9zcy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiBDYzogbGludXgtc2Ft
c3VuZy1zb2NAdmdlci5rZXJuZWwub3JnDQo+IENjOiB4ZW4tZGV2ZWxAbGlzdHMueGVuc291cmNl
LmNvbQ0KPiBDYzogdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcNCj4g
LS0tDQo+ICBkcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IDE0ICsrLS0NCj4gIGRyaXZlcnMvdmlkZW8vYXJjZmIuYyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vYXJrZmIuYyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDYgKy0NCj4gIGRyaXZlcnMvdmlkZW8vYXR5L2F0eTEy
OGZiLmMgICAgICAgICAgICAgICAgICAgICAgIHwgMjIgKysrLS0tDQo+ICBkcml2ZXJzL3ZpZGVv
L2F0eS9hdHlmYl9iYXNlLmMgICAgICAgICAgICAgICAgICAgICB8IDIyICsrKy0tLQ0KPiAgZHJp
dmVycy92aWRlby9hdHkvbWFjaDY0X2N0LmMgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQ0K
PiAgZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2N1cnNvci5jICAgICAgICAgICAgICAgICAgfCAg
MiArLQ0KPiAgZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYyAgICAgICAgICAgICAgICAg
ICAgfCAxNCArKy0tDQo+ICBkcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fbW9uaXRvci5jICAgICAg
ICAgICAgICAgICB8IDE2ICsrLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL2F1b19r
MTkwMGZiLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVv
L2F1b19rMTkwMWZiLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJz
L3ZpZGVvL2F1b19rMTkweC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBk
cml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA2ICst
DQo+ICBkcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYyAgICAgICAgICAgICAgICAgICAgICB8
ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL2JmaW4tbHEwMzVxMS1mYi5jICAgICAgICAgICAgICAg
ICAgICB8ICA2ICstDQo+ICBkcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYyAgICAgICAg
ICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL2JmaW5fYWR2NzM5M2ZiLmMgICAg
ICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5j
ICAgICAgICAgICAgICAgICAgICAgICB8ICA4ICstLQ0KPiAgZHJpdmVycy92aWRlby9idzIuYyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiArLQ0KPiAgZHJpdmVycy92aWRlby9j
YXJtaW5lZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQ0KPiAgZHJpdmVycy92
aWRlby9jZzE0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQ0KPiAgZHJp
dmVycy92aWRlby9jZzMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOCArLS0N
Cj4gIGRyaXZlcnMvdmlkZW8vY2c2LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IDggKy0tDQo+ICBkcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICA0ICstDQo+ICBkcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IDEwICstLQ0KPiAgZHJpdmVycy92aWRlby9jb2JhbHRfbGNkZmIuYyAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAgZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNv
cmUuYyAgICAgICAgICAgICAgICAgICAgfCA0NyArKysrKystLS0tLS0tDQo+ICBkcml2ZXJzL3Zp
ZGVvL2N5YmVyMjAwMGZiLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDEyICsrLS0NCj4gIGRy
aXZlcnMvdmlkZW8vZGE4eHgtZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0N
Cj4gIGRyaXZlcnMvdmlkZW8vZG5mYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vZXA5M3h4LWZiLmMgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDQgKy0NCj4gIGRyaXZlcnMvdmlkZW8vZXh5bm9zL2V4eW5vc19kcF9jb3JlLmMgICAg
ICAgICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vZmZiLmMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vZm0yZmIuYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0NCj4gIGRyaXZlcnMvdmlkZW8vZnNsLWRpdS1m
Yi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0NCj4gIGRyaXZlcnMvdmlkZW8vZ2Jl
ZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0NCj4gIGRyaXZlcnMvdmlk
ZW8vZ2VvZGUvZ3gxZmJfY29yZS5jICAgICAgICAgICAgICAgICAgIHwgIDYgKy0NCj4gIGRyaXZl
cnMvdmlkZW8vZ2VvZGUvZ3hmYl9jb3JlLmMgICAgICAgICAgICAgICAgICAgIHwgMTAgKy0tDQo+
ICBkcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmJfY29yZS5jICAgICAgICAgICAgICAgICAgICB8IDEw
ICstLQ0KPiAgZHJpdmVycy92aWRlby9ncnZnYS5jICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgNCArLQ0KPiAgZHJpdmVycy92aWRlby9neHQ0NTAwLmMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgNCArLQ0KPiAgZHJpdmVycy92aWRlby9oZWN1YmFmYi5jICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAgZHJpdmVycy92aWRlby9oZ2FmYi5jICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQ0KPiAgZHJpdmVycy92aWRlby9oaXRmYi5jICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAgZHJpdmVycy92aWRlby9ocGZi
LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQ0KPiAgZHJpdmVycy92aWRl
by9pNzQwZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQ0KPiAgZHJpdmVy
cy92aWRlby9pODEwL2k4MTBfbWFpbi5jICAgICAgICAgICAgICAgICAgICAgfCAyNiArKystLS0t
DQo+ICBkcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmggICAgICAgICAgICAgICAgICAgICB8
ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL2ltc3R0ZmIuYyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICA0ICstDQo+ICBkcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jICAgICAg
ICAgICAgICAgICB8IDE2ICsrLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL2t5cm8vZmJkZXYu
YyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL2xlby5j
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVv
L21iODYyeHgvbWI4NjJ4eGZiZHJ2LmMgICAgICAgICAgICAgICB8ICA2ICstDQo+ICBkcml2ZXJz
L3ZpZGVvL21ieC9tYnhkZWJ1Z2ZzLmMgICAgICAgICAgICAgICAgICAgICB8ICAyICstDQo+ICBk
cml2ZXJzL3ZpZGVvL21ieC9tYnhmYi5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwICst
LQ0KPiAgZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jICAgICAgICAgICAgICAgICAgICAgICAg
fCAxMiArKy0tDQo+ICBkcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICA2ICstDQo+ICBkcml2ZXJzL3ZpZGVvL214c2ZiLmMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICA2ICstDQo+ICBkcml2ZXJzL3ZpZGVvL25lb2ZiLmMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IDEyICsrLS0NCj4gIGRyaXZlcnMvdmlkZW8vbnVjOTAwZmIu
YyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0NCj4gIGRyaXZlcnMvdmlkZW8vbnZp
ZGlhL252aWRpYS5jICAgICAgICAgICAgICAgICAgICAgIHwgMTIgKystLQ0KPiAgLi4uL29tYXAy
L2Rpc3BsYXlzL3BhbmVsLWxncGhpbGlwcy1sYjAzNXEwMi5jICAgICAgfCAgMiArLQ0KPiAgZHJp
dmVycy92aWRlby9wOTEwMC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0K
PiAgZHJpdmVycy92aWRlby9wbGF0aW51bWZiLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
NiArLQ0KPiAgZHJpdmVycy92aWRlby9wbTJmYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgMiArLQ0KPiAgZHJpdmVycy92aWRlby9wbTNmYi5jICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgNCArLQ0KPiAgZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAgZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgNiArLQ0KPiAgZHJpdmVycy92aWRlby9wczNmYi5jICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAgZHJpdmVycy92aWRlby9wdnIy
ZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiArLQ0KPiAgZHJpdmVycy92aWRl
by9weGExNjhmYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQ0KPiAgZHJpdmVy
cy92aWRlby9weGEzeHgtZ2N1LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAg
ZHJpdmVycy92aWRlby9weGFmYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMCAr
KystLS0NCj4gIGRyaXZlcnMvdmlkZW8vcTQwZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgMjAgKysrLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL3JpdmEvcml2YWZiLWkyYy5j
ICAgICAgICAgICAgICAgICAgICB8ICA2ICstDQo+ICBkcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIu
YyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICstDQo+ICBkcml2ZXJzL3ZpZGVvL3MzYy1m
Yi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2ICstDQo+ICBkcml2ZXJzL3ZpZGVv
L3MzYzI0MTBmYi5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4ICstLQ0KPiAgZHJpdmVy
cy92aWRlby9zM2ZiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiArLQ0KPiAg
ZHJpdmVycy92aWRlby9zYTExMDBmYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiAr
LQ0KPiAgZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgICAgICAgICAgICAg
fCAgOCArLS0NCj4gIGRyaXZlcnMvdmlkZW8vc2dpdndmYi5jICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vc2g3NzYwZmIuYyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5j
ICAgICAgICAgICAgICAgICAgIHwgMTYgKystLS0NCj4gIGRyaXZlcnMvdmlkZW8vc2hfbW9iaWxl
X21lcmFtLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vc2lz
L3Npc19tYWluLmMgICAgICAgICAgICAgICAgICAgICAgIHwgODIgKysrKysrKysrKystLS0tLS0t
LS0tLQ0KPiAgZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgMiArLQ0KPiAgZHJpdmVycy92aWRlby9zbTUwMWZiLmMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgOCArLS0NCj4gIGRyaXZlcnMvdmlkZW8vc3N0ZmIuYyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgMTggKystLS0NCj4gIGRyaXZlcnMvdmlkZW8vc3VueHZyMTAwMC5j
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYgKy0NCj4gIGRyaXZlcnMvdmlkZW8vc3VueHZy
MjUwMC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYgKy0NCj4gIGRyaXZlcnMvdmlkZW8v
c3VueHZyNTAwLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYgKy0NCj4gIGRyaXZlcnMv
dmlkZW8vdGN4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0NCj4gIGRy
aXZlcnMvdmlkZW8vdGRmeGZiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKy0t
DQo+ICBkcml2ZXJzL3ZpZGVvL3RnYWZiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IDE2ICsrLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL3RtaW9mYi5jICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAyICstDQo+ICBkcml2ZXJzL3ZpZGVvL3RyaWRlbnRmYi5jICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICA4ICstLQ0KPiAgZHJpdmVycy92aWRlby91dmVzYWZiLmMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAzMCArKysrLS0tLQ0KPiAgZHJpdmVycy92aWRlby92ZXJt
aWxpb24vdmVybWlsaW9uLmMgICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAgZHJpdmVycy92aWRl
by92ZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAgZHJpdmVy
cy92aWRlby92Z2ExNmZiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAg
ZHJpdmVycy92aWRlby92aWEvZHZpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOCAr
LS0NCj4gIGRyaXZlcnMvdmlkZW8vdmlhL2R2aS5oICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDQgKy0NCj4gIGRyaXZlcnMvdmlkZW8vdmlhL2h3LmMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgMTYgKystLS0NCj4gIGRyaXZlcnMvdmlkZW8vdmlhL2h3LmggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDQgKy0NCj4gIGRyaXZlcnMvdmlkZW8vdmlhL2xjZC5jICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKy0tDQo+ICBkcml2ZXJzL3ZpZGVvL3ZpYS9sY2Qu
aCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2ICstDQo+ICBkcml2ZXJzL3ZpZGVvL3Zp
YS92aWEtY29yZS5jICAgICAgICAgICAgICAgICAgICAgICB8IDEwICstLQ0KPiAgZHJpdmVycy92
aWRlby92aWEvdmlhLWdwaW8uYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KPiAgZHJp
dmVycy92aWRlby92aWEvdmlhZmJkZXYuYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMCArLS0N
Cj4gIGRyaXZlcnMvdmlkZW8vdnQ4NTAwbGNkZmIuYyAgICAgICAgICAgICAgICAgICAgICAgIHwg
IDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vdnQ4NjIzZmIuYyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vdzEwMGZiLmMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDYgKy0NCj4gIGRyaXZlcnMvdmlkZW8vd204NTA1ZmIuYyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8vd210X2dlX3JvcHMuYyAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0NCj4gIGRyaXZlcnMvdmlkZW8veGVuLWZiZnJv
bnQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0NCj4gIGRyaXZlcnMvdmlkZW8veGls
aW54ZmIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0NCj4gIDEyMiBmaWxlcyBj
aGFuZ2VkLCA0MzggaW5zZXJ0aW9ucygrKSwgNDQzIGRlbGV0aW9ucygtKQ0KPiANCg0KRm9yIGRy
aXZlcnMvdmlkZW8vczNjLWZiLmMsIGRyaXZlcnMvdmlkZW8vZXh5bm9zL2V4eW5vc19kcF9jb3Jl
LmMNCg0KQWNrZWQtYnk6IEppbmdvbyBIYW4gPGpnMS5oYW5Ac2Ftc3VuZy5jb20+DQoNCg0KQmVz
dCByZWdhcmRzLA0KSmluZ29vIEhhbg0KDQo=

^ permalink raw reply

* Re: [PATCH] powerpc: added DSCR support to ptrace
From: Alexey Kardashevskiy @ 2012-11-20  1:18 UTC (permalink / raw)
  To: Alexey Kardashevskiy
  Cc: linuxppc-dev, Paul Mackerras, Anton Blanchard, linux-kernel
In-Reply-To: <1350281910-5238-1-git-send-email-aik@ozlabs.ru>

Ping?

On 15/10/12 17:18, Alexey Kardashevskiy wrote:
> The DSCR (aka Data Stream Control Register) is supported on some
> server PowerPC chips and allow some control over the prefetch
> of data streams.
>
> The kernel already supports DSCR value per thread but there is also
> a need in a ability to change it from an external process for
> the specific pid.
>
> The patch adds new register index PT_DSCR (index=44) which can be
> set/get by:
>    ptrace(PTRACE_POKEUSER, traced_process, PT_DSCR << 3, dscr);
>    dscr = ptrace(PTRACE_PEEKUSER, traced_process, PT_DSCR << 3, NULL);
>
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> ---
>   arch/powerpc/include/asm/ptrace.h |    3 ++-
>   arch/powerpc/kernel/ptrace.c      |   16 ++++++++++++++++
>   2 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
> index 84cc784..946c556 100644
> --- a/arch/powerpc/include/asm/ptrace.h
> +++ b/arch/powerpc/include/asm/ptrace.h
> @@ -276,7 +276,8 @@ static inline unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
>   #define PT_DAR	41
>   #define PT_DSISR 42
>   #define PT_RESULT 43
> -#define PT_REGS_COUNT 44
> +#define PT_DSCR 44
> +#define PT_REGS_COUNT 45
>
>   #define PT_FPR0	48	/* each FP reg occupies 2 slots in this space */
>
> diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
> index 8d8e028..4798acf 100644
> --- a/arch/powerpc/kernel/ptrace.c
> +++ b/arch/powerpc/kernel/ptrace.c
> @@ -179,6 +179,17 @@ static int set_user_msr(struct task_struct *task, unsigned long msr)
>   	return 0;
>   }
>
> +static unsigned long get_user_dscr(struct task_struct *task)
> +{
> +	return task->thread.dscr;
> +}
> +
> +static int set_user_dscr(struct task_struct *task, unsigned long dscr)
> +{
> +	task->thread.dscr = dscr;
> +	return 0;
> +}
> +
>   /*
>    * We prevent mucking around with the reserved area of trap
>    * which are used internally by the kernel.
> @@ -200,6 +211,9 @@ unsigned long ptrace_get_reg(struct task_struct *task, int regno)
>   	if (regno == PT_MSR)
>   		return get_user_msr(task);
>
> +	if (regno == PT_DSCR)
> +		return get_user_dscr(task);
> +
>   	if (regno < (sizeof(struct pt_regs) / sizeof(unsigned long)))
>   		return ((unsigned long *)task->thread.regs)[regno];
>
> @@ -218,6 +232,8 @@ int ptrace_put_reg(struct task_struct *task, int regno, unsigned long data)
>   		return set_user_msr(task, data);
>   	if (regno == PT_TRAP)
>   		return set_user_trap(task, data);
> +	if (regno == PT_DSCR)
> +		return set_user_dscr(task, data);
>
>   	if (regno <= PT_MAX_PUT_REG) {
>   		((unsigned long *)task->thread.regs)[regno] = data;
>


-- 
Alexey

^ permalink raw reply

* [PATCH] vfio powerpc: enabled and supported on powernv platform
From: Alexey Kardashevskiy @ 2012-11-20  0:48 UTC (permalink / raw)
  To: Alex Williamson
  Cc: kvm, Alexey Kardashevskiy, linux-kernel, Paul Mackerras,
	linuxppc-dev, David Gibson
In-Reply-To: <20121113033832.GW4696@truffula.fritz.box>

VFIO implements platform independent stuff such as
a PCI driver, BAR access (via read/write on a file descriptor
or direct mapping when possible) and IRQ signaling.
The platform dependent part includes IOMMU initialization
and handling.

This patch initializes IOMMU groups based on the IOMMU
configuration discovered during the PCI scan, only POWERNV
platform is supported at the moment.

Also the patch implements an VFIO-IOMMU driver which
manages DMA mapping/unmapping requests coming from
the client (now QEMU). It also returns a DMA window
information to let the guest initialize the device tree
for a guest OS properly. Although this driver has been
tested only on POWERNV, it should work on any platform
supporting TCE tables.

To enable VFIO on POWER, enable SPAPR_TCE_IOMMU config
option.

Cc: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---
 arch/powerpc/include/asm/iommu.h     |    6 +
 arch/powerpc/kernel/iommu.c          |  140 +++++++++++++++++++
 arch/powerpc/platforms/powernv/pci.c |  135 +++++++++++++++++++
 drivers/iommu/Kconfig                |    8 ++
 drivers/vfio/Kconfig                 |    6 +
 drivers/vfio/Makefile                |    1 +
 drivers/vfio/vfio_iommu_spapr_tce.c  |  247 ++++++++++++++++++++++++++++++++++
 include/linux/vfio.h                 |   20 +++
 8 files changed, 563 insertions(+)
 create mode 100644 drivers/vfio/vfio_iommu_spapr_tce.c

diff --git a/arch/powerpc/include/asm/iommu.h b/arch/powerpc/include/asm/iommu.h
index cbfe678..5ba66cb 100644
--- a/arch/powerpc/include/asm/iommu.h
+++ b/arch/powerpc/include/asm/iommu.h
@@ -64,30 +64,33 @@ struct iommu_pool {
 } ____cacheline_aligned_in_smp;
 
 struct iommu_table {
 	unsigned long  it_busno;     /* Bus number this table belongs to */
 	unsigned long  it_size;      /* Size of iommu table in entries */
 	unsigned long  it_offset;    /* Offset into global table */
 	unsigned long  it_base;      /* mapped address of tce table */
 	unsigned long  it_index;     /* which iommu table this is */
 	unsigned long  it_type;      /* type: PCI or Virtual Bus */
 	unsigned long  it_blocksize; /* Entries in each block (cacheline) */
 	unsigned long  poolsize;
 	unsigned long  nr_pools;
 	struct iommu_pool large_pool;
 	struct iommu_pool pools[IOMMU_NR_POOLS];
 	unsigned long *it_map;       /* A simple allocation bitmap for now */
+#ifdef CONFIG_IOMMU_API
+	struct iommu_group *it_group;
+#endif
 };
 
 struct scatterlist;
 
 static inline void set_iommu_table_base(struct device *dev, void *base)
 {
 	dev->archdata.dma_data.iommu_table_base = base;
 }
 
 static inline void *get_iommu_table_base(struct device *dev)
 {
 	return dev->archdata.dma_data.iommu_table_base;
 }
 
 /* Frees table for an individual device node */
@@ -135,17 +138,20 @@ static inline void pci_iommu_init(void) { }
 extern void alloc_dart_table(void);
 #if defined(CONFIG_PPC64) && defined(CONFIG_PM)
 static inline void iommu_save(void)
 {
 	if (ppc_md.iommu_save)
 		ppc_md.iommu_save();
 }
 
 static inline void iommu_restore(void)
 {
 	if (ppc_md.iommu_restore)
 		ppc_md.iommu_restore();
 }
 #endif
 
+extern long iommu_put_tces(struct iommu_table *tbl, unsigned long entry, uint64_t tce,
+		enum dma_data_direction direction, unsigned long pages);
+
 #endif /* __KERNEL__ */
 #endif /* _ASM_IOMMU_H */
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index ff5a6ce..94f614b 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -32,30 +32,31 @@
 #include <linux/dma-mapping.h>
 #include <linux/bitmap.h>
 #include <linux/iommu-helper.h>
 #include <linux/crash_dump.h>
 #include <linux/hash.h>
 #include <linux/fault-inject.h>
 #include <linux/pci.h>
 #include <asm/io.h>
 #include <asm/prom.h>
 #include <asm/iommu.h>
 #include <asm/pci-bridge.h>
 #include <asm/machdep.h>
 #include <asm/kdump.h>
 #include <asm/fadump.h>
 #include <asm/vio.h>
+#include <asm/tce.h>
 
 #define DBG(...)
 
 static int novmerge;
 
 static void __iommu_free(struct iommu_table *, dma_addr_t, unsigned int);
 
 static int __init setup_iommu(char *str)
 {
 	if (!strcmp(str, "novmerge"))
 		novmerge = 1;
 	else if (!strcmp(str, "vmerge"))
 		novmerge = 0;
 	return 1;
 }
@@ -844,15 +845,154 @@ void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl,
 }
 
 void iommu_free_coherent(struct iommu_table *tbl, size_t size,
 			 void *vaddr, dma_addr_t dma_handle)
 {
 	if (tbl) {
 		unsigned int nio_pages;
 
 		size = PAGE_ALIGN(size);
 		nio_pages = size >> IOMMU_PAGE_SHIFT;
 		iommu_free(tbl, dma_handle, nio_pages);
 		size = PAGE_ALIGN(size);
 		free_pages((unsigned long)vaddr, get_order(size));
 	}
 }
+
+#ifdef CONFIG_IOMMU_API
+/*
+ * SPAPR TCE API
+ */
+static struct page *free_tce(struct iommu_table *tbl, unsigned long entry)
+{
+	struct page *page = NULL;
+	unsigned long oldtce;
+
+	oldtce = ppc_md.tce_get(tbl, entry);
+
+	if (!(oldtce & (TCE_PCI_WRITE | TCE_PCI_READ)))
+		return NULL;
+
+	page = pfn_to_page(oldtce >> PAGE_SHIFT);
+
+	WARN_ON(!page);
+	if (page && (oldtce & TCE_PCI_WRITE))
+		SetPageDirty(page);
+	ppc_md.tce_free(tbl, entry, 1);
+
+	return page;
+}
+
+static int put_tce(struct iommu_table *tbl, unsigned long entry,
+		uint64_t tce, enum dma_data_direction direction)
+{
+	int ret;
+	struct page *page = NULL;
+	unsigned long kva, offset;
+
+	/* Map new TCE */
+	offset = (tce & IOMMU_PAGE_MASK) - (tce & PAGE_MASK);
+	ret = get_user_pages_fast(tce & PAGE_MASK, 1,
+			direction != DMA_TO_DEVICE, &page);
+	if (ret < 1) {
+		printk(KERN_ERR "tce_vfio: get_user_pages_fast failed tce=%llx ioba=%lx ret=%d\n",
+				tce, entry << IOMMU_PAGE_SHIFT, ret);
+		if (!ret)
+			ret = -EFAULT;
+	}
+
+	kva = (unsigned long) page_address(page);
+	kva += offset;
+
+	/* tce_build receives a virtual address */
+	entry += tbl->it_offset; /* Offset into real TCE table */
+	ret = ppc_md.tce_build(tbl, entry, 1, kva, direction, NULL);
+
+	/* tce_build() only returns non-zero for transient errors */
+	if (unlikely(ret)) {
+		printk(KERN_ERR "tce_vfio: tce_put failed on tce=%llx ioba=%lx kva=%lx ret=%d\n",
+				tce, entry << IOMMU_PAGE_SHIFT, kva, ret);
+		put_page(page);
+		return -EIO;
+	}
+
+	return 0;
+}
+
+static void tce_flush(struct iommu_table *tbl)
+{
+	/* Flush/invalidate TLB caches if necessary */
+	if (ppc_md.tce_flush)
+		ppc_md.tce_flush(tbl);
+
+	/* Make sure updates are seen by hardware */
+	mb();
+}
+
+long iommu_put_tces(struct iommu_table *tbl, unsigned long entry, uint64_t tce,
+		enum dma_data_direction direction, unsigned long pages)
+{
+	int i, ret = 0, pages_to_put = 0;
+	struct page *page;
+	struct iommu_pool *pool = get_pool(tbl, entry);
+	struct page **oldpages;
+	const int oldpagesnum = PAGE_SIZE/sizeof(*oldpages);
+
+	BUILD_BUG_ON(PAGE_SIZE < IOMMU_PAGE_SIZE);
+
+	/* Handle a single page request without allocation
+	   of pages-to-release array */
+	if (pages == 1) {
+		spin_lock(&(pool->lock));
+		page = free_tce(tbl, entry);
+
+		if (direction != DMA_NONE)
+			ret = put_tce(tbl, entry, tce, direction);
+
+		tce_flush(tbl);
+
+		if (page)
+			put_page(page);
+
+		spin_unlock(&(pool->lock));
+		return ret;
+	}
+
+	/* Releasing multiple pages */
+	/* Allocate an array for pages to be released after TCE table
+	   is updated */
+	oldpages = kmalloc(PAGE_SIZE, GFP_KERNEL);
+	if (!oldpages)
+		return -ENOMEM;
+
+	spin_lock(&(pool->lock));
+
+	for (i = 0; (i < pages) && !ret; ++i, ++entry, tce += IOMMU_PAGE_SIZE) {
+		page = free_tce(tbl, entry);
+		if (page) {
+			oldpages[pages_to_put] = page;
+			++pages_to_put;
+		}
+
+		if (direction != DMA_NONE)
+			ret = put_tce(tbl, entry, tce, direction);
+
+		/* Release old pages if we reached the end of oldpages[] or
+		   it is the last page or we are about to exit the loop */
+		if ((pages_to_put == oldpagesnum) || (i == pages - 1) || ret) {
+			tce_flush(tbl);
+
+			/* Release pages after removing them from TCE table */
+			while (pages_to_put) {
+				--pages_to_put;
+				put_page(oldpages[pages_to_put]);
+			}
+		}
+	}
+
+	spin_unlock(&(pool->lock));
+	kfree(oldpages);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(iommu_put_tces);
+#endif /* CONFIG_IOMMU_API */
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index 05205cf..676f4d9 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -8,30 +8,31 @@
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version
  * 2 of the License, or (at your option) any later version.
  */
 
 #include <linux/kernel.h>
 #include <linux/pci.h>
 #include <linux/delay.h>
 #include <linux/string.h>
 #include <linux/init.h>
 #include <linux/bootmem.h>
 #include <linux/irq.h>
 #include <linux/io.h>
 #include <linux/msi.h>
+#include <linux/iommu.h>
 
 #include <asm/sections.h>
 #include <asm/io.h>
 #include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #include <asm/machdep.h>
 #include <asm/ppc-pci.h>
 #include <asm/opal.h>
 #include <asm/iommu.h>
 #include <asm/tce.h>
 #include <asm/abs_addr.h>
 #include <asm/firmware.h>
 
 #include "powernv.h"
 #include "pci.h"
@@ -601,15 +602,149 @@ void __init pnv_pci_init(void)
 	/* Configure IOMMU DMA hooks */
 	ppc_md.pci_dma_dev_setup = pnv_pci_dma_dev_setup;
 	ppc_md.tce_build = pnv_tce_build;
 	ppc_md.tce_free = pnv_tce_free;
 	ppc_md.tce_get = pnv_tce_get;
 	ppc_md.pci_probe_mode = pnv_pci_probe_mode;
 	set_pci_dma_ops(&dma_iommu_ops);
 
 	/* Configure MSIs */
 #ifdef CONFIG_PCI_MSI
 	ppc_md.msi_check_device = pnv_msi_check_device;
 	ppc_md.setup_msi_irqs = pnv_setup_msi_irqs;
 	ppc_md.teardown_msi_irqs = pnv_teardown_msi_irqs;
 #endif
 }
+
+#ifdef CONFIG_IOMMU_API
+/*
+ * IOMMU groups support required by VFIO
+ */
+static int add_device(struct device *dev)
+{
+	struct iommu_table *tbl;
+	int ret = 0;
+
+	if (WARN_ON(dev->iommu_group)) {
+		printk(KERN_WARNING "tce_vfio: device %s is already in iommu group %d, skipping\n",
+				dev->kobj.name,
+				iommu_group_id(dev->iommu_group));
+		return -EBUSY;
+	}
+
+	tbl = get_iommu_table_base(dev);
+	if (!tbl) {
+		pr_debug("tce_vfio: skipping device %s with no tbl\n",
+				dev->kobj.name);
+		return 0;
+	}
+
+	pr_debug("tce_vfio: adding %s to iommu group %d\n",
+			dev->kobj.name, iommu_group_id(tbl->it_group));
+
+	ret = iommu_group_add_device(tbl->it_group, dev);
+	if (ret < 0)
+		printk(KERN_ERR "tce_vfio: %s has not been added, ret=%d\n",
+				dev->kobj.name, ret);
+
+	return ret;
+}
+
+static void del_device(struct device *dev)
+{
+	iommu_group_remove_device(dev);
+}
+
+static int iommu_bus_notifier(struct notifier_block *nb,
+			      unsigned long action, void *data)
+{
+	struct device *dev = data;
+
+	switch (action) {
+	case BUS_NOTIFY_ADD_DEVICE:
+		return add_device(dev);
+	case BUS_NOTIFY_DEL_DEVICE:
+		del_device(dev);
+		return 0;
+	default:
+		return 0;
+	}
+}
+
+static struct notifier_block tce_iommu_bus_nb = {
+	.notifier_call = iommu_bus_notifier,
+};
+
+static void group_release(void *iommu_data)
+{
+	struct iommu_table *tbl = iommu_data;
+	tbl->it_group = NULL;
+}
+
+static int __init tce_iommu_init(void)
+{
+	struct pci_dev *pdev = NULL;
+	struct iommu_table *tbl;
+	struct iommu_group *grp;
+
+	bus_register_notifier(&pci_bus_type, &tce_iommu_bus_nb);
+
+	/* Allocate and initialize IOMMU groups */
+	for_each_pci_dev(pdev) {
+		tbl = get_iommu_table_base(&pdev->dev);
+		if (!tbl)
+			continue;
+
+		/* Skip already initialized */
+		if (tbl->it_group)
+			continue;
+
+		grp = iommu_group_alloc();
+		if (IS_ERR(grp)) {
+			printk(KERN_INFO "tce_vfio: cannot create "
+					"new IOMMU group, ret=%ld\n",
+					PTR_ERR(grp));
+			return PTR_ERR(grp);
+		}
+		tbl->it_group = grp;
+		iommu_group_set_iommudata(grp, tbl, group_release);
+	}
+
+	/* Add PCI devices to VFIO groups */
+	for_each_pci_dev(pdev)
+		add_device(&pdev->dev);
+
+	return 0;
+}
+
+static void __exit tce_iommu_cleanup(void)
+{
+	struct pci_dev *pdev = NULL;
+	struct iommu_table *tbl;
+	struct iommu_group *grp = NULL;
+
+	bus_unregister_notifier(&pci_bus_type, &tce_iommu_bus_nb);
+
+	/* Delete PCI devices from VFIO groups */
+	for_each_pci_dev(pdev)
+		del_device(&pdev->dev);
+
+	/* Release VFIO groups */
+	for_each_pci_dev(pdev) {
+		tbl = get_iommu_table_base(&pdev->dev);
+		if (!tbl)
+			continue;
+		grp = tbl->it_group;
+
+		/* Skip (already) uninitialized */
+		if (!grp)
+			continue;
+
+		/* Do actual release, group_release() is expected to work */
+		iommu_group_put(grp);
+		BUG_ON(tbl->it_group);
+	}
+}
+
+module_init(tce_iommu_init);
+module_exit(tce_iommu_cleanup);
+#endif /* CONFIG_IOMMU_API */
diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
index 9f69b56..29d11dc 100644
--- a/drivers/iommu/Kconfig
+++ b/drivers/iommu/Kconfig
@@ -175,16 +175,24 @@ config EXYNOS_IOMMU
 	  processor family. This enables H/W multimedia accellerators to see
 	  non-linear physical memory chunks as a linear memory in their
 	  address spaces
 
 	  If unsure, say N here.
 
 config EXYNOS_IOMMU_DEBUG
 	bool "Debugging log for Exynos IOMMU"
 	depends on EXYNOS_IOMMU
 	help
 	  Select this to see the detailed log message that shows what
 	  happens in the IOMMU driver
 
 	  Say N unless you need kernel log message for IOMMU debugging
 
+config SPAPR_TCE_IOMMU
+	bool "sPAPR TCE IOMMU Support"
+	depends on PPC_POWERNV
+	select IOMMU_API
+	help
+	  Enables bits of IOMMU API required by VFIO. The iommu_ops is
+	  still not implemented.
+
 endif # IOMMU_SUPPORT
diff --git a/drivers/vfio/Kconfig b/drivers/vfio/Kconfig
index 7cd5dec..b464687 100644
--- a/drivers/vfio/Kconfig
+++ b/drivers/vfio/Kconfig
@@ -1,16 +1,22 @@
 config VFIO_IOMMU_TYPE1
 	tristate
 	depends on VFIO
 	default n
 
+config VFIO_IOMMU_SPAPR_TCE
+	tristate
+	depends on VFIO && SPAPR_TCE_IOMMU
+	default n
+
 menuconfig VFIO
 	tristate "VFIO Non-Privileged userspace driver framework"
 	depends on IOMMU_API
 	select VFIO_IOMMU_TYPE1 if X86
+	select VFIO_IOMMU_SPAPR_TCE if PPC_POWERNV
 	help
 	  VFIO provides a framework for secure userspace device drivers.
 	  See Documentation/vfio.txt for more details.
 
 	  If you don't know what to do here, say N.
 
 source "drivers/vfio/pci/Kconfig"
diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile
index 2398d4a..72bfabc 100644
--- a/drivers/vfio/Makefile
+++ b/drivers/vfio/Makefile
@@ -1,3 +1,4 @@
 obj-$(CONFIG_VFIO) += vfio.o
 obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
+obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
 obj-$(CONFIG_VFIO_PCI) += pci/
diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c
new file mode 100644
index 0000000..ac72c74d
--- /dev/null
+++ b/drivers/vfio/vfio_iommu_spapr_tce.c
@@ -0,0 +1,247 @@
+/*
+ * VFIO: IOMMU DMA mapping support for TCE on POWER
+ *
+ * Copyright (C) 2012 IBM Corp.  All rights reserved.
+ *     Author: Alexey Kardashevskiy <aik@ozlabs.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Derived from original vfio_iommu_type1.c:
+ * Copyright (C) 2012 Red Hat, Inc.  All rights reserved.
+ *     Author: Alex Williamson <alex.williamson@redhat.com>
+ */
+
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+#include <linux/err.h>
+#include <linux/vfio.h>
+#include <asm/iommu.h>
+
+#define DRIVER_VERSION  "0.1"
+#define DRIVER_AUTHOR   "aik@ozlabs.ru"
+#define DRIVER_DESC     "VFIO IOMMU SPAPR TCE"
+
+static void tce_iommu_detach_group(void *iommu_data,
+		struct iommu_group *iommu_group);
+
+/*
+ * VFIO IOMMU fd for SPAPR_TCE IOMMU implementation
+ */
+
+/*
+ * The container descriptor supports only a single group per container.
+ * Required by the API as the container is not supplied with the IOMMU group
+ * at the moment of initialization.
+ */
+struct tce_container {
+	struct mutex lock;
+	struct iommu_table *tbl;
+};
+
+static void *tce_iommu_open(unsigned long arg)
+{
+	struct tce_container *container;
+
+	if (arg != VFIO_SPAPR_TCE_IOMMU) {
+		printk(KERN_ERR "tce_vfio: Wrong IOMMU type\n");
+		return ERR_PTR(-EINVAL);
+	}
+
+	container = kzalloc(sizeof(*container), GFP_KERNEL);
+	if (!container)
+		return ERR_PTR(-ENOMEM);
+
+	mutex_init(&container->lock);
+
+	return container;
+}
+
+static void tce_iommu_release(void *iommu_data)
+{
+	struct tce_container *container = iommu_data;
+
+	WARN_ON(container->tbl && !container->tbl->it_group);
+	if (container->tbl && container->tbl->it_group)
+		tce_iommu_detach_group(iommu_data, container->tbl->it_group);
+
+	mutex_destroy(&container->lock);
+
+	kfree(container);
+}
+
+static long tce_iommu_ioctl(void *iommu_data,
+				 unsigned int cmd, unsigned long arg)
+{
+	struct tce_container *container = iommu_data;
+	unsigned long minsz;
+
+	switch (cmd) {
+	case VFIO_CHECK_EXTENSION: {
+		return (arg == VFIO_SPAPR_TCE_IOMMU) ? 1 : 0;
+	}
+	case VFIO_IOMMU_SPAPR_TCE_GET_INFO: {
+		struct vfio_iommu_spapr_tce_info info;
+		struct iommu_table *tbl = container->tbl;
+
+		if (WARN_ON(!tbl))
+			return -ENXIO;
+
+		minsz = offsetofend(struct vfio_iommu_spapr_tce_info,
+				dma64_window_size);
+
+		if (copy_from_user(&info, (void __user *)arg, minsz))
+			return -EFAULT;
+
+		if (info.argsz < minsz)
+			return -EINVAL;
+
+		info.dma32_window_start = tbl->it_offset << IOMMU_PAGE_SHIFT;
+		info.dma32_window_size = tbl->it_size << IOMMU_PAGE_SHIFT;
+		info.dma64_window_start = 0;
+		info.dma64_window_size = 0;
+		info.flags = 0;
+
+		if (copy_to_user((void __user *)arg, &info, minsz))
+			return -EFAULT;
+
+		return 0;
+	}
+	case VFIO_IOMMU_MAP_DMA: {
+		vfio_iommu_spapr_tce_dma_map par;
+		struct iommu_table *tbl = container->tbl;
+		enum dma_data_direction direction = DMA_NONE;
+
+		if (WARN_ON(!tbl))
+			return -ENXIO;
+
+		minsz = offsetofend(vfio_iommu_spapr_tce_dma_map, size);
+
+		if (copy_from_user(&par, (void __user *)arg, minsz))
+			return -EFAULT;
+
+		if (par.argsz < minsz)
+			return -EINVAL;
+
+		if ((par.flags & VFIO_DMA_MAP_FLAG_READ) &&
+				(par.flags & VFIO_DMA_MAP_FLAG_WRITE)) {
+			direction = DMA_BIDIRECTIONAL;
+		} else if (par.flags & VFIO_DMA_MAP_FLAG_READ) {
+			direction = DMA_TO_DEVICE;
+		} else if (par.flags & VFIO_DMA_MAP_FLAG_WRITE) {
+			direction = DMA_FROM_DEVICE;
+		}
+
+		par.size += par.iova & ~IOMMU_PAGE_MASK;
+		par.size = _ALIGN_UP(par.size, IOMMU_PAGE_SIZE);
+
+		return iommu_put_tces(tbl, par.iova >> IOMMU_PAGE_SHIFT,
+				par.vaddr & IOMMU_PAGE_MASK, direction,
+				par.size >> IOMMU_PAGE_SHIFT);
+	}
+	case VFIO_IOMMU_UNMAP_DMA: {
+		vfio_iommu_spapr_tce_dma_unmap par;
+		struct iommu_table *tbl = container->tbl;
+
+		if (WARN_ON(!tbl))
+			return -ENXIO;
+
+		minsz = offsetofend(vfio_iommu_spapr_tce_dma_unmap, size);
+
+		if (copy_from_user(&par, (void __user *)arg, minsz))
+			return -EFAULT;
+
+		if (par.argsz < minsz)
+			return -EINVAL;
+
+		par.size += par.iova & ~IOMMU_PAGE_MASK;
+		par.size = _ALIGN_UP(par.size, IOMMU_PAGE_SIZE);
+
+		return iommu_put_tces(tbl, par.iova >> IOMMU_PAGE_SHIFT,
+				0, DMA_NONE, par.size >> IOMMU_PAGE_SHIFT);
+	}
+	default:
+		printk(KERN_WARNING "tce_vfio: unexpected cmd %x\n", cmd);
+	}
+
+	return -ENOTTY;
+}
+
+static int tce_iommu_attach_group(void *iommu_data,
+		struct iommu_group *iommu_group)
+{
+	struct tce_container *container = iommu_data;
+	struct iommu_table *tbl = iommu_group_get_iommudata(iommu_group);
+
+	BUG_ON(!tbl);
+	mutex_lock(&container->lock);
+	pr_debug("tce_vfio: Attaching group #%u to iommu %p\n",
+			iommu_group_id(iommu_group), iommu_group);
+	if (container->tbl) {
+		printk(KERN_WARNING "tce_vfio: Only one group per IOMMU container is allowed, existing id=%d, attaching id=%d\n",
+				iommu_group_id(container->tbl->it_group),
+				iommu_group_id(iommu_group));
+		mutex_unlock(&container->lock);
+		return -EBUSY;
+	}
+
+	container->tbl = tbl;
+	mutex_unlock(&container->lock);
+
+	return 0;
+}
+
+static void tce_iommu_detach_group(void *iommu_data,
+		struct iommu_group *iommu_group)
+{
+	struct tce_container *container = iommu_data;
+	struct iommu_table *tbl = iommu_group_get_iommudata(iommu_group);
+
+	BUG_ON(!tbl);
+	mutex_lock(&container->lock);
+	if (tbl != container->tbl) {
+		printk(KERN_WARNING "tce_vfio: detaching group #%u, expected group is #%u\n",
+				iommu_group_id(iommu_group),
+				iommu_group_id(tbl->it_group));
+	} else {
+
+		pr_debug("tce_vfio: detaching group #%u from iommu %p\n",
+				iommu_group_id(iommu_group), iommu_group);
+
+		iommu_put_tces(tbl, tbl->it_offset, 0, DMA_NONE, tbl->it_size);
+		container->tbl = NULL;
+	}
+	mutex_unlock(&container->lock);
+}
+
+const struct vfio_iommu_driver_ops tce_iommu_driver_ops = {
+	.name		= "iommu-vfio-powerpc",
+	.owner		= THIS_MODULE,
+	.open		= tce_iommu_open,
+	.release	= tce_iommu_release,
+	.ioctl		= tce_iommu_ioctl,
+	.attach_group	= tce_iommu_attach_group,
+	.detach_group	= tce_iommu_detach_group,
+};
+
+static int __init tce_iommu_init(void)
+{
+	return vfio_register_iommu_driver(&tce_iommu_driver_ops);
+}
+
+static void __exit tce_iommu_cleanup(void)
+{
+	vfio_unregister_iommu_driver(&tce_iommu_driver_ops);
+}
+
+module_init(tce_iommu_init);
+module_exit(tce_iommu_cleanup);
+
+MODULE_VERSION(DRIVER_VERSION);
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR(DRIVER_AUTHOR);
+MODULE_DESCRIPTION(DRIVER_DESC);
+
diff --git a/include/linux/vfio.h b/include/linux/vfio.h
index 0a4f180..3ecd65c 100644
--- a/include/linux/vfio.h
+++ b/include/linux/vfio.h
@@ -87,30 +87,31 @@ extern void vfio_unregister_iommu_driver(
  * Simple helper macro for dealing with variable sized structures passed
  * from user space.  This allows us to easily determine if the provided
  * structure is sized to include various fields.
  */
 #define offsetofend(TYPE, MEMBER) ({				\
 	TYPE tmp;						\
 	offsetof(TYPE, MEMBER) + sizeof(tmp.MEMBER); })		\
 
 #endif /* __KERNEL__ */
 
 /* Kernel & User level defines for VFIO IOCTLs. */
 
 /* Extensions */
 
 #define VFIO_TYPE1_IOMMU		1
+#define VFIO_SPAPR_TCE_IOMMU		2
 
 /*
  * The IOCTL interface is designed for extensibility by embedding the
  * structure length (argsz) and flags into structures passed between
  * kernel and userspace.  We therefore use the _IO() macro for these
  * defines to avoid implicitly embedding a size into the ioctl request.
  * As structure fields are added, argsz will increase to match and flag
  * bits will be defined to indicate additional fields with valid data.
  * It's *always* the caller's responsibility to indicate the size of
  * the structure passed by setting argsz appropriately.
  */
 
 #define VFIO_TYPE	(';')
 #define VFIO_BASE	100
 
@@ -430,16 +431,35 @@ struct vfio_iommu_type1_dma_map {
 /**
  * VFIO_IOMMU_UNMAP_DMA - _IOW(VFIO_TYPE, VFIO_BASE + 14, struct vfio_dma_unmap)
  *
  * Unmap IO virtual addresses using the provided struct vfio_dma_unmap.
  * Caller sets argsz.
  */
 struct vfio_iommu_type1_dma_unmap {
 	__u32	argsz;
 	__u32	flags;
 	__u64	iova;				/* IO virtual address */
 	__u64	size;				/* Size of mapping (bytes) */
 };
 
 #define VFIO_IOMMU_UNMAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 14)
 
+/* -------- Additional API for SPAPR TCE (Server POWERPC) IOMMU -------- */
+
+struct vfio_iommu_spapr_tce_info {
+	__u32 argsz;
+	__u32 flags;
+	__u32 dma32_window_start;
+	__u32 dma32_window_size;
+	__u64 dma64_window_start;
+	__u64 dma64_window_size;
+};
+
+#define VFIO_IOMMU_SPAPR_TCE_GET_INFO	_IO(VFIO_TYPE, VFIO_BASE + 12)
+
+/* Reuse type1 map/unmap structs as they are the same at the moment */
+typedef struct vfio_iommu_type1_dma_map vfio_iommu_spapr_tce_dma_map;
+typedef struct vfio_iommu_type1_dma_unmap vfio_iommu_spapr_tce_dma_unmap;
+
+/* ***************************************************************** */
+
 #endif /* VFIO_H */
-- 
1.7.10.4

^ permalink raw reply related

* Re: [PATCH 3/4] perf/POWER7: Make event translations available in sysfs
From: Jiri Olsa @ 2012-11-19 20:34 UTC (permalink / raw)
  To: Sukadev Bhattiprolu
  Cc: Peter Zijlstra, robert.richter, Anton Blanchard, linux-kernel,
	linuxppc-dev, Ingo Molnar, Paul Mackerras,
	Arnaldo Carvalho de Melo
In-Reply-To: <20121116193537.GA11800@us.ibm.com>

On Fri, Nov 16, 2012 at 11:35:37AM -0800, Sukadev Bhattiprolu wrote:
> Jiri Olsa [jolsa@redhat.com] wrote:
> | > 
> | > Can we remove the assumption that the event id is a generic event that
> | > has PERF_COUNT_HW_ prefix and also let the architectures pass in a "show"
> | > function ? This would allow architectures to display any arch specific
> | > events that don't yet have a generic counterpart.
> | > 
> | > IOW, can we do something like this (untested) and make PERF_EVENT_ATTR global:
> | 
> | hm, then you probably can use following:
> | 
> | http://www.spinics.net/lists/kernel/msg1434233.html
> 
> For now, power events can simply be u64 - so am hoping to have something
> like this and replace the raw codes:
> 
> #define PM_CYC			0x1e
> #define PM_GCT_NOSLOT_CYC	0x100f8
> 
> EVENT_ATTR_STR() is interesting, but would require new/extra macros like
> 
> #define PM_CYC_STR		"0x1e"
> #define PM_GCT_NOSLOT_CYC_STR	"0x100f8"
> 
> I went down the path we discussed earlier - to have x86 and Power share
> the EVENT_ATTR() macros. This is making the x86 code less concise
> 
> 	EVENT_ATTR(cpu-cycles,	CPU_CYCLES)
> 
> becomes
> 
> 	EVENT_ATTR(cpu-cycles,	PERF_COUNT_HW_CPU_CYCLES, events_sysfs_show)
> 
> with each EVENT_ATTR() explcitly adding events_sysfs_show or needing another
> wrapper around the wrappers.
> 
> Still tweaking it, but would it be flexible to make 'struct pmu_events_attr'
> common and let architectures define the EVENT_ATTR() as needed ? Would
> duplicate some code but hopefully not a lot.

sounds good, let's see ;)

jirka

^ permalink raw reply

* Re: [PATCH 431/493] usb: remove use of __devexit
From: Felipe Balbi @ 2012-11-19 20:17 UTC (permalink / raw)
  To: Bill Pemberton
  Cc: Kukjin Kim, Wan ZongShun, Alexander Shishkin, gregkh, linux-usb,
	Felipe Balbi, linux-omap, linux-samsung-soc, Alan Stern,
	Ben Dooks, linuxppc-dev, linux-arm-kernel
In-Reply-To: <1353349642-3677-431-git-send-email-wfp5p@virginia.edu>

[-- Attachment #1: Type: text/plain, Size: 3817 bytes --]

Hi,

On Mon, Nov 19, 2012 at 01:26:20PM -0500, Bill Pemberton wrote:
> CONFIG_HOTPLUG is going away as an option so __devexit is no
> longer needed.
> 
> Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
> Cc: Peter Korsgaard <jacmet@sunsite.dk> 
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> 
> Cc: Felipe Balbi <balbi@ti.com> 
> Cc: Li Yang <leoli@freescale.com> 
> Cc: Alan Stern <stern@rowland.harvard.edu> 
> Cc: Wan ZongShun <mcuos.com@gmail.com> 
> Cc: Ben Dooks <ben-linux@fluff.org> 
> Cc: Kukjin Kim <kgene.kim@samsung.com> 
> Cc: linux-usb@vger.kernel.org 
> Cc: linux-omap@vger.kernel.org 
> Cc: linuxppc-dev@lists.ozlabs.org 
> Cc: linux-arm-kernel@lists.infradead.org 
> Cc: linux-samsung-soc@vger.kernel.org 
> ---
>  drivers/usb/c67x00/c67x00-drv.c      |  2 +-
>  drivers/usb/chipidea/ci13xxx_imx.c   |  2 +-
>  drivers/usb/chipidea/ci13xxx_msm.c   |  2 +-
>  drivers/usb/chipidea/ci13xxx_pci.c   |  2 +-
>  drivers/usb/chipidea/core.c          |  2 +-
>  drivers/usb/chipidea/usbmisc_imx6q.c |  2 +-
>  drivers/usb/dwc3/core.c              |  2 +-
>  drivers/usb/dwc3/debugfs.c           |  2 +-
>  drivers/usb/dwc3/dwc3-exynos.c       |  2 +-
>  drivers/usb/dwc3/dwc3-omap.c         |  2 +-
>  drivers/usb/dwc3/dwc3-pci.c          |  2 +-
>  drivers/usb/gadget/bcm63xx_udc.c     |  2 +-
>  drivers/usb/gadget/fsl_qe_udc.c      |  2 +-
>  drivers/usb/gadget/hid.c             |  2 +-
>  drivers/usb/gadget/lpc32xx_udc.c     |  2 +-
>  drivers/usb/gadget/mv_u3d_core.c     |  2 +-
>  drivers/usb/gadget/mv_udc_core.c     |  2 +-
>  drivers/usb/gadget/net2272.c         | 10 +++++-----
>  drivers/usb/gadget/omap_udc.c        |  2 +-
>  drivers/usb/gadget/s3c-hsotg.c       |  4 ++--
>  drivers/usb/host/bcma-hcd.c          |  2 +-
>  drivers/usb/host/ehci-atmel.c        |  2 +-
>  drivers/usb/host/ehci-msm.c          |  2 +-
>  drivers/usb/host/ehci-platform.c     |  2 +-
>  drivers/usb/host/ehci-s5p.c          |  2 +-
>  drivers/usb/host/ehci-w90x900.c      |  2 +-
>  drivers/usb/host/fhci-hcd.c          |  4 ++--
>  drivers/usb/host/fsl-mph-dr-of.c     |  4 ++--
>  drivers/usb/host/isp1362-hcd.c       |  2 +-
>  drivers/usb/host/isp1760-if.c        |  2 +-
>  drivers/usb/host/ohci-at91.c         |  6 +++---
>  drivers/usb/host/ohci-exynos.c       |  2 +-
>  drivers/usb/host/ohci-jz4740.c       |  2 +-
>  drivers/usb/host/ohci-omap3.c        |  2 +-
>  drivers/usb/host/ohci-platform.c     |  2 +-
>  drivers/usb/host/ohci-s3c2410.c      |  2 +-
>  drivers/usb/host/ohci-tmio.c         |  2 +-
>  drivers/usb/host/r8a66597-hcd.c      |  2 +-
>  drivers/usb/host/sl811-hcd.c         |  2 +-
>  drivers/usb/host/ssb-hcd.c           |  4 ++--
>  drivers/usb/host/u132-hcd.c          |  2 +-
>  drivers/usb/musb/am35x.c             |  2 +-
>  drivers/usb/musb/blackfin.c          |  2 +-
>  drivers/usb/musb/da8xx.c             |  2 +-
>  drivers/usb/musb/davinci.c           |  2 +-
>  drivers/usb/musb/musb_core.c         |  2 +-
>  drivers/usb/musb/musb_dsps.c         |  2 +-
>  drivers/usb/musb/omap2430.c          |  2 +-
>  drivers/usb/musb/tusb6010.c          |  2 +-
>  drivers/usb/musb/ux500.c             |  2 +-
>  drivers/usb/otg/ab8500-usb.c         |  2 +-
>  drivers/usb/otg/fsl_otg.c            |  2 +-
>  drivers/usb/otg/msm_otg.c            |  2 +-
>  drivers/usb/otg/mxs-phy.c            |  2 +-
>  drivers/usb/otg/nop-usb-xceiv.c      |  2 +-
>  drivers/usb/phy/omap-usb2.c          |  2 +-
>  drivers/usb/phy/rcar-phy.c           |  2 +-
>  drivers/usb/renesas_usbhs/common.c   |  2 +-

For drivers/usb/gadget, drivers/usb/dwc3/, drivers/usb/musb/,
drivers/usb/otg/, drivers/usb/phy, and drivers/usb/renesas_usbhs:

Acked-by: Felipe Balbi <balbi@ti.com>

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply


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