Driver core patches for 3.9-rc1

Here is the big driver core merge for 3.9-rc1
 
 There are two major series here, both of which touch lots of drivers all
 over the kernel, and will cause you some merge conflicts:
   - add a new function called devm_ioremap_resource() to properly be
     able to check return values.
   - remove CONFIG_EXPERIMENTAL
 
 If you need me to provide a merged tree to handle these resolutions,
 please let me know.
 
 Other than those patches, there's not much here, some minor fixes and
 updates.
 
 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.19 (GNU/Linux)
 
 iEYEABECAAYFAlEmV0cACgkQMUfUDdst+yncCQCfbmnQZju7kzWXk6PjdFuKspT9
 weAAoMCzcAtEzzc4LXuUxxG/sXBVBCjW
 =yWAQ
 -----END PGP SIGNATURE-----

Merge tag 'driver-core-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core

Pull driver core patches from Greg Kroah-Hartman:
 "Here is the big driver core merge for 3.9-rc1

  There are two major series here, both of which touch lots of drivers
  all over the kernel, and will cause you some merge conflicts:

   - add a new function called devm_ioremap_resource() to properly be
     able to check return values.

   - remove CONFIG_EXPERIMENTAL

  Other than those patches, there's not much here, some minor fixes and
  updates"

Fix up trivial conflicts

* tag 'driver-core-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (221 commits)
  base: memory: fix soft/hard_offline_page permissions
  drivercore: Fix ordering between deferred_probe and exiting initcalls
  backlight: fix class_find_device() arguments
  TTY: mark tty_get_device call with the proper const values
  driver-core: constify data for class_find_device()
  firmware: Ignore abort check when no user-helper is used
  firmware: Reduce ifdef CONFIG_FW_LOADER_USER_HELPER
  firmware: Make user-mode helper optional
  firmware: Refactoring for splitting user-mode helper code
  Driver core: treat unregistered bus_types as having no devices
  watchdog: Convert to devm_ioremap_resource()
  thermal: Convert to devm_ioremap_resource()
  spi: Convert to devm_ioremap_resource()
  power: Convert to devm_ioremap_resource()
  mtd: Convert to devm_ioremap_resource()
  mmc: Convert to devm_ioremap_resource()
  mfd: Convert to devm_ioremap_resource()
  media: Convert to devm_ioremap_resource()
  iommu: Convert to devm_ioremap_resource()
  drm: Convert to devm_ioremap_resource()
  ...
This commit is contained in:
Linus Torvalds 2013-02-21 12:05:51 -08:00
commit 06991c28f3
378 changed files with 1711 additions and 1905 deletions

View file

@ -546,15 +546,7 @@ config AUDIT
logging of avc messages output). Does not do system-call logging of avc messages output). Does not do system-call
auditing without CONFIG_AUDITSYSCALL. auditing without CONFIG_AUDITSYSCALL.
Features that might still be considered unstable should be defined as Seriously dangerous features (such as write support for certain
dependent on "EXPERIMENTAL":
config SLUB
depends on EXPERIMENTAL && !ARCH_USES_SLAB_PAGE_STRUCT
bool "SLUB (Unqueued Allocator)"
...
while seriously dangerous features (such as write support for certain
filesystems) should advertise this prominently in their prompt string: filesystems) should advertise this prominently in their prompt string:
config ADFS_FS_RW config ADFS_FS_RW

View file

@ -1184,13 +1184,6 @@ static struct block_device_operations opt_fops = {
<filename>Documentation/kbuild/kconfig-language.txt</filename>. <filename>Documentation/kbuild/kconfig-language.txt</filename>.
</para> </para>
<para>
You may well want to make your CONFIG option only visible if
<symbol>CONFIG_EXPERIMENTAL</symbol> is enabled: this serves as a
warning to users. There many other fancy things you can do: see
the various <filename>Kconfig</filename> files for ideas.
</para>
<para> <para>
In your description of the option, make sure you address both the In your description of the option, make sure you address both the
expert user and the user who knows nothing about your feature. Mention expert user and the user who knows nothing about your feature. Mention

View file

@ -94,10 +94,8 @@
<sect1 id="CompileKGDB"> <sect1 id="CompileKGDB">
<title>Kernel config options for kgdb</title> <title>Kernel config options for kgdb</title>
<para> <para>
To enable <symbol>CONFIG_KGDB</symbol> you should first turn on To enable <symbol>CONFIG_KGDB</symbol> you should look under
"Prompt for development and/or incomplete code/drivers" "Kernel debugging" and select "KGDB: kernel debugger".
(CONFIG_EXPERIMENTAL) in "General setup", then under the
"Kernel debugging" select "KGDB: kernel debugger".
</para> </para>
<para> <para>
While it is not a hard requirement that you have symbols in your While it is not a hard requirement that you have symbols in your

View file

@ -266,7 +266,8 @@ IOMAP
devm_ioremap() devm_ioremap()
devm_ioremap_nocache() devm_ioremap_nocache()
devm_iounmap() devm_iounmap()
devm_request_and_ioremap() : checks resource, requests region, ioremaps devm_ioremap_resource() : checks resource, requests memory region, ioremaps
devm_request_and_ioremap() : obsoleted by devm_ioremap_resource()
pcim_iomap() pcim_iomap()
pcim_iounmap() pcim_iounmap()
pcim_iomap_table() : array of mapped addresses indexed by BAR pcim_iomap_table() : array of mapped addresses indexed by BAR
@ -288,3 +289,7 @@ PINCTRL
PWM PWM
devm_pwm_get() devm_pwm_get()
devm_pwm_put() devm_pwm_put()
PHY
devm_usb_get_phy()
devm_usb_put_phy()

View file

@ -6,8 +6,16 @@ This document describes how to use the dynamic debug (dyndbg) feature.
Dynamic debug is designed to allow you to dynamically enable/disable Dynamic debug is designed to allow you to dynamically enable/disable
kernel code to obtain additional kernel information. Currently, if kernel code to obtain additional kernel information. Currently, if
CONFIG_DYNAMIC_DEBUG is set, then all pr_debug()/dev_dbg() calls can CONFIG_DYNAMIC_DEBUG is set, then all pr_debug()/dev_dbg() and
be dynamically enabled per-callsite. print_hex_dump_debug()/print_hex_dump_bytes() calls can be dynamically
enabled per-callsite.
If CONFIG_DYNAMIC_DEBUG is not set, print_hex_dump_debug() is just
shortcut for print_hex_dump(KERN_DEBUG).
For print_hex_dump_debug()/print_hex_dump_bytes(), format string is
its 'prefix_str' argument, if it is constant string; or "hexdump"
in case 'prefix_str' is build dynamically.
Dynamic debug has even more useful features: Dynamic debug has even more useful features:
@ -202,6 +210,9 @@ The flags are:
t Include thread ID in messages not generated from interrupt context t Include thread ID in messages not generated from interrupt context
_ No flags are set. (Or'd with others on input) _ No flags are set. (Or'd with others on input)
For print_hex_dump_debug() and print_hex_dump_bytes(), only 'p' flag
have meaning, other flags ignored.
For display, the flags are preceded by '=' For display, the flags are preceded by '='
(mnemonic: what the flags are currently equal to). (mnemonic: what the flags are currently equal to).

View file

@ -192,7 +192,7 @@ grub.conf needs to be modified as follows:
The kernel option for enabling Intel TXT support is found under the The kernel option for enabling Intel TXT support is found under the
Security top-level menu and is called "Enable Intel(R) Trusted Security top-level menu and is called "Enable Intel(R) Trusted
Execution Technology (TXT)". It is marked as EXPERIMENTAL and Execution Technology (TXT)". It is considered EXPERIMENTAL and
depends on the generic x86 support (to allow maximum flexibility in depends on the generic x86 support (to allow maximum flexibility in
kernel build options), since the tboot code will detect whether the kernel build options), since the tboot code will detect whether the
platform actually supports Intel TXT and thus whether any of the platform actually supports Intel TXT and thus whether any of the

View file

@ -1398,7 +1398,7 @@ Sysfs notes:
EXPERIMENTAL: UWB EXPERIMENTAL: UWB
----------------- -----------------
This feature is marked EXPERIMENTAL because it has not been extensively This feature is considered EXPERIMENTAL because it has not been extensively
tested and validated in various ThinkPad models yet. The feature may not tested and validated in various ThinkPad models yet. The feature may not
work as expected. USE WITH CAUTION! To use this feature, you need to supply work as expected. USE WITH CAUTION! To use this feature, you need to supply
the experimental=1 parameter when loading the module. the experimental=1 parameter when loading the module.

View file

@ -462,13 +462,6 @@ config AUDIT
logging of avc messages output). Does not do system-call logging of avc messages output). Does not do system-call
auditing without CONFIG_AUDITSYSCALL. auditing without CONFIG_AUDITSYSCALL.
仍然被认为不够稳定的功能应该被定义为依赖于“EXPERIMENTAL”
config SLUB
depends on EXPERIMENTAL && !ARCH_USES_SLAB_PAGE_STRUCT
bool "SLUB (Unqueued Allocator)"
...
而那些危险的功能(比如某些文件系统的写支持)应该在它们的提示字符串里显著的声明这 而那些危险的功能(比如某些文件系统的写支持)应该在它们的提示字符串里显著的声明这
一点: 一点:

View file

@ -555,8 +555,7 @@ config NR_CPUS
with working support have a maximum of 4 CPUs. with working support have a maximum of 4 CPUs.
config ARCH_DISCONTIGMEM_ENABLE config ARCH_DISCONTIGMEM_ENABLE
bool "Discontiguous Memory Support (EXPERIMENTAL)" bool "Discontiguous Memory Support"
depends on EXPERIMENTAL
help help
Say Y to support efficient handling of discontiguous physical memory, Say Y to support efficient handling of discontiguous physical memory,
for architectures which are either NUMA (Non-Uniform Memory Access) for architectures which are either NUMA (Non-Uniform Memory Access)

View file

@ -1530,7 +1530,6 @@ config SMP
config SMP_ON_UP config SMP_ON_UP
bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)" bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
depends on EXPERIMENTAL
depends on SMP && !XIP_KERNEL depends on SMP && !XIP_KERNEL
default y default y
help help
@ -1731,7 +1730,7 @@ config AEABI
config OABI_COMPAT config OABI_COMPAT
bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)" bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
depends on AEABI && EXPERIMENTAL && !THUMB2_KERNEL depends on AEABI && !THUMB2_KERNEL
default y default y
help help
This option preserves the old syscall interface along with the This option preserves the old syscall interface along with the
@ -1855,7 +1854,6 @@ config SECCOMP
config CC_STACKPROTECTOR config CC_STACKPROTECTOR
bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)" bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
depends on EXPERIMENTAL
help help
This option turns on the -fstack-protector GCC feature. This This option turns on the -fstack-protector GCC feature. This
feature puts, at the beginning of functions, a canary value on feature puts, at the beginning of functions, a canary value on
@ -1872,7 +1870,7 @@ config XEN_DOM0
config XEN config XEN
bool "Xen guest support on ARM (EXPERIMENTAL)" bool "Xen guest support on ARM (EXPERIMENTAL)"
depends on EXPERIMENTAL && ARM && OF depends on ARM && OF
depends on CPU_V7 && !CPU_V6 depends on CPU_V7 && !CPU_V6
help help
Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.
@ -1941,7 +1939,7 @@ config ZBOOT_ROM
choice choice
prompt "Include SD/MMC loader in zImage (EXPERIMENTAL)" prompt "Include SD/MMC loader in zImage (EXPERIMENTAL)"
depends on ZBOOT_ROM && ARCH_SH7372 && EXPERIMENTAL depends on ZBOOT_ROM && ARCH_SH7372
default ZBOOT_ROM_NONE default ZBOOT_ROM_NONE
help help
Include experimental SD/MMC loading code in the ROM-able zImage. Include experimental SD/MMC loading code in the ROM-able zImage.
@ -1970,7 +1968,7 @@ endchoice
config ARM_APPENDED_DTB config ARM_APPENDED_DTB
bool "Use appended device tree blob to zImage (EXPERIMENTAL)" bool "Use appended device tree blob to zImage (EXPERIMENTAL)"
depends on OF && !ZBOOT_ROM && EXPERIMENTAL depends on OF && !ZBOOT_ROM
help help
With this option, the boot code will look for a device tree binary With this option, the boot code will look for a device tree binary
(DTB) appended to zImage (DTB) appended to zImage
@ -2088,7 +2086,7 @@ config XIP_PHYS_ADDR
config KEXEC config KEXEC
bool "Kexec system call (EXPERIMENTAL)" bool "Kexec system call (EXPERIMENTAL)"
depends on EXPERIMENTAL && (!SMP || HOTPLUG_CPU) depends on (!SMP || HOTPLUG_CPU)
help help
kexec is a system call that implements the ability to shutdown your kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot current kernel, and to start another kernel. It is like a reboot
@ -2110,7 +2108,6 @@ config ATAGS_PROC
config CRASH_DUMP config CRASH_DUMP
bool "Build kdump crash kernel (EXPERIMENTAL)" bool "Build kdump crash kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
help help
Generate crash dump after being started by kexec. This should Generate crash dump after being started by kexec. This should
be normally only set in special crash dump kernels which are be normally only set in special crash dump kernels which are
@ -2177,7 +2174,7 @@ config CPU_FREQ_S3C
config CPU_FREQ_S3C24XX config CPU_FREQ_S3C24XX
bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)" bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)"
depends on ARCH_S3C24XX && CPU_FREQ && EXPERIMENTAL depends on ARCH_S3C24XX && CPU_FREQ
select CPU_FREQ_S3C select CPU_FREQ_S3C
help help
This enables the CPUfreq driver for the Samsung S3C24XX family This enables the CPUfreq driver for the Samsung S3C24XX family
@ -2189,7 +2186,7 @@ config CPU_FREQ_S3C24XX
config CPU_FREQ_S3C24XX_PLL config CPU_FREQ_S3C24XX_PLL
bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)" bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)"
depends on CPU_FREQ_S3C24XX && EXPERIMENTAL depends on CPU_FREQ_S3C24XX
help help
Compile in support for changing the PLL frequency from the Compile in support for changing the PLL frequency from the
S3C24XX series CPUfreq driver. The PLL takes time to settle S3C24XX series CPUfreq driver. The PLL takes time to settle
@ -2252,7 +2249,7 @@ config FPE_NWFPE_XP
config FPE_FASTFPE config FPE_FASTFPE
bool "FastFPE math emulation (EXPERIMENTAL)" bool "FastFPE math emulation (EXPERIMENTAL)"
depends on (!AEABI || OABI_COMPAT) && !CPU_32v3 && EXPERIMENTAL depends on (!AEABI || OABI_COMPAT) && !CPU_32v3
---help--- ---help---
Say Y here to include the FAST floating point emulator in the kernel. Say Y here to include the FAST floating point emulator in the kernel.
This is an experimental much faster emulator which now also has full This is an experimental much faster emulator which now also has full

View file

@ -32,7 +32,7 @@ config FRAME_POINTER
config ARM_UNWIND config ARM_UNWIND
bool "Enable stack unwinding support (EXPERIMENTAL)" bool "Enable stack unwinding support (EXPERIMENTAL)"
depends on AEABI && EXPERIMENTAL depends on AEABI
default y default y
help help
This option enables stack unwinding support in the kernel This option enables stack unwinding support in the kernel

View file

@ -1134,11 +1134,9 @@ static int gpmc_probe(struct platform_device *pdev)
phys_base = res->start; phys_base = res->start;
mem_size = resource_size(res); mem_size = resource_size(res);
gpmc_base = devm_request_and_ioremap(&pdev->dev, res); gpmc_base = devm_ioremap_resource(&pdev->dev, res);
if (!gpmc_base) { if (IS_ERR(gpmc_base))
dev_err(&pdev->dev, "error: request memory / ioremap\n"); return PTR_ERR(gpmc_base);
return -EADDRNOTAVAIL;
}
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (res == NULL) if (res == NULL)

View file

@ -291,8 +291,8 @@ config MACH_JIVE
Say Y here if you are using the Logitech Jive. Say Y here if you are using the Logitech Jive.
config MACH_JIVE_SHOW_BOOTLOADER config MACH_JIVE_SHOW_BOOTLOADER
bool "Allow access to bootloader partitions in MTD (EXPERIMENTAL)" bool "Allow access to bootloader partitions in MTD"
depends on MACH_JIVE && EXPERIMENTAL depends on MACH_JIVE
config MACH_S3C2413 config MACH_S3C2413
bool bool

View file

@ -312,11 +312,9 @@ static int tegra_emc_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
} }
emc_regbase = devm_request_and_ioremap(&pdev->dev, res); emc_regbase = devm_ioremap_resource(&pdev->dev, res);
if (!emc_regbase) { if (IS_ERR(emc_regbase))
dev_err(&pdev->dev, "failed to remap registers\n"); return PTR_ERR(emc_regbase);
return -ENOMEM;
}
pdata = pdev->dev.platform_data; pdata = pdev->dev.platform_data;

View file

@ -808,11 +808,9 @@ static int omap_dm_timer_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
} }
timer->io_base = devm_request_and_ioremap(dev, mem); timer->io_base = devm_ioremap_resource(dev, mem);
if (!timer->io_base) { if (IS_ERR(timer->io_base))
dev_err(dev, "%s: region already claimed.\n", __func__); return PTR_ERR(timer->io_base);
return -ENOMEM;
}
if (dev->of_node) { if (dev->of_node) {
if (of_find_property(dev->of_node, "ti,timer-alwon", NULL)) if (of_find_property(dev->of_node, "ti,timer-alwon", NULL))

View file

@ -386,11 +386,9 @@ static int s3c_adc_probe(struct platform_device *pdev)
return -ENXIO; return -ENXIO;
} }
adc->regs = devm_request_and_ioremap(dev, regs); adc->regs = devm_ioremap_resource(dev, regs);
if (!adc->regs) { if (IS_ERR(adc->regs))
dev_err(dev, "failed to map registers\n"); return PTR_ERR(adc->regs);
return -ENXIO;
}
ret = regulator_enable(adc->vdd); ret = regulator_enable(adc->vdd);
if (ret) if (ret)

View file

@ -560,8 +560,7 @@ choice
accurate - This option is therefore marked experimental. accurate - This option is therefore marked experimental.
config BFIN_KERNEL_CLOCK_MEMINIT_CALC config BFIN_KERNEL_CLOCK_MEMINIT_CALC
bool "Calculate Timings (EXPERIMENTAL)" bool "Calculate Timings"
depends on EXPERIMENTAL
config BFIN_KERNEL_CLOCK_MEMINIT_SPEC config BFIN_KERNEL_CLOCK_MEMINIT_SPEC
bool "Provide accurate Timings based on target SCLK" bool "Provide accurate Timings based on target SCLK"
@ -1118,7 +1117,7 @@ endchoice
comment "Memory Protection Unit" comment "Memory Protection Unit"
config MPU config MPU
bool "Enable the memory protection unit (EXPERIMENTAL)" bool "Enable the memory protection unit"
default n default n
help help
Use the processor's MPU to protect applications from accessing Use the processor's MPU to protect applications from accessing
@ -1440,7 +1439,6 @@ config BFIN_CPU_FREQ
config CPU_VOLTAGE config CPU_VOLTAGE
bool "CPU Voltage scaling" bool "CPU Voltage scaling"
depends on EXPERIMENTAL
depends on CPU_FREQ depends on CPU_FREQ
default n default n
help help

View file

@ -680,7 +680,7 @@ config ETRAX_SPI_MMC_BOARD
config SPI_ETRAX_SSER config SPI_ETRAX_SSER
tristate tristate
depends on SPI_MASTER && ETRAX_ARCH_V32 && EXPERIMENTAL depends on SPI_MASTER && ETRAX_ARCH_V32
select SPI_BITBANG select SPI_BITBANG
help help
This enables using an synchronous serial (sser) port as a This enables using an synchronous serial (sser) port as a
@ -689,7 +689,7 @@ config SPI_ETRAX_SSER
config SPI_ETRAX_GPIO config SPI_ETRAX_GPIO
tristate tristate
depends on SPI_MASTER && ETRAX_ARCH_V32 && EXPERIMENTAL depends on SPI_MASTER && ETRAX_ARCH_V32
select SPI_BITBANG select SPI_BITBANG
help help
This enables using GPIO pins port as a SPI master controller This enables using GPIO pins port as a SPI master controller

View file

@ -374,8 +374,8 @@ config NR_CPUS
performance hit. performance hit.
config HOTPLUG_CPU config HOTPLUG_CPU
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" bool "Support for hot-pluggable CPUs"
depends on SMP && EXPERIMENTAL depends on SMP
select HOTPLUG select HOTPLUG
default n default n
---help--- ---help---
@ -554,8 +554,8 @@ config IA64_HP_AML_NFW
source "drivers/sn/Kconfig" source "drivers/sn/Kconfig"
config KEXEC config KEXEC
bool "kexec system call (EXPERIMENTAL)" bool "kexec system call"
depends on EXPERIMENTAL && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU) depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
help help
kexec is a system call that implements the ability to shutdown your kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot current kernel, and to start another kernel. It is like a reboot

View file

@ -20,7 +20,7 @@ if VIRTUALIZATION
config KVM config KVM
tristate "Kernel-based Virtual Machine (KVM) support" tristate "Kernel-based Virtual Machine (KVM) support"
depends on BROKEN depends on BROKEN
depends on HAVE_KVM && MODULES && EXPERIMENTAL depends on HAVE_KVM && MODULES
# for device assignment: # for device assignment:
depends on PCI depends on PCI
depends on BROKEN depends on BROKEN

View file

@ -5,7 +5,7 @@
config XEN config XEN
bool "Xen hypervisor support" bool "Xen hypervisor support"
default y default y
depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB && EXPERIMENTAL depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB
select XEN_XENCOMM select XEN_XENCOMM
select NO_IDLE_HZ select NO_IDLE_HZ
# followings are required to save/restore. # followings are required to save/restore.

View file

@ -20,7 +20,7 @@ endchoice
config SELFMOD config SELFMOD
bool "Use self modified code for intc/timer" bool "Use self modified code for intc/timer"
depends on EXPERIMENTAL && NO_MMU depends on NO_MMU
default n default n
help help
This choice enables self-modified code for interrupt controller This choice enables self-modified code for interrupt controller

View file

@ -169,7 +169,7 @@ config MACH_DECSTATION
select SYS_HAS_CPU_R3000 select SYS_HAS_CPU_R3000
select SYS_HAS_CPU_R4X00 select SYS_HAS_CPU_R4X00
select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_32BIT_KERNEL
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL select SYS_SUPPORTS_64BIT_KERNEL
select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN
select SYS_SUPPORTS_128HZ select SYS_SUPPORTS_128HZ
select SYS_SUPPORTS_256HZ select SYS_SUPPORTS_256HZ
@ -205,7 +205,7 @@ config MACH_JAZZ
select ISA select ISA
select SYS_HAS_CPU_R4X00 select SYS_HAS_CPU_R4X00
select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_32BIT_KERNEL
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL select SYS_SUPPORTS_64BIT_KERNEL
select SYS_SUPPORTS_100HZ select SYS_SUPPORTS_100HZ
help help
This a family of machines based on the MIPS R4030 chipset which was This a family of machines based on the MIPS R4030 chipset which was
@ -395,7 +395,6 @@ config PNX8550_STB810
config PMC_MSP config PMC_MSP
bool "PMC-Sierra MSP chipsets" bool "PMC-Sierra MSP chipsets"
depends on EXPERIMENTAL
select CEVT_R4K select CEVT_R4K
select CSRC_R4K select CSRC_R4K
select DMA_NONCOHERENT select DMA_NONCOHERENT
@ -494,8 +493,7 @@ config SGI_IP27
here. here.
config SGI_IP28 config SGI_IP28
bool "SGI IP28 (Indigo2 R10k) (EXPERIMENTAL)" bool "SGI IP28 (Indigo2 R10k)"
depends on EXPERIMENTAL
select FW_ARC select FW_ARC
select FW_ARC64 select FW_ARC64
select BOOT_ELF64 select BOOT_ELF64
@ -553,7 +551,6 @@ config SGI_IP32
config SIBYTE_CRHINE config SIBYTE_CRHINE
bool "Sibyte BCM91120C-CRhine" bool "Sibyte BCM91120C-CRhine"
depends on EXPERIMENTAL
select BOOT_ELF32 select BOOT_ELF32
select DMA_COHERENT select DMA_COHERENT
select SIBYTE_BCM1120 select SIBYTE_BCM1120
@ -564,7 +561,6 @@ config SIBYTE_CRHINE
config SIBYTE_CARMEL config SIBYTE_CARMEL
bool "Sibyte BCM91120x-Carmel" bool "Sibyte BCM91120x-Carmel"
depends on EXPERIMENTAL
select BOOT_ELF32 select BOOT_ELF32
select DMA_COHERENT select DMA_COHERENT
select SIBYTE_BCM1120 select SIBYTE_BCM1120
@ -575,7 +571,6 @@ config SIBYTE_CARMEL
config SIBYTE_CRHONE config SIBYTE_CRHONE
bool "Sibyte BCM91125C-CRhone" bool "Sibyte BCM91125C-CRhone"
depends on EXPERIMENTAL
select BOOT_ELF32 select BOOT_ELF32
select DMA_COHERENT select DMA_COHERENT
select SIBYTE_BCM1125 select SIBYTE_BCM1125
@ -587,7 +582,6 @@ config SIBYTE_CRHONE
config SIBYTE_RHONE config SIBYTE_RHONE
bool "Sibyte BCM91125E-Rhone" bool "Sibyte BCM91125E-Rhone"
depends on EXPERIMENTAL
select BOOT_ELF32 select BOOT_ELF32
select DMA_COHERENT select DMA_COHERENT
select SIBYTE_BCM1125H select SIBYTE_BCM1125H
@ -612,7 +606,6 @@ config SIBYTE_SWARM
config SIBYTE_LITTLESUR config SIBYTE_LITTLESUR
bool "Sibyte BCM91250C2-LittleSur" bool "Sibyte BCM91250C2-LittleSur"
depends on EXPERIMENTAL
select BOOT_ELF32 select BOOT_ELF32
select DMA_COHERENT select DMA_COHERENT
select HAVE_PATA_PLATFORM select HAVE_PATA_PLATFORM
@ -626,7 +619,6 @@ config SIBYTE_LITTLESUR
config SIBYTE_SENTOSA config SIBYTE_SENTOSA
bool "Sibyte BCM91250E-Sentosa" bool "Sibyte BCM91250E-Sentosa"
depends on EXPERIMENTAL
select BOOT_ELF32 select BOOT_ELF32
select DMA_COHERENT select DMA_COHERENT
select NR_CPUS_DEFAULT_2 select NR_CPUS_DEFAULT_2
@ -675,7 +667,7 @@ config SNI_RM
select R5000_CPU_SCACHE select R5000_CPU_SCACHE
select SYS_HAS_EARLY_PRINTK select SYS_HAS_EARLY_PRINTK
select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_32BIT_KERNEL
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL select SYS_SUPPORTS_64BIT_KERNEL
select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_BIG_ENDIAN
select SYS_SUPPORTS_HIGHMEM select SYS_SUPPORTS_HIGHMEM
select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN
@ -779,7 +771,6 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
config NLM_XLR_BOARD config NLM_XLR_BOARD
bool "Netlogic XLR/XLS based systems" bool "Netlogic XLR/XLS based systems"
depends on EXPERIMENTAL
select BOOT_ELF32 select BOOT_ELF32
select NLM_COMMON select NLM_COMMON
select SYS_HAS_CPU_XLR select SYS_HAS_CPU_XLR
@ -808,7 +799,6 @@ config NLM_XLR_BOARD
config NLM_XLP_BOARD config NLM_XLP_BOARD
bool "Netlogic XLP based systems" bool "Netlogic XLP based systems"
depends on EXPERIMENTAL
select BOOT_ELF32 select BOOT_ELF32
select NLM_COMMON select NLM_COMMON
select SYS_HAS_CPU_XLP select SYS_HAS_CPU_XLP
@ -1374,7 +1364,6 @@ config CPU_R5500
config CPU_R6000 config CPU_R6000
bool "R6000" bool "R6000"
depends on EXPERIMENTAL
depends on SYS_HAS_CPU_R6000 depends on SYS_HAS_CPU_R6000
select CPU_SUPPORTS_32BIT_KERNEL select CPU_SUPPORTS_32BIT_KERNEL
help help
@ -1392,7 +1381,6 @@ config CPU_NEVADA
config CPU_R8000 config CPU_R8000
bool "R8000" bool "R8000"
depends on EXPERIMENTAL
depends on SYS_HAS_CPU_R8000 depends on SYS_HAS_CPU_R8000
select CPU_HAS_PREFETCH select CPU_HAS_PREFETCH
select CPU_SUPPORTS_64BIT_KERNEL select CPU_SUPPORTS_64BIT_KERNEL
@ -1767,7 +1755,7 @@ config PAGE_SIZE_4KB
config PAGE_SIZE_8KB config PAGE_SIZE_8KB
bool "8kB" bool "8kB"
depends on (EXPERIMENTAL && CPU_R8000) || CPU_CAVIUM_OCTEON depends on CPU_R8000 || CPU_CAVIUM_OCTEON
help help
Using 8kB page size will result in higher performance kernel at Using 8kB page size will result in higher performance kernel at
the price of higher memory consumption. This option is available the price of higher memory consumption. This option is available
@ -1794,7 +1782,7 @@ config PAGE_SIZE_32KB
config PAGE_SIZE_64KB config PAGE_SIZE_64KB
bool "64kB" bool "64kB"
depends on EXPERIMENTAL && !CPU_R3000 && !CPU_TX39XX depends on !CPU_R3000 && !CPU_TX39XX
help help
Using 64kB page size will result in higher performance kernel at Using 64kB page size will result in higher performance kernel at
the price of higher memory consumption. This option is available on the price of higher memory consumption. This option is available on
@ -2310,8 +2298,7 @@ config HZ
source "kernel/Kconfig.preempt" source "kernel/Kconfig.preempt"
config KEXEC config KEXEC
bool "Kexec system call (EXPERIMENTAL)" bool "Kexec system call"
depends on EXPERIMENTAL
help help
kexec is a system call that implements the ability to shutdown your kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot current kernel, and to start another kernel. It is like a reboot

View file

@ -1,6 +1,6 @@
config ACER_PICA_61 config ACER_PICA_61
bool "Support for Acer PICA 1 chipset (EXPERIMENTAL)" bool "Support for Acer PICA 1 chipset"
depends on MACH_JAZZ && EXPERIMENTAL depends on MACH_JAZZ
select DMA_NONCOHERENT select DMA_NONCOHERENT
select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN
help help
@ -13,7 +13,7 @@ config MIPS_MAGNUM_4000
bool "Support for MIPS Magnum 4000" bool "Support for MIPS Magnum 4000"
depends on MACH_JAZZ depends on MACH_JAZZ
select DMA_NONCOHERENT select DMA_NONCOHERENT
select SYS_SUPPORTS_BIG_ENDIAN if EXPERIMENTAL select SYS_SUPPORTS_BIG_ENDIAN
select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN
help help
This is a machine with a R4000 100 MHz CPU. To compile a Linux This is a machine with a R4000 100 MHz CPU. To compile a Linux

View file

@ -21,6 +21,7 @@
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/err.h>
#include <lantiq_soc.h> #include <lantiq_soc.h>
#include <xway_dma.h> #include <xway_dma.h>
@ -223,8 +224,8 @@ ltq_dma_init(struct platform_device *pdev)
panic("Failed to get dma resource"); panic("Failed to get dma resource");
/* remap dma register range */ /* remap dma register range */
ltq_dma_membase = devm_request_and_ioremap(&pdev->dev, res); ltq_dma_membase = devm_ioremap_resource(&pdev->dev, res);
if (!ltq_dma_membase) if (IS_ERR(ltq_dma_membase))
panic("Failed to remap dma resource"); panic("Failed to remap dma resource");
/* power up and reset the dma engine */ /* power up and reset the dma engine */

View file

@ -150,11 +150,9 @@ static int gptu_probe(struct platform_device *pdev)
} }
/* remap gptu register range */ /* remap gptu register range */
gptu_membase = devm_request_and_ioremap(&pdev->dev, res); gptu_membase = devm_ioremap_resource(&pdev->dev, res);
if (!gptu_membase) { if (IS_ERR(gptu_membase))
dev_err(&pdev->dev, "Failed to remap resource\n"); return PTR_ERR(gptu_membase);
return -ENOMEM;
}
/* enable our clock */ /* enable our clock */
clk = clk_get(&pdev->dev, NULL); clk = clk_get(&pdev->dev, NULL);

View file

@ -214,13 +214,13 @@ static int ltq_pci_probe(struct platform_device *pdev)
return -EINVAL; return -EINVAL;
} }
ltq_pci_membase = devm_request_and_ioremap(&pdev->dev, res_bridge); ltq_pci_membase = devm_ioremap_resource(&pdev->dev, res_bridge);
ltq_pci_mapped_cfg = devm_request_and_ioremap(&pdev->dev, res_cfg); if (IS_ERR(ltq_pci_membase))
return PTR_ERR(ltq_pci_membase);
if (!ltq_pci_membase || !ltq_pci_mapped_cfg) { ltq_pci_mapped_cfg = devm_ioremap_resource(&pdev->dev, res_cfg);
dev_err(&pdev->dev, "failed to remap resources\n"); if (IS_ERR(ltq_pci_mapped_cfg))
return -ENOMEM; return PTR_ERR(ltq_pci_mapped_cfg);
}
ltq_pci_startup(pdev); ltq_pci_startup(pdev);

View file

@ -13,7 +13,6 @@ config SGI_SN_M_MODE
config SGI_SN_N_MODE config SGI_SN_N_MODE
bool "IP27 N-Mode" bool "IP27 N-Mode"
depends on EXPERIMENTAL
help help
The nodes of Origin, Onyx, Fuel and Tezro systems can be configured The nodes of Origin, Onyx, Fuel and Tezro systems can be configured
in either N-Modes which allows for more nodes or M-Mode which allows in either N-Modes which allows for more nodes or M-Mode which allows

View file

@ -192,12 +192,12 @@ config PARISC_PAGE_SIZE_4KB
If you don't know what to do, choose 4KB. If you don't know what to do, choose 4KB.
config PARISC_PAGE_SIZE_16KB config PARISC_PAGE_SIZE_16KB
bool "16KB (EXPERIMENTAL)" bool "16KB"
depends on PA8X00 && EXPERIMENTAL depends on PA8X00
config PARISC_PAGE_SIZE_64KB config PARISC_PAGE_SIZE_64KB
bool "64KB (EXPERIMENTAL)" bool "64KB"
depends on PA8X00 && EXPERIMENTAL depends on PA8X00
endchoice endchoice

View file

@ -332,7 +332,7 @@ config SWIOTLB
config HOTPLUG_CPU config HOTPLUG_CPU
bool "Support for enabling/disabling CPUs" bool "Support for enabling/disabling CPUs"
depends on SMP && HOTPLUG && EXPERIMENTAL && (PPC_PSERIES || \ depends on SMP && HOTPLUG && (PPC_PSERIES || \
PPC_PMAC || PPC_POWERNV || (PPC_85xx && !PPC_E500MC)) PPC_PMAC || PPC_POWERNV || (PPC_85xx && !PPC_E500MC))
---help--- ---help---
Say Y here to be able to disable and re-enable individual Say Y here to be able to disable and re-enable individual
@ -354,8 +354,8 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
def_bool y def_bool y
config KEXEC config KEXEC
bool "kexec system call (EXPERIMENTAL)" bool "kexec system call"
depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) && EXPERIMENTAL depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
help help
kexec is a system call that implements the ability to shutdown your kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot current kernel, and to start another kernel. It is like a reboot
@ -850,8 +850,8 @@ config LOWMEM_CAM_NUM
default 3 default 3
config DYNAMIC_MEMSTART config DYNAMIC_MEMSTART
bool "Enable page aligned dynamic load address for kernel (EXPERIMENTAL)" bool "Enable page aligned dynamic load address for kernel"
depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && (FSL_BOOKE || 44x) depends on ADVANCED_OPTIONS && FLATMEM && (FSL_BOOKE || 44x)
select NONSTATIC_KERNEL select NONSTATIC_KERNEL
help help
This option enables the kernel to be loaded at any page aligned This option enables the kernel to be loaded at any page aligned
@ -868,8 +868,8 @@ config DYNAMIC_MEMSTART
This option is overridden by CONFIG_RELOCATABLE This option is overridden by CONFIG_RELOCATABLE
config RELOCATABLE config RELOCATABLE
bool "Build a relocatable kernel (EXPERIMENTAL)" bool "Build a relocatable kernel"
depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && 44x depends on ADVANCED_OPTIONS && FLATMEM && 44x
select NONSTATIC_KERNEL select NONSTATIC_KERNEL
help help
This builds a kernel image that is capable of running at the This builds a kernel image that is capable of running at the

View file

@ -41,7 +41,7 @@ config KVM_BOOK3S_PR
config KVM_BOOK3S_32 config KVM_BOOK3S_32
tristate "KVM support for PowerPC book3s_32 processors" tristate "KVM support for PowerPC book3s_32 processors"
depends on EXPERIMENTAL && PPC_BOOK3S_32 && !SMP && !PTE_64BIT depends on PPC_BOOK3S_32 && !SMP && !PTE_64BIT
select KVM select KVM
select KVM_BOOK3S_32_HANDLER select KVM_BOOK3S_32_HANDLER
select KVM_BOOK3S_PR select KVM_BOOK3S_PR
@ -56,7 +56,7 @@ config KVM_BOOK3S_32
config KVM_BOOK3S_64 config KVM_BOOK3S_64
tristate "KVM support for PowerPC book3s_64 processors" tristate "KVM support for PowerPC book3s_64 processors"
depends on EXPERIMENTAL && PPC_BOOK3S_64 depends on PPC_BOOK3S_64
select KVM_BOOK3S_64_HANDLER select KVM_BOOK3S_64_HANDLER
select KVM select KVM
---help--- ---help---
@ -97,7 +97,7 @@ config KVM_BOOKE_HV
config KVM_440 config KVM_440
bool "KVM support for PowerPC 440 processors" bool "KVM support for PowerPC 440 processors"
depends on EXPERIMENTAL && 44x depends on 44x
select KVM select KVM
select KVM_MMIO select KVM_MMIO
---help--- ---help---
@ -122,7 +122,7 @@ config KVM_EXIT_TIMING
config KVM_E500V2 config KVM_E500V2
bool "KVM support for PowerPC E500v2 processors" bool "KVM support for PowerPC E500v2 processors"
depends on EXPERIMENTAL && E500 && !PPC_E500MC depends on E500 && !PPC_E500MC
select KVM select KVM
select KVM_MMIO select KVM_MMIO
select MMU_NOTIFIER select MMU_NOTIFIER
@ -137,7 +137,7 @@ config KVM_E500V2
config KVM_E500MC config KVM_E500MC
bool "KVM support for PowerPC E500MC/E5500 processors" bool "KVM support for PowerPC E500MC/E5500 processors"
depends on EXPERIMENTAL && PPC_E500MC depends on PPC_E500MC
select KVM select KVM
select KVM_MMIO select KVM_MMIO
select KVM_BOOKE_HV select KVM_BOOKE_HV

View file

@ -277,7 +277,6 @@ config P5040_DS
config PPC_QEMU_E500 config PPC_QEMU_E500
bool "QEMU generic e500 platform" bool "QEMU generic e500 platform"
depends on EXPERIMENTAL
select DEFAULT_UIMAGE select DEFAULT_UIMAGE
help help
This option enables support for running as a QEMU guest using This option enables support for running as a QEMU guest using

View file

@ -124,7 +124,7 @@ config CBE_CPUFREQ
config CBE_CPUFREQ_PMI_ENABLE config CBE_CPUFREQ_PMI_ENABLE
bool "CBE frequency scaling using PMI interface" bool "CBE frequency scaling using PMI interface"
depends on CBE_CPUFREQ && EXPERIMENTAL depends on CBE_CPUFREQ
default n default n
help help
Select this, if you want to use the PMI interface Select this, if you want to use the PMI interface

View file

@ -48,7 +48,7 @@ config PS3_HTAB_SIZE
system will have optimal runtime performance. system will have optimal runtime performance.
config PS3_DYNAMIC_DMA config PS3_DYNAMIC_DMA
depends on PPC_PS3 && EXPERIMENTAL depends on PPC_PS3
bool "PS3 Platform dynamic DMA page table management" bool "PS3 Platform dynamic DMA page table management"
default n default n
help help

View file

@ -717,8 +717,8 @@ source "arch/s390/kvm/Kconfig"
config S390_GUEST config S390_GUEST
def_bool y def_bool y
prompt "s390 support for virtio devices (EXPERIMENTAL)" prompt "s390 support for virtio devices"
depends on 64BIT && EXPERIMENTAL depends on 64BIT
select VIRTUALIZATION select VIRTUALIZATION
select VIRTIO select VIRTIO
select VIRTIO_CONSOLE select VIRTIO_CONSOLE

View file

@ -18,7 +18,7 @@ if VIRTUALIZATION
config KVM config KVM
def_tristate y def_tristate y
prompt "Kernel-based Virtual Machine (KVM) support" prompt "Kernel-based Virtual Machine (KVM) support"
depends on HAVE_KVM && EXPERIMENTAL depends on HAVE_KVM
select PREEMPT_NOTIFIERS select PREEMPT_NOTIFIERS
select ANON_INODES select ANON_INODES
select HAVE_KVM_CPU_RELAX_INTERCEPT select HAVE_KVM_CPU_RELAX_INTERCEPT

View file

@ -644,7 +644,7 @@ source kernel/Kconfig.hz
config KEXEC config KEXEC
bool "kexec system call (EXPERIMENTAL)" bool "kexec system call (EXPERIMENTAL)"
depends on SUPERH32 && EXPERIMENTAL && MMU depends on SUPERH32 && MMU
help help
kexec is a system call that implements the ability to shutdown your kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot current kernel, and to start another kernel. It is like a reboot
@ -661,7 +661,7 @@ config KEXEC
config CRASH_DUMP config CRASH_DUMP
bool "kernel crash dumps (EXPERIMENTAL)" bool "kernel crash dumps (EXPERIMENTAL)"
depends on SUPERH32 && EXPERIMENTAL && BROKEN_ON_SMP depends on SUPERH32 && BROKEN_ON_SMP
help help
Generate crash dump after being started by kexec. Generate crash dump after being started by kexec.
This should be normally only set in special crash dump kernels This should be normally only set in special crash dump kernels
@ -675,7 +675,7 @@ config CRASH_DUMP
config KEXEC_JUMP config KEXEC_JUMP
bool "kexec jump (EXPERIMENTAL)" bool "kexec jump (EXPERIMENTAL)"
depends on SUPERH32 && KEXEC && HIBERNATION && EXPERIMENTAL depends on SUPERH32 && KEXEC && HIBERNATION
help help
Jump between original kernel and kexeced kernel and invoke Jump between original kernel and kexeced kernel and invoke
code via KEXEC code via KEXEC
@ -709,7 +709,7 @@ config SECCOMP
config CC_STACKPROTECTOR config CC_STACKPROTECTOR
bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)" bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
depends on SUPERH32 && EXPERIMENTAL depends on SUPERH32
help help
This option turns on the -fstack-protector GCC feature. This This option turns on the -fstack-protector GCC feature. This
feature puts, at the beginning of functions, a canary value on feature puts, at the beginning of functions, a canary value on
@ -760,7 +760,7 @@ config NR_CPUS
config HOTPLUG_CPU config HOTPLUG_CPU
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
depends on SMP && HOTPLUG && EXPERIMENTAL depends on SMP && HOTPLUG
help help
Say Y here to experiment with turning CPUs off and on. CPUs Say Y here to experiment with turning CPUs off and on. CPUs
can be controlled through /sys/devices/system/cpu. can be controlled through /sys/devices/system/cpu.
@ -839,7 +839,7 @@ config ENTRY_OFFSET
config ROMIMAGE_MMCIF config ROMIMAGE_MMCIF
bool "Include MMCIF loader in romImage (EXPERIMENTAL)" bool "Include MMCIF loader in romImage (EXPERIMENTAL)"
depends on CPU_SUBTYPE_SH7724 && EXPERIMENTAL depends on CPU_SUBTYPE_SH7724
help help
Say Y here to include experimental MMCIF loading code in Say Y here to include experimental MMCIF loading code in
romImage. With this enabled it is possible to write the romImage romImage. With this enabled it is possible to write the romImage
@ -925,7 +925,6 @@ source "fs/Kconfig.binfmt"
endmenu endmenu
menu "Power management options (EXPERIMENTAL)" menu "Power management options (EXPERIMENTAL)"
depends on EXPERIMENTAL
source "kernel/power/Kconfig" source "kernel/power/Kconfig"

View file

@ -33,7 +33,7 @@ config SH64_FPU_DENORM_FLUSH
config SH_FPU_EMU config SH_FPU_EMU
def_bool n def_bool n
prompt "FPU emulation support" prompt "FPU emulation support"
depends on !SH_FPU && EXPERIMENTAL depends on !SH_FPU
help help
Selecting this option will enable support for software FPU emulation. Selecting this option will enable support for software FPU emulation.
Most SH-3 users will want to say Y here, whereas most SH-4 users will Most SH-3 users will want to say Y here, whereas most SH-4 users will
@ -68,7 +68,6 @@ config SH_STORE_QUEUES
config SPECULATIVE_EXECUTION config SPECULATIVE_EXECUTION
bool "Speculative subroutine return" bool "Speculative subroutine return"
depends on EXPERIMENTAL
depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 || CPU_SUBTYPE_SH7786 depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 || CPU_SUBTYPE_SH7786
help help
This enables support for a speculative instruction fetch for This enables support for a speculative instruction fetch for

View file

@ -83,7 +83,7 @@ config 32BIT
config PMB config PMB
bool "Support 32-bit physical addressing through PMB" bool "Support 32-bit physical addressing through PMB"
depends on MMU && EXPERIMENTAL && CPU_SH4A && !CPU_SH4AL_DSP depends on MMU && CPU_SH4A && !CPU_SH4AL_DSP
select 32BIT select 32BIT
select UNCACHED_MAPPING select UNCACHED_MAPPING
help help
@ -110,7 +110,7 @@ config VSYSCALL
config NUMA config NUMA
bool "Non Uniform Memory Access (NUMA) Support" bool "Non Uniform Memory Access (NUMA) Support"
depends on MMU && SYS_SUPPORTS_NUMA && EXPERIMENTAL depends on MMU && SYS_SUPPORTS_NUMA
select ARCH_WANT_NUMA_VARIABLE_LOCALITY select ARCH_WANT_NUMA_VARIABLE_LOCALITY
default n default n
help help

View file

@ -18,7 +18,7 @@ if VIRTUALIZATION
config KVM config KVM
tristate "Kernel-based Virtual Machine (KVM) support" tristate "Kernel-based Virtual Machine (KVM) support"
depends on HAVE_KVM && MODULES && EXPERIMENTAL depends on HAVE_KVM && MODULES
select PREEMPT_NOTIFIERS select PREEMPT_NOTIFIERS
select ANON_INODES select ANON_INODES
---help--- ---help---

View file

@ -157,7 +157,7 @@ config UML_NET_MCAST
config UML_NET_PCAP config UML_NET_PCAP
bool "pcap transport" bool "pcap transport"
depends on UML_NET && EXPERIMENTAL depends on UML_NET
help help
The pcap transport makes a pcap packet stream on the host look The pcap transport makes a pcap packet stream on the host look
like an ethernet device inside UML. This is useful for making like an ethernet device inside UML. This is useful for making

View file

@ -45,8 +45,8 @@ config HOSTFS
say Y or M here; otherwise say N. say Y or M here; otherwise say N.
config HPPFS config HPPFS
tristate "HoneyPot ProcFS (EXPERIMENTAL)" tristate "HoneyPot ProcFS"
depends on EXPERIMENTAL && PROC_FS depends on PROC_FS
help help
hppfs (HoneyPot ProcFS) is a filesystem which allows UML /proc hppfs (HoneyPot ProcFS) is a filesystem which allows UML /proc
entries to be overridden, removed, or fabricated from the host. entries to be overridden, removed, or fabricated from the host.
@ -96,7 +96,7 @@ config MAGIC_SYSRQ
unless you really know what this hack does. unless you really know what this hack does.
config SMP config SMP
bool "Symmetric multi-processing support (EXPERIMENTAL)" bool "Symmetric multi-processing support"
default n default n
depends on BROKEN depends on BROKEN
help help
@ -126,7 +126,7 @@ config NR_CPUS
default "32" default "32"
config HIGHMEM config HIGHMEM
bool "Highmem support (EXPERIMENTAL)" bool "Highmem support"
depends on !64BIT && BROKEN depends on !64BIT && BROKEN
default n default n
help help

View file

@ -225,7 +225,7 @@ config ARCH_SUPPORTS_DEBUG_PAGEALLOC
config HAVE_INTEL_TXT config HAVE_INTEL_TXT
def_bool y def_bool y
depends on EXPERIMENTAL && INTEL_IOMMU && ACPI depends on INTEL_IOMMU && ACPI
config X86_32_SMP config X86_32_SMP
def_bool y def_bool y
@ -642,7 +642,7 @@ config PARAVIRT
config PARAVIRT_SPINLOCKS config PARAVIRT_SPINLOCKS
bool "Paravirtualization layer for spinlocks" bool "Paravirtualization layer for spinlocks"
depends on PARAVIRT && SMP && EXPERIMENTAL depends on PARAVIRT && SMP
---help--- ---help---
Paravirtualized spinlocks allow a pvops backend to replace the Paravirtualized spinlocks allow a pvops backend to replace the
spinlock implementation with something virtualization-friendly spinlock implementation with something virtualization-friendly
@ -754,7 +754,7 @@ config GART_IOMMU
config CALGARY_IOMMU config CALGARY_IOMMU
bool "IBM Calgary IOMMU support" bool "IBM Calgary IOMMU support"
select SWIOTLB select SWIOTLB
depends on X86_64 && PCI && EXPERIMENTAL depends on X86_64 && PCI
---help--- ---help---
Support for hardware IOMMUs in IBM's xSeries x366 and x460 Support for hardware IOMMUs in IBM's xSeries x366 and x460
systems. Needed to run systems with more than 3GB of memory systems. Needed to run systems with more than 3GB of memory
@ -796,7 +796,7 @@ config IOMMU_HELPER
config MAXSMP config MAXSMP
bool "Enable Maximum number of SMP Processors and NUMA Nodes" bool "Enable Maximum number of SMP Processors and NUMA Nodes"
depends on X86_64 && SMP && DEBUG_KERNEL && EXPERIMENTAL depends on X86_64 && SMP && DEBUG_KERNEL
select CPUMASK_OFFSTACK select CPUMASK_OFFSTACK
---help--- ---help---
Enable maximum number of CPUS and NUMA Nodes for this architecture. Enable maximum number of CPUS and NUMA Nodes for this architecture.
@ -1132,7 +1132,6 @@ config HIGHMEM64G
endchoice endchoice
choice choice
depends on EXPERIMENTAL
prompt "Memory split" if EXPERT prompt "Memory split" if EXPERT
default VMSPLIT_3G default VMSPLIT_3G
depends on X86_32 depends on X86_32
@ -1209,7 +1208,7 @@ config DIRECT_GBPAGES
config NUMA config NUMA
bool "Numa Memory Allocation and Scheduler Support" bool "Numa Memory Allocation and Scheduler Support"
depends on SMP depends on SMP
depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || X86_BIGSMP || X86_SUMMIT && ACPI) && EXPERIMENTAL) depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || X86_BIGSMP || X86_SUMMIT && ACPI))
default y if (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP) default y if (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP)
---help--- ---help---
Enable NUMA (Non Uniform Memory Access) support. Enable NUMA (Non Uniform Memory Access) support.
@ -1304,7 +1303,7 @@ config ARCH_DISCONTIGMEM_DEFAULT
config ARCH_SPARSEMEM_ENABLE config ARCH_SPARSEMEM_ENABLE
def_bool y def_bool y
depends on X86_64 || NUMA || (EXPERIMENTAL && X86_32) || X86_32_NON_STANDARD depends on X86_64 || NUMA || X86_32 || X86_32_NON_STANDARD
select SPARSEMEM_STATIC if X86_32 select SPARSEMEM_STATIC if X86_32
select SPARSEMEM_VMEMMAP_ENABLE if X86_64 select SPARSEMEM_VMEMMAP_ENABLE if X86_64
@ -1618,8 +1617,7 @@ config CRASH_DUMP
For more details see Documentation/kdump/kdump.txt For more details see Documentation/kdump/kdump.txt
config KEXEC_JUMP config KEXEC_JUMP
bool "kexec jump (EXPERIMENTAL)" bool "kexec jump"
depends on EXPERIMENTAL
depends on KEXEC && HIBERNATION depends on KEXEC && HIBERNATION
---help--- ---help---
Jump between original kernel and kexeced kernel and invoke Jump between original kernel and kexeced kernel and invoke
@ -2063,7 +2061,7 @@ config PCI_MMCONFIG
config PCI_CNB20LE_QUIRK config PCI_CNB20LE_QUIRK
bool "Read CNB20LE Host Bridge Windows" if EXPERT bool "Read CNB20LE Host Bridge Windows" if EXPERT
depends on PCI && EXPERIMENTAL depends on PCI
help help
Read the PCI windows out of the CNB20LE host bridge. This allows Read the PCI windows out of the CNB20LE host bridge. This allows
PCI hotplug to work on systems with the CNB20LE chipset which do PCI hotplug to work on systems with the CNB20LE chipset which do
@ -2267,8 +2265,8 @@ config IA32_AOUT
Support old a.out binaries in the 32bit emulation. Support old a.out binaries in the 32bit emulation.
config X86_X32 config X86_X32
bool "x32 ABI for 64-bit mode (EXPERIMENTAL)" bool "x32 ABI for 64-bit mode"
depends on X86_64 && IA32_EMULATION && EXPERIMENTAL depends on X86_64 && IA32_EMULATION
---help--- ---help---
Include code to run binaries for the x32 native 32-bit ABI Include code to run binaries for the x32 native 32-bit ABI
for 64-bit processors. An x32 process gets access to the for 64-bit processors. An x32 process gets access to the

View file

@ -37,9 +37,8 @@ config RWSEM_GENERIC_SPINLOCK
def_bool !RWSEM_XCHGADD_ALGORITHM def_bool !RWSEM_XCHGADD_ALGORITHM
config 3_LEVEL_PGTABLES config 3_LEVEL_PGTABLES
bool "Three-level pagetables (EXPERIMENTAL)" if !64BIT bool "Three-level pagetables" if !64BIT
default 64BIT default 64BIT
depends on EXPERIMENTAL
help help
Three-level pagetables will let UML have more than 4G of physical Three-level pagetables will let UML have more than 4G of physical
memory. All the memory that can't be mapped directly will be treated memory. All the memory that can't be mapped directly will be treated

View file

@ -134,8 +134,8 @@ config CRYPTO_NULL
These are 'Null' algorithms, used by IPsec, which do nothing. These are 'Null' algorithms, used by IPsec, which do nothing.
config CRYPTO_PCRYPT config CRYPTO_PCRYPT
tristate "Parallel crypto engine (EXPERIMENTAL)" tristate "Parallel crypto engine"
depends on SMP && EXPERIMENTAL depends on SMP
select PADATA select PADATA
select CRYPTO_MANAGER select CRYPTO_MANAGER
select CRYPTO_AEAD select CRYPTO_AEAD
@ -292,7 +292,6 @@ config CRYPTO_HMAC
config CRYPTO_XCBC config CRYPTO_XCBC
tristate "XCBC support" tristate "XCBC support"
depends on EXPERIMENTAL
select CRYPTO_HASH select CRYPTO_HASH
select CRYPTO_MANAGER select CRYPTO_MANAGER
help help
@ -303,7 +302,6 @@ config CRYPTO_XCBC
config CRYPTO_VMAC config CRYPTO_VMAC
tristate "VMAC support" tristate "VMAC support"
depends on EXPERIMENTAL
select CRYPTO_HASH select CRYPTO_HASH
select CRYPTO_MANAGER select CRYPTO_MANAGER
help help
@ -932,8 +930,7 @@ config CRYPTO_KHAZAD
<http://www.larc.usp.br/~pbarreto/KhazadPage.html> <http://www.larc.usp.br/~pbarreto/KhazadPage.html>
config CRYPTO_SALSA20 config CRYPTO_SALSA20
tristate "Salsa20 stream cipher algorithm (EXPERIMENTAL)" tristate "Salsa20 stream cipher algorithm"
depends on EXPERIMENTAL
select CRYPTO_BLKCIPHER select CRYPTO_BLKCIPHER
help help
Salsa20 stream cipher algorithm. Salsa20 stream cipher algorithm.
@ -945,9 +942,8 @@ config CRYPTO_SALSA20
Bernstein <djb@cr.yp.to>. See <http://cr.yp.to/snuffle.html> Bernstein <djb@cr.yp.to>. See <http://cr.yp.to/snuffle.html>
config CRYPTO_SALSA20_586 config CRYPTO_SALSA20_586
tristate "Salsa20 stream cipher algorithm (i586) (EXPERIMENTAL)" tristate "Salsa20 stream cipher algorithm (i586)"
depends on (X86 || UML_X86) && !64BIT depends on (X86 || UML_X86) && !64BIT
depends on EXPERIMENTAL
select CRYPTO_BLKCIPHER select CRYPTO_BLKCIPHER
help help
Salsa20 stream cipher algorithm. Salsa20 stream cipher algorithm.
@ -959,9 +955,8 @@ config CRYPTO_SALSA20_586
Bernstein <djb@cr.yp.to>. See <http://cr.yp.to/snuffle.html> Bernstein <djb@cr.yp.to>. See <http://cr.yp.to/snuffle.html>
config CRYPTO_SALSA20_X86_64 config CRYPTO_SALSA20_X86_64
tristate "Salsa20 stream cipher algorithm (x86_64) (EXPERIMENTAL)" tristate "Salsa20 stream cipher algorithm (x86_64)"
depends on (X86 || UML_X86) && 64BIT depends on (X86 || UML_X86) && 64BIT
depends on EXPERIMENTAL
select CRYPTO_BLKCIPHER select CRYPTO_BLKCIPHER
help help
Salsa20 stream cipher algorithm. Salsa20 stream cipher algorithm.

View file

@ -176,7 +176,6 @@ config ACPI_FAN
config ACPI_DOCK config ACPI_DOCK
bool "Dock" bool "Dock"
depends on EXPERIMENTAL
help help
This driver supports ACPI-controlled docking stations and removable This driver supports ACPI-controlled docking stations and removable
drive bays such as the IBM Ultrabay and the Dell Module Bay. drive bays such as the IBM Ultrabay and the Dell Module Bay.
@ -202,7 +201,7 @@ config ACPI_PROCESSOR
the module will be called processor. the module will be called processor.
config ACPI_IPMI config ACPI_IPMI
tristate "IPMI" tristate "IPMI"
depends on EXPERIMENTAL && IPMI_SI && IPMI_HANDLER depends on IPMI_SI && IPMI_HANDLER
default n default n
help help
This driver enables the ACPI to access the BMC controller. And it This driver enables the ACPI to access the BMC controller. And it
@ -214,14 +213,13 @@ config ACPI_IPMI
config ACPI_HOTPLUG_CPU config ACPI_HOTPLUG_CPU
bool bool
depends on EXPERIMENTAL && ACPI_PROCESSOR && HOTPLUG_CPU depends on ACPI_PROCESSOR && HOTPLUG_CPU
select ACPI_CONTAINER select ACPI_CONTAINER
default y default y
config ACPI_PROCESSOR_AGGREGATOR config ACPI_PROCESSOR_AGGREGATOR
tristate "Processor Aggregator" tristate "Processor Aggregator"
depends on ACPI_PROCESSOR depends on ACPI_PROCESSOR
depends on EXPERIMENTAL
depends on X86 depends on X86
help help
ACPI 4.0 defines processor Aggregator, which enables OS to perform ACPI 4.0 defines processor Aggregator, which enables OS to perform
@ -337,8 +335,7 @@ config X86_PM_TIMER
systems require this timer. systems require this timer.
config ACPI_CONTAINER config ACPI_CONTAINER
bool "Container and Module Devices (EXPERIMENTAL)" bool "Container and Module Devices"
depends on EXPERIMENTAL
default (ACPI_HOTPLUG_MEMORY || ACPI_HOTPLUG_CPU || ACPI_HOTPLUG_IO) default (ACPI_HOTPLUG_MEMORY || ACPI_HOTPLUG_CPU || ACPI_HOTPLUG_IO)
help help
This driver supports ACPI Container and Module devices (IDs This driver supports ACPI Container and Module devices (IDs

View file

@ -20,6 +20,7 @@
* *
*/ */
#include <linux/err.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
@ -257,9 +258,9 @@ static int tegra_ahb_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) if (!res)
return -ENODEV; return -ENODEV;
ahb->regs = devm_request_and_ioremap(&pdev->dev, res); ahb->regs = devm_ioremap_resource(&pdev->dev, res);
if (!ahb->regs) if (IS_ERR(ahb->regs))
return -EBUSY; return PTR_ERR(ahb->regs);
ahb->dev = &pdev->dev; ahb->dev = &pdev->dev;
platform_set_drvdata(pdev, ahb); platform_set_drvdata(pdev, ahb);

View file

@ -163,7 +163,7 @@ config SATA_QSTOR
config SATA_SX4 config SATA_SX4
tristate "Promise SATA SX4 support (Experimental)" tristate "Promise SATA SX4 support (Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables support for Promise Serial ATA SX4. This option enables support for Promise Serial ATA SX4.
@ -390,7 +390,7 @@ config PATA_CS5530
config PATA_CS5535 config PATA_CS5535
tristate "CS5535 PATA support (Experimental)" tristate "CS5535 PATA support (Experimental)"
depends on PCI && X86 && !X86_64 && EXPERIMENTAL depends on PCI && X86 && !X86_64
help help
This option enables support for the NatSemi/AMD CS5535 This option enables support for the NatSemi/AMD CS5535
companion chip used with the Geode processor family. companion chip used with the Geode processor family.
@ -408,7 +408,7 @@ config PATA_CS5536
config PATA_CYPRESS config PATA_CYPRESS
tristate "Cypress CY82C693 PATA support (Very Experimental)" tristate "Cypress CY82C693 PATA support (Very Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables support for the Cypress/Contaq CY82C693 This option enables support for the Cypress/Contaq CY82C693
chipset found in some Alpha systems chipset found in some Alpha systems
@ -496,7 +496,7 @@ config PATA_IMX
config PATA_IT8213 config PATA_IT8213
tristate "IT8213 PATA support (Experimental)" tristate "IT8213 PATA support (Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables support for the ITE 821 PATA This option enables support for the ITE 821 PATA
controllers via the new ATA layer. controllers via the new ATA layer.
@ -589,7 +589,7 @@ config PATA_OLDPIIX
config PATA_OPTIDMA config PATA_OPTIDMA
tristate "OPTI FireStar PATA support (Very Experimental)" tristate "OPTI FireStar PATA support (Very Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables DMA/PIO support for the later OPTi This option enables DMA/PIO support for the later OPTi
controllers found on some old motherboards and in some controllers found on some old motherboards and in some
@ -616,7 +616,7 @@ config PATA_PDC_OLD
config PATA_RADISYS config PATA_RADISYS
tristate "RADISYS 82600 PATA support (Experimental)" tristate "RADISYS 82600 PATA support (Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables support for the RADISYS 82600 This option enables support for the RADISYS 82600
PATA controllers via the new ATA layer PATA controllers via the new ATA layer
@ -687,7 +687,7 @@ config PATA_SIS
config PATA_TOSHIBA config PATA_TOSHIBA
tristate "Toshiba Piccolo support (Experimental)" tristate "Toshiba Piccolo support (Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI
help help
Support for the Toshiba Piccolo controllers. Currently only the Support for the Toshiba Piccolo controllers. Currently only the
primary channel is supported by this driver. primary channel is supported by this driver.
@ -738,7 +738,7 @@ comment "PIO-only SFF controllers"
config PATA_AT32 config PATA_AT32
tristate "Atmel AVR32 PATA support (Experimental)" tristate "Atmel AVR32 PATA support (Experimental)"
depends on AVR32 && PLATFORM_AT32AP && EXPERIMENTAL depends on AVR32 && PLATFORM_AT32AP
help help
This option enables support for the IDE devices on the This option enables support for the IDE devices on the
Atmel AT32AP platform. Atmel AT32AP platform.
@ -755,7 +755,7 @@ config PATA_AT91
config PATA_CMD640_PCI config PATA_CMD640_PCI
tristate "CMD640 PCI PATA support (Experimental)" tristate "CMD640 PCI PATA support (Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables support for the CMD640 PCI IDE This option enables support for the CMD640 PCI IDE
interface chip. Only the primary channel is currently interface chip. Only the primary channel is currently
@ -801,7 +801,7 @@ config PATA_NS87410
config PATA_OPTI config PATA_OPTI
tristate "OPTI621/6215 PATA support (Very Experimental)" tristate "OPTI621/6215 PATA support (Very Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables full PIO support for the early Opti ATA This option enables full PIO support for the early Opti ATA
controllers found on some old motherboards. controllers found on some old motherboards.
@ -881,7 +881,7 @@ config PATA_SAMSUNG_CF
config PATA_WINBOND_VLB config PATA_WINBOND_VLB
tristate "Winbond W83759A VLB PATA support (Experimental)" tristate "Winbond W83759A VLB PATA support (Experimental)"
depends on ISA && EXPERIMENTAL depends on ISA
select PATA_LEGACY select PATA_LEGACY
help help
Support for the Winbond W83759A controller on Vesa Local Bus Support for the Winbond W83759A controller on Vesa Local Bus
@ -909,7 +909,7 @@ config ATA_GENERIC
config PATA_LEGACY config PATA_LEGACY
tristate "Legacy ISA PATA support (Experimental)" tristate "Legacy ISA PATA support (Experimental)"
depends on (ISA || PCI) && EXPERIMENTAL depends on (ISA || PCI)
help help
This option enables support for ISA/VLB/PCI bus legacy PATA This option enables support for ISA/VLB/PCI bus legacy PATA
ports and allows them to be accessed via the new ATA layer. ports and allows them to be accessed via the new ATA layer.

View file

@ -31,6 +31,7 @@
* Copyright (C) 2006 Tower Technologies * Copyright (C) 2006 Tower Technologies
*/ */
#include <linux/err.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
@ -937,9 +938,9 @@ static int ep93xx_pata_probe(struct platform_device *pdev)
goto err_rel_gpio; goto err_rel_gpio;
} }
ide_base = devm_request_and_ioremap(&pdev->dev, mem_res); ide_base = devm_ioremap_resource(&pdev->dev, mem_res);
if (!ide_base) { if (IS_ERR(ide_base)) {
err = -ENXIO; err = PTR_ERR(ide_base);
goto err_rel_gpio; goto err_rel_gpio;
} }

View file

@ -145,6 +145,17 @@ config EXTRA_FIRMWARE_DIR
this option you can point it elsewhere, such as /lib/firmware/ or this option you can point it elsewhere, such as /lib/firmware/ or
some other directory containing the firmware files. some other directory containing the firmware files.
config FW_LOADER_USER_HELPER
bool "Fallback user-helper invocation for firmware loading"
depends on FW_LOADER
default y
help
This option enables / disables the invocation of user-helper
(e.g. udev) for loading firmware files as a fallback after the
direct file loading in kernel fails. The user-mode helper is
no longer required unless you have a special firmware file that
resides in a non-standard path.
config DEBUG_DRIVER config DEBUG_DRIVER
bool "Driver Core verbose debug messages" bool "Driver Core verbose debug messages"
depends on DEBUG_KERNEL depends on DEBUG_KERNEL

View file

@ -290,7 +290,7 @@ int bus_for_each_dev(struct bus_type *bus, struct device *start,
struct device *dev; struct device *dev;
int error = 0; int error = 0;
if (!bus) if (!bus || !bus->p)
return -EINVAL; return -EINVAL;
klist_iter_init_node(&bus->p->klist_devices, &i, klist_iter_init_node(&bus->p->klist_devices, &i,
@ -324,7 +324,7 @@ struct device *bus_find_device(struct bus_type *bus,
struct klist_iter i; struct klist_iter i;
struct device *dev; struct device *dev;
if (!bus) if (!bus || !bus->p)
return NULL; return NULL;
klist_iter_init_node(&bus->p->klist_devices, &i, klist_iter_init_node(&bus->p->klist_devices, &i,
@ -700,12 +700,12 @@ int bus_add_driver(struct device_driver *drv)
if (error) if (error)
goto out_unregister; goto out_unregister;
klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
if (drv->bus->p->drivers_autoprobe) { if (drv->bus->p->drivers_autoprobe) {
error = driver_attach(drv); error = driver_attach(drv);
if (error) if (error)
goto out_unregister; goto out_unregister;
} }
klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
module_add_driver(drv->owner, drv); module_add_driver(drv->owner, drv);
error = driver_create_file(drv, &driver_attr_uevent); error = driver_create_file(drv, &driver_attr_uevent);

View file

@ -420,8 +420,8 @@ EXPORT_SYMBOL_GPL(class_for_each_device);
* code. There's no locking restriction. * code. There's no locking restriction.
*/ */
struct device *class_find_device(struct class *class, struct device *start, struct device *class_find_device(struct class *class, struct device *start,
void *data, const void *data,
int (*match)(struct device *, void *)) int (*match)(struct device *, const void *))
{ {
struct class_dev_iter iter; struct class_dev_iter iter;
struct device *dev; struct device *dev;

View file

@ -1617,9 +1617,9 @@ struct device *device_create(struct class *class, struct device *parent,
} }
EXPORT_SYMBOL_GPL(device_create); EXPORT_SYMBOL_GPL(device_create);
static int __match_devt(struct device *dev, void *data) static int __match_devt(struct device *dev, const void *data)
{ {
dev_t *devt = data; const dev_t *devt = data;
return dev->devt == *devt; return dev->devt == *devt;
} }
@ -1685,8 +1685,6 @@ EXPORT_SYMBOL_GPL(device_destroy);
*/ */
int device_rename(struct device *dev, const char *new_name) int device_rename(struct device *dev, const char *new_name)
{ {
char *old_class_name = NULL;
char *new_class_name = NULL;
char *old_device_name = NULL; char *old_device_name = NULL;
int error; int error;
@ -1717,8 +1715,6 @@ int device_rename(struct device *dev, const char *new_name)
out: out:
put_device(dev); put_device(dev);
kfree(new_class_name);
kfree(old_class_name);
kfree(old_device_name); kfree(old_device_name);
return error; return error;

View file

@ -173,6 +173,8 @@ static int deferred_probe_initcall(void)
driver_deferred_probe_enable = true; driver_deferred_probe_enable = true;
driver_deferred_probe_trigger(); driver_deferred_probe_trigger();
/* Sort as many dependencies as possible before exiting initcalls */
flush_workqueue(deferred_wq);
return 0; return 0;
} }
late_initcall(deferred_probe_initcall); late_initcall(deferred_probe_initcall);

View file

@ -134,15 +134,14 @@ EXPORT_SYMBOL_GPL(dma_buf_export);
*/ */
int dma_buf_fd(struct dma_buf *dmabuf, int flags) int dma_buf_fd(struct dma_buf *dmabuf, int flags)
{ {
int error, fd; int fd;
if (!dmabuf || !dmabuf->file) if (!dmabuf || !dmabuf->file)
return -EINVAL; return -EINVAL;
error = get_unused_fd_flags(flags); fd = get_unused_fd_flags(flags);
if (error < 0) if (fd < 0)
return error; return fd;
fd = error;
fd_install(fd, dmabuf->file); fd_install(fd, dmabuf->file);

View file

@ -88,11 +88,6 @@ enum {
FW_STATUS_ABORT, FW_STATUS_ABORT,
}; };
enum fw_buf_fmt {
VMALLOC_BUF, /* used in direct loading */
PAGE_BUF, /* used in loading via userspace */
};
static int loading_timeout = 60; /* In seconds */ static int loading_timeout = 60; /* In seconds */
static inline long firmware_loading_timeout(void) static inline long firmware_loading_timeout(void)
@ -128,12 +123,14 @@ struct firmware_buf {
struct completion completion; struct completion completion;
struct firmware_cache *fwc; struct firmware_cache *fwc;
unsigned long status; unsigned long status;
enum fw_buf_fmt fmt;
void *data; void *data;
size_t size; size_t size;
#ifdef CONFIG_FW_LOADER_USER_HELPER
bool is_paged_buf;
struct page **pages; struct page **pages;
int nr_pages; int nr_pages;
int page_array_size; int page_array_size;
#endif
char fw_id[]; char fw_id[];
}; };
@ -142,14 +139,6 @@ struct fw_cache_entry {
char name[]; char name[];
}; };
struct firmware_priv {
struct delayed_work timeout_work;
bool nowait;
struct device dev;
struct firmware_buf *buf;
struct firmware *fw;
};
struct fw_name_devm { struct fw_name_devm {
unsigned long magic; unsigned long magic;
char name[]; char name[];
@ -182,7 +171,6 @@ static struct firmware_buf *__allocate_fw_buf(const char *fw_name,
strcpy(buf->fw_id, fw_name); strcpy(buf->fw_id, fw_name);
buf->fwc = fwc; buf->fwc = fwc;
init_completion(&buf->completion); init_completion(&buf->completion);
buf->fmt = VMALLOC_BUF;
pr_debug("%s: fw-%s buf=%p\n", __func__, fw_name, buf); pr_debug("%s: fw-%s buf=%p\n", __func__, fw_name, buf);
@ -240,7 +228,6 @@ static void __fw_free_buf(struct kref *ref)
{ {
struct firmware_buf *buf = to_fwbuf(ref); struct firmware_buf *buf = to_fwbuf(ref);
struct firmware_cache *fwc = buf->fwc; struct firmware_cache *fwc = buf->fwc;
int i;
pr_debug("%s: fw-%s buf=%p data=%p size=%u\n", pr_debug("%s: fw-%s buf=%p data=%p size=%u\n",
__func__, buf->fw_id, buf, buf->data, __func__, buf->fw_id, buf, buf->data,
@ -249,13 +236,15 @@ static void __fw_free_buf(struct kref *ref)
list_del(&buf->list); list_del(&buf->list);
spin_unlock(&fwc->lock); spin_unlock(&fwc->lock);
#ifdef CONFIG_FW_LOADER_USER_HELPER
if (buf->fmt == PAGE_BUF) { if (buf->is_paged_buf) {
int i;
vunmap(buf->data); vunmap(buf->data);
for (i = 0; i < buf->nr_pages; i++) for (i = 0; i < buf->nr_pages; i++)
__free_page(buf->pages[i]); __free_page(buf->pages[i]);
kfree(buf->pages); kfree(buf->pages);
} else } else
#endif
vfree(buf->data); vfree(buf->data);
kfree(buf); kfree(buf);
} }
@ -319,7 +308,8 @@ static bool fw_read_file_contents(struct file *file, struct firmware_buf *fw_buf
return true; return true;
} }
static bool fw_get_filesystem_firmware(struct firmware_buf *buf) static bool fw_get_filesystem_firmware(struct device *device,
struct firmware_buf *buf)
{ {
int i; int i;
bool success = false; bool success = false;
@ -343,9 +333,114 @@ static bool fw_get_filesystem_firmware(struct firmware_buf *buf)
break; break;
} }
__putname(path); __putname(path);
if (success) {
dev_dbg(device, "firmware: direct-loading firmware %s\n",
buf->fw_id);
mutex_lock(&fw_lock);
set_bit(FW_STATUS_DONE, &buf->status);
complete_all(&buf->completion);
mutex_unlock(&fw_lock);
}
return success; return success;
} }
/* firmware holds the ownership of pages */
static void firmware_free_data(const struct firmware *fw)
{
/* Loaded directly? */
if (!fw->priv) {
vfree(fw->data);
return;
}
fw_free_buf(fw->priv);
}
/* store the pages buffer info firmware from buf */
static void fw_set_page_data(struct firmware_buf *buf, struct firmware *fw)
{
fw->priv = buf;
#ifdef CONFIG_FW_LOADER_USER_HELPER
fw->pages = buf->pages;
#endif
fw->size = buf->size;
fw->data = buf->data;
pr_debug("%s: fw-%s buf=%p data=%p size=%u\n",
__func__, buf->fw_id, buf, buf->data,
(unsigned int)buf->size);
}
#ifdef CONFIG_PM_SLEEP
static void fw_name_devm_release(struct device *dev, void *res)
{
struct fw_name_devm *fwn = res;
if (fwn->magic == (unsigned long)&fw_cache)
pr_debug("%s: fw_name-%s devm-%p released\n",
__func__, fwn->name, res);
}
static int fw_devm_match(struct device *dev, void *res,
void *match_data)
{
struct fw_name_devm *fwn = res;
return (fwn->magic == (unsigned long)&fw_cache) &&
!strcmp(fwn->name, match_data);
}
static struct fw_name_devm *fw_find_devm_name(struct device *dev,
const char *name)
{
struct fw_name_devm *fwn;
fwn = devres_find(dev, fw_name_devm_release,
fw_devm_match, (void *)name);
return fwn;
}
/* add firmware name into devres list */
static int fw_add_devm_name(struct device *dev, const char *name)
{
struct fw_name_devm *fwn;
fwn = fw_find_devm_name(dev, name);
if (fwn)
return 1;
fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm) +
strlen(name) + 1, GFP_KERNEL);
if (!fwn)
return -ENOMEM;
fwn->magic = (unsigned long)&fw_cache;
strcpy(fwn->name, name);
devres_add(dev, fwn);
return 0;
}
#else
static int fw_add_devm_name(struct device *dev, const char *name)
{
return 0;
}
#endif
/*
* user-mode helper code
*/
#ifdef CONFIG_FW_LOADER_USER_HELPER
struct firmware_priv {
struct delayed_work timeout_work;
bool nowait;
struct device dev;
struct firmware_buf *buf;
struct firmware *fw;
};
static struct firmware_priv *to_firmware_priv(struct device *dev) static struct firmware_priv *to_firmware_priv(struct device *dev)
{ {
return container_of(dev, struct firmware_priv, dev); return container_of(dev, struct firmware_priv, dev);
@ -359,6 +454,9 @@ static void fw_load_abort(struct firmware_priv *fw_priv)
complete_all(&buf->completion); complete_all(&buf->completion);
} }
#define is_fw_load_aborted(buf) \
test_bit(FW_STATUS_ABORT, &(buf)->status)
static ssize_t firmware_timeout_show(struct class *class, static ssize_t firmware_timeout_show(struct class *class,
struct class_attribute *attr, struct class_attribute *attr,
char *buf) char *buf)
@ -435,17 +533,6 @@ static ssize_t firmware_loading_show(struct device *dev,
return sprintf(buf, "%d\n", loading); return sprintf(buf, "%d\n", loading);
} }
/* firmware holds the ownership of pages */
static void firmware_free_data(const struct firmware *fw)
{
/* Loaded directly? */
if (!fw->priv) {
vfree(fw->data);
return;
}
fw_free_buf(fw->priv);
}
/* Some architectures don't have PAGE_KERNEL_RO */ /* Some architectures don't have PAGE_KERNEL_RO */
#ifndef PAGE_KERNEL_RO #ifndef PAGE_KERNEL_RO
#define PAGE_KERNEL_RO PAGE_KERNEL #define PAGE_KERNEL_RO PAGE_KERNEL
@ -454,7 +541,7 @@ static void firmware_free_data(const struct firmware *fw)
/* one pages buffer should be mapped/unmapped only once */ /* one pages buffer should be mapped/unmapped only once */
static int fw_map_pages_buf(struct firmware_buf *buf) static int fw_map_pages_buf(struct firmware_buf *buf)
{ {
if (buf->fmt != PAGE_BUF) if (!buf->is_paged_buf)
return 0; return 0;
if (buf->data) if (buf->data)
@ -727,171 +814,16 @@ exit:
return fw_priv; return fw_priv;
} }
/* store the pages buffer info firmware from buf */ /* load a firmware via user helper */
static void fw_set_page_data(struct firmware_buf *buf, struct firmware *fw)
{
fw->priv = buf;
fw->pages = buf->pages;
fw->size = buf->size;
fw->data = buf->data;
pr_debug("%s: fw-%s buf=%p data=%p size=%u\n",
__func__, buf->fw_id, buf, buf->data,
(unsigned int)buf->size);
}
#ifdef CONFIG_PM_SLEEP
static void fw_name_devm_release(struct device *dev, void *res)
{
struct fw_name_devm *fwn = res;
if (fwn->magic == (unsigned long)&fw_cache)
pr_debug("%s: fw_name-%s devm-%p released\n",
__func__, fwn->name, res);
}
static int fw_devm_match(struct device *dev, void *res,
void *match_data)
{
struct fw_name_devm *fwn = res;
return (fwn->magic == (unsigned long)&fw_cache) &&
!strcmp(fwn->name, match_data);
}
static struct fw_name_devm *fw_find_devm_name(struct device *dev,
const char *name)
{
struct fw_name_devm *fwn;
fwn = devres_find(dev, fw_name_devm_release,
fw_devm_match, (void *)name);
return fwn;
}
/* add firmware name into devres list */
static int fw_add_devm_name(struct device *dev, const char *name)
{
struct fw_name_devm *fwn;
fwn = fw_find_devm_name(dev, name);
if (fwn)
return 1;
fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm) +
strlen(name) + 1, GFP_KERNEL);
if (!fwn)
return -ENOMEM;
fwn->magic = (unsigned long)&fw_cache;
strcpy(fwn->name, name);
devres_add(dev, fwn);
return 0;
}
#else
static int fw_add_devm_name(struct device *dev, const char *name)
{
return 0;
}
#endif
static void _request_firmware_cleanup(const struct firmware **firmware_p)
{
release_firmware(*firmware_p);
*firmware_p = NULL;
}
static struct firmware_priv *
_request_firmware_prepare(const struct firmware **firmware_p, const char *name,
struct device *device, bool uevent, bool nowait)
{
struct firmware *firmware;
struct firmware_priv *fw_priv = NULL;
struct firmware_buf *buf;
int ret;
if (!firmware_p)
return ERR_PTR(-EINVAL);
*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
if (!firmware) {
dev_err(device, "%s: kmalloc(struct firmware) failed\n",
__func__);
return ERR_PTR(-ENOMEM);
}
if (fw_get_builtin_firmware(firmware, name)) {
dev_dbg(device, "firmware: using built-in firmware %s\n", name);
return NULL;
}
ret = fw_lookup_and_allocate_buf(name, &fw_cache, &buf);
if (!ret)
fw_priv = fw_create_instance(firmware, name, device,
uevent, nowait);
if (IS_ERR(fw_priv) || ret < 0) {
kfree(firmware);
*firmware_p = NULL;
return ERR_PTR(-ENOMEM);
} else if (fw_priv) {
fw_priv->buf = buf;
/*
* bind with 'buf' now to avoid warning in failure path
* of requesting firmware.
*/
firmware->priv = buf;
return fw_priv;
}
/* share the cached buf, which is inprogessing or completed */
check_status:
mutex_lock(&fw_lock);
if (test_bit(FW_STATUS_ABORT, &buf->status)) {
fw_priv = ERR_PTR(-ENOENT);
firmware->priv = buf;
_request_firmware_cleanup(firmware_p);
goto exit;
} else if (test_bit(FW_STATUS_DONE, &buf->status)) {
fw_priv = NULL;
fw_set_page_data(buf, firmware);
goto exit;
}
mutex_unlock(&fw_lock);
wait_for_completion(&buf->completion);
goto check_status;
exit:
mutex_unlock(&fw_lock);
return fw_priv;
}
static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent, static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
long timeout) long timeout)
{ {
int retval = 0; int retval = 0;
struct device *f_dev = &fw_priv->dev; struct device *f_dev = &fw_priv->dev;
struct firmware_buf *buf = fw_priv->buf; struct firmware_buf *buf = fw_priv->buf;
struct firmware_cache *fwc = &fw_cache;
int direct_load = 0;
/* try direct loading from fs first */
if (fw_get_filesystem_firmware(buf)) {
dev_dbg(f_dev->parent, "firmware: direct-loading"
" firmware %s\n", buf->fw_id);
mutex_lock(&fw_lock);
set_bit(FW_STATUS_DONE, &buf->status);
mutex_unlock(&fw_lock);
complete_all(&buf->completion);
direct_load = 1;
goto handle_fw;
}
/* fall back on userspace loading */ /* fall back on userspace loading */
buf->fmt = PAGE_BUF; buf->is_paged_buf = true;
dev_set_uevent_suppress(f_dev, true); dev_set_uevent_suppress(f_dev, true);
@ -929,38 +861,7 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
cancel_delayed_work_sync(&fw_priv->timeout_work); cancel_delayed_work_sync(&fw_priv->timeout_work);
handle_fw:
mutex_lock(&fw_lock);
if (!buf->size || test_bit(FW_STATUS_ABORT, &buf->status))
retval = -ENOENT;
/*
* add firmware name into devres list so that we can auto cache
* and uncache firmware for device.
*
* f_dev->parent may has been deleted already, but the problem
* should be fixed in devres or driver core.
*/
if (!retval && f_dev->parent)
fw_add_devm_name(f_dev->parent, buf->fw_id);
/*
* After caching firmware image is started, let it piggyback
* on request firmware.
*/
if (!retval && fwc->state == FW_LOADER_START_CACHE) {
if (fw_cache_piggyback_on_request(buf->fw_id))
kref_get(&buf->ref);
}
/* pass the pages buffer to driver at the last minute */
fw_set_page_data(buf, fw_priv->fw);
fw_priv->buf = NULL; fw_priv->buf = NULL;
mutex_unlock(&fw_lock);
if (direct_load)
goto err_put_dev;
device_remove_file(f_dev, &dev_attr_loading); device_remove_file(f_dev, &dev_attr_loading);
err_del_bin_attr: err_del_bin_attr:
@ -972,6 +873,186 @@ err_put_dev:
return retval; return retval;
} }
static int fw_load_from_user_helper(struct firmware *firmware,
const char *name, struct device *device,
bool uevent, bool nowait, long timeout)
{
struct firmware_priv *fw_priv;
fw_priv = fw_create_instance(firmware, name, device, uevent, nowait);
if (IS_ERR(fw_priv))
return PTR_ERR(fw_priv);
fw_priv->buf = firmware->priv;
return _request_firmware_load(fw_priv, uevent, timeout);
}
#else /* CONFIG_FW_LOADER_USER_HELPER */
static inline int
fw_load_from_user_helper(struct firmware *firmware, const char *name,
struct device *device, bool uevent, bool nowait,
long timeout)
{
return -ENOENT;
}
/* No abort during direct loading */
#define is_fw_load_aborted(buf) false
#endif /* CONFIG_FW_LOADER_USER_HELPER */
/* wait until the shared firmware_buf becomes ready (or error) */
static int sync_cached_firmware_buf(struct firmware_buf *buf)
{
int ret = 0;
mutex_lock(&fw_lock);
while (!test_bit(FW_STATUS_DONE, &buf->status)) {
if (is_fw_load_aborted(buf)) {
ret = -ENOENT;
break;
}
mutex_unlock(&fw_lock);
wait_for_completion(&buf->completion);
mutex_lock(&fw_lock);
}
mutex_unlock(&fw_lock);
return ret;
}
/* prepare firmware and firmware_buf structs;
* return 0 if a firmware is already assigned, 1 if need to load one,
* or a negative error code
*/
static int
_request_firmware_prepare(struct firmware **firmware_p, const char *name,
struct device *device)
{
struct firmware *firmware;
struct firmware_buf *buf;
int ret;
*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
if (!firmware) {
dev_err(device, "%s: kmalloc(struct firmware) failed\n",
__func__);
return -ENOMEM;
}
if (fw_get_builtin_firmware(firmware, name)) {
dev_dbg(device, "firmware: using built-in firmware %s\n", name);
return 0; /* assigned */
}
ret = fw_lookup_and_allocate_buf(name, &fw_cache, &buf);
/*
* bind with 'buf' now to avoid warning in failure path
* of requesting firmware.
*/
firmware->priv = buf;
if (ret > 0) {
ret = sync_cached_firmware_buf(buf);
if (!ret) {
fw_set_page_data(buf, firmware);
return 0; /* assigned */
}
}
if (ret < 0)
return ret;
return 1; /* need to load */
}
static int assign_firmware_buf(struct firmware *fw, struct device *device)
{
struct firmware_buf *buf = fw->priv;
mutex_lock(&fw_lock);
if (!buf->size || is_fw_load_aborted(buf)) {
mutex_unlock(&fw_lock);
return -ENOENT;
}
/*
* add firmware name into devres list so that we can auto cache
* and uncache firmware for device.
*
* device may has been deleted already, but the problem
* should be fixed in devres or driver core.
*/
if (device)
fw_add_devm_name(device, buf->fw_id);
/*
* After caching firmware image is started, let it piggyback
* on request firmware.
*/
if (buf->fwc->state == FW_LOADER_START_CACHE) {
if (fw_cache_piggyback_on_request(buf->fw_id))
kref_get(&buf->ref);
}
/* pass the pages buffer to driver at the last minute */
fw_set_page_data(buf, fw);
mutex_unlock(&fw_lock);
return 0;
}
/* called from request_firmware() and request_firmware_work_func() */
static int
_request_firmware(const struct firmware **firmware_p, const char *name,
struct device *device, bool uevent, bool nowait)
{
struct firmware *fw;
long timeout;
int ret;
if (!firmware_p)
return -EINVAL;
ret = _request_firmware_prepare(&fw, name, device);
if (ret <= 0) /* error or already assigned */
goto out;
ret = 0;
timeout = firmware_loading_timeout();
if (nowait) {
timeout = usermodehelper_read_lock_wait(timeout);
if (!timeout) {
dev_dbg(device, "firmware: %s loading timed out\n",
name);
ret = -EBUSY;
goto out;
}
} else {
ret = usermodehelper_read_trylock();
if (WARN_ON(ret)) {
dev_err(device, "firmware: %s will not be loaded\n",
name);
goto out;
}
}
if (!fw_get_filesystem_firmware(device, fw->priv))
ret = fw_load_from_user_helper(fw, name, device,
uevent, nowait, timeout);
if (!ret)
ret = assign_firmware_buf(fw, device);
usermodehelper_read_unlock();
out:
if (ret < 0) {
release_firmware(fw);
fw = NULL;
}
*firmware_p = fw;
return ret;
}
/** /**
* request_firmware: - send firmware request and wait for it * request_firmware: - send firmware request and wait for it
* @firmware_p: pointer to firmware image * @firmware_p: pointer to firmware image
@ -996,26 +1077,7 @@ int
request_firmware(const struct firmware **firmware_p, const char *name, request_firmware(const struct firmware **firmware_p, const char *name,
struct device *device) struct device *device)
{ {
struct firmware_priv *fw_priv; return _request_firmware(firmware_p, name, device, true, false);
int ret;
fw_priv = _request_firmware_prepare(firmware_p, name, device, true,
false);
if (IS_ERR_OR_NULL(fw_priv))
return PTR_RET(fw_priv);
ret = usermodehelper_read_trylock();
if (WARN_ON(ret)) {
dev_err(device, "firmware: %s will not be loaded\n", name);
} else {
ret = _request_firmware_load(fw_priv, true,
firmware_loading_timeout());
usermodehelper_read_unlock();
}
if (ret)
_request_firmware_cleanup(firmware_p);
return ret;
} }
/** /**
@ -1046,33 +1108,13 @@ static void request_firmware_work_func(struct work_struct *work)
{ {
struct firmware_work *fw_work; struct firmware_work *fw_work;
const struct firmware *fw; const struct firmware *fw;
struct firmware_priv *fw_priv;
long timeout;
int ret;
fw_work = container_of(work, struct firmware_work, work); fw_work = container_of(work, struct firmware_work, work);
fw_priv = _request_firmware_prepare(&fw, fw_work->name, fw_work->device,
fw_work->uevent, true);
if (IS_ERR_OR_NULL(fw_priv)) {
ret = PTR_RET(fw_priv);
goto out;
}
timeout = usermodehelper_read_lock_wait(firmware_loading_timeout()); _request_firmware(&fw, fw_work->name, fw_work->device,
if (timeout) { fw_work->uevent, true);
ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
usermodehelper_read_unlock();
} else {
dev_dbg(fw_work->device, "firmware: %s loading timed out\n",
fw_work->name);
ret = -EAGAIN;
}
if (ret)
_request_firmware_cleanup(&fw);
out:
fw_work->cont(fw, fw_work->context); fw_work->cont(fw, fw_work->context);
put_device(fw_work->device); put_device(fw_work->device); /* taken in request_firmware_nowait() */
module_put(fw_work->module); module_put(fw_work->module);
kfree(fw_work); kfree(fw_work);
@ -1474,7 +1516,11 @@ static void __init fw_cache_init(void)
static int __init firmware_class_init(void) static int __init firmware_class_init(void)
{ {
fw_cache_init(); fw_cache_init();
#ifdef CONFIG_FW_LOADER_USER_HELPER
return class_register(&firmware_class); return class_register(&firmware_class);
#else
return 0;
#endif
} }
static void __exit firmware_class_exit(void) static void __exit firmware_class_exit(void)
@ -1483,7 +1529,9 @@ static void __exit firmware_class_exit(void)
unregister_syscore_ops(&fw_syscore_ops); unregister_syscore_ops(&fw_syscore_ops);
unregister_pm_notifier(&fw_cache.pm_notify); unregister_pm_notifier(&fw_cache.pm_notify);
#endif #endif
#ifdef CONFIG_FW_LOADER_USER_HELPER
class_unregister(&firmware_class); class_unregister(&firmware_class);
#endif
} }
fs_initcall(firmware_class_init); fs_initcall(firmware_class_init);

View file

@ -494,8 +494,8 @@ store_hard_offline_page(struct device *dev,
return ret ? ret : count; return ret ? ret : count;
} }
static DEVICE_ATTR(soft_offline_page, 0644, NULL, store_soft_offline_page); static DEVICE_ATTR(soft_offline_page, S_IWUSR, NULL, store_soft_offline_page);
static DEVICE_ATTR(hard_offline_page, 0644, NULL, store_hard_offline_page); static DEVICE_ATTR(hard_offline_page, S_IWUSR, NULL, store_hard_offline_page);
static __init int memory_fail_init(void) static __init int memory_fail_init(void)
{ {

View file

@ -205,8 +205,8 @@ config PARIDE_EPAT
support. support.
config PARIDE_EPATC8 config PARIDE_EPATC8
bool "Support c7/c8 chips (EXPERIMENTAL)" bool "Support c7/c8 chips"
depends on PARIDE_EPAT && EXPERIMENTAL depends on PARIDE_EPAT
help help
This option enables support for the newer Shuttle EP1284 (aka c7 and This option enables support for the newer Shuttle EP1284 (aka c7 and
c8) chip. You need this if you are using any recent Imation SuperDisk c8) chip. You need this if you are using any recent Imation SuperDisk

View file

@ -104,6 +104,7 @@ static int exynos_read(struct hwrng *rng, void *buf,
static int exynos_rng_probe(struct platform_device *pdev) static int exynos_rng_probe(struct platform_device *pdev)
{ {
struct exynos_rng *exynos_rng; struct exynos_rng *exynos_rng;
struct resource *res;
exynos_rng = devm_kzalloc(&pdev->dev, sizeof(struct exynos_rng), exynos_rng = devm_kzalloc(&pdev->dev, sizeof(struct exynos_rng),
GFP_KERNEL); GFP_KERNEL);
@ -120,10 +121,10 @@ static int exynos_rng_probe(struct platform_device *pdev)
return -ENOENT; return -ENOENT;
} }
exynos_rng->mem = devm_request_and_ioremap(&pdev->dev, res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
platform_get_resource(pdev, IORESOURCE_MEM, 0)); exynos_rng->mem = devm_ioremap_resource(&pdev->dev, res);
if (!exynos_rng->mem) if (IS_ERR(exynos_rng->mem))
return -EBUSY; return PTR_ERR(exynos_rng->mem);
platform_set_drvdata(pdev, exynos_rng); platform_set_drvdata(pdev, exynos_rng);

View file

@ -124,9 +124,9 @@ static int omap_rng_probe(struct platform_device *pdev)
goto err_ioremap; goto err_ioremap;
} }
priv->base = devm_request_and_ioremap(&pdev->dev, priv->mem_res); priv->base = devm_ioremap_resource(&pdev->dev, priv->mem_res);
if (!priv->base) { if (IS_ERR(priv->base)) {
ret = -ENOMEM; ret = PTR_ERR(priv->base);
goto err_ioremap; goto err_ioremap;
} }
dev_set_drvdata(&pdev->dev, priv); dev_set_drvdata(&pdev->dev, priv);

View file

@ -7,6 +7,7 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
*/ */
#include <linux/err.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
@ -115,9 +116,9 @@ static int __init tx4939_rng_probe(struct platform_device *dev)
rngdev = devm_kzalloc(&dev->dev, sizeof(*rngdev), GFP_KERNEL); rngdev = devm_kzalloc(&dev->dev, sizeof(*rngdev), GFP_KERNEL);
if (!rngdev) if (!rngdev)
return -ENOMEM; return -ENOMEM;
rngdev->base = devm_request_and_ioremap(&dev->dev, r); rngdev->base = devm_ioremap_resource(&dev->dev, r);
if (!rngdev->base) if (IS_ERR(rngdev->base))
return -EBUSY; return PTR_ERR(rngdev->base);
rngdev->rng.name = dev_name(&dev->dev); rngdev->rng.name = dev_name(&dev->dev);
rngdev->rng.data_present = tx4939_rng_data_present; rngdev->rng.data_present = tx4939_rng_data_present;

View file

@ -21,8 +21,8 @@ config ARM_S3C2416_CPUFREQ
If in doubt, say N. If in doubt, say N.
config ARM_S3C2416_CPUFREQ_VCORESCALE config ARM_S3C2416_CPUFREQ_VCORESCALE
bool "Allow voltage scaling for S3C2416 arm core (EXPERIMENTAL)" bool "Allow voltage scaling for S3C2416 arm core"
depends on ARM_S3C2416_CPUFREQ && REGULATOR && EXPERIMENTAL depends on ARM_S3C2416_CPUFREQ && REGULATOR
help help
Enable CPU voltage scaling when entering the dvs mode. Enable CPU voltage scaling when entering the dvs mode.
It uses information gathered through existing hardware and It uses information gathered through existing hardware and

View file

@ -187,7 +187,7 @@ config X86_SPEEDSTEP_ICH
config X86_SPEEDSTEP_SMI config X86_SPEEDSTEP_SMI
tristate "Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)" tristate "Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)"
select CPU_FREQ_TABLE select CPU_FREQ_TABLE
depends on X86_32 && EXPERIMENTAL depends on X86_32
help help
This adds the CPUFreq driver for certain mobile Intel Pentium III This adds the CPUFreq driver for certain mobile Intel Pentium III
(Coppermine), all mobile Intel Pentium III-M (Tualatin) (Coppermine), all mobile Intel Pentium III-M (Tualatin)
@ -219,7 +219,7 @@ config X86_P4_CLOCKMOD
config X86_CPUFREQ_NFORCE2 config X86_CPUFREQ_NFORCE2
tristate "nVidia nForce2 FSB changing" tristate "nVidia nForce2 FSB changing"
depends on X86_32 && EXPERIMENTAL depends on X86_32
help help
This adds the CPUFreq driver for FSB changing on nVidia nForce2 This adds the CPUFreq driver for FSB changing on nVidia nForce2
platforms. platforms.
@ -255,7 +255,7 @@ config X86_LONGHAUL
config X86_E_POWERSAVER config X86_E_POWERSAVER
tristate "VIA C7 Enhanced PowerSaver (DANGEROUS)" tristate "VIA C7 Enhanced PowerSaver (DANGEROUS)"
select CPU_FREQ_TABLE select CPU_FREQ_TABLE
depends on X86_32 && EXPERIMENTAL depends on X86_32
help help
This adds the CPUFreq driver for VIA C7 processors. However, this driver This adds the CPUFreq driver for VIA C7 processors. However, this driver
does not have any safeguards to prevent operating the CPU out of spec does not have any safeguards to prevent operating the CPU out of spec

View file

@ -14,6 +14,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/dmaengine.h> #include <linux/dmaengine.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/io.h> #include <linux/io.h>
@ -1489,9 +1490,9 @@ static int dw_probe(struct platform_device *pdev)
if (irq < 0) if (irq < 0)
return irq; return irq;
regs = devm_request_and_ioremap(&pdev->dev, io); regs = devm_ioremap_resource(&pdev->dev, io);
if (!regs) if (IS_ERR(regs))
return -EBUSY; return PTR_ERR(regs);
dw_params = dma_read_byaddr(regs, DW_PARAMS); dw_params = dma_read_byaddr(regs, DW_PARAMS);
autocfg = dw_params >> DW_PARAMS_EN & 0x1; autocfg = dw_params >> DW_PARAMS_EN & 0x1;

View file

@ -14,6 +14,7 @@
* http://www.opensource.org/licenses/gpl-license.html * http://www.opensource.org/licenses/gpl-license.html
* http://www.gnu.org/copyleft/gpl.html * http://www.gnu.org/copyleft/gpl.html
*/ */
#include <linux/err.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/mm.h> #include <linux/mm.h>
@ -1010,9 +1011,9 @@ static int __init imxdma_probe(struct platform_device *pdev)
imxdma->devtype = pdev->id_entry->driver_data; imxdma->devtype = pdev->id_entry->driver_data;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
imxdma->base = devm_request_and_ioremap(&pdev->dev, res); imxdma->base = devm_ioremap_resource(&pdev->dev, res);
if (!imxdma->base) if (IS_ERR(imxdma->base))
return -EADDRNOTAVAIL; return PTR_ERR(imxdma->base);
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
if (irq < 0) if (irq < 0)

View file

@ -5,6 +5,7 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <linux/err.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
@ -782,9 +783,9 @@ static int mmp_pdma_probe(struct platform_device *op)
if (!iores) if (!iores)
return -EINVAL; return -EINVAL;
pdev->base = devm_request_and_ioremap(pdev->dev, iores); pdev->base = devm_ioremap_resource(pdev->dev, iores);
if (!pdev->base) if (IS_ERR(pdev->base))
return -EADDRNOTAVAIL; return PTR_ERR(pdev->base);
of_id = of_match_device(mmp_pdma_dt_ids, pdev->dev); of_id = of_match_device(mmp_pdma_dt_ids, pdev->dev);
if (of_id) if (of_id)

View file

@ -9,6 +9,7 @@
* *
*/ */
#include <linux/err.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
@ -547,9 +548,9 @@ static int mmp_tdma_probe(struct platform_device *pdev)
if (!iores) if (!iores)
return -EINVAL; return -EINVAL;
tdev->base = devm_request_and_ioremap(&pdev->dev, iores); tdev->base = devm_ioremap_resource(&pdev->dev, iores);
if (!tdev->base) if (IS_ERR(tdev->base))
return -EADDRNOTAVAIL; return PTR_ERR(tdev->base);
INIT_LIST_HEAD(&tdev->device.channels); INIT_LIST_HEAD(&tdev->device.channels);

View file

@ -21,6 +21,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/dmaengine.h> #include <linux/dmaengine.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/io.h> #include <linux/io.h>
@ -1240,12 +1241,9 @@ static int tegra_dma_probe(struct platform_device *pdev)
return -EINVAL; return -EINVAL;
} }
tdma->base_addr = devm_request_and_ioremap(&pdev->dev, res); tdma->base_addr = devm_ioremap_resource(&pdev->dev, res);
if (!tdma->base_addr) { if (IS_ERR(tdma->base_addr))
dev_err(&pdev->dev, return PTR_ERR(tdma->base_addr);
"Cannot request memregion/iomap dma address\n");
return -EADDRNOTAVAIL;
}
tdma->dma_clk = devm_clk_get(&pdev->dev, NULL); tdma->dma_clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(tdma->dma_clk)) { if (IS_ERR(tdma->dma_clk)) {

View file

@ -158,7 +158,7 @@ config EDAC_I3000
config EDAC_I3200 config EDAC_I3200
tristate "Intel 3200" tristate "Intel 3200"
depends on EDAC_MM_EDAC && PCI && X86 && EXPERIMENTAL depends on EDAC_MM_EDAC && PCI && X86
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
3200 and 3210 server chipsets. 3200 and 3210 server chipsets.
@ -224,7 +224,7 @@ config EDAC_I7300
config EDAC_SBRIDGE config EDAC_SBRIDGE
tristate "Intel Sandy-Bridge Integrated MC" tristate "Intel Sandy-Bridge Integrated MC"
depends on EDAC_MM_EDAC && PCI && X86_64 && X86_MCE_INTEL depends on EDAC_MM_EDAC && PCI && X86_64 && X86_MCE_INTEL
depends on PCI_MMCONFIG && EXPERIMENTAL depends on PCI_MMCONFIG
help help
Support for error detection and correction the Intel Support for error detection and correction the Intel
Sandy Bridge Integrated Memory Controller. Sandy Bridge Integrated Memory Controller.

View file

@ -66,7 +66,7 @@ config DEBUG_GPIO
config GPIO_SYSFS config GPIO_SYSFS
bool "/sys/class/gpio/... (sysfs interface)" bool "/sys/class/gpio/... (sysfs interface)"
depends on SYSFS && EXPERIMENTAL depends on SYSFS
help help
Say Y here to add a sysfs interface for GPIOs. Say Y here to add a sysfs interface for GPIOs.

View file

@ -33,6 +33,7 @@
* interrupts. * interrupts.
*/ */
#include <linux/err.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/irq.h> #include <linux/irq.h>
@ -544,11 +545,9 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
mvchip->chip.of_node = np; mvchip->chip.of_node = np;
spin_lock_init(&mvchip->lock); spin_lock_init(&mvchip->lock);
mvchip->membase = devm_request_and_ioremap(&pdev->dev, res); mvchip->membase = devm_ioremap_resource(&pdev->dev, res);
if (! mvchip->membase) { if (IS_ERR(mvchip->membase))
dev_err(&pdev->dev, "Cannot ioremap\n"); return PTR_ERR(mvchip->membase);
return -ENOMEM;
}
/* The Armada XP has a second range of registers for the /* The Armada XP has a second range of registers for the
* per-CPU registers */ * per-CPU registers */
@ -559,11 +558,10 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
return -ENODEV; return -ENODEV;
} }
mvchip->percpu_membase = devm_request_and_ioremap(&pdev->dev, res); mvchip->percpu_membase = devm_ioremap_resource(&pdev->dev,
if (! mvchip->percpu_membase) { res);
dev_err(&pdev->dev, "Cannot ioremap\n"); if (IS_ERR(mvchip->percpu_membase))
return -ENOMEM; return PTR_ERR(mvchip->percpu_membase);
}
} }
/* /*

View file

@ -20,6 +20,7 @@
* MA 02110-1301, USA. * MA 02110-1301, USA.
*/ */
#include <linux/err.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/io.h> #include <linux/io.h>
@ -253,12 +254,14 @@ static int mxs_gpio_probe(struct platform_device *pdev)
parent = of_get_parent(np); parent = of_get_parent(np);
base = of_iomap(parent, 0); base = of_iomap(parent, 0);
of_node_put(parent); of_node_put(parent);
if (!base)
return -EADDRNOTAVAIL;
} else { } else {
iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
base = devm_request_and_ioremap(&pdev->dev, iores); base = devm_ioremap_resource(&pdev->dev, iores);
if (IS_ERR(base))
return PTR_ERR(base);
} }
if (!base)
return -EADDRNOTAVAIL;
} }
port->base = base; port->base = base;

View file

@ -140,11 +140,9 @@ static int spics_gpio_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
} }
spics->base = devm_request_and_ioremap(&pdev->dev, res); spics->base = devm_ioremap_resource(&pdev->dev, res);
if (!spics->base) { if (IS_ERR(spics->base))
dev_err(&pdev->dev, "request and ioremap fail\n"); return PTR_ERR(spics->base);
return -ENOMEM;
}
if (of_property_read_u32(np, "st-spics,peripcfg-reg", if (of_property_read_u32(np, "st-spics,peripcfg-reg",
&spics->perip_cfg)) &spics->perip_cfg))

View file

@ -214,11 +214,10 @@ static int xway_stp_probe(struct platform_device *pdev)
if (!chip) if (!chip)
return -ENOMEM; return -ENOMEM;
chip->virt = devm_request_and_ioremap(&pdev->dev, res); chip->virt = devm_ioremap_resource(&pdev->dev, res);
if (!chip->virt) { if (IS_ERR(chip->virt))
dev_err(&pdev->dev, "failed to remap STP memory\n"); return PTR_ERR(chip->virt);
return -ENOMEM;
}
chip->gc.dev = &pdev->dev; chip->gc.dev = &pdev->dev;
chip->gc.label = "stp-xway"; chip->gc.label = "stp-xway";
chip->gc.direction_output = xway_stp_dir_out; chip->gc.direction_output = xway_stp_dir_out;

View file

@ -17,6 +17,7 @@
* *
*/ */
#include <linux/err.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
@ -450,11 +451,9 @@ static int tegra_gpio_probe(struct platform_device *pdev)
return -ENODEV; return -ENODEV;
} }
regs = devm_request_and_ioremap(&pdev->dev, res); regs = devm_ioremap_resource(&pdev->dev, res);
if (!regs) { if (IS_ERR(regs))
dev_err(&pdev->dev, "Couldn't ioremap regs\n"); return PTR_ERR(regs);
return -ENODEV;
}
for (i = 0; i < tegra_gpio_bank_count; i++) { for (i = 0; i < tegra_gpio_bank_count; i++) {
for (j = 0; j < 4; j++) { for (j = 0; j < 4; j++) {

View file

@ -806,7 +806,7 @@ fail_unlock:
} }
EXPORT_SYMBOL_GPL(gpio_export); EXPORT_SYMBOL_GPL(gpio_export);
static int match_export(struct device *dev, void *data) static int match_export(struct device *dev, const void *data)
{ {
return dev_get_drvdata(dev) == data; return dev_get_drvdata(dev) == data;
} }

View file

@ -1,6 +1,6 @@
config DRM_AST config DRM_AST
tristate "AST server chips" tristate "AST server chips"
depends on DRM && PCI && EXPERIMENTAL depends on DRM && PCI
select DRM_TTM select DRM_TTM
select FB_SYS_COPYAREA select FB_SYS_COPYAREA
select FB_SYS_FILLRECT select FB_SYS_FILLRECT

View file

@ -1,6 +1,6 @@
config DRM_CIRRUS_QEMU config DRM_CIRRUS_QEMU
tristate "Cirrus driver for QEMU emulated device" tristate "Cirrus driver for QEMU emulated device"
depends on DRM && PCI && EXPERIMENTAL depends on DRM && PCI
select FB_SYS_FILLRECT select FB_SYS_FILLRECT
select FB_SYS_COPYAREA select FB_SYS_COPYAREA
select FB_SYS_IMAGEBLIT select FB_SYS_IMAGEBLIT

View file

@ -1785,11 +1785,9 @@ static int fimc_probe(struct platform_device *pdev)
/* resource memory */ /* resource memory */
ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res); ctx->regs = devm_ioremap_resource(dev, ctx->regs_res);
if (!ctx->regs) { if (IS_ERR(ctx->regs))
dev_err(dev, "failed to map registers.\n"); return PTR_ERR(ctx->regs);
return -ENXIO;
}
/* resource irq */ /* resource irq */
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);

View file

@ -913,11 +913,9 @@ static int fimd_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
ctx->regs = devm_request_and_ioremap(&pdev->dev, res); ctx->regs = devm_ioremap_resource(&pdev->dev, res);
if (!ctx->regs) { if (IS_ERR(ctx->regs))
dev_err(dev, "failed to map registers\n"); return PTR_ERR(ctx->regs);
return -ENXIO;
}
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (!res) { if (!res) {

View file

@ -1136,10 +1136,9 @@ static int g2d_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
g2d->regs = devm_request_and_ioremap(&pdev->dev, res); g2d->regs = devm_ioremap_resource(&pdev->dev, res);
if (!g2d->regs) { if (IS_ERR(g2d->regs)) {
dev_err(dev, "failed to remap I/O memory\n"); ret = PTR_ERR(g2d->regs);
ret = -ENXIO;
goto err_put_clk; goto err_put_clk;
} }

View file

@ -1692,11 +1692,9 @@ static int gsc_probe(struct platform_device *pdev)
/* resource memory */ /* resource memory */
ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res); ctx->regs = devm_ioremap_resource(dev, ctx->regs_res);
if (!ctx->regs) { if (IS_ERR(ctx->regs))
dev_err(dev, "failed to map registers.\n"); return PTR_ERR(ctx->regs);
return -ENXIO;
}
/* resource irq */ /* resource irq */
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);

View file

@ -656,11 +656,9 @@ static int rotator_probe(struct platform_device *pdev)
platform_get_device_id(pdev)->driver_data; platform_get_device_id(pdev)->driver_data;
rot->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); rot->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
rot->regs = devm_request_and_ioremap(dev, rot->regs_res); rot->regs = devm_ioremap_resource(dev, rot->regs_res);
if (!rot->regs) { if (IS_ERR(rot->regs))
dev_err(dev, "failed to map register\n"); return PTR_ERR(rot->regs);
return -ENXIO;
}
rot->irq = platform_get_irq(pdev, 0); rot->irq = platform_get_irq(pdev, 0);
if (rot->irq < 0) { if (rot->irq < 0) {

View file

@ -2501,11 +2501,9 @@ static int hdmi_probe(struct platform_device *pdev)
return -ENOENT; return -ENOENT;
} }
hdata->regs = devm_request_and_ioremap(&pdev->dev, res); hdata->regs = devm_ioremap_resource(&pdev->dev, res);
if (!hdata->regs) { if (IS_ERR(hdata->regs))
DRM_ERROR("failed to map registers\n"); return PTR_ERR(hdata->regs);
return -ENXIO;
}
ret = devm_gpio_request(&pdev->dev, hdata->hpd_gpio, "HPD"); ret = devm_gpio_request(&pdev->dev, hdata->hpd_gpio, "HPD");
if (ret) { if (ret) {

View file

@ -1,6 +1,6 @@
config DRM_GMA500 config DRM_GMA500
tristate "Intel GMA5/600 KMS Framebuffer" tristate "Intel GMA5/600 KMS Framebuffer"
depends on DRM && PCI && X86 && EXPERIMENTAL depends on DRM && PCI && X86
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT

View file

@ -1,6 +1,6 @@
config DRM_MGAG200 config DRM_MGAG200
tristate "Kernel modesetting driver for MGA G200 server engines" tristate "Kernel modesetting driver for MGA G200 server engines"
depends on DRM && PCI && EXPERIMENTAL depends on DRM && PCI
select FB_SYS_FILLRECT select FB_SYS_FILLRECT
select FB_SYS_COPYAREA select FB_SYS_COPYAREA
select FB_SYS_IMAGEBLIT select FB_SYS_IMAGEBLIT

View file

@ -764,11 +764,9 @@ static int tegra_dc_probe(struct platform_device *pdev)
return -ENXIO; return -ENXIO;
} }
dc->regs = devm_request_and_ioremap(&pdev->dev, regs); dc->regs = devm_ioremap_resource(&pdev->dev, regs);
if (!dc->regs) { if (IS_ERR(dc->regs))
dev_err(&pdev->dev, "failed to remap registers\n"); return PTR_ERR(dc->regs);
return -ENXIO;
}
dc->irq = platform_get_irq(pdev, 0); dc->irq = platform_get_irq(pdev, 0);
if (dc->irq < 0) { if (dc->irq < 0) {

View file

@ -1259,9 +1259,9 @@ static int tegra_hdmi_probe(struct platform_device *pdev)
if (!regs) if (!regs)
return -ENXIO; return -ENXIO;
hdmi->regs = devm_request_and_ioremap(&pdev->dev, regs); hdmi->regs = devm_ioremap_resource(&pdev->dev, regs);
if (!hdmi->regs) if (IS_ERR(hdmi->regs))
return -EADDRNOTAVAIL; return PTR_ERR(hdmi->regs);
err = platform_get_irq(pdev, 0); err = platform_get_irq(pdev, 0);
if (err < 0) if (err < 0)

View file

@ -139,9 +139,9 @@ static int tegra_host1x_probe(struct platform_device *pdev)
host1x->irq = err; host1x->irq = err;
host1x->regs = devm_request_and_ioremap(&pdev->dev, regs); host1x->regs = devm_ioremap_resource(&pdev->dev, regs);
if (!host1x->regs) { if (IS_ERR(host1x->regs)) {
err = -EADDRNOTAVAIL; err = PTR_ERR(host1x->regs);
goto err; goto err;
} }

View file

@ -1,6 +1,6 @@
config DRM_UDL config DRM_UDL
tristate "DisplayLink" tristate "DisplayLink"
depends on DRM && EXPERIMENTAL depends on DRM
depends on USB_ARCH_HAS_HCD depends on USB_ARCH_HAS_HCD
select DRM_USB select DRM_USB
select FB_SYS_FILLRECT select FB_SYS_FILLRECT

View file

@ -89,7 +89,7 @@ source drivers/i2c/busses/Kconfig
config I2C_STUB config I2C_STUB
tristate "I2C/SMBus Test Stub" tristate "I2C/SMBus Test Stub"
depends on EXPERIMENTAL && m depends on m
default 'n' default 'n'
help help
This module may be useful to developers of SMBus client drivers, This module may be useful to developers of SMBus client drivers,

View file

@ -22,7 +22,7 @@ config I2C_ALI1535
config I2C_ALI1563 config I2C_ALI1563
tristate "ALI 1563" tristate "ALI 1563"
depends on PCI && EXPERIMENTAL depends on PCI
help help
If you say yes to this option, support will be included for the SMB If you say yes to this option, support will be included for the SMB
Host controller on Acer Labs Inc. (ALI) M1563 South Bridges. The SMB Host controller on Acer Labs Inc. (ALI) M1563 South Bridges. The SMB
@ -56,7 +56,7 @@ config I2C_AMD756
config I2C_AMD756_S4882 config I2C_AMD756_S4882
tristate "SMBus multiplexing on the Tyan S4882" tristate "SMBus multiplexing on the Tyan S4882"
depends on I2C_AMD756 && X86 && EXPERIMENTAL depends on I2C_AMD756 && X86
help help
Enabling this option will add specific SMBus support for the Tyan Enabling this option will add specific SMBus support for the Tyan
S4882 motherboard. On this 4-CPU board, the SMBus is multiplexed S4882 motherboard. On this 4-CPU board, the SMBus is multiplexed
@ -164,7 +164,7 @@ config I2C_NFORCE2
config I2C_NFORCE2_S4985 config I2C_NFORCE2_S4985
tristate "SMBus multiplexing on the Tyan S4985" tristate "SMBus multiplexing on the Tyan S4985"
depends on I2C_NFORCE2 && X86 && EXPERIMENTAL depends on I2C_NFORCE2 && X86
help help
Enabling this option will add specific SMBus support for the Tyan Enabling this option will add specific SMBus support for the Tyan
S4985 motherboard. On this 4-CPU board, the SMBus is multiplexed S4985 motherboard. On this 4-CPU board, the SMBus is multiplexed
@ -215,7 +215,7 @@ config I2C_SIS96X
config I2C_VIA config I2C_VIA
tristate "VIA VT82C586B" tristate "VIA VT82C586B"
depends on PCI && EXPERIMENTAL depends on PCI
select I2C_ALGOBIT select I2C_ALGOBIT
help help
If you say yes to this option, support will be included for the VIA If you say yes to this option, support will be included for the VIA
@ -267,7 +267,7 @@ comment "Mac SMBus host controller drivers"
config I2C_HYDRA config I2C_HYDRA
tristate "CHRP Apple Hydra Mac I/O I2C interface" tristate "CHRP Apple Hydra Mac I/O I2C interface"
depends on PCI && PPC_CHRP && EXPERIMENTAL depends on PCI && PPC_CHRP
select I2C_ALGOBIT select I2C_ALGOBIT
help help
This supports the use of the I2C interface in the Apple Hydra Mac This supports the use of the I2C interface in the Apple Hydra Mac
@ -293,7 +293,7 @@ comment "I2C system bus drivers (mostly embedded / system-on-chip)"
config I2C_AT91 config I2C_AT91
tristate "Atmel AT91 I2C Two-Wire interface (TWI)" tristate "Atmel AT91 I2C Two-Wire interface (TWI)"
depends on ARCH_AT91 && EXPERIMENTAL depends on ARCH_AT91
help help
This supports the use of the I2C interface on Atmel AT91 This supports the use of the I2C interface on Atmel AT91
processors. processors.
@ -519,7 +519,6 @@ config I2C_NUC900
config I2C_OCORES config I2C_OCORES
tristate "OpenCores I2C Controller" tristate "OpenCores I2C Controller"
depends on EXPERIMENTAL
help help
If you say yes to this option, support will be included for the If you say yes to this option, support will be included for the
OpenCores I2C controller. For details see OpenCores I2C controller. For details see
@ -712,7 +711,7 @@ config I2C_OCTEON
config I2C_XILINX config I2C_XILINX
tristate "Xilinx I2C Controller" tristate "Xilinx I2C Controller"
depends on EXPERIMENTAL && HAS_IOMEM depends on HAS_IOMEM
help help
If you say yes to this option, support will be included for the If you say yes to this option, support will be included for the
Xilinx I2C controller. Xilinx I2C controller.
@ -803,7 +802,6 @@ config I2C_PARPORT_LIGHT
config I2C_TAOS_EVM config I2C_TAOS_EVM
tristate "TAOS evaluation module" tristate "TAOS evaluation module"
depends on EXPERIMENTAL
select SERIO select SERIO
select SERIO_SERPORT select SERIO_SERPORT
default n default n

View file

@ -723,9 +723,9 @@ static int at91_twi_probe(struct platform_device *pdev)
if (!dev->pdata) if (!dev->pdata)
return -ENODEV; return -ENODEV;
dev->base = devm_request_and_ioremap(&pdev->dev, mem); dev->base = devm_ioremap_resource(&pdev->dev, mem);
if (!dev->base) if (IS_ERR(dev->base))
return -EBUSY; return PTR_ERR(dev->base);
dev->irq = platform_get_irq(pdev, 0); dev->irq = platform_get_irq(pdev, 0);
if (dev->irq < 0) if (dev->irq < 0)

View file

@ -511,9 +511,9 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
return -ENOENT; return -ENOENT;
} }
base = devm_request_and_ioremap(&pdev->dev, res); base = devm_ioremap_resource(&pdev->dev, res);
if (!base) if (IS_ERR(base))
return -EBUSY; return PTR_ERR(base);
i2c_imx = devm_kzalloc(&pdev->dev, sizeof(struct imx_i2c_struct), i2c_imx = devm_kzalloc(&pdev->dev, sizeof(struct imx_i2c_struct),
GFP_KERNEL); GFP_KERNEL);

View file

@ -12,6 +12,7 @@
* kind, whether express or implied. * kind, whether express or implied.
*/ */
#include <linux/err.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
@ -364,9 +365,9 @@ static int ocores_i2c_probe(struct platform_device *pdev)
if (!i2c) if (!i2c)
return -ENOMEM; return -ENOMEM;
i2c->base = devm_request_and_ioremap(&pdev->dev, res); i2c->base = devm_ioremap_resource(&pdev->dev, res);
if (!i2c->base) if (IS_ERR(i2c->base))
return -EADDRNOTAVAIL; return PTR_ERR(i2c->base);
pdata = pdev->dev.platform_data; pdata = pdev->dev.platform_data;
if (pdata) { if (pdata) {

View file

@ -1103,11 +1103,9 @@ omap_i2c_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
} }
dev->base = devm_request_and_ioremap(&pdev->dev, mem); dev->base = devm_ioremap_resource(&pdev->dev, mem);
if (!dev->base) { if (IS_ERR(dev->base))
dev_err(&pdev->dev, "I2C region already claimed\n"); return PTR_ERR(dev->base);
return -ENOMEM;
}
match = of_match_device(of_match_ptr(omap_i2c_of_match), &pdev->dev); match = of_match_device(of_match_ptr(omap_i2c_of_match), &pdev->dev);
if (match) { if (match) {

View file

@ -642,11 +642,9 @@ static int rcar_i2c_probe(struct platform_device *pdev)
if (ret < 0) if (ret < 0)
return ret; return ret;
priv->io = devm_request_and_ioremap(dev, res); priv->io = devm_ioremap_resource(dev, res);
if (!priv->io) { if (IS_ERR(priv->io))
dev_err(dev, "cannot ioremap\n"); return PTR_ERR(priv->io);
return -ENODEV;
}
priv->irq = platform_get_irq(pdev, 0); priv->irq = platform_get_irq(pdev, 0);
init_waitqueue_head(&priv->wait); init_waitqueue_head(&priv->wait);

View file

@ -1042,11 +1042,10 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
goto err_clk; goto err_clk;
} }
i2c->regs = devm_request_and_ioremap(&pdev->dev, res); i2c->regs = devm_ioremap_resource(&pdev->dev, res);
if (i2c->regs == NULL) { if (IS_ERR(i2c->regs)) {
dev_err(&pdev->dev, "cannot map IO\n"); ret = PTR_ERR(i2c->regs);
ret = -ENXIO;
goto err_clk; goto err_clk;
} }

View file

@ -309,10 +309,9 @@ static int i2c_sirfsoc_probe(struct platform_device *pdev)
goto out; goto out;
} }
siic->base = devm_request_and_ioremap(&pdev->dev, mem_res); siic->base = devm_ioremap_resource(&pdev->dev, mem_res);
if (siic->base == NULL) { if (IS_ERR(siic->base)) {
dev_err(&pdev->dev, "IO remap failed!\n"); err = PTR_ERR(siic->base);
err = -ENOMEM;
goto out; goto out;
} }

View file

@ -888,11 +888,11 @@ stu300_probe(struct platform_device *pdev)
if (!res) if (!res)
return -ENOENT; return -ENOENT;
dev->virtbase = devm_request_and_ioremap(&pdev->dev, res); dev->virtbase = devm_ioremap_resource(&pdev->dev, res);
dev_dbg(&pdev->dev, "initialize bus device I2C%d on virtual " dev_dbg(&pdev->dev, "initialize bus device I2C%d on virtual "
"base %p\n", bus_nr, dev->virtbase); "base %p\n", bus_nr, dev->virtbase);
if (!dev->virtbase) if (IS_ERR(dev->virtbase))
return -ENOMEM; return PTR_ERR(dev->virtbase);
dev->irq = platform_get_irq(pdev, 0); dev->irq = platform_get_irq(pdev, 0);
ret = devm_request_irq(&pdev->dev, dev->irq, stu300_irh, 0, NAME, dev); ret = devm_request_irq(&pdev->dev, dev->irq, stu300_irh, 0, NAME, dev);

Some files were not shown because too many files have changed in this diff Show more