History

Merge 3.7-rc6 into tty-next

Greg Kroah-Hartman committed 14 years ago

Commit 1e619a12 parents 68a8129 f4a75d2182 files · +2500 −957Browse files

Unified · Split

182 files
  1. Documentation/cgroups/memory.txt +4 −0
  2. Documentation/filesystems/proc.txt +12 −4
  3. Documentation/networking/netdev-features.txt +1 −1
  4. MAINTAINERS +59 −9
  5. Makefile +1 −1
  6. arch/arm/boot/Makefile +5 −5
  7. arch/arm/boot/dts/tegra30.dtsi +2 −2
  8. arch/arm/mach-at91/at91rm9200_devices.c +1 −1
  9. arch/arm/mach-at91/at91sam9260_devices.c +1 −1
  10. arch/arm/mach-at91/at91sam9261_devices.c +1 −1
  11. arch/arm/mach-at91/at91sam9263_devices.c +1 −1
  12. arch/arm/mach-at91/at91sam9g45_devices.c +6 −6
  13. arch/arm/mach-highbank/system.c +2 −1
  14. arch/arm/mach-imx/clk-gate2.c +1 −1
  15. arch/arm/mach-imx/ehci-imx25.c +1 −1
  16. arch/arm/mach-imx/ehci-imx35.c +1 −1
  17. arch/arm/mach-omap2/clockdomains44xx_data.c +1 −1
  18. arch/arm/mach-omap2/devices.c +79 −0
  19. arch/arm/mach-omap2/omap_hwmod.c +49 −14
  20. arch/arm/mach-omap2/omap_hwmod_44xx_data.c +36 −0
  21. arch/arm/mach-omap2/twl-common.c +1 −1
  22. arch/arm/mach-omap2/vc.c +1 −1
  23. arch/arm/mach-pxa/hx4700.c +7 −1
  24. arch/arm/mach-pxa/spitz_pm.c +2 −6
  25. arch/arm/plat-omap/include/plat/omap_hwmod.h +6 −0
  26. arch/arm/tools/Makefile +1 −1
  27. arch/arm64/include/asm/io.h +1 −1
  28. arch/arm64/include/asm/pgtable-hwdef.h +4 −2
  29. arch/arm64/include/asm/pgtable.h +20 −20
  30. arch/ia64/mm/init.c +0 −1
  31. arch/mips/cavium-octeon/executive/cvmx-l2c.c +1 −0
  32. arch/mips/fw/arc/misc.c +1 −0
  33. arch/mips/include/asm/bitops.h +39 −89
  34. arch/mips/include/asm/compat.h +1 −1
  35. arch/mips/include/asm/io.h +1 −0
  36. arch/mips/include/asm/irqflags.h +75 −132
  37. arch/mips/include/asm/thread_info.h +0 −6
  38. arch/mips/lib/Makefile +3 −2
  39. arch/mips/lib/bitops.c +179 −0
  40. arch/mips/lib/mips-atomic.c +176 −0
  41. arch/mips/mti-malta/malta-platform.c +2 −1
  42. arch/s390/Kconfig +1 −0
  43. arch/s390/include/asm/compat.h +1 −1
  44. arch/s390/include/asm/topology.h +3 −0
  45. arch/s390/include/uapi/asm/ptrace.h +2 −2
  46. arch/s390/kernel/compat_signal.c +12 −2
  47. arch/s390/kernel/signal.c +12 −2
  48. arch/s390/kernel/topology.c +4 −2
  49. arch/s390/mm/gup.c +2 −3
  50. arch/unicore32/Kconfig +6 −1
  51. arch/unicore32/include/asm/Kbuild +0 −1
  52. arch/unicore32/include/asm/bug.h +0 −5
  53. arch/unicore32/include/asm/cmpxchg.h +1 −1
  54. arch/unicore32/include/asm/kvm_para.h +0 −1
  55. arch/unicore32/include/asm/processor.h +0 −5
  56. arch/unicore32/include/asm/ptrace.h +1 −75
  57. arch/unicore32/include/uapi/asm/Kbuild +7 −0
  58. arch/unicore32/include/uapi/asm/byteorder.h +0 −0
  59. arch/unicore32/include/uapi/asm/ptrace.h +90 −0
  60. arch/unicore32/include/uapi/asm/sigcontext.h +0 −0
  61. arch/unicore32/include/uapi/asm/unistd.h +1 −0
  62. arch/unicore32/kernel/entry.S +7 −13
  63. arch/unicore32/kernel/process.c +14 −44
  64. arch/unicore32/kernel/setup.h +6 −0
  65. arch/unicore32/kernel/sys.c +0 −63
  66. arch/unicore32/mm/fault.c +27 −10
  67. arch/x86/kvm/cpuid.h +3 −0
  68. arch/x86/kvm/vmx.c +7 −4
  69. arch/x86/kvm/x86.c +3 −0
  70. drivers/bluetooth/ath3k.c +1 −0
  71. drivers/bluetooth/btusb.c +1 −0
  72. drivers/bus/omap-ocp2scp.c +65 −3
  73. drivers/clk/ux500/u8500_clk.c +46 −4
  74. drivers/gpu/drm/i915/intel_crt.c +1 −1
  75. drivers/gpu/drm/i915/intel_display.c +11 −0
  76. drivers/gpu/drm/i915/intel_sdvo.c +19 −3
  77. drivers/gpu/drm/radeon/atombios_encoders.c +1 −1
  78. drivers/gpu/drm/ttm/ttm_page_alloc.c +4 −1
  79. drivers/gpu/drm/ttm/ttm_tt.c +0 −4
  80. drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c +2 −0
  81. drivers/hid/hid-microsoft.c +3 −3
  82. drivers/i2c/muxes/i2c-mux-pinctrl.c +1 −1
  83. drivers/irqchip/irq-bcm2835.c +2 −1
  84. drivers/leds/ledtrig-cpu.c +0 −21
  85. drivers/net/ethernet/jme.c +8 −20
  86. drivers/net/ethernet/micrel/ksz884x.c +4 −12
  87. drivers/net/ethernet/smsc/smsc911x.c +15 −2
  88. drivers/net/ethernet/tile/tilegx.c +1 −1
  89. drivers/net/ethernet/xilinx/xilinx_axienet_main.c +6 −6
  90. drivers/net/phy/mdio-bitbang.c +0 −1
  91. drivers/net/usb/cdc_ncm.c +18 −4
  92. drivers/net/usb/smsc95xx.c +2 −2
  93. drivers/net/vxlan.c +7 −3
  94. drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +1 −1
  95. drivers/net/wireless/iwlwifi/dvm/mac80211.c +1 −1
  96. drivers/net/wireless/iwlwifi/dvm/main.c +1 −1
  97. drivers/net/wireless/iwlwifi/pcie/rx.c +21 −2
  98. drivers/rapidio/rio.c +1 −1
  99. drivers/regulator/core.c +20 −13
  100. drivers/s390/char/con3215.c +5 −7
  101. drivers/s390/net/qeth_core_main.c +22 −2
  102. drivers/s390/net/qeth_l2_main.c +8 −5
  103. drivers/staging/android/android_alarm.h +1 −3
  104. drivers/tty/hvc/hvc_console.c +0 −7
  105. drivers/tty/serial/max310x.c +1 −0
  106. drivers/usb/core/hcd.c +16 −0
  107. drivers/usb/early/ehci-dbgp.c +9 −6
  108. drivers/usb/host/ehci-ls1x.c +1 −1
  109. drivers/usb/host/ohci-xls.c +1 −1
  110. drivers/usb/musb/musb_gadget.c +26 −4
  111. drivers/usb/musb/ux500.c +1 −1
  112. drivers/usb/otg/Kconfig +2 −2
  113. drivers/usb/serial/keyspan.c +1 −2
  114. drivers/usb/serial/option.c +9 −0
  115. drivers/usb/serial/usb_wwan.c +5 −5
  116. fs/proc/base.c +109 −0
  117. fs/pstore/platform.c +2 −1
  118. fs/ubifs/find.c +10 −2
  119. fs/ubifs/lprops.c +6 −0
  120. fs/ubifs/ubifs.h +3 −0
  121. include/linux/clk-provider.h +2 −2
  122. include/linux/mm.h +0 −4
  123. include/linux/mmzone.h +1 −1
  124. include/linux/platform_data/omap_ocp2scp.h +31 −0
  125. include/linux/rio.h +2 −0
  126. include/uapi/linux/oom.h +9 −0
  127. kernel/futex.c +22 −19
  128. mm/bootmem.c +1 −9
  129. mm/highmem.c +1 −1
  130. mm/memcontrol.c +50 −17
  131. mm/memory.c +4 −6
  132. mm/memory_hotplug.c +0 −7
  133. mm/mmap.c +2 −0
  134. mm/mmzone.c +1 −5
  135. mm/nobootmem.c +0 −3
  136. mm/page_alloc.c +1 −35
  137. mm/shmem.c +15 −3
  138. mm/swapfile.c +2 −2
  139. mm/vmscan.c +0 −25
  140. net/batman-adv/soft-interface.c +6 −6
  141. net/batman-adv/translation-table.c +14 −1
  142. net/bluetooth/hci_core.c +2 −2
  143. net/bluetooth/mgmt.c +7 −5
  144. net/bluetooth/smp.c +1 −1
  145. net/core/dev.c +3 −1
  146. net/core/dev_addr_lists.c +2 −1
  147. net/ipv4/ip_sockglue.c +22 −13
  148. net/ipv4/ip_vti.c +5 −0
  149. net/ipv4/tcp.c +2 −2
  150. net/ipv4/tcp_input.c +10 −5
  151. net/ipv4/tcp_metrics.c +9 −3
  152. net/ipv4/tcp_output.c +4 −0
  153. net/ipv6/ipv6_sockglue.c +1 −0
  154. net/mac80211/cfg.c +3 −0
  155. net/mac80211/ieee80211_i.h +2 −0
  156. net/mac80211/main.c +4 −2
  157. net/mac80211/scan.c +1 −1
  158. net/mac80211/sta_info.c +8 −3
  159. net/mac80211/status.c +9 −0
  160. net/mac80211/tx.c +6 −3
  161. net/mac80211/util.c +2 −0
  162. net/sctp/proc.c +4 −4
  163. net/wireless/reg.c +2 −3
  164. scripts/kconfig/expr.h +2 −3
  165. scripts/kconfig/list.h +91 −0
  166. scripts/kconfig/lkc_proto.h +2 −2
  167. scripts/kconfig/mconf.c +3 −3
  168. scripts/kconfig/menu.c +8 −6
  169. security/device_cgroup.c +13 −5
  170. sound/pci/es1968.c +8 −3
  171. sound/pci/fm801.c +8 −3
  172. sound/pci/hda/patch_realtek.c +1 −0
  173. sound/soc/codecs/cs42l52.c +1 −2
  174. sound/soc/codecs/wm5102.c +551 −1
  175. sound/soc/codecs/wm8978.c +1 −1
  176. sound/soc/mxs/mxs-saif.c +13 −4
  177. sound/soc/samsung/Kconfig +2 −0
  178. sound/soc/samsung/bells.c +1 −1
  179. sound/soc/soc-core.c +3 −2
  180. sound/soc/soc-dapm.c +1 −1
  181. sound/usb/card.c +3 −3
  182. tools/power/x86/turbostat/turbostat.c +19 −9
Documentation/cgroups/memory.txt+4−0
@@ -466,6 +466,10 @@ Note: · 465 unmodified lines
4665.3 swappiness4665.3 swappiness
467 467
468Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.468Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.
469Please note that unlike the global swappiness, memcg knob set to 0
470really prevents from any swapping even if there is a swap storage
471available. This might lead to memcg OOM killer if there are no file
472pages to reclaim.
469 473
470Following cgroups' swappiness can't be changed.474Following cgroups' swappiness can't be changed.
471- root cgroup (uses /proc/sys/vm/swappiness).475- root cgroup (uses /proc/sys/vm/swappiness).
Documentation/filesystems/proc.txt+12−4
@@ -33,7 +33,7 @@ Table of Contents · 32 unmodified lines
33 2 Modifying System Parameters33 2 Modifying System Parameters
34 34
35 3 Per-Process Parameters35 3 Per-Process Parameters
36 3.1 /proc/<pid>/oom_score_adj - Adjust the oom-killer36 3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj - Adjust the oom-killer
37 score37 score
38 3.2 /proc/<pid>/oom_score - Display current oom-killer score38 3.2 /proc/<pid>/oom_score - Display current oom-killer score
39 3.3 /proc/<pid>/io - Display the IO accounting fields39 3.3 /proc/<pid>/io - Display the IO accounting fields
@@ -1320,10 +1320,10 @@ of the kernel. · 1280 unmodified lines
1320CHAPTER 3: PER-PROCESS PARAMETERS1320CHAPTER 3: PER-PROCESS PARAMETERS
1321------------------------------------------------------------------------------1321------------------------------------------------------------------------------
1322 1322
13233.1 /proc/<pid>/oom_score_adj- Adjust the oom-killer score13233.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj- Adjust the oom-killer score
1324--------------------------------------------------------------------------------1324--------------------------------------------------------------------------------
1325 1325
1326This file can be used to adjust the badness heuristic used to select which1326These file can be used to adjust the badness heuristic used to select which
1327process gets killed in out of memory conditions.1327process gets killed in out of memory conditions.
1328 1328
1329The badness heuristic assigns a value to each candidate task ranging from 01329The badness heuristic assigns a value to each candidate task ranging from 0
@@ -1361,6 +1361,12 @@ same system, cpuset, mempolicy, or memory controller resources to use at least · 31 unmodified lines
1361equivalent to discounting 50% of the task's allowed memory from being considered1361equivalent to discounting 50% of the task's allowed memory from being considered
1362as scoring against the task.1362as scoring against the task.
1363 1363
1364For backwards compatibility with previous kernels, /proc/<pid>/oom_adj may also
1365be used to tune the badness score. Its acceptable values range from -16
1366(OOM_ADJUST_MIN) to +15 (OOM_ADJUST_MAX) and a special value of -17
1367(OOM_DISABLE) to disable oom killing entirely for that task. Its value is
1368scaled linearly with /proc/<pid>/oom_score_adj.
1369
1364The value of /proc/<pid>/oom_score_adj may be reduced no lower than the last1370The value of /proc/<pid>/oom_score_adj may be reduced no lower than the last
1365value set by a CAP_SYS_RESOURCE process. To reduce the value any lower1371value set by a CAP_SYS_RESOURCE process. To reduce the value any lower
1366requires CAP_SYS_RESOURCE.1372requires CAP_SYS_RESOURCE.
@@ -1375,7 +1381,9 @@ minimal amount of work. · 8 unmodified lines
1375-------------------------------------------------------------1381-------------------------------------------------------------
1376 1382
1377This file can be used to check the current score used by the oom-killer is for1383This file can be used to check the current score used by the oom-killer is for
1378any given <pid>.1384any given <pid>. Use it together with /proc/<pid>/oom_score_adj to tune which
1385process should be killed in an out-of-memory situation.
1386
1379 1387
13803.3 /proc/<pid>/io - Display the IO accounting fields13883.3 /proc/<pid>/io - Display the IO accounting fields
1381-------------------------------------------------------1389-------------------------------------------------------
Documentation/networking/netdev-features.txt+1−1
@@ -164,4 +164,4 @@ read the CRC recorded by the NIC on receipt of the packet. · 163 unmodified lines
164This requests that the NIC receive all possible frames, including errored164This requests that the NIC receive all possible frames, including errored
165frames (such as bad FCS, etc). This can be helpful when sniffing a link with165frames (such as bad FCS, etc). This can be helpful when sniffing a link with
166bad packets on it. Some NICs may receive more packets if also put into normal166bad packets on it. Some NICs may receive more packets if also put into normal
167PROMISC mdoe.167PROMISC mode.
MAINTAINERS+59−9
@@ -3598,6 +3598,49 @@ F: drivers/hid/hid-hyperv.c · 3597 unmodified lines
3598F: drivers/net/hyperv/3598F: drivers/net/hyperv/
3599F: drivers/staging/hv/3599F: drivers/staging/hv/
3600 3600
3601I2C OVER PARALLEL PORT
3602M: Jean Delvare <khali@linux-fr.org>
3603L: linux-i2c@vger.kernel.org
3604S: Maintained
3605F: Documentation/i2c/busses/i2c-parport
3606F: Documentation/i2c/busses/i2c-parport-light
3607F: drivers/i2c/busses/i2c-parport.c
3608F: drivers/i2c/busses/i2c-parport-light.c
3609
3610I2C/SMBUS CONTROLLER DRIVERS FOR PC
3611M: Jean Delvare <khali@linux-fr.org>
3612L: linux-i2c@vger.kernel.org
3613S: Maintained
3614F: Documentation/i2c/busses/i2c-ali1535
3615F: Documentation/i2c/busses/i2c-ali1563
3616F: Documentation/i2c/busses/i2c-ali15x3
3617F: Documentation/i2c/busses/i2c-amd756
3618F: Documentation/i2c/busses/i2c-amd8111
3619F: Documentation/i2c/busses/i2c-i801
3620F: Documentation/i2c/busses/i2c-nforce2
3621F: Documentation/i2c/busses/i2c-piix4
3622F: Documentation/i2c/busses/i2c-sis5595
3623F: Documentation/i2c/busses/i2c-sis630
3624F: Documentation/i2c/busses/i2c-sis96x
3625F: Documentation/i2c/busses/i2c-via
3626F: Documentation/i2c/busses/i2c-viapro
3627F: drivers/i2c/busses/i2c-ali1535.c
3628F: drivers/i2c/busses/i2c-ali1563.c
3629F: drivers/i2c/busses/i2c-ali15x3.c
3630F: drivers/i2c/busses/i2c-amd756.c
3631F: drivers/i2c/busses/i2c-amd756-s4882.c
3632F: drivers/i2c/busses/i2c-amd8111.c
3633F: drivers/i2c/busses/i2c-i801.c
3634F: drivers/i2c/busses/i2c-isch.c
3635F: drivers/i2c/busses/i2c-nforce2.c
3636F: drivers/i2c/busses/i2c-nforce2-s4985.c
3637F: drivers/i2c/busses/i2c-piix4.c
3638F: drivers/i2c/busses/i2c-sis5595.c
3639F: drivers/i2c/busses/i2c-sis630.c
3640F: drivers/i2c/busses/i2c-sis96x.c
3641F: drivers/i2c/busses/i2c-via.c
3642F: drivers/i2c/busses/i2c-viapro.c
3643
3601I2C/SMBUS STUB DRIVER3644I2C/SMBUS STUB DRIVER
3602M: "Mark M. Hoffman" <mhoffman@lightlink.com>3645M: "Mark M. Hoffman" <mhoffman@lightlink.com>
3603L: linux-i2c@vger.kernel.org3646L: linux-i2c@vger.kernel.org
@@ -3605,9 +3648,8 @@ S: Maintained · 1 unmodified line
3605F: drivers/i2c/busses/i2c-stub.c3648F: drivers/i2c/busses/i2c-stub.c
3606 3649
3607I2C SUBSYSTEM3650I2C SUBSYSTEM
3608M: "Jean Delvare (PC drivers, core)" <khali@linux-fr.org>3651M: Wolfram Sang <w.sang@pengutronix.de>
3609M: "Ben Dooks (embedded platforms)" <ben-linux@fluff.org>3652M: "Ben Dooks (embedded platforms)" <ben-linux@fluff.org>
3610M: "Wolfram Sang (embedded platforms)" <w.sang@pengutronix.de>
3611L: linux-i2c@vger.kernel.org3653L: linux-i2c@vger.kernel.org
3612W: http://i2c.wiki.kernel.org/3654W: http://i2c.wiki.kernel.org/
3613T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/3655T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
@@ -3618,6 +3660,13 @@ F: drivers/i2c/ · 4 unmodified lines
3618F: include/linux/i2c.h3660F: include/linux/i2c.h
3619F: include/linux/i2c-*.h3661F: include/linux/i2c-*.h
3620 3662
3663I2C-TAOS-EVM DRIVER
3664M: Jean Delvare <khali@linux-fr.org>
3665L: linux-i2c@vger.kernel.org
3666S: Maintained
3667F: Documentation/i2c/busses/i2c-taos-evm
3668F: drivers/i2c/busses/i2c-taos-evm.c
3669
3621I2C-TINY-USB DRIVER3670I2C-TINY-USB DRIVER
3622M: Till Harbaum <till@harbaum.org>3671M: Till Harbaum <till@harbaum.org>
3623L: linux-i2c@vger.kernel.org3672L: linux-i2c@vger.kernel.org
@@ -7210,6 +7259,14 @@ L: linux-xtensa@linux-xtensa.org · 3586 unmodified lines
7210S: Maintained7259S: Maintained
7211F: arch/xtensa/7260F: arch/xtensa/
7212 7261
7262THERMAL
7263M: Zhang Rui <rui.zhang@intel.com>
7264L: linux-pm@vger.kernel.org
7265T: git git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git
7266S: Supported
7267F: drivers/thermal/
7268F: include/linux/thermal.h
7269
7213THINKPAD ACPI EXTRAS DRIVER7270THINKPAD ACPI EXTRAS DRIVER
7214M: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>7271M: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
7215L: ibm-acpi-devel@lists.sourceforge.net7272L: ibm-acpi-devel@lists.sourceforge.net
@@ -7887,13 +7944,6 @@ M: Roger Luethi <rl@hellgate.ch> · 671 unmodified lines
7887S: Maintained7944S: Maintained
7888F: drivers/net/ethernet/via/via-rhine.c7945F: drivers/net/ethernet/via/via-rhine.c
7889 7946
7890VIAPRO SMBUS DRIVER
7891M: Jean Delvare <khali@linux-fr.org>
7892L: linux-i2c@vger.kernel.org
7893S: Maintained
7894F: Documentation/i2c/busses/i2c-viapro
7895F: drivers/i2c/busses/i2c-viapro.c
7896
7897VIA SD/MMC CARD CONTROLLER DRIVER7947VIA SD/MMC CARD CONTROLLER DRIVER
7898M: Bruce Chang <brucechang@via.com.tw>7948M: Bruce Chang <brucechang@via.com.tw>
7899M: Harald Welte <HaraldWelte@viatech.com>7949M: Harald Welte <HaraldWelte@viatech.com>
Makefile+1−1
@@ -1,7 +1,7 @@
1VERSION = 31VERSION = 3
2PATCHLEVEL = 72PATCHLEVEL = 7
3SUBLEVEL = 03SUBLEVEL = 0
4EXTRAVERSION = -rc54EXTRAVERSION = -rc6
5NAME = Terrified Chipmunk5NAME = Terrified Chipmunk
6 6
7# *DOCUMENTATION*7# *DOCUMENTATION*
arch/arm/boot/Makefile+5−5
@@ -33,7 +33,7 @@ ifeq ($(CONFIG_XIP_KERNEL),y) · 32 unmodified lines
33 33
34$(obj)/xipImage: vmlinux FORCE34$(obj)/xipImage: vmlinux FORCE
35 $(call if_changed,objcopy)35 $(call if_changed,objcopy)
36 $(kecho) ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))'36 @$(kecho) ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))'
37 37
38$(obj)/Image $(obj)/zImage: FORCE38$(obj)/Image $(obj)/zImage: FORCE
39 @echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)'39 @echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)'
@@ -48,14 +48,14 @@ $(obj)/xipImage: FORCE · 8 unmodified lines
48 48
49$(obj)/Image: vmlinux FORCE49$(obj)/Image: vmlinux FORCE
50 $(call if_changed,objcopy)50 $(call if_changed,objcopy)
51 $(kecho) ' Kernel: $@ is ready'51 @$(kecho) ' Kernel: $@ is ready'
52 52
53$(obj)/compressed/vmlinux: $(obj)/Image FORCE53$(obj)/compressed/vmlinux: $(obj)/Image FORCE
54 $(Q)$(MAKE) $(build)=$(obj)/compressed $@54 $(Q)$(MAKE) $(build)=$(obj)/compressed $@
55 55
56$(obj)/zImage: $(obj)/compressed/vmlinux FORCE56$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
57 $(call if_changed,objcopy)57 $(call if_changed,objcopy)
58 $(kecho) ' Kernel: $@ is ready'58 @$(kecho) ' Kernel: $@ is ready'
59 59
60endif60endif
61 61
@@ -90,7 +90,7 @@ fi · 28 unmodified lines
90$(obj)/uImage: $(obj)/zImage FORCE90$(obj)/uImage: $(obj)/zImage FORCE
91 @$(check_for_multiple_loadaddr)91 @$(check_for_multiple_loadaddr)
92 $(call if_changed,uimage)92 $(call if_changed,uimage)
93 $(kecho) ' Image $@ is ready'93 @$(kecho) ' Image $@ is ready'
94 94
95$(obj)/bootp/bootp: $(obj)/zImage initrd FORCE95$(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
96 $(Q)$(MAKE) $(build)=$(obj)/bootp $@96 $(Q)$(MAKE) $(build)=$(obj)/bootp $@
@@ -98,7 +98,7 @@ $(obj)/bootp/bootp: $(obj)/zImage initrd FORCE · 1 unmodified line
98 98
99$(obj)/bootpImage: $(obj)/bootp/bootp FORCE99$(obj)/bootpImage: $(obj)/bootp/bootp FORCE
100 $(call if_changed,objcopy)100 $(call if_changed,objcopy)
101 $(kecho) ' Kernel: $@ is ready'101 @$(kecho) ' Kernel: $@ is ready'
102 102
103PHONY += initrd FORCE103PHONY += initrd FORCE
104initrd:104initrd:
arch/arm/boot/dts/tegra30.dtsi+2−2
@@ -73,8 +73,8 @@ · 72 unmodified lines
73 73
74 pinmux: pinmux {74 pinmux: pinmux {
75 compatible = "nvidia,tegra30-pinmux";75 compatible = "nvidia,tegra30-pinmux";
76 reg = <0x70000868 0xd0 /* Pad control registers */76 reg = <0x70000868 0xd4 /* Pad control registers */
77 0x70003000 0x3e0>; /* Mux registers */77 0x70003000 0x3e4>; /* Mux registers */
78 };78 };
79 79
80 serial@70006000 {80 serial@70006000 {
arch/arm/mach-at91/at91rm9200_devices.c+1−1
@@ -68,7 +68,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) · 67 unmodified lines
68 68
69 /* Enable overcurrent notification */69 /* Enable overcurrent notification */
70 for (i = 0; i < data->ports; i++) {70 for (i = 0; i < data->ports; i++) {
71 if (data->overcurrent_pin[i])71 if (gpio_is_valid(data->overcurrent_pin[i]))
72 at91_set_gpio_input(data->overcurrent_pin[i], 1);72 at91_set_gpio_input(data->overcurrent_pin[i], 1);
73 }73 }
74 74
arch/arm/mach-at91/at91sam9260_devices.c+1−1
@@ -72,7 +72,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) · 71 unmodified lines
72 72
73 /* Enable overcurrent notification */73 /* Enable overcurrent notification */
74 for (i = 0; i < data->ports; i++) {74 for (i = 0; i < data->ports; i++) {
75 if (data->overcurrent_pin[i])75 if (gpio_is_valid(data->overcurrent_pin[i]))
76 at91_set_gpio_input(data->overcurrent_pin[i], 1);76 at91_set_gpio_input(data->overcurrent_pin[i], 1);
77 }77 }
78 78
arch/arm/mach-at91/at91sam9261_devices.c+1−1
@@ -72,7 +72,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) · 71 unmodified lines
72 72
73 /* Enable overcurrent notification */73 /* Enable overcurrent notification */
74 for (i = 0; i < data->ports; i++) {74 for (i = 0; i < data->ports; i++) {
75 if (data->overcurrent_pin[i])75 if (gpio_is_valid(data->overcurrent_pin[i]))
76 at91_set_gpio_input(data->overcurrent_pin[i], 1);76 at91_set_gpio_input(data->overcurrent_pin[i], 1);
77 }77 }
78 78
arch/arm/mach-at91/at91sam9263_devices.c+1−1
@@ -78,7 +78,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) · 77 unmodified lines
78 78
79 /* Enable overcurrent notification */79 /* Enable overcurrent notification */
80 for (i = 0; i < data->ports; i++) {80 for (i = 0; i < data->ports; i++) {
81 if (data->overcurrent_pin[i])81 if (gpio_is_valid(data->overcurrent_pin[i]))
82 at91_set_gpio_input(data->overcurrent_pin[i], 1);82 at91_set_gpio_input(data->overcurrent_pin[i], 1);
83 }83 }
84 84
arch/arm/mach-at91/at91sam9g45_devices.c+6−6
@@ -1841,8 +1841,8 @@ static struct resource sha_resources[] = { · 1840 unmodified lines
1841 .flags = IORESOURCE_MEM,1841 .flags = IORESOURCE_MEM,
1842 },1842 },
1843 [1] = {1843 [1] = {
1844 .start = AT91SAM9G45_ID_AESTDESSHA,1844 .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
1845 .end = AT91SAM9G45_ID_AESTDESSHA,1845 .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
1846 .flags = IORESOURCE_IRQ,1846 .flags = IORESOURCE_IRQ,
1847 },1847 },
1848};1848};
@@ -1874,8 +1874,8 @@ static struct resource tdes_resources[] = { · 25 unmodified lines
1874 .flags = IORESOURCE_MEM,1874 .flags = IORESOURCE_MEM,
1875 },1875 },
1876 [1] = {1876 [1] = {
1877 .start = AT91SAM9G45_ID_AESTDESSHA,1877 .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
1878 .end = AT91SAM9G45_ID_AESTDESSHA,1878 .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
1879 .flags = IORESOURCE_IRQ,1879 .flags = IORESOURCE_IRQ,
1880 },1880 },
1881};1881};
@@ -1910,8 +1910,8 @@ static struct resource aes_resources[] = { · 28 unmodified lines
1910 .flags = IORESOURCE_MEM,1910 .flags = IORESOURCE_MEM,
1911 },1911 },
1912 [1] = {1912 [1] = {
1913 .start = AT91SAM9G45_ID_AESTDESSHA,1913 .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
1914 .end = AT91SAM9G45_ID_AESTDESSHA,1914 .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
1915 .flags = IORESOURCE_IRQ,1915 .flags = IORESOURCE_IRQ,
1916 },1916 },
1917};1917};
arch/arm/mach-highbank/system.c+2−1
@@ -28,6 +28,7 @@ void highbank_restart(char mode, const char *cmd) · 27 unmodified lines
28 hignbank_set_pwr_soft_reset();28 hignbank_set_pwr_soft_reset();
29 29
30 scu_power_mode(scu_base_addr, SCU_PM_POWEROFF);30 scu_power_mode(scu_base_addr, SCU_PM_POWEROFF);
31 cpu_do_idle();31 while (1)
32 cpu_do_idle();
32}33}
33 34
arch/arm/mach-imx/clk-gate2.c+1−1
@@ -112,7 +112,7 @@ struct clk *clk_register_gate2(struct device *dev, const char *name, · 111 unmodified lines
112 112
113 clk = clk_register(dev, &gate->hw);113 clk = clk_register(dev, &gate->hw);
114 if (IS_ERR(clk))114 if (IS_ERR(clk))
115 kfree(clk);115 kfree(gate);
116 116
117 return clk;117 return clk;
118}118}
arch/arm/mach-imx/ehci-imx25.c+1−1
@@ -30,7 +30,7 @@ · 29 unmodified lines
30#define MX25_H1_SIC_SHIFT 2130#define MX25_H1_SIC_SHIFT 21
31#define MX25_H1_SIC_MASK (0x3 << MX25_H1_SIC_SHIFT)31#define MX25_H1_SIC_MASK (0x3 << MX25_H1_SIC_SHIFT)
32#define MX25_H1_PP_BIT (1 << 18)32#define MX25_H1_PP_BIT (1 << 18)
33#define MX25_H1_PM_BIT (1 << 8)33#define MX25_H1_PM_BIT (1 << 16)
34#define MX25_H1_IPPUE_UP_BIT (1 << 7)34#define MX25_H1_IPPUE_UP_BIT (1 << 7)
35#define MX25_H1_IPPUE_DOWN_BIT (1 << 6)35#define MX25_H1_IPPUE_DOWN_BIT (1 << 6)
36#define MX25_H1_TLL_BIT (1 << 5)36#define MX25_H1_TLL_BIT (1 << 5)
arch/arm/mach-imx/ehci-imx35.c+1−1
@@ -30,7 +30,7 @@ · 29 unmodified lines
30#define MX35_H1_SIC_SHIFT 2130#define MX35_H1_SIC_SHIFT 21
31#define MX35_H1_SIC_MASK (0x3 << MX35_H1_SIC_SHIFT)31#define MX35_H1_SIC_MASK (0x3 << MX35_H1_SIC_SHIFT)
32#define MX35_H1_PP_BIT (1 << 18)32#define MX35_H1_PP_BIT (1 << 18)
33#define MX35_H1_PM_BIT (1 << 8)33#define MX35_H1_PM_BIT (1 << 16)
34#define MX35_H1_IPPUE_UP_BIT (1 << 7)34#define MX35_H1_IPPUE_UP_BIT (1 << 7)
35#define MX35_H1_IPPUE_DOWN_BIT (1 << 6)35#define MX35_H1_IPPUE_DOWN_BIT (1 << 6)
36#define MX35_H1_TLL_BIT (1 << 5)36#define MX35_H1_TLL_BIT (1 << 5)
arch/arm/mach-omap2/clockdomains44xx_data.c+1−1
@@ -359,7 +359,7 @@ static struct clockdomain iss_44xx_clkdm = { · 358 unmodified lines
359 .clkdm_offs = OMAP4430_CM2_CAM_CAM_CDOFFS,359 .clkdm_offs = OMAP4430_CM2_CAM_CAM_CDOFFS,
360 .wkdep_srcs = iss_wkup_sleep_deps,360 .wkdep_srcs = iss_wkup_sleep_deps,
361 .sleepdep_srcs = iss_wkup_sleep_deps,361 .sleepdep_srcs = iss_wkup_sleep_deps,
362 .flags = CLKDM_CAN_HWSUP_SWSUP,362 .flags = CLKDM_CAN_SWSUP,
363};363};
364 364
365static struct clockdomain l3_dss_44xx_clkdm = {365static struct clockdomain l3_dss_44xx_clkdm = {
arch/arm/mach-omap2/devices.c+79−0
@@ -19,6 +19,7 @@ · 18 unmodified lines
19#include <linux/of.h>19#include <linux/of.h>
20#include <linux/pinctrl/machine.h>20#include <linux/pinctrl/machine.h>
21#include <linux/platform_data/omap4-keypad.h>21#include <linux/platform_data/omap4-keypad.h>
22#include <linux/platform_data/omap_ocp2scp.h>
22 23
23#include <asm/mach-types.h>24#include <asm/mach-types.h>
24#include <asm/mach/map.h>25#include <asm/mach/map.h>
@@ -613,6 +614,83 @@ static void omap_init_vout(void) · 588 unmodified lines
613static inline void omap_init_vout(void) {}614static inline void omap_init_vout(void) {}
614#endif615#endif
615 616
617#if defined(CONFIG_OMAP_OCP2SCP) || defined(CONFIG_OMAP_OCP2SCP_MODULE)
618static int count_ocp2scp_devices(struct omap_ocp2scp_dev *ocp2scp_dev)
619{
620 int cnt = 0;
621
622 while (ocp2scp_dev->drv_name != NULL) {
623 cnt++;
624 ocp2scp_dev++;
625 }
626
627 return cnt;
628}
629
630static void omap_init_ocp2scp(void)
631{
632 struct omap_hwmod *oh;
633 struct platform_device *pdev;
634 int bus_id = -1, dev_cnt = 0, i;
635 struct omap_ocp2scp_dev *ocp2scp_dev;
636 const char *oh_name, *name;
637 struct omap_ocp2scp_platform_data *pdata;
638
639 if (!cpu_is_omap44xx())
640 return;
641
642 oh_name = "ocp2scp_usb_phy";
643 name = "omap-ocp2scp";
644
645 oh = omap_hwmod_lookup(oh_name);
646 if (!oh) {
647 pr_err("%s: could not find omap_hwmod for %s\n", __func__,
648 oh_name);
649 return;
650 }
651
652 pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
653 if (!pdata) {
654 pr_err("%s: No memory for ocp2scp pdata\n", __func__);
655 return;
656 }
657
658 ocp2scp_dev = oh->dev_attr;
659 dev_cnt = count_ocp2scp_devices(ocp2scp_dev);
660
661 if (!dev_cnt) {
662 pr_err("%s: No devices connected to ocp2scp\n", __func__);
663 kfree(pdata);
664 return;
665 }
666
667 pdata->devices = kzalloc(sizeof(struct omap_ocp2scp_dev *)
668 * dev_cnt, GFP_KERNEL);
669 if (!pdata->devices) {
670 pr_err("%s: No memory for ocp2scp pdata devices\n", __func__);
671 kfree(pdata);
672 return;
673 }
674
675 for (i = 0; i < dev_cnt; i++, ocp2scp_dev++)
676 pdata->devices[i] = ocp2scp_dev;
677
678 pdata->dev_cnt = dev_cnt;
679
680 pdev = omap_device_build(name, bus_id, oh, pdata, sizeof(*pdata), NULL,
681 0, false);
682 if (IS_ERR(pdev)) {
683 pr_err("Could not build omap_device for %s %s\n",
684 name, oh_name);
685 kfree(pdata->devices);
686 kfree(pdata);
687 return;
688 }
689}
690#else
691static inline void omap_init_ocp2scp(void) { }
692#endif
693
616/*-------------------------------------------------------------------------*/694/*-------------------------------------------------------------------------*/
617 695
618static int __init omap2_init_devices(void)696static int __init omap2_init_devices(void)
@@ -640,6 +718,7 @@ static int __init omap2_init_devices(void) · 21 unmodified lines
640 omap_init_sham();718 omap_init_sham();
641 omap_init_aes();719 omap_init_aes();
642 omap_init_vout();720 omap_init_vout();
721 omap_init_ocp2scp();
643 722
644 return 0;723 return 0;
645}724}
arch/arm/mach-omap2/omap_hwmod.c+49−14
@@ -421,6 +421,38 @@ static int _set_softreset(struct omap_hwmod *oh, u32 *v) · 420 unmodified lines
421 return 0;421 return 0;
422}422}
423 423
424/**
425 * _wait_softreset_complete - wait for an OCP softreset to complete
426 * @oh: struct omap_hwmod * to wait on
427 *
428 * Wait until the IP block represented by @oh reports that its OCP
429 * softreset is complete. This can be triggered by software (see
430 * _ocp_softreset()) or by hardware upon returning from off-mode (one
431 * example is HSMMC). Waits for up to MAX_MODULE_SOFTRESET_WAIT
432 * microseconds. Returns the number of microseconds waited.
433 */
434static int _wait_softreset_complete(struct omap_hwmod *oh)
435{
436 struct omap_hwmod_class_sysconfig *sysc;
437 u32 softrst_mask;
438 int c = 0;
439
440 sysc = oh->class->sysc;
441
442 if (sysc->sysc_flags & SYSS_HAS_RESET_STATUS)
443 omap_test_timeout((omap_hwmod_read(oh, sysc->syss_offs)
444 & SYSS_RESETDONE_MASK),
445 MAX_MODULE_SOFTRESET_WAIT, c);
446 else if (sysc->sysc_flags & SYSC_HAS_RESET_STATUS) {
447 softrst_mask = (0x1 << sysc->sysc_fields->srst_shift);
448 omap_test_timeout(!(omap_hwmod_read(oh, sysc->sysc_offs)
449 & softrst_mask),
450 MAX_MODULE_SOFTRESET_WAIT, c);
451 }
452
453 return c;
454}
455
424/**456/**
425 * _set_dmadisable: set OCP_SYSCONFIG.DMADISABLE bit in @v457 * _set_dmadisable: set OCP_SYSCONFIG.DMADISABLE bit in @v
426 * @oh: struct omap_hwmod *458 * @oh: struct omap_hwmod *
@@ -1282,6 +1314,18 @@ static void _enable_sysc(struct omap_hwmod *oh) · 855 unmodified lines
1282 if (!oh->class->sysc)1314 if (!oh->class->sysc)
1283 return;1315 return;
1284 1316
1317 /*
1318 * Wait until reset has completed, this is needed as the IP
1319 * block is reset automatically by hardware in some cases
1320 * (off-mode for example), and the drivers require the
1321 * IP to be ready when they access it
1322 */
1323 if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET)
1324 _enable_optional_clocks(oh);
1325 _wait_softreset_complete(oh);
1326 if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET)
1327 _disable_optional_clocks(oh);
1328
1285 v = oh->_sysc_cache;1329 v = oh->_sysc_cache;
1286 sf = oh->class->sysc->sysc_flags;1330 sf = oh->class->sysc->sysc_flags;
1287 1331
@@ -1804,7 +1848,7 @@ static int _am33xx_disable_module(struct omap_hwmod *oh) · 516 unmodified lines
1804 */1848 */
1805static int _ocp_softreset(struct omap_hwmod *oh)1849static int _ocp_softreset(struct omap_hwmod *oh)
1806{1850{
1807 u32 v, softrst_mask;1851 u32 v;
1808 int c = 0;1852 int c = 0;
1809 int ret = 0;1853 int ret = 0;
1810 1854
@@ -1834,19 +1878,7 @@ static int _ocp_softreset(struct omap_hwmod *oh) · 23 unmodified lines
1834 if (oh->class->sysc->srst_udelay)1878 if (oh->class->sysc->srst_udelay)
1835 udelay(oh->class->sysc->srst_udelay);1879 udelay(oh->class->sysc->srst_udelay);
1836 1880
1837 if (oh->class->sysc->sysc_flags & SYSS_HAS_RESET_STATUS)1881 c = _wait_softreset_complete(oh);
1838 omap_test_timeout((omap_hwmod_read(oh,
1839 oh->class->sysc->syss_offs)
1840 & SYSS_RESETDONE_MASK),
1841 MAX_MODULE_SOFTRESET_WAIT, c);
1842 else if (oh->class->sysc->sysc_flags & SYSC_HAS_RESET_STATUS) {
1843 softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift);
1844 omap_test_timeout(!(omap_hwmod_read(oh,
1845 oh->class->sysc->sysc_offs)
1846 & softrst_mask),
1847 MAX_MODULE_SOFTRESET_WAIT, c);
1848 }
1849
1850 if (c == MAX_MODULE_SOFTRESET_WAIT)1882 if (c == MAX_MODULE_SOFTRESET_WAIT)
1851 pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n",1883 pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n",
1852 oh->name, MAX_MODULE_SOFTRESET_WAIT);1884 oh->name, MAX_MODULE_SOFTRESET_WAIT);
@@ -2352,6 +2384,9 @@ static int __init _setup_reset(struct omap_hwmod *oh) · 499 unmodified lines
2352 if (oh->_state != _HWMOD_STATE_INITIALIZED)2384 if (oh->_state != _HWMOD_STATE_INITIALIZED)
2353 return -EINVAL;2385 return -EINVAL;
2354 2386
2387 if (oh->flags & HWMOD_EXT_OPT_MAIN_CLK)
2388 return -EPERM;
2389
2355 if (oh->rst_lines_cnt == 0) {2390 if (oh->rst_lines_cnt == 0) {
2356 r = _enable(oh);2391 r = _enable(oh);
2357 if (r) {2392 if (r) {
arch/arm/mach-omap2/omap_hwmod_44xx_data.c+36−0
@@ -21,6 +21,7 @@ · 20 unmodified lines
21#include <linux/io.h>21#include <linux/io.h>
22#include <linux/platform_data/gpio-omap.h>22#include <linux/platform_data/gpio-omap.h>
23#include <linux/power/smartreflex.h>23#include <linux/power/smartreflex.h>
24#include <linux/platform_data/omap_ocp2scp.h>
24 25
25#include <plat/omap_hwmod.h>26#include <plat/omap_hwmod.h>
26#include <plat/i2c.h>27#include <plat/i2c.h>
@@ -2125,6 +2126,14 @@ static struct omap_hwmod omap44xx_mcpdm_hwmod = { · 2098 unmodified lines
2125 .name = "mcpdm",2126 .name = "mcpdm",
2126 .class = &omap44xx_mcpdm_hwmod_class,2127 .class = &omap44xx_mcpdm_hwmod_class,
2127 .clkdm_name = "abe_clkdm",2128 .clkdm_name = "abe_clkdm",
2129 /*
2130 * It's suspected that the McPDM requires an off-chip main
2131 * functional clock, controlled via I2C. This IP block is
2132 * currently reset very early during boot, before I2C is
2133 * available, so it doesn't seem that we have any choice in
2134 * the kernel other than to avoid resetting it.
2135 */
2136 .flags = HWMOD_EXT_OPT_MAIN_CLK,
2128 .mpu_irqs = omap44xx_mcpdm_irqs,2137 .mpu_irqs = omap44xx_mcpdm_irqs,
2129 .sdma_reqs = omap44xx_mcpdm_sdma_reqs,2138 .sdma_reqs = omap44xx_mcpdm_sdma_reqs,
2130 .main_clk = "mcpdm_fck",2139 .main_clk = "mcpdm_fck",
@@ -2681,6 +2690,32 @@ static struct omap_hwmod_class omap44xx_ocp2scp_hwmod_class = { · 550 unmodified lines
2681 .sysc = &omap44xx_ocp2scp_sysc,2690 .sysc = &omap44xx_ocp2scp_sysc,
2682};2691};
2683 2692
2693/* ocp2scp dev_attr */
2694static struct resource omap44xx_usb_phy_and_pll_addrs[] = {
2695 {
2696 .name = "usb_phy",
2697 .start = 0x4a0ad080,
2698 .end = 0x4a0ae000,
2699 .flags = IORESOURCE_MEM,
2700 },
2701 {
2702 /* XXX: Remove this once control module driver is in place */
2703 .name = "ctrl_dev",
2704 .start = 0x4a002300,
2705 .end = 0x4a002303,
2706 .flags = IORESOURCE_MEM,
2707 },
2708 { }
2709};
2710
2711static struct omap_ocp2scp_dev ocp2scp_dev_attr[] = {
2712 {
2713 .drv_name = "omap-usb2",
2714 .res = omap44xx_usb_phy_and_pll_addrs,
2715 },
2716 { }
2717};
2718
2684/* ocp2scp_usb_phy */2719/* ocp2scp_usb_phy */
2685static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {2720static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
2686 .name = "ocp2scp_usb_phy",2721 .name = "ocp2scp_usb_phy",
@@ -2694,6 +2729,7 @@ static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = { · 7 unmodified lines
2694 .modulemode = MODULEMODE_HWCTRL,2729 .modulemode = MODULEMODE_HWCTRL,
2695 },2730 },
2696 },2731 },
2732 .dev_attr = ocp2scp_dev_attr,
2697};2733};
2698 2734
2699/*2735/*
arch/arm/mach-omap2/twl-common.c+1−1
@@ -366,7 +366,7 @@ static struct regulator_init_data omap4_clk32kg_idata = { · 365 unmodified lines
366};366};
367 367
368static struct regulator_consumer_supply omap4_vdd1_supply[] = {368static struct regulator_consumer_supply omap4_vdd1_supply[] = {
369 REGULATOR_SUPPLY("vcc", "mpu.0"),369 REGULATOR_SUPPLY("vcc", "cpu0"),
370};370};
371 371
372static struct regulator_consumer_supply omap4_vdd2_supply[] = {372static struct regulator_consumer_supply omap4_vdd2_supply[] = {
arch/arm/mach-omap2/vc.c+1−1
@@ -264,7 +264,7 @@ static void __init omap_vc_i2c_init(struct voltagedomain *voltdm) · 263 unmodified lines
264 264
265 if (initialized) {265 if (initialized) {
266 if (voltdm->pmic->i2c_high_speed != i2c_high_speed)266 if (voltdm->pmic->i2c_high_speed != i2c_high_speed)
267 pr_warn("%s: I2C config for vdd_%s does not match other channels (%u).",267 pr_warn("%s: I2C config for vdd_%s does not match other channels (%u).\n",
268 __func__, voltdm->name, i2c_high_speed);268 __func__, voltdm->name, i2c_high_speed);
269 return;269 return;
270 }270 }
arch/arm/mach-pxa/hx4700.c+7−1
@@ -28,6 +28,7 @@ · 27 unmodified lines
28#include <linux/mfd/asic3.h>28#include <linux/mfd/asic3.h>
29#include <linux/mtd/physmap.h>29#include <linux/mtd/physmap.h>
30#include <linux/pda_power.h>30#include <linux/pda_power.h>
31#include <linux/pwm.h>
31#include <linux/pwm_backlight.h>32#include <linux/pwm_backlight.h>
32#include <linux/regulator/driver.h>33#include <linux/regulator/driver.h>
33#include <linux/regulator/gpio-regulator.h>34#include <linux/regulator/gpio-regulator.h>
@@ -556,7 +557,7 @@ static struct platform_device hx4700_lcd = { · 522 unmodified lines
556 */557 */
557 558
558static struct platform_pwm_backlight_data backlight_data = {559static struct platform_pwm_backlight_data backlight_data = {
559 .pwm_id = 1,560 .pwm_id = -1, /* Superseded by pwm_lookup */
560 .max_brightness = 200,561 .max_brightness = 200,
561 .dft_brightness = 100,562 .dft_brightness = 100,
562 .pwm_period_ns = 30923,563 .pwm_period_ns = 30923,
@@ -571,6 +572,10 @@ static struct platform_device backlight = { · 8 unmodified lines
571 },572 },
572};573};
573 574
575static struct pwm_lookup hx4700_pwm_lookup[] = {
576 PWM_LOOKUP("pxa27x-pwm.1", 0, "pwm-backlight", NULL),
577};
578
574/*579/*
575 * USB "Transceiver"580 * USB "Transceiver"
576 */581 */
@@ -872,6 +877,7 @@ static void __init hx4700_init(void) · 295 unmodified lines
872 pxa_set_stuart_info(NULL);877 pxa_set_stuart_info(NULL);
873 878
874 platform_add_devices(devices, ARRAY_SIZE(devices));879 platform_add_devices(devices, ARRAY_SIZE(devices));
880 pwm_add_table(hx4700_pwm_lookup, ARRAY_SIZE(hx4700_pwm_lookup));
875 881
876 pxa_set_ficp_info(&ficp_info);882 pxa_set_ficp_info(&ficp_info);
877 pxa27x_set_i2c_power_info(NULL);883 pxa27x_set_i2c_power_info(NULL);
arch/arm/mach-pxa/spitz_pm.c+2−6
@@ -86,10 +86,7 @@ static void spitz_discharge1(int on) · 85 unmodified lines
86 gpio_set_value(SPITZ_GPIO_LED_GREEN, on);86 gpio_set_value(SPITZ_GPIO_LED_GREEN, on);
87}87}
88 88
89static unsigned long gpio18_config[] = {89static unsigned long gpio18_config = GPIO18_GPIO;
90 GPIO18_RDY,
91 GPIO18_GPIO,
92};
93 90
94static void spitz_presuspend(void)91static void spitz_presuspend(void)
95{92{
@@ -112,7 +109,7 @@ static void spitz_presuspend(void) · 16 unmodified lines
112 PGSR3 &= ~SPITZ_GPIO_G3_STROBE_BIT;109 PGSR3 &= ~SPITZ_GPIO_G3_STROBE_BIT;
113 PGSR2 |= GPIO_bit(SPITZ_GPIO_KEY_STROBE0);110 PGSR2 |= GPIO_bit(SPITZ_GPIO_KEY_STROBE0);
114 111
115 pxa2xx_mfp_config(&gpio18_config[0], 1);112 pxa2xx_mfp_config(&gpio18_config, 1);
116 gpio_request_one(18, GPIOF_OUT_INIT_HIGH, "Unknown");113 gpio_request_one(18, GPIOF_OUT_INIT_HIGH, "Unknown");
117 gpio_free(18);114 gpio_free(18);
118 115
@@ -131,7 +128,6 @@ static void spitz_presuspend(void) · 12 unmodified lines
131 128
132static void spitz_postsuspend(void)129static void spitz_postsuspend(void)
133{130{
134 pxa2xx_mfp_config(&gpio18_config[1], 1);
135}131}
136 132
137static int spitz_should_wakeup(unsigned int resume_on_alarm)133static int spitz_should_wakeup(unsigned int resume_on_alarm)
arch/arm/plat-omap/include/plat/omap_hwmod.h+6−0
@@ -443,6 +443,11 @@ struct omap_hwmod_omap4_prcm { · 442 unmodified lines
443 * in order to complete the reset. Optional clocks will be disabled443 * in order to complete the reset. Optional clocks will be disabled
444 * again after the reset.444 * again after the reset.
445 * HWMOD_16BIT_REG: Module has 16bit registers445 * HWMOD_16BIT_REG: Module has 16bit registers
446 * HWMOD_EXT_OPT_MAIN_CLK: The only main functional clock source for
447 * this IP block comes from an off-chip source and is not always
448 * enabled. This prevents the hwmod code from being able to
449 * enable and reset the IP block early. XXX Eventually it should
450 * be possible to query the clock framework for this information.
446 */451 */
447#define HWMOD_SWSUP_SIDLE (1 << 0)452#define HWMOD_SWSUP_SIDLE (1 << 0)
448#define HWMOD_SWSUP_MSTANDBY (1 << 1)453#define HWMOD_SWSUP_MSTANDBY (1 << 1)
@@ -453,6 +458,7 @@ struct omap_hwmod_omap4_prcm { · 4 unmodified lines
453#define HWMOD_NO_IDLEST (1 << 6)458#define HWMOD_NO_IDLEST (1 << 6)
454#define HWMOD_CONTROL_OPT_CLKS_IN_RESET (1 << 7)459#define HWMOD_CONTROL_OPT_CLKS_IN_RESET (1 << 7)
455#define HWMOD_16BIT_REG (1 << 8)460#define HWMOD_16BIT_REG (1 << 8)
461#define HWMOD_EXT_OPT_MAIN_CLK (1 << 9)
456 462
457/*463/*
458 * omap_hwmod._int_flags definitions464 * omap_hwmod._int_flags definitions
arch/arm/tools/Makefile+1−1
@@ -5,6 +5,6 @@ · 4 unmodified lines
5#5#
6 6
7include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types7include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
8 $(kecho) ' Generating $@'8 @$(kecho) ' Generating $@'
9 @mkdir -p $(dir $@)9 @mkdir -p $(dir $@)
10 $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }10 $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }
arch/arm64/include/asm/io.h+1−1
@@ -222,7 +222,7 @@ extern void __iomem *__ioremap(phys_addr_t phys_addr, size_t size, pgprot_t prot · 221 unmodified lines
222extern void __iounmap(volatile void __iomem *addr);222extern void __iounmap(volatile void __iomem *addr);
223 223
224#define PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_DIRTY)224#define PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_DIRTY)
225#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_XN | PTE_ATTRINDX(MT_DEVICE_nGnRE))225#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_ATTRINDX(MT_DEVICE_nGnRE))
226#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC))226#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC))
227 227
228#define ioremap(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))228#define ioremap(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
arch/arm64/include/asm/pgtable-hwdef.h+4−2
@@ -38,7 +38,8 @@ · 37 unmodified lines
38#define PMD_SECT_S (_AT(pmdval_t, 3) << 8)38#define PMD_SECT_S (_AT(pmdval_t, 3) << 8)
39#define PMD_SECT_AF (_AT(pmdval_t, 1) << 10)39#define PMD_SECT_AF (_AT(pmdval_t, 1) << 10)
40#define PMD_SECT_NG (_AT(pmdval_t, 1) << 11)40#define PMD_SECT_NG (_AT(pmdval_t, 1) << 11)
41#define PMD_SECT_XN (_AT(pmdval_t, 1) << 54)41#define PMD_SECT_PXN (_AT(pmdval_t, 1) << 53)
42#define PMD_SECT_UXN (_AT(pmdval_t, 1) << 54)
42 43
43/*44/*
44 * AttrIndx[2:0] encoding (mapping attributes defined in the MAIR* registers).45 * AttrIndx[2:0] encoding (mapping attributes defined in the MAIR* registers).
@@ -57,7 +58,8 @@ · 12 unmodified lines
57#define PTE_SHARED (_AT(pteval_t, 3) << 8) /* SH[1:0], inner shareable */58#define PTE_SHARED (_AT(pteval_t, 3) << 8) /* SH[1:0], inner shareable */
58#define PTE_AF (_AT(pteval_t, 1) << 10) /* Access Flag */59#define PTE_AF (_AT(pteval_t, 1) << 10) /* Access Flag */
59#define PTE_NG (_AT(pteval_t, 1) << 11) /* nG */60#define PTE_NG (_AT(pteval_t, 1) << 11) /* nG */
60#define PTE_XN (_AT(pteval_t, 1) << 54) /* XN */61#define PTE_PXN (_AT(pteval_t, 1) << 53) /* Privileged XN */
62#define PTE_UXN (_AT(pteval_t, 1) << 54) /* User XN */
61 63
62/*64/*
63 * AttrIndx[2:0] encoding (mapping attributes defined in the MAIR* registers).65 * AttrIndx[2:0] encoding (mapping attributes defined in the MAIR* registers).
arch/arm64/include/asm/pgtable.h+20−20
@@ -62,23 +62,23 @@ extern pgprot_t pgprot_default; · 61 unmodified lines
62 62
63#define _MOD_PROT(p, b) __pgprot(pgprot_val(p) | (b))63#define _MOD_PROT(p, b) __pgprot(pgprot_val(p) | (b))
64 64
65#define PAGE_NONE _MOD_PROT(pgprot_default, PTE_NG | PTE_XN | PTE_RDONLY)65#define PAGE_NONE _MOD_PROT(pgprot_default, PTE_NG | PTE_PXN | PTE_UXN | PTE_RDONLY)
66#define PAGE_SHARED _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_XN)66#define PAGE_SHARED _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
67#define PAGE_SHARED_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG)67#define PAGE_SHARED_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN)
68#define PAGE_COPY _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_XN | PTE_RDONLY)68#define PAGE_COPY _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_RDONLY)
69#define PAGE_COPY_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_RDONLY)69#define PAGE_COPY_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_RDONLY)
70#define PAGE_READONLY _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_XN | PTE_RDONLY)70#define PAGE_READONLY _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_RDONLY)
71#define PAGE_READONLY_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_RDONLY)71#define PAGE_READONLY_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_RDONLY)
72#define PAGE_KERNEL _MOD_PROT(pgprot_default, PTE_XN | PTE_DIRTY)72#define PAGE_KERNEL _MOD_PROT(pgprot_default, PTE_PXN | PTE_UXN | PTE_DIRTY)
73#define PAGE_KERNEL_EXEC _MOD_PROT(pgprot_default, PTE_DIRTY)73#define PAGE_KERNEL_EXEC _MOD_PROT(pgprot_default, PTE_UXN | PTE_DIRTY)
74 74
75#define __PAGE_NONE __pgprot(_PAGE_DEFAULT | PTE_NG | PTE_XN | PTE_RDONLY)75#define __PAGE_NONE __pgprot(_PAGE_DEFAULT | PTE_NG | PTE_PXN | PTE_UXN | PTE_RDONLY)
76#define __PAGE_SHARED __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_XN)76#define __PAGE_SHARED __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
77#define __PAGE_SHARED_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG)77#define __PAGE_SHARED_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN)
78#define __PAGE_COPY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_XN | PTE_RDONLY)78#define __PAGE_COPY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_RDONLY)
79#define __PAGE_COPY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_RDONLY)79#define __PAGE_COPY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_RDONLY)
80#define __PAGE_READONLY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_XN | PTE_RDONLY)80#define __PAGE_READONLY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_RDONLY)
81#define __PAGE_READONLY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_RDONLY)81#define __PAGE_READONLY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_RDONLY)
82 82
83#endif /* __ASSEMBLY__ */83#endif /* __ASSEMBLY__ */
84 84
@@ -130,10 +130,10 @@ extern struct page *empty_zero_page; · 45 unmodified lines
130#define pte_young(pte) (pte_val(pte) & PTE_AF)130#define pte_young(pte) (pte_val(pte) & PTE_AF)
131#define pte_special(pte) (pte_val(pte) & PTE_SPECIAL)131#define pte_special(pte) (pte_val(pte) & PTE_SPECIAL)
132#define pte_write(pte) (!(pte_val(pte) & PTE_RDONLY))132#define pte_write(pte) (!(pte_val(pte) & PTE_RDONLY))
133#define pte_exec(pte) (!(pte_val(pte) & PTE_XN))133#define pte_exec(pte) (!(pte_val(pte) & PTE_UXN))
134 134
135#define pte_present_exec_user(pte) \135#define pte_present_exec_user(pte) \
136 ((pte_val(pte) & (PTE_VALID | PTE_USER | PTE_XN)) == \136 ((pte_val(pte) & (PTE_VALID | PTE_USER | PTE_UXN)) == \
137 (PTE_VALID | PTE_USER))137 (PTE_VALID | PTE_USER))
138 138
139#define PTE_BIT_FUNC(fn,op) \139#define PTE_BIT_FUNC(fn,op) \
@@ -262,7 +262,7 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr) · 122 unmodified lines
262 262
263static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)263static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
264{264{
265 const pteval_t mask = PTE_USER | PTE_XN | PTE_RDONLY;265 const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY;
266 pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);266 pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
267 return pte;267 return pte;
268}268}
arch/ia64/mm/init.c+0−1
@@ -637,7 +637,6 @@ mem_init (void) · 636 unmodified lines
637 637
638 high_memory = __va(max_low_pfn * PAGE_SIZE);638 high_memory = __va(max_low_pfn * PAGE_SIZE);
639 639
640 reset_zone_present_pages();
641 for_each_online_pgdat(pgdat)640 for_each_online_pgdat(pgdat)
642 if (pgdat->bdata->node_bootmem_map)641 if (pgdat->bdata->node_bootmem_map)
643 totalram_pages += free_all_bootmem_node(pgdat);642 totalram_pages += free_all_bootmem_node(pgdat);
arch/mips/cavium-octeon/executive/cvmx-l2c.c+1−0
@@ -30,6 +30,7 @@ · 29 unmodified lines
30 * measurement, and debugging facilities.30 * measurement, and debugging facilities.
31 */31 */
32 32
33#include <linux/irqflags.h>
33#include <asm/octeon/cvmx.h>34#include <asm/octeon/cvmx.h>
34#include <asm/octeon/cvmx-l2c.h>35#include <asm/octeon/cvmx-l2c.h>
35#include <asm/octeon/cvmx-spinlock.h>36#include <asm/octeon/cvmx-spinlock.h>
arch/mips/fw/arc/misc.c+1−0
@@ -11,6 +11,7 @@ · 10 unmodified lines
11 */11 */
12#include <linux/init.h>12#include <linux/init.h>
13#include <linux/kernel.h>13#include <linux/kernel.h>
14#include <linux/irqflags.h>
14 15
15#include <asm/bcache.h>16#include <asm/bcache.h>
16 17
arch/mips/include/asm/bitops.h+39−89
@@ -14,7 +14,6 @@ · 13 unmodified lines
14#endif14#endif
15 15
16#include <linux/compiler.h>16#include <linux/compiler.h>
17#include <linux/irqflags.h>
18#include <linux/types.h>17#include <linux/types.h>
19#include <asm/barrier.h>18#include <asm/barrier.h>
20#include <asm/byteorder.h> /* sigh ... */19#include <asm/byteorder.h> /* sigh ... */
@@ -44,6 +43,24 @@ · 23 unmodified lines
44#define smp_mb__before_clear_bit() smp_mb__before_llsc()43#define smp_mb__before_clear_bit() smp_mb__before_llsc()
45#define smp_mb__after_clear_bit() smp_llsc_mb()44#define smp_mb__after_clear_bit() smp_llsc_mb()
46 45
46
47/*
48 * These are the "slower" versions of the functions and are in bitops.c.
49 * These functions call raw_local_irq_{save,restore}().
50 */
51void __mips_set_bit(unsigned long nr, volatile unsigned long *addr);
52void __mips_clear_bit(unsigned long nr, volatile unsigned long *addr);
53void __mips_change_bit(unsigned long nr, volatile unsigned long *addr);
54int __mips_test_and_set_bit(unsigned long nr,
55 volatile unsigned long *addr);
56int __mips_test_and_set_bit_lock(unsigned long nr,
57 volatile unsigned long *addr);
58int __mips_test_and_clear_bit(unsigned long nr,
59 volatile unsigned long *addr);
60int __mips_test_and_change_bit(unsigned long nr,
61 volatile unsigned long *addr);
62
63
47/*64/*
48 * set_bit - Atomically set a bit in memory65 * set_bit - Atomically set a bit in memory
49 * @nr: the bit to set66 * @nr: the bit to set
@@ -57,7 +74,7 @@ · 7 unmodified lines
57static inline void set_bit(unsigned long nr, volatile unsigned long *addr)74static inline void set_bit(unsigned long nr, volatile unsigned long *addr)
58{75{
59 unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG);76 unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG);
60 unsigned short bit = nr & SZLONG_MASK;77 int bit = nr & SZLONG_MASK;
61 unsigned long temp;78 unsigned long temp;
62 79
63 if (kernel_uses_llsc && R10000_LLSC_WAR) {80 if (kernel_uses_llsc && R10000_LLSC_WAR) {
@@ -92,17 +109,8 @@ static inline void set_bit(unsigned long nr, volatile unsigned long *addr) · 28 unmodified lines
92 : "=&r" (temp), "+m" (*m)109 : "=&r" (temp), "+m" (*m)
93 : "ir" (1UL << bit));110 : "ir" (1UL << bit));
94 } while (unlikely(!temp));111 } while (unlikely(!temp));
95 } else {112 } else
96 volatile unsigned long *a = addr;113 __mips_set_bit(nr, addr);
97 unsigned long mask;
98 unsigned long flags;
99
100 a += nr >> SZLONG_LOG;
101 mask = 1UL << bit;
102 raw_local_irq_save(flags);
103 *a |= mask;
104 raw_local_irq_restore(flags);
105 }
106}114}
107 115
108/*116/*
@@ -118,7 +126,7 @@ static inline void set_bit(unsigned long nr, volatile unsigned long *addr) · 9 unmodified lines
118static inline void clear_bit(unsigned long nr, volatile unsigned long *addr)126static inline void clear_bit(unsigned long nr, volatile unsigned long *addr)
119{127{
120 unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG);128 unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG);
121 unsigned short bit = nr & SZLONG_MASK;129 int bit = nr & SZLONG_MASK;
122 unsigned long temp;130 unsigned long temp;
123 131
124 if (kernel_uses_llsc && R10000_LLSC_WAR) {132 if (kernel_uses_llsc && R10000_LLSC_WAR) {
@@ -153,17 +161,8 @@ static inline void clear_bit(unsigned long nr, volatile unsigned long *addr) · 28 unmodified lines
153 : "=&r" (temp), "+m" (*m)161 : "=&r" (temp), "+m" (*m)
154 : "ir" (~(1UL << bit)));162 : "ir" (~(1UL << bit)));
155 } while (unlikely(!temp));163 } while (unlikely(!temp));
156 } else {164 } else
157 volatile unsigned long *a = addr;165 __mips_clear_bit(nr, addr);
158 unsigned long mask;
159 unsigned long flags;
160
161 a += nr >> SZLONG_LOG;
162 mask = 1UL << bit;
163 raw_local_irq_save(flags);
164 *a &= ~mask;
165 raw_local_irq_restore(flags);
166 }
167}166}
168 167
169/*168/*
@@ -191,7 +190,7 @@ static inline void clear_bit_unlock(unsigned long nr, volatile unsigned long *ad · 21 unmodified lines
191 */190 */
192static inline void change_bit(unsigned long nr, volatile unsigned long *addr)191static inline void change_bit(unsigned long nr, volatile unsigned long *addr)
193{192{
194 unsigned short bit = nr & SZLONG_MASK;193 int bit = nr & SZLONG_MASK;
195 194
196 if (kernel_uses_llsc && R10000_LLSC_WAR) {195 if (kernel_uses_llsc && R10000_LLSC_WAR) {
197 unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG);196 unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG);
@@ -220,17 +219,8 @@ static inline void change_bit(unsigned long nr, volatile unsigned long *addr) · 22 unmodified lines
220 : "=&r" (temp), "+m" (*m)219 : "=&r" (temp), "+m" (*m)
221 : "ir" (1UL << bit));220 : "ir" (1UL << bit));
222 } while (unlikely(!temp));221 } while (unlikely(!temp));
223 } else {222 } else
224 volatile unsigned long *a = addr;223 __mips_change_bit(nr, addr);
225 unsigned long mask;
226 unsigned long flags;
227
228 a += nr >> SZLONG_LOG;
229 mask = 1UL << bit;
230 raw_local_irq_save(flags);
231 *a ^= mask;
232 raw_local_irq_restore(flags);
233 }
234}224}
235 225
236/*226/*
@@ -244,7 +234,7 @@ static inline void change_bit(unsigned long nr, volatile unsigned long *addr) · 7 unmodified lines
244static inline int test_and_set_bit(unsigned long nr,234static inline int test_and_set_bit(unsigned long nr,
245 volatile unsigned long *addr)235 volatile unsigned long *addr)
246{236{
247 unsigned short bit = nr & SZLONG_MASK;237 int bit = nr & SZLONG_MASK;
248 unsigned long res;238 unsigned long res;
249 239
250 smp_mb__before_llsc();240 smp_mb__before_llsc();
@@ -281,18 +271,8 @@ static inline int test_and_set_bit(unsigned long nr, · 30 unmodified lines
281 } while (unlikely(!res));271 } while (unlikely(!res));
282 272
283 res = temp & (1UL << bit);273 res = temp & (1UL << bit);
284 } else {274 } else
285 volatile unsigned long *a = addr;275 res = __mips_test_and_set_bit(nr, addr);
286 unsigned long mask;
287 unsigned long flags;
288
289 a += nr >> SZLONG_LOG;
290 mask = 1UL << bit;
291 raw_local_irq_save(flags);
292 res = (mask & *a);
293 *a |= mask;
294 raw_local_irq_restore(flags);
295 }
296 276
297 smp_llsc_mb();277 smp_llsc_mb();
298 278
@@ -310,7 +290,7 @@ static inline int test_and_set_bit(unsigned long nr, · 11 unmodified lines
310static inline int test_and_set_bit_lock(unsigned long nr,290static inline int test_and_set_bit_lock(unsigned long nr,
311 volatile unsigned long *addr)291 volatile unsigned long *addr)
312{292{
313 unsigned short bit = nr & SZLONG_MASK;293 int bit = nr & SZLONG_MASK;
314 unsigned long res;294 unsigned long res;
315 295
316 if (kernel_uses_llsc && R10000_LLSC_WAR) {296 if (kernel_uses_llsc && R10000_LLSC_WAR) {
@@ -345,18 +325,8 @@ static inline int test_and_set_bit_lock(unsigned long nr, · 28 unmodified lines
345 } while (unlikely(!res));325 } while (unlikely(!res));
346 326
347 res = temp & (1UL << bit);327 res = temp & (1UL << bit);
348 } else {328 } else
349 volatile unsigned long *a = addr;329 res = __mips_test_and_set_bit_lock(nr, addr);
350 unsigned long mask;
351 unsigned long flags;
352
353 a += nr >> SZLONG_LOG;
354 mask = 1UL << bit;
355 raw_local_irq_save(flags);
356 res = (mask & *a);
357 *a |= mask;
358 raw_local_irq_restore(flags);
359 }
360 330
361 smp_llsc_mb();331 smp_llsc_mb();
362 332
@@ -373,7 +343,7 @@ static inline int test_and_set_bit_lock(unsigned long nr, · 10 unmodified lines
373static inline int test_and_clear_bit(unsigned long nr,343static inline int test_and_clear_bit(unsigned long nr,
374 volatile unsigned long *addr)344 volatile unsigned long *addr)
375{345{
376 unsigned short bit = nr & SZLONG_MASK;346 int bit = nr & SZLONG_MASK;
377 unsigned long res;347 unsigned long res;
378 348
379 smp_mb__before_llsc();349 smp_mb__before_llsc();
@@ -428,18 +398,8 @@ static inline int test_and_clear_bit(unsigned long nr, · 48 unmodified lines
428 } while (unlikely(!res));398 } while (unlikely(!res));
429 399
430 res = temp & (1UL << bit);400 res = temp & (1UL << bit);
431 } else {401 } else
432 volatile unsigned long *a = addr;402 res = __mips_test_and_clear_bit(nr, addr);
433 unsigned long mask;
434 unsigned long flags;
435
436 a += nr >> SZLONG_LOG;
437 mask = 1UL << bit;
438 raw_local_irq_save(flags);
439 res = (mask & *a);
440 *a &= ~mask;
441 raw_local_irq_restore(flags);
442 }
443 403
444 smp_llsc_mb();404 smp_llsc_mb();
445 405
@@ -457,7 +417,7 @@ static inline int test_and_clear_bit(unsigned long nr, · 11 unmodified lines
457static inline int test_and_change_bit(unsigned long nr,417static inline int test_and_change_bit(unsigned long nr,
458 volatile unsigned long *addr)418 volatile unsigned long *addr)
459{419{
460 unsigned short bit = nr & SZLONG_MASK;420 int bit = nr & SZLONG_MASK;
461 unsigned long res;421 unsigned long res;
462 422
463 smp_mb__before_llsc();423 smp_mb__before_llsc();
@@ -494,18 +454,8 @@ static inline int test_and_change_bit(unsigned long nr, · 30 unmodified lines
494 } while (unlikely(!res));454 } while (unlikely(!res));
495 455
496 res = temp & (1UL << bit);456 res = temp & (1UL << bit);
497 } else {457 } else
498 volatile unsigned long *a = addr;458 res = __mips_test_and_change_bit(nr, addr);
499 unsigned long mask;
500 unsigned long flags;
501
502 a += nr >> SZLONG_LOG;
503 mask = 1UL << bit;
504 raw_local_irq_save(flags);
505 res = (mask & *a);
506 *a ^= mask;
507 raw_local_irq_restore(flags);
508 }
509 459
510 smp_llsc_mb();460 smp_llsc_mb();
511 461
arch/mips/include/asm/compat.h+1−1
@@ -290,7 +290,7 @@ struct compat_shmid64_ds { · 289 unmodified lines
290 290
291static inline int is_compat_task(void)291static inline int is_compat_task(void)
292{292{
293 return test_thread_flag(TIF_32BIT);293 return test_thread_flag(TIF_32BIT_ADDR);
294}294}
295 295
296#endif /* _ASM_COMPAT_H */296#endif /* _ASM_COMPAT_H */
arch/mips/include/asm/io.h+1−0
@@ -15,6 +15,7 @@ · 14 unmodified lines
15#include <linux/compiler.h>15#include <linux/compiler.h>
16#include <linux/kernel.h>16#include <linux/kernel.h>
17#include <linux/types.h>17#include <linux/types.h>
18#include <linux/irqflags.h>
18 19
19#include <asm/addrspace.h>20#include <asm/addrspace.h>
20#include <asm/bug.h>21#include <asm/bug.h>
arch/mips/include/asm/irqflags.h+75−132
@@ -16,83 +16,13 @@ · 15 unmodified lines
16#include <linux/compiler.h>16#include <linux/compiler.h>
17#include <asm/hazards.h>17#include <asm/hazards.h>
18 18
19__asm__(19#if defined(CONFIG_CPU_MIPSR2) && !defined(CONFIG_MIPS_MT_SMTC)
20 " .macro arch_local_irq_enable \n"
21 " .set push \n"
22 " .set reorder \n"
23 " .set noat \n"
24#ifdef CONFIG_MIPS_MT_SMTC
25 " mfc0 $1, $2, 1 # SMTC - clear TCStatus.IXMT \n"
26 " ori $1, 0x400 \n"
27 " xori $1, 0x400 \n"
28 " mtc0 $1, $2, 1 \n"
29#elif defined(CONFIG_CPU_MIPSR2)
30 " ei \n"
31#else
32 " mfc0 $1,$12 \n"
33 " ori $1,0x1f \n"
34 " xori $1,0x1e \n"
35 " mtc0 $1,$12 \n"
36#endif
37 " irq_enable_hazard \n"
38 " .set pop \n"
39 " .endm");
40 20
41extern void smtc_ipi_replay(void);
42
43static inline void arch_local_irq_enable(void)
44{
45#ifdef CONFIG_MIPS_MT_SMTC
46 /*
47 * SMTC kernel needs to do a software replay of queued
48 * IPIs, at the cost of call overhead on each local_irq_enable()
49 */
50 smtc_ipi_replay();
51#endif
52 __asm__ __volatile__(
53 "arch_local_irq_enable"
54 : /* no outputs */
55 : /* no inputs */
56 : "memory");
57}
58
59
60/*
61 * For cli() we have to insert nops to make sure that the new value
62 * has actually arrived in the status register before the end of this
63 * macro.
64 * R4000/R4400 need three nops, the R4600 two nops and the R10000 needs
65 * no nops at all.
66 */
67/*
68 * For TX49, operating only IE bit is not enough.
69 *
70 * If mfc0 $12 follows store and the mfc0 is last instruction of a
71 * page and fetching the next instruction causes TLB miss, the result
72 * of the mfc0 might wrongly contain EXL bit.
73 *
74 * ERT-TX49H2-027, ERT-TX49H3-012, ERT-TX49HL3-006, ERT-TX49H4-008
75 *
76 * Workaround: mask EXL bit of the result or place a nop before mfc0.
77 */
78__asm__(21__asm__(
79 " .macro arch_local_irq_disable\n"22 " .macro arch_local_irq_disable\n"
80 " .set push \n"23 " .set push \n"
81 " .set noat \n"24 " .set noat \n"
82#ifdef CONFIG_MIPS_MT_SMTC
83 " mfc0 $1, $2, 1 \n"
84 " ori $1, 0x400 \n"
85 " .set noreorder \n"
86 " mtc0 $1, $2, 1 \n"
87#elif defined(CONFIG_CPU_MIPSR2)
88 " di \n"25 " di \n"
89#else
90 " mfc0 $1,$12 \n"
91 " ori $1,0x1f \n"
92 " xori $1,0x1f \n"
93 " .set noreorder \n"
94 " mtc0 $1,$12 \n"
95#endif
96 " irq_disable_hazard \n"26 " irq_disable_hazard \n"
97 " .set pop \n"27 " .set pop \n"
98 " .endm \n");28 " .endm \n");
@@ -106,46 +36,14 @@ static inline void arch_local_irq_disable(void) · 7 unmodified lines
106 : "memory");36 : "memory");
107}37}
108 38
109__asm__(
110 " .macro arch_local_save_flags flags \n"
111 " .set push \n"
112 " .set reorder \n"
113#ifdef CONFIG_MIPS_MT_SMTC
114 " mfc0 \\flags, $2, 1 \n"
115#else
116 " mfc0 \\flags, $12 \n"
117#endif
118 " .set pop \n"
119 " .endm \n");
120
121static inline unsigned long arch_local_save_flags(void)
122{
123 unsigned long flags;
124 asm volatile("arch_local_save_flags %0" : "=r" (flags));
125 return flags;
126}
127 39
128__asm__(40__asm__(
129 " .macro arch_local_irq_save result \n"41 " .macro arch_local_irq_save result \n"
130 " .set push \n"42 " .set push \n"
131 " .set reorder \n"43 " .set reorder \n"
132 " .set noat \n"44 " .set noat \n"
133#ifdef CONFIG_MIPS_MT_SMTC
134 " mfc0 \\result, $2, 1 \n"
135 " ori $1, \\result, 0x400 \n"
136 " .set noreorder \n"
137 " mtc0 $1, $2, 1 \n"
138 " andi \\result, \\result, 0x400 \n"
139#elif defined(CONFIG_CPU_MIPSR2)
140 " di \\result \n"45 " di \\result \n"
141 " andi \\result, 1 \n"46 " andi \\result, 1 \n"
142#else
143 " mfc0 \\result, $12 \n"
144 " ori $1, \\result, 0x1f \n"
145 " xori $1, 0x1f \n"
146 " .set noreorder \n"
147 " mtc0 $1, $12 \n"
148#endif
149 " irq_disable_hazard \n"47 " irq_disable_hazard \n"
150 " .set pop \n"48 " .set pop \n"
151 " .endm \n");49 " .endm \n");
@@ -160,61 +58,37 @@ static inline unsigned long arch_local_irq_save(void) · 8 unmodified lines
160 return flags;58 return flags;
161}59}
162 60
61
163__asm__(62__asm__(
164 " .macro arch_local_irq_restore flags \n"63 " .macro arch_local_irq_restore flags \n"
165 " .set push \n"64 " .set push \n"
166 " .set noreorder \n"65 " .set noreorder \n"
167 " .set noat \n"66 " .set noat \n"
168#ifdef CONFIG_MIPS_MT_SMTC67#if defined(CONFIG_IRQ_CPU)
169 "mfc0 $1, $2, 1 \n"
170 "andi \\flags, 0x400 \n"
171 "ori $1, 0x400 \n"
172 "xori $1, 0x400 \n"
173 "or \\flags, $1 \n"
174 "mtc0 \\flags, $2, 1 \n"
175#elif defined(CONFIG_CPU_MIPSR2) && defined(CONFIG_IRQ_CPU)
176 /*68 /*
177 * Slow, but doesn't suffer from a relatively unlikely race69 * Slow, but doesn't suffer from a relatively unlikely race
178 * condition we're having since days 1.70 * condition we're having since days 1.
179 */71 */
180 " beqz \\flags, 1f \n"72 " beqz \\flags, 1f \n"
181 " di \n"73 " di \n"
182 " ei \n"74 " ei \n"
183 "1: \n"75 "1: \n"
184#elif defined(CONFIG_CPU_MIPSR2)76#else
185 /*77 /*
186 * Fast, dangerous. Life is fun, life is good.78 * Fast, dangerous. Life is fun, life is good.
187 */79 */
188 " mfc0 $1, $12 \n"80 " mfc0 $1, $12 \n"
189 " ins $1, \\flags, 0, 1 \n"81 " ins $1, \\flags, 0, 1 \n"
190 " mtc0 $1, $12 \n"82 " mtc0 $1, $12 \n"
191#else
192 " mfc0 $1, $12 \n"
193 " andi \\flags, 1 \n"
194 " ori $1, 0x1f \n"
195 " xori $1, 0x1f \n"
196 " or \\flags, $1 \n"
197 " mtc0 \\flags, $12 \n"
198#endif83#endif
199 " irq_disable_hazard \n"84 " irq_disable_hazard \n"
200 " .set pop \n"85 " .set pop \n"
201 " .endm \n");86 " .endm \n");
202 87
203
204static inline void arch_local_irq_restore(unsigned long flags)88static inline void arch_local_irq_restore(unsigned long flags)
205{89{
206 unsigned long __tmp1;90 unsigned long __tmp1;
207 91
208#ifdef CONFIG_MIPS_MT_SMTC
209 /*
210 * SMTC kernel needs to do a software replay of queued
211 * IPIs, at the cost of branch and call overhead on each
212 * local_irq_restore()
213 */
214 if (unlikely(!(flags & 0x0400)))
215 smtc_ipi_replay();
216#endif
217
218 __asm__ __volatile__(92 __asm__ __volatile__(
219 "arch_local_irq_restore\t%0"93 "arch_local_irq_restore\t%0"
220 : "=r" (__tmp1)94 : "=r" (__tmp1)
@@ -232,6 +106,75 @@ static inline void __arch_local_irq_restore(unsigned long flags) · 11 unmodified lines
232 : "0" (flags)106 : "0" (flags)
233 : "memory");107 : "memory");
234}108}
109#else
110/* Functions that require preempt_{dis,en}able() are in mips-atomic.c */
111void arch_local_irq_disable(void);
112unsigned long arch_local_irq_save(void);
113void arch_local_irq_restore(unsigned long flags);
114void __arch_local_irq_restore(unsigned long flags);
115#endif /* if defined(CONFIG_CPU_MIPSR2) && !defined(CONFIG_MIPS_MT_SMTC) */
116
117
118__asm__(
119 " .macro arch_local_irq_enable \n"
120 " .set push \n"
121 " .set reorder \n"
122 " .set noat \n"
123#ifdef CONFIG_MIPS_MT_SMTC
124 " mfc0 $1, $2, 1 # SMTC - clear TCStatus.IXMT \n"
125 " ori $1, 0x400 \n"
126 " xori $1, 0x400 \n"
127 " mtc0 $1, $2, 1 \n"
128#elif defined(CONFIG_CPU_MIPSR2)
129 " ei \n"
130#else
131 " mfc0 $1,$12 \n"
132 " ori $1,0x1f \n"
133 " xori $1,0x1e \n"
134 " mtc0 $1,$12 \n"
135#endif
136 " irq_enable_hazard \n"
137 " .set pop \n"
138 " .endm");
139
140extern void smtc_ipi_replay(void);
141
142static inline void arch_local_irq_enable(void)
143{
144#ifdef CONFIG_MIPS_MT_SMTC
145 /*
146 * SMTC kernel needs to do a software replay of queued
147 * IPIs, at the cost of call overhead on each local_irq_enable()
148 */
149 smtc_ipi_replay();
150#endif
151 __asm__ __volatile__(
152 "arch_local_irq_enable"
153 : /* no outputs */
154 : /* no inputs */
155 : "memory");
156}
157
158
159__asm__(
160 " .macro arch_local_save_flags flags \n"
161 " .set push \n"
162 " .set reorder \n"
163#ifdef CONFIG_MIPS_MT_SMTC
164 " mfc0 \\flags, $2, 1 \n"
165#else
166 " mfc0 \\flags, $12 \n"
167#endif
168 " .set pop \n"
169 " .endm \n");
170
171static inline unsigned long arch_local_save_flags(void)
172{
173 unsigned long flags;
174 asm volatile("arch_local_save_flags %0" : "=r" (flags));
175 return flags;
176}
177
235 178
236static inline int arch_irqs_disabled_flags(unsigned long flags)179static inline int arch_irqs_disabled_flags(unsigned long flags)
237{180{
@@ -245,7 +188,7 @@ static inline int arch_irqs_disabled_flags(unsigned long flags) · 7 unmodified lines
245#endif188#endif
246}189}
247 190
248#endif191#endif /* #ifndef __ASSEMBLY__ */
249 192
250/*193/*
251 * Do the CPU's IRQ-state tracing from assembly code.194 * Do the CPU's IRQ-state tracing from assembly code.
arch/mips/include/asm/thread_info.h+0−6
@@ -112,12 +112,6 @@ register struct thread_info *__current_thread_info __asm__("$28"); · 111 unmodified lines
112#define TIF_LOAD_WATCH 25 /* If set, load watch registers */112#define TIF_LOAD_WATCH 25 /* If set, load watch registers */
113#define TIF_SYSCALL_TRACE 31 /* syscall trace active */113#define TIF_SYSCALL_TRACE 31 /* syscall trace active */
114 114
115#ifdef CONFIG_MIPS32_O32
116#define TIF_32BIT TIF_32BIT_REGS
117#elif defined(CONFIG_MIPS32_N32)
118#define TIF_32BIT _TIF_32BIT_ADDR
119#endif /* CONFIG_MIPS32_O32 */
120
121#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)115#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
122#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)116#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
123#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)117#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
arch/mips/lib/Makefile+3−2
@@ -2,8 +2,9 @@ · 1 unmodified line
2# Makefile for MIPS-specific library files..2# Makefile for MIPS-specific library files..
3#3#
4 4
5lib-y += csum_partial.o delay.o memcpy.o memset.o \5lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \
6 strlen_user.o strncpy_user.o strnlen_user.o uncached.o6 mips-atomic.o strlen_user.o strncpy_user.o \
7 strnlen_user.o uncached.o
7 8
8obj-y += iomap.o9obj-y += iomap.o
9obj-$(CONFIG_PCI) += iomap-pci.o10obj-$(CONFIG_PCI) += iomap-pci.o
arch/mips/lib/bitops.c+179−0
@@ -0,0 +1,179 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (c) 1994-1997, 99, 2000, 06, 07 Ralf Baechle (ralf@linux-mips.org)
7 * Copyright (c) 1999, 2000 Silicon Graphics, Inc.
8 */
9#include <linux/bitops.h>
10#include <linux/irqflags.h>
11#include <linux/export.h>
12
13
14/**
15 * __mips_set_bit - Atomically set a bit in memory. This is called by
16 * set_bit() if it cannot find a faster solution.
17 * @nr: the bit to set
18 * @addr: the address to start counting from
19 */
20void __mips_set_bit(unsigned long nr, volatile unsigned long *addr)
21{
22 volatile unsigned long *a = addr;
23 unsigned bit = nr & SZLONG_MASK;
24 unsigned long mask;
25 unsigned long flags;
26
27 a += nr >> SZLONG_LOG;
28 mask = 1UL << bit;
29 raw_local_irq_save(flags);
30 *a |= mask;
31 raw_local_irq_restore(flags);
32}
33EXPORT_SYMBOL(__mips_set_bit);
34
35
36/**
37 * __mips_clear_bit - Clears a bit in memory. This is called by clear_bit() if
38 * it cannot find a faster solution.
39 * @nr: Bit to clear
40 * @addr: Address to start counting from
41 */
42void __mips_clear_bit(unsigned long nr, volatile unsigned long *addr)
43{
44 volatile unsigned long *a = addr;
45 unsigned bit = nr & SZLONG_MASK;
46 unsigned long mask;
47 unsigned long flags;
48
49 a += nr >> SZLONG_LOG;
50 mask = 1UL << bit;
51 raw_local_irq_save(flags);
52 *a &= ~mask;
53 raw_local_irq_restore(flags);
54}
55EXPORT_SYMBOL(__mips_clear_bit);
56
57
58/**
59 * __mips_change_bit - Toggle a bit in memory. This is called by change_bit()
60 * if it cannot find a faster solution.
61 * @nr: Bit to change
62 * @addr: Address to start counting from
63 */
64void __mips_change_bit(unsigned long nr, volatile unsigned long *addr)
65{
66 volatile unsigned long *a = addr;
67 unsigned bit = nr & SZLONG_MASK;
68 unsigned long mask;
69 unsigned long flags;
70
71 a += nr >> SZLONG_LOG;
72 mask = 1UL << bit;
73 raw_local_irq_save(flags);
74 *a ^= mask;
75 raw_local_irq_restore(flags);
76}
77EXPORT_SYMBOL(__mips_change_bit);
78
79
80/**
81 * __mips_test_and_set_bit - Set a bit and return its old value. This is
82 * called by test_and_set_bit() if it cannot find a faster solution.
83 * @nr: Bit to set
84 * @addr: Address to count from
85 */
86int __mips_test_and_set_bit(unsigned long nr,
87 volatile unsigned long *addr)
88{
89 volatile unsigned long *a = addr;
90 unsigned bit = nr & SZLONG_MASK;
91 unsigned long mask;
92 unsigned long flags;
93 unsigned long res;
94
95 a += nr >> SZLONG_LOG;
96 mask = 1UL << bit;
97 raw_local_irq_save(flags);
98 res = (mask & *a);
99 *a |= mask;
100 raw_local_irq_restore(flags);
101 return res;
102}
103EXPORT_SYMBOL(__mips_test_and_set_bit);
104
105
106/**
107 * __mips_test_and_set_bit_lock - Set a bit and return its old value. This is
108 * called by test_and_set_bit_lock() if it cannot find a faster solution.
109 * @nr: Bit to set
110 * @addr: Address to count from
111 */
112int __mips_test_and_set_bit_lock(unsigned long nr,
113 volatile unsigned long *addr)
114{
115 volatile unsigned long *a = addr;
116 unsigned bit = nr & SZLONG_MASK;
117 unsigned long mask;
118 unsigned long flags;
119 unsigned long res;
120
121 a += nr >> SZLONG_LOG;
122 mask = 1UL << bit;
123 raw_local_irq_save(flags);
124 res = (mask & *a);
125 *a |= mask;
126 raw_local_irq_restore(flags);
127 return res;
128}
129EXPORT_SYMBOL(__mips_test_and_set_bit_lock);
130
131
132/**
133 * __mips_test_and_clear_bit - Clear a bit and return its old value. This is
134 * called by test_and_clear_bit() if it cannot find a faster solution.
135 * @nr: Bit to clear
136 * @addr: Address to count from
137 */
138int __mips_test_and_clear_bit(unsigned long nr, volatile unsigned long *addr)
139{
140 volatile unsigned long *a = addr;
141 unsigned bit = nr & SZLONG_MASK;
142 unsigned long mask;
143 unsigned long flags;
144 unsigned long res;
145
146 a += nr >> SZLONG_LOG;
147 mask = 1UL << bit;
148 raw_local_irq_save(flags);
149 res = (mask & *a);
150 *a &= ~mask;
151 raw_local_irq_restore(flags);
152 return res;
153}
154EXPORT_SYMBOL(__mips_test_and_clear_bit);
155
156
157/**
158 * __mips_test_and_change_bit - Change a bit and return its old value. This is
159 * called by test_and_change_bit() if it cannot find a faster solution.
160 * @nr: Bit to change
161 * @addr: Address to count from
162 */
163int __mips_test_and_change_bit(unsigned long nr, volatile unsigned long *addr)
164{
165 volatile unsigned long *a = addr;
166 unsigned bit = nr & SZLONG_MASK;
167 unsigned long mask;
168 unsigned long flags;
169 unsigned long res;
170
171 a += nr >> SZLONG_LOG;
172 mask = 1UL << bit;
173 raw_local_irq_save(flags);
174 res = (mask & *a);
175 *a ^= mask;
176 raw_local_irq_restore(flags);
177 return res;
178}
179EXPORT_SYMBOL(__mips_test_and_change_bit);
arch/mips/lib/mips-atomic.c+176−0
@@ -0,0 +1,176 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1994, 95, 96, 97, 98, 99, 2003 by Ralf Baechle
7 * Copyright (C) 1996 by Paul M. Antoine
8 * Copyright (C) 1999 Silicon Graphics
9 * Copyright (C) 2000 MIPS Technologies, Inc.
10 */
11#include <asm/irqflags.h>
12#include <asm/hazards.h>
13#include <linux/compiler.h>
14#include <linux/preempt.h>
15#include <linux/export.h>
16
17#if !defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_MIPS_MT_SMTC)
18
19/*
20 * For cli() we have to insert nops to make sure that the new value
21 * has actually arrived in the status register before the end of this
22 * macro.
23 * R4000/R4400 need three nops, the R4600 two nops and the R10000 needs
24 * no nops at all.
25 */
26/*
27 * For TX49, operating only IE bit is not enough.
28 *
29 * If mfc0 $12 follows store and the mfc0 is last instruction of a
30 * page and fetching the next instruction causes TLB miss, the result
31 * of the mfc0 might wrongly contain EXL bit.
32 *
33 * ERT-TX49H2-027, ERT-TX49H3-012, ERT-TX49HL3-006, ERT-TX49H4-008
34 *
35 * Workaround: mask EXL bit of the result or place a nop before mfc0.
36 */
37__asm__(
38 " .macro arch_local_irq_disable\n"
39 " .set push \n"
40 " .set noat \n"
41#ifdef CONFIG_MIPS_MT_SMTC
42 " mfc0 $1, $2, 1 \n"
43 " ori $1, 0x400 \n"
44 " .set noreorder \n"
45 " mtc0 $1, $2, 1 \n"
46#elif defined(CONFIG_CPU_MIPSR2)
47 /* see irqflags.h for inline function */
48#else
49 " mfc0 $1,$12 \n"
50 " ori $1,0x1f \n"
51 " xori $1,0x1f \n"
52 " .set noreorder \n"
53 " mtc0 $1,$12 \n"
54#endif
55 " irq_disable_hazard \n"
56 " .set pop \n"
57 " .endm \n");
58
59void arch_local_irq_disable(void)
60{
61 preempt_disable();
62 __asm__ __volatile__(
63 "arch_local_irq_disable"
64 : /* no outputs */
65 : /* no inputs */
66 : "memory");
67 preempt_enable();
68}
69EXPORT_SYMBOL(arch_local_irq_disable);
70
71
72__asm__(
73 " .macro arch_local_irq_save result \n"
74 " .set push \n"
75 " .set reorder \n"
76 " .set noat \n"
77#ifdef CONFIG_MIPS_MT_SMTC
78 " mfc0 \\result, $2, 1 \n"
79 " ori $1, \\result, 0x400 \n"
80 " .set noreorder \n"
81 " mtc0 $1, $2, 1 \n"
82 " andi \\result, \\result, 0x400 \n"
83#elif defined(CONFIG_CPU_MIPSR2)
84 /* see irqflags.h for inline function */
85#else
86 " mfc0 \\result, $12 \n"
87 " ori $1, \\result, 0x1f \n"
88 " xori $1, 0x1f \n"
89 " .set noreorder \n"
90 " mtc0 $1, $12 \n"
91#endif
92 " irq_disable_hazard \n"
93 " .set pop \n"
94 " .endm \n");
95
96unsigned long arch_local_irq_save(void)
97{
98 unsigned long flags;
99 preempt_disable();
100 asm volatile("arch_local_irq_save\t%0"
101 : "=r" (flags)
102 : /* no inputs */
103 : "memory");
104 preempt_enable();
105 return flags;
106}
107EXPORT_SYMBOL(arch_local_irq_save);
108
109
110__asm__(
111 " .macro arch_local_irq_restore flags \n"
112 " .set push \n"
113 " .set noreorder \n"
114 " .set noat \n"
115#ifdef CONFIG_MIPS_MT_SMTC
116 "mfc0 $1, $2, 1 \n"
117 "andi \\flags, 0x400 \n"
118 "ori $1, 0x400 \n"
119 "xori $1, 0x400 \n"
120 "or \\flags, $1 \n"
121 "mtc0 \\flags, $2, 1 \n"
122#elif defined(CONFIG_CPU_MIPSR2) && defined(CONFIG_IRQ_CPU)
123 /* see irqflags.h for inline function */
124#elif defined(CONFIG_CPU_MIPSR2)
125 /* see irqflags.h for inline function */
126#else
127 " mfc0 $1, $12 \n"
128 " andi \\flags, 1 \n"
129 " ori $1, 0x1f \n"
130 " xori $1, 0x1f \n"
131 " or \\flags, $1 \n"
132 " mtc0 \\flags, $12 \n"
133#endif
134 " irq_disable_hazard \n"
135 " .set pop \n"
136 " .endm \n");
137
138void arch_local_irq_restore(unsigned long flags)
139{
140 unsigned long __tmp1;
141
142#ifdef CONFIG_MIPS_MT_SMTC
143 /*
144 * SMTC kernel needs to do a software replay of queued
145 * IPIs, at the cost of branch and call overhead on each
146 * local_irq_restore()
147 */
148 if (unlikely(!(flags & 0x0400)))
149 smtc_ipi_replay();
150#endif
151 preempt_disable();
152 __asm__ __volatile__(
153 "arch_local_irq_restore\t%0"
154 : "=r" (__tmp1)
155 : "0" (flags)
156 : "memory");
157 preempt_enable();
158}
159EXPORT_SYMBOL(arch_local_irq_restore);
160
161
162void __arch_local_irq_restore(unsigned long flags)
163{
164 unsigned long __tmp1;
165
166 preempt_disable();
167 __asm__ __volatile__(
168 "arch_local_irq_restore\t%0"
169 : "=r" (__tmp1)
170 : "0" (flags)
171 : "memory");
172 preempt_enable();
173}
174EXPORT_SYMBOL(__arch_local_irq_restore);
175
176#endif /* !defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_MIPS_MT_SMTC) */
arch/mips/mti-malta/malta-platform.c+2−1
@@ -29,6 +29,7 @@ · 28 unmodified lines
29#include <linux/mtd/partitions.h>29#include <linux/mtd/partitions.h>
30#include <linux/mtd/physmap.h>30#include <linux/mtd/physmap.h>
31#include <linux/platform_device.h>31#include <linux/platform_device.h>
32#include <asm/mips-boards/maltaint.h>
32#include <mtd/mtd-abi.h>33#include <mtd/mtd-abi.h>
33 34
34#define SMC_PORT(base, int) \35#define SMC_PORT(base, int) \
@@ -48,7 +49,7 @@ static struct plat_serial8250_port uart8250_data[] = { · 13 unmodified lines
48 SMC_PORT(0x2F8, 3),49 SMC_PORT(0x2F8, 3),
49 {50 {
50 .mapbase = 0x1f000900, /* The CBUS UART */51 .mapbase = 0x1f000900, /* The CBUS UART */
51 .irq = MIPS_CPU_IRQ_BASE + 2,52 .irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2,
52 .uartclk = 3686400, /* Twice the usual clk! */53 .uartclk = 3686400, /* Twice the usual clk! */
53 .iotype = UPIO_MEM32,54 .iotype = UPIO_MEM32,
54 .flags = CBUS_UART_FLAGS,55 .flags = CBUS_UART_FLAGS,
arch/s390/Kconfig+1−0
@@ -96,6 +96,7 @@ config S390 · 95 unmodified lines
96 select HAVE_MEMBLOCK_NODE_MAP96 select HAVE_MEMBLOCK_NODE_MAP
97 select HAVE_CMPXCHG_LOCAL97 select HAVE_CMPXCHG_LOCAL
98 select HAVE_CMPXCHG_DOUBLE98 select HAVE_CMPXCHG_DOUBLE
99 select HAVE_ALIGNED_STRUCT_PAGE if SLUB
99 select HAVE_VIRT_CPU_ACCOUNTING100 select HAVE_VIRT_CPU_ACCOUNTING
100 select VIRT_CPU_ACCOUNTING101 select VIRT_CPU_ACCOUNTING
101 select ARCH_DISCARD_MEMBLOCK102 select ARCH_DISCARD_MEMBLOCK
arch/s390/include/asm/compat.h+1−1
@@ -20,7 +20,7 @@ · 19 unmodified lines
20#define PSW32_MASK_CC 0x00003000UL20#define PSW32_MASK_CC 0x00003000UL
21#define PSW32_MASK_PM 0x00000f00UL21#define PSW32_MASK_PM 0x00000f00UL
22 22
23#define PSW32_MASK_USER 0x00003F00UL23#define PSW32_MASK_USER 0x0000FF00UL
24 24
25#define PSW32_ADDR_AMODE 0x80000000UL25#define PSW32_ADDR_AMODE 0x80000000UL
26#define PSW32_ADDR_INSN 0x7FFFFFFFUL26#define PSW32_ADDR_INSN 0x7FFFFFFFUL
arch/s390/include/asm/topology.h+3−0
@@ -8,6 +8,9 @@ struct cpu; · 7 unmodified lines
8 8
9#ifdef CONFIG_SCHED_BOOK9#ifdef CONFIG_SCHED_BOOK
10 10
11extern unsigned char cpu_socket_id[NR_CPUS];
12#define topology_physical_package_id(cpu) (cpu_socket_id[cpu])
13
11extern unsigned char cpu_core_id[NR_CPUS];14extern unsigned char cpu_core_id[NR_CPUS];
12extern cpumask_t cpu_core_map[NR_CPUS];15extern cpumask_t cpu_core_map[NR_CPUS];
13 16
arch/s390/include/uapi/asm/ptrace.h+2−2
@@ -239,7 +239,7 @@ typedef struct · 238 unmodified lines
239#define PSW_MASK_EA 0x00000000UL239#define PSW_MASK_EA 0x00000000UL
240#define PSW_MASK_BA 0x00000000UL240#define PSW_MASK_BA 0x00000000UL
241 241
242#define PSW_MASK_USER 0x00003F00UL242#define PSW_MASK_USER 0x0000FF00UL
243 243
244#define PSW_ADDR_AMODE 0x80000000UL244#define PSW_ADDR_AMODE 0x80000000UL
245#define PSW_ADDR_INSN 0x7FFFFFFFUL245#define PSW_ADDR_INSN 0x7FFFFFFFUL
@@ -269,7 +269,7 @@ typedef struct · 23 unmodified lines
269#define PSW_MASK_EA 0x0000000100000000UL269#define PSW_MASK_EA 0x0000000100000000UL
270#define PSW_MASK_BA 0x0000000080000000UL270#define PSW_MASK_BA 0x0000000080000000UL
271 271
272#define PSW_MASK_USER 0x00003F8180000000UL272#define PSW_MASK_USER 0x0000FF8180000000UL
273 273
274#define PSW_ADDR_AMODE 0x0000000000000000UL274#define PSW_ADDR_AMODE 0x0000000000000000UL
275#define PSW_ADDR_INSN 0xFFFFFFFFFFFFFFFFUL275#define PSW_ADDR_INSN 0xFFFFFFFFFFFFFFFFUL
arch/s390/kernel/compat_signal.c+12−2
@@ -309,6 +309,10 @@ static int restore_sigregs32(struct pt_regs *regs,_sigregs32 __user *sregs) · 308 unmodified lines
309 regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |309 regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |
310 (__u64)(regs32.psw.mask & PSW32_MASK_USER) << 32 |310 (__u64)(regs32.psw.mask & PSW32_MASK_USER) << 32 |
311 (__u64)(regs32.psw.addr & PSW32_ADDR_AMODE);311 (__u64)(regs32.psw.addr & PSW32_ADDR_AMODE);
312 /* Check for invalid user address space control. */
313 if ((regs->psw.mask & PSW_MASK_ASC) >= (psw_kernel_bits & PSW_MASK_ASC))
314 regs->psw.mask = (psw_user_bits & PSW_MASK_ASC) |
315 (regs->psw.mask & ~PSW_MASK_ASC);
312 regs->psw.addr = (__u64)(regs32.psw.addr & PSW32_ADDR_INSN);316 regs->psw.addr = (__u64)(regs32.psw.addr & PSW32_ADDR_INSN);
313 for (i = 0; i < NUM_GPRS; i++)317 for (i = 0; i < NUM_GPRS; i++)
314 regs->gprs[i] = (__u64) regs32.gprs[i];318 regs->gprs[i] = (__u64) regs32.gprs[i];
@@ -481,7 +485,10 @@ static int setup_frame32(int sig, struct k_sigaction *ka, · 166 unmodified lines
481 485
482 /* Set up registers for signal handler */486 /* Set up registers for signal handler */
483 regs->gprs[15] = (__force __u64) frame;487 regs->gprs[15] = (__force __u64) frame;
484 regs->psw.mask |= PSW_MASK_BA; /* force amode 31 */488 /* Force 31 bit amode and default user address space control. */
489 regs->psw.mask = PSW_MASK_BA |
490 (psw_user_bits & PSW_MASK_ASC) |
491 (regs->psw.mask & ~PSW_MASK_ASC);
485 regs->psw.addr = (__force __u64) ka->sa.sa_handler;492 regs->psw.addr = (__force __u64) ka->sa.sa_handler;
486 493
487 regs->gprs[2] = map_signal(sig);494 regs->gprs[2] = map_signal(sig);
@@ -549,7 +556,10 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, · 61 unmodified lines
549 556
550 /* Set up registers for signal handler */557 /* Set up registers for signal handler */
551 regs->gprs[15] = (__force __u64) frame;558 regs->gprs[15] = (__force __u64) frame;
552 regs->psw.mask |= PSW_MASK_BA; /* force amode 31 */559 /* Force 31 bit amode and default user address space control. */
560 regs->psw.mask = PSW_MASK_BA |
561 (psw_user_bits & PSW_MASK_ASC) |
562 (regs->psw.mask & ~PSW_MASK_ASC);
553 regs->psw.addr = (__u64) ka->sa.sa_handler;563 regs->psw.addr = (__u64) ka->sa.sa_handler;
554 564
555 regs->gprs[2] = map_signal(sig);565 regs->gprs[2] = map_signal(sig);
arch/s390/kernel/signal.c+12−2
@@ -136,6 +136,10 @@ static int restore_sigregs(struct pt_regs *regs, _sigregs __user *sregs) · 135 unmodified lines
136 /* Use regs->psw.mask instead of psw_user_bits to preserve PER bit. */136 /* Use regs->psw.mask instead of psw_user_bits to preserve PER bit. */
137 regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |137 regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |
138 (user_sregs.regs.psw.mask & PSW_MASK_USER);138 (user_sregs.regs.psw.mask & PSW_MASK_USER);
139 /* Check for invalid user address space control. */
140 if ((regs->psw.mask & PSW_MASK_ASC) >= (psw_kernel_bits & PSW_MASK_ASC))
141 regs->psw.mask = (psw_user_bits & PSW_MASK_ASC) |
142 (regs->psw.mask & ~PSW_MASK_ASC);
139 /* Check for invalid amode */143 /* Check for invalid amode */
140 if (regs->psw.mask & PSW_MASK_EA)144 if (regs->psw.mask & PSW_MASK_EA)
141 regs->psw.mask |= PSW_MASK_BA;145 regs->psw.mask |= PSW_MASK_BA;
@@ -273,7 +277,10 @@ static int setup_frame(int sig, struct k_sigaction *ka, · 131 unmodified lines
273 277
274 /* Set up registers for signal handler */278 /* Set up registers for signal handler */
275 regs->gprs[15] = (unsigned long) frame;279 regs->gprs[15] = (unsigned long) frame;
276 regs->psw.mask |= PSW_MASK_EA | PSW_MASK_BA; /* 64 bit amode */280 /* Force default amode and default user address space control. */
281 regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA |
282 (psw_user_bits & PSW_MASK_ASC) |
283 (regs->psw.mask & ~PSW_MASK_ASC);
277 regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE;284 regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE;
278 285
279 regs->gprs[2] = map_signal(sig);286 regs->gprs[2] = map_signal(sig);
@@ -346,7 +353,10 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, · 66 unmodified lines
346 353
347 /* Set up registers for signal handler */354 /* Set up registers for signal handler */
348 regs->gprs[15] = (unsigned long) frame;355 regs->gprs[15] = (unsigned long) frame;
349 regs->psw.mask |= PSW_MASK_EA | PSW_MASK_BA; /* 64 bit amode */356 /* Force default amode and default user address space control. */
357 regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA |
358 (psw_user_bits & PSW_MASK_ASC) |
359 (regs->psw.mask & ~PSW_MASK_ASC);
350 regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE;360 regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE;
351 361
352 regs->gprs[2] = map_signal(sig);362 regs->gprs[2] = map_signal(sig);
arch/s390/kernel/topology.c+4−2
@@ -40,6 +40,7 @@ static DEFINE_SPINLOCK(topology_lock); · 39 unmodified lines
40static struct mask_info core_info;40static struct mask_info core_info;
41cpumask_t cpu_core_map[NR_CPUS];41cpumask_t cpu_core_map[NR_CPUS];
42unsigned char cpu_core_id[NR_CPUS];42unsigned char cpu_core_id[NR_CPUS];
43unsigned char cpu_socket_id[NR_CPUS];
43 44
44static struct mask_info book_info;45static struct mask_info book_info;
45cpumask_t cpu_book_map[NR_CPUS];46cpumask_t cpu_book_map[NR_CPUS];
@@ -83,11 +84,12 @@ static struct mask_info *add_cpus_to_mask(struct topology_cpu *tl_cpu, · 37 unmodified lines
83 cpumask_set_cpu(lcpu, &book->mask);84 cpumask_set_cpu(lcpu, &book->mask);
84 cpu_book_id[lcpu] = book->id;85 cpu_book_id[lcpu] = book->id;
85 cpumask_set_cpu(lcpu, &core->mask);86 cpumask_set_cpu(lcpu, &core->mask);
87 cpu_core_id[lcpu] = rcpu;
86 if (one_core_per_cpu) {88 if (one_core_per_cpu) {
87 cpu_core_id[lcpu] = rcpu;89 cpu_socket_id[lcpu] = rcpu;
88 core = core->next;90 core = core->next;
89 } else {91 } else {
90 cpu_core_id[lcpu] = core->id;92 cpu_socket_id[lcpu] = core->id;
91 }93 }
92 smp_cpu_set_polarization(lcpu, tl_cpu->pp);94 smp_cpu_set_polarization(lcpu, tl_cpu->pp);
93 }95 }
arch/s390/mm/gup.c+2−3
@@ -180,8 +180,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, · 179 unmodified lines
180 addr = start;180 addr = start;
181 len = (unsigned long) nr_pages << PAGE_SHIFT;181 len = (unsigned long) nr_pages << PAGE_SHIFT;
182 end = start + len;182 end = start + len;
183 if (unlikely(!access_ok(write ? VERIFY_WRITE : VERIFY_READ,183 if ((end < start) || (end > TASK_SIZE))
184 (void __user *)start, len)))
185 return 0;184 return 0;
186 185
187 local_irq_save(flags);186 local_irq_save(flags);
@@ -229,7 +228,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, · 41 unmodified lines
229 addr = start;228 addr = start;
230 len = (unsigned long) nr_pages << PAGE_SHIFT;229 len = (unsigned long) nr_pages << PAGE_SHIFT;
231 end = start + len;230 end = start + len;
232 if (end < start)231 if ((end < start) || (end > TASK_SIZE))
233 goto slow_irqon;232 goto slow_irqon;
234 233
235 /*234 /*
arch/unicore32/Kconfig+6−1
@@ -16,6 +16,8 @@ config UNICORE32 · 15 unmodified lines
16 select ARCH_WANT_FRAME_POINTERS16 select ARCH_WANT_FRAME_POINTERS
17 select GENERIC_IOMAP17 select GENERIC_IOMAP
18 select MODULES_USE_ELF_REL18 select MODULES_USE_ELF_REL
19 select GENERIC_KERNEL_THREAD
20 select GENERIC_KERNEL_EXECVE
19 help21 help
20 UniCore-32 is 32-bit Instruction Set Architecture,22 UniCore-32 is 32-bit Instruction Set Architecture,
21 including a series of low-power-consumption RISC chip23 including a series of low-power-consumption RISC chip
@@ -64,6 +66,9 @@ config GENERIC_CALIBRATE_DELAY · 42 unmodified lines
64config ARCH_MAY_HAVE_PC_FDC66config ARCH_MAY_HAVE_PC_FDC
65 bool67 bool
66 68
69config ZONE_DMA
70 def_bool y
71
67config NEED_DMA_MAP_STATE72config NEED_DMA_MAP_STATE
68 def_bool y73 def_bool y
69 74
@@ -216,7 +221,7 @@ config PUV3_GPIO · 146 unmodified lines
216 bool221 bool
217 depends on !ARCH_FPGA222 depends on !ARCH_FPGA
218 select GENERIC_GPIO223 select GENERIC_GPIO
219 select GPIO_SYSFS if EXPERIMENTAL224 select GPIO_SYSFS
220 default y225 default y
221 226
222if PUV3_NB0916227if PUV3_NB0916
arch/unicore32/include/asm/Kbuild+0−1
@@ -1,4 +1,3 @@
1include include/asm-generic/Kbuild.asm
2 1
3generic-y += atomic.h2generic-y += atomic.h
4generic-y += auxvec.h3generic-y += auxvec.h
arch/unicore32/include/asm/bug.h+0−5
@@ -19,9 +19,4 @@ extern void die(const char *msg, struct pt_regs *regs, int err); · 18 unmodified lines
19extern void uc32_notify_die(const char *str, struct pt_regs *regs,19extern void uc32_notify_die(const char *str, struct pt_regs *regs,
20 struct siginfo *info, unsigned long err, unsigned long trap);20 struct siginfo *info, unsigned long err, unsigned long trap);
21 21
22extern asmlinkage void __backtrace(void);
23extern asmlinkage void c_backtrace(unsigned long fp, int pmode);
24
25extern void __show_regs(struct pt_regs *);
26
27#endif /* __UNICORE_BUG_H__ */22#endif /* __UNICORE_BUG_H__ */
arch/unicore32/include/asm/cmpxchg.h+1−1
@@ -35,7 +35,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, · 34 unmodified lines
35 : "memory", "cc");35 : "memory", "cc");
36 break;36 break;
37 default:37 default:
38 ret = __xchg_bad_pointer();38 __xchg_bad_pointer();
39 }39 }
40 40
41 return ret;41 return ret;
arch/unicore32/include/asm/kvm_para.h+0−1
@@ -1 +0,0 @@
1#include <asm-generic/kvm_para.h>
arch/unicore32/include/asm/processor.h+0−5
@@ -72,11 +72,6 @@ unsigned long get_wchan(struct task_struct *p); · 71 unmodified lines
72 72
73#define cpu_relax() barrier()73#define cpu_relax() barrier()
74 74
75/*
76 * Create a new kernel thread
77 */
78extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
79
80#define task_pt_regs(p) \75#define task_pt_regs(p) \
81 ((struct pt_regs *)(THREAD_START_SP + task_stack_page(p)) - 1)76 ((struct pt_regs *)(THREAD_START_SP + task_stack_page(p)) - 1)
82 77
arch/unicore32/include/asm/ptrace.h+1−75
@@ -12,80 +12,10 @@ · 11 unmodified lines
12#ifndef __UNICORE_PTRACE_H__12#ifndef __UNICORE_PTRACE_H__
13#define __UNICORE_PTRACE_H__13#define __UNICORE_PTRACE_H__
14 14
15#define PTRACE_GET_THREAD_AREA 2215#include <uapi/asm/ptrace.h>
16
17/*
18 * PSR bits
19 */
20#define USER_MODE 0x00000010
21#define REAL_MODE 0x00000011
22#define INTR_MODE 0x00000012
23#define PRIV_MODE 0x00000013
24#define ABRT_MODE 0x00000017
25#define EXTN_MODE 0x0000001b
26#define SUSR_MODE 0x0000001f
27#define MODE_MASK 0x0000001f
28#define PSR_R_BIT 0x00000040
29#define PSR_I_BIT 0x00000080
30#define PSR_V_BIT 0x10000000
31#define PSR_C_BIT 0x20000000
32#define PSR_Z_BIT 0x40000000
33#define PSR_S_BIT 0x80000000
34
35/*
36 * Groups of PSR bits
37 */
38#define PSR_f 0xff000000 /* Flags */
39#define PSR_c 0x000000ff /* Control */
40 16
41#ifndef __ASSEMBLY__17#ifndef __ASSEMBLY__
42 18
43/*
44 * This struct defines the way the registers are stored on the
45 * stack during a system call. Note that sizeof(struct pt_regs)
46 * has to be a multiple of 8.
47 */
48struct pt_regs {
49 unsigned long uregs[34];
50};
51
52#define UCreg_asr uregs[32]
53#define UCreg_pc uregs[31]
54#define UCreg_lr uregs[30]
55#define UCreg_sp uregs[29]
56#define UCreg_ip uregs[28]
57#define UCreg_fp uregs[27]
58#define UCreg_26 uregs[26]
59#define UCreg_25 uregs[25]
60#define UCreg_24 uregs[24]
61#define UCreg_23 uregs[23]
62#define UCreg_22 uregs[22]
63#define UCreg_21 uregs[21]
64#define UCreg_20 uregs[20]
65#define UCreg_19 uregs[19]
66#define UCreg_18 uregs[18]
67#define UCreg_17 uregs[17]
68#define UCreg_16 uregs[16]
69#define UCreg_15 uregs[15]
70#define UCreg_14 uregs[14]
71#define UCreg_13 uregs[13]
72#define UCreg_12 uregs[12]
73#define UCreg_11 uregs[11]
74#define UCreg_10 uregs[10]
75#define UCreg_09 uregs[9]
76#define UCreg_08 uregs[8]
77#define UCreg_07 uregs[7]
78#define UCreg_06 uregs[6]
79#define UCreg_05 uregs[5]
80#define UCreg_04 uregs[4]
81#define UCreg_03 uregs[3]
82#define UCreg_02 uregs[2]
83#define UCreg_01 uregs[1]
84#define UCreg_00 uregs[0]
85#define UCreg_ORIG_00 uregs[33]
86
87#ifdef __KERNEL__
88
89#define user_mode(regs) \19#define user_mode(regs) \
90 (processor_mode(regs) == USER_MODE)20 (processor_mode(regs) == USER_MODE)
91 21
@@ -125,9 +55,5 @@ static inline int valid_user_regs(struct pt_regs *regs) · 33 unmodified lines
125 55
126#define instruction_pointer(regs) ((regs)->UCreg_pc)56#define instruction_pointer(regs) ((regs)->UCreg_pc)
127 57
128#endif /* __KERNEL__ */
129
130#endif /* __ASSEMBLY__ */58#endif /* __ASSEMBLY__ */
131
132#endif59#endif
133
arch/unicore32/include/uapi/asm/Kbuild+7−0
@@ -1,3 +1,10 @@
1# UAPI Header export list1# UAPI Header export list
2include include/uapi/asm-generic/Kbuild.asm2include include/uapi/asm-generic/Kbuild.asm
3 3
4header-y += byteorder.h
5header-y += kvm_para.h
6header-y += ptrace.h
7header-y += sigcontext.h
8header-y += unistd.h
9
10generic-y += kvm_para.h
arch/unicore32/include/uapi/asm/byteorder.hrenamed from arch/unicore32/include/asm/byteorder.h+0−0

File renamed without changes.

arch/unicore32/include/uapi/asm/ptrace.h+90−0
@@ -0,0 +1,90 @@
1/*
2 * linux/arch/unicore32/include/asm/ptrace.h
3 *
4 * Code specific to PKUnity SoC and UniCore ISA
5 *
6 * Copyright (C) 2001-2010 GUAN Xue-tao
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12#ifndef _UAPI__UNICORE_PTRACE_H__
13#define _UAPI__UNICORE_PTRACE_H__
14
15#define PTRACE_GET_THREAD_AREA 22
16
17/*
18 * PSR bits
19 */
20#define USER_MODE 0x00000010
21#define REAL_MODE 0x00000011
22#define INTR_MODE 0x00000012
23#define PRIV_MODE 0x00000013
24#define ABRT_MODE 0x00000017
25#define EXTN_MODE 0x0000001b
26#define SUSR_MODE 0x0000001f
27#define MODE_MASK 0x0000001f
28#define PSR_R_BIT 0x00000040
29#define PSR_I_BIT 0x00000080
30#define PSR_V_BIT 0x10000000
31#define PSR_C_BIT 0x20000000
32#define PSR_Z_BIT 0x40000000
33#define PSR_S_BIT 0x80000000
34
35/*
36 * Groups of PSR bits
37 */
38#define PSR_f 0xff000000 /* Flags */
39#define PSR_c 0x000000ff /* Control */
40
41#ifndef __ASSEMBLY__
42
43/*
44 * This struct defines the way the registers are stored on the
45 * stack during a system call. Note that sizeof(struct pt_regs)
46 * has to be a multiple of 8.
47 */
48struct pt_regs {
49 unsigned long uregs[34];
50};
51
52#define UCreg_asr uregs[32]
53#define UCreg_pc uregs[31]
54#define UCreg_lr uregs[30]
55#define UCreg_sp uregs[29]
56#define UCreg_ip uregs[28]
57#define UCreg_fp uregs[27]
58#define UCreg_26 uregs[26]
59#define UCreg_25 uregs[25]
60#define UCreg_24 uregs[24]
61#define UCreg_23 uregs[23]
62#define UCreg_22 uregs[22]
63#define UCreg_21 uregs[21]
64#define UCreg_20 uregs[20]
65#define UCreg_19 uregs[19]
66#define UCreg_18 uregs[18]
67#define UCreg_17 uregs[17]
68#define UCreg_16 uregs[16]
69#define UCreg_15 uregs[15]
70#define UCreg_14 uregs[14]
71#define UCreg_13 uregs[13]
72#define UCreg_12 uregs[12]
73#define UCreg_11 uregs[11]
74#define UCreg_10 uregs[10]
75#define UCreg_09 uregs[9]
76#define UCreg_08 uregs[8]
77#define UCreg_07 uregs[7]
78#define UCreg_06 uregs[6]
79#define UCreg_05 uregs[5]
80#define UCreg_04 uregs[4]
81#define UCreg_03 uregs[3]
82#define UCreg_02 uregs[2]
83#define UCreg_01 uregs[1]
84#define UCreg_00 uregs[0]
85#define UCreg_ORIG_00 uregs[33]
86
87
88#endif /* __ASSEMBLY__ */
89
90#endif /* _UAPI__UNICORE_PTRACE_H__ */
arch/unicore32/include/uapi/asm/sigcontext.hrenamed from arch/unicore32/include/asm/sigcontext.h+0−0

File renamed without changes.

arch/unicore32/include/uapi/asm/unistd.hrenamed from arch/unicore32/include/asm/unistd.h+1−0
@@ -12,3 +12,4 @@ · 11 unmodified lines
12 12
13/* Use the standard ABI for syscalls. */13/* Use the standard ABI for syscalls. */
14#include <asm-generic/unistd.h>14#include <asm-generic/unistd.h>
15#define __ARCH_WANT_SYS_EXECVE
arch/unicore32/kernel/entry.S+7−13
@@ -573,17 +573,16 @@ ENDPROC(ret_to_user) · 572 unmodified lines
573 */573 */
574ENTRY(ret_from_fork)574ENTRY(ret_from_fork)
575 b.l schedule_tail575 b.l schedule_tail
576 get_thread_info tsk
577 ldw r1, [tsk+], #TI_FLAGS @ check for syscall tracing
578 mov why, #1
579 cand.a r1, #_TIF_SYSCALL_TRACE @ are we tracing syscalls?
580 beq ret_slow_syscall
581 mov r1, sp
582 mov r0, #1 @ trace exit [IP = 1]
583 b.l syscall_trace
584 b ret_slow_syscall576 b ret_slow_syscall
585ENDPROC(ret_from_fork)577ENDPROC(ret_from_fork)
586 578
579ENTRY(ret_from_kernel_thread)
580 b.l schedule_tail
581 mov r0, r5
582 adr lr, ret_slow_syscall
583 mov pc, r4
584ENDPROC(ret_from_kernel_thread)
585
587/*=============================================================================586/*=============================================================================
588 * SWI handler587 * SWI handler
589 *-----------------------------------------------------------------------------588 *-----------------------------------------------------------------------------
@@ -669,11 +668,6 @@ __cr_alignment: · 79 unmodified lines
669#endif668#endif
670 .ltorg669 .ltorg
671 670
672ENTRY(sys_execve)
673 add r3, sp, #S_OFF
674 b __sys_execve
675ENDPROC(sys_execve)
676
677ENTRY(sys_clone)671ENTRY(sys_clone)
678 add ip, sp, #S_OFF672 add ip, sp, #S_OFF
679 stw ip, [sp+], #4673 stw ip, [sp+], #4
arch/unicore32/kernel/process.c+14−44
@@ -258,6 +258,7 @@ void release_thread(struct task_struct *dead_task) · 257 unmodified lines
258}258}
259 259
260asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");260asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
261asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread");
261 262
262int263int
263copy_thread(unsigned long clone_flags, unsigned long stack_start,264copy_thread(unsigned long clone_flags, unsigned long stack_start,
@@ -266,17 +267,22 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start, · 2 unmodified lines
266 struct thread_info *thread = task_thread_info(p);267 struct thread_info *thread = task_thread_info(p);
267 struct pt_regs *childregs = task_pt_regs(p);268 struct pt_regs *childregs = task_pt_regs(p);
268 269
269 *childregs = *regs;
270 childregs->UCreg_00 = 0;
271 childregs->UCreg_sp = stack_start;
272
273 memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save));270 memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save));
274 thread->cpu_context.sp = (unsigned long)childregs;271 thread->cpu_context.sp = (unsigned long)childregs;
275 thread->cpu_context.pc = (unsigned long)ret_from_fork;272 if (unlikely(!regs)) {
276 273 thread->cpu_context.pc = (unsigned long)ret_from_kernel_thread;
277 if (clone_flags & CLONE_SETTLS)274 thread->cpu_context.r4 = stack_start;
278 childregs->UCreg_16 = regs->UCreg_03;275 thread->cpu_context.r5 = stk_sz;
276 memset(childregs, 0, sizeof(struct pt_regs));
277 } else {
278 thread->cpu_context.pc = (unsigned long)ret_from_fork;
279 *childregs = *regs;
280 childregs->UCreg_00 = 0;
281 childregs->UCreg_sp = stack_start;
279 282
283 if (clone_flags & CLONE_SETTLS)
284 childregs->UCreg_16 = regs->UCreg_03;
285 }
280 return 0;286 return 0;
281}287}
282 288
@@ -305,42 +311,6 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fp) · 22 unmodified lines
305}311}
306EXPORT_SYMBOL(dump_fpu);312EXPORT_SYMBOL(dump_fpu);
307 313
308/*
309 * Shuffle the argument into the correct register before calling the
310 * thread function. r1 is the thread argument, r2 is the pointer to
311 * the thread function, and r3 points to the exit function.
312 */
313asm(".pushsection .text\n"
314" .align\n"
315" .type kernel_thread_helper, #function\n"
316"kernel_thread_helper:\n"
317" mov.a asr, r7\n"
318" mov r0, r4\n"
319" mov lr, r6\n"
320" mov pc, r5\n"
321" .size kernel_thread_helper, . - kernel_thread_helper\n"
322" .popsection");
323
324/*
325 * Create a kernel thread.
326 */
327pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
328{
329 struct pt_regs regs;
330
331 memset(&regs, 0, sizeof(regs));
332
333 regs.UCreg_04 = (unsigned long)arg;
334 regs.UCreg_05 = (unsigned long)fn;
335 regs.UCreg_06 = (unsigned long)do_exit;
336 regs.UCreg_07 = PRIV_MODE;
337 regs.UCreg_pc = (unsigned long)kernel_thread_helper;
338 regs.UCreg_asr = regs.UCreg_07 | PSR_I_BIT;
339
340 return do_fork(flags|CLONE_VM|CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
341}
342EXPORT_SYMBOL(kernel_thread);
343
344unsigned long get_wchan(struct task_struct *p)314unsigned long get_wchan(struct task_struct *p)
345{315{
346 struct stackframe frame;316 struct stackframe frame;
arch/unicore32/kernel/setup.h+6−0
@@ -30,4 +30,10 @@ extern char __vectors_start[], __vectors_end[]; · 29 unmodified lines
30extern void kernel_thread_helper(void);30extern void kernel_thread_helper(void);
31 31
32extern void __init early_signal_init(void);32extern void __init early_signal_init(void);
33
34extern asmlinkage void __backtrace(void);
35extern asmlinkage void c_backtrace(unsigned long fp, int pmode);
36
37extern void __show_regs(struct pt_regs *);
38
33#endif39#endif
arch/unicore32/kernel/sys.c+0−63
@@ -42,69 +42,6 @@ asmlinkage long __sys_clone(unsigned long clone_flags, unsigned long newsp, · 41 unmodified lines
42 parent_tid, child_tid);42 parent_tid, child_tid);
43}43}
44 44
45/* sys_execve() executes a new program.
46 * This is called indirectly via a small wrapper
47 */
48asmlinkage long __sys_execve(const char __user *filename,
49 const char __user *const __user *argv,
50 const char __user *const __user *envp,
51 struct pt_regs *regs)
52{
53 int error;
54 struct filename *fn;
55
56 fn = getname(filename);
57 error = PTR_ERR(fn);
58 if (IS_ERR(fn))
59 goto out;
60 error = do_execve(fn->name, argv, envp, regs);
61 putname(fn);
62out:
63 return error;
64}
65
66int kernel_execve(const char *filename,
67 const char *const argv[],
68 const char *const envp[])
69{
70 struct pt_regs regs;
71 int ret;
72
73 memset(&regs, 0, sizeof(struct pt_regs));
74 ret = do_execve(filename,
75 (const char __user *const __user *)argv,
76 (const char __user *const __user *)envp, &regs);
77 if (ret < 0)
78 goto out;
79
80 /*
81 * Save argc to the register structure for userspace.
82 */
83 regs.UCreg_00 = ret;
84
85 /*
86 * We were successful. We won't be returning to our caller, but
87 * instead to user space by manipulating the kernel stack.
88 */
89 asm("add r0, %0, %1\n\t"
90 "mov r1, %2\n\t"
91 "mov r2, %3\n\t"
92 "mov r22, #0\n\t" /* not a syscall */
93 "mov r23, %0\n\t" /* thread structure */
94 "b.l memmove\n\t" /* copy regs to top of stack */
95 "mov sp, r0\n\t" /* reposition stack pointer */
96 "b ret_to_user"
97 :
98 : "r" (current_thread_info()),
99 "Ir" (THREAD_START_SP - sizeof(regs)),
100 "r" (&regs),
101 "Ir" (sizeof(regs))
102 : "r0", "r1", "r2", "r3", "ip", "lr", "memory");
103
104 out:
105 return ret;
106}
107
108/* Note: used by the compat code even in 64-bit Linux. */45/* Note: used by the compat code even in 64-bit Linux. */
109SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len,46SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len,
110 unsigned long, prot, unsigned long, flags,47 unsigned long, prot, unsigned long, flags,
arch/unicore32/mm/fault.c+27−10
@@ -168,7 +168,7 @@ static inline bool access_error(unsigned int fsr, struct vm_area_struct *vma) · 167 unmodified lines
168}168}
169 169
170static int __do_pf(struct mm_struct *mm, unsigned long addr, unsigned int fsr,170static int __do_pf(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
171 struct task_struct *tsk)171 unsigned int flags, struct task_struct *tsk)
172{172{
173 struct vm_area_struct *vma;173 struct vm_area_struct *vma;
174 int fault;174 int fault;
@@ -194,14 +194,7 @@ good_area: · 19 unmodified lines
194 * If for any reason at all we couldn't handle the fault, make194 * If for any reason at all we couldn't handle the fault, make
195 * sure we exit gracefully rather than endlessly redo the fault.195 * sure we exit gracefully rather than endlessly redo the fault.
196 */196 */
197 fault = handle_mm_fault(mm, vma, addr & PAGE_MASK,197 fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, flags);
198 (!(fsr ^ 0x12)) ? FAULT_FLAG_WRITE : 0);
199 if (unlikely(fault & VM_FAULT_ERROR))
200 return fault;
201 if (fault & VM_FAULT_MAJOR)
202 tsk->maj_flt++;
203 else
204 tsk->min_flt++;
205 return fault;198 return fault;
206 199
207check_stack:200check_stack:
@@ -216,6 +209,8 @@ static int do_pf(unsigned long addr, unsigned int fsr, struct pt_regs *regs) · 8 unmodified lines
216 struct task_struct *tsk;209 struct task_struct *tsk;
217 struct mm_struct *mm;210 struct mm_struct *mm;
218 int fault, sig, code;211 int fault, sig, code;
212 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE |
213 ((!(fsr ^ 0x12)) ? FAULT_FLAG_WRITE : 0);
219 214
220 tsk = current;215 tsk = current;
221 mm = tsk->mm;216 mm = tsk->mm;
@@ -236,6 +231,7 @@ static int do_pf(unsigned long addr, unsigned int fsr, struct pt_regs *regs) · 14 unmodified lines
236 if (!user_mode(regs)231 if (!user_mode(regs)
237 && !search_exception_tables(regs->UCreg_pc))232 && !search_exception_tables(regs->UCreg_pc))
238 goto no_context;233 goto no_context;
234retry:
239 down_read(&mm->mmap_sem);235 down_read(&mm->mmap_sem);
240 } else {236 } else {
241 /*237 /*
@@ -251,7 +247,28 @@ static int do_pf(unsigned long addr, unsigned int fsr, struct pt_regs *regs) · 9 unmodified lines
251#endif247#endif
252 }248 }
253 249
254 fault = __do_pf(mm, addr, fsr, tsk);250 fault = __do_pf(mm, addr, fsr, flags, tsk);
251
252 /* If we need to retry but a fatal signal is pending, handle the
253 * signal first. We do not need to release the mmap_sem because
254 * it would already be released in __lock_page_or_retry in
255 * mm/filemap.c. */
256 if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
257 return 0;
258
259 if (!(fault & VM_FAULT_ERROR) && (flags & FAULT_FLAG_ALLOW_RETRY)) {
260 if (fault & VM_FAULT_MAJOR)
261 tsk->maj_flt++;
262 else
263 tsk->min_flt++;
264 if (fault & VM_FAULT_RETRY) {
265 /* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
266 * of starvation. */
267 flags &= ~FAULT_FLAG_ALLOW_RETRY;
268 goto retry;
269 }
270 }
271
255 up_read(&mm->mmap_sem);272 up_read(&mm->mmap_sem);
256 273
257 /*274 /*
arch/x86/kvm/cpuid.h+3−0
@@ -24,6 +24,9 @@ static inline bool guest_cpuid_has_xsave(struct kvm_vcpu *vcpu) · 23 unmodified lines
24{24{
25 struct kvm_cpuid_entry2 *best;25 struct kvm_cpuid_entry2 *best;
26 26
27 if (!static_cpu_has(X86_FEATURE_XSAVE))
28 return 0;
29
27 best = kvm_find_cpuid_entry(vcpu, 1, 0);30 best = kvm_find_cpuid_entry(vcpu, 1, 0);
28 return best && (best->ecx & bit(X86_FEATURE_XSAVE));31 return best && (best->ecx & bit(X86_FEATURE_XSAVE));
29}32}
arch/x86/kvm/vmx.c+7−4
@@ -6549,19 +6549,22 @@ static void vmx_cpuid_update(struct kvm_vcpu *vcpu) · 6548 unmodified lines
6549 }6549 }
6550 }6550 }
6551 6551
6552 exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
6553 /* Exposing INVPCID only when PCID is exposed */6552 /* Exposing INVPCID only when PCID is exposed */
6554 best = kvm_find_cpuid_entry(vcpu, 0x7, 0);6553 best = kvm_find_cpuid_entry(vcpu, 0x7, 0);
6555 if (vmx_invpcid_supported() &&6554 if (vmx_invpcid_supported() &&
6556 best && (best->ebx & bit(X86_FEATURE_INVPCID)) &&6555 best && (best->ebx & bit(X86_FEATURE_INVPCID)) &&
6557 guest_cpuid_has_pcid(vcpu)) {6556 guest_cpuid_has_pcid(vcpu)) {
6557 exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
6558 exec_control |= SECONDARY_EXEC_ENABLE_INVPCID;6558 exec_control |= SECONDARY_EXEC_ENABLE_INVPCID;
6559 vmcs_write32(SECONDARY_VM_EXEC_CONTROL,6559 vmcs_write32(SECONDARY_VM_EXEC_CONTROL,
6560 exec_control);6560 exec_control);
6561 } else {6561 } else {
6562 exec_control &= ~SECONDARY_EXEC_ENABLE_INVPCID;6562 if (cpu_has_secondary_exec_ctrls()) {
6563 vmcs_write32(SECONDARY_VM_EXEC_CONTROL,6563 exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
6564 exec_control);6564 exec_control &= ~SECONDARY_EXEC_ENABLE_INVPCID;
6565 vmcs_write32(SECONDARY_VM_EXEC_CONTROL,
6566 exec_control);
6567 }
6565 if (best)6568 if (best)
6566 best->ebx &= ~bit(X86_FEATURE_INVPCID);6569 best->ebx &= ~bit(X86_FEATURE_INVPCID);
6567 }6570 }
arch/x86/kvm/x86.c+3−0
@@ -5781,6 +5781,9 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, · 5780 unmodified lines
5781 int pending_vec, max_bits, idx;5781 int pending_vec, max_bits, idx;
5782 struct desc_ptr dt;5782 struct desc_ptr dt;
5783 5783
5784 if (!guest_cpuid_has_xsave(vcpu) && (sregs->cr4 & X86_CR4_OSXSAVE))
5785 return -EINVAL;
5786
5784 dt.size = sregs->idt.limit;5787 dt.size = sregs->idt.limit;
5785 dt.address = sregs->idt.base;5788 dt.address = sregs->idt.base;
5786 kvm_x86_ops->set_idt(vcpu, &dt);5789 kvm_x86_ops->set_idt(vcpu, &dt);
drivers/bluetooth/ath3k.c+1−0
@@ -67,6 +67,7 @@ static struct usb_device_id ath3k_table[] = { · 66 unmodified lines
67 { USB_DEVICE(0x13d3, 0x3304) },67 { USB_DEVICE(0x13d3, 0x3304) },
68 { USB_DEVICE(0x0930, 0x0215) },68 { USB_DEVICE(0x0930, 0x0215) },
69 { USB_DEVICE(0x0489, 0xE03D) },69 { USB_DEVICE(0x0489, 0xE03D) },
70 { USB_DEVICE(0x0489, 0xE027) },
70 71
71 /* Atheros AR9285 Malbec with sflash firmware */72 /* Atheros AR9285 Malbec with sflash firmware */
72 { USB_DEVICE(0x03F0, 0x311D) },73 { USB_DEVICE(0x03F0, 0x311D) },
drivers/bluetooth/btusb.c+1−0
@@ -124,6 +124,7 @@ static struct usb_device_id blacklist_table[] = { · 123 unmodified lines
124 { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },124 { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
125 { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },125 { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },
126 { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },126 { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },
127 { USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE },
127 128
128 /* Atheros AR9285 Malbec with sflash firmware */129 /* Atheros AR9285 Malbec with sflash firmware */
129 { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },130 { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
drivers/bus/omap-ocp2scp.c+65−3
@@ -22,6 +22,26 @@ · 21 unmodified lines
22#include <linux/pm_runtime.h>22#include <linux/pm_runtime.h>
23#include <linux/of.h>23#include <linux/of.h>
24#include <linux/of_platform.h>24#include <linux/of_platform.h>
25#include <linux/platform_data/omap_ocp2scp.h>
26
27/**
28 * _count_resources - count for the number of resources
29 * @res: struct resource *
30 *
31 * Count and return the number of resources populated for the device that is
32 * connected to ocp2scp.
33 */
34static unsigned _count_resources(struct resource *res)
35{
36 int cnt = 0;
37
38 while (res->start != res->end) {
39 cnt++;
40 res++;
41 }
42
43 return cnt;
44}
25 45
26static int ocp2scp_remove_devices(struct device *dev, void *c)46static int ocp2scp_remove_devices(struct device *dev, void *c)
27{47{
@@ -34,20 +54,62 @@ static int ocp2scp_remove_devices(struct device *dev, void *c) · 6 unmodified lines
34 54
35static int __devinit omap_ocp2scp_probe(struct platform_device *pdev)55static int __devinit omap_ocp2scp_probe(struct platform_device *pdev)
36{56{
37 int ret;57 int ret;
38 struct device_node *np = pdev->dev.of_node;58 unsigned res_cnt, i;
59 struct device_node *np = pdev->dev.of_node;
60 struct platform_device *pdev_child;
61 struct omap_ocp2scp_platform_data *pdata = pdev->dev.platform_data;
62 struct omap_ocp2scp_dev *dev;
39 63
40 if (np) {64 if (np) {
41 ret = of_platform_populate(np, NULL, NULL, &pdev->dev);65 ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
42 if (ret) {66 if (ret) {
43 dev_err(&pdev->dev, "failed to add resources for ocp2scp child\n");67 dev_err(&pdev->dev,
68 "failed to add resources for ocp2scp child\n");
44 goto err0;69 goto err0;
45 }70 }
71 } else if (pdata) {
72 for (i = 0, dev = *pdata->devices; i < pdata->dev_cnt; i++,
73 dev++) {
74 res_cnt = _count_resources(dev->res);
75
76 pdev_child = platform_device_alloc(dev->drv_name,
77 PLATFORM_DEVID_AUTO);
78 if (!pdev_child) {
79 dev_err(&pdev->dev,
80 "failed to allocate mem for ocp2scp child\n");
81 goto err0;
82 }
83
84 ret = platform_device_add_resources(pdev_child,
85 dev->res, res_cnt);
86 if (ret) {
87 dev_err(&pdev->dev,
88 "failed to add resources for ocp2scp child\n");
89 goto err1;
90 }
91
92 pdev_child->dev.parent = &pdev->dev;
93
94 ret = platform_device_add(pdev_child);
95 if (ret) {
96 dev_err(&pdev->dev,
97 "failed to register ocp2scp child device\n");
98 goto err1;
99 }
100 }
101 } else {
102 dev_err(&pdev->dev, "OCP2SCP initialized without plat data\n");
103 return -EINVAL;
46 }104 }
105
47 pm_runtime_enable(&pdev->dev);106 pm_runtime_enable(&pdev->dev);
48 107
49 return 0;108 return 0;
50 109
110err1:
111 platform_device_put(pdev_child);
112
51err0:113err0:
52 device_for_each_child(&pdev->dev, NULL, ocp2scp_remove_devices);114 device_for_each_child(&pdev->dev, NULL, ocp2scp_remove_devices);
53 115
drivers/clk/ux500/u8500_clk.c+46−4
@@ -40,7 +40,7 @@ void u8500_clk_init(void) · 39 unmodified lines
40 CLK_IS_ROOT|CLK_IGNORE_UNUSED,40 CLK_IS_ROOT|CLK_IGNORE_UNUSED,
41 32768);41 32768);
42 clk_register_clkdev(clk, "clk32k", NULL);42 clk_register_clkdev(clk, "clk32k", NULL);
43 clk_register_clkdev(clk, NULL, "rtc-pl031");43 clk_register_clkdev(clk, "apb_pclk", "rtc-pl031");
44 44
45 /* PRCMU clocks */45 /* PRCMU clocks */
46 fw_version = prcmu_get_fw_version();46 fw_version = prcmu_get_fw_version();
@@ -228,10 +228,17 @@ void u8500_clk_init(void) · 181 unmodified lines
228 228
229 clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", U8500_CLKRST1_BASE,229 clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", U8500_CLKRST1_BASE,
230 BIT(2), 0);230 BIT(2), 0);
231 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.1");
232
231 clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", U8500_CLKRST1_BASE,233 clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", U8500_CLKRST1_BASE,
232 BIT(3), 0);234 BIT(3), 0);
235 clk_register_clkdev(clk, "apb_pclk", "msp0");
236 clk_register_clkdev(clk, "apb_pclk", "ux500-msp-i2s.0");
237
233 clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", U8500_CLKRST1_BASE,238 clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", U8500_CLKRST1_BASE,
234 BIT(4), 0);239 BIT(4), 0);
240 clk_register_clkdev(clk, "apb_pclk", "msp1");
241 clk_register_clkdev(clk, "apb_pclk", "ux500-msp-i2s.1");
235 242
236 clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", U8500_CLKRST1_BASE,243 clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", U8500_CLKRST1_BASE,
237 BIT(5), 0);244 BIT(5), 0);
@@ -239,6 +246,7 @@ void u8500_clk_init(void) · 1 unmodified line
239 246
240 clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", U8500_CLKRST1_BASE,247 clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", U8500_CLKRST1_BASE,
241 BIT(6), 0);248 BIT(6), 0);
249 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.2");
242 250
243 clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", U8500_CLKRST1_BASE,251 clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", U8500_CLKRST1_BASE,
244 BIT(7), 0);252 BIT(7), 0);
@@ -246,6 +254,7 @@ void u8500_clk_init(void) · 1 unmodified line
246 254
247 clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", U8500_CLKRST1_BASE,255 clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", U8500_CLKRST1_BASE,
248 BIT(8), 0);256 BIT(8), 0);
257 clk_register_clkdev(clk, "apb_pclk", "slimbus0");
249 258
250 clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", U8500_CLKRST1_BASE,259 clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", U8500_CLKRST1_BASE,
251 BIT(9), 0);260 BIT(9), 0);
@@ -255,11 +264,16 @@ void u8500_clk_init(void) · 3 unmodified lines
255 264
256 clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", U8500_CLKRST1_BASE,265 clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", U8500_CLKRST1_BASE,
257 BIT(10), 0);266 BIT(10), 0);
267 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.4");
268
258 clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", U8500_CLKRST1_BASE,269 clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", U8500_CLKRST1_BASE,
259 BIT(11), 0);270 BIT(11), 0);
271 clk_register_clkdev(clk, "apb_pclk", "msp3");
272 clk_register_clkdev(clk, "apb_pclk", "ux500-msp-i2s.3");
260 273
261 clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", U8500_CLKRST2_BASE,274 clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", U8500_CLKRST2_BASE,
262 BIT(0), 0);275 BIT(0), 0);
276 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.3");
263 277
264 clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", U8500_CLKRST2_BASE,278 clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", U8500_CLKRST2_BASE,
265 BIT(1), 0);279 BIT(1), 0);
@@ -279,12 +293,13 @@ void u8500_clk_init(void) · 13 unmodified lines
279 293
280 clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", U8500_CLKRST2_BASE,294 clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", U8500_CLKRST2_BASE,
281 BIT(5), 0);295 BIT(5), 0);
296 clk_register_clkdev(clk, "apb_pclk", "msp2");
297 clk_register_clkdev(clk, "apb_pclk", "ux500-msp-i2s.2");
282 298
283 clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", U8500_CLKRST2_BASE,299 clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", U8500_CLKRST2_BASE,
284 BIT(6), 0);300 BIT(6), 0);
285 clk_register_clkdev(clk, "apb_pclk", "sdi1");301 clk_register_clkdev(clk, "apb_pclk", "sdi1");
286 302
287
288 clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", U8500_CLKRST2_BASE,303 clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", U8500_CLKRST2_BASE,
289 BIT(7), 0);304 BIT(7), 0);
290 clk_register_clkdev(clk, "apb_pclk", "sdi3");305 clk_register_clkdev(clk, "apb_pclk", "sdi3");
@@ -316,10 +331,15 @@ void u8500_clk_init(void) · 25 unmodified lines
316 331
317 clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", U8500_CLKRST3_BASE,332 clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", U8500_CLKRST3_BASE,
318 BIT(1), 0);333 BIT(1), 0);
334 clk_register_clkdev(clk, "apb_pclk", "ssp0");
335
319 clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", U8500_CLKRST3_BASE,336 clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", U8500_CLKRST3_BASE,
320 BIT(2), 0);337 BIT(2), 0);
338 clk_register_clkdev(clk, "apb_pclk", "ssp1");
339
321 clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", U8500_CLKRST3_BASE,340 clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", U8500_CLKRST3_BASE,
322 BIT(3), 0);341 BIT(3), 0);
342 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.0");
323 343
324 clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", U8500_CLKRST3_BASE,344 clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", U8500_CLKRST3_BASE,
325 BIT(4), 0);345 BIT(4), 0);
@@ -401,10 +421,17 @@ void u8500_clk_init(void) · 75 unmodified lines
401 421
402 clk = clk_reg_prcc_kclk("p1_i2c1_kclk", "i2cclk",422 clk = clk_reg_prcc_kclk("p1_i2c1_kclk", "i2cclk",
403 U8500_CLKRST1_BASE, BIT(2), CLK_SET_RATE_GATE);423 U8500_CLKRST1_BASE, BIT(2), CLK_SET_RATE_GATE);
424 clk_register_clkdev(clk, NULL, "nmk-i2c.1");
425
404 clk = clk_reg_prcc_kclk("p1_msp0_kclk", "msp02clk",426 clk = clk_reg_prcc_kclk("p1_msp0_kclk", "msp02clk",
405 U8500_CLKRST1_BASE, BIT(3), CLK_SET_RATE_GATE);427 U8500_CLKRST1_BASE, BIT(3), CLK_SET_RATE_GATE);
428 clk_register_clkdev(clk, NULL, "msp0");
429 clk_register_clkdev(clk, NULL, "ux500-msp-i2s.0");
430
406 clk = clk_reg_prcc_kclk("p1_msp1_kclk", "msp1clk",431 clk = clk_reg_prcc_kclk("p1_msp1_kclk", "msp1clk",
407 U8500_CLKRST1_BASE, BIT(4), CLK_SET_RATE_GATE);432 U8500_CLKRST1_BASE, BIT(4), CLK_SET_RATE_GATE);
433 clk_register_clkdev(clk, NULL, "msp1");
434 clk_register_clkdev(clk, NULL, "ux500-msp-i2s.1");
408 435
409 clk = clk_reg_prcc_kclk("p1_sdi0_kclk", "sdmmcclk",436 clk = clk_reg_prcc_kclk("p1_sdi0_kclk", "sdmmcclk",
410 U8500_CLKRST1_BASE, BIT(5), CLK_SET_RATE_GATE);437 U8500_CLKRST1_BASE, BIT(5), CLK_SET_RATE_GATE);
@@ -412,17 +439,25 @@ void u8500_clk_init(void) · 1 unmodified line
412 439
413 clk = clk_reg_prcc_kclk("p1_i2c2_kclk", "i2cclk",440 clk = clk_reg_prcc_kclk("p1_i2c2_kclk", "i2cclk",
414 U8500_CLKRST1_BASE, BIT(6), CLK_SET_RATE_GATE);441 U8500_CLKRST1_BASE, BIT(6), CLK_SET_RATE_GATE);
442 clk_register_clkdev(clk, NULL, "nmk-i2c.2");
443
415 clk = clk_reg_prcc_kclk("p1_slimbus0_kclk", "slimclk",444 clk = clk_reg_prcc_kclk("p1_slimbus0_kclk", "slimclk",
416 U8500_CLKRST1_BASE, BIT(3), CLK_SET_RATE_GATE);445 U8500_CLKRST1_BASE, BIT(8), CLK_SET_RATE_GATE);
417 /* FIXME: Redefinition of BIT(3). */446 clk_register_clkdev(clk, NULL, "slimbus0");
447
418 clk = clk_reg_prcc_kclk("p1_i2c4_kclk", "i2cclk",448 clk = clk_reg_prcc_kclk("p1_i2c4_kclk", "i2cclk",
419 U8500_CLKRST1_BASE, BIT(9), CLK_SET_RATE_GATE);449 U8500_CLKRST1_BASE, BIT(9), CLK_SET_RATE_GATE);
450 clk_register_clkdev(clk, NULL, "nmk-i2c.4");
451
420 clk = clk_reg_prcc_kclk("p1_msp3_kclk", "msp1clk",452 clk = clk_reg_prcc_kclk("p1_msp3_kclk", "msp1clk",
421 U8500_CLKRST1_BASE, BIT(10), CLK_SET_RATE_GATE);453 U8500_CLKRST1_BASE, BIT(10), CLK_SET_RATE_GATE);
454 clk_register_clkdev(clk, NULL, "msp3");
455 clk_register_clkdev(clk, NULL, "ux500-msp-i2s.3");
422 456
423 /* Periph2 */457 /* Periph2 */
424 clk = clk_reg_prcc_kclk("p2_i2c3_kclk", "i2cclk",458 clk = clk_reg_prcc_kclk("p2_i2c3_kclk", "i2cclk",
425 U8500_CLKRST2_BASE, BIT(0), CLK_SET_RATE_GATE);459 U8500_CLKRST2_BASE, BIT(0), CLK_SET_RATE_GATE);
460 clk_register_clkdev(clk, NULL, "nmk-i2c.3");
426 461
427 clk = clk_reg_prcc_kclk("p2_sdi4_kclk", "sdmmcclk",462 clk = clk_reg_prcc_kclk("p2_sdi4_kclk", "sdmmcclk",
428 U8500_CLKRST2_BASE, BIT(2), CLK_SET_RATE_GATE);463 U8500_CLKRST2_BASE, BIT(2), CLK_SET_RATE_GATE);
@@ -430,6 +465,8 @@ void u8500_clk_init(void) · 1 unmodified line
430 465
431 clk = clk_reg_prcc_kclk("p2_msp2_kclk", "msp02clk",466 clk = clk_reg_prcc_kclk("p2_msp2_kclk", "msp02clk",
432 U8500_CLKRST2_BASE, BIT(3), CLK_SET_RATE_GATE);467 U8500_CLKRST2_BASE, BIT(3), CLK_SET_RATE_GATE);
468 clk_register_clkdev(clk, NULL, "msp2");
469 clk_register_clkdev(clk, NULL, "ux500-msp-i2s.2");
433 470
434 clk = clk_reg_prcc_kclk("p2_sdi1_kclk", "sdmmcclk",471 clk = clk_reg_prcc_kclk("p2_sdi1_kclk", "sdmmcclk",
435 U8500_CLKRST2_BASE, BIT(4), CLK_SET_RATE_GATE);472 U8500_CLKRST2_BASE, BIT(4), CLK_SET_RATE_GATE);
@@ -450,10 +487,15 @@ void u8500_clk_init(void) · 14 unmodified lines
450 /* Periph3 */487 /* Periph3 */
451 clk = clk_reg_prcc_kclk("p3_ssp0_kclk", "sspclk",488 clk = clk_reg_prcc_kclk("p3_ssp0_kclk", "sspclk",
452 U8500_CLKRST3_BASE, BIT(1), CLK_SET_RATE_GATE);489 U8500_CLKRST3_BASE, BIT(1), CLK_SET_RATE_GATE);
490 clk_register_clkdev(clk, NULL, "ssp0");
491
453 clk = clk_reg_prcc_kclk("p3_ssp1_kclk", "sspclk",492 clk = clk_reg_prcc_kclk("p3_ssp1_kclk", "sspclk",
454 U8500_CLKRST3_BASE, BIT(2), CLK_SET_RATE_GATE);493 U8500_CLKRST3_BASE, BIT(2), CLK_SET_RATE_GATE);
494 clk_register_clkdev(clk, NULL, "ssp1");
495
455 clk = clk_reg_prcc_kclk("p3_i2c0_kclk", "i2cclk",496 clk = clk_reg_prcc_kclk("p3_i2c0_kclk", "i2cclk",
456 U8500_CLKRST3_BASE, BIT(3), CLK_SET_RATE_GATE);497 U8500_CLKRST3_BASE, BIT(3), CLK_SET_RATE_GATE);
498 clk_register_clkdev(clk, NULL, "nmk-i2c.0");
457 499
458 clk = clk_reg_prcc_kclk("p3_sdi2_kclk", "sdmmcclk",500 clk = clk_reg_prcc_kclk("p3_sdi2_kclk", "sdmmcclk",
459 U8500_CLKRST3_BASE, BIT(4), CLK_SET_RATE_GATE);501 U8500_CLKRST3_BASE, BIT(4), CLK_SET_RATE_GATE);
drivers/gpu/drm/i915/intel_crt.c+1−1
@@ -143,7 +143,7 @@ static void intel_crt_dpms(struct drm_connector *connector, int mode) · 142 unmodified lines
143 int old_dpms;143 int old_dpms;
144 144
145 /* PCH platforms and VLV only support on/off. */145 /* PCH platforms and VLV only support on/off. */
146 if (INTEL_INFO(dev)->gen < 5 && mode != DRM_MODE_DPMS_ON)146 if (INTEL_INFO(dev)->gen >= 5 && mode != DRM_MODE_DPMS_ON)
147 mode = DRM_MODE_DPMS_OFF;147 mode = DRM_MODE_DPMS_OFF;
148 148
149 if (mode == connector->dpms)149 if (mode == connector->dpms)
drivers/gpu/drm/i915/intel_display.c+11−0
@@ -3841,6 +3841,17 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc, · 3840 unmodified lines
3841 }3841 }
3842 }3842 }
3843 3843
3844 if (intel_encoder->type == INTEL_OUTPUT_EDP) {
3845 /* Use VBT settings if we have an eDP panel */
3846 unsigned int edp_bpc = dev_priv->edp.bpp / 3;
3847
3848 if (edp_bpc < display_bpc) {
3849 DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc);
3850 display_bpc = edp_bpc;
3851 }
3852 continue;
3853 }
3854
3844 /*3855 /*
3845 * HDMI is either 12 or 8, so if the display lets 10bpc sneak3856 * HDMI is either 12 or 8, so if the display lets 10bpc sneak
3846 * through, clamp it down. (Note: >12bpc will be caught below.)3857 * through, clamp it down. (Note: >12bpc will be caught below.)
drivers/gpu/drm/i915/intel_sdvo.c+19−3
@@ -2382,6 +2382,18 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, uint16_t flags) · 2381 unmodified lines
2382 return true;2382 return true;
2383}2383}
2384 2384
2385static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo)
2386{
2387 struct drm_device *dev = intel_sdvo->base.base.dev;
2388 struct drm_connector *connector, *tmp;
2389
2390 list_for_each_entry_safe(connector, tmp,
2391 &dev->mode_config.connector_list, head) {
2392 if (intel_attached_encoder(connector) == &intel_sdvo->base)
2393 intel_sdvo_destroy(connector);
2394 }
2395}
2396
2385static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,2397static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
2386 struct intel_sdvo_connector *intel_sdvo_connector,2398 struct intel_sdvo_connector *intel_sdvo_connector,
2387 int type)2399 int type)
@@ -2705,7 +2717,8 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) · 317 unmodified lines
2705 intel_sdvo->caps.output_flags) != true) {2717 intel_sdvo->caps.output_flags) != true) {
2706 DRM_DEBUG_KMS("SDVO output failed to setup on %s\n",2718 DRM_DEBUG_KMS("SDVO output failed to setup on %s\n",
2707 SDVO_NAME(intel_sdvo));2719 SDVO_NAME(intel_sdvo));
2708 goto err;2720 /* Output_setup can leave behind connectors! */
2721 goto err_output;
2709 }2722 }
2710 2723
2711 /* Only enable the hotplug irq if we need it, to work around noisy2724 /* Only enable the hotplug irq if we need it, to work around noisy
@@ -2718,12 +2731,12 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) · 6 unmodified lines
2718 2731
2719 /* Set the input timing to the screen. Assume always input 0. */2732 /* Set the input timing to the screen. Assume always input 0. */
2720 if (!intel_sdvo_set_target_input(intel_sdvo))2733 if (!intel_sdvo_set_target_input(intel_sdvo))
2721 goto err;2734 goto err_output;
2722 2735
2723 if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo,2736 if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo,
2724 &intel_sdvo->pixel_clock_min,2737 &intel_sdvo->pixel_clock_min,
2725 &intel_sdvo->pixel_clock_max))2738 &intel_sdvo->pixel_clock_max))
2726 goto err;2739 goto err_output;
2727 2740
2728 DRM_DEBUG_KMS("%s device VID/DID: %02X:%02X.%02X, "2741 DRM_DEBUG_KMS("%s device VID/DID: %02X:%02X.%02X, "
2729 "clock range %dMHz - %dMHz, "2742 "clock range %dMHz - %dMHz, "
@@ -2743,6 +2756,9 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) · 13 unmodified lines
2743 (SDVO_OUTPUT_TMDS1 | SDVO_OUTPUT_RGB1) ? 'Y' : 'N');2756 (SDVO_OUTPUT_TMDS1 | SDVO_OUTPUT_RGB1) ? 'Y' : 'N');
2744 return true;2757 return true;
2745 2758
2759err_output:
2760 intel_sdvo_output_cleanup(intel_sdvo);
2761
2746err:2762err:
2747 drm_encoder_cleanup(&intel_encoder->base);2763 drm_encoder_cleanup(&intel_encoder->base);
2748 i2c_del_adapter(&intel_sdvo->ddc);2764 i2c_del_adapter(&intel_sdvo->ddc);
drivers/gpu/drm/radeon/atombios_encoders.c+1−1
@@ -1625,7 +1625,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) · 1624 unmodified lines
1625 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0);1625 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0);
1626 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);1626 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
1627 /* some early dce3.2 boards have a bug in their transmitter control table */1627 /* some early dce3.2 boards have a bug in their transmitter control table */
1628 if ((rdev->family != CHIP_RV710) || (rdev->family != CHIP_RV730))1628 if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730))
1629 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);1629 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
1630 }1630 }
1631 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {1631 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
drivers/gpu/drm/ttm/ttm_page_alloc.c+4−1
@@ -749,7 +749,10 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, · 748 unmodified lines
749 /* clear the pages coming from the pool if requested */749 /* clear the pages coming from the pool if requested */
750 if (flags & TTM_PAGE_FLAG_ZERO_ALLOC) {750 if (flags & TTM_PAGE_FLAG_ZERO_ALLOC) {
751 list_for_each_entry(p, &plist, lru) {751 list_for_each_entry(p, &plist, lru) {
752 clear_page(page_address(p));752 if (PageHighMem(p))
753 clear_highpage(p);
754 else
755 clear_page(page_address(p));
753 }756 }
754 }757 }
755 758
drivers/gpu/drm/ttm/ttm_tt.c+0−4
@@ -308,9 +308,7 @@ int ttm_tt_swapin(struct ttm_tt *ttm) · 307 unmodified lines
308 if (unlikely(to_page == NULL))308 if (unlikely(to_page == NULL))
309 goto out_err;309 goto out_err;
310 310
311 preempt_disable();
312 copy_highpage(to_page, from_page);311 copy_highpage(to_page, from_page);
313 preempt_enable();
314 page_cache_release(from_page);312 page_cache_release(from_page);
315 }313 }
316 314
@@ -358,9 +356,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistent_swap_storage) · 41 unmodified lines
358 ret = PTR_ERR(to_page);356 ret = PTR_ERR(to_page);
359 goto out_err;357 goto out_err;
360 }358 }
361 preempt_disable();
362 copy_highpage(to_page, from_page);359 copy_highpage(to_page, from_page);
363 preempt_enable();
364 set_page_dirty(to_page);360 set_page_dirty(to_page);
365 mark_page_accessed(to_page);361 mark_page_accessed(to_page);
366 page_cache_release(to_page);362 page_cache_release(to_page);
drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c+2−0
@@ -110,6 +110,8 @@ int vmw_get_cap_3d_ioctl(struct drm_device *dev, void *data, · 109 unmodified lines
110 memcpy_fromio(bounce, &fifo_mem[SVGA_FIFO_3D_CAPS], size);110 memcpy_fromio(bounce, &fifo_mem[SVGA_FIFO_3D_CAPS], size);
111 111
112 ret = copy_to_user(buffer, bounce, size);112 ret = copy_to_user(buffer, bounce, size);
113 if (ret)
114 ret = -EFAULT;
113 vfree(bounce);115 vfree(bounce);
114 116
115 if (unlikely(ret != 0))117 if (unlikely(ret != 0))
drivers/hid/hid-microsoft.c+3−3
@@ -46,9 +46,9 @@ static __u8 *ms_report_fixup(struct hid_device *hdev, __u8 *rdesc, · 45 unmodified lines
46 rdesc[559] = 0x45;46 rdesc[559] = 0x45;
47 }47 }
48 /* the same as above (s/usage/physical/) */48 /* the same as above (s/usage/physical/) */
49 if ((quirks & MS_RDESC_3K) && *rsize == 106 &&49 if ((quirks & MS_RDESC_3K) && *rsize == 106 && rdesc[94] == 0x19 &&
50 !memcmp((char []){ 0x19, 0x00, 0x29, 0xff },50 rdesc[95] == 0x00 && rdesc[96] == 0x29 &&
51 &rdesc[94], 4)) {51 rdesc[97] == 0xff) {
52 rdesc[94] = 0x35;52 rdesc[94] = 0x35;
53 rdesc[96] = 0x45;53 rdesc[96] = 0x45;
54 }54 }
drivers/i2c/muxes/i2c-mux-pinctrl.c+1−1
@@ -169,7 +169,7 @@ static int __devinit i2c_mux_pinctrl_probe(struct platform_device *pdev) · 168 unmodified lines
169 mux->busses = devm_kzalloc(&pdev->dev,169 mux->busses = devm_kzalloc(&pdev->dev,
170 sizeof(mux->busses) * mux->pdata->bus_count,170 sizeof(mux->busses) * mux->pdata->bus_count,
171 GFP_KERNEL);171 GFP_KERNEL);
172 if (!mux->states) {172 if (!mux->busses) {
173 dev_err(&pdev->dev, "Cannot allocate busses\n");173 dev_err(&pdev->dev, "Cannot allocate busses\n");
174 ret = -ENOMEM;174 ret = -ENOMEM;
175 goto err;175 goto err;
drivers/irqchip/irq-bcm2835.c+2−1
@@ -168,7 +168,8 @@ static int __init armctrl_of_init(struct device_node *node, · 167 unmodified lines
168}168}
169 169
170static struct of_device_id irq_of_match[] __initconst = {170static struct of_device_id irq_of_match[] __initconst = {
171 { .compatible = "brcm,bcm2835-armctrl-ic", .data = armctrl_of_init }171 { .compatible = "brcm,bcm2835-armctrl-ic", .data = armctrl_of_init },
172 { }
172};173};
173 174
174void __init bcm2835_init_irq(void)175void __init bcm2835_init_irq(void)
drivers/leds/ledtrig-cpu.c+0−21
@@ -33,8 +33,6 @@ · 32 unmodified lines
33struct led_trigger_cpu {33struct led_trigger_cpu {
34 char name[MAX_NAME_LEN];34 char name[MAX_NAME_LEN];
35 struct led_trigger *_trig;35 struct led_trigger *_trig;
36 struct mutex lock;
37 int lock_is_inited;
38};36};
39 37
40static DEFINE_PER_CPU(struct led_trigger_cpu, cpu_trig);38static DEFINE_PER_CPU(struct led_trigger_cpu, cpu_trig);
@@ -50,12 +48,6 @@ void ledtrig_cpu(enum cpu_led_event ledevt) · 9 unmodified lines
50{48{
51 struct led_trigger_cpu *trig = &__get_cpu_var(cpu_trig);49 struct led_trigger_cpu *trig = &__get_cpu_var(cpu_trig);
52 50
53 /* mutex lock should be initialized before calling mutex_call() */
54 if (!trig->lock_is_inited)
55 return;
56
57 mutex_lock(&trig->lock);
58
59 /* Locate the correct CPU LED */51 /* Locate the correct CPU LED */
60 switch (ledevt) {52 switch (ledevt) {
61 case CPU_LED_IDLE_END:53 case CPU_LED_IDLE_END:
@@ -75,8 +67,6 @@ void ledtrig_cpu(enum cpu_led_event ledevt) · 13 unmodified lines
75 /* Will leave the LED as it is */67 /* Will leave the LED as it is */
76 break;68 break;
77 }69 }
78
79 mutex_unlock(&trig->lock);
80}70}
81EXPORT_SYMBOL(ledtrig_cpu);71EXPORT_SYMBOL(ledtrig_cpu);
82 72
@@ -117,14 +107,9 @@ static int __init ledtrig_cpu_init(void) · 34 unmodified lines
117 for_each_possible_cpu(cpu) {107 for_each_possible_cpu(cpu) {
118 struct led_trigger_cpu *trig = &per_cpu(cpu_trig, cpu);108 struct led_trigger_cpu *trig = &per_cpu(cpu_trig, cpu);
119 109
120 mutex_init(&trig->lock);
121
122 snprintf(trig->name, MAX_NAME_LEN, "cpu%d", cpu);110 snprintf(trig->name, MAX_NAME_LEN, "cpu%d", cpu);
123 111
124 mutex_lock(&trig->lock);
125 led_trigger_register_simple(trig->name, &trig->_trig);112 led_trigger_register_simple(trig->name, &trig->_trig);
126 trig->lock_is_inited = 1;
127 mutex_unlock(&trig->lock);
128 }113 }
129 114
130 register_syscore_ops(&ledtrig_cpu_syscore_ops);115 register_syscore_ops(&ledtrig_cpu_syscore_ops);
@@ -142,15 +127,9 @@ static void __exit ledtrig_cpu_exit(void) · 11 unmodified lines
142 for_each_possible_cpu(cpu) {127 for_each_possible_cpu(cpu) {
143 struct led_trigger_cpu *trig = &per_cpu(cpu_trig, cpu);128 struct led_trigger_cpu *trig = &per_cpu(cpu_trig, cpu);
144 129
145 mutex_lock(&trig->lock);
146
147 led_trigger_unregister_simple(trig->_trig);130 led_trigger_unregister_simple(trig->_trig);
148 trig->_trig = NULL;131 trig->_trig = NULL;
149 memset(trig->name, 0, MAX_NAME_LEN);132 memset(trig->name, 0, MAX_NAME_LEN);
150 trig->lock_is_inited = 0;
151
152 mutex_unlock(&trig->lock);
153 mutex_destroy(&trig->lock);
154 }133 }
155 134
156 unregister_syscore_ops(&ledtrig_cpu_syscore_ops);135 unregister_syscore_ops(&ledtrig_cpu_syscore_ops);
drivers/net/ethernet/jme.c+8−20
@@ -1860,10 +1860,14 @@ jme_open(struct net_device *netdev) · 1859 unmodified lines
1860 jme_clear_pm(jme);1860 jme_clear_pm(jme);
1861 JME_NAPI_ENABLE(jme);1861 JME_NAPI_ENABLE(jme);
1862 1862
1863 tasklet_enable(&jme->linkch_task);1863 tasklet_init(&jme->linkch_task, jme_link_change_tasklet,
1864 tasklet_enable(&jme->txclean_task);1864 (unsigned long) jme);
1865 tasklet_hi_enable(&jme->rxclean_task);1865 tasklet_init(&jme->txclean_task, jme_tx_clean_tasklet,
1866 tasklet_hi_enable(&jme->rxempty_task);1866 (unsigned long) jme);
1867 tasklet_init(&jme->rxclean_task, jme_rx_clean_tasklet,
1868 (unsigned long) jme);
1869 tasklet_init(&jme->rxempty_task, jme_rx_empty_tasklet,
1870 (unsigned long) jme);
1867 1871
1868 rc = jme_request_irq(jme);1872 rc = jme_request_irq(jme);
1869 if (rc)1873 if (rc)
@@ -3079,22 +3083,6 @@ jme_init_one(struct pci_dev *pdev, · 1209 unmodified lines
3079 tasklet_init(&jme->pcc_task,3083 tasklet_init(&jme->pcc_task,
3080 jme_pcc_tasklet,3084 jme_pcc_tasklet,
3081 (unsigned long) jme);3085 (unsigned long) jme);
3082 tasklet_init(&jme->linkch_task,
3083 jme_link_change_tasklet,
3084 (unsigned long) jme);
3085 tasklet_init(&jme->txclean_task,
3086 jme_tx_clean_tasklet,
3087 (unsigned long) jme);
3088 tasklet_init(&jme->rxclean_task,
3089 jme_rx_clean_tasklet,
3090 (unsigned long) jme);
3091 tasklet_init(&jme->rxempty_task,
3092 jme_rx_empty_tasklet,
3093 (unsigned long) jme);
3094 tasklet_disable_nosync(&jme->linkch_task);
3095 tasklet_disable_nosync(&jme->txclean_task);
3096 tasklet_disable_nosync(&jme->rxclean_task);
3097 tasklet_disable_nosync(&jme->rxempty_task);
3098 jme->dpi.cur = PCC_P1;3086 jme->dpi.cur = PCC_P1;
3099 3087
3100 jme->reg_ghc = 0;3088 jme->reg_ghc = 0;
drivers/net/ethernet/micrel/ksz884x.c+4−12
@@ -5459,8 +5459,10 @@ static int prepare_hardware(struct net_device *dev) · 5458 unmodified lines
5459 rc = request_irq(dev->irq, netdev_intr, IRQF_SHARED, dev->name, dev);5459 rc = request_irq(dev->irq, netdev_intr, IRQF_SHARED, dev->name, dev);
5460 if (rc)5460 if (rc)
5461 return rc;5461 return rc;
5462 tasklet_enable(&hw_priv->rx_tasklet);5462 tasklet_init(&hw_priv->rx_tasklet, rx_proc_task,
5463 tasklet_enable(&hw_priv->tx_tasklet);5463 (unsigned long) hw_priv);
5464 tasklet_init(&hw_priv->tx_tasklet, tx_proc_task,
5465 (unsigned long) hw_priv);
5464 5466
5465 hw->promiscuous = 0;5467 hw->promiscuous = 0;
5466 hw->all_multi = 0;5468 hw->all_multi = 0;
@@ -7033,16 +7035,6 @@ static int __devinit pcidev_init(struct pci_dev *pdev, · 1566 unmodified lines
7033 spin_lock_init(&hw_priv->hwlock);7035 spin_lock_init(&hw_priv->hwlock);
7034 mutex_init(&hw_priv->lock);7036 mutex_init(&hw_priv->lock);
7035 7037
7036 /* tasklet is enabled. */
7037 tasklet_init(&hw_priv->rx_tasklet, rx_proc_task,
7038 (unsigned long) hw_priv);
7039 tasklet_init(&hw_priv->tx_tasklet, tx_proc_task,
7040 (unsigned long) hw_priv);
7041
7042 /* tasklet_enable will decrement the atomic counter. */
7043 tasklet_disable(&hw_priv->rx_tasklet);
7044 tasklet_disable(&hw_priv->tx_tasklet);
7045
7046 for (i = 0; i < TOTAL_PORT_NUM; i++)7038 for (i = 0; i < TOTAL_PORT_NUM; i++)
7047 init_waitqueue_head(&hw_priv->counter[i].counter);7039 init_waitqueue_head(&hw_priv->counter[i].counter);
7048 7040
drivers/net/ethernet/smsc/smsc911x.c+15−2
@@ -2110,7 +2110,7 @@ static void __devinit smsc911x_read_mac_address(struct net_device *dev) · 2109 unmodified lines
2110static int __devinit smsc911x_init(struct net_device *dev)2110static int __devinit smsc911x_init(struct net_device *dev)
2111{2111{
2112 struct smsc911x_data *pdata = netdev_priv(dev);2112 struct smsc911x_data *pdata = netdev_priv(dev);
2113 unsigned int byte_test;2113 unsigned int byte_test, mask;
2114 unsigned int to = 100;2114 unsigned int to = 100;
2115 2115
2116 SMSC_TRACE(pdata, probe, "Driver Parameters:");2116 SMSC_TRACE(pdata, probe, "Driver Parameters:");
@@ -2130,9 +2130,22 @@ static int __devinit smsc911x_init(struct net_device *dev) · 13 unmodified lines
2130 /*2130 /*
2131 * poll the READY bit in PMT_CTRL. Any other access to the device is2131 * poll the READY bit in PMT_CTRL. Any other access to the device is
2132 * forbidden while this bit isn't set. Try for 100ms2132 * forbidden while this bit isn't set. Try for 100ms
2133 *
2134 * Note that this test is done before the WORD_SWAP register is
2135 * programmed. So in some configurations the READY bit is at 16 before
2136 * WORD_SWAP is written to. This issue is worked around by waiting
2137 * until either bit 0 or bit 16 gets set in PMT_CTRL.
2138 *
2139 * SMSC has confirmed that checking bit 16 (marked as reserved in
2140 * the datasheet) is fine since these bits "will either never be set
2141 * or can only go high after READY does (so also indicate the device
2142 * is ready)".
2133 */2143 */
2134 while (!(smsc911x_reg_read(pdata, PMT_CTRL) & PMT_CTRL_READY_) && --to)2144
2145 mask = PMT_CTRL_READY_ | swahw32(PMT_CTRL_READY_);
2146 while (!(smsc911x_reg_read(pdata, PMT_CTRL) & mask) && --to)
2135 udelay(1000);2147 udelay(1000);
2148
2136 if (to == 0) {2149 if (to == 0) {
2137 pr_err("Device not READY in 100ms aborting\n");2150 pr_err("Device not READY in 100ms aborting\n");
2138 return -ENODEV;2151 return -ENODEV;
drivers/net/ethernet/tile/tilegx.c+1−1
@@ -917,7 +917,7 @@ static int tile_net_setup_interrupts(struct net_device *dev) · 916 unmodified lines
917 ingress_irq = rc;917 ingress_irq = rc;
918 tile_irq_activate(ingress_irq, TILE_IRQ_PERCPU);918 tile_irq_activate(ingress_irq, TILE_IRQ_PERCPU);
919 rc = request_irq(ingress_irq, tile_net_handle_ingress_irq,919 rc = request_irq(ingress_irq, tile_net_handle_ingress_irq,
920 0, NULL, NULL);920 0, "tile_net", NULL);
921 if (rc != 0) {921 if (rc != 0) {
922 netdev_err(dev, "request_irq failed: %d\n", rc);922 netdev_err(dev, "request_irq failed: %d\n", rc);
923 destroy_irq(ingress_irq);923 destroy_irq(ingress_irq);
drivers/net/ethernet/xilinx/xilinx_axienet_main.c+6−6
@@ -942,6 +942,10 @@ static int axienet_open(struct net_device *ndev) · 941 unmodified lines
942 phy_start(lp->phy_dev);942 phy_start(lp->phy_dev);
943 }943 }
944 944
945 /* Enable tasklets for Axi DMA error handling */
946 tasklet_init(&lp->dma_err_tasklet, axienet_dma_err_handler,
947 (unsigned long) lp);
948
945 /* Enable interrupts for Axi DMA Tx */949 /* Enable interrupts for Axi DMA Tx */
946 ret = request_irq(lp->tx_irq, axienet_tx_irq, 0, ndev->name, ndev);950 ret = request_irq(lp->tx_irq, axienet_tx_irq, 0, ndev->name, ndev);
947 if (ret)951 if (ret)
@@ -950,8 +954,7 @@ static int axienet_open(struct net_device *ndev) · 2 unmodified lines
950 ret = request_irq(lp->rx_irq, axienet_rx_irq, 0, ndev->name, ndev);954 ret = request_irq(lp->rx_irq, axienet_rx_irq, 0, ndev->name, ndev);
951 if (ret)955 if (ret)
952 goto err_rx_irq;956 goto err_rx_irq;
953 /* Enable tasklets for Axi DMA error handling */957
954 tasklet_enable(&lp->dma_err_tasklet);
955 return 0;958 return 0;
956 959
957err_rx_irq:960err_rx_irq:
@@ -960,6 +963,7 @@ err_tx_irq: · 2 unmodified lines
960 if (lp->phy_dev)963 if (lp->phy_dev)
961 phy_disconnect(lp->phy_dev);964 phy_disconnect(lp->phy_dev);
962 lp->phy_dev = NULL;965 lp->phy_dev = NULL;
966 tasklet_kill(&lp->dma_err_tasklet);
963 dev_err(lp->dev, "request_irq() failed\n");967 dev_err(lp->dev, "request_irq() failed\n");
964 return ret;968 return ret;
965}969}
@@ -1613,10 +1617,6 @@ static int __devinit axienet_of_probe(struct platform_device *op) · 647 unmodified lines
1613 goto err_iounmap_2;1617 goto err_iounmap_2;
1614 }1618 }
1615 1619
1616 tasklet_init(&lp->dma_err_tasklet, axienet_dma_err_handler,
1617 (unsigned long) lp);
1618 tasklet_disable(&lp->dma_err_tasklet);
1619
1620 return 0;1620 return 0;
1621 1621
1622err_iounmap_2:1622err_iounmap_2:
drivers/net/phy/mdio-bitbang.c+0−1
@@ -234,7 +234,6 @@ void free_mdio_bitbang(struct mii_bus *bus) · 233 unmodified lines
234 struct mdiobb_ctrl *ctrl = bus->priv;234 struct mdiobb_ctrl *ctrl = bus->priv;
235 235
236 module_put(ctrl->ops->owner);236 module_put(ctrl->ops->owner);
237 mdiobus_unregister(bus);
238 mdiobus_free(bus);237 mdiobus_free(bus);
239}238}
240EXPORT_SYMBOL(free_mdio_bitbang);239EXPORT_SYMBOL(free_mdio_bitbang);
drivers/net/usb/cdc_ncm.c+18−4
@@ -540,10 +540,12 @@ advance: · 539 unmodified lines
540 (ctx->ether_desc == NULL) || (ctx->control != intf))540 (ctx->ether_desc == NULL) || (ctx->control != intf))
541 goto error;541 goto error;
542 542
543 /* claim interfaces, if any */543 /* claim data interface, if different from control */
544 temp = usb_driver_claim_interface(driver, ctx->data, dev);544 if (ctx->data != ctx->control) {
545 if (temp)545 temp = usb_driver_claim_interface(driver, ctx->data, dev);
546 goto error;546 if (temp)
547 goto error;
548 }
547 549
548 iface_no = ctx->data->cur_altsetting->desc.bInterfaceNumber;550 iface_no = ctx->data->cur_altsetting->desc.bInterfaceNumber;
549 551
@@ -623,6 +625,10 @@ static void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf) · 73 unmodified lines
623 625
624 tasklet_kill(&ctx->bh);626 tasklet_kill(&ctx->bh);
625 627
628 /* handle devices with combined control and data interface */
629 if (ctx->control == ctx->data)
630 ctx->data = NULL;
631
626 /* disconnect master --> disconnect slave */632 /* disconnect master --> disconnect slave */
627 if (intf == ctx->control && ctx->data) {633 if (intf == ctx->control && ctx->data) {
628 usb_set_intfdata(ctx->data, NULL);634 usb_set_intfdata(ctx->data, NULL);
@@ -1245,6 +1251,14 @@ static const struct usb_device_id cdc_devs[] = { · 616 unmodified lines
1245 .driver_info = (unsigned long) &wwan_info,1251 .driver_info = (unsigned long) &wwan_info,
1246 },1252 },
1247 1253
1254 /* Huawei NCM devices disguised as vendor specific */
1255 { USB_VENDOR_AND_INTERFACE_INFO(0x12d1, 0xff, 0x02, 0x16),
1256 .driver_info = (unsigned long)&wwan_info,
1257 },
1258 { USB_VENDOR_AND_INTERFACE_INFO(0x12d1, 0xff, 0x02, 0x46),
1259 .driver_info = (unsigned long)&wwan_info,
1260 },
1261
1248 /* Generic CDC-NCM devices */1262 /* Generic CDC-NCM devices */
1249 { USB_INTERFACE_INFO(USB_CLASS_COMM,1263 { USB_INTERFACE_INFO(USB_CLASS_COMM,
1250 USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),1264 USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
drivers/net/usb/smsc95xx.c+2−2
@@ -184,7 +184,7 @@ static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx) · 183 unmodified lines
184 /* set the address, index & direction (read from PHY) */184 /* set the address, index & direction (read from PHY) */
185 phy_id &= dev->mii.phy_id_mask;185 phy_id &= dev->mii.phy_id_mask;
186 idx &= dev->mii.reg_num_mask;186 idx &= dev->mii.reg_num_mask;
187 addr = (phy_id << 11) | (idx << 6) | MII_READ_;187 addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_;
188 ret = smsc95xx_write_reg(dev, MII_ADDR, addr);188 ret = smsc95xx_write_reg(dev, MII_ADDR, addr);
189 check_warn_goto_done(ret, "Error writing MII_ADDR");189 check_warn_goto_done(ret, "Error writing MII_ADDR");
190 190
@@ -221,7 +221,7 @@ static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx, · 30 unmodified lines
221 /* set the address, index & direction (write to PHY) */221 /* set the address, index & direction (write to PHY) */
222 phy_id &= dev->mii.phy_id_mask;222 phy_id &= dev->mii.phy_id_mask;
223 idx &= dev->mii.reg_num_mask;223 idx &= dev->mii.reg_num_mask;
224 addr = (phy_id << 11) | (idx << 6) | MII_WRITE_;224 addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_;
225 ret = smsc95xx_write_reg(dev, MII_ADDR, addr);225 ret = smsc95xx_write_reg(dev, MII_ADDR, addr);
226 check_warn_goto_done(ret, "Error writing MII_ADDR");226 check_warn_goto_done(ret, "Error writing MII_ADDR");
227 227
drivers/net/vxlan.c+7−3
@@ -1,5 +1,5 @@
1/*1/*
2 * VXLAN: Virtual eXtensiable Local Area Network2 * VXLAN: Virtual eXtensible Local Area Network
3 *3 *
4 * Copyright (c) 2012 Vyatta Inc.4 * Copyright (c) 2012 Vyatta Inc.
5 *5 *
@@ -50,8 +50,8 @@ · 44 unmodified lines
50 50
51#define VXLAN_N_VID (1u << 24)51#define VXLAN_N_VID (1u << 24)
52#define VXLAN_VID_MASK (VXLAN_N_VID - 1)52#define VXLAN_VID_MASK (VXLAN_N_VID - 1)
53/* VLAN + IP header + UDP + VXLAN */53/* IP header + UDP + VXLAN + Ethernet header */
54#define VXLAN_HEADROOM (4 + 20 + 8 + 8)54#define VXLAN_HEADROOM (20 + 8 + 8 + 14)
55 55
56#define VXLAN_FLAGS 0x08000000 /* struct vxlanhdr.vx_flags required value. */56#define VXLAN_FLAGS 0x08000000 /* struct vxlanhdr.vx_flags required value. */
57 57
@@ -1102,6 +1102,10 @@ static int vxlan_newlink(struct net *net, struct net_device *dev, · 1044 unmodified lines
1102 1102
1103 if (!tb[IFLA_MTU])1103 if (!tb[IFLA_MTU])
1104 dev->mtu = lowerdev->mtu - VXLAN_HEADROOM;1104 dev->mtu = lowerdev->mtu - VXLAN_HEADROOM;
1105
1106 /* update header length based on lower device */
1107 dev->hard_header_len = lowerdev->hard_header_len +
1108 VXLAN_HEADROOM;
1105 }1109 }
1106 1110
1107 if (data[IFLA_VXLAN_TOS])1111 if (data[IFLA_VXLAN_TOS])
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c+1−1
@@ -4401,7 +4401,7 @@ static s32 brcmf_mode_to_nl80211_iftype(s32 mode) · 4400 unmodified lines
4401 4401
4402static void brcmf_wiphy_pno_params(struct wiphy *wiphy)4402static void brcmf_wiphy_pno_params(struct wiphy *wiphy)
4403{4403{
4404#ifndef CONFIG_BRCMFISCAN4404#ifndef CONFIG_BRCMISCAN
4405 /* scheduled scan settings */4405 /* scheduled scan settings */
4406 wiphy->max_sched_scan_ssids = BRCMF_PNO_MAX_PFN_COUNT;4406 wiphy->max_sched_scan_ssids = BRCMF_PNO_MAX_PFN_COUNT;
4407 wiphy->max_match_sets = BRCMF_PNO_MAX_PFN_COUNT;4407 wiphy->max_match_sets = BRCMF_PNO_MAX_PFN_COUNT;
drivers/net/wireless/iwlwifi/dvm/mac80211.c+1−1
@@ -521,7 +521,7 @@ static void iwlagn_mac_tx(struct ieee80211_hw *hw, · 520 unmodified lines
521 ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate);521 ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate);
522 522
523 if (iwlagn_tx_skb(priv, control->sta, skb))523 if (iwlagn_tx_skb(priv, control->sta, skb))
524 dev_kfree_skb_any(skb);524 ieee80211_free_txskb(hw, skb);
525}525}
526 526
527static void iwlagn_mac_update_tkip_key(struct ieee80211_hw *hw,527static void iwlagn_mac_update_tkip_key(struct ieee80211_hw *hw,
drivers/net/wireless/iwlwifi/dvm/main.c+1−1
@@ -2114,7 +2114,7 @@ static void iwl_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb) · 2113 unmodified lines
2114 2114
2115 info = IEEE80211_SKB_CB(skb);2115 info = IEEE80211_SKB_CB(skb);
2116 iwl_trans_free_tx_cmd(priv->trans, info->driver_data[1]);2116 iwl_trans_free_tx_cmd(priv->trans, info->driver_data[1]);
2117 dev_kfree_skb_any(skb);2117 ieee80211_free_txskb(priv->hw, skb);
2118}2118}
2119 2119
2120static void iwl_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state)2120static void iwl_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state)
drivers/net/wireless/iwlwifi/pcie/rx.c+21−2
@@ -321,6 +321,14 @@ static void iwl_rx_allocate(struct iwl_trans *trans, gfp_t priority) · 320 unmodified lines
321 dma_map_page(trans->dev, page, 0,321 dma_map_page(trans->dev, page, 0,
322 PAGE_SIZE << trans_pcie->rx_page_order,322 PAGE_SIZE << trans_pcie->rx_page_order,
323 DMA_FROM_DEVICE);323 DMA_FROM_DEVICE);
324 if (dma_mapping_error(trans->dev, rxb->page_dma)) {
325 rxb->page = NULL;
326 spin_lock_irqsave(&rxq->lock, flags);
327 list_add(&rxb->list, &rxq->rx_used);
328 spin_unlock_irqrestore(&rxq->lock, flags);
329 __free_pages(page, trans_pcie->rx_page_order);
330 return;
331 }
324 /* dma address must be no more than 36 bits */332 /* dma address must be no more than 36 bits */
325 BUG_ON(rxb->page_dma & ~DMA_BIT_MASK(36));333 BUG_ON(rxb->page_dma & ~DMA_BIT_MASK(36));
326 /* and also 256 byte aligned! */334 /* and also 256 byte aligned! */
@@ -488,8 +496,19 @@ static void iwl_rx_handle_rxbuf(struct iwl_trans *trans, · 161 unmodified lines
488 dma_map_page(trans->dev, rxb->page, 0,496 dma_map_page(trans->dev, rxb->page, 0,
489 PAGE_SIZE << trans_pcie->rx_page_order,497 PAGE_SIZE << trans_pcie->rx_page_order,
490 DMA_FROM_DEVICE);498 DMA_FROM_DEVICE);
491 list_add_tail(&rxb->list, &rxq->rx_free);499 if (dma_mapping_error(trans->dev, rxb->page_dma)) {
492 rxq->free_count++;500 /*
501 * free the page(s) as well to not break
502 * the invariant that the items on the used
503 * list have no page(s)
504 */
505 __free_pages(rxb->page, trans_pcie->rx_page_order);
506 rxb->page = NULL;
507 list_add_tail(&rxb->list, &rxq->rx_used);
508 } else {
509 list_add_tail(&rxb->list, &rxq->rx_free);
510 rxq->free_count++;
511 }
493 } else512 } else
494 list_add_tail(&rxb->list, &rxq->rx_used);513 list_add_tail(&rxb->list, &rxq->rx_used);
495 spin_unlock_irqrestore(&rxq->lock, flags);514 spin_unlock_irqrestore(&rxq->lock, flags);
drivers/rapidio/rio.c+1−1
@@ -401,7 +401,7 @@ EXPORT_SYMBOL_GPL(rio_release_inb_pwrite); · 400 unmodified lines
401/**401/**
402 * rio_map_inb_region -- Map inbound memory region.402 * rio_map_inb_region -- Map inbound memory region.
403 * @mport: Master port.403 * @mport: Master port.
404 * @lstart: physical address of memory region to be mapped404 * @local: physical address of memory region to be mapped
405 * @rbase: RIO base address assigned to this window405 * @rbase: RIO base address assigned to this window
406 * @size: Size of the memory region406 * @size: Size of the memory region
407 * @rflags: Flags for mapping.407 * @rflags: Flags for mapping.
drivers/regulator/core.c+20−13
@@ -1381,22 +1381,14 @@ struct regulator *regulator_get_exclusive(struct device *dev, const char *id) · 1380 unmodified lines
1381}1381}
1382EXPORT_SYMBOL_GPL(regulator_get_exclusive);1382EXPORT_SYMBOL_GPL(regulator_get_exclusive);
1383 1383
1384/**1384/* Locks held by regulator_put() */
1385 * regulator_put - "free" the regulator source1385static void _regulator_put(struct regulator *regulator)
1386 * @regulator: regulator source
1387 *
1388 * Note: drivers must ensure that all regulator_enable calls made on this
1389 * regulator source are balanced by regulator_disable calls prior to calling
1390 * this function.
1391 */
1392void regulator_put(struct regulator *regulator)
1393{1386{
1394 struct regulator_dev *rdev;1387 struct regulator_dev *rdev;
1395 1388
1396 if (regulator == NULL || IS_ERR(regulator))1389 if (regulator == NULL || IS_ERR(regulator))
1397 return;1390 return;
1398 1391
1399 mutex_lock(&regulator_list_mutex);
1400 rdev = regulator->rdev;1392 rdev = regulator->rdev;
1401 1393
1402 debugfs_remove_recursive(regulator->debugfs);1394 debugfs_remove_recursive(regulator->debugfs);
@@ -1412,6 +1404,20 @@ void regulator_put(struct regulator *regulator) · 9 unmodified lines
1412 rdev->exclusive = 0;1404 rdev->exclusive = 0;
1413 1405
1414 module_put(rdev->owner);1406 module_put(rdev->owner);
1407}
1408
1409/**
1410 * regulator_put - "free" the regulator source
1411 * @regulator: regulator source
1412 *
1413 * Note: drivers must ensure that all regulator_enable calls made on this
1414 * regulator source are balanced by regulator_disable calls prior to calling
1415 * this function.
1416 */
1417void regulator_put(struct regulator *regulator)
1418{
1419 mutex_lock(&regulator_list_mutex);
1420 _regulator_put(regulator);
1415 mutex_unlock(&regulator_list_mutex);1421 mutex_unlock(&regulator_list_mutex);
1416}1422}
1417EXPORT_SYMBOL_GPL(regulator_put);1423EXPORT_SYMBOL_GPL(regulator_put);
@@ -1974,7 +1980,7 @@ int regulator_is_supported_voltage(struct regulator *regulator, · 556 unmodified lines
1974 if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_VOLTAGE)) {1980 if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_VOLTAGE)) {
1975 ret = regulator_get_voltage(regulator);1981 ret = regulator_get_voltage(regulator);
1976 if (ret >= 0)1982 if (ret >= 0)
1977 return (min_uV >= ret && ret <= max_uV);1983 return (min_uV <= ret && ret <= max_uV);
1978 else1984 else
1979 return ret;1985 return ret;
1980 }1986 }
@@ -3365,7 +3371,7 @@ regulator_register(const struct regulator_desc *regulator_desc, · 1384 unmodified lines
3365 if (ret != 0) {3371 if (ret != 0) {
3366 rdev_err(rdev, "Failed to request enable GPIO%d: %d\n",3372 rdev_err(rdev, "Failed to request enable GPIO%d: %d\n",
3367 config->ena_gpio, ret);3373 config->ena_gpio, ret);
3368 goto clean;3374 goto wash;
3369 }3375 }
3370 3376
3371 rdev->ena_gpio = config->ena_gpio;3377 rdev->ena_gpio = config->ena_gpio;
@@ -3445,10 +3451,11 @@ unset_supplies: · 73 unmodified lines
3445 3451
3446scrub:3452scrub:
3447 if (rdev->supply)3453 if (rdev->supply)
3448 regulator_put(rdev->supply);3454 _regulator_put(rdev->supply);
3449 if (rdev->ena_gpio)3455 if (rdev->ena_gpio)
3450 gpio_free(rdev->ena_gpio);3456 gpio_free(rdev->ena_gpio);
3451 kfree(rdev->constraints);3457 kfree(rdev->constraints);
3458wash:
3452 device_unregister(&rdev->dev);3459 device_unregister(&rdev->dev);
3453 /* device core frees rdev */3460 /* device core frees rdev */
3454 rdev = ERR_PTR(ret);3461 rdev = ERR_PTR(ret);
drivers/s390/char/con3215.c+5−7
@@ -44,7 +44,6 @@ · 43 unmodified lines
44#define RAW3215_NR_CCWS 344#define RAW3215_NR_CCWS 3
45#define RAW3215_TIMEOUT HZ/10 /* time for delayed output */45#define RAW3215_TIMEOUT HZ/10 /* time for delayed output */
46 46
47#define RAW3215_FIXED 1 /* 3215 console device is not be freed */
48#define RAW3215_WORKING 4 /* set if a request is being worked on */47#define RAW3215_WORKING 4 /* set if a request is being worked on */
49#define RAW3215_THROTTLED 8 /* set if reading is disabled */48#define RAW3215_THROTTLED 8 /* set if reading is disabled */
50#define RAW3215_STOPPED 16 /* set if writing is disabled */49#define RAW3215_STOPPED 16 /* set if writing is disabled */
@@ -339,8 +338,10 @@ static void raw3215_wakeup(unsigned long data) · 288 unmodified lines
339 struct tty_struct *tty;338 struct tty_struct *tty;
340 339
341 tty = tty_port_tty_get(&raw->port);340 tty = tty_port_tty_get(&raw->port);
342 tty_wakeup(tty);341 if (tty) {
343 tty_kref_put(tty);342 tty_wakeup(tty);
343 tty_kref_put(tty);
344 }
344}345}
345 346
346/*347/*
@@ -629,8 +630,7 @@ static void raw3215_shutdown(struct raw3215_info *raw) · 282 unmodified lines
629 DECLARE_WAITQUEUE(wait, current);630 DECLARE_WAITQUEUE(wait, current);
630 unsigned long flags;631 unsigned long flags;
631 632
632 if (!(raw->port.flags & ASYNC_INITIALIZED) ||633 if (!(raw->port.flags & ASYNC_INITIALIZED))
633 (raw->flags & RAW3215_FIXED))
634 return;634 return;
635 /* Wait for outstanding requests, then free irq */635 /* Wait for outstanding requests, then free irq */
636 spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);636 spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
@@ -927,8 +927,6 @@ static int __init con3215_init(void) · 290 unmodified lines
927 dev_set_drvdata(&cdev->dev, raw);927 dev_set_drvdata(&cdev->dev, raw);
928 cdev->handler = raw3215_irq;928 cdev->handler = raw3215_irq;
929 929
930 raw->flags |= RAW3215_FIXED;
931
932 /* Request the console irq */930 /* Request the console irq */
933 if (raw3215_startup(raw) != 0) {931 if (raw3215_startup(raw) != 0) {
934 raw3215_free_info(raw);932 raw3215_free_info(raw);
drivers/s390/net/qeth_core_main.c+22−2
@@ -2942,13 +2942,33 @@ static int qeth_query_ipassists_cb(struct qeth_card *card, · 2941 unmodified lines
2942 QETH_DBF_TEXT(SETUP, 2, "qipasscb");2942 QETH_DBF_TEXT(SETUP, 2, "qipasscb");
2943 2943
2944 cmd = (struct qeth_ipa_cmd *) data;2944 cmd = (struct qeth_ipa_cmd *) data;
2945
2946 switch (cmd->hdr.return_code) {
2947 case IPA_RC_NOTSUPP:
2948 case IPA_RC_L2_UNSUPPORTED_CMD:
2949 QETH_DBF_TEXT(SETUP, 2, "ipaunsup");
2950 card->options.ipa4.supported_funcs |= IPA_SETADAPTERPARMS;
2951 card->options.ipa6.supported_funcs |= IPA_SETADAPTERPARMS;
2952 return -0;
2953 default:
2954 if (cmd->hdr.return_code) {
2955 QETH_DBF_MESSAGE(1, "%s IPA_CMD_QIPASSIST: Unhandled "
2956 "rc=%d\n",
2957 dev_name(&card->gdev->dev),
2958 cmd->hdr.return_code);
2959 return 0;
2960 }
2961 }
2962
2945 if (cmd->hdr.prot_version == QETH_PROT_IPV4) {2963 if (cmd->hdr.prot_version == QETH_PROT_IPV4) {
2946 card->options.ipa4.supported_funcs = cmd->hdr.ipa_supported;2964 card->options.ipa4.supported_funcs = cmd->hdr.ipa_supported;
2947 card->options.ipa4.enabled_funcs = cmd->hdr.ipa_enabled;2965 card->options.ipa4.enabled_funcs = cmd->hdr.ipa_enabled;
2948 } else {2966 } else if (cmd->hdr.prot_version == QETH_PROT_IPV6) {
2949 card->options.ipa6.supported_funcs = cmd->hdr.ipa_supported;2967 card->options.ipa6.supported_funcs = cmd->hdr.ipa_supported;
2950 card->options.ipa6.enabled_funcs = cmd->hdr.ipa_enabled;2968 card->options.ipa6.enabled_funcs = cmd->hdr.ipa_enabled;
2951 }2969 } else
2970 QETH_DBF_MESSAGE(1, "%s IPA_CMD_QIPASSIST: Flawed LIC detected"
2971 "\n", dev_name(&card->gdev->dev));
2952 QETH_DBF_TEXT(SETUP, 2, "suppenbl");2972 QETH_DBF_TEXT(SETUP, 2, "suppenbl");
2953 QETH_DBF_TEXT_(SETUP, 2, "%08x", (__u32)cmd->hdr.ipa_supported);2973 QETH_DBF_TEXT_(SETUP, 2, "%08x", (__u32)cmd->hdr.ipa_supported);
2954 QETH_DBF_TEXT_(SETUP, 2, "%08x", (__u32)cmd->hdr.ipa_enabled);2974 QETH_DBF_TEXT_(SETUP, 2, "%08x", (__u32)cmd->hdr.ipa_enabled);
drivers/s390/net/qeth_l2_main.c+8−5
@@ -626,10 +626,13 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card) · 625 unmodified lines
626 QETH_DBF_TEXT(SETUP, 2, "doL2init");626 QETH_DBF_TEXT(SETUP, 2, "doL2init");
627 QETH_DBF_TEXT_(SETUP, 2, "doL2%s", CARD_BUS_ID(card));627 QETH_DBF_TEXT_(SETUP, 2, "doL2%s", CARD_BUS_ID(card));
628 628
629 rc = qeth_query_setadapterparms(card);629 if (qeth_is_supported(card, IPA_SETADAPTERPARMS)) {
630 if (rc) {630 rc = qeth_query_setadapterparms(card);
631 QETH_DBF_MESSAGE(2, "could not query adapter parameters on "631 if (rc) {
632 "device %s: x%x\n", CARD_BUS_ID(card), rc);632 QETH_DBF_MESSAGE(2, "could not query adapter "
633 "parameters on device %s: x%x\n",
634 CARD_BUS_ID(card), rc);
635 }
633 }636 }
634 637
635 if (card->info.type == QETH_CARD_TYPE_IQD ||638 if (card->info.type == QETH_CARD_TYPE_IQD ||
@@ -676,7 +679,7 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p) · 40 unmodified lines
676 return -ERESTARTSYS;679 return -ERESTARTSYS;
677 }680 }
678 rc = qeth_l2_send_delmac(card, &card->dev->dev_addr[0]);681 rc = qeth_l2_send_delmac(card, &card->dev->dev_addr[0]);
679 if (!rc)682 if (!rc || (rc == IPA_RC_L2_MAC_NOT_FOUND))
680 rc = qeth_l2_send_setmac(card, addr->sa_data);683 rc = qeth_l2_send_setmac(card, addr->sa_data);
681 return rc ? -EINVAL : 0;684 return rc ? -EINVAL : 0;
682}685}
drivers/staging/android/android_alarm.h+1−3
@@ -51,12 +51,10 @@ enum android_alarm_return_flags { · 50 unmodified lines
51#define ANDROID_ALARM_WAIT _IO('a', 1)51#define ANDROID_ALARM_WAIT _IO('a', 1)
52 52
53#define ALARM_IOW(c, type, size) _IOW('a', (c) | ((type) << 4), size)53#define ALARM_IOW(c, type, size) _IOW('a', (c) | ((type) << 4), size)
54#define ALARM_IOR(c, type, size) _IOR('a', (c) | ((type) << 4), size)
55
56/* Set alarm */54/* Set alarm */
57#define ANDROID_ALARM_SET(type) ALARM_IOW(2, type, struct timespec)55#define ANDROID_ALARM_SET(type) ALARM_IOW(2, type, struct timespec)
58#define ANDROID_ALARM_SET_AND_WAIT(type) ALARM_IOW(3, type, struct timespec)56#define ANDROID_ALARM_SET_AND_WAIT(type) ALARM_IOW(3, type, struct timespec)
59#define ANDROID_ALARM_GET_TIME(type) ALARM_IOR(4, type, struct timespec)57#define ANDROID_ALARM_GET_TIME(type) ALARM_IOW(4, type, struct timespec)
60#define ANDROID_ALARM_SET_RTC _IOW('a', 5, struct timespec)58#define ANDROID_ALARM_SET_RTC _IOW('a', 5, struct timespec)
61#define ANDROID_ALARM_BASE_CMD(cmd) (cmd & ~(_IOC(0, 0, 0xf0, 0)))59#define ANDROID_ALARM_BASE_CMD(cmd) (cmd & ~(_IOC(0, 0, 0xf0, 0)))
62#define ANDROID_ALARM_IOCTL_TO_TYPE(cmd) (_IOC_NR(cmd) >> 4)60#define ANDROID_ALARM_IOCTL_TO_TYPE(cmd) (_IOC_NR(cmd) >> 4)
drivers/tty/hvc/hvc_console.c+0−7
@@ -424,7 +424,6 @@ static void hvc_hangup(struct tty_struct *tty) · 423 unmodified lines
424{424{
425 struct hvc_struct *hp = tty->driver_data;425 struct hvc_struct *hp = tty->driver_data;
426 unsigned long flags;426 unsigned long flags;
427 int temp_open_count;
428 427
429 if (!hp)428 if (!hp)
430 return;429 return;
@@ -444,7 +443,6 @@ static void hvc_hangup(struct tty_struct *tty) · 13 unmodified lines
444 return;443 return;
445 }444 }
446 445
447 temp_open_count = hp->port.count;
448 hp->port.count = 0;446 hp->port.count = 0;
449 spin_unlock_irqrestore(&hp->port.lock, flags);447 spin_unlock_irqrestore(&hp->port.lock, flags);
450 tty_port_tty_set(&hp->port, NULL);448 tty_port_tty_set(&hp->port, NULL);
@@ -453,11 +451,6 @@ static void hvc_hangup(struct tty_struct *tty) · 2 unmodified lines
453 451
454 if (hp->ops->notifier_hangup)452 if (hp->ops->notifier_hangup)
455 hp->ops->notifier_hangup(hp, hp->data);453 hp->ops->notifier_hangup(hp, hp->data);
456
457 while(temp_open_count) {
458 --temp_open_count;
459 tty_port_put(&hp->port);
460 }
461}454}
462 455
463/*456/*
drivers/tty/serial/max310x.c+1−0
@@ -1239,6 +1239,7 @@ static int __devexit max310x_remove(struct spi_device *spi) · 1238 unmodified lines
1239static const struct spi_device_id max310x_id_table[] = {1239static const struct spi_device_id max310x_id_table[] = {
1240 { "max3107", MAX310X_TYPE_MAX3107 },1240 { "max3107", MAX310X_TYPE_MAX3107 },
1241 { "max3108", MAX310X_TYPE_MAX3108 },1241 { "max3108", MAX310X_TYPE_MAX3108 },
1242 { }
1242};1243};
1243MODULE_DEVICE_TABLE(spi, max310x_id_table);1244MODULE_DEVICE_TABLE(spi, max310x_id_table);
1244 1245
drivers/usb/core/hcd.c+16−0
@@ -2151,8 +2151,15 @@ EXPORT_SYMBOL_GPL(usb_bus_start_enum); · 2150 unmodified lines
2151irqreturn_t usb_hcd_irq (int irq, void *__hcd)2151irqreturn_t usb_hcd_irq (int irq, void *__hcd)
2152{2152{
2153 struct usb_hcd *hcd = __hcd;2153 struct usb_hcd *hcd = __hcd;
2154 unsigned long flags;
2154 irqreturn_t rc;2155 irqreturn_t rc;
2155 2156
2157 /* IRQF_DISABLED doesn't work correctly with shared IRQs
2158 * when the first handler doesn't use it. So let's just
2159 * assume it's never used.
2160 */
2161 local_irq_save(flags);
2162
2156 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))2163 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
2157 rc = IRQ_NONE;2164 rc = IRQ_NONE;
2158 else if (hcd->driver->irq(hcd) == IRQ_NONE)2165 else if (hcd->driver->irq(hcd) == IRQ_NONE)
@@ -2160,6 +2167,7 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd) · 1 unmodified line
2160 else2167 else
2161 rc = IRQ_HANDLED;2168 rc = IRQ_HANDLED;
2162 2169
2170 local_irq_restore(flags);
2163 return rc;2171 return rc;
2164}2172}
2165EXPORT_SYMBOL_GPL(usb_hcd_irq);2173EXPORT_SYMBOL_GPL(usb_hcd_irq);
@@ -2347,6 +2355,14 @@ static int usb_hcd_request_irqs(struct usb_hcd *hcd, · 181 unmodified lines
2347 int retval;2355 int retval;
2348 2356
2349 if (hcd->driver->irq) {2357 if (hcd->driver->irq) {
2358
2359 /* IRQF_DISABLED doesn't work as advertised when used together
2360 * with IRQF_SHARED. As usb_hcd_irq() will always disable
2361 * interrupts we can remove it here.
2362 */
2363 if (irqflags & IRQF_SHARED)
2364 irqflags &= ~IRQF_DISABLED;
2365
2350 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",2366 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
2351 hcd->driver->description, hcd->self.busnum);2367 hcd->driver->description, hcd->self.busnum);
2352 retval = request_irq(irqnum, &usb_hcd_irq, irqflags,2368 retval = request_irq(irqnum, &usb_hcd_irq, irqflags,
drivers/usb/early/ehci-dbgp.c+9−6
@@ -20,6 +20,7 @@ · 19 unmodified lines
20#include <linux/usb/ehci_def.h>20#include <linux/usb/ehci_def.h>
21#include <linux/delay.h>21#include <linux/delay.h>
22#include <linux/serial_core.h>22#include <linux/serial_core.h>
23#include <linux/kconfig.h>
23#include <linux/kgdb.h>24#include <linux/kgdb.h>
24#include <linux/kthread.h>25#include <linux/kthread.h>
25#include <asm/io.h>26#include <asm/io.h>
@@ -614,12 +615,6 @@ err: · 588 unmodified lines
614 return -ENODEV;615 return -ENODEV;
615}616}
616 617
617int dbgp_external_startup(struct usb_hcd *hcd)
618{
619 return xen_dbgp_external_startup(hcd) ?: _dbgp_external_startup();
620}
621EXPORT_SYMBOL_GPL(dbgp_external_startup);
622
623static int ehci_reset_port(int port)618static int ehci_reset_port(int port)
624{619{
625 u32 portsc;620 u32 portsc;
@@ -979,6 +974,7 @@ struct console early_dbgp_console = { · 353 unmodified lines
979 .index = -1,974 .index = -1,
980};975};
981 976
977#if IS_ENABLED(CONFIG_USB_EHCI_HCD)
982int dbgp_reset_prep(struct usb_hcd *hcd)978int dbgp_reset_prep(struct usb_hcd *hcd)
983{979{
984 int ret = xen_dbgp_reset_prep(hcd);980 int ret = xen_dbgp_reset_prep(hcd);
@@ -1007,6 +1003,13 @@ int dbgp_reset_prep(struct usb_hcd *hcd) · 22 unmodified lines
1007}1003}
1008EXPORT_SYMBOL_GPL(dbgp_reset_prep);1004EXPORT_SYMBOL_GPL(dbgp_reset_prep);
1009 1005
1006int dbgp_external_startup(struct usb_hcd *hcd)
1007{
1008 return xen_dbgp_external_startup(hcd) ?: _dbgp_external_startup();
1009}
1010EXPORT_SYMBOL_GPL(dbgp_external_startup);
1011#endif /* USB_EHCI_HCD */
1012
1010#ifdef CONFIG_KGDB1013#ifdef CONFIG_KGDB
1011 1014
1012static char kgdbdbgp_buf[DBGP_MAX_PACKET];1015static char kgdbdbgp_buf[DBGP_MAX_PACKET];
drivers/usb/host/ehci-ls1x.c+1−1
@@ -113,7 +113,7 @@ static int ehci_hcd_ls1x_probe(struct platform_device *pdev) · 112 unmodified lines
113 goto err_put_hcd;113 goto err_put_hcd;
114 }114 }
115 115
116 ret = usb_add_hcd(hcd, irq, IRQF_SHARED);116 ret = usb_add_hcd(hcd, irq, IRQF_DISABLED | IRQF_SHARED);
117 if (ret)117 if (ret)
118 goto err_put_hcd;118 goto err_put_hcd;
119 119
drivers/usb/host/ohci-xls.c+1−1
@@ -56,7 +56,7 @@ static int ohci_xls_probe_internal(const struct hc_driver *driver, · 55 unmodified lines
56 goto err3;56 goto err3;
57 }57 }
58 58
59 retval = usb_add_hcd(hcd, irq, IRQF_SHARED);59 retval = usb_add_hcd(hcd, irq, IRQF_DISABLED | IRQF_SHARED);
60 if (retval != 0)60 if (retval != 0)
61 goto err4;61 goto err4;
62 return retval;62 return retval;
drivers/usb/musb/musb_gadget.c+26−4
@@ -707,11 +707,12 @@ static void rxstate(struct musb *musb, struct musb_request *req) · 706 unmodified lines
707 fifo_count = musb_readw(epio, MUSB_RXCOUNT);707 fifo_count = musb_readw(epio, MUSB_RXCOUNT);
708 708
709 /*709 /*
710 * use mode 1 only if we expect data of at least ep packet_sz710 * Enable Mode 1 on RX transfers only when short_not_ok flag
711 * and have not yet received a short packet711 * is set. Currently short_not_ok flag is set only from
712 * file_storage and f_mass_storage drivers
712 */713 */
713 if ((request->length - request->actual >= musb_ep->packet_sz) &&714
714 (fifo_count >= musb_ep->packet_sz))715 if (request->short_not_ok && fifo_count == musb_ep->packet_sz)
715 use_mode_1 = 1;716 use_mode_1 = 1;
716 else717 else
717 use_mode_1 = 0;718 use_mode_1 = 0;
@@ -727,6 +728,27 @@ static void rxstate(struct musb *musb, struct musb_request *req) · 9 unmodified lines
727 c = musb->dma_controller;728 c = musb->dma_controller;
728 channel = musb_ep->dma;729 channel = musb_ep->dma;
729 730
731 /* We use DMA Req mode 0 in rx_csr, and DMA controller operates in
732 * mode 0 only. So we do not get endpoint interrupts due to DMA
733 * completion. We only get interrupts from DMA controller.
734 *
735 * We could operate in DMA mode 1 if we knew the size of the tranfer
736 * in advance. For mass storage class, request->length = what the host
737 * sends, so that'd work. But for pretty much everything else,
738 * request->length is routinely more than what the host sends. For
739 * most these gadgets, end of is signified either by a short packet,
740 * or filling the last byte of the buffer. (Sending extra data in
741 * that last pckate should trigger an overflow fault.) But in mode 1,
742 * we don't get DMA completion interrupt for short packets.
743 *
744 * Theoretically, we could enable DMAReq irq (MUSB_RXCSR_DMAMODE = 1),
745 * to get endpoint interrupt on every DMA req, but that didn't seem
746 * to work reliably.
747 *
748 * REVISIT an updated g_file_storage can set req->short_not_ok, which
749 * then becomes usable as a runtime "use mode 1" hint...
750 */
751
730 /* Experimental: Mode1 works with mass storage use cases */752 /* Experimental: Mode1 works with mass storage use cases */
731 if (use_mode_1) {753 if (use_mode_1) {
732 csr |= MUSB_RXCSR_AUTOCLEAR;754 csr |= MUSB_RXCSR_AUTOCLEAR;
drivers/usb/musb/ux500.c+1−1
@@ -65,7 +65,7 @@ static int __devinit ux500_probe(struct platform_device *pdev) · 64 unmodified lines
65 struct platform_device *musb;65 struct platform_device *musb;
66 struct ux500_glue *glue;66 struct ux500_glue *glue;
67 struct clk *clk;67 struct clk *clk;
68 68 int musbid;
69 int ret = -ENOMEM;69 int ret = -ENOMEM;
70 70
71 glue = kzalloc(sizeof(*glue), GFP_KERNEL);71 glue = kzalloc(sizeof(*glue), GFP_KERNEL);
drivers/usb/otg/Kconfig+2−2
@@ -58,7 +58,7 @@ config USB_ULPI_VIEWPORT · 57 unmodified lines
58 58
59config TWL4030_USB59config TWL4030_USB
60 tristate "TWL4030 USB Transceiver Driver"60 tristate "TWL4030 USB Transceiver Driver"
61 depends on TWL4030_CORE && REGULATOR_TWL403061 depends on TWL4030_CORE && REGULATOR_TWL4030 && USB_MUSB_OMAP2PLUS
62 select USB_OTG_UTILS62 select USB_OTG_UTILS
63 help63 help
64 Enable this to support the USB OTG transceiver on TWL403064 Enable this to support the USB OTG transceiver on TWL4030
@@ -68,7 +68,7 @@ config TWL4030_USB · 3 unmodified lines
68 68
69config TWL6030_USB69config TWL6030_USB
70 tristate "TWL6030 USB Transceiver Driver"70 tristate "TWL6030 USB Transceiver Driver"
71 depends on TWL4030_CORE && OMAP_USB271 depends on TWL4030_CORE && OMAP_USB2 && USB_MUSB_OMAP2PLUS
72 select USB_OTG_UTILS72 select USB_OTG_UTILS
73 help73 help
74 Enable this to support the USB OTG transceiver on TWL603074 Enable this to support the USB OTG transceiver on TWL6030
drivers/usb/serial/keyspan.c+1−2
@@ -2430,7 +2430,7 @@ static void keyspan_release(struct usb_serial *serial) · 2429 unmodified lines
2430static int keyspan_port_probe(struct usb_serial_port *port)2430static int keyspan_port_probe(struct usb_serial_port *port)
2431{2431{
2432 struct usb_serial *serial = port->serial;2432 struct usb_serial *serial = port->serial;
2433 struct keyspan_port_private *s_priv;2433 struct keyspan_serial_private *s_priv;
2434 struct keyspan_port_private *p_priv;2434 struct keyspan_port_private *p_priv;
2435 const struct keyspan_device_details *d_details;2435 const struct keyspan_device_details *d_details;
2436 struct callbacks *cback;2436 struct callbacks *cback;
@@ -2445,7 +2445,6 @@ static int keyspan_port_probe(struct usb_serial_port *port) · 8 unmodified lines
2445 if (!p_priv)2445 if (!p_priv)
2446 return -ENOMEM;2446 return -ENOMEM;
2447 2447
2448 s_priv = usb_get_serial_data(port->serial);
2449 p_priv->device_details = d_details;2448 p_priv->device_details = d_details;
2450 2449
2451 /* Setup values for the various callback routines */2450 /* Setup values for the various callback routines */
drivers/usb/serial/option.c+9−0
@@ -158,6 +158,7 @@ static void option_instat_callback(struct urb *urb); · 157 unmodified lines
158#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0x8001158#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0x8001
159#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0x9000159#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0x9000
160#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0x9001160#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0x9001
161#define NOVATELWIRELESS_PRODUCT_E362 0x9010
161#define NOVATELWIRELESS_PRODUCT_G1 0xA001162#define NOVATELWIRELESS_PRODUCT_G1 0xA001
162#define NOVATELWIRELESS_PRODUCT_G1_M 0xA002163#define NOVATELWIRELESS_PRODUCT_G1_M 0xA002
163#define NOVATELWIRELESS_PRODUCT_G2 0xA010164#define NOVATELWIRELESS_PRODUCT_G2 0xA010
@@ -193,6 +194,9 @@ static void option_instat_callback(struct urb *urb); · 29 unmodified lines
193#define DELL_PRODUCT_5730_MINICARD_TELUS 0x8181194#define DELL_PRODUCT_5730_MINICARD_TELUS 0x8181
194#define DELL_PRODUCT_5730_MINICARD_VZW 0x8182195#define DELL_PRODUCT_5730_MINICARD_VZW 0x8182
195 196
197#define DELL_PRODUCT_5800_MINICARD_VZW 0x8195 /* Novatel E362 */
198#define DELL_PRODUCT_5800_V2_MINICARD_VZW 0x8196 /* Novatel E362 */
199
196#define KYOCERA_VENDOR_ID 0x0c88200#define KYOCERA_VENDOR_ID 0x0c88
197#define KYOCERA_PRODUCT_KPC650 0x17da201#define KYOCERA_PRODUCT_KPC650 0x17da
198#define KYOCERA_PRODUCT_KPC680 0x180a202#define KYOCERA_PRODUCT_KPC680 0x180a
@@ -283,6 +287,7 @@ static void option_instat_callback(struct urb *urb); · 84 unmodified lines
283/* ALCATEL PRODUCTS */287/* ALCATEL PRODUCTS */
284#define ALCATEL_VENDOR_ID 0x1bbb288#define ALCATEL_VENDOR_ID 0x1bbb
285#define ALCATEL_PRODUCT_X060S_X200 0x0000289#define ALCATEL_PRODUCT_X060S_X200 0x0000
290#define ALCATEL_PRODUCT_X220_X500D 0x0017
286 291
287#define PIRELLI_VENDOR_ID 0x1266292#define PIRELLI_VENDOR_ID 0x1266
288#define PIRELLI_PRODUCT_C100_1 0x1002293#define PIRELLI_PRODUCT_C100_1 0x1002
@@ -706,6 +711,7 @@ static const struct usb_device_id option_ids[] = { · 417 unmodified lines
706 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) },711 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) },
707 /* Novatel Ovation MC551 a.k.a. Verizon USB551L */712 /* Novatel Ovation MC551 a.k.a. Verizon USB551L */
708 { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC551, 0xff, 0xff, 0xff) },713 { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC551, 0xff, 0xff, 0xff) },
714 { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E362, 0xff, 0xff, 0xff) },
709 715
710 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },716 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
711 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },717 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
@@ -728,6 +734,8 @@ static const struct usb_device_id option_ids[] = { · 16 unmodified lines
728 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */734 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
729 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */735 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
730 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */736 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
737 { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5800_MINICARD_VZW, 0xff, 0xff, 0xff) },
738 { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5800_V2_MINICARD_VZW, 0xff, 0xff, 0xff) },
731 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */739 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */
732 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },740 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
733 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) },741 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) },
@@ -1157,6 +1165,7 @@ static const struct usb_device_id option_ids[] = { · 423 unmodified lines
1157 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),1165 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
1158 .driver_info = (kernel_ulong_t)&alcatel_x200_blacklist1166 .driver_info = (kernel_ulong_t)&alcatel_x200_blacklist
1159 },1167 },
1168 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D) },
1160 { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },1169 { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
1161 { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },1170 { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },
1162 { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14),1171 { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14),
drivers/usb/serial/usb_wwan.c+5−5
@@ -455,9 +455,6 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port, · 454 unmodified lines
455 struct usb_serial *serial = port->serial;455 struct usb_serial *serial = port->serial;
456 struct urb *urb;456 struct urb *urb;
457 457
458 if (endpoint == -1)
459 return NULL; /* endpoint not needed */
460
461 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */458 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
462 if (urb == NULL) {459 if (urb == NULL) {
463 dev_dbg(&serial->interface->dev,460 dev_dbg(&serial->interface->dev,
@@ -489,6 +486,9 @@ int usb_wwan_port_probe(struct usb_serial_port *port) · 25 unmodified lines
489 init_usb_anchor(&portdata->delayed);486 init_usb_anchor(&portdata->delayed);
490 487
491 for (i = 0; i < N_IN_URB; i++) {488 for (i = 0; i < N_IN_URB; i++) {
489 if (!port->bulk_in_size)
490 break;
491
492 buffer = (u8 *)__get_free_page(GFP_KERNEL);492 buffer = (u8 *)__get_free_page(GFP_KERNEL);
493 if (!buffer)493 if (!buffer)
494 goto bail_out_error;494 goto bail_out_error;
@@ -502,8 +502,8 @@ int usb_wwan_port_probe(struct usb_serial_port *port) · 7 unmodified lines
502 }502 }
503 503
504 for (i = 0; i < N_OUT_URB; i++) {504 for (i = 0; i < N_OUT_URB; i++) {
505 if (port->bulk_out_endpointAddress == -1)505 if (!port->bulk_out_size)
506 continue;506 break;
507 507
508 buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);508 buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);
509 if (!buffer)509 if (!buffer)
fs/proc/base.c+109−0
@@ -873,6 +873,113 @@ static const struct file_operations proc_environ_operations = { · 872 unmodified lines
873 .release = mem_release,873 .release = mem_release,
874};874};
875 875
876static ssize_t oom_adj_read(struct file *file, char __user *buf, size_t count,
877 loff_t *ppos)
878{
879 struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode);
880 char buffer[PROC_NUMBUF];
881 int oom_adj = OOM_ADJUST_MIN;
882 size_t len;
883 unsigned long flags;
884
885 if (!task)
886 return -ESRCH;
887 if (lock_task_sighand(task, &flags)) {
888 if (task->signal->oom_score_adj == OOM_SCORE_ADJ_MAX)
889 oom_adj = OOM_ADJUST_MAX;
890 else
891 oom_adj = (task->signal->oom_score_adj * -OOM_DISABLE) /
892 OOM_SCORE_ADJ_MAX;
893 unlock_task_sighand(task, &flags);
894 }
895 put_task_struct(task);
896 len = snprintf(buffer, sizeof(buffer), "%d\n", oom_adj);
897 return simple_read_from_buffer(buf, count, ppos, buffer, len);
898}
899
900static ssize_t oom_adj_write(struct file *file, const char __user *buf,
901 size_t count, loff_t *ppos)
902{
903 struct task_struct *task;
904 char buffer[PROC_NUMBUF];
905 int oom_adj;
906 unsigned long flags;
907 int err;
908
909 memset(buffer, 0, sizeof(buffer));
910 if (count > sizeof(buffer) - 1)
911 count = sizeof(buffer) - 1;
912 if (copy_from_user(buffer, buf, count)) {
913 err = -EFAULT;
914 goto out;
915 }
916
917 err = kstrtoint(strstrip(buffer), 0, &oom_adj);
918 if (err)
919 goto out;
920 if ((oom_adj < OOM_ADJUST_MIN || oom_adj > OOM_ADJUST_MAX) &&
921 oom_adj != OOM_DISABLE) {
922 err = -EINVAL;
923 goto out;
924 }
925
926 task = get_proc_task(file->f_path.dentry->d_inode);
927 if (!task) {
928 err = -ESRCH;
929 goto out;
930 }
931
932 task_lock(task);
933 if (!task->mm) {
934 err = -EINVAL;
935 goto err_task_lock;
936 }
937
938 if (!lock_task_sighand(task, &flags)) {
939 err = -ESRCH;
940 goto err_task_lock;
941 }
942
943 /*
944 * Scale /proc/pid/oom_score_adj appropriately ensuring that a maximum
945 * value is always attainable.
946 */
947 if (oom_adj == OOM_ADJUST_MAX)
948 oom_adj = OOM_SCORE_ADJ_MAX;
949 else
950 oom_adj = (oom_adj * OOM_SCORE_ADJ_MAX) / -OOM_DISABLE;
951
952 if (oom_adj < task->signal->oom_score_adj &&
953 !capable(CAP_SYS_RESOURCE)) {
954 err = -EACCES;
955 goto err_sighand;
956 }
957
958 /*
959 * /proc/pid/oom_adj is provided for legacy purposes, ask users to use
960 * /proc/pid/oom_score_adj instead.
961 */
962 printk_once(KERN_WARNING "%s (%d): /proc/%d/oom_adj is deprecated, please use /proc/%d/oom_score_adj instead.\n",
963 current->comm, task_pid_nr(current), task_pid_nr(task),
964 task_pid_nr(task));
965
966 task->signal->oom_score_adj = oom_adj;
967 trace_oom_score_adj_update(task);
968err_sighand:
969 unlock_task_sighand(task, &flags);
970err_task_lock:
971 task_unlock(task);
972 put_task_struct(task);
973out:
974 return err < 0 ? err : count;
975}
976
977static const struct file_operations proc_oom_adj_operations = {
978 .read = oom_adj_read,
979 .write = oom_adj_write,
980 .llseek = generic_file_llseek,
981};
982
876static ssize_t oom_score_adj_read(struct file *file, char __user *buf,983static ssize_t oom_score_adj_read(struct file *file, char __user *buf,
877 size_t count, loff_t *ppos)984 size_t count, loff_t *ppos)
878{985{
@@ -2598,6 +2705,7 @@ static const struct pid_entry tgid_base_stuff[] = { · 1719 unmodified lines
2598 REG("cgroup", S_IRUGO, proc_cgroup_operations),2705 REG("cgroup", S_IRUGO, proc_cgroup_operations),
2599#endif2706#endif
2600 INF("oom_score", S_IRUGO, proc_oom_score),2707 INF("oom_score", S_IRUGO, proc_oom_score),
2708 REG("oom_adj", S_IRUGO|S_IWUSR, proc_oom_adj_operations),
2601 REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),2709 REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
2602#ifdef CONFIG_AUDITSYSCALL2710#ifdef CONFIG_AUDITSYSCALL
2603 REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),2711 REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),
@@ -2964,6 +3072,7 @@ static const struct pid_entry tid_base_stuff[] = { · 360 unmodified lines
2964 REG("cgroup", S_IRUGO, proc_cgroup_operations),3072 REG("cgroup", S_IRUGO, proc_cgroup_operations),
2965#endif3073#endif
2966 INF("oom_score", S_IRUGO, proc_oom_score),3074 INF("oom_score", S_IRUGO, proc_oom_score),
3075 REG("oom_adj", S_IRUGO|S_IWUSR, proc_oom_adj_operations),
2967 REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),3076 REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
2968#ifdef CONFIG_AUDITSYSCALL3077#ifdef CONFIG_AUDITSYSCALL
2969 REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),3078 REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),
fs/pstore/platform.c+2−1
@@ -161,6 +161,7 @@ static void pstore_console_write(struct console *con, const char *s, unsigned c) · 160 unmodified lines
161 161
162 while (s < e) {162 while (s < e) {
163 unsigned long flags;163 unsigned long flags;
164 u64 id;
164 165
165 if (c > psinfo->bufsize)166 if (c > psinfo->bufsize)
166 c = psinfo->bufsize;167 c = psinfo->bufsize;
@@ -172,7 +173,7 @@ static void pstore_console_write(struct console *con, const char *s, unsigned c) · 5 unmodified lines
172 spin_lock_irqsave(&psinfo->buf_lock, flags);173 spin_lock_irqsave(&psinfo->buf_lock, flags);
173 }174 }
174 memcpy(psinfo->buf, s, c);175 memcpy(psinfo->buf, s, c);
175 psinfo->write(PSTORE_TYPE_CONSOLE, 0, NULL, 0, c, psinfo);176 psinfo->write(PSTORE_TYPE_CONSOLE, 0, &id, 0, c, psinfo);
176 spin_unlock_irqrestore(&psinfo->buf_lock, flags);177 spin_unlock_irqrestore(&psinfo->buf_lock, flags);
177 s += c;178 s += c;
178 c = e - s;179 c = e - s;
fs/ubifs/find.c+10−2
@@ -681,8 +681,16 @@ int ubifs_find_free_leb_for_idx(struct ubifs_info *c) · 680 unmodified lines
681 if (!lprops) {681 if (!lprops) {
682 lprops = ubifs_fast_find_freeable(c);682 lprops = ubifs_fast_find_freeable(c);
683 if (!lprops) {683 if (!lprops) {
684 ubifs_assert(c->freeable_cnt == 0);684 /*
685 if (c->lst.empty_lebs - c->lst.taken_empty_lebs > 0) {685 * The first condition means the following: go scan the
686 * LPT if there are uncategorized lprops, which means
687 * there may be freeable LEBs there (UBIFS does not
688 * store the information about freeable LEBs in the
689 * master node).
690 */
691 if (c->in_a_category_cnt != c->main_lebs ||
692 c->lst.empty_lebs - c->lst.taken_empty_lebs > 0) {
693 ubifs_assert(c->freeable_cnt == 0);
686 lprops = scan_for_leb_for_idx(c);694 lprops = scan_for_leb_for_idx(c);
687 if (IS_ERR(lprops)) {695 if (IS_ERR(lprops)) {
688 err = PTR_ERR(lprops);696 err = PTR_ERR(lprops);
fs/ubifs/lprops.c+6−0
@@ -300,8 +300,11 @@ void ubifs_add_to_cat(struct ubifs_info *c, struct ubifs_lprops *lprops, · 299 unmodified lines
300 default:300 default:
301 ubifs_assert(0);301 ubifs_assert(0);
302 }302 }
303
303 lprops->flags &= ~LPROPS_CAT_MASK;304 lprops->flags &= ~LPROPS_CAT_MASK;
304 lprops->flags |= cat;305 lprops->flags |= cat;
306 c->in_a_category_cnt += 1;
307 ubifs_assert(c->in_a_category_cnt <= c->main_lebs);
305}308}
306 309
307/**310/**
@@ -334,6 +337,9 @@ static void ubifs_remove_from_cat(struct ubifs_info *c, · 26 unmodified lines
334 default:337 default:
335 ubifs_assert(0);338 ubifs_assert(0);
336 }339 }
340
341 c->in_a_category_cnt -= 1;
342 ubifs_assert(c->in_a_category_cnt >= 0);
337}343}
338 344
339/**345/**
fs/ubifs/ubifs.h+3−0
@@ -1183,6 +1183,8 @@ struct ubifs_debug_info; · 1182 unmodified lines
1183 * @freeable_list: list of freeable non-index LEBs (free + dirty == @leb_size)1183 * @freeable_list: list of freeable non-index LEBs (free + dirty == @leb_size)
1184 * @frdi_idx_list: list of freeable index LEBs (free + dirty == @leb_size)1184 * @frdi_idx_list: list of freeable index LEBs (free + dirty == @leb_size)
1185 * @freeable_cnt: number of freeable LEBs in @freeable_list1185 * @freeable_cnt: number of freeable LEBs in @freeable_list
1186 * @in_a_category_cnt: count of lprops which are in a certain category, which
1187 * basically meants that they were loaded from the flash
1186 *1188 *
1187 * @ltab_lnum: LEB number of LPT's own lprops table1189 * @ltab_lnum: LEB number of LPT's own lprops table
1188 * @ltab_offs: offset of LPT's own lprops table1190 * @ltab_offs: offset of LPT's own lprops table
@@ -1412,6 +1414,7 @@ struct ubifs_info { · 223 unmodified lines
1412 struct list_head freeable_list;1414 struct list_head freeable_list;
1413 struct list_head frdi_idx_list;1415 struct list_head frdi_idx_list;
1414 int freeable_cnt;1416 int freeable_cnt;
1417 int in_a_category_cnt;
1415 1418
1416 int ltab_lnum;1419 int ltab_lnum;
1417 int ltab_offs;1420 int ltab_offs;
include/linux/clk-provider.h+2−2
@@ -335,8 +335,8 @@ const char *__clk_get_name(struct clk *clk); · 334 unmodified lines
335struct clk_hw *__clk_get_hw(struct clk *clk);335struct clk_hw *__clk_get_hw(struct clk *clk);
336u8 __clk_get_num_parents(struct clk *clk);336u8 __clk_get_num_parents(struct clk *clk);
337struct clk *__clk_get_parent(struct clk *clk);337struct clk *__clk_get_parent(struct clk *clk);
338inline int __clk_get_enable_count(struct clk *clk);338int __clk_get_enable_count(struct clk *clk);
339inline int __clk_get_prepare_count(struct clk *clk);339int __clk_get_prepare_count(struct clk *clk);
340unsigned long __clk_get_rate(struct clk *clk);340unsigned long __clk_get_rate(struct clk *clk);
341unsigned long __clk_get_flags(struct clk *clk);341unsigned long __clk_get_flags(struct clk *clk);
342int __clk_is_enabled(struct clk *clk);342int __clk_is_enabled(struct clk *clk);
include/linux/mm.h+0−4
@@ -1684,9 +1684,5 @@ static inline unsigned int debug_guardpage_minorder(void) { return 0; } · 1683 unmodified lines
1684static inline bool page_is_guard(struct page *page) { return false; }1684static inline bool page_is_guard(struct page *page) { return false; }
1685#endif /* CONFIG_DEBUG_PAGEALLOC */1685#endif /* CONFIG_DEBUG_PAGEALLOC */
1686 1686
1687extern void reset_zone_present_pages(void);
1688extern void fixup_zone_present_pages(int nid, unsigned long start_pfn,
1689 unsigned long end_pfn);
1690
1691#endif /* __KERNEL__ */1687#endif /* __KERNEL__ */
1692#endif /* _LINUX_MM_H */1688#endif /* _LINUX_MM_H */
include/linux/mmzone.h+1−1
@@ -752,7 +752,7 @@ extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn, · 751 unmodified lines
752 unsigned long size,752 unsigned long size,
753 enum memmap_context context);753 enum memmap_context context);
754 754
755extern void lruvec_init(struct lruvec *lruvec, struct zone *zone);755extern void lruvec_init(struct lruvec *lruvec);
756 756
757static inline struct zone *lruvec_zone(struct lruvec *lruvec)757static inline struct zone *lruvec_zone(struct lruvec *lruvec)
758{758{
include/linux/platform_data/omap_ocp2scp.h+31−0
@@ -0,0 +1,31 @@
1/*
2 * omap_ocp2scp.h -- ocp2scp header file
3 *
4 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Author: Kishon Vijay Abraham I <kishon@ti.com>
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 */
18
19#ifndef __DRIVERS_OMAP_OCP2SCP_H
20#define __DRIVERS_OMAP_OCP2SCP_H
21
22struct omap_ocp2scp_dev {
23 const char *drv_name;
24 struct resource *res;
25};
26
27struct omap_ocp2scp_platform_data {
28 int dev_cnt;
29 struct omap_ocp2scp_dev **devices;
30};
31#endif /* __DRIVERS_OMAP_OCP2SCP_H */
include/linux/rio.h+2−0
@@ -275,9 +275,11 @@ struct rio_id_table { · 274 unmodified lines
275 * struct rio_net - RIO network info275 * struct rio_net - RIO network info
276 * @node: Node in global list of RIO networks276 * @node: Node in global list of RIO networks
277 * @devices: List of devices in this network277 * @devices: List of devices in this network
278 * @switches: List of switches in this netowrk
278 * @mports: List of master ports accessing this network279 * @mports: List of master ports accessing this network
279 * @hport: Default port for accessing this network280 * @hport: Default port for accessing this network
280 * @id: RIO network ID281 * @id: RIO network ID
282 * @destid_table: destID allocation table
281 */283 */
282struct rio_net {284struct rio_net {
283 struct list_head node; /* node in list of networks */285 struct list_head node; /* node in list of networks */
include/uapi/linux/oom.h+9−0
@@ -8,4 +8,13 @@ · 7 unmodified lines
8#define OOM_SCORE_ADJ_MIN (-1000)8#define OOM_SCORE_ADJ_MIN (-1000)
9#define OOM_SCORE_ADJ_MAX 10009#define OOM_SCORE_ADJ_MAX 1000
10 10
11/*
12 * /proc/<pid>/oom_adj set to -17 protects from the oom killer for legacy
13 * purposes.
14 */
15#define OOM_DISABLE (-17)
16/* inclusive */
17#define OOM_ADJUST_MIN (-16)
18#define OOM_ADJUST_MAX 15
19
11#endif /* _UAPI__INCLUDE_LINUX_OOM_H */20#endif /* _UAPI__INCLUDE_LINUX_OOM_H */
kernel/futex.c+22−19
@@ -716,7 +716,7 @@ static int futex_lock_pi_atomic(u32 __user *uaddr, struct futex_hash_bucket *hb, · 715 unmodified lines
716 struct futex_pi_state **ps,716 struct futex_pi_state **ps,
717 struct task_struct *task, int set_waiters)717 struct task_struct *task, int set_waiters)
718{718{
719 int lock_taken, ret, ownerdied = 0;719 int lock_taken, ret, force_take = 0;
720 u32 uval, newval, curval, vpid = task_pid_vnr(task);720 u32 uval, newval, curval, vpid = task_pid_vnr(task);
721 721
722retry:722retry:
@@ -755,17 +755,15 @@ retry: · 32 unmodified lines
755 newval = curval | FUTEX_WAITERS;755 newval = curval | FUTEX_WAITERS;
756 756
757 /*757 /*
758 * There are two cases, where a futex might have no owner (the758 * Should we force take the futex? See below.
759 * owner TID is 0): OWNER_DIED. We take over the futex in this
760 * case. We also do an unconditional take over, when the owner
761 * of the futex died.
762 *
763 * This is safe as we are protected by the hash bucket lock !
764 */759 */
765 if (unlikely(ownerdied || !(curval & FUTEX_TID_MASK))) {760 if (unlikely(force_take)) {
766 /* Keep the OWNER_DIED bit */761 /*
762 * Keep the OWNER_DIED and the WAITERS bit and set the
763 * new TID value.
764 */
767 newval = (curval & ~FUTEX_TID_MASK) | vpid;765 newval = (curval & ~FUTEX_TID_MASK) | vpid;
768 ownerdied = 0;766 force_take = 0;
769 lock_taken = 1;767 lock_taken = 1;
770 }768 }
771 769
@@ -775,7 +773,7 @@ retry: · 3 unmodified lines
775 goto retry;773 goto retry;
776 774
777 /*775 /*
778 * We took the lock due to owner died take over.776 * We took the lock due to forced take over.
779 */777 */
780 if (unlikely(lock_taken))778 if (unlikely(lock_taken))
781 return 1;779 return 1;
@@ -790,20 +788,25 @@ retry: · 8 unmodified lines
790 switch (ret) {788 switch (ret) {
791 case -ESRCH:789 case -ESRCH:
792 /*790 /*
793 * No owner found for this futex. Check if the791 * We failed to find an owner for this
794 * OWNER_DIED bit is set to figure out whether792 * futex. So we have no pi_state to block
795 * this is a robust futex or not.793 * on. This can happen in two cases:
794 *
795 * 1) The owner died
796 * 2) A stale FUTEX_WAITERS bit
797 *
798 * Re-read the futex value.
796 */799 */
797 if (get_futex_value_locked(&curval, uaddr))800 if (get_futex_value_locked(&curval, uaddr))
798 return -EFAULT;801 return -EFAULT;
799 802
800 /*803 /*
801 * We simply start over in case of a robust804 * If the owner died or we have a stale
802 * futex. The code above will take the futex805 * WAITERS bit the owner TID in the user space
803 * and return happy.806 * futex is 0.
804 */807 */
805 if (curval & FUTEX_OWNER_DIED) {808 if (!(curval & FUTEX_TID_MASK)) {
806 ownerdied = 1;809 force_take = 1;
807 goto retry;810 goto retry;
808 }811 }
809 default:812 default:
mm/bootmem.c+1−9
@@ -198,8 +198,6 @@ static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata) · 197 unmodified lines
198 int order = ilog2(BITS_PER_LONG);198 int order = ilog2(BITS_PER_LONG);
199 199
200 __free_pages_bootmem(pfn_to_page(start), order);200 __free_pages_bootmem(pfn_to_page(start), order);
201 fixup_zone_present_pages(page_to_nid(pfn_to_page(start)),
202 start, start + BITS_PER_LONG);
203 count += BITS_PER_LONG;201 count += BITS_PER_LONG;
204 start += BITS_PER_LONG;202 start += BITS_PER_LONG;
205 } else {203 } else {
@@ -210,9 +208,6 @@ static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata) · 4 unmodified lines
210 if (vec & 1) {208 if (vec & 1) {
211 page = pfn_to_page(start + off);209 page = pfn_to_page(start + off);
212 __free_pages_bootmem(page, 0);210 __free_pages_bootmem(page, 0);
213 fixup_zone_present_pages(
214 page_to_nid(page),
215 start + off, start + off + 1);
216 count++;211 count++;
217 }212 }
218 vec >>= 1;213 vec >>= 1;
@@ -226,11 +221,8 @@ static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata) · 7 unmodified lines
226 pages = bdata->node_low_pfn - bdata->node_min_pfn;221 pages = bdata->node_low_pfn - bdata->node_min_pfn;
227 pages = bootmem_bootmap_pages(pages);222 pages = bootmem_bootmap_pages(pages);
228 count += pages;223 count += pages;
229 while (pages--) {224 while (pages--)
230 fixup_zone_present_pages(page_to_nid(page),
231 page_to_pfn(page), page_to_pfn(page) + 1);
232 __free_pages_bootmem(page++, 0);225 __free_pages_bootmem(page++, 0);
233 }
234 226
235 bdebug("nid=%td released=%lx\n", bdata - bootmem_node_data, count);227 bdebug("nid=%td released=%lx\n", bdata - bootmem_node_data, count);
236 228
mm/highmem.c+1−1
@@ -98,7 +98,7 @@ struct page *kmap_to_page(void *vaddr) · 97 unmodified lines
98{98{
99 unsigned long addr = (unsigned long)vaddr;99 unsigned long addr = (unsigned long)vaddr;
100 100
101 if (addr >= PKMAP_ADDR(0) && addr <= PKMAP_ADDR(LAST_PKMAP)) {101 if (addr >= PKMAP_ADDR(0) && addr < PKMAP_ADDR(LAST_PKMAP)) {
102 int i = (addr - PKMAP_ADDR(0)) >> PAGE_SHIFT;102 int i = (addr - PKMAP_ADDR(0)) >> PAGE_SHIFT;
103 return pte_page(pkmap_page_table[i]);103 return pte_page(pkmap_page_table[i]);
104 }104 }
mm/memcontrol.c+50−17
@@ -1055,12 +1055,24 @@ struct lruvec *mem_cgroup_zone_lruvec(struct zone *zone, · 1054 unmodified lines
1055 struct mem_cgroup *memcg)1055 struct mem_cgroup *memcg)
1056{1056{
1057 struct mem_cgroup_per_zone *mz;1057 struct mem_cgroup_per_zone *mz;
1058 struct lruvec *lruvec;
1058 1059
1059 if (mem_cgroup_disabled())1060 if (mem_cgroup_disabled()) {
1060 return &zone->lruvec;1061 lruvec = &zone->lruvec;
1062 goto out;
1063 }
1061 1064
1062 mz = mem_cgroup_zoneinfo(memcg, zone_to_nid(zone), zone_idx(zone));1065 mz = mem_cgroup_zoneinfo(memcg, zone_to_nid(zone), zone_idx(zone));
1063 return &mz->lruvec;1066 lruvec = &mz->lruvec;
1067out:
1068 /*
1069 * Since a node can be onlined after the mem_cgroup was created,
1070 * we have to be prepared to initialize lruvec->zone here;
1071 * and if offlined then reonlined, we need to reinitialize it.
1072 */
1073 if (unlikely(lruvec->zone != zone))
1074 lruvec->zone = zone;
1075 return lruvec;
1064}1076}
1065 1077
1066/*1078/*
@@ -1087,9 +1099,12 @@ struct lruvec *mem_cgroup_page_lruvec(struct page *page, struct zone *zone) · 20 unmodified lines
1087 struct mem_cgroup_per_zone *mz;1099 struct mem_cgroup_per_zone *mz;
1088 struct mem_cgroup *memcg;1100 struct mem_cgroup *memcg;
1089 struct page_cgroup *pc;1101 struct page_cgroup *pc;
1102 struct lruvec *lruvec;
1090 1103
1091 if (mem_cgroup_disabled())1104 if (mem_cgroup_disabled()) {
1092 return &zone->lruvec;1105 lruvec = &zone->lruvec;
1106 goto out;
1107 }
1093 1108
1094 pc = lookup_page_cgroup(page);1109 pc = lookup_page_cgroup(page);
1095 memcg = pc->mem_cgroup;1110 memcg = pc->mem_cgroup;
@@ -1107,7 +1122,16 @@ struct lruvec *mem_cgroup_page_lruvec(struct page *page, struct zone *zone) · 11 unmodified lines
1107 pc->mem_cgroup = memcg = root_mem_cgroup;1122 pc->mem_cgroup = memcg = root_mem_cgroup;
1108 1123
1109 mz = page_cgroup_zoneinfo(memcg, page);1124 mz = page_cgroup_zoneinfo(memcg, page);
1110 return &mz->lruvec;1125 lruvec = &mz->lruvec;
1126out:
1127 /*
1128 * Since a node can be onlined after the mem_cgroup was created,
1129 * we have to be prepared to initialize lruvec->zone here;
1130 * and if offlined then reonlined, we need to reinitialize it.
1131 */
1132 if (unlikely(lruvec->zone != zone))
1133 lruvec->zone = zone;
1134 return lruvec;
1111}1135}
1112 1136
1113/**1137/**
@@ -1452,17 +1476,26 @@ static int mem_cgroup_count_children(struct mem_cgroup *memcg) · 338 unmodified lines
1452static u64 mem_cgroup_get_limit(struct mem_cgroup *memcg)1476static u64 mem_cgroup_get_limit(struct mem_cgroup *memcg)
1453{1477{
1454 u64 limit;1478 u64 limit;
1455 u64 memsw;
1456 1479
1457 limit = res_counter_read_u64(&memcg->res, RES_LIMIT);1480 limit = res_counter_read_u64(&memcg->res, RES_LIMIT);
1458 limit += total_swap_pages << PAGE_SHIFT;
1459 1481
1460 memsw = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
1461 /*1482 /*
1462 * If memsw is finite and limits the amount of swap space available1483 * Do not consider swap space if we cannot swap due to swappiness
1463 * to this memcg, return that limit.
1464 */1484 */
1465 return min(limit, memsw);1485 if (mem_cgroup_swappiness(memcg)) {
1486 u64 memsw;
1487
1488 limit += total_swap_pages << PAGE_SHIFT;
1489 memsw = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
1490
1491 /*
1492 * If memsw is finite and limits the amount of swap space
1493 * available to this memcg, return that limit.
1494 */
1495 limit = min(limit, memsw);
1496 }
1497
1498 return limit;
1466}1499}
1467 1500
1468void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,1501void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
@@ -3688,17 +3721,17 @@ unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, · 2219 unmodified lines
3688static bool mem_cgroup_force_empty_list(struct mem_cgroup *memcg,3721static bool mem_cgroup_force_empty_list(struct mem_cgroup *memcg,
3689 int node, int zid, enum lru_list lru)3722 int node, int zid, enum lru_list lru)
3690{3723{
3691 struct mem_cgroup_per_zone *mz;3724 struct lruvec *lruvec;
3692 unsigned long flags, loop;3725 unsigned long flags, loop;
3693 struct list_head *list;3726 struct list_head *list;
3694 struct page *busy;3727 struct page *busy;
3695 struct zone *zone;3728 struct zone *zone;
3696 3729
3697 zone = &NODE_DATA(node)->node_zones[zid];3730 zone = &NODE_DATA(node)->node_zones[zid];
3698 mz = mem_cgroup_zoneinfo(memcg, node, zid);3731 lruvec = mem_cgroup_zone_lruvec(zone, memcg);
3699 list = &mz->lruvec.lists[lru];3732 list = &lruvec->lists[lru];
3700 3733
3701 loop = mz->lru_size[lru];3734 loop = mem_cgroup_get_lru_size(lruvec, lru);
3702 /* give some margin against EBUSY etc...*/3735 /* give some margin against EBUSY etc...*/
3703 loop += 256;3736 loop += 256;
3704 busy = NULL;3737 busy = NULL;
@@ -4736,7 +4769,7 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node) · 1031 unmodified lines
4736 4769
4737 for (zone = 0; zone < MAX_NR_ZONES; zone++) {4770 for (zone = 0; zone < MAX_NR_ZONES; zone++) {
4738 mz = &pn->zoneinfo[zone];4771 mz = &pn->zoneinfo[zone];
4739 lruvec_init(&mz->lruvec, &NODE_DATA(node)->node_zones[zone]);4772 lruvec_init(&mz->lruvec);
4740 mz->usage_in_excess = 0;4773 mz->usage_in_excess = 0;
4741 mz->on_tree = false;4774 mz->on_tree = false;
4742 mz->memcg = memcg;4775 mz->memcg = memcg;
mm/memory.c+4−6
@@ -2527,9 +2527,8 @@ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct *vma, · 2526 unmodified lines
2527 int ret = 0;2527 int ret = 0;
2528 int page_mkwrite = 0;2528 int page_mkwrite = 0;
2529 struct page *dirty_page = NULL;2529 struct page *dirty_page = NULL;
2530 unsigned long mmun_start; /* For mmu_notifiers */2530 unsigned long mmun_start = 0; /* For mmu_notifiers */
2531 unsigned long mmun_end; /* For mmu_notifiers */2531 unsigned long mmun_end = 0; /* For mmu_notifiers */
2532 bool mmun_called = false; /* For mmu_notifiers */
2533 2532
2534 old_page = vm_normal_page(vma, address, orig_pte);2533 old_page = vm_normal_page(vma, address, orig_pte);
2535 if (!old_page) {2534 if (!old_page) {
@@ -2708,8 +2707,7 @@ gotten: · 172 unmodified lines
2708 goto oom_free_new;2707 goto oom_free_new;
2709 2708
2710 mmun_start = address & PAGE_MASK;2709 mmun_start = address & PAGE_MASK;
2711 mmun_end = (address & PAGE_MASK) + PAGE_SIZE;2710 mmun_end = mmun_start + PAGE_SIZE;
2712 mmun_called = true;
2713 mmu_notifier_invalidate_range_start(mm, mmun_start, mmun_end);2711 mmu_notifier_invalidate_range_start(mm, mmun_start, mmun_end);
2714 2712
2715 /*2713 /*
@@ -2778,7 +2776,7 @@ gotten: · 62 unmodified lines
2778 page_cache_release(new_page);2776 page_cache_release(new_page);
2779unlock:2777unlock:
2780 pte_unmap_unlock(page_table, ptl);2778 pte_unmap_unlock(page_table, ptl);
2781 if (mmun_called)2779 if (mmun_end > mmun_start)
2782 mmu_notifier_invalidate_range_end(mm, mmun_start, mmun_end);2780 mmu_notifier_invalidate_range_end(mm, mmun_start, mmun_end);
2783 if (old_page) {2781 if (old_page) {
2784 /*2782 /*
mm/memory_hotplug.c+0−7
@@ -106,7 +106,6 @@ static void get_page_bootmem(unsigned long info, struct page *page, · 105 unmodified lines
106void __ref put_page_bootmem(struct page *page)106void __ref put_page_bootmem(struct page *page)
107{107{
108 unsigned long type;108 unsigned long type;
109 struct zone *zone;
110 109
111 type = (unsigned long) page->lru.next;110 type = (unsigned long) page->lru.next;
112 BUG_ON(type < MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE ||111 BUG_ON(type < MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE ||
@@ -117,12 +116,6 @@ void __ref put_page_bootmem(struct page *page) · 4 unmodified lines
117 set_page_private(page, 0);116 set_page_private(page, 0);
118 INIT_LIST_HEAD(&page->lru);117 INIT_LIST_HEAD(&page->lru);
119 __free_pages_bootmem(page, 0);118 __free_pages_bootmem(page, 0);
120
121 zone = page_zone(page);
122 zone_span_writelock(zone);
123 zone->present_pages++;
124 zone_span_writeunlock(zone);
125 totalram_pages++;
126 }119 }
127 120
128}121}
mm/mmap.c+2−0
@@ -334,8 +334,10 @@ void validate_mm(struct mm_struct *mm) · 333 unmodified lines
334 struct vm_area_struct *vma = mm->mmap;334 struct vm_area_struct *vma = mm->mmap;
335 while (vma) {335 while (vma) {
336 struct anon_vma_chain *avc;336 struct anon_vma_chain *avc;
337 vma_lock_anon_vma(vma);
337 list_for_each_entry(avc, &vma->anon_vma_chain, same_vma)338 list_for_each_entry(avc, &vma->anon_vma_chain, same_vma)
338 anon_vma_interval_tree_verify(avc);339 anon_vma_interval_tree_verify(avc);
340 vma_unlock_anon_vma(vma);
339 vma = vma->vm_next;341 vma = vma->vm_next;
340 i++;342 i++;
341 }343 }
mm/mmzone.c+1−5
@@ -87,7 +87,7 @@ int memmap_valid_within(unsigned long pfn, · 86 unmodified lines
87}87}
88#endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */88#endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
89 89
90void lruvec_init(struct lruvec *lruvec, struct zone *zone)90void lruvec_init(struct lruvec *lruvec)
91{91{
92 enum lru_list lru;92 enum lru_list lru;
93 93
@@ -95,8 +95,4 @@ void lruvec_init(struct lruvec *lruvec, struct zone *zone) · 1 unmodified line
95 95
96 for_each_lru(lru)96 for_each_lru(lru)
97 INIT_LIST_HEAD(&lruvec->lists[lru]);97 INIT_LIST_HEAD(&lruvec->lists[lru]);
98
99#ifdef CONFIG_MEMCG
100 lruvec->zone = zone;
101#endif
102}98}
mm/nobootmem.c+0−3
@@ -116,8 +116,6 @@ static unsigned long __init __free_memory_core(phys_addr_t start, · 115 unmodified lines
116 return 0;116 return 0;
117 117
118 __free_pages_memory(start_pfn, end_pfn);118 __free_pages_memory(start_pfn, end_pfn);
119 fixup_zone_present_pages(pfn_to_nid(start >> PAGE_SHIFT),
120 start_pfn, end_pfn);
121 119
122 return end_pfn - start_pfn;120 return end_pfn - start_pfn;
123}121}
@@ -128,7 +126,6 @@ unsigned long __init free_low_memory_core_early(int nodeid) · 4 unmodified lines
128 phys_addr_t start, end, size;126 phys_addr_t start, end, size;
129 u64 i;127 u64 i;
130 128
131 reset_zone_present_pages();
132 for_each_free_mem_range(i, MAX_NUMNODES, &start, &end, NULL)129 for_each_free_mem_range(i, MAX_NUMNODES, &start, &end, NULL)
133 count += __free_memory_core(start, end);130 count += __free_memory_core(start, end);
134 131
mm/page_alloc.c+1−35
@@ -4505,7 +4505,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat, · 4504 unmodified lines
4505 zone->zone_pgdat = pgdat;4505 zone->zone_pgdat = pgdat;
4506 4506
4507 zone_pcp_init(zone);4507 zone_pcp_init(zone);
4508 lruvec_init(&zone->lruvec, zone);4508 lruvec_init(&zone->lruvec);
4509 if (!size)4509 if (!size)
4510 continue;4510 continue;
4511 4511
@@ -6098,37 +6098,3 @@ void dump_page(struct page *page) · 1586 unmodified lines
6098 dump_page_flags(page->flags);6098 dump_page_flags(page->flags);
6099 mem_cgroup_print_bad_page(page);6099 mem_cgroup_print_bad_page(page);
6100}6100}
6101
6102/* reset zone->present_pages */
6103void reset_zone_present_pages(void)
6104{
6105 struct zone *z;
6106 int i, nid;
6107
6108 for_each_node_state(nid, N_HIGH_MEMORY) {
6109 for (i = 0; i < MAX_NR_ZONES; i++) {
6110 z = NODE_DATA(nid)->node_zones + i;
6111 z->present_pages = 0;
6112 }
6113 }
6114}
6115
6116/* calculate zone's present pages in buddy system */
6117void fixup_zone_present_pages(int nid, unsigned long start_pfn,
6118 unsigned long end_pfn)
6119{
6120 struct zone *z;
6121 unsigned long zone_start_pfn, zone_end_pfn;
6122 int i;
6123
6124 for (i = 0; i < MAX_NR_ZONES; i++) {
6125 z = NODE_DATA(nid)->node_zones + i;
6126 zone_start_pfn = z->zone_start_pfn;
6127 zone_end_pfn = zone_start_pfn + z->spanned_pages;
6128
6129 /* if the two regions intersect */
6130 if (!(zone_start_pfn >= end_pfn || zone_end_pfn <= start_pfn))
6131 z->present_pages += min(end_pfn, zone_end_pfn) -
6132 max(start_pfn, zone_start_pfn);
6133 }
6134}
mm/shmem.c+15−3
@@ -643,7 +643,7 @@ static void shmem_evict_inode(struct inode *inode) · 642 unmodified lines
643 kfree(info->symlink);643 kfree(info->symlink);
644 644
645 simple_xattrs_free(&info->xattrs);645 simple_xattrs_free(&info->xattrs);
646 BUG_ON(inode->i_blocks);646 WARN_ON(inode->i_blocks);
647 shmem_free_inode(inode->i_sb);647 shmem_free_inode(inode->i_sb);
648 clear_inode(inode);648 clear_inode(inode);
649}649}
@@ -1145,8 +1145,20 @@ repeat: · 495 unmodified lines
1145 if (!error) {1145 if (!error) {
1146 error = shmem_add_to_page_cache(page, mapping, index,1146 error = shmem_add_to_page_cache(page, mapping, index,
1147 gfp, swp_to_radix_entry(swap));1147 gfp, swp_to_radix_entry(swap));
1148 /* We already confirmed swap, and make no allocation */1148 /*
1149 VM_BUG_ON(error);1149 * We already confirmed swap under page lock, and make
1150 * no memory allocation here, so usually no possibility
1151 * of error; but free_swap_and_cache() only trylocks a
1152 * page, so it is just possible that the entry has been
1153 * truncated or holepunched since swap was confirmed.
1154 * shmem_undo_range() will have done some of the
1155 * unaccounting, now delete_from_swap_cache() will do
1156 * the rest (including mem_cgroup_uncharge_swapcache).
1157 * Reset swap.val? No, leave it so "failed" goes back to
1158 * "repeat": reading a hole and writing should succeed.
1159 */
1160 if (error)
1161 delete_from_swap_cache(page);
1150 }1162 }
1151 if (error)1163 if (error)
1152 goto failed;1164 goto failed;
mm/swapfile.c+2−2
@@ -1494,9 +1494,8 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) · 1493 unmodified lines
1494 BUG_ON(!current->mm);1494 BUG_ON(!current->mm);
1495 1495
1496 pathname = getname(specialfile);1496 pathname = getname(specialfile);
1497 err = PTR_ERR(pathname);
1498 if (IS_ERR(pathname))1497 if (IS_ERR(pathname))
1499 goto out;1498 return PTR_ERR(pathname);
1500 1499
1501 victim = file_open_name(pathname, O_RDWR|O_LARGEFILE, 0);1500 victim = file_open_name(pathname, O_RDWR|O_LARGEFILE, 0);
1502 err = PTR_ERR(victim);1501 err = PTR_ERR(victim);
@@ -1608,6 +1607,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) · 105 unmodified lines
1608out_dput:1607out_dput:
1609 filp_close(victim, NULL);1608 filp_close(victim, NULL);
1610out:1609out:
1610 putname(pathname);
1611 return err;1611 return err;
1612}1612}
1613 1613
mm/vmscan.c+0−25
@@ -1760,28 +1760,6 @@ static bool in_reclaim_compaction(struct scan_control *sc) · 1759 unmodified lines
1760 return false;1760 return false;
1761}1761}
1762 1762
1763#ifdef CONFIG_COMPACTION
1764/*
1765 * If compaction is deferred for sc->order then scale the number of pages
1766 * reclaimed based on the number of consecutive allocation failures
1767 */
1768static unsigned long scale_for_compaction(unsigned long pages_for_compaction,
1769 struct lruvec *lruvec, struct scan_control *sc)
1770{
1771 struct zone *zone = lruvec_zone(lruvec);
1772
1773 if (zone->compact_order_failed <= sc->order)
1774 pages_for_compaction <<= zone->compact_defer_shift;
1775 return pages_for_compaction;
1776}
1777#else
1778static unsigned long scale_for_compaction(unsigned long pages_for_compaction,
1779 struct lruvec *lruvec, struct scan_control *sc)
1780{
1781 return pages_for_compaction;
1782}
1783#endif
1784
1785/*1763/*
1786 * Reclaim/compaction is used for high-order allocation requests. It reclaims1764 * Reclaim/compaction is used for high-order allocation requests. It reclaims
1787 * order-0 pages before compacting the zone. should_continue_reclaim() returns1765 * order-0 pages before compacting the zone. should_continue_reclaim() returns
@@ -1829,9 +1807,6 @@ static inline bool should_continue_reclaim(struct lruvec *lruvec, · 41 unmodified lines
1829 * inactive lists are large enough, continue reclaiming1807 * inactive lists are large enough, continue reclaiming
1830 */1808 */
1831 pages_for_compaction = (2UL << sc->order);1809 pages_for_compaction = (2UL << sc->order);
1832
1833 pages_for_compaction = scale_for_compaction(pages_for_compaction,
1834 lruvec, sc);
1835 inactive_lru_pages = get_lru_size(lruvec, LRU_INACTIVE_FILE);1810 inactive_lru_pages = get_lru_size(lruvec, LRU_INACTIVE_FILE);
1836 if (nr_swap_pages > 0)1811 if (nr_swap_pages > 0)
1837 inactive_lru_pages += get_lru_size(lruvec, LRU_INACTIVE_ANON);1812 inactive_lru_pages += get_lru_size(lruvec, LRU_INACTIVE_ANON);
net/batman-adv/soft-interface.c+6−6
@@ -325,6 +325,12 @@ void batadv_interface_rx(struct net_device *soft_iface, · 324 unmodified lines
325 325
326 soft_iface->last_rx = jiffies;326 soft_iface->last_rx = jiffies;
327 327
328 /* Let the bridge loop avoidance check the packet. If will
329 * not handle it, we can safely push it up.
330 */
331 if (batadv_bla_rx(bat_priv, skb, vid, is_bcast))
332 goto out;
333
328 if (orig_node)334 if (orig_node)
329 batadv_tt_add_temporary_global_entry(bat_priv, orig_node,335 batadv_tt_add_temporary_global_entry(bat_priv, orig_node,
330 ethhdr->h_source);336 ethhdr->h_source);
@@ -332,12 +338,6 @@ void batadv_interface_rx(struct net_device *soft_iface, · 1 unmodified line
332 if (batadv_is_ap_isolated(bat_priv, ethhdr->h_source, ethhdr->h_dest))338 if (batadv_is_ap_isolated(bat_priv, ethhdr->h_source, ethhdr->h_dest))
333 goto dropped;339 goto dropped;
334 340
335 /* Let the bridge loop avoidance check the packet. If will
336 * not handle it, we can safely push it up.
337 */
338 if (batadv_bla_rx(bat_priv, skb, vid, is_bcast))
339 goto out;
340
341 netif_rx(skb);341 netif_rx(skb);
342 goto out;342 goto out;
343 343
net/batman-adv/translation-table.c+14−1
@@ -769,6 +769,12 @@ int batadv_tt_global_add(struct batadv_priv *bat_priv, · 768 unmodified lines
769 */769 */
770 tt_global_entry->common.flags &= ~BATADV_TT_CLIENT_TEMP;770 tt_global_entry->common.flags &= ~BATADV_TT_CLIENT_TEMP;
771 771
772 /* the change can carry possible "attribute" flags like the
773 * TT_CLIENT_WIFI, therefore they have to be copied in the
774 * client entry
775 */
776 tt_global_entry->common.flags |= flags;
777
772 /* If there is the BATADV_TT_CLIENT_ROAM flag set, there is only778 /* If there is the BATADV_TT_CLIENT_ROAM flag set, there is only
773 * one originator left in the list and we previously received a779 * one originator left in the list and we previously received a
774 * delete + roaming change for this originator.780 * delete + roaming change for this originator.
@@ -1496,7 +1502,7 @@ batadv_tt_response_fill_table(uint16_t tt_len, uint8_t ttvn, · 721 unmodified lines
1496 1502
1497 memcpy(tt_change->addr, tt_common_entry->addr,1503 memcpy(tt_change->addr, tt_common_entry->addr,
1498 ETH_ALEN);1504 ETH_ALEN);
1499 tt_change->flags = BATADV_NO_FLAGS;1505 tt_change->flags = tt_common_entry->flags;
1500 1506
1501 tt_count++;1507 tt_count++;
1502 tt_change++;1508 tt_change++;
@@ -2450,6 +2456,13 @@ bool batadv_tt_add_temporary_global_entry(struct batadv_priv *bat_priv, · 947 unmodified lines
2450{2456{
2451 bool ret = false;2457 bool ret = false;
2452 2458
2459 /* if the originator is a backbone node (meaning it belongs to the same
2460 * LAN of this node) the temporary client must not be added because to
2461 * reach such destination the node must use the LAN instead of the mesh
2462 */
2463 if (batadv_bla_is_backbone_gw_orig(bat_priv, orig_node->orig))
2464 goto out;
2465
2453 if (!batadv_tt_global_add(bat_priv, orig_node, addr,2466 if (!batadv_tt_global_add(bat_priv, orig_node, addr,
2454 BATADV_TT_CLIENT_TEMP,2467 BATADV_TT_CLIENT_TEMP,
2455 atomic_read(&orig_node->last_ttvn)))2468 atomic_read(&orig_node->last_ttvn)))
net/bluetooth/hci_core.c+2−2
@@ -1754,11 +1754,11 @@ int hci_register_dev(struct hci_dev *hdev) · 1753 unmodified lines
1754 if (hdev->dev_type != HCI_AMP)1754 if (hdev->dev_type != HCI_AMP)
1755 set_bit(HCI_AUTO_OFF, &hdev->dev_flags);1755 set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
1756 1756
1757 schedule_work(&hdev->power_on);
1758
1759 hci_notify(hdev, HCI_DEV_REG);1757 hci_notify(hdev, HCI_DEV_REG);
1760 hci_dev_hold(hdev);1758 hci_dev_hold(hdev);
1761 1759
1760 schedule_work(&hdev->power_on);
1761
1762 return id;1762 return id;
1763 1763
1764err_wqueue:1764err_wqueue:
net/bluetooth/mgmt.c+7−5
@@ -326,7 +326,7 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data, · 325 unmodified lines
326 struct hci_dev *d;326 struct hci_dev *d;
327 size_t rp_len;327 size_t rp_len;
328 u16 count;328 u16 count;
329 int i, err;329 int err;
330 330
331 BT_DBG("sock %p", sk);331 BT_DBG("sock %p", sk);
332 332
@@ -347,9 +347,7 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data, · 14 unmodified lines
347 return -ENOMEM;347 return -ENOMEM;
348 }348 }
349 349
350 rp->num_controllers = cpu_to_le16(count);350 count = 0;
351
352 i = 0;
353 list_for_each_entry(d, &hci_dev_list, list) {351 list_for_each_entry(d, &hci_dev_list, list) {
354 if (test_bit(HCI_SETUP, &d->dev_flags))352 if (test_bit(HCI_SETUP, &d->dev_flags))
355 continue;353 continue;
@@ -357,10 +355,13 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data, · 1 unmodified line
357 if (!mgmt_valid_hdev(d))355 if (!mgmt_valid_hdev(d))
358 continue;356 continue;
359 357
360 rp->index[i++] = cpu_to_le16(d->id);358 rp->index[count++] = cpu_to_le16(d->id);
361 BT_DBG("Added hci%u", d->id);359 BT_DBG("Added hci%u", d->id);
362 }360 }
363 361
362 rp->num_controllers = cpu_to_le16(count);
363 rp_len = sizeof(*rp) + (2 * count);
364
364 read_unlock(&hci_dev_list_lock);365 read_unlock(&hci_dev_list_lock);
365 366
366 err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp,367 err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp,
@@ -1366,6 +1367,7 @@ static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data, · 999 unmodified lines
1366 continue;1367 continue;
1367 1368
1368 list_del(&match->list);1369 list_del(&match->list);
1370 kfree(match);
1369 found++;1371 found++;
1370 }1372 }
1371 1373
net/bluetooth/smp.c+1−1
@@ -267,7 +267,7 @@ static void smp_failure(struct l2cap_conn *conn, u8 reason, u8 send) · 266 unmodified lines
267 267
268 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->hcon->flags);268 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->hcon->flags);
269 mgmt_auth_failed(conn->hcon->hdev, conn->dst, hcon->type,269 mgmt_auth_failed(conn->hcon->hdev, conn->dst, hcon->type,
270 hcon->dst_type, reason);270 hcon->dst_type, HCI_ERROR_AUTH_FAILURE);
271 271
272 cancel_delayed_work_sync(&conn->security_timer);272 cancel_delayed_work_sync(&conn->security_timer);
273 273
net/core/dev.c+3−1
@@ -2818,8 +2818,10 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb, · 2817 unmodified lines
2818 if (unlikely(tcpu != next_cpu) &&2818 if (unlikely(tcpu != next_cpu) &&
2819 (tcpu == RPS_NO_CPU || !cpu_online(tcpu) ||2819 (tcpu == RPS_NO_CPU || !cpu_online(tcpu) ||
2820 ((int)(per_cpu(softnet_data, tcpu).input_queue_head -2820 ((int)(per_cpu(softnet_data, tcpu).input_queue_head -
2821 rflow->last_qtail)) >= 0))2821 rflow->last_qtail)) >= 0)) {
2822 tcpu = next_cpu;
2822 rflow = set_rps_cpu(dev, skb, rflow, next_cpu);2823 rflow = set_rps_cpu(dev, skb, rflow, next_cpu);
2824 }
2823 2825
2824 if (tcpu != RPS_NO_CPU && cpu_online(tcpu)) {2826 if (tcpu != RPS_NO_CPU && cpu_online(tcpu)) {
2825 *rflowp = rflow;2827 *rflowp = rflow;
net/core/dev_addr_lists.c+2−1
@@ -319,7 +319,8 @@ int dev_addr_del(struct net_device *dev, const unsigned char *addr, · 318 unmodified lines
319 */319 */
320 ha = list_first_entry(&dev->dev_addrs.list,320 ha = list_first_entry(&dev->dev_addrs.list,
321 struct netdev_hw_addr, list);321 struct netdev_hw_addr, list);
322 if (ha->addr == dev->dev_addr && ha->refcount == 1)322 if (!memcmp(ha->addr, addr, dev->addr_len) &&
323 ha->type == addr_type && ha->refcount == 1)
323 return -ENOENT;324 return -ENOENT;
324 325
325 err = __hw_addr_del(&dev->dev_addrs, addr, dev->addr_len,326 err = __hw_addr_del(&dev->dev_addrs, addr, dev->addr_len,
net/ipv4/ip_sockglue.c+22−13
@@ -457,19 +457,28 @@ static int do_ip_setsockopt(struct sock *sk, int level, · 456 unmodified lines
457 struct inet_sock *inet = inet_sk(sk);457 struct inet_sock *inet = inet_sk(sk);
458 int val = 0, err;458 int val = 0, err;
459 459
460 if (((1<<optname) & ((1<<IP_PKTINFO) | (1<<IP_RECVTTL) |460 switch (optname) {
461 (1<<IP_RECVOPTS) | (1<<IP_RECVTOS) |461 case IP_PKTINFO:
462 (1<<IP_RETOPTS) | (1<<IP_TOS) |462 case IP_RECVTTL:
463 (1<<IP_TTL) | (1<<IP_HDRINCL) |463 case IP_RECVOPTS:
464 (1<<IP_MTU_DISCOVER) | (1<<IP_RECVERR) |464 case IP_RECVTOS:
465 (1<<IP_ROUTER_ALERT) | (1<<IP_FREEBIND) |465 case IP_RETOPTS:
466 (1<<IP_PASSSEC) | (1<<IP_TRANSPARENT) |466 case IP_TOS:
467 (1<<IP_MINTTL) | (1<<IP_NODEFRAG))) ||467 case IP_TTL:
468 optname == IP_UNICAST_IF ||468 case IP_HDRINCL:
469 optname == IP_MULTICAST_TTL ||469 case IP_MTU_DISCOVER:
470 optname == IP_MULTICAST_ALL ||470 case IP_RECVERR:
471 optname == IP_MULTICAST_LOOP ||471 case IP_ROUTER_ALERT:
472 optname == IP_RECVORIGDSTADDR) {472 case IP_FREEBIND:
473 case IP_PASSSEC:
474 case IP_TRANSPARENT:
475 case IP_MINTTL:
476 case IP_NODEFRAG:
477 case IP_UNICAST_IF:
478 case IP_MULTICAST_TTL:
479 case IP_MULTICAST_ALL:
480 case IP_MULTICAST_LOOP:
481 case IP_RECVORIGDSTADDR:
473 if (optlen >= sizeof(int)) {482 if (optlen >= sizeof(int)) {
474 if (get_user(val, (int __user *) optval))483 if (get_user(val, (int __user *) optval))
475 return -EFAULT;484 return -EFAULT;
net/ipv4/ip_vti.c+5−0
@@ -338,12 +338,17 @@ static int vti_rcv(struct sk_buff *skb) · 337 unmodified lines
338 if (tunnel != NULL) {338 if (tunnel != NULL) {
339 struct pcpu_tstats *tstats;339 struct pcpu_tstats *tstats;
340 340
341 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
342 return -1;
343
341 tstats = this_cpu_ptr(tunnel->dev->tstats);344 tstats = this_cpu_ptr(tunnel->dev->tstats);
342 u64_stats_update_begin(&tstats->syncp);345 u64_stats_update_begin(&tstats->syncp);
343 tstats->rx_packets++;346 tstats->rx_packets++;
344 tstats->rx_bytes += skb->len;347 tstats->rx_bytes += skb->len;
345 u64_stats_update_end(&tstats->syncp);348 u64_stats_update_end(&tstats->syncp);
346 349
350 skb->mark = 0;
351 secpath_reset(skb);
347 skb->dev = tunnel->dev;352 skb->dev = tunnel->dev;
348 return 1;353 return 1;
349 }354 }
net/ipv4/tcp.c+2−2
@@ -1212,7 +1212,7 @@ new_segment: · 1211 unmodified lines
1212wait_for_sndbuf:1212wait_for_sndbuf:
1213 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);1213 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
1214wait_for_memory:1214wait_for_memory:
1215 if (copied && likely(!tp->repair))1215 if (copied)
1216 tcp_push(sk, flags & ~MSG_MORE, mss_now, TCP_NAGLE_PUSH);1216 tcp_push(sk, flags & ~MSG_MORE, mss_now, TCP_NAGLE_PUSH);
1217 1217
1218 if ((err = sk_stream_wait_memory(sk, &timeo)) != 0)1218 if ((err = sk_stream_wait_memory(sk, &timeo)) != 0)
@@ -1223,7 +1223,7 @@ wait_for_memory: · 4 unmodified lines
1223 }1223 }
1224 1224
1225out:1225out:
1226 if (copied && likely(!tp->repair))1226 if (copied)
1227 tcp_push(sk, flags, mss_now, tp->nonagle);1227 tcp_push(sk, flags, mss_now, tp->nonagle);
1228 release_sock(sk);1228 release_sock(sk);
1229 return copied + copied_syn;1229 return copied + copied_syn;
net/ipv4/tcp_input.c+10−5
@@ -5313,11 +5313,6 @@ static bool tcp_validate_incoming(struct sock *sk, struct sk_buff *skb, · 5312 unmodified lines
5313 goto discard;5313 goto discard;
5314 }5314 }
5315 5315
5316 /* ts_recent update must be made after we are sure that the packet
5317 * is in window.
5318 */
5319 tcp_replace_ts_recent(tp, TCP_SKB_CB(skb)->seq);
5320
5321 /* step 3: check security and precedence [ignored] */5316 /* step 3: check security and precedence [ignored] */
5322 5317
5323 /* step 4: Check for a SYN5318 /* step 4: Check for a SYN
@@ -5552,6 +5547,11 @@ step5: · 228 unmodified lines
5552 if (th->ack && tcp_ack(sk, skb, FLAG_SLOWPATH) < 0)5547 if (th->ack && tcp_ack(sk, skb, FLAG_SLOWPATH) < 0)
5553 goto discard;5548 goto discard;
5554 5549
5550 /* ts_recent update must be made after we are sure that the packet
5551 * is in window.
5552 */
5553 tcp_replace_ts_recent(tp, TCP_SKB_CB(skb)->seq);
5554
5555 tcp_rcv_rtt_measure_ts(sk, skb);5555 tcp_rcv_rtt_measure_ts(sk, skb);
5556 5556
5557 /* Process urgent data. */5557 /* Process urgent data. */
@@ -6130,6 +6130,11 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, · 572 unmodified lines
6130 } else6130 } else
6131 goto discard;6131 goto discard;
6132 6132
6133 /* ts_recent update must be made after we are sure that the packet
6134 * is in window.
6135 */
6136 tcp_replace_ts_recent(tp, TCP_SKB_CB(skb)->seq);
6137
6133 /* step 6: check the URG bit */6138 /* step 6: check the URG bit */
6134 tcp_urg(sk, skb, th);6139 tcp_urg(sk, skb, th);
6135 6140
net/ipv4/tcp_metrics.c+9−3
@@ -1,7 +1,6 @@
1#include <linux/rcupdate.h>1#include <linux/rcupdate.h>
2#include <linux/spinlock.h>2#include <linux/spinlock.h>
3#include <linux/jiffies.h>3#include <linux/jiffies.h>
4#include <linux/bootmem.h>
5#include <linux/module.h>4#include <linux/module.h>
6#include <linux/cache.h>5#include <linux/cache.h>
7#include <linux/slab.h>6#include <linux/slab.h>
@@ -9,6 +8,7 @@ · 1 unmodified line
9#include <linux/tcp.h>8#include <linux/tcp.h>
10#include <linux/hash.h>9#include <linux/hash.h>
11#include <linux/tcp_metrics.h>10#include <linux/tcp_metrics.h>
11#include <linux/vmalloc.h>
12 12
13#include <net/inet_connection_sock.h>13#include <net/inet_connection_sock.h>
14#include <net/net_namespace.h>14#include <net/net_namespace.h>
@@ -1034,7 +1034,10 @@ static int __net_init tcp_net_metrics_init(struct net *net) · 1019 unmodified lines
1034 net->ipv4.tcp_metrics_hash_log = order_base_2(slots);1034 net->ipv4.tcp_metrics_hash_log = order_base_2(slots);
1035 size = sizeof(struct tcpm_hash_bucket) << net->ipv4.tcp_metrics_hash_log;1035 size = sizeof(struct tcpm_hash_bucket) << net->ipv4.tcp_metrics_hash_log;
1036 1036
1037 net->ipv4.tcp_metrics_hash = kzalloc(size, GFP_KERNEL);1037 net->ipv4.tcp_metrics_hash = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
1038 if (!net->ipv4.tcp_metrics_hash)
1039 net->ipv4.tcp_metrics_hash = vzalloc(size);
1040
1038 if (!net->ipv4.tcp_metrics_hash)1041 if (!net->ipv4.tcp_metrics_hash)
1039 return -ENOMEM;1042 return -ENOMEM;
1040 1043
@@ -1055,7 +1058,10 @@ static void __net_exit tcp_net_metrics_exit(struct net *net) · 14 unmodified lines
1055 tm = next;1058 tm = next;
1056 }1059 }
1057 }1060 }
1058 kfree(net->ipv4.tcp_metrics_hash);1061 if (is_vmalloc_addr(net->ipv4.tcp_metrics_hash))
1062 vfree(net->ipv4.tcp_metrics_hash);
1063 else
1064 kfree(net->ipv4.tcp_metrics_hash);
1059}1065}
1060 1066
1061static __net_initdata struct pernet_operations tcp_net_metrics_ops = {1067static __net_initdata struct pernet_operations tcp_net_metrics_ops = {
net/ipv4/tcp_output.c+4−0
@@ -1986,6 +1986,9 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle, · 1985 unmodified lines
1986 tso_segs = tcp_init_tso_segs(sk, skb, mss_now);1986 tso_segs = tcp_init_tso_segs(sk, skb, mss_now);
1987 BUG_ON(!tso_segs);1987 BUG_ON(!tso_segs);
1988 1988
1989 if (unlikely(tp->repair) && tp->repair_queue == TCP_SEND_QUEUE)
1990 goto repair; /* Skip network transmission */
1991
1989 cwnd_quota = tcp_cwnd_test(tp, skb);1992 cwnd_quota = tcp_cwnd_test(tp, skb);
1990 if (!cwnd_quota)1993 if (!cwnd_quota)
1991 break;1994 break;
@@ -2026,6 +2029,7 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle, · 34 unmodified lines
2026 if (unlikely(tcp_transmit_skb(sk, skb, 1, gfp)))2029 if (unlikely(tcp_transmit_skb(sk, skb, 1, gfp)))
2027 break;2030 break;
2028 2031
2032repair:
2029 /* Advance the send_head. This one is sent out.2033 /* Advance the send_head. This one is sent out.
2030 * This call will increment packets_out.2034 * This call will increment packets_out.
2031 */2035 */
net/ipv6/ipv6_sockglue.c+1−0
@@ -827,6 +827,7 @@ pref_skip_coa: · 826 unmodified lines
827 if (val < 0 || val > 255)827 if (val < 0 || val > 255)
828 goto e_inval;828 goto e_inval;
829 np->min_hopcount = val;829 np->min_hopcount = val;
830 retv = 0;
830 break;831 break;
831 case IPV6_DONTFRAG:832 case IPV6_DONTFRAG:
832 np->dontfrag = valbool;833 np->dontfrag = valbool;
net/mac80211/cfg.c+3−0
@@ -2594,6 +2594,9 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy, · 2593 unmodified lines
2594 else2594 else
2595 local->probe_req_reg--;2595 local->probe_req_reg--;
2596 2596
2597 if (!local->open_count)
2598 break;
2599
2597 ieee80211_queue_work(&local->hw, &local->reconfig_filter);2600 ieee80211_queue_work(&local->hw, &local->reconfig_filter);
2598 break;2601 break;
2599 default:2602 default:
net/mac80211/ieee80211_i.h+2−0
@@ -1314,6 +1314,8 @@ netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb, · 1313 unmodified lines
1314 struct net_device *dev);1314 struct net_device *dev);
1315netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,1315netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
1316 struct net_device *dev);1316 struct net_device *dev);
1317void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
1318 struct sk_buff_head *skbs);
1317 1319
1318/* HT */1320/* HT */
1319void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,1321void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
net/mac80211/main.c+4−2
@@ -871,8 +871,10 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 870 unmodified lines
871 local->hw.wiphy->cipher_suites,871 local->hw.wiphy->cipher_suites,
872 sizeof(u32) * local->hw.wiphy->n_cipher_suites,872 sizeof(u32) * local->hw.wiphy->n_cipher_suites,
873 GFP_KERNEL);873 GFP_KERNEL);
874 if (!suites)874 if (!suites) {
875 return -ENOMEM;875 result = -ENOMEM;
876 goto fail_wiphy_register;
877 }
876 for (r = 0; r < local->hw.wiphy->n_cipher_suites; r++) {878 for (r = 0; r < local->hw.wiphy->n_cipher_suites; r++) {
877 u32 suite = local->hw.wiphy->cipher_suites[r];879 u32 suite = local->hw.wiphy->cipher_suites[r];
878 if (suite == WLAN_CIPHER_SUITE_WEP40 ||880 if (suite == WLAN_CIPHER_SUITE_WEP40 ||
net/mac80211/scan.c+1−1
@@ -917,7 +917,7 @@ int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata, · 916 unmodified lines
917 struct cfg80211_sched_scan_request *req)917 struct cfg80211_sched_scan_request *req)
918{918{
919 struct ieee80211_local *local = sdata->local;919 struct ieee80211_local *local = sdata->local;
920 struct ieee80211_sched_scan_ies sched_scan_ies;920 struct ieee80211_sched_scan_ies sched_scan_ies = {};
921 int ret, i;921 int ret, i;
922 922
923 mutex_lock(&local->mtx);923 mutex_lock(&local->mtx);
net/mac80211/sta_info.c+8−3
@@ -117,8 +117,8 @@ static void free_sta_work(struct work_struct *wk) · 116 unmodified lines
117 117
118 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {118 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
119 local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);119 local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
120 __skb_queue_purge(&sta->ps_tx_buf[ac]);120 ieee80211_purge_tx_queue(&local->hw, &sta->ps_tx_buf[ac]);
121 __skb_queue_purge(&sta->tx_filtered[ac]);121 ieee80211_purge_tx_queue(&local->hw, &sta->tx_filtered[ac]);
122 }122 }
123 123
124#ifdef CONFIG_MAC80211_MESH124#ifdef CONFIG_MAC80211_MESH
@@ -141,7 +141,7 @@ static void free_sta_work(struct work_struct *wk) · 16 unmodified lines
141 tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);141 tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);
142 if (!tid_tx)142 if (!tid_tx)
143 continue;143 continue;
144 __skb_queue_purge(&tid_tx->pending);144 ieee80211_purge_tx_queue(&local->hw, &tid_tx->pending);
145 kfree(tid_tx);145 kfree(tid_tx);
146 }146 }
147 147
@@ -961,6 +961,7 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) · 813 unmodified lines
961 struct ieee80211_local *local = sdata->local;961 struct ieee80211_local *local = sdata->local;
962 struct sk_buff_head pending;962 struct sk_buff_head pending;
963 int filtered = 0, buffered = 0, ac;963 int filtered = 0, buffered = 0, ac;
964 unsigned long flags;
964 965
965 clear_sta_flag(sta, WLAN_STA_SP);966 clear_sta_flag(sta, WLAN_STA_SP);
966 967
@@ -976,12 +977,16 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) · 9 unmodified lines
976 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {977 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
977 int count = skb_queue_len(&pending), tmp;978 int count = skb_queue_len(&pending), tmp;
978 979
980 spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
979 skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);981 skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
982 spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
980 tmp = skb_queue_len(&pending);983 tmp = skb_queue_len(&pending);
981 filtered += tmp - count;984 filtered += tmp - count;
982 count = tmp;985 count = tmp;
983 986
987 spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
984 skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);988 skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
989 spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
985 tmp = skb_queue_len(&pending);990 tmp = skb_queue_len(&pending);
986 buffered += tmp - count;991 buffered += tmp - count;
987 }992 }
net/mac80211/status.c+9−0
@@ -668,3 +668,12 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb) · 667 unmodified lines
668 dev_kfree_skb_any(skb);668 dev_kfree_skb_any(skb);
669}669}
670EXPORT_SYMBOL(ieee80211_free_txskb);670EXPORT_SYMBOL(ieee80211_free_txskb);
671
672void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
673 struct sk_buff_head *skbs)
674{
675 struct sk_buff *skb;
676
677 while ((skb = __skb_dequeue(skbs)))
678 ieee80211_free_txskb(hw, skb);
679}
net/mac80211/tx.c+6−3
@@ -1358,7 +1358,7 @@ static int invoke_tx_handlers(struct ieee80211_tx_data *tx) · 1357 unmodified lines
1358 if (tx->skb)1358 if (tx->skb)
1359 ieee80211_free_txskb(&tx->local->hw, tx->skb);1359 ieee80211_free_txskb(&tx->local->hw, tx->skb);
1360 else1360 else
1361 __skb_queue_purge(&tx->skbs);1361 ieee80211_purge_tx_queue(&tx->local->hw, &tx->skbs);
1362 return -1;1362 return -1;
1363 } else if (unlikely(res == TX_QUEUED)) {1363 } else if (unlikely(res == TX_QUEUED)) {
1364 I802_DEBUG_INC(tx->local->tx_handlers_queued);1364 I802_DEBUG_INC(tx->local->tx_handlers_queued);
@@ -2120,10 +2120,13 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, · 755 unmodified lines
2120 */2120 */
2121void ieee80211_clear_tx_pending(struct ieee80211_local *local)2121void ieee80211_clear_tx_pending(struct ieee80211_local *local)
2122{2122{
2123 struct sk_buff *skb;
2123 int i;2124 int i;
2124 2125
2125 for (i = 0; i < local->hw.queues; i++)2126 for (i = 0; i < local->hw.queues; i++) {
2126 skb_queue_purge(&local->pending[i]);2127 while ((skb = skb_dequeue(&local->pending[i])) != NULL)
2128 ieee80211_free_txskb(&local->hw, skb);
2129 }
2127}2130}
2128 2131
2129/*2132/*
net/mac80211/util.c+2−0
@@ -1491,6 +1491,8 @@ int ieee80211_reconfig(struct ieee80211_local *local) · 1490 unmodified lines
1491 list_for_each_entry(sdata, &local->interfaces, list) {1491 list_for_each_entry(sdata, &local->interfaces, list) {
1492 if (sdata->vif.type != NL80211_IFTYPE_STATION)1492 if (sdata->vif.type != NL80211_IFTYPE_STATION)
1493 continue;1493 continue;
1494 if (!sdata->u.mgd.associated)
1495 continue;
1494 1496
1495 ieee80211_send_nullfunc(local, sdata, 0);1497 ieee80211_send_nullfunc(local, sdata, 0);
1496 }1498 }
net/sctp/proc.c+4−4
@@ -102,7 +102,7 @@ static const struct file_operations sctp_snmp_seq_fops = { · 101 unmodified lines
102 .open = sctp_snmp_seq_open,102 .open = sctp_snmp_seq_open,
103 .read = seq_read,103 .read = seq_read,
104 .llseek = seq_lseek,104 .llseek = seq_lseek,
105 .release = single_release,105 .release = single_release_net,
106};106};
107 107
108/* Set up the proc fs entry for 'snmp' object. */108/* Set up the proc fs entry for 'snmp' object. */
@@ -251,7 +251,7 @@ static const struct file_operations sctp_eps_seq_fops = { · 142 unmodified lines
251 .open = sctp_eps_seq_open,251 .open = sctp_eps_seq_open,
252 .read = seq_read,252 .read = seq_read,
253 .llseek = seq_lseek,253 .llseek = seq_lseek,
254 .release = seq_release,254 .release = seq_release_net,
255};255};
256 256
257/* Set up the proc fs entry for 'eps' object. */257/* Set up the proc fs entry for 'eps' object. */
@@ -372,7 +372,7 @@ static const struct file_operations sctp_assocs_seq_fops = { · 114 unmodified lines
372 .open = sctp_assocs_seq_open,372 .open = sctp_assocs_seq_open,
373 .read = seq_read,373 .read = seq_read,
374 .llseek = seq_lseek,374 .llseek = seq_lseek,
375 .release = seq_release,375 .release = seq_release_net,
376};376};
377 377
378/* Set up the proc fs entry for 'assocs' object. */378/* Set up the proc fs entry for 'assocs' object. */
@@ -517,7 +517,7 @@ static const struct file_operations sctp_remaddr_seq_fops = { · 138 unmodified lines
517 .open = sctp_remaddr_seq_open,517 .open = sctp_remaddr_seq_open,
518 .read = seq_read,518 .read = seq_read,
519 .llseek = seq_lseek,519 .llseek = seq_lseek,
520 .release = seq_release,520 .release = seq_release_net,
521};521};
522 522
523int __net_init sctp_remaddr_proc_init(struct net *net)523int __net_init sctp_remaddr_proc_init(struct net *net)
net/wireless/reg.c+2−3
@@ -141,9 +141,8 @@ static const struct ieee80211_regdomain world_regdom = { · 140 unmodified lines
141 .reg_rules = {141 .reg_rules = {
142 /* IEEE 802.11b/g, channels 1..11 */142 /* IEEE 802.11b/g, channels 1..11 */
143 REG_RULE(2412-10, 2462+10, 40, 6, 20, 0),143 REG_RULE(2412-10, 2462+10, 40, 6, 20, 0),
144 /* IEEE 802.11b/g, channels 12..13. No HT40144 /* IEEE 802.11b/g, channels 12..13. */
145 * channel fits here. */145 REG_RULE(2467-10, 2472+10, 40, 6, 20,
146 REG_RULE(2467-10, 2472+10, 20, 6, 20,
147 NL80211_RRF_PASSIVE_SCAN |146 NL80211_RRF_PASSIVE_SCAN |
148 NL80211_RRF_NO_IBSS),147 NL80211_RRF_NO_IBSS),
149 /* IEEE 802.11 channel 14 - Only JP enables148 /* IEEE 802.11 channel 14 - Only JP enables
scripts/kconfig/expr.h+2−3
@@ -12,7 +12,7 @@ extern "C" { · 11 unmodified lines
12 12
13#include <assert.h>13#include <assert.h>
14#include <stdio.h>14#include <stdio.h>
15#include <sys/queue.h>15#include "list.h"
16#ifndef __cplusplus16#ifndef __cplusplus
17#include <stdbool.h>17#include <stdbool.h>
18#endif18#endif
@@ -175,12 +175,11 @@ struct menu { · 156 unmodified lines
175#define MENU_ROOT 0x0002175#define MENU_ROOT 0x0002
176 176
177struct jump_key {177struct jump_key {
178 CIRCLEQ_ENTRY(jump_key) entries;178 struct list_head entries;
179 size_t offset;179 size_t offset;
180 struct menu *target;180 struct menu *target;
181 int index;181 int index;
182};182};
183CIRCLEQ_HEAD(jk_head, jump_key);
184 183
185#define JUMP_NB 9184#define JUMP_NB 9
186 185
scripts/kconfig/list.h+91−0
@@ -0,0 +1,91 @@
1#ifndef LIST_H
2#define LIST_H
3
4/*
5 * Copied from include/linux/...
6 */
7
8#undef offsetof
9#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
10
11/**
12 * container_of - cast a member of a structure out to the containing structure
13 * @ptr: the pointer to the member.
14 * @type: the type of the container struct this is embedded in.
15 * @member: the name of the member within the struct.
16 *
17 */
18#define container_of(ptr, type, member) ({ \
19 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
20 (type *)( (char *)__mptr - offsetof(type,member) );})
21
22
23struct list_head {
24 struct list_head *next, *prev;
25};
26
27
28#define LIST_HEAD_INIT(name) { &(name), &(name) }
29
30#define LIST_HEAD(name) \
31 struct list_head name = LIST_HEAD_INIT(name)
32
33/**
34 * list_entry - get the struct for this entry
35 * @ptr: the &struct list_head pointer.
36 * @type: the type of the struct this is embedded in.
37 * @member: the name of the list_struct within the struct.
38 */
39#define list_entry(ptr, type, member) \
40 container_of(ptr, type, member)
41
42/**
43 * list_for_each_entry - iterate over list of given type
44 * @pos: the type * to use as a loop cursor.
45 * @head: the head for your list.
46 * @member: the name of the list_struct within the struct.
47 */
48#define list_for_each_entry(pos, head, member) \
49 for (pos = list_entry((head)->next, typeof(*pos), member); \
50 &pos->member != (head); \
51 pos = list_entry(pos->member.next, typeof(*pos), member))
52
53/**
54 * list_empty - tests whether a list is empty
55 * @head: the list to test.
56 */
57static inline int list_empty(const struct list_head *head)
58{
59 return head->next == head;
60}
61
62/*
63 * Insert a new entry between two known consecutive entries.
64 *
65 * This is only for internal list manipulation where we know
66 * the prev/next entries already!
67 */
68static inline void __list_add(struct list_head *_new,
69 struct list_head *prev,
70 struct list_head *next)
71{
72 next->prev = _new;
73 _new->next = next;
74 _new->prev = prev;
75 prev->next = _new;
76}
77
78/**
79 * list_add_tail - add a new entry
80 * @new: new entry to be added
81 * @head: list head to add it before
82 *
83 * Insert a new entry before the specified head.
84 * This is useful for implementing queues.
85 */
86static inline void list_add_tail(struct list_head *_new, struct list_head *head)
87{
88 __list_add(_new, head->prev, head);
89}
90
91#endif
scripts/kconfig/lkc_proto.h+2−2
@@ -21,9 +21,9 @@ P(menu_get_root_menu,struct menu *,(struct menu *menu)); · 20 unmodified lines
21P(menu_get_parent_menu,struct menu *,(struct menu *menu));21P(menu_get_parent_menu,struct menu *,(struct menu *menu));
22P(menu_has_help,bool,(struct menu *menu));22P(menu_has_help,bool,(struct menu *menu));
23P(menu_get_help,const char *,(struct menu *menu));23P(menu_get_help,const char *,(struct menu *menu));
24P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct jk_head24P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct list_head
25 *head));25 *head));
26P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct jk_head26P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct list_head
27 *head));27 *head));
28P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));28P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
29 29
scripts/kconfig/mconf.c+3−3
@@ -312,7 +312,7 @@ static void set_config_filename(const char *config_filename) · 311 unmodified lines
312 312
313 313
314struct search_data {314struct search_data {
315 struct jk_head *head;315 struct list_head *head;
316 struct menu **targets;316 struct menu **targets;
317 int *keys;317 int *keys;
318};318};
@@ -323,7 +323,7 @@ static void update_text(char *buf, size_t start, size_t end, void *_data) · 4 unmodified lines
323 struct jump_key *pos;323 struct jump_key *pos;
324 int k = 0;324 int k = 0;
325 325
326 CIRCLEQ_FOREACH(pos, data->head, entries) {326 list_for_each_entry(pos, data->head, entries) {
327 if (pos->offset >= start && pos->offset < end) {327 if (pos->offset >= start && pos->offset < end) {
328 char header[4];328 char header[4];
329 329
@@ -375,7 +375,7 @@ again: · 45 unmodified lines
375 375
376 sym_arr = sym_re_search(dialog_input);376 sym_arr = sym_re_search(dialog_input);
377 do {377 do {
378 struct jk_head head = CIRCLEQ_HEAD_INITIALIZER(head);378 LIST_HEAD(head);
379 struct menu *targets[JUMP_NB];379 struct menu *targets[JUMP_NB];
380 int keys[JUMP_NB + 1], i;380 int keys[JUMP_NB + 1], i;
381 struct search_data data = {381 struct search_data data = {
scripts/kconfig/menu.c+8−6
@@ -508,7 +508,7 @@ const char *menu_get_help(struct menu *menu) · 507 unmodified lines
508}508}
509 509
510static void get_prompt_str(struct gstr *r, struct property *prop,510static void get_prompt_str(struct gstr *r, struct property *prop,
511 struct jk_head *head)511 struct list_head *head)
512{512{
513 int i, j;513 int i, j;
514 struct menu *submenu[8], *menu, *location = NULL;514 struct menu *submenu[8], *menu, *location = NULL;
@@ -544,12 +544,13 @@ static void get_prompt_str(struct gstr *r, struct property *prop, · 29 unmodified lines
544 } else544 } else
545 jump->target = location;545 jump->target = location;
546 546
547 if (CIRCLEQ_EMPTY(head))547 if (list_empty(head))
548 jump->index = 0;548 jump->index = 0;
549 else549 else
550 jump->index = CIRCLEQ_LAST(head)->index + 1;550 jump->index = list_entry(head->prev, struct jump_key,
551 entries)->index + 1;
551 552
552 CIRCLEQ_INSERT_TAIL(head, jump, entries);553 list_add_tail(&jump->entries, head);
553 }554 }
554 555
555 if (i > 0) {556 if (i > 0) {
@@ -573,7 +574,8 @@ static void get_prompt_str(struct gstr *r, struct property *prop, · 17 unmodified lines
573/*574/*
574 * head is optional and may be NULL575 * head is optional and may be NULL
575 */576 */
576void get_symbol_str(struct gstr *r, struct symbol *sym, struct jk_head *head)577void get_symbol_str(struct gstr *r, struct symbol *sym,
578 struct list_head *head)
577{579{
578 bool hit;580 bool hit;
579 struct property *prop;581 struct property *prop;
@@ -612,7 +614,7 @@ void get_symbol_str(struct gstr *r, struct symbol *sym, struct jk_head *head) · 32 unmodified lines
612 str_append(r, "\n\n");614 str_append(r, "\n\n");
613}615}
614 616
615struct gstr get_relations_str(struct symbol **sym_arr, struct jk_head *head)617struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head)
616{618{
617 struct symbol *sym;619 struct symbol *sym;
618 struct gstr res = str_new();620 struct gstr res = str_new();
security/device_cgroup.c+13−5
@@ -164,8 +164,8 @@ static void dev_exception_clean(struct dev_cgroup *dev_cgroup) · 163 unmodified lines
164 struct dev_exception_item *ex, *tmp;164 struct dev_exception_item *ex, *tmp;
165 165
166 list_for_each_entry_safe(ex, tmp, &dev_cgroup->exceptions, list) {166 list_for_each_entry_safe(ex, tmp, &dev_cgroup->exceptions, list) {
167 list_del(&ex->list);167 list_del_rcu(&ex->list);
168 kfree(ex);168 kfree_rcu(ex, rcu);
169 }169 }
170}170}
171 171
@@ -298,7 +298,7 @@ static int may_access(struct dev_cgroup *dev_cgroup, · 126 unmodified lines
298 struct dev_exception_item *ex;298 struct dev_exception_item *ex;
299 bool match = false;299 bool match = false;
300 300
301 list_for_each_entry(ex, &dev_cgroup->exceptions, list) {301 list_for_each_entry_rcu(ex, &dev_cgroup->exceptions, list) {
302 if ((refex->type & DEV_BLOCK) && !(ex->type & DEV_BLOCK))302 if ((refex->type & DEV_BLOCK) && !(ex->type & DEV_BLOCK))
303 continue;303 continue;
304 if ((refex->type & DEV_CHAR) && !(ex->type & DEV_CHAR))304 if ((refex->type & DEV_CHAR) && !(ex->type & DEV_CHAR))
@@ -352,6 +352,8 @@ static int parent_has_perm(struct dev_cgroup *childcg, · 47 unmodified lines
352 */352 */
353static inline int may_allow_all(struct dev_cgroup *parent)353static inline int may_allow_all(struct dev_cgroup *parent)
354{354{
355 if (!parent)
356 return 1;
355 return parent->behavior == DEVCG_DEFAULT_ALLOW;357 return parent->behavior == DEVCG_DEFAULT_ALLOW;
356}358}
357 359
@@ -376,11 +378,14 @@ static int devcgroup_update_access(struct dev_cgroup *devcgroup, · 18 unmodified lines
376 int count, rc;378 int count, rc;
377 struct dev_exception_item ex;379 struct dev_exception_item ex;
378 struct cgroup *p = devcgroup->css.cgroup;380 struct cgroup *p = devcgroup->css.cgroup;
379 struct dev_cgroup *parent = cgroup_to_devcgroup(p->parent);381 struct dev_cgroup *parent = NULL;
380 382
381 if (!capable(CAP_SYS_ADMIN))383 if (!capable(CAP_SYS_ADMIN))
382 return -EPERM;384 return -EPERM;
383 385
386 if (p->parent)
387 parent = cgroup_to_devcgroup(p->parent);
388
384 memset(&ex, 0, sizeof(ex));389 memset(&ex, 0, sizeof(ex));
385 b = buffer;390 b = buffer;
386 391
@@ -391,11 +396,14 @@ static int devcgroup_update_access(struct dev_cgroup *devcgroup, · 4 unmodified lines
391 if (!may_allow_all(parent))396 if (!may_allow_all(parent))
392 return -EPERM;397 return -EPERM;
393 dev_exception_clean(devcgroup);398 dev_exception_clean(devcgroup);
399 devcgroup->behavior = DEVCG_DEFAULT_ALLOW;
400 if (!parent)
401 break;
402
394 rc = dev_exceptions_copy(&devcgroup->exceptions,403 rc = dev_exceptions_copy(&devcgroup->exceptions,
395 &parent->exceptions);404 &parent->exceptions);
396 if (rc)405 if (rc)
397 return rc;406 return rc;
398 devcgroup->behavior = DEVCG_DEFAULT_ALLOW;
399 break;407 break;
400 case DEVCG_DENY:408 case DEVCG_DENY:
401 dev_exception_clean(devcgroup);409 dev_exception_clean(devcgroup);
sound/pci/es1968.c+8−3
@@ -2581,9 +2581,14 @@ static u8 snd_es1968_tea575x_get_pins(struct snd_tea575x *tea) · 2580 unmodified lines
2581 struct es1968 *chip = tea->private_data;2581 struct es1968 *chip = tea->private_data;
2582 unsigned long io = chip->io_port + GPIO_DATA;2582 unsigned long io = chip->io_port + GPIO_DATA;
2583 u16 val = inw(io);2583 u16 val = inw(io);
2584 2584 u8 ret;
2585 return (val & STR_DATA) ? TEA575X_DATA : 0 |2585
2586 (val & STR_MOST) ? TEA575X_MOST : 0;2586 ret = 0;
2587 if (val & STR_DATA)
2588 ret |= TEA575X_DATA;
2589 if (val & STR_MOST)
2590 ret |= TEA575X_MOST;
2591 return ret;
2587}2592}
2588 2593
2589static void snd_es1968_tea575x_set_direction(struct snd_tea575x *tea, bool output)2594static void snd_es1968_tea575x_set_direction(struct snd_tea575x *tea, bool output)
sound/pci/fm801.c+8−3
@@ -767,9 +767,14 @@ static u8 snd_fm801_tea575x_get_pins(struct snd_tea575x *tea) · 766 unmodified lines
767 struct fm801 *chip = tea->private_data;767 struct fm801 *chip = tea->private_data;
768 unsigned short reg = inw(FM801_REG(chip, GPIO_CTRL));768 unsigned short reg = inw(FM801_REG(chip, GPIO_CTRL));
769 struct snd_fm801_tea575x_gpio gpio = *get_tea575x_gpio(chip);769 struct snd_fm801_tea575x_gpio gpio = *get_tea575x_gpio(chip);
770 770 u8 ret;
771 return (reg & FM801_GPIO_GP(gpio.data)) ? TEA575X_DATA : 0 |771
772 (reg & FM801_GPIO_GP(gpio.most)) ? TEA575X_MOST : 0;772 ret = 0;
773 if (reg & FM801_GPIO_GP(gpio.data))
774 ret |= TEA575X_DATA;
775 if (reg & FM801_GPIO_GP(gpio.most))
776 ret |= TEA575X_MOST;
777 return ret;
773}778}
774 779
775static void snd_fm801_tea575x_set_direction(struct snd_tea575x *tea, bool output)780static void snd_fm801_tea575x_set_direction(struct snd_tea575x *tea, bool output)
sound/pci/hda/patch_realtek.c+1−0
@@ -5407,6 +5407,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { · 5406 unmodified lines
5407 SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC889_FIXUP_IMAC91_VREF),5407 SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC889_FIXUP_IMAC91_VREF),
5408 SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC889_FIXUP_IMAC91_VREF),5408 SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC889_FIXUP_IMAC91_VREF),
5409 SND_PCI_QUIRK(0x106b, 0x4200, "Mac Pro 5,1", ALC885_FIXUP_MACPRO_GPIO),5409 SND_PCI_QUIRK(0x106b, 0x4200, "Mac Pro 5,1", ALC885_FIXUP_MACPRO_GPIO),
5410 SND_PCI_QUIRK(0x106b, 0x4300, "iMac 9,1", ALC889_FIXUP_IMAC91_VREF),
5410 SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC889_FIXUP_IMAC91_VREF),5411 SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC889_FIXUP_IMAC91_VREF),
5411 SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF),5412 SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF),
5412 SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF),5413 SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF),
sound/soc/codecs/cs42l52.c+1−2
@@ -773,7 +773,6 @@ static int cs42l52_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) · 772 unmodified lines
773{773{
774 struct snd_soc_codec *codec = codec_dai->codec;774 struct snd_soc_codec *codec = codec_dai->codec;
775 struct cs42l52_private *cs42l52 = snd_soc_codec_get_drvdata(codec);775 struct cs42l52_private *cs42l52 = snd_soc_codec_get_drvdata(codec);
776 int ret = 0;
777 u8 iface = 0;776 u8 iface = 0;
778 777
779 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {778 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
@@ -822,7 +821,7 @@ static int cs42l52_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) · 42 unmodified lines
822 case SND_SOC_DAIFMT_NB_IF:821 case SND_SOC_DAIFMT_NB_IF:
823 break;822 break;
824 default:823 default:
825 ret = -EINVAL;824 return -EINVAL;
826 }825 }
827 cs42l52->config.format = iface;826 cs42l52->config.format = iface;
828 snd_soc_write(codec, CS42L52_IFACE_CTL1, cs42l52->config.format);827 snd_soc_write(codec, CS42L52_IFACE_CTL1, cs42l52->config.format);
sound/soc/codecs/wm5102.c+551−1
@@ -42,6 +42,556 @@ static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); · 41 unmodified lines
42static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);42static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
43static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);43static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
44 44
45static const struct reg_default wm5102_sysclk_reva_patch[] = {
46 { 0x3000, 0x2225 },
47 { 0x3001, 0x3a03 },
48 { 0x3002, 0x0225 },
49 { 0x3003, 0x0801 },
50 { 0x3004, 0x6249 },
51 { 0x3005, 0x0c04 },
52 { 0x3006, 0x0225 },
53 { 0x3007, 0x5901 },
54 { 0x3008, 0xe249 },
55 { 0x3009, 0x030d },
56 { 0x300a, 0x0249 },
57 { 0x300b, 0x2c01 },
58 { 0x300c, 0xe249 },
59 { 0x300d, 0x4342 },
60 { 0x300e, 0xe249 },
61 { 0x300f, 0x73c0 },
62 { 0x3010, 0x4249 },
63 { 0x3011, 0x0c00 },
64 { 0x3012, 0x0225 },
65 { 0x3013, 0x1f01 },
66 { 0x3014, 0x0225 },
67 { 0x3015, 0x1e01 },
68 { 0x3016, 0x0225 },
69 { 0x3017, 0xfa00 },
70 { 0x3018, 0x0000 },
71 { 0x3019, 0xf000 },
72 { 0x301a, 0x0000 },
73 { 0x301b, 0xf000 },
74 { 0x301c, 0x0000 },
75 { 0x301d, 0xf000 },
76 { 0x301e, 0x0000 },
77 { 0x301f, 0xf000 },
78 { 0x3020, 0x0000 },
79 { 0x3021, 0xf000 },
80 { 0x3022, 0x0000 },
81 { 0x3023, 0xf000 },
82 { 0x3024, 0x0000 },
83 { 0x3025, 0xf000 },
84 { 0x3026, 0x0000 },
85 { 0x3027, 0xf000 },
86 { 0x3028, 0x0000 },
87 { 0x3029, 0xf000 },
88 { 0x302a, 0x0000 },
89 { 0x302b, 0xf000 },
90 { 0x302c, 0x0000 },
91 { 0x302d, 0xf000 },
92 { 0x302e, 0x0000 },
93 { 0x302f, 0xf000 },
94 { 0x3030, 0x0225 },
95 { 0x3031, 0x1a01 },
96 { 0x3032, 0x0225 },
97 { 0x3033, 0x1e00 },
98 { 0x3034, 0x0225 },
99 { 0x3035, 0x1f00 },
100 { 0x3036, 0x6225 },
101 { 0x3037, 0xf800 },
102 { 0x3038, 0x0000 },
103 { 0x3039, 0xf000 },
104 { 0x303a, 0x0000 },
105 { 0x303b, 0xf000 },
106 { 0x303c, 0x0000 },
107 { 0x303d, 0xf000 },
108 { 0x303e, 0x0000 },
109 { 0x303f, 0xf000 },
110 { 0x3040, 0x2226 },
111 { 0x3041, 0x3a03 },
112 { 0x3042, 0x0226 },
113 { 0x3043, 0x0801 },
114 { 0x3044, 0x6249 },
115 { 0x3045, 0x0c06 },
116 { 0x3046, 0x0226 },
117 { 0x3047, 0x5901 },
118 { 0x3048, 0xe249 },
119 { 0x3049, 0x030d },
120 { 0x304a, 0x0249 },
121 { 0x304b, 0x2c01 },
122 { 0x304c, 0xe249 },
123 { 0x304d, 0x4342 },
124 { 0x304e, 0xe249 },
125 { 0x304f, 0x73c0 },
126 { 0x3050, 0x4249 },
127 { 0x3051, 0x0c00 },
128 { 0x3052, 0x0226 },
129 { 0x3053, 0x1f01 },
130 { 0x3054, 0x0226 },
131 { 0x3055, 0x1e01 },
132 { 0x3056, 0x0226 },
133 { 0x3057, 0xfa00 },
134 { 0x3058, 0x0000 },
135 { 0x3059, 0xf000 },
136 { 0x305a, 0x0000 },
137 { 0x305b, 0xf000 },
138 { 0x305c, 0x0000 },
139 { 0x305d, 0xf000 },
140 { 0x305e, 0x0000 },
141 { 0x305f, 0xf000 },
142 { 0x3060, 0x0000 },
143 { 0x3061, 0xf000 },
144 { 0x3062, 0x0000 },
145 { 0x3063, 0xf000 },
146 { 0x3064, 0x0000 },
147 { 0x3065, 0xf000 },
148 { 0x3066, 0x0000 },
149 { 0x3067, 0xf000 },
150 { 0x3068, 0x0000 },
151 { 0x3069, 0xf000 },
152 { 0x306a, 0x0000 },
153 { 0x306b, 0xf000 },
154 { 0x306c, 0x0000 },
155 { 0x306d, 0xf000 },
156 { 0x306e, 0x0000 },
157 { 0x306f, 0xf000 },
158 { 0x3070, 0x0226 },
159 { 0x3071, 0x1a01 },
160 { 0x3072, 0x0226 },
161 { 0x3073, 0x1e00 },
162 { 0x3074, 0x0226 },
163 { 0x3075, 0x1f00 },
164 { 0x3076, 0x6226 },
165 { 0x3077, 0xf800 },
166 { 0x3078, 0x0000 },
167 { 0x3079, 0xf000 },
168 { 0x307a, 0x0000 },
169 { 0x307b, 0xf000 },
170 { 0x307c, 0x0000 },
171 { 0x307d, 0xf000 },
172 { 0x307e, 0x0000 },
173 { 0x307f, 0xf000 },
174 { 0x3080, 0x2227 },
175 { 0x3081, 0x3a03 },
176 { 0x3082, 0x0227 },
177 { 0x3083, 0x0801 },
178 { 0x3084, 0x6255 },
179 { 0x3085, 0x0c04 },
180 { 0x3086, 0x0227 },
181 { 0x3087, 0x5901 },
182 { 0x3088, 0xe255 },
183 { 0x3089, 0x030d },
184 { 0x308a, 0x0255 },
185 { 0x308b, 0x2c01 },
186 { 0x308c, 0xe255 },
187 { 0x308d, 0x4342 },
188 { 0x308e, 0xe255 },
189 { 0x308f, 0x73c0 },
190 { 0x3090, 0x4255 },
191 { 0x3091, 0x0c00 },
192 { 0x3092, 0x0227 },
193 { 0x3093, 0x1f01 },
194 { 0x3094, 0x0227 },
195 { 0x3095, 0x1e01 },
196 { 0x3096, 0x0227 },
197 { 0x3097, 0xfa00 },
198 { 0x3098, 0x0000 },
199 { 0x3099, 0xf000 },
200 { 0x309a, 0x0000 },
201 { 0x309b, 0xf000 },
202 { 0x309c, 0x0000 },
203 { 0x309d, 0xf000 },
204 { 0x309e, 0x0000 },
205 { 0x309f, 0xf000 },
206 { 0x30a0, 0x0000 },
207 { 0x30a1, 0xf000 },
208 { 0x30a2, 0x0000 },
209 { 0x30a3, 0xf000 },
210 { 0x30a4, 0x0000 },
211 { 0x30a5, 0xf000 },
212 { 0x30a6, 0x0000 },
213 { 0x30a7, 0xf000 },
214 { 0x30a8, 0x0000 },
215 { 0x30a9, 0xf000 },
216 { 0x30aa, 0x0000 },
217 { 0x30ab, 0xf000 },
218 { 0x30ac, 0x0000 },
219 { 0x30ad, 0xf000 },
220 { 0x30ae, 0x0000 },
221 { 0x30af, 0xf000 },
222 { 0x30b0, 0x0227 },
223 { 0x30b1, 0x1a01 },
224 { 0x30b2, 0x0227 },
225 { 0x30b3, 0x1e00 },
226 { 0x30b4, 0x0227 },
227 { 0x30b5, 0x1f00 },
228 { 0x30b6, 0x6227 },
229 { 0x30b7, 0xf800 },
230 { 0x30b8, 0x0000 },
231 { 0x30b9, 0xf000 },
232 { 0x30ba, 0x0000 },
233 { 0x30bb, 0xf000 },
234 { 0x30bc, 0x0000 },
235 { 0x30bd, 0xf000 },
236 { 0x30be, 0x0000 },
237 { 0x30bf, 0xf000 },
238 { 0x30c0, 0x2228 },
239 { 0x30c1, 0x3a03 },
240 { 0x30c2, 0x0228 },
241 { 0x30c3, 0x0801 },
242 { 0x30c4, 0x6255 },
243 { 0x30c5, 0x0c06 },
244 { 0x30c6, 0x0228 },
245 { 0x30c7, 0x5901 },
246 { 0x30c8, 0xe255 },
247 { 0x30c9, 0x030d },
248 { 0x30ca, 0x0255 },
249 { 0x30cb, 0x2c01 },
250 { 0x30cc, 0xe255 },
251 { 0x30cd, 0x4342 },
252 { 0x30ce, 0xe255 },
253 { 0x30cf, 0x73c0 },
254 { 0x30d0, 0x4255 },
255 { 0x30d1, 0x0c00 },
256 { 0x30d2, 0x0228 },
257 { 0x30d3, 0x1f01 },
258 { 0x30d4, 0x0228 },
259 { 0x30d5, 0x1e01 },
260 { 0x30d6, 0x0228 },
261 { 0x30d7, 0xfa00 },
262 { 0x30d8, 0x0000 },
263 { 0x30d9, 0xf000 },
264 { 0x30da, 0x0000 },
265 { 0x30db, 0xf000 },
266 { 0x30dc, 0x0000 },
267 { 0x30dd, 0xf000 },
268 { 0x30de, 0x0000 },
269 { 0x30df, 0xf000 },
270 { 0x30e0, 0x0000 },
271 { 0x30e1, 0xf000 },
272 { 0x30e2, 0x0000 },
273 { 0x30e3, 0xf000 },
274 { 0x30e4, 0x0000 },
275 { 0x30e5, 0xf000 },
276 { 0x30e6, 0x0000 },
277 { 0x30e7, 0xf000 },
278 { 0x30e8, 0x0000 },
279 { 0x30e9, 0xf000 },
280 { 0x30ea, 0x0000 },
281 { 0x30eb, 0xf000 },
282 { 0x30ec, 0x0000 },
283 { 0x30ed, 0xf000 },
284 { 0x30ee, 0x0000 },
285 { 0x30ef, 0xf000 },
286 { 0x30f0, 0x0228 },
287 { 0x30f1, 0x1a01 },
288 { 0x30f2, 0x0228 },
289 { 0x30f3, 0x1e00 },
290 { 0x30f4, 0x0228 },
291 { 0x30f5, 0x1f00 },
292 { 0x30f6, 0x6228 },
293 { 0x30f7, 0xf800 },
294 { 0x30f8, 0x0000 },
295 { 0x30f9, 0xf000 },
296 { 0x30fa, 0x0000 },
297 { 0x30fb, 0xf000 },
298 { 0x30fc, 0x0000 },
299 { 0x30fd, 0xf000 },
300 { 0x30fe, 0x0000 },
301 { 0x30ff, 0xf000 },
302 { 0x3100, 0x222b },
303 { 0x3101, 0x3a03 },
304 { 0x3102, 0x222b },
305 { 0x3103, 0x5803 },
306 { 0x3104, 0xe26f },
307 { 0x3105, 0x030d },
308 { 0x3106, 0x626f },
309 { 0x3107, 0x2c01 },
310 { 0x3108, 0xe26f },
311 { 0x3109, 0x4342 },
312 { 0x310a, 0xe26f },
313 { 0x310b, 0x73c0 },
314 { 0x310c, 0x026f },
315 { 0x310d, 0x0c00 },
316 { 0x310e, 0x022b },
317 { 0x310f, 0x1f01 },
318 { 0x3110, 0x022b },
319 { 0x3111, 0x1e01 },
320 { 0x3112, 0x022b },
321 { 0x3113, 0xfa00 },
322 { 0x3114, 0x0000 },
323 { 0x3115, 0xf000 },
324 { 0x3116, 0x0000 },
325 { 0x3117, 0xf000 },
326 { 0x3118, 0x0000 },
327 { 0x3119, 0xf000 },
328 { 0x311a, 0x0000 },
329 { 0x311b, 0xf000 },
330 { 0x311c, 0x0000 },
331 { 0x311d, 0xf000 },
332 { 0x311e, 0x0000 },
333 { 0x311f, 0xf000 },
334 { 0x3120, 0x022b },
335 { 0x3121, 0x0a01 },
336 { 0x3122, 0x022b },
337 { 0x3123, 0x1e00 },
338 { 0x3124, 0x022b },
339 { 0x3125, 0x1f00 },
340 { 0x3126, 0x622b },
341 { 0x3127, 0xf800 },
342 { 0x3128, 0x0000 },
343 { 0x3129, 0xf000 },
344 { 0x312a, 0x0000 },
345 { 0x312b, 0xf000 },
346 { 0x312c, 0x0000 },
347 { 0x312d, 0xf000 },
348 { 0x312e, 0x0000 },
349 { 0x312f, 0xf000 },
350 { 0x3130, 0x0000 },
351 { 0x3131, 0xf000 },
352 { 0x3132, 0x0000 },
353 { 0x3133, 0xf000 },
354 { 0x3134, 0x0000 },
355 { 0x3135, 0xf000 },
356 { 0x3136, 0x0000 },
357 { 0x3137, 0xf000 },
358 { 0x3138, 0x0000 },
359 { 0x3139, 0xf000 },
360 { 0x313a, 0x0000 },
361 { 0x313b, 0xf000 },
362 { 0x313c, 0x0000 },
363 { 0x313d, 0xf000 },
364 { 0x313e, 0x0000 },
365 { 0x313f, 0xf000 },
366 { 0x3140, 0x0000 },
367 { 0x3141, 0xf000 },
368 { 0x3142, 0x0000 },
369 { 0x3143, 0xf000 },
370 { 0x3144, 0x0000 },
371 { 0x3145, 0xf000 },
372 { 0x3146, 0x0000 },
373 { 0x3147, 0xf000 },
374 { 0x3148, 0x0000 },
375 { 0x3149, 0xf000 },
376 { 0x314a, 0x0000 },
377 { 0x314b, 0xf000 },
378 { 0x314c, 0x0000 },
379 { 0x314d, 0xf000 },
380 { 0x314e, 0x0000 },
381 { 0x314f, 0xf000 },
382 { 0x3150, 0x0000 },
383 { 0x3151, 0xf000 },
384 { 0x3152, 0x0000 },
385 { 0x3153, 0xf000 },
386 { 0x3154, 0x0000 },
387 { 0x3155, 0xf000 },
388 { 0x3156, 0x0000 },
389 { 0x3157, 0xf000 },
390 { 0x3158, 0x0000 },
391 { 0x3159, 0xf000 },
392 { 0x315a, 0x0000 },
393 { 0x315b, 0xf000 },
394 { 0x315c, 0x0000 },
395 { 0x315d, 0xf000 },
396 { 0x315e, 0x0000 },
397 { 0x315f, 0xf000 },
398 { 0x3160, 0x0000 },
399 { 0x3161, 0xf000 },
400 { 0x3162, 0x0000 },
401 { 0x3163, 0xf000 },
402 { 0x3164, 0x0000 },
403 { 0x3165, 0xf000 },
404 { 0x3166, 0x0000 },
405 { 0x3167, 0xf000 },
406 { 0x3168, 0x0000 },
407 { 0x3169, 0xf000 },
408 { 0x316a, 0x0000 },
409 { 0x316b, 0xf000 },
410 { 0x316c, 0x0000 },
411 { 0x316d, 0xf000 },
412 { 0x316e, 0x0000 },
413 { 0x316f, 0xf000 },
414 { 0x3170, 0x0000 },
415 { 0x3171, 0xf000 },
416 { 0x3172, 0x0000 },
417 { 0x3173, 0xf000 },
418 { 0x3174, 0x0000 },
419 { 0x3175, 0xf000 },
420 { 0x3176, 0x0000 },
421 { 0x3177, 0xf000 },
422 { 0x3178, 0x0000 },
423 { 0x3179, 0xf000 },
424 { 0x317a, 0x0000 },
425 { 0x317b, 0xf000 },
426 { 0x317c, 0x0000 },
427 { 0x317d, 0xf000 },
428 { 0x317e, 0x0000 },
429 { 0x317f, 0xf000 },
430 { 0x3180, 0x2001 },
431 { 0x3181, 0xf101 },
432 { 0x3182, 0x0000 },
433 { 0x3183, 0xf000 },
434 { 0x3184, 0x0000 },
435 { 0x3185, 0xf000 },
436 { 0x3186, 0x0000 },
437 { 0x3187, 0xf000 },
438 { 0x3188, 0x0000 },
439 { 0x3189, 0xf000 },
440 { 0x318a, 0x0000 },
441 { 0x318b, 0xf000 },
442 { 0x318c, 0x0000 },
443 { 0x318d, 0xf000 },
444 { 0x318e, 0x0000 },
445 { 0x318f, 0xf000 },
446 { 0x3190, 0x0000 },
447 { 0x3191, 0xf000 },
448 { 0x3192, 0x0000 },
449 { 0x3193, 0xf000 },
450 { 0x3194, 0x0000 },
451 { 0x3195, 0xf000 },
452 { 0x3196, 0x0000 },
453 { 0x3197, 0xf000 },
454 { 0x3198, 0x0000 },
455 { 0x3199, 0xf000 },
456 { 0x319a, 0x0000 },
457 { 0x319b, 0xf000 },
458 { 0x319c, 0x0000 },
459 { 0x319d, 0xf000 },
460 { 0x319e, 0x0000 },
461 { 0x319f, 0xf000 },
462 { 0x31a0, 0x0000 },
463 { 0x31a1, 0xf000 },
464 { 0x31a2, 0x0000 },
465 { 0x31a3, 0xf000 },
466 { 0x31a4, 0x0000 },
467 { 0x31a5, 0xf000 },
468 { 0x31a6, 0x0000 },
469 { 0x31a7, 0xf000 },
470 { 0x31a8, 0x0000 },
471 { 0x31a9, 0xf000 },
472 { 0x31aa, 0x0000 },
473 { 0x31ab, 0xf000 },
474 { 0x31ac, 0x0000 },
475 { 0x31ad, 0xf000 },
476 { 0x31ae, 0x0000 },
477 { 0x31af, 0xf000 },
478 { 0x31b0, 0x0000 },
479 { 0x31b1, 0xf000 },
480 { 0x31b2, 0x0000 },
481 { 0x31b3, 0xf000 },
482 { 0x31b4, 0x0000 },
483 { 0x31b5, 0xf000 },
484 { 0x31b6, 0x0000 },
485 { 0x31b7, 0xf000 },
486 { 0x31b8, 0x0000 },
487 { 0x31b9, 0xf000 },
488 { 0x31ba, 0x0000 },
489 { 0x31bb, 0xf000 },
490 { 0x31bc, 0x0000 },
491 { 0x31bd, 0xf000 },
492 { 0x31be, 0x0000 },
493 { 0x31bf, 0xf000 },
494 { 0x31c0, 0x0000 },
495 { 0x31c1, 0xf000 },
496 { 0x31c2, 0x0000 },
497 { 0x31c3, 0xf000 },
498 { 0x31c4, 0x0000 },
499 { 0x31c5, 0xf000 },
500 { 0x31c6, 0x0000 },
501 { 0x31c7, 0xf000 },
502 { 0x31c8, 0x0000 },
503 { 0x31c9, 0xf000 },
504 { 0x31ca, 0x0000 },
505 { 0x31cb, 0xf000 },
506 { 0x31cc, 0x0000 },
507 { 0x31cd, 0xf000 },
508 { 0x31ce, 0x0000 },
509 { 0x31cf, 0xf000 },
510 { 0x31d0, 0x0000 },
511 { 0x31d1, 0xf000 },
512 { 0x31d2, 0x0000 },
513 { 0x31d3, 0xf000 },
514 { 0x31d4, 0x0000 },
515 { 0x31d5, 0xf000 },
516 { 0x31d6, 0x0000 },
517 { 0x31d7, 0xf000 },
518 { 0x31d8, 0x0000 },
519 { 0x31d9, 0xf000 },
520 { 0x31da, 0x0000 },
521 { 0x31db, 0xf000 },
522 { 0x31dc, 0x0000 },
523 { 0x31dd, 0xf000 },
524 { 0x31de, 0x0000 },
525 { 0x31df, 0xf000 },
526 { 0x31e0, 0x0000 },
527 { 0x31e1, 0xf000 },
528 { 0x31e2, 0x0000 },
529 { 0x31e3, 0xf000 },
530 { 0x31e4, 0x0000 },
531 { 0x31e5, 0xf000 },
532 { 0x31e6, 0x0000 },
533 { 0x31e7, 0xf000 },
534 { 0x31e8, 0x0000 },
535 { 0x31e9, 0xf000 },
536 { 0x31ea, 0x0000 },
537 { 0x31eb, 0xf000 },
538 { 0x31ec, 0x0000 },
539 { 0x31ed, 0xf000 },
540 { 0x31ee, 0x0000 },
541 { 0x31ef, 0xf000 },
542 { 0x31f0, 0x0000 },
543 { 0x31f1, 0xf000 },
544 { 0x31f2, 0x0000 },
545 { 0x31f3, 0xf000 },
546 { 0x31f4, 0x0000 },
547 { 0x31f5, 0xf000 },
548 { 0x31f6, 0x0000 },
549 { 0x31f7, 0xf000 },
550 { 0x31f8, 0x0000 },
551 { 0x31f9, 0xf000 },
552 { 0x31fa, 0x0000 },
553 { 0x31fb, 0xf000 },
554 { 0x31fc, 0x0000 },
555 { 0x31fd, 0xf000 },
556 { 0x31fe, 0x0000 },
557 { 0x31ff, 0xf000 },
558 { 0x024d, 0xff50 },
559 { 0x0252, 0xff50 },
560 { 0x0259, 0x0112 },
561 { 0x025e, 0x0112 },
562};
563
564static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
565 struct snd_kcontrol *kcontrol, int event)
566{
567 struct snd_soc_codec *codec = w->codec;
568 struct arizona *arizona = dev_get_drvdata(codec->dev);
569 struct regmap *regmap = codec->control_data;
570 const struct reg_default *patch = NULL;
571 int i, patch_size;
572
573 switch (arizona->rev) {
574 case 0:
575 patch = wm5102_sysclk_reva_patch;
576 patch_size = ARRAY_SIZE(wm5102_sysclk_reva_patch);
577 break;
578 }
579
580 switch (event) {
581 case SND_SOC_DAPM_POST_PMU:
582 if (patch)
583 for (i = 0; i < patch_size; i++)
584 regmap_write(regmap, patch[i].reg,
585 patch[i].def);
586 break;
587
588 default:
589 break;
590 }
591
592 return 0;
593}
594
45static const struct snd_kcontrol_new wm5102_snd_controls[] = {595static const struct snd_kcontrol_new wm5102_snd_controls[] = {
46SOC_SINGLE("IN1 High Performance Switch", ARIZONA_IN1L_CONTROL,596SOC_SINGLE("IN1 High Performance Switch", ARIZONA_IN1L_CONTROL,
47 ARIZONA_IN1_OSR_SHIFT, 1, 0),597 ARIZONA_IN1_OSR_SHIFT, 1, 0),
@@ -297,7 +847,7 @@ static const struct snd_kcontrol_new wm5102_aec_loopback_mux = · 249 unmodified lines
297 847
298static const struct snd_soc_dapm_widget wm5102_dapm_widgets[] = {848static const struct snd_soc_dapm_widget wm5102_dapm_widgets[] = {
299SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT,849SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT,
300 0, NULL, 0),850 0, wm5102_sysclk_ev, SND_SOC_DAPM_POST_PMU),
301SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1,851SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1,
302 ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0),852 ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0),
303SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK,853SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK,
sound/soc/codecs/wm8978.c+1−1
@@ -782,7 +782,7 @@ static int wm8978_hw_params(struct snd_pcm_substream *substream, · 781 unmodified lines
782 wm8978->mclk_idx = -1;782 wm8978->mclk_idx = -1;
783 f_sel = wm8978->f_mclk;783 f_sel = wm8978->f_mclk;
784 } else {784 } else {
785 if (!wm8978->f_pllout) {785 if (!wm8978->f_opclk) {
786 /* We only enter here, if OPCLK is not used */786 /* We only enter here, if OPCLK is not used */
787 int ret = wm8978_configure_pll(codec);787 int ret = wm8978_configure_pll(codec);
788 if (ret < 0)788 if (ret < 0)
sound/soc/mxs/mxs-saif.c+13−4
@@ -523,16 +523,24 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd, · 522 unmodified lines
523 523
524 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {524 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
525 /*525 /*
526 * write a data to saif data register to trigger526 * write data to saif data register to trigger
527 * the transfer527 * the transfer.
528 * For 24-bit format the 32-bit FIFO register stores
529 * only one channel, so we need to write twice.
530 * This is also safe for the other non 24-bit formats.
528 */531 */
529 __raw_writel(0, saif->base + SAIF_DATA);532 __raw_writel(0, saif->base + SAIF_DATA);
533 __raw_writel(0, saif->base + SAIF_DATA);
530 } else {534 } else {
531 /*535 /*
532 * read a data from saif data register to trigger536 * read data from saif data register to trigger
533 * the receive537 * the receive.
538 * For 24-bit format the 32-bit FIFO register stores
539 * only one channel, so we need to read twice.
540 * This is also safe for the other non 24-bit formats.
534 */541 */
535 __raw_readl(saif->base + SAIF_DATA);542 __raw_readl(saif->base + SAIF_DATA);
543 __raw_readl(saif->base + SAIF_DATA);
536 }544 }
537 545
538 master_saif->ongoing = 1;546 master_saif->ongoing = 1;
@@ -812,3 +820,4 @@ module_platform_driver(mxs_saif_driver); · 273 unmodified lines
812MODULE_AUTHOR("Freescale Semiconductor, Inc.");820MODULE_AUTHOR("Freescale Semiconductor, Inc.");
813MODULE_DESCRIPTION("MXS ASoC SAIF driver");821MODULE_DESCRIPTION("MXS ASoC SAIF driver");
814MODULE_LICENSE("GPL");822MODULE_LICENSE("GPL");
823MODULE_ALIAS("platform:mxs-saif");
sound/soc/samsung/Kconfig+2−0
@@ -207,6 +207,8 @@ config SND_SOC_BELLS · 206 unmodified lines
207 select SND_SOC_WM5102207 select SND_SOC_WM5102
208 select SND_SOC_WM5110208 select SND_SOC_WM5110
209 select SND_SOC_WM9081209 select SND_SOC_WM9081
210 select SND_SOC_WM0010
211 select SND_SOC_WM1250_EV1
210 212
211config SND_SOC_LOWLAND213config SND_SOC_LOWLAND
212 tristate "Audio support for Wolfson Lowland"214 tristate "Audio support for Wolfson Lowland"
sound/soc/samsung/bells.c+1−1
@@ -247,7 +247,7 @@ static struct snd_soc_dai_link bells_dai_wm5110[] = { · 246 unmodified lines
247 {247 {
248 .name = "Sub",248 .name = "Sub",
249 .stream_name = "Sub",249 .stream_name = "Sub",
250 .cpu_dai_name = "wm5110-aif3",250 .cpu_dai_name = "wm5102-aif3",
251 .codec_dai_name = "wm9081-hifi",251 .codec_dai_name = "wm9081-hifi",
252 .codec_name = "wm9081.1-006c",252 .codec_name = "wm9081.1-006c",
253 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF253 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
sound/soc/soc-core.c+3−2
@@ -2786,8 +2786,9 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, · 2785 unmodified lines
2786 val = (ucontrol->value.integer.value[0] + min) & mask;2786 val = (ucontrol->value.integer.value[0] + min) & mask;
2787 val = val << shift;2787 val = val << shift;
2788 2788
2789 if (snd_soc_update_bits_locked(codec, reg, val_mask, val))2789 err = snd_soc_update_bits_locked(codec, reg, val_mask, val);
2790 return err;2790 if (err < 0)
2791 return err;
2791 2792
2792 if (snd_soc_volsw_is_stereo(mc)) {2793 if (snd_soc_volsw_is_stereo(mc)) {
2793 val_mask = mask << rshift;2794 val_mask = mask << rshift;
sound/soc/soc-dapm.c+1−1
@@ -3745,7 +3745,7 @@ void snd_soc_dapm_shutdown(struct snd_soc_card *card) · 3744 unmodified lines
3745{3745{
3746 struct snd_soc_codec *codec;3746 struct snd_soc_codec *codec;
3747 3747
3748 list_for_each_entry(codec, &card->codec_dev_list, list) {3748 list_for_each_entry(codec, &card->codec_dev_list, card_list) {
3749 soc_dapm_shutdown_codec(&codec->dapm);3749 soc_dapm_shutdown_codec(&codec->dapm);
3750 if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY)3750 if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY)
3751 snd_soc_dapm_set_bias_level(&codec->dapm,3751 snd_soc_dapm_set_bias_level(&codec->dapm,
sound/usb/card.c+3−3
@@ -559,9 +559,11 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, · 558 unmodified lines
559 return;559 return;
560 560
561 card = chip->card;561 card = chip->card;
562 mutex_lock(&register_mutex);
563 down_write(&chip->shutdown_rwsem);562 down_write(&chip->shutdown_rwsem);
564 chip->shutdown = 1;563 chip->shutdown = 1;
564 up_write(&chip->shutdown_rwsem);
565
566 mutex_lock(&register_mutex);
565 chip->num_interfaces--;567 chip->num_interfaces--;
566 if (chip->num_interfaces <= 0) {568 if (chip->num_interfaces <= 0) {
567 snd_card_disconnect(card);569 snd_card_disconnect(card);
@@ -582,11 +584,9 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, · 14 unmodified lines
582 snd_usb_mixer_disconnect(p);584 snd_usb_mixer_disconnect(p);
583 }585 }
584 usb_chip[chip->index] = NULL;586 usb_chip[chip->index] = NULL;
585 up_write(&chip->shutdown_rwsem);
586 mutex_unlock(&register_mutex);587 mutex_unlock(&register_mutex);
587 snd_card_free_when_closed(card);588 snd_card_free_when_closed(card);
588 } else {589 } else {
589 up_write(&chip->shutdown_rwsem);
590 mutex_unlock(&register_mutex);590 mutex_unlock(&register_mutex);
591 }591 }
592}592}
tools/power/x86/turbostat/turbostat.c+19−9
@@ -206,8 +206,10 @@ int get_msr(int cpu, off_t offset, unsigned long long *msr) · 205 unmodified lines
206 retval = pread(fd, msr, sizeof *msr, offset);206 retval = pread(fd, msr, sizeof *msr, offset);
207 close(fd);207 close(fd);
208 208
209 if (retval != sizeof *msr)209 if (retval != sizeof *msr) {
210 fprintf(stderr, "%s offset 0x%zx read failed\n", pathname, offset);
210 return -1;211 return -1;
212 }
211 213
212 return 0;214 return 0;
213}215}
@@ -1101,7 +1103,9 @@ void turbostat_loop() · 887 unmodified lines
1101 1103
1102restart:1104restart:
1103 retval = for_all_cpus(get_counters, EVEN_COUNTERS);1105 retval = for_all_cpus(get_counters, EVEN_COUNTERS);
1104 if (retval) {1106 if (retval < -1) {
1107 exit(retval);
1108 } else if (retval == -1) {
1105 re_initialize();1109 re_initialize();
1106 goto restart;1110 goto restart;
1107 }1111 }
@@ -1114,7 +1118,9 @@ restart: · 6 unmodified lines
1114 }1118 }
1115 sleep(interval_sec);1119 sleep(interval_sec);
1116 retval = for_all_cpus(get_counters, ODD_COUNTERS);1120 retval = for_all_cpus(get_counters, ODD_COUNTERS);
1117 if (retval) {1121 if (retval < -1) {
1122 exit(retval);
1123 } else if (retval == -1) {
1118 re_initialize();1124 re_initialize();
1119 goto restart;1125 goto restart;
1120 }1126 }
@@ -1126,7 +1132,9 @@ restart: · 5 unmodified lines
1126 flush_stdout();1132 flush_stdout();
1127 sleep(interval_sec);1133 sleep(interval_sec);
1128 retval = for_all_cpus(get_counters, EVEN_COUNTERS);1134 retval = for_all_cpus(get_counters, EVEN_COUNTERS);
1129 if (retval) {1135 if (retval < -1) {
1136 exit(retval);
1137 } else if (retval == -1) {
1130 re_initialize();1138 re_initialize();
1131 goto restart;1139 goto restart;
1132 }1140 }
@@ -1545,8 +1553,11 @@ void turbostat_init() · 412 unmodified lines
1545int fork_it(char **argv)1553int fork_it(char **argv)
1546{1554{
1547 pid_t child_pid;1555 pid_t child_pid;
1556 int status;
1548 1557
1549 for_all_cpus(get_counters, EVEN_COUNTERS);1558 status = for_all_cpus(get_counters, EVEN_COUNTERS);
1559 if (status)
1560 exit(status);
1550 /* clear affinity side-effect of get_counters() */1561 /* clear affinity side-effect of get_counters() */
1551 sched_setaffinity(0, cpu_present_setsize, cpu_present_set);1562 sched_setaffinity(0, cpu_present_setsize, cpu_present_set);
1552 gettimeofday(&tv_even, (struct timezone *)NULL);1563 gettimeofday(&tv_even, (struct timezone *)NULL);
@@ -1556,7 +1567,6 @@ int fork_it(char **argv) · 3 unmodified lines
1556 /* child */1567 /* child */
1557 execvp(argv[0], argv);1568 execvp(argv[0], argv);
1558 } else {1569 } else {
1559 int status;
1560 1570
1561 /* parent */1571 /* parent */
1562 if (child_pid == -1) {1572 if (child_pid == -1) {
@@ -1568,7 +1578,7 @@ int fork_it(char **argv) · 5 unmodified lines
1568 signal(SIGQUIT, SIG_IGN);1578 signal(SIGQUIT, SIG_IGN);
1569 if (waitpid(child_pid, &status, 0) == -1) {1579 if (waitpid(child_pid, &status, 0) == -1) {
1570 perror("wait");1580 perror("wait");
1571 exit(1);1581 exit(status);
1572 }1582 }
1573 }1583 }
1574 /*1584 /*
@@ -1585,7 +1595,7 @@ int fork_it(char **argv) · 10 unmodified lines
1585 1595
1586 fprintf(stderr, "%.6f sec\n", tv_delta.tv_sec + tv_delta.tv_usec/1000000.0);1596 fprintf(stderr, "%.6f sec\n", tv_delta.tv_sec + tv_delta.tv_usec/1000000.0);
1587 1597
1588 return 0;1598 return status;
1589}1599}
1590 1600
1591void cmdline(int argc, char **argv)1601void cmdline(int argc, char **argv)
@@ -1594,7 +1604,7 @@ void cmdline(int argc, char **argv) · 2 unmodified lines
1594 1604
1595 progname = argv[0];1605 progname = argv[0];
1596 1606
1597 while ((opt = getopt(argc, argv, "+pPSvisc:sC:m:M:")) != -1) {1607 while ((opt = getopt(argc, argv, "+pPSvi:sc:sC:m:M:")) != -1) {
1598 switch (opt) {1608 switch (opt) {
1599 case 'p':1609 case 'p':
1600 show_core_only++;1610 show_core_only++;