History

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Conflicts: drivers/net/usb/qmi_wwan.c include/net/dst.h Trivial merge conflicts, both were overlapping changes.

David S. Miller committed 13 years ago

Commit c3fa32b2 parents 34d92d5 320437a557 files · +4329 −2970Browse files

Unified · Split

557 files
  1. Documentation/ABI/stable/sysfs-bus-usb +4 −4
  2. Documentation/ABI/testing/sysfs-devices-power +16 −16
  3. Documentation/ABI/testing/sysfs-power +11 −11
  4. Documentation/acpi/dsdt-override.txt +1 −1
  5. Documentation/devicetree/bindings/memory.txt +0 −168
  6. Documentation/devicetree/bindings/mmc/tmio_mmc.txt +10 −7
  7. Documentation/sound/alsa/HD-Audio-Models.txt +1 −0
  8. MAINTAINERS +40 −14
  9. Makefile +1 −1
  10. arch/arc/kernel/ptrace.c +1 −1
  11. arch/arc/kernel/signal.c +13 −12
  12. arch/arm/Makefile +7 −2
  13. arch/arm/boot/Makefile +8 −8
  14. arch/arm/boot/dts/Makefile +2 −0
  15. arch/arm/boot/dts/armada-370-netgear-rn102.dts +32 −17
  16. arch/arm/boot/dts/armada-xp.dtsi +11 −0
  17. arch/arm/boot/dts/at91sam9x5.dtsi +4 −2
  18. arch/arm/boot/dts/atlas6.dtsi +12 −0
  19. arch/arm/boot/dts/exynos5250.dtsi +5 −0
  20. arch/arm/boot/dts/kirkwood.dtsi +2 −1
  21. arch/arm/boot/dts/omap3-beagle-xm.dts +1 −1
  22. arch/arm/boot/dts/omap3.dtsi +2 −2
  23. arch/arm/boot/dts/prima2.dtsi +23 −4
  24. arch/arm/boot/dts/r8a73a4.dtsi +3 −3
  25. arch/arm/boot/dts/r8a7778.dtsi +0 −1
  26. arch/arm/boot/dts/r8a7779.dtsi +0 −1
  27. arch/arm/boot/dts/r8a7790.dtsi +4 −5
  28. arch/arm/boot/dts/sh73a0.dtsi +3 −3
  29. arch/arm/boot/install.sh +14 −0
  30. arch/arm/common/edma.c +31 −7
  31. arch/arm/common/mcpm_entry.c +4 −2
  32. arch/arm/common/sharpsl_param.c +4 −1
  33. arch/arm/configs/multi_v7_defconfig +1 −0
  34. arch/arm/include/asm/Kbuild +0 −1
  35. arch/arm/include/asm/jump_label.h +1 −1
  36. arch/arm/include/asm/mcpm.h +10 −4
  37. arch/arm/include/asm/syscall.h +6 −0
  38. arch/arm/kernel/head.S +20 −1
  39. arch/arm/mach-at91/at91rm9200_time.c +1 −1
  40. arch/arm/mach-at91/at91sam926x_time.c +1 −1
  41. arch/arm/mach-at91/at91sam9g45_reset.S +8 −0
  42. arch/arm/mach-at91/at91x40_time.c +1 −1
  43. arch/arm/mach-davinci/board-dm365-evm.c +1 −1
  44. arch/arm/mach-davinci/include/mach/serial.h +2 −2
  45. arch/arm/mach-integrator/pci_v3.h +7 −0
  46. arch/arm/mach-mvebu/coherency.c +7 −1
  47. arch/arm/mach-mvebu/pmsu.c +1 −0
  48. arch/arm/mach-mvebu/system-controller.c +1 −0
  49. arch/arm/mach-omap2/board-generic.c +18 −0
  50. arch/arm/mach-omap2/board-rx51-peripherals.c +9 −0
  51. arch/arm/mach-omap2/gpmc-onenand.c +11 −1
  52. arch/arm/mach-omap2/mux.h +1 −3
  53. arch/arm/mach-omap2/timer.c +2 −2
  54. arch/arm/mach-shmobile/board-armadillo800eva.c +2 −2
  55. arch/arm/mach-shmobile/board-lager.c +26 −1
  56. arch/arm/mach-vexpress/tc2_pm.c +10 −1
  57. arch/arm/mm/dma-mapping.c +28 −15
  58. arch/arm/mm/init.c +0 −3
  59. arch/arm64/Kconfig.debug +0 −7
  60. arch/arm64/configs/defconfig +4 −1
  61. arch/arm64/include/asm/uaccess.h +6 −4
  62. arch/arm64/kernel/fpsimd.c +2 −0
  63. arch/arm64/mm/tlb.S +1 −1
  64. arch/mips/alchemy/board-mtx1.c +1 −1
  65. arch/mips/include/asm/jump_label.h +1 −1
  66. arch/mips/kernel/octeon_switch.S +1 −1
  67. arch/mips/kernel/r2300_switch.S +1 −1
  68. arch/mips/kernel/r4k_switch.S +1 −1
  69. arch/mips/mm/c-r4k.c +2 −0
  70. arch/parisc/configs/712_defconfig +2 −0
  71. arch/parisc/configs/a500_defconfig +2 −0
  72. arch/parisc/configs/b180_defconfig +3 −0
  73. arch/parisc/configs/c3000_defconfig +3 −0
  74. arch/parisc/configs/c8000_defconfig +2 −0
  75. arch/parisc/configs/default_defconfig +2 −0
  76. arch/parisc/include/asm/traps.h +1 −1
  77. arch/parisc/kernel/smp.c +1 −7
  78. arch/parisc/kernel/traps.c +3 −8
  79. arch/parisc/lib/memcpy.c +14 −1
  80. arch/parisc/mm/fault.c +10 −5
  81. arch/powerpc/include/asm/jump_label.h +1 −1
  82. arch/powerpc/kernel/iommu.c +1 −1
  83. arch/powerpc/kernel/irq.c +3 −2
  84. arch/powerpc/kernel/sysfs.c +16 −2
  85. arch/powerpc/kernel/tm.S +64 −31
  86. arch/powerpc/kernel/vio.c +8 −4
  87. arch/powerpc/kvm/book3s_hv_rmhandlers.S +1 −1
  88. arch/powerpc/kvm/e500_mmu_host.c +17 −1
  89. arch/powerpc/lib/checksum_64.S +42 −16
  90. arch/powerpc/mm/init_64.c +4 −0
  91. arch/powerpc/mm/mem.c +9 −0
  92. arch/powerpc/perf/power8-pmu.c +3 −2
  93. arch/s390/include/asm/jump_label.h +1 −1
  94. arch/s390/include/asm/pgtable.h +3 −1
  95. arch/s390/include/asm/timex.h +14 −14
  96. arch/s390/kernel/compat_signal.c +2 −2
  97. arch/s390/kernel/crash_dump.c +20 −22
  98. arch/s390/kernel/debug.c +1 −1
  99. arch/s390/kernel/entry.S +1 −0
  100. arch/s390/kernel/entry64.S +1 −0
  101. arch/s390/kernel/kprobes.c +5 −1
  102. arch/s390/kvm/interrupt.c +3 −3
  103. arch/s390/lib/delay.c +7 −7
  104. arch/sparc/Kconfig +6 −1
  105. arch/sparc/include/asm/floppy_64.h +1 −1
  106. arch/sparc/include/asm/jump_label.h +1 −1
  107. arch/sparc/kernel/Makefile +2 −1
  108. arch/sparc/kernel/ds.c +2 −3
  109. arch/sparc/kernel/ldc.c +2 −2
  110. arch/tile/include/asm/atomic.h +3 −2
  111. arch/tile/include/asm/atomic_32.h +15 −12
  112. arch/tile/include/asm/cmpxchg.h +17 −11
  113. arch/tile/include/asm/percpu.h +31 −3
  114. arch/tile/kernel/hardwall.c +3 −3
  115. arch/tile/kernel/intvec_32.S +3 −0
  116. arch/tile/kernel/intvec_64.S +3 −0
  117. arch/tile/kernel/stack.c +5 −7
  118. arch/tile/lib/atomic_32.c +4 −4
  119. arch/x86/Kconfig +4 −3
  120. arch/x86/include/asm/cpufeature.h +3 −3
  121. arch/x86/include/asm/jump_label.h +1 −1
  122. arch/x86/include/asm/mutex_64.h +2 −2
  123. arch/x86/kernel/apic/x2apic_uv_x.c +1 −1
  124. arch/x86/kernel/cpu/perf_event.c +3 −8
  125. arch/x86/kernel/kvm.c +14 −3
  126. arch/x86/kernel/reboot.c +8 −0
  127. arch/x86/kernel/sysfb_simplefb.c +2 −2
  128. arch/x86/kvm/vmx.c +12 −12
  129. arch/x86/pci/mmconfig-shared.c +6 −1
  130. arch/x86/xen/smp.c +9 −0
  131. block/partitions/efi.c +6 −1
  132. drivers/acpi/Kconfig +4 −4
  133. drivers/acpi/device_pm.c +0 −56
  134. drivers/acpi/power.c +4 −100
  135. drivers/acpi/scan.c +1 −2
  136. drivers/ata/ahci.c +1 −1
  137. drivers/ata/ahci_platform.c +1 −1
  138. drivers/ata/libahci.c +9 −1
  139. drivers/ata/libata-acpi.c +0 −14
  140. drivers/ata/libata-eh.c +3 −3
  141. drivers/ata/libata-scsi.c +0 −3
  142. drivers/ata/libata.h +0 −4
  143. drivers/ata/pata_isapnp.c +1 −1
  144. drivers/base/memory.c +5 −2
  145. drivers/bus/mvebu-mbus.c +9 −3
  146. drivers/char/random.c +5 −6
  147. drivers/char/tpm/xen-tpmfront.c +1 −0
  148. drivers/cpufreq/cpufreq-cpu0.c +1 −1
  149. drivers/cpufreq/intel_pstate.c +8 −5
  150. drivers/cpufreq/s3c64xx-cpufreq.c +1 −1
  151. drivers/cpufreq/spear-cpufreq.c +1 −1
  152. drivers/dma/Kconfig +1 −0
  153. drivers/dma/edma.c +2 −1
  154. drivers/dma/imx-dma.c +15 −16
  155. drivers/dma/sh/rcar-hpbdma.c +5 −4
  156. drivers/gpio/gpio-lynxpoint.c +3 −2
  157. drivers/gpio/gpio-omap.c +101 −57
  158. drivers/gpio/gpio-rcar.c +3 −4
  159. drivers/gpio/gpiolib.c +4 −2
  160. drivers/gpu/drm/drm_drv.c +8 −1
  161. drivers/gpu/drm/drm_edid.c +2 −0
  162. drivers/gpu/drm/drm_fb_helper.c +0 −8
  163. drivers/gpu/drm/gma500/gtt.c +1 −0
  164. drivers/gpu/drm/i915/i915_dma.c +3 −12
  165. drivers/gpu/drm/i915/i915_drv.c +4 −1
  166. drivers/gpu/drm/i915/i915_drv.h +6 −2
  167. drivers/gpu/drm/i915/i915_gem_gtt.c +85 −24
  168. drivers/gpu/drm/i915/i915_reg.h +12 −0
  169. drivers/gpu/drm/i915/intel_display.c +2 −36
  170. drivers/gpu/drm/i915/intel_dp.c +1 −1
  171. drivers/gpu/drm/i915/intel_drv.h +0 −1
  172. drivers/gpu/drm/i915/intel_pm.c +10 −3
  173. drivers/gpu/drm/nouveau/core/subdev/mc/base.c +1 −1
  174. drivers/gpu/drm/radeon/atombios_encoders.c +36 −18
  175. drivers/gpu/drm/radeon/btc_dpm.c +3 −3
  176. drivers/gpu/drm/radeon/cik.c +10 −0
  177. drivers/gpu/drm/radeon/dce6_afmt.c +3 −0
  178. drivers/gpu/drm/radeon/evergreen.c +1 −1
  179. drivers/gpu/drm/radeon/evergreen_hdmi.c +4 −2
  180. drivers/gpu/drm/radeon/evergreend.h +2 −2
  181. drivers/gpu/drm/radeon/ni.c +1 −0
  182. drivers/gpu/drm/radeon/r600.c +1 −0
  183. drivers/gpu/drm/radeon/r600_hdmi.c +17 −7
  184. drivers/gpu/drm/radeon/r600d.h +1 −1
  185. drivers/gpu/drm/radeon/radeon_connectors.c +21 −12
  186. drivers/gpu/drm/radeon/radeon_cs.c +1 −2
  187. drivers/gpu/drm/radeon/radeon_drv.c +2 −2
  188. drivers/gpu/drm/radeon/radeon_pm.c +3 −0
  189. drivers/gpu/drm/radeon/radeon_test.c +2 −2
  190. drivers/gpu/drm/radeon/radeon_uvd.c +4 −2
  191. drivers/gpu/drm/radeon/si.c +11 −0
  192. drivers/gpu/drm/radeon/si_dpm.c +3 −3
  193. drivers/gpu/drm/radeon/sid.h +2 −2
  194. drivers/gpu/drm/radeon/trinity_dpm.c +1 −1
  195. drivers/gpu/drm/radeon/uvd_v1_0.c +2 −2
  196. drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +12 −5
  197. drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +1 −1
  198. drivers/hid/Kconfig +1 −0
  199. drivers/hid/hid-core.c +8 −5
  200. drivers/hid/hid-holtek-mouse.c +4 −0
  201. drivers/hid/hid-ids.h +7 −0
  202. drivers/hid/hid-input.c +4 −9
  203. drivers/hid/hid-roccat-kone.c +1 −1
  204. drivers/hid/hid-roccat-koneplus.c +2 −2
  205. drivers/hid/hid-roccat-kovaplus.c +2 −2
  206. drivers/hid/hid-roccat-pyra.c +2 −2
  207. drivers/hid/hid-wiimote-core.c +4 −1
  208. drivers/hid/hid-wiimote-modules.c +29 −11
  209. drivers/hid/hid-wiimote.h +3 −1
  210. drivers/hid/hidraw.c +14 −7
  211. drivers/hid/uhid.c +2 −1
  212. drivers/hid/usbhid/hid-quirks.c +3 −0
  213. drivers/hwmon/applesmc.c +13 −0
  214. drivers/i2c/busses/i2c-designware-platdrv.c +3 −2
  215. drivers/i2c/busses/i2c-imx.c +6 −5
  216. drivers/i2c/busses/i2c-mxs.c +2 −1
  217. drivers/i2c/busses/i2c-omap.c +3 −0
  218. drivers/i2c/busses/i2c-stu300.c +5 −6
  219. drivers/i2c/i2c-core.c +3 −0
  220. drivers/i2c/muxes/i2c-arb-gpio-challenge.c +1 −1
  221. drivers/i2c/muxes/i2c-mux-gpio.c +9 −5
  222. drivers/i2c/muxes/i2c-mux-pinctrl.c +2 −2
  223. drivers/iio/amplifiers/ad8366.c +1 −3
  224. drivers/iio/frequency/adf4350.c +4 −2
  225. drivers/iio/industrialio-buffer.c +3 −0
  226. drivers/iio/industrialio-core.c +1 −1
  227. drivers/iio/magnetometer/st_magn_core.c +9 −9
  228. drivers/infiniband/Kconfig +11 −0
  229. drivers/infiniband/core/uverbs.h +2 −0
  230. drivers/infiniband/core/uverbs_cmd.c +4 −0
  231. drivers/infiniband/core/uverbs_main.c +6 −0
  232. drivers/infiniband/hw/amso1100/c2_ae.c +1 −1
  233. drivers/infiniband/hw/mlx4/main.c +2 −0
  234. drivers/infiniband/hw/mlx5/main.c +10 −6
  235. drivers/infiniband/hw/mlx5/mr.c +33 −37
  236. drivers/infiniband/hw/mlx5/qp.c +30 −50
  237. drivers/infiniband/hw/mlx5/srq.c +3 −1
  238. drivers/infiniband/hw/mthca/mthca_eq.c +1 −1
  239. drivers/infiniband/hw/ocrdma/ocrdma_hw.c +3 −3
  240. drivers/infiniband/hw/ocrdma/ocrdma_main.c +1 −1
  241. drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +3 −3
  242. drivers/infiniband/ulp/srpt/ib_srpt.c +6 −8
  243. drivers/iommu/Kconfig +1 −1
  244. drivers/iommu/arm-smmu.c +7 −6
  245. drivers/md/bcache/request.c +2 −3
  246. drivers/md/dm-snap-persistent.c +12 −6
  247. drivers/media/dvb-frontends/tda10071.c +1 −8
  248. drivers/media/i2c/ad9389b.c +6 −9
  249. drivers/media/i2c/adv7511.c +9 −9
  250. drivers/media/i2c/adv7842.c +12 −18
  251. drivers/media/i2c/ths8200.c +4 −8
  252. drivers/media/pci/saa7134/saa7134-video.c +1 −0
  253. drivers/media/platform/s5p-jpeg/jpeg-core.c +1 −0
  254. drivers/media/platform/sh_vou.c +1 −1
  255. drivers/media/platform/soc_camera/mx3_camera.c +2 −3
  256. drivers/media/tuners/e4000.c +2 −1
  257. drivers/media/usb/stkwebcam/stk-webcam.c +7 −0
  258. drivers/media/usb/uvc/uvc_driver.c +18 −0
  259. drivers/media/v4l2-core/videobuf2-core.c +3 −1
  260. drivers/media/v4l2-core/videobuf2-dma-contig.c +82 −5
  261. drivers/mmc/host/sh_mobile_sdhi.c +8 −8
  262. drivers/mtd/devices/m25p80.c +15 −2
  263. drivers/mtd/nand/nand_base.c +3 −5
  264. drivers/net/can/at91_can.c +2 −2
  265. drivers/net/can/flexcan.c +10 −4
  266. drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +10 −5
  267. drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +1 −0
  268. drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c +2 −38
  269. drivers/net/ethernet/broadcom/bnx2x/bnx2x_init.h +25 −13
  270. drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +212 −176
  271. drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c +17 −12
  272. drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c +1 −1
  273. drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c +1 −1
  274. drivers/net/ethernet/davicom/dm9000.c +38 −18
  275. drivers/net/ethernet/freescale/gianfar.c +28 −10
  276. drivers/net/ethernet/mellanox/mlx5/core/cmd.c +15 −13
  277. drivers/net/ethernet/mellanox/mlx5/core/eq.c +3 −1
  278. drivers/net/ethernet/mellanox/mlx5/core/main.c +5 −16
  279. drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c +14 −2
  280. drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +1 −1
  281. drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +1 −7
  282. drivers/net/ethernet/renesas/sh_eth.c +4 −4
  283. drivers/net/ethernet/smsc/smc91x.h +2 −4
  284. drivers/net/ethernet/ti/cpsw.c +1 −8
  285. drivers/net/ethernet/ti/davinci_emac.c +1 −2
  286. drivers/net/hamradio/yam.c +0 −1
  287. drivers/net/usb/ax88179_178a.c +20 −3
  288. drivers/net/usb/qmi_wwan.c +1 −0
  289. drivers/net/usb/usbnet.c +3 −1
  290. drivers/net/virtio_net.c +13 −1
  291. drivers/net/wan/farsync.c +1 −0
  292. drivers/net/wan/wanxl.c +1 −0
  293. drivers/net/wireless/ath/ath9k/main.c +11 −12
  294. drivers/net/wireless/cw1200/cw1200_spi.c +2 −0
  295. drivers/net/wireless/iwlwifi/iwl-6000.c +6 −0
  296. drivers/net/wireless/iwlwifi/iwl-config.h +1 −0
  297. drivers/net/wireless/iwlwifi/iwl-trans.h +4 −2
  298. drivers/net/wireless/iwlwifi/mvm/power.c +4 −1
  299. drivers/net/wireless/iwlwifi/mvm/scan.c +11 −1
  300. drivers/net/wireless/iwlwifi/pcie/drv.c +42 −0
  301. drivers/net/wireless/iwlwifi/pcie/tx.c +2 −0
  302. drivers/net/wireless/mwifiex/join.c +8 −2
  303. drivers/net/wireless/mwifiex/sta_event.c +2 −1
  304. drivers/net/wireless/rtlwifi/rtl8192cu/trx.c +2 −1
  305. drivers/of/Kconfig +0 −6
  306. drivers/of/Makefile +0 −1
  307. drivers/of/base.c +1 −3
  308. drivers/of/fdt.c +0 −12
  309. drivers/of/of_reserved_mem.c +0 −173
  310. drivers/of/platform.c +0 −4
  311. drivers/pci/hotplug/acpiphp_glue.c +5 −3
  312. drivers/pinctrl/pinconf.c +2 −2
  313. drivers/pinctrl/pinctrl-exynos.c +6 −6
  314. drivers/pinctrl/pinctrl-palmas.c +3 −2
  315. drivers/pinctrl/pinctrl-tegra114.c +2 −3
  316. drivers/platform/x86/Kconfig +1 −0
  317. drivers/platform/x86/sony-laptop.c +9 −17
  318. drivers/s390/block/dasd_eckd.c +71 −27
  319. drivers/s390/char/sclp.c +2 −2
  320. drivers/s390/char/sclp_cmd.c +5 −3
  321. drivers/s390/char/tty3270.c +1 −1
  322. drivers/s390/char/vmlogrdr.c +1 −1
  323. drivers/s390/cio/cio.c +2 −2
  324. drivers/s390/cio/qdio_main.c +5 −5
  325. drivers/spi/spi-atmel.c +2 −1
  326. drivers/spi/spi-clps711x.c +0 −3
  327. drivers/spi/spi-fsl-dspi.c +2 −8
  328. drivers/spi/spi-mpc512x-psc.c +3 −1
  329. drivers/spi/spi-pxa2xx.c +10 −1
  330. drivers/spi/spi-s3c64xx.c +2 −2
  331. drivers/spi/spi-sh-hspi.c +2 −2
  332. drivers/staging/comedi/drivers/ni_65xx.c +10 −15
  333. drivers/staging/media/msi3101/Kconfig +1 −0
  334. drivers/staging/media/msi3101/sdr-msi3101.c +8 −2
  335. drivers/target/iscsi/iscsi_target.c +9 −4
  336. drivers/target/iscsi/iscsi_target_nego.c +1 −1
  337. drivers/target/iscsi/iscsi_target_util.c +2 −2
  338. drivers/target/target_core_sbc.c +26 −2
  339. drivers/target/target_core_transport.c +15 −5
  340. drivers/target/target_core_xcopy.c +2 −2
  341. drivers/thermal/samsung/exynos_thermal_common.c +0 −2
  342. drivers/thermal/samsung/exynos_tmu.c +8 −4
  343. drivers/thermal/samsung/exynos_tmu.h +6 −1
  344. drivers/thermal/samsung/exynos_tmu_data.c +24 −6
  345. drivers/thermal/samsung/exynos_tmu_data.h +12 −1
  346. drivers/thermal/thermal_hwmon.c +1 −1
  347. drivers/thermal/ti-soc-thermal/ti-thermal-common.c +1 −0
  348. drivers/thermal/x86_pkg_temp_thermal.c +8 −6
  349. drivers/tty/hvc/hvc_xen.c +1 −0
  350. drivers/tty/n_tty.c +26 −20
  351. drivers/tty/serial/imx.c +0 −3
  352. drivers/tty/serial/vt8500_serial.c +3 −2
  353. drivers/usb/chipidea/ci_hdrc_pci.c +6 −1
  354. drivers/usb/chipidea/host.c +4 −2
  355. drivers/usb/core/quirks.c +6 −0
  356. drivers/usb/gadget/f_fs.c +2 −0
  357. drivers/usb/gadget/pxa25x_udc.c +5 −4
  358. drivers/usb/gadget/s3c-hsotg.c +1 −1
  359. drivers/usb/host/pci-quirks.c +2 −2
  360. drivers/usb/host/xhci-hub.c +0 −26
  361. drivers/usb/host/xhci-pci.c +25 −0
  362. drivers/usb/host/xhci.c +13 −1
  363. drivers/usb/host/xhci.h +2 −0
  364. drivers/usb/misc/Kconfig +1 −1
  365. drivers/usb/musb/musb_core.c +46 −0
  366. drivers/usb/musb/musb_core.h +1 −0
  367. drivers/usb/musb/musb_dsps.c +3 −0
  368. drivers/usb/musb/musb_gadget.c +6 −0
  369. drivers/usb/musb/musb_virthub.c +0 −46
  370. drivers/usb/phy/phy-gpio-vbus-usb.c +5 −6
  371. drivers/usb/serial/option.c +227 −1
  372. drivers/usb/serial/ti_usb_3410_5052.c +1 −0
  373. drivers/usb/storage/scsiglue.c +4 −1
  374. drivers/usb/storage/unusual_devs.h +7 −0
  375. drivers/vfio/vfio_iommu_type1.c +21 −19
  376. drivers/vhost/scsi.c +6 −1
  377. drivers/w1/w1.c +6 −0
  378. drivers/watchdog/hpwdt.c +6 −0
  379. drivers/watchdog/kempld_wdt.c +1 −1
  380. drivers/watchdog/sunxi_wdt.c +2 −2
  381. drivers/watchdog/ts72xx_wdt.c +2 −1
  382. fs/aio.c +37 −15
  383. fs/btrfs/async-thread.c +19 −6
  384. fs/btrfs/async-thread.h +2 −0
  385. fs/btrfs/dev-replace.c +1 −4
  386. fs/btrfs/disk-io.c +5 −4
  387. fs/btrfs/disk-io.h +11 −2
  388. fs/btrfs/extent_io.c +13 −9
  389. fs/btrfs/inode.c +2 −1
  390. fs/btrfs/relocation.c +1 −1
  391. fs/btrfs/root-tree.c +3 −5
  392. fs/btrfs/transaction.c +2 −5
  393. fs/btrfs/volumes.c +6 −1
  394. fs/buffer.c +12 −2
  395. fs/cifs/cifsfs.c +4 −2
  396. fs/cifs/cifsfs.h +1 −1
  397. fs/cifs/cifsglob.h +1 −4
  398. fs/cifs/cifspdu.h +24 −28
  399. fs/cifs/cifssmb.c +34 −7
  400. fs/cifs/file.c +8 −0
  401. fs/cifs/fscache.c +7 −0
  402. fs/cifs/fscache.h +13 −0
  403. fs/cifs/inode.c +39 −6
  404. fs/cifs/netmisc.c +3 −1
  405. fs/cifs/readdir.c +3 −0
  406. fs/cifs/sess.c +3 −85
  407. fs/cifs/smb2pdu.c +6 −0
  408. fs/cifs/smbfsctl.h +14 −0
  409. fs/cifs/transport.c +7 −2
  410. fs/dcache.c +7 −8
  411. fs/ext3/namei.c +2 −3
  412. fs/ext4/inode.c +1 −1
  413. fs/ext4/namei.c +2 −3
  414. fs/ext4/xattr.c +2 −0
  415. fs/fuse/dir.c +13 −7
  416. fs/fuse/file.c +17 −6
  417. fs/fuse/fuse_i.h +2 −0
  418. fs/jfs/jfs_inode.c +1 −2
  419. fs/namei.c +2 −1
  420. fs/proc/inode.c +7 −3
  421. fs/proc/task_mmu.c +3 −1
  422. fs/statfs.c +1 −1
  423. fs/xfs/xfs_dir2_block.c +3 −3
  424. fs/xfs/xfs_dir2_format.h +20 −31
  425. fs/xfs/xfs_dir2_readdir.c +2 −2
  426. fs/xfs/xfs_dir2_sf.c +3 −3
  427. fs/xfs/xfs_dquot.c +16 −3
  428. fs/xfs/xfs_log_recover.c +1 −0
  429. include/acpi/acpi_bus.h +0 −7
  430. include/asm-generic/hugetlb.h +2 −2
  431. include/dt-bindings/pinctrl/omap.h +1 −3
  432. include/linux/compiler-gcc4.h +15 −0
  433. include/linux/intel-iommu.h +1 −1
  434. include/linux/memcontrol.h +11 −39
  435. include/linux/miscdevice.h +1 −0
  436. include/linux/mlx5/device.h +2 −2
  437. include/linux/mlx5/driver.h +2 −4
  438. include/linux/of_reserved_mem.h +0 −14
  439. include/linux/perf_event.h +23 −1
  440. include/linux/random.h +1 −0
  441. include/linux/sched.h +3 −4
  442. include/linux/timex.h +14 −0
  443. include/linux/usb/usb_phy_gen_xceiv.h +1 −1
  444. include/linux/usb_usual.h +3 −1
  445. include/linux/vgaarb.h +0 −7
  446. include/linux/yam.h +1 −1
  447. include/net/cipso_ipv4.h +4 −2
  448. include/net/dst.h +12 −0
  449. include/net/ip6_route.h +2 −4
  450. include/net/mac802154.h +1 −1
  451. include/sound/rcar_snd.h +1 −0
  452. include/uapi/drm/drm_mode.h +2 −0
  453. include/uapi/rdma/ib_user_verbs.h +6 −0
  454. init/main.c +2 −0
  455. ipc/sem.c +29 −13
  456. ipc/util.c +21 −6
  457. kernel/cgroup.c +6 −8
  458. kernel/events/core.c +3 −3
  459. kernel/power/snapshot.c +4 −1
  460. kernel/power/user.c +8 −0
  461. kernel/softirq.c +12 −3
  462. lib/kobject.c +1 −1
  463. lib/percpu-refcount.c +3 −0
  464. mm/Kconfig +1 −1
  465. mm/filemap.c +1 −10
  466. mm/huge_memory.c +9 −1
  467. mm/hugetlb.c +16 −1
  468. mm/memcontrol.c +55 −88
  469. mm/memory.c +14 −6
  470. mm/migrate.c +2 −0
  471. mm/mprotect.c +5 −2
  472. mm/mremap.c +1 −4
  473. mm/oom_kill.c +1 −1
  474. mm/page-writeback.c +5 −5
  475. mm/slab_common.c +2 −0
  476. mm/swapfile.c +3 −1
  477. mm/vmscan.c +1 −0
  478. mm/zswap.c +4 −0
  479. net/bridge/br_fdb.c +2 −2
  480. net/bridge/br_mdb.c +1 −1
  481. net/bridge/br_multicast.c +26 −12
  482. net/bridge/br_netlink.c +1 −1
  483. net/bridge/br_private.h +1 −4
  484. net/bridge/br_stp_if.c +1 −1
  485. net/bridge/br_vlan.c +67 −58
  486. net/core/secure_seq.c +2 −0
  487. net/ipv4/ip_output.c +9 −4
  488. net/ipv4/ip_vti.c +11 −3
  489. net/ipv4/tcp_input.c +3 −1
  490. net/ipv4/tcp_output.c +7 −5
  491. net/ipv4/xfrm4_policy.c +1 −0
  492. net/ipv6/ah6.c +1 −2
  493. net/ipv6/esp6.c +1 −2
  494. net/ipv6/ip6_gre.c +1 −2
  495. net/ipv6/ip6_output.c +16 −13
  496. net/ipv6/ipcomp6.c +1 −2
  497. net/ipv6/route.c +37 −9
  498. net/ipv6/udp.c +2 −3
  499. net/ipv6/xfrm6_policy.c +1 −0
  500. net/key/af_key.c +2 −1
  501. net/l2tp/l2tp_ppp.c +4 −0
  502. net/mac80211/cfg.c +1 −1
  503. net/mac80211/ieee80211_i.h +3 −0
  504. net/mac80211/offchannel.c +2 −0
  505. net/mac80211/scan.c +19 −0
  506. net/mac80211/status.c +3 −0
  507. net/mac80211/tx.c +2 −1
  508. net/mac80211/util.c +4 −0
  509. net/netfilter/nf_conntrack_h323_main.c +2 −2
  510. net/sched/sch_netem.c +17 −0
  511. net/sctp/output.c +2 −1
  512. net/unix/af_unix.c +10 −0
  513. net/wireless/core.c +0 −2
  514. net/wireless/core.h +3 −0
  515. net/wireless/radiotap.c +6 −1
  516. net/xfrm/xfrm_policy.c +21 −7
  517. net/xfrm/xfrm_replay.c +28 −26
  518. net/xfrm/xfrm_user.c +3 −2
  519. security/apparmor/apparmorfs.c +1 −3
  520. security/apparmor/policy.c +1 −0
  521. security/selinux/avc.c +3 −6
  522. security/selinux/hooks.c +7 −8
  523. security/selinux/include/avc.h +5 −13
  524. sound/pci/ac97/ac97_codec.c +1 −0
  525. sound/pci/hda/hda_generic.c +1 −1
  526. sound/pci/hda/patch_conexant.c +11 −0
  527. sound/pci/hda/patch_hdmi.c +8 −10
  528. sound/pci/hda/patch_realtek.c +54 −0
  529. sound/pci/rme9652/hdsp.c +1 −0
  530. sound/soc/blackfin/bf6xx-i2s.c +1 −0
  531. sound/soc/codecs/88pm860x-codec.c +3 −0
  532. sound/soc/codecs/ab8500-codec.c +6 −1
  533. sound/soc/codecs/max98095.c +2 −2
  534. sound/soc/codecs/pcm1681.c +1 −1
  535. sound/soc/codecs/pcm1792a.c +1 −1
  536. sound/soc/codecs/tlv320aic3x.c +4 −0
  537. sound/soc/fsl/fsl_ssi.c +1 −1
  538. sound/soc/fsl/imx-mc13783.c +1 −1
  539. sound/soc/fsl/imx-sgtl5000.c +5 −2
  540. sound/soc/fsl/imx-ssi.c +12 −11
  541. sound/soc/fsl/imx-ssi.h +2 −0
  542. sound/soc/omap/Kconfig +2 −2
  543. sound/soc/sh/rcar/rsnd.h +2 −2
  544. sound/soc/soc-core.c +0 −1
  545. sound/usb/usx2y/us122l.c +3 −1
  546. sound/usb/usx2y/usbusx2yaudio.c +3 −19
  547. sound/usb/usx2y/usx2yhwdeppcm.c +1 −6
  548. tools/perf/Makefile +1 −0
  549. tools/perf/builtin-stat.c +1 −0
  550. tools/perf/config/feature-tests.mak +1 −1
  551. tools/perf/util/dwarf-aux.c +21 −4
  552. tools/perf/util/dwarf-aux.h +5 −1
  553. tools/perf/util/header.c +12 −0
  554. tools/perf/util/probe-finder.c +33 −16
  555. tools/perf/util/session.c +3 −1
  556. tools/testing/selftests/timers/posix_timers.c +1 −1
  557. virt/kvm/kvm_main.c +4 −2
Documentation/ABI/stable/sysfs-bus-usb+4−4
@@ -37,8 +37,8 @@ Description: · 36 unmodified lines
37 that the USB device has been connected to the machine. This37 that the USB device has been connected to the machine. This
38 file is read-only.38 file is read-only.
39Users:39Users:
40 PowerTOP <power@bughost.org>40 PowerTOP <powertop@lists.01.org>
41 http://www.lesswatts.org/projects/powertop/41 https://01.org/powertop/
42 42
43What: /sys/bus/usb/device/.../power/active_duration43What: /sys/bus/usb/device/.../power/active_duration
44Date: January 200844Date: January 2008
@@ -57,8 +57,8 @@ Description: · 12 unmodified lines
57 will give an integer percentage. Note that this does not57 will give an integer percentage. Note that this does not
58 account for counter wrap.58 account for counter wrap.
59Users:59Users:
60 PowerTOP <power@bughost.org>60 PowerTOP <powertop@lists.01.org>
61 http://www.lesswatts.org/projects/powertop/61 https://01.org/powertop/
62 62
63What: /sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend63What: /sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend
64Date: January 200864Date: January 2008
Documentation/ABI/testing/sysfs-devices-power+16−16
@@ -1,6 +1,6 @@
1What: /sys/devices/.../power/1What: /sys/devices/.../power/
2Date: January 20092Date: January 2009
3Contact: Rafael J. Wysocki <rjw@sisk.pl>3Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
4Description:4Description:
5 The /sys/devices/.../power directory contains attributes5 The /sys/devices/.../power directory contains attributes
6 allowing the user space to check and modify some power6 allowing the user space to check and modify some power
@@ -8,7 +8,7 @@ Description: · 1 unmodified line
8 8
9What: /sys/devices/.../power/wakeup9What: /sys/devices/.../power/wakeup
10Date: January 200910Date: January 2009
11Contact: Rafael J. Wysocki <rjw@sisk.pl>11Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
12Description:12Description:
13 The /sys/devices/.../power/wakeup attribute allows the user13 The /sys/devices/.../power/wakeup attribute allows the user
14 space to check if the device is enabled to wake up the system14 space to check if the device is enabled to wake up the system
@@ -34,7 +34,7 @@ Description: · 19 unmodified lines
34 34
35What: /sys/devices/.../power/control35What: /sys/devices/.../power/control
36Date: January 200936Date: January 2009
37Contact: Rafael J. Wysocki <rjw@sisk.pl>37Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
38Description:38Description:
39 The /sys/devices/.../power/control attribute allows the user39 The /sys/devices/.../power/control attribute allows the user
40 space to control the run-time power management of the device.40 space to control the run-time power management of the device.
@@ -53,7 +53,7 @@ Description: · 12 unmodified lines
53 53
54What: /sys/devices/.../power/async54What: /sys/devices/.../power/async
55Date: January 200955Date: January 2009
56Contact: Rafael J. Wysocki <rjw@sisk.pl>56Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
57Description:57Description:
58 The /sys/devices/.../async attribute allows the user space to58 The /sys/devices/.../async attribute allows the user space to
59 enable or diasble the device's suspend and resume callbacks to59 enable or diasble the device's suspend and resume callbacks to
@@ -79,7 +79,7 @@ Description: · 19 unmodified lines
79 79
80What: /sys/devices/.../power/wakeup_count80What: /sys/devices/.../power/wakeup_count
81Date: September 201081Date: September 2010
82Contact: Rafael J. Wysocki <rjw@sisk.pl>82Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
83Description:83Description:
84 The /sys/devices/.../wakeup_count attribute contains the number84 The /sys/devices/.../wakeup_count attribute contains the number
85 of signaled wakeup events associated with the device. This85 of signaled wakeup events associated with the device. This
@@ -88,7 +88,7 @@ Description: · 2 unmodified lines
88 88
89What: /sys/devices/.../power/wakeup_active_count89What: /sys/devices/.../power/wakeup_active_count
90Date: September 201090Date: September 2010
91Contact: Rafael J. Wysocki <rjw@sisk.pl>91Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
92Description:92Description:
93 The /sys/devices/.../wakeup_active_count attribute contains the93 The /sys/devices/.../wakeup_active_count attribute contains the
94 number of times the processing of wakeup events associated with94 number of times the processing of wakeup events associated with
@@ -98,7 +98,7 @@ Description: · 3 unmodified lines
98 98
99What: /sys/devices/.../power/wakeup_abort_count99What: /sys/devices/.../power/wakeup_abort_count
100Date: February 2012100Date: February 2012
101Contact: Rafael J. Wysocki <rjw@sisk.pl>101Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
102Description:102Description:
103 The /sys/devices/.../wakeup_abort_count attribute contains the103 The /sys/devices/.../wakeup_abort_count attribute contains the
104 number of times the processing of a wakeup event associated with104 number of times the processing of a wakeup event associated with
@@ -109,7 +109,7 @@ Description: · 4 unmodified lines
109 109
110What: /sys/devices/.../power/wakeup_expire_count110What: /sys/devices/.../power/wakeup_expire_count
111Date: February 2012111Date: February 2012
112Contact: Rafael J. Wysocki <rjw@sisk.pl>112Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
113Description:113Description:
114 The /sys/devices/.../wakeup_expire_count attribute contains the114 The /sys/devices/.../wakeup_expire_count attribute contains the
115 number of times a wakeup event associated with the device has115 number of times a wakeup event associated with the device has
@@ -119,7 +119,7 @@ Description: · 3 unmodified lines
119 119
120What: /sys/devices/.../power/wakeup_active120What: /sys/devices/.../power/wakeup_active
121Date: September 2010121Date: September 2010
122Contact: Rafael J. Wysocki <rjw@sisk.pl>122Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
123Description:123Description:
124 The /sys/devices/.../wakeup_active attribute contains either 1,124 The /sys/devices/.../wakeup_active attribute contains either 1,
125 or 0, depending on whether or not a wakeup event associated with125 or 0, depending on whether or not a wakeup event associated with
@@ -129,7 +129,7 @@ Description: · 3 unmodified lines
129 129
130What: /sys/devices/.../power/wakeup_total_time_ms130What: /sys/devices/.../power/wakeup_total_time_ms
131Date: September 2010131Date: September 2010
132Contact: Rafael J. Wysocki <rjw@sisk.pl>132Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
133Description:133Description:
134 The /sys/devices/.../wakeup_total_time_ms attribute contains134 The /sys/devices/.../wakeup_total_time_ms attribute contains
135 the total time of processing wakeup events associated with the135 the total time of processing wakeup events associated with the
@@ -139,7 +139,7 @@ Description: · 3 unmodified lines
139 139
140What: /sys/devices/.../power/wakeup_max_time_ms140What: /sys/devices/.../power/wakeup_max_time_ms
141Date: September 2010141Date: September 2010
142Contact: Rafael J. Wysocki <rjw@sisk.pl>142Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
143Description:143Description:
144 The /sys/devices/.../wakeup_max_time_ms attribute contains144 The /sys/devices/.../wakeup_max_time_ms attribute contains
145 the maximum time of processing a single wakeup event associated145 the maximum time of processing a single wakeup event associated
@@ -149,7 +149,7 @@ Description: · 3 unmodified lines
149 149
150What: /sys/devices/.../power/wakeup_last_time_ms150What: /sys/devices/.../power/wakeup_last_time_ms
151Date: September 2010151Date: September 2010
152Contact: Rafael J. Wysocki <rjw@sisk.pl>152Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
153Description:153Description:
154 The /sys/devices/.../wakeup_last_time_ms attribute contains154 The /sys/devices/.../wakeup_last_time_ms attribute contains
155 the value of the monotonic clock corresponding to the time of155 the value of the monotonic clock corresponding to the time of
@@ -160,7 +160,7 @@ Description: · 4 unmodified lines
160 160
161What: /sys/devices/.../power/wakeup_prevent_sleep_time_ms161What: /sys/devices/.../power/wakeup_prevent_sleep_time_ms
162Date: February 2012162Date: February 2012
163Contact: Rafael J. Wysocki <rjw@sisk.pl>163Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
164Description:164Description:
165 The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute165 The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute
166 contains the total time the device has been preventing166 contains the total time the device has been preventing
@@ -189,7 +189,7 @@ Description: · 22 unmodified lines
189 189
190What: /sys/devices/.../power/pm_qos_latency_us190What: /sys/devices/.../power/pm_qos_latency_us
191Date: March 2012191Date: March 2012
192Contact: Rafael J. Wysocki <rjw@sisk.pl>192Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
193Description:193Description:
194 The /sys/devices/.../power/pm_qos_resume_latency_us attribute194 The /sys/devices/.../power/pm_qos_resume_latency_us attribute
195 contains the PM QoS resume latency limit for the given device,195 contains the PM QoS resume latency limit for the given device,
@@ -207,7 +207,7 @@ Description: · 11 unmodified lines
207 207
208What: /sys/devices/.../power/pm_qos_no_power_off208What: /sys/devices/.../power/pm_qos_no_power_off
209Date: September 2012209Date: September 2012
210Contact: Rafael J. Wysocki <rjw@sisk.pl>210Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
211Description:211Description:
212 The /sys/devices/.../power/pm_qos_no_power_off attribute212 The /sys/devices/.../power/pm_qos_no_power_off attribute
213 is used for manipulating the PM QoS "no power off" flag. If213 is used for manipulating the PM QoS "no power off" flag. If
@@ -222,7 +222,7 @@ Description: · 8 unmodified lines
222 222
223What: /sys/devices/.../power/pm_qos_remote_wakeup223What: /sys/devices/.../power/pm_qos_remote_wakeup
224Date: September 2012224Date: September 2012
225Contact: Rafael J. Wysocki <rjw@sisk.pl>225Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
226Description:226Description:
227 The /sys/devices/.../power/pm_qos_remote_wakeup attribute227 The /sys/devices/.../power/pm_qos_remote_wakeup attribute
228 is used for manipulating the PM QoS "remote wakeup required"228 is used for manipulating the PM QoS "remote wakeup required"
Documentation/ABI/testing/sysfs-power+11−11
@@ -1,6 +1,6 @@
1What: /sys/power/1What: /sys/power/
2Date: August 20062Date: August 2006
3Contact: Rafael J. Wysocki <rjw@sisk.pl>3Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
4Description:4Description:
5 The /sys/power directory will contain files that will5 The /sys/power directory will contain files that will
6 provide a unified interface to the power management6 provide a unified interface to the power management
@@ -8,7 +8,7 @@ Description: · 1 unmodified line
8 8
9What: /sys/power/state9What: /sys/power/state
10Date: August 200610Date: August 2006
11Contact: Rafael J. Wysocki <rjw@sisk.pl>11Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
12Description:12Description:
13 The /sys/power/state file controls the system power state.13 The /sys/power/state file controls the system power state.
14 Reading from this file returns what states are supported,14 Reading from this file returns what states are supported,
@@ -22,7 +22,7 @@ Description: · 7 unmodified lines
22 22
23What: /sys/power/disk23What: /sys/power/disk
24Date: September 200624Date: September 2006
25Contact: Rafael J. Wysocki <rjw@sisk.pl>25Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
26Description:26Description:
27 The /sys/power/disk file controls the operating mode of the27 The /sys/power/disk file controls the operating mode of the
28 suspend-to-disk mechanism. Reading from this file returns28 suspend-to-disk mechanism. Reading from this file returns
@@ -67,7 +67,7 @@ Description: · 38 unmodified lines
67 67
68What: /sys/power/image_size68What: /sys/power/image_size
69Date: August 200669Date: August 2006
70Contact: Rafael J. Wysocki <rjw@sisk.pl>70Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
71Description:71Description:
72 The /sys/power/image_size file controls the size of the image72 The /sys/power/image_size file controls the size of the image
73 created by the suspend-to-disk mechanism. It can be written a73 created by the suspend-to-disk mechanism. It can be written a
@@ -84,7 +84,7 @@ Description: · 10 unmodified lines
84 84
85What: /sys/power/pm_trace85What: /sys/power/pm_trace
86Date: August 200686Date: August 2006
87Contact: Rafael J. Wysocki <rjw@sisk.pl>87Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
88Description:88Description:
89 The /sys/power/pm_trace file controls the code which saves the89 The /sys/power/pm_trace file controls the code which saves the
90 last PM event point in the RTC across reboots, so that you can90 last PM event point in the RTC across reboots, so that you can
@@ -133,7 +133,7 @@ Description: · 42 unmodified lines
133 133
134What: /sys/power/pm_async134What: /sys/power/pm_async
135Date: January 2009135Date: January 2009
136Contact: Rafael J. Wysocki <rjw@sisk.pl>136Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
137Description:137Description:
138 The /sys/power/pm_async file controls the switch allowing the138 The /sys/power/pm_async file controls the switch allowing the
139 user space to enable or disable asynchronous suspend and resume139 user space to enable or disable asynchronous suspend and resume
@@ -146,7 +146,7 @@ Description: · 6 unmodified lines
146 146
147What: /sys/power/wakeup_count147What: /sys/power/wakeup_count
148Date: July 2010148Date: July 2010
149Contact: Rafael J. Wysocki <rjw@sisk.pl>149Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
150Description:150Description:
151 The /sys/power/wakeup_count file allows user space to put the151 The /sys/power/wakeup_count file allows user space to put the
152 system into a sleep state while taking into account the152 system into a sleep state while taking into account the
@@ -161,7 +161,7 @@ Description: · 8 unmodified lines
161 161
162What: /sys/power/reserved_size162What: /sys/power/reserved_size
163Date: May 2011163Date: May 2011
164Contact: Rafael J. Wysocki <rjw@sisk.pl>164Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
165Description:165Description:
166 The /sys/power/reserved_size file allows user space to control166 The /sys/power/reserved_size file allows user space to control
167 the amount of memory reserved for allocations made by device167 the amount of memory reserved for allocations made by device
@@ -175,7 +175,7 @@ Description: · 7 unmodified lines
175 175
176What: /sys/power/autosleep176What: /sys/power/autosleep
177Date: April 2012177Date: April 2012
178Contact: Rafael J. Wysocki <rjw@sisk.pl>178Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
179Description:179Description:
180 The /sys/power/autosleep file can be written one of the strings180 The /sys/power/autosleep file can be written one of the strings
181 returned by reads from /sys/power/state. If that happens, a181 returned by reads from /sys/power/state. If that happens, a
@@ -192,7 +192,7 @@ Description: · 10 unmodified lines
192 192
193What: /sys/power/wake_lock193What: /sys/power/wake_lock
194Date: February 2012194Date: February 2012
195Contact: Rafael J. Wysocki <rjw@sisk.pl>195Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
196Description:196Description:
197 The /sys/power/wake_lock file allows user space to create197 The /sys/power/wake_lock file allows user space to create
198 wakeup source objects and activate them on demand (if one of198 wakeup source objects and activate them on demand (if one of
@@ -219,7 +219,7 @@ Description: · 20 unmodified lines
219 219
220What: /sys/power/wake_unlock220What: /sys/power/wake_unlock
221Date: February 2012221Date: February 2012
222Contact: Rafael J. Wysocki <rjw@sisk.pl>222Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
223Description:223Description:
224 The /sys/power/wake_unlock file allows user space to deactivate224 The /sys/power/wake_unlock file allows user space to deactivate
225 wakeup sources created with the help of /sys/power/wake_lock.225 wakeup sources created with the help of /sys/power/wake_lock.
Documentation/acpi/dsdt-override.txt+1−1
@@ -4,4 +4,4 @@ CONFIG_ACPI_CUSTOM_DSDT builds the image into the kernel. · 3 unmodified lines
4 4
5When to use this method is described in detail on the5When to use this method is described in detail on the
6Linux/ACPI home page:6Linux/ACPI home page:
7http://www.lesswatts.org/projects/acpi/overridingDSDT.php7https://01.org/linux-acpi/documentation/overriding-dsdt
Documentation/devicetree/bindings/memory.txt+0−168
@@ -1,168 +0,0 @@
1*** Memory binding ***
2
3The /memory node provides basic information about the address and size
4of the physical memory. This node is usually filled or updated by the
5bootloader, depending on the actual memory configuration of the given
6hardware.
7
8The memory layout is described by the following node:
9
10/ {
11 #address-cells = <(n)>;
12 #size-cells = <(m)>;
13 memory {
14 device_type = "memory";
15 reg = <(baseaddr1) (size1)
16 (baseaddr2) (size2)
17 ...
18 (baseaddrN) (sizeN)>;
19 };
20 ...
21};
22
23A memory node follows the typical device tree rules for "reg" property:
24n: number of cells used to store base address value
25m: number of cells used to store size value
26baseaddrX: defines a base address of the defined memory bank
27sizeX: the size of the defined memory bank
28
29
30More than one memory bank can be defined.
31
32
33*** Reserved memory regions ***
34
35In /memory/reserved-memory node one can create child nodes describing
36particular reserved (excluded from normal use) memory regions. Such
37memory regions are usually designed for the special usage by various
38device drivers. A good example are contiguous memory allocations or
39memory sharing with other operating system on the same hardware board.
40Those special memory regions might depend on the board configuration and
41devices used on the target system.
42
43Parameters for each memory region can be encoded into the device tree
44with the following convention:
45
46[(label):] (name) {
47 compatible = "linux,contiguous-memory-region", "reserved-memory-region";
48 reg = <(address) (size)>;
49 (linux,default-contiguous-region);
50};
51
52compatible: one or more of:
53 - "linux,contiguous-memory-region" - enables binding of this
54 region to Contiguous Memory Allocator (special region for
55 contiguous memory allocations, shared with movable system
56 memory, Linux kernel-specific).
57 - "reserved-memory-region" - compatibility is defined, given
58 region is assigned for exclusive usage for by the respective
59 devices.
60
61reg: standard property defining the base address and size of
62 the memory region
63
64linux,default-contiguous-region: property indicating that the region
65 is the default region for all contiguous memory
66 allocations, Linux specific (optional)
67
68It is optional to specify the base address, so if one wants to use
69autoconfiguration of the base address, '0' can be specified as a base
70address in the 'reg' property.
71
72The /memory/reserved-memory node must contain the same #address-cells
73and #size-cells value as the root node.
74
75
76*** Device node's properties ***
77
78Once regions in the /memory/reserved-memory node have been defined, they
79may be referenced by other device nodes. Bindings that wish to reference
80memory regions should explicitly document their use of the following
81property:
82
83memory-region = <&phandle_to_defined_region>;
84
85This property indicates that the device driver should use the memory
86region pointed by the given phandle.
87
88
89*** Example ***
90
91This example defines a memory consisting of 4 memory banks. 3 contiguous
92regions are defined for Linux kernel, one default of all device drivers
93(named contig_mem, placed at 0x72000000, 64MiB), one dedicated to the
94framebuffer device (labelled display_mem, placed at 0x78000000, 8MiB)
95and one for multimedia processing (labelled multimedia_mem, placed at
960x77000000, 64MiB). 'display_mem' region is then assigned to fb@12300000
97device for DMA memory allocations (Linux kernel drivers will use CMA is
98available or dma-exclusive usage otherwise). 'multimedia_mem' is
99assigned to scaler@12500000 and codec@12600000 devices for contiguous
100memory allocations when CMA driver is enabled.
101
102The reason for creating a separate region for framebuffer device is to
103match the framebuffer base address to the one configured by bootloader,
104so once Linux kernel drivers starts no glitches on the displayed boot
105logo appears. Scaller and codec drivers should share the memory
106allocations.
107
108/ {
109 #address-cells = <1>;
110 #size-cells = <1>;
111
112 /* ... */
113
114 memory {
115 reg = <0x40000000 0x10000000
116 0x50000000 0x10000000
117 0x60000000 0x10000000
118 0x70000000 0x10000000>;
119
120 reserved-memory {
121 #address-cells = <1>;
122 #size-cells = <1>;
123
124 /*
125 * global autoconfigured region for contiguous allocations
126 * (used only with Contiguous Memory Allocator)
127 */
128 contig_region@0 {
129 compatible = "linux,contiguous-memory-region";
130 reg = <0x0 0x4000000>;
131 linux,default-contiguous-region;
132 };
133
134 /*
135 * special region for framebuffer
136 */
137 display_region: region@78000000 {
138 compatible = "linux,contiguous-memory-region", "reserved-memory-region";
139 reg = <0x78000000 0x800000>;
140 };
141
142 /*
143 * special region for multimedia processing devices
144 */
145 multimedia_region: region@77000000 {
146 compatible = "linux,contiguous-memory-region";
147 reg = <0x77000000 0x4000000>;
148 };
149 };
150 };
151
152 /* ... */
153
154 fb0: fb@12300000 {
155 status = "okay";
156 memory-region = <&display_region>;
157 };
158
159 scaler: scaler@12500000 {
160 status = "okay";
161 memory-region = <&multimedia_region>;
162 };
163
164 codec: codec@12600000 {
165 status = "okay";
166 memory-region = <&multimedia_region>;
167 };
168};
Documentation/devicetree/bindings/mmc/tmio_mmc.txt+10−7
@@ -9,12 +9,15 @@ compulsory and any optional properties, common to all SD/MMC drivers, as · 8 unmodified lines
9described in mmc.txt, can be used. Additionally the following tmio_mmc-specific9described in mmc.txt, can be used. Additionally the following tmio_mmc-specific
10optional bindings can be used.10optional bindings can be used.
11 11
12Required properties:
13- compatible: "renesas,sdhi-shmobile" - a generic sh-mobile SDHI unit
14 "renesas,sdhi-sh7372" - SDHI IP on SH7372 SoC
15 "renesas,sdhi-sh73a0" - SDHI IP on SH73A0 SoC
16 "renesas,sdhi-r8a73a4" - SDHI IP on R8A73A4 SoC
17 "renesas,sdhi-r8a7740" - SDHI IP on R8A7740 SoC
18 "renesas,sdhi-r8a7778" - SDHI IP on R8A7778 SoC
19 "renesas,sdhi-r8a7779" - SDHI IP on R8A7779 SoC
20 "renesas,sdhi-r8a7790" - SDHI IP on R8A7790 SoC
21
12Optional properties:22Optional properties:
13- toshiba,mmc-wrprotect-disable: write-protect detection is unavailable23- toshiba,mmc-wrprotect-disable: write-protect detection is unavailable
14
15When used with Renesas SDHI hardware, the following compatibility strings
16configure various model-specific properties:
17
18"renesas,sh7372-sdhi": (default) compatible with SH7372
19"renesas,r8a7740-sdhi": compatible with R8A7740: certain MMC/SD commands have to
20 wait for the interface to become idle.
Documentation/sound/alsa/HD-Audio-Models.txt+1−0
@@ -28,6 +28,7 @@ ALC269/270/275/276/28x/29x · 27 unmodified lines
28 alc269-dmic Enable ALC269(VA) digital mic workaround28 alc269-dmic Enable ALC269(VA) digital mic workaround
29 alc271-dmic Enable ALC271X digital mic workaround29 alc271-dmic Enable ALC271X digital mic workaround
30 inv-dmic Inverted internal mic workaround30 inv-dmic Inverted internal mic workaround
31 headset-mic Indicates a combined headset (headphone+mic) jack
31 lenovo-dock Enables docking station I/O for some Lenovos32 lenovo-dock Enables docking station I/O for some Lenovos
32 dell-headset-multi Headset jack, which can also be used as mic-in33 dell-headset-multi Headset jack, which can also be used as mic-in
33 dell-headset-dock Headset jack (without mic-in), and also dock I/O34 dell-headset-dock Headset jack (without mic-in), and also dock I/O
MAINTAINERS+40−14
@@ -237,11 +237,11 @@ F: drivers/platform/x86/acer-wmi.c · 236 unmodified lines
237 237
238ACPI238ACPI
239M: Len Brown <lenb@kernel.org>239M: Len Brown <lenb@kernel.org>
240M: Rafael J. Wysocki <rjw@sisk.pl>240M: Rafael J. Wysocki <rjw@rjwysocki.net>
241L: linux-acpi@vger.kernel.org241L: linux-acpi@vger.kernel.org
242W: http://www.lesswatts.org/projects/acpi/242W: https://01.org/linux-acpi
243Q: http://patchwork.kernel.org/project/linux-acpi/list/243Q: https://patchwork.kernel.org/project/linux-acpi/list/
244T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux244T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
245S: Supported245S: Supported
246F: drivers/acpi/246F: drivers/acpi/
247F: drivers/pnp/pnpacpi/247F: drivers/pnp/pnpacpi/
@@ -256,21 +256,21 @@ F: drivers/pci/*/*/*acpi* · 8 unmodified lines
256ACPI FAN DRIVER256ACPI FAN DRIVER
257M: Zhang Rui <rui.zhang@intel.com>257M: Zhang Rui <rui.zhang@intel.com>
258L: linux-acpi@vger.kernel.org258L: linux-acpi@vger.kernel.org
259W: http://www.lesswatts.org/projects/acpi/259W: https://01.org/linux-acpi
260S: Supported260S: Supported
261F: drivers/acpi/fan.c261F: drivers/acpi/fan.c
262 262
263ACPI THERMAL DRIVER263ACPI THERMAL DRIVER
264M: Zhang Rui <rui.zhang@intel.com>264M: Zhang Rui <rui.zhang@intel.com>
265L: linux-acpi@vger.kernel.org265L: linux-acpi@vger.kernel.org
266W: http://www.lesswatts.org/projects/acpi/266W: https://01.org/linux-acpi
267S: Supported267S: Supported
268F: drivers/acpi/*thermal*268F: drivers/acpi/*thermal*
269 269
270ACPI VIDEO DRIVER270ACPI VIDEO DRIVER
271M: Zhang Rui <rui.zhang@intel.com>271M: Zhang Rui <rui.zhang@intel.com>
272L: linux-acpi@vger.kernel.org272L: linux-acpi@vger.kernel.org
273W: http://www.lesswatts.org/projects/acpi/273W: https://01.org/linux-acpi
274S: Supported274S: Supported
275F: drivers/acpi/video.c275F: drivers/acpi/video.c
276 276
@@ -824,15 +824,21 @@ S: Maintained · 547 unmodified lines
824F: arch/arm/mach-gemini/824F: arch/arm/mach-gemini/
825 825
826ARM/CSR SIRFPRIMA2 MACHINE SUPPORT826ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
827M: Barry Song <baohua.song@csr.com>827M: Barry Song <baohua@kernel.org>
828L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)828L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
829T: git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git829T: git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
830S: Maintained830S: Maintained
831F: arch/arm/mach-prima2/831F: arch/arm/mach-prima2/
832F: drivers/clk/clk-prima2.c
833F: drivers/clocksource/timer-prima2.c
834F: drivers/clocksource/timer-marco.c
832F: drivers/dma/sirf-dma.c835F: drivers/dma/sirf-dma.c
833F: drivers/i2c/busses/i2c-sirf.c836F: drivers/i2c/busses/i2c-sirf.c
837F: drivers/input/misc/sirfsoc-onkey.c
838F: drivers/irqchip/irq-sirfsoc.c
834F: drivers/mmc/host/sdhci-sirf.c839F: drivers/mmc/host/sdhci-sirf.c
835F: drivers/pinctrl/sirf/840F: drivers/pinctrl/sirf/
841F: drivers/rtc/rtc-sirfsoc.c
836F: drivers/spi/spi-sirf.c842F: drivers/spi/spi-sirf.c
837 843
838ARM/EBSA110 MACHINE SUPPORT844ARM/EBSA110 MACHINE SUPPORT
@@ -2295,7 +2301,7 @@ S: Maintained · 1456 unmodified lines
2295F: drivers/net/ethernet/ti/cpmac.c2301F: drivers/net/ethernet/ti/cpmac.c
2296 2302
2297CPU FREQUENCY DRIVERS2303CPU FREQUENCY DRIVERS
2298M: Rafael J. Wysocki <rjw@sisk.pl>2304M: Rafael J. Wysocki <rjw@rjwysocki.net>
2299M: Viresh Kumar <viresh.kumar@linaro.org>2305M: Viresh Kumar <viresh.kumar@linaro.org>
2300L: cpufreq@vger.kernel.org2306L: cpufreq@vger.kernel.org
2301L: linux-pm@vger.kernel.org2307L: linux-pm@vger.kernel.org
@@ -2326,7 +2332,7 @@ S: Maintained · 24 unmodified lines
2326F: drivers/cpuidle/cpuidle-big_little.c2332F: drivers/cpuidle/cpuidle-big_little.c
2327 2333
2328CPUIDLE DRIVERS2334CPUIDLE DRIVERS
2329M: Rafael J. Wysocki <rjw@sisk.pl>2335M: Rafael J. Wysocki <rjw@rjwysocki.net>
2330M: Daniel Lezcano <daniel.lezcano@linaro.org>2336M: Daniel Lezcano <daniel.lezcano@linaro.org>
2331L: linux-pm@vger.kernel.org2337L: linux-pm@vger.kernel.org
2332S: Maintained2338S: Maintained
@@ -3548,7 +3554,7 @@ F: fs/freevxfs/ · 1215 unmodified lines
3548 3554
3549FREEZER3555FREEZER
3550M: Pavel Machek <pavel@ucw.cz>3556M: Pavel Machek <pavel@ucw.cz>
3551M: "Rafael J. Wysocki" <rjw@sisk.pl>3557M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
3552L: linux-pm@vger.kernel.org3558L: linux-pm@vger.kernel.org
3553S: Supported3559S: Supported
3554F: Documentation/power/freezing-of-tasks.txt3560F: Documentation/power/freezing-of-tasks.txt
@@ -3619,6 +3625,12 @@ L: linux-scsi@vger.kernel.org · 64 unmodified lines
3619S: Odd Fixes (e.g., new signatures)3625S: Odd Fixes (e.g., new signatures)
3620F: drivers/scsi/fdomain.*3626F: drivers/scsi/fdomain.*
3621 3627
3628GCOV BASED KERNEL PROFILING
3629M: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
3630S: Maintained
3631F: kernel/gcov/
3632F: Documentation/gcov.txt
3633
3622GDT SCSI DISK ARRAY CONTROLLER DRIVER3634GDT SCSI DISK ARRAY CONTROLLER DRIVER
3623M: Achim Leubner <achim_leubner@adaptec.com>3635M: Achim Leubner <achim_leubner@adaptec.com>
3624L: linux-scsi@vger.kernel.org3636L: linux-scsi@vger.kernel.org
@@ -3884,7 +3896,7 @@ F: drivers/video/hgafb.c · 259 unmodified lines
3884 3896
3885HIBERNATION (aka Software Suspend, aka swsusp)3897HIBERNATION (aka Software Suspend, aka swsusp)
3886M: Pavel Machek <pavel@ucw.cz>3898M: Pavel Machek <pavel@ucw.cz>
3887M: "Rafael J. Wysocki" <rjw@sisk.pl>3899M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
3888L: linux-pm@vger.kernel.org3900L: linux-pm@vger.kernel.org
3889S: Supported3901S: Supported
3890F: arch/x86/power/3902F: arch/x86/power/
@@ -4334,7 +4346,7 @@ F: drivers/video/i810/ · 443 unmodified lines
4334INTEL MENLOW THERMAL DRIVER4346INTEL MENLOW THERMAL DRIVER
4335M: Sujith Thomas <sujith.thomas@intel.com>4347M: Sujith Thomas <sujith.thomas@intel.com>
4336L: platform-driver-x86@vger.kernel.org4348L: platform-driver-x86@vger.kernel.org
4337W: http://www.lesswatts.org/projects/acpi/4349W: https://01.org/linux-acpi
4338S: Supported4350S: Supported
4339F: drivers/platform/x86/intel_menlow.c4351F: drivers/platform/x86/intel_menlow.c
4340 4352
@@ -4471,6 +4483,13 @@ L: linux-serial@vger.kernel.org · 130 unmodified lines
4471S: Maintained4483S: Maintained
4472F: drivers/tty/serial/ioc3_serial.c4484F: drivers/tty/serial/ioc3_serial.c
4473 4485
4486IOMMU DRIVERS
4487M: Joerg Roedel <joro@8bytes.org>
4488L: iommu@lists.linux-foundation.org
4489T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
4490S: Maintained
4491F: drivers/iommu/
4492
4474IP MASQUERADING4493IP MASQUERADING
4475M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>4494M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
4476S: Maintained4495S: Maintained
@@ -7812,6 +7831,13 @@ F: Documentation/sound/alsa/soc/ · 3335 unmodified lines
7812F: sound/soc/7831F: sound/soc/
7813F: include/sound/soc*7832F: include/sound/soc*
7814 7833
7834SOUND - DMAENGINE HELPERS
7835M: Lars-Peter Clausen <lars@metafoo.de>
7836S: Supported
7837F: include/sound/dmaengine_pcm.h
7838F: sound/core/pcm_dmaengine.c
7839F: sound/soc/soc-generic-dmaengine-pcm.c
7840
7815SPARC + UltraSPARC (sparc/sparc64)7841SPARC + UltraSPARC (sparc/sparc64)
7816M: "David S. Miller" <davem@davemloft.net>7842M: "David S. Miller" <davem@davemloft.net>
7817L: sparclinux@vger.kernel.org7843L: sparclinux@vger.kernel.org
@@ -8091,7 +8117,7 @@ F: drivers/sh/ · 273 unmodified lines
8091SUSPEND TO RAM8117SUSPEND TO RAM
8092M: Len Brown <len.brown@intel.com>8118M: Len Brown <len.brown@intel.com>
8093M: Pavel Machek <pavel@ucw.cz>8119M: Pavel Machek <pavel@ucw.cz>
8094M: "Rafael J. Wysocki" <rjw@sisk.pl>8120M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
8095L: linux-pm@vger.kernel.org8121L: linux-pm@vger.kernel.org
8096S: Supported8122S: Supported
8097F: Documentation/power/8123F: Documentation/power/
Makefile+1−1
@@ -1,7 +1,7 @@
1VERSION = 31VERSION = 3
2PATCHLEVEL = 122PATCHLEVEL = 12
3SUBLEVEL = 03SUBLEVEL = 0
4EXTRAVERSION = -rc34EXTRAVERSION = -rc6
5NAME = One Giant Leap for Frogkind5NAME = One Giant Leap for Frogkind
6 6
7# *DOCUMENTATION*7# *DOCUMENTATION*
arch/arc/kernel/ptrace.c+1−1
@@ -102,7 +102,7 @@ static int genregs_set(struct task_struct *target, · 101 unmodified lines
102 REG_IGNORE_ONE(pad2);102 REG_IGNORE_ONE(pad2);
103 REG_IN_CHUNK(callee, efa, cregs); /* callee_regs[r25..r13] */103 REG_IN_CHUNK(callee, efa, cregs); /* callee_regs[r25..r13] */
104 REG_IGNORE_ONE(efa); /* efa update invalid */104 REG_IGNORE_ONE(efa); /* efa update invalid */
105 REG_IN_ONE(stop_pc, &ptregs->ret); /* stop_pc: PC update */105 REG_IGNORE_ONE(stop_pc); /* PC updated via @ret */
106 106
107 return ret;107 return ret;
108}108}
arch/arc/kernel/signal.c+13−12
@@ -101,7 +101,6 @@ SYSCALL_DEFINE0(rt_sigreturn) · 100 unmodified lines
101{101{
102 struct rt_sigframe __user *sf;102 struct rt_sigframe __user *sf;
103 unsigned int magic;103 unsigned int magic;
104 int err;
105 struct pt_regs *regs = current_pt_regs();104 struct pt_regs *regs = current_pt_regs();
106 105
107 /* Always make any pending restarted system calls return -EINTR */106 /* Always make any pending restarted system calls return -EINTR */
@@ -119,15 +118,16 @@ SYSCALL_DEFINE0(rt_sigreturn) · 11 unmodified lines
119 if (!access_ok(VERIFY_READ, sf, sizeof(*sf)))118 if (!access_ok(VERIFY_READ, sf, sizeof(*sf)))
120 goto badframe;119 goto badframe;
121 120
122 err = restore_usr_regs(regs, sf);121 if (__get_user(magic, &sf->sigret_magic))
123 err |= __get_user(magic, &sf->sigret_magic);
124 if (err)
125 goto badframe;122 goto badframe;
126 123
127 if (unlikely(is_do_ss_needed(magic)))124 if (unlikely(is_do_ss_needed(magic)))
128 if (restore_altstack(&sf->uc.uc_stack))125 if (restore_altstack(&sf->uc.uc_stack))
129 goto badframe;126 goto badframe;
130 127
128 if (restore_usr_regs(regs, sf))
129 goto badframe;
130
131 /* Don't restart from sigreturn */131 /* Don't restart from sigreturn */
132 syscall_wont_restart(regs);132 syscall_wont_restart(regs);
133 133
@@ -190,6 +190,15 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info, · 56 unmodified lines
190 if (!sf)190 if (!sf)
191 return 1;191 return 1;
192 192
193 /*
194 * w/o SA_SIGINFO, struct ucontext is partially populated (only
195 * uc_mcontext/uc_sigmask) for kernel's normal user state preservation
196 * during signal handler execution. This works for SA_SIGINFO as well
197 * although the semantics are now overloaded (the same reg state can be
198 * inspected by userland: but are they allowed to fiddle with it ?
199 */
200 err |= stash_usr_regs(sf, regs, set);
201
193 /*202 /*
194 * SA_SIGINFO requires 3 args to signal handler:203 * SA_SIGINFO requires 3 args to signal handler:
195 * #1: sig-no (common to any handler)204 * #1: sig-no (common to any handler)
@@ -213,14 +222,6 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info, · 17 unmodified lines
213 magic = MAGIC_SIGALTSTK;222 magic = MAGIC_SIGALTSTK;
214 }223 }
215 224
216 /*
217 * w/o SA_SIGINFO, struct ucontext is partially populated (only
218 * uc_mcontext/uc_sigmask) for kernel's normal user state preservation
219 * during signal handler execution. This works for SA_SIGINFO as well
220 * although the semantics are now overloaded (the same reg state can be
221 * inspected by userland: but are they allowed to fiddle with it ?
222 */
223 err |= stash_usr_regs(sf, regs, set);
224 err |= __put_user(magic, &sf->sigret_magic);225 err |= __put_user(magic, &sf->sigret_magic);
225 if (err)226 if (err)
226 return err;227 return err;
arch/arm/Makefile+7−2
@@ -296,10 +296,15 @@ archprepare: · 295 unmodified lines
296# Convert bzImage to zImage296# Convert bzImage to zImage
297bzImage: zImage297bzImage: zImage
298 298
299zImage Image xipImage bootpImage uImage: vmlinux299BOOT_TARGETS = zImage Image xipImage bootpImage uImage
300INSTALL_TARGETS = zinstall uinstall install
301
302PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS)
303
304$(BOOT_TARGETS): vmlinux
300 $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@305 $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
301 306
302zinstall uinstall install: vmlinux307$(INSTALL_TARGETS):
303 $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@308 $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
304 309
305%.dtb: | scripts310%.dtb: | scripts
arch/arm/boot/Makefile+8−8
@@ -95,24 +95,24 @@ initrd: · 94 unmodified lines
95 @test "$(INITRD)" != "" || \95 @test "$(INITRD)" != "" || \
96 (echo You must specify INITRD; exit -1)96 (echo You must specify INITRD; exit -1)
97 97
98install: $(obj)/Image98install:
99 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \99 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
100 $(obj)/Image System.map "$(INSTALL_PATH)"100 $(obj)/Image System.map "$(INSTALL_PATH)"
101 101
102zinstall: $(obj)/zImage102zinstall:
103 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \103 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
104 $(obj)/zImage System.map "$(INSTALL_PATH)"104 $(obj)/zImage System.map "$(INSTALL_PATH)"
105 105
106uinstall: $(obj)/uImage106uinstall:
107 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \107 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
108 $(obj)/uImage System.map "$(INSTALL_PATH)"108 $(obj)/uImage System.map "$(INSTALL_PATH)"
109 109
110zi:110zi:
111 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \111 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
112 $(obj)/zImage System.map "$(INSTALL_PATH)"112 $(obj)/zImage System.map "$(INSTALL_PATH)"
113 113
114i:114i:
115 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \115 $(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
116 $(obj)/Image System.map "$(INSTALL_PATH)"116 $(obj)/Image System.map "$(INSTALL_PATH)"
117 117
118subdir- := bootp compressed dts118subdir- := bootp compressed dts
arch/arm/boot/dts/Makefile+2−0
@@ -41,6 +41,8 @@ dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb · 40 unmodified lines
41dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb41dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb
42dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb42dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb
43 43
44dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb
45
44dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb46dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
45dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \47dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
46 bcm28155-ap.dtb48 bcm28155-ap.dtb
arch/arm/boot/dts/armada-370-netgear-rn102.dts+32−17
@@ -27,6 +27,25 @@ · 26 unmodified lines
27 };27 };
28 28
29 soc {29 soc {
30 ranges = <MBUS_ID(0xf0, 0x01) 0 0xd0000000 0x100000
31 MBUS_ID(0x01, 0xe0) 0 0xfff00000 0x100000>;
32
33 pcie-controller {
34 status = "okay";
35
36 /* Connected to Marvell SATA controller */
37 pcie@1,0 {
38 /* Port 0, Lane 0 */
39 status = "okay";
40 };
41
42 /* Connected to FL1009 USB 3.0 controller */
43 pcie@2,0 {
44 /* Port 1, Lane 0 */
45 status = "okay";
46 };
47 };
48
30 internal-regs {49 internal-regs {
31 serial@12000 {50 serial@12000 {
32 clock-frequency = <200000000>;51 clock-frequency = <200000000>;
@@ -57,6 +76,11 @@ · 24 unmodified lines
57 marvell,pins = "mpp56";76 marvell,pins = "mpp56";
58 marvell,function = "gpio";77 marvell,function = "gpio";
59 };78 };
79
80 poweroff: poweroff {
81 marvell,pins = "mpp8";
82 marvell,function = "gpio";
83 };
60 };84 };
61 85
62 mdio {86 mdio {
@@ -89,22 +113,6 @@ · 26 unmodified lines
89 pwm_polarity = <0>;113 pwm_polarity = <0>;
90 };114 };
91 };115 };
92
93 pcie-controller {
94 status = "okay";
95
96 /* Connected to Marvell SATA controller */
97 pcie@1,0 {
98 /* Port 0, Lane 0 */
99 status = "okay";
100 };
101
102 /* Connected to FL1009 USB 3.0 controller */
103 pcie@2,0 {
104 /* Port 1, Lane 0 */
105 status = "okay";
106 };
107 };
108 };116 };
109 };117 };
110 118
@@ -160,7 +168,7 @@ · 49 unmodified lines
160 button@1 {168 button@1 {
161 label = "Power Button";169 label = "Power Button";
162 linux,code = <116>; /* KEY_POWER */170 linux,code = <116>; /* KEY_POWER */
163 gpios = <&gpio1 30 1>;171 gpios = <&gpio1 30 0>;
164 };172 };
165 173
166 button@2 {174 button@2 {
@@ -176,4 +184,11 @@ · 9 unmodified lines
176 };184 };
177 };185 };
178 186
187 gpio_poweroff {
188 compatible = "gpio-poweroff";
189 pinctrl-0 = <&poweroff>;
190 pinctrl-names = "default";
191 gpios = <&gpio0 8 1>;
192 };
193
179};194};
arch/arm/boot/dts/armada-xp.dtsi+11−0
@@ -70,6 +70,8 @@ · 69 unmodified lines
70 70
71 timer@20300 {71 timer@20300 {
72 compatible = "marvell,armada-xp-timer";72 compatible = "marvell,armada-xp-timer";
73 clocks = <&coreclk 2>, <&refclk>;
74 clock-names = "nbclk", "fixed";
73 };75 };
74 76
75 coreclk: mvebu-sar@18230 {77 coreclk: mvebu-sar@18230 {
@@ -169,4 +171,13 @@ · 93 unmodified lines
169 };171 };
170 };172 };
171 };173 };
174
175 clocks {
176 /* 25 MHz reference crystal */
177 refclk: oscillator {
178 compatible = "fixed-clock";
179 #clock-cells = <0>;
180 clock-frequency = <25000000>;
181 };
182 };
172};183};
arch/arm/boot/dts/at91sam9x5.dtsi+4−2
@@ -190,12 +190,12 @@ · 189 unmodified lines
190 AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>; /* PA8 periph A */190 AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>; /* PA8 periph A */
191 };191 };
192 192
193 pinctrl_uart2_rts: uart2_rts-0 {193 pinctrl_usart2_rts: usart2_rts-0 {
194 atmel,pins =194 atmel,pins =
195 <AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB0 periph B */195 <AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB0 periph B */
196 };196 };
197 197
198 pinctrl_uart2_cts: uart2_cts-0 {198 pinctrl_usart2_cts: usart2_cts-0 {
199 atmel,pins =199 atmel,pins =
200 <AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB1 periph B */200 <AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB1 periph B */
201 };201 };
@@ -556,6 +556,7 @@ · 354 unmodified lines
556 interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;556 interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
557 dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;557 dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;
558 dma-names = "rxtx";558 dma-names = "rxtx";
559 pinctrl-names = "default";
559 #address-cells = <1>;560 #address-cells = <1>;
560 #size-cells = <0>;561 #size-cells = <0>;
561 status = "disabled";562 status = "disabled";
@@ -567,6 +568,7 @@ · 5 unmodified lines
567 interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;568 interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;
568 dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;569 dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;
569 dma-names = "rxtx";570 dma-names = "rxtx";
571 pinctrl-names = "default";
570 #address-cells = <1>;572 #address-cells = <1>;
571 #size-cells = <0>;573 #size-cells = <0>;
572 status = "disabled";574 status = "disabled";
arch/arm/boot/dts/atlas6.dtsi+12−0
@@ -181,6 +181,8 @@ · 180 unmodified lines
181 interrupts = <17>;181 interrupts = <17>;
182 fifosize = <128>;182 fifosize = <128>;
183 clocks = <&clks 13>;183 clocks = <&clks 13>;
184 sirf,uart-dma-rx-channel = <21>;
185 sirf,uart-dma-tx-channel = <2>;
184 };186 };
185 187
186 uart1: uart@b0060000 {188 uart1: uart@b0060000 {
@@ -199,6 +201,8 @@ · 12 unmodified lines
199 interrupts = <19>;201 interrupts = <19>;
200 fifosize = <128>;202 fifosize = <128>;
201 clocks = <&clks 15>;203 clocks = <&clks 15>;
204 sirf,uart-dma-rx-channel = <6>;
205 sirf,uart-dma-tx-channel = <7>;
202 };206 };
203 207
204 usp0: usp@b0080000 {208 usp0: usp@b0080000 {
@@ -206,7 +210,10 @@ · 1 unmodified line
206 compatible = "sirf,prima2-usp";210 compatible = "sirf,prima2-usp";
207 reg = <0xb0080000 0x10000>;211 reg = <0xb0080000 0x10000>;
208 interrupts = <20>;212 interrupts = <20>;
213 fifosize = <128>;
209 clocks = <&clks 28>;214 clocks = <&clks 28>;
215 sirf,usp-dma-rx-channel = <17>;
216 sirf,usp-dma-tx-channel = <18>;
210 };217 };
211 218
212 usp1: usp@b0090000 {219 usp1: usp@b0090000 {
@@ -214,7 +221,10 @@ · 1 unmodified line
214 compatible = "sirf,prima2-usp";221 compatible = "sirf,prima2-usp";
215 reg = <0xb0090000 0x10000>;222 reg = <0xb0090000 0x10000>;
216 interrupts = <21>;223 interrupts = <21>;
224 fifosize = <128>;
217 clocks = <&clks 29>;225 clocks = <&clks 29>;
226 sirf,usp-dma-rx-channel = <14>;
227 sirf,usp-dma-tx-channel = <15>;
218 };228 };
219 229
220 dmac0: dma-controller@b00b0000 {230 dmac0: dma-controller@b00b0000 {
@@ -237,6 +247,8 @@ · 16 unmodified lines
237 compatible = "sirf,prima2-vip";247 compatible = "sirf,prima2-vip";
238 reg = <0xb00C0000 0x10000>;248 reg = <0xb00C0000 0x10000>;
239 clocks = <&clks 31>;249 clocks = <&clks 31>;
250 interrupts = <14>;
251 sirf,vip-dma-rx-channel = <16>;
240 };252 };
241 253
242 spi0: spi@b00d0000 {254 spi0: spi@b00d0000 {
arch/arm/boot/dts/exynos5250.dtsi+5−0
@@ -96,6 +96,11 @@ · 95 unmodified lines
96 <1 14 0xf08>,96 <1 14 0xf08>,
97 <1 11 0xf08>,97 <1 11 0xf08>,
98 <1 10 0xf08>;98 <1 10 0xf08>;
99 /* Unfortunately we need this since some versions of U-Boot
100 * on Exynos don't set the CNTFRQ register, so we need the
101 * value from DT.
102 */
103 clock-frequency = <24000000>;
99 };104 };
100 105
101 mct@101C0000 {106 mct@101C0000 {
arch/arm/boot/dts/kirkwood.dtsi+2−1
@@ -13,6 +13,7 @@ · 12 unmodified lines
13 cpu@0 {13 cpu@0 {
14 device_type = "cpu";14 device_type = "cpu";
15 compatible = "marvell,feroceon";15 compatible = "marvell,feroceon";
16 reg = <0>;
16 clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;17 clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;
17 clock-names = "cpu_clk", "ddrclk", "powersave";18 clock-names = "cpu_clk", "ddrclk", "powersave";
18 };19 };
@@ -167,7 +168,7 @@ · 148 unmodified lines
167 xor@60900 {168 xor@60900 {
168 compatible = "marvell,orion-xor";169 compatible = "marvell,orion-xor";
169 reg = <0x60900 0x100170 reg = <0x60900 0x100
170 0xd0B00 0x100>;171 0x60B00 0x100>;
171 status = "okay";172 status = "okay";
172 clocks = <&gate_clk 16>;173 clocks = <&gate_clk 16>;
173 174
arch/arm/boot/dts/omap3-beagle-xm.dts+1−1
@@ -11,7 +11,7 @@ · 10 unmodified lines
11 11
12/ {12/ {
13 model = "TI OMAP3 BeagleBoard xM";13 model = "TI OMAP3 BeagleBoard xM";
14 compatible = "ti,omap3-beagle-xm", "ti,omap3-beagle", "ti,omap3";14 compatible = "ti,omap3-beagle-xm", "ti,omap36xx", "ti,omap3";
15 15
16 cpus {16 cpus {
17 cpu@0 {17 cpu@0 {
arch/arm/boot/dts/omap3.dtsi+2−2
@@ -108,7 +108,7 @@ · 107 unmodified lines
108 #address-cells = <1>;108 #address-cells = <1>;
109 #size-cells = <0>;109 #size-cells = <0>;
110 pinctrl-single,register-width = <16>;110 pinctrl-single,register-width = <16>;
111 pinctrl-single,function-mask = <0x7f1f>;111 pinctrl-single,function-mask = <0xff1f>;
112 };112 };
113 113
114 omap3_pmx_wkup: pinmux@0x48002a00 {114 omap3_pmx_wkup: pinmux@0x48002a00 {
@@ -117,7 +117,7 @@ · 2 unmodified lines
117 #address-cells = <1>;117 #address-cells = <1>;
118 #size-cells = <0>;118 #size-cells = <0>;
119 pinctrl-single,register-width = <16>;119 pinctrl-single,register-width = <16>;
120 pinctrl-single,function-mask = <0x7f1f>;120 pinctrl-single,function-mask = <0xff1f>;
121 };121 };
122 122
123 gpio1: gpio@48310000 {123 gpio1: gpio@48310000 {
arch/arm/boot/dts/prima2.dtsi+23−4
@@ -171,7 +171,8 @@ · 170 unmodified lines
171 compatible = "simple-bus";171 compatible = "simple-bus";
172 #address-cells = <1>;172 #address-cells = <1>;
173 #size-cells = <1>;173 #size-cells = <1>;
174 ranges = <0xb0000000 0xb0000000 0x180000>;174 ranges = <0xb0000000 0xb0000000 0x180000>,
175 <0x56000000 0x56000000 0x1b00000>;
175 176
176 timer@b0020000 {177 timer@b0020000 {
177 compatible = "sirf,prima2-tick";178 compatible = "sirf,prima2-tick";
@@ -196,25 +197,32 @@ · 18 unmodified lines
196 uart0: uart@b0050000 {197 uart0: uart@b0050000 {
197 cell-index = <0>;198 cell-index = <0>;
198 compatible = "sirf,prima2-uart";199 compatible = "sirf,prima2-uart";
199 reg = <0xb0050000 0x10000>;200 reg = <0xb0050000 0x1000>;
200 interrupts = <17>;201 interrupts = <17>;
202 fifosize = <128>;
201 clocks = <&clks 13>;203 clocks = <&clks 13>;
204 sirf,uart-dma-rx-channel = <21>;
205 sirf,uart-dma-tx-channel = <2>;
202 };206 };
203 207
204 uart1: uart@b0060000 {208 uart1: uart@b0060000 {
205 cell-index = <1>;209 cell-index = <1>;
206 compatible = "sirf,prima2-uart";210 compatible = "sirf,prima2-uart";
207 reg = <0xb0060000 0x10000>;211 reg = <0xb0060000 0x1000>;
208 interrupts = <18>;212 interrupts = <18>;
213 fifosize = <32>;
209 clocks = <&clks 14>;214 clocks = <&clks 14>;
210 };215 };
211 216
212 uart2: uart@b0070000 {217 uart2: uart@b0070000 {
213 cell-index = <2>;218 cell-index = <2>;
214 compatible = "sirf,prima2-uart";219 compatible = "sirf,prima2-uart";
215 reg = <0xb0070000 0x10000>;220 reg = <0xb0070000 0x1000>;
216 interrupts = <19>;221 interrupts = <19>;
222 fifosize = <128>;
217 clocks = <&clks 15>;223 clocks = <&clks 15>;
224 sirf,uart-dma-rx-channel = <6>;
225 sirf,uart-dma-tx-channel = <7>;
218 };226 };
219 227
220 usp0: usp@b0080000 {228 usp0: usp@b0080000 {
@@ -222,7 +230,10 @@ · 1 unmodified line
222 compatible = "sirf,prima2-usp";230 compatible = "sirf,prima2-usp";
223 reg = <0xb0080000 0x10000>;231 reg = <0xb0080000 0x10000>;
224 interrupts = <20>;232 interrupts = <20>;
233 fifosize = <128>;
225 clocks = <&clks 28>;234 clocks = <&clks 28>;
235 sirf,usp-dma-rx-channel = <17>;
236 sirf,usp-dma-tx-channel = <18>;
226 };237 };
227 238
228 usp1: usp@b0090000 {239 usp1: usp@b0090000 {
@@ -230,7 +241,10 @@ · 1 unmodified line
230 compatible = "sirf,prima2-usp";241 compatible = "sirf,prima2-usp";
231 reg = <0xb0090000 0x10000>;242 reg = <0xb0090000 0x10000>;
232 interrupts = <21>;243 interrupts = <21>;
244 fifosize = <128>;
233 clocks = <&clks 29>;245 clocks = <&clks 29>;
246 sirf,usp-dma-rx-channel = <14>;
247 sirf,usp-dma-tx-channel = <15>;
234 };248 };
235 249
236 usp2: usp@b00a0000 {250 usp2: usp@b00a0000 {
@@ -238,7 +252,10 @@ · 1 unmodified line
238 compatible = "sirf,prima2-usp";252 compatible = "sirf,prima2-usp";
239 reg = <0xb00a0000 0x10000>;253 reg = <0xb00a0000 0x10000>;
240 interrupts = <22>;254 interrupts = <22>;
255 fifosize = <128>;
241 clocks = <&clks 30>;256 clocks = <&clks 30>;
257 sirf,usp-dma-rx-channel = <10>;
258 sirf,usp-dma-tx-channel = <11>;
242 };259 };
243 260
244 dmac0: dma-controller@b00b0000 {261 dmac0: dma-controller@b00b0000 {
@@ -261,6 +278,8 @@ · 16 unmodified lines
261 compatible = "sirf,prima2-vip";278 compatible = "sirf,prima2-vip";
262 reg = <0xb00C0000 0x10000>;279 reg = <0xb00C0000 0x10000>;
263 clocks = <&clks 31>;280 clocks = <&clks 31>;
281 interrupts = <14>;
282 sirf,vip-dma-rx-channel = <16>;
264 };283 };
265 284
266 spi0: spi@b00d0000 {285 spi0: spi@b00d0000 {
arch/arm/boot/dts/r8a73a4.dtsi+3−3
@@ -193,7 +193,7 @@ · 192 unmodified lines
193 };193 };
194 194
195 sdhi0: sdhi@ee100000 {195 sdhi0: sdhi@ee100000 {
196 compatible = "renesas,r8a73a4-sdhi";196 compatible = "renesas,sdhi-r8a73a4";
197 reg = <0 0xee100000 0 0x100>;197 reg = <0 0xee100000 0 0x100>;
198 interrupt-parent = <&gic>;198 interrupt-parent = <&gic>;
199 interrupts = <0 165 4>;199 interrupts = <0 165 4>;
@@ -202,7 +202,7 @@ · 2 unmodified lines
202 };202 };
203 203
204 sdhi1: sdhi@ee120000 {204 sdhi1: sdhi@ee120000 {
205 compatible = "renesas,r8a73a4-sdhi";205 compatible = "renesas,sdhi-r8a73a4";
206 reg = <0 0xee120000 0 0x100>;206 reg = <0 0xee120000 0 0x100>;
207 interrupt-parent = <&gic>;207 interrupt-parent = <&gic>;
208 interrupts = <0 166 4>;208 interrupts = <0 166 4>;
@@ -211,7 +211,7 @@ · 2 unmodified lines
211 };211 };
212 212
213 sdhi2: sdhi@ee140000 {213 sdhi2: sdhi@ee140000 {
214 compatible = "renesas,r8a73a4-sdhi";214 compatible = "renesas,sdhi-r8a73a4";
215 reg = <0 0xee140000 0 0x100>;215 reg = <0 0xee140000 0 0x100>;
216 interrupt-parent = <&gic>;216 interrupt-parent = <&gic>;
217 interrupts = <0 167 4>;217 interrupts = <0 167 4>;
arch/arm/boot/dts/r8a7778.dtsi+0−1
@@ -96,6 +96,5 @@ · 95 unmodified lines
96 pfc: pfc@fffc0000 {96 pfc: pfc@fffc0000 {
97 compatible = "renesas,pfc-r8a7778";97 compatible = "renesas,pfc-r8a7778";
98 reg = <0xfffc000 0x118>;98 reg = <0xfffc000 0x118>;
99 #gpio-range-cells = <3>;
100 };99 };
101};100};
arch/arm/boot/dts/r8a7779.dtsi+0−1
@@ -188,7 +188,6 @@ · 187 unmodified lines
188 pfc: pfc@fffc0000 {188 pfc: pfc@fffc0000 {
189 compatible = "renesas,pfc-r8a7779";189 compatible = "renesas,pfc-r8a7779";
190 reg = <0xfffc0000 0x23c>;190 reg = <0xfffc0000 0x23c>;
191 #gpio-range-cells = <3>;
192 };191 };
193 192
194 thermal@ffc48000 {193 thermal@ffc48000 {
arch/arm/boot/dts/r8a7790.dtsi+4−5
@@ -148,11 +148,10 @@ · 147 unmodified lines
148 pfc: pfc@e6060000 {148 pfc: pfc@e6060000 {
149 compatible = "renesas,pfc-r8a7790";149 compatible = "renesas,pfc-r8a7790";
150 reg = <0 0xe6060000 0 0x250>;150 reg = <0 0xe6060000 0 0x250>;
151 #gpio-range-cells = <3>;
152 };151 };
153 152
154 sdhi0: sdhi@ee100000 {153 sdhi0: sdhi@ee100000 {
155 compatible = "renesas,r8a7790-sdhi";154 compatible = "renesas,sdhi-r8a7790";
156 reg = <0 0xee100000 0 0x100>;155 reg = <0 0xee100000 0 0x100>;
157 interrupt-parent = <&gic>;156 interrupt-parent = <&gic>;
158 interrupts = <0 165 4>;157 interrupts = <0 165 4>;
@@ -161,7 +160,7 @@ · 2 unmodified lines
161 };160 };
162 161
163 sdhi1: sdhi@ee120000 {162 sdhi1: sdhi@ee120000 {
164 compatible = "renesas,r8a7790-sdhi";163 compatible = "renesas,sdhi-r8a7790";
165 reg = <0 0xee120000 0 0x100>;164 reg = <0 0xee120000 0 0x100>;
166 interrupt-parent = <&gic>;165 interrupt-parent = <&gic>;
167 interrupts = <0 166 4>;166 interrupts = <0 166 4>;
@@ -170,7 +169,7 @@ · 2 unmodified lines
170 };169 };
171 170
172 sdhi2: sdhi@ee140000 {171 sdhi2: sdhi@ee140000 {
173 compatible = "renesas,r8a7790-sdhi";172 compatible = "renesas,sdhi-r8a7790";
174 reg = <0 0xee140000 0 0x100>;173 reg = <0 0xee140000 0 0x100>;
175 interrupt-parent = <&gic>;174 interrupt-parent = <&gic>;
176 interrupts = <0 167 4>;175 interrupts = <0 167 4>;
@@ -179,7 +178,7 @@ · 2 unmodified lines
179 };178 };
180 179
181 sdhi3: sdhi@ee160000 {180 sdhi3: sdhi@ee160000 {
182 compatible = "renesas,r8a7790-sdhi";181 compatible = "renesas,sdhi-r8a7790";
183 reg = <0 0xee160000 0 0x100>;182 reg = <0 0xee160000 0 0x100>;
184 interrupt-parent = <&gic>;183 interrupt-parent = <&gic>;
185 interrupts = <0 168 4>;184 interrupts = <0 168 4>;
arch/arm/boot/dts/sh73a0.dtsi+3−3
@@ -196,7 +196,7 @@ · 195 unmodified lines
196 };196 };
197 197
198 sdhi0: sdhi@ee100000 {198 sdhi0: sdhi@ee100000 {
199 compatible = "renesas,r8a7740-sdhi";199 compatible = "renesas,sdhi-r8a7740";
200 reg = <0xee100000 0x100>;200 reg = <0xee100000 0x100>;
201 interrupt-parent = <&gic>;201 interrupt-parent = <&gic>;
202 interrupts = <0 83 4202 interrupts = <0 83 4
@@ -208,7 +208,7 @@ · 5 unmodified lines
208 208
209 /* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */209 /* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
210 sdhi1: sdhi@ee120000 {210 sdhi1: sdhi@ee120000 {
211 compatible = "renesas,r8a7740-sdhi";211 compatible = "renesas,sdhi-r8a7740";
212 reg = <0xee120000 0x100>;212 reg = <0xee120000 0x100>;
213 interrupt-parent = <&gic>;213 interrupt-parent = <&gic>;
214 interrupts = <0 88 4214 interrupts = <0 88 4
@@ -219,7 +219,7 @@ · 4 unmodified lines
219 };219 };
220 220
221 sdhi2: sdhi@ee140000 {221 sdhi2: sdhi@ee140000 {
222 compatible = "renesas,r8a7740-sdhi";222 compatible = "renesas,sdhi-r8a7740";
223 reg = <0xee140000 0x100>;223 reg = <0xee140000 0x100>;
224 interrupt-parent = <&gic>;224 interrupt-parent = <&gic>;
225 interrupts = <0 104 4225 interrupts = <0 104 4
arch/arm/boot/install.sh+14−0
@@ -20,6 +20,20 @@ · 19 unmodified lines
20# $4 - default install path (blank if root directory)20# $4 - default install path (blank if root directory)
21#21#
22 22
23verify () {
24 if [ ! -f "$1" ]; then
25 echo "" 1>&2
26 echo " *** Missing file: $1" 1>&2
27 echo ' *** You need to run "make" before "make install".' 1>&2
28 echo "" 1>&2
29 exit 1
30 fi
31}
32
33# Make sure the files actually exist
34verify "$2"
35verify "$3"
36
23# User may have a custom install script37# User may have a custom install script
24if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi38if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
25if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi39if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
arch/arm/common/edma.c+31−7
@@ -269,6 +269,11 @@ static const struct edmacc_param dummy_paramset = { · 268 unmodified lines
269 .ccnt = 1,269 .ccnt = 1,
270};270};
271 271
272static const struct of_device_id edma_of_ids[] = {
273 { .compatible = "ti,edma3", },
274 {}
275};
276
272/*****************************************************************************/277/*****************************************************************************/
273 278
274static void map_dmach_queue(unsigned ctlr, unsigned ch_no,279static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
@@ -560,14 +565,38 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id, · 285 unmodified lines
560static int prepare_unused_channel_list(struct device *dev, void *data)565static int prepare_unused_channel_list(struct device *dev, void *data)
561{566{
562 struct platform_device *pdev = to_platform_device(dev);567 struct platform_device *pdev = to_platform_device(dev);
563 int i, ctlr;568 int i, count, ctlr;
569 struct of_phandle_args dma_spec;
564 570
571 if (dev->of_node) {
572 count = of_property_count_strings(dev->of_node, "dma-names");
573 if (count < 0)
574 return 0;
575 for (i = 0; i < count; i++) {
576 if (of_parse_phandle_with_args(dev->of_node, "dmas",
577 "#dma-cells", i,
578 &dma_spec))
579 continue;
580
581 if (!of_match_node(edma_of_ids, dma_spec.np)) {
582 of_node_put(dma_spec.np);
583 continue;
584 }
585
586 clear_bit(EDMA_CHAN_SLOT(dma_spec.args[0]),
587 edma_cc[0]->edma_unused);
588 of_node_put(dma_spec.np);
589 }
590 return 0;
591 }
592
593 /* For non-OF case */
565 for (i = 0; i < pdev->num_resources; i++) {594 for (i = 0; i < pdev->num_resources; i++) {
566 if ((pdev->resource[i].flags & IORESOURCE_DMA) &&595 if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
567 (int)pdev->resource[i].start >= 0) {596 (int)pdev->resource[i].start >= 0) {
568 ctlr = EDMA_CTLR(pdev->resource[i].start);597 ctlr = EDMA_CTLR(pdev->resource[i].start);
569 clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),598 clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
570 edma_cc[ctlr]->edma_unused);599 edma_cc[ctlr]->edma_unused);
571 }600 }
572 }601 }
573 602
@@ -1762,11 +1791,6 @@ static int edma_probe(struct platform_device *pdev) · 1188 unmodified lines
1762 return 0;1791 return 0;
1763}1792}
1764 1793
1765static const struct of_device_id edma_of_ids[] = {
1766 { .compatible = "ti,edma3", },
1767 {}
1768};
1769
1770static struct platform_driver edma_driver = {1794static struct platform_driver edma_driver = {
1771 .driver = {1795 .driver = {
1772 .name = "edma",1796 .name = "edma",
arch/arm/common/mcpm_entry.c+4−2
@@ -51,7 +51,8 @@ void mcpm_cpu_power_down(void) · 50 unmodified lines
51{51{
52 phys_reset_t phys_reset;52 phys_reset_t phys_reset;
53 53
54 BUG_ON(!platform_ops);54 if (WARN_ON_ONCE(!platform_ops || !platform_ops->power_down))
55 return;
55 BUG_ON(!irqs_disabled());56 BUG_ON(!irqs_disabled());
56 57
57 /*58 /*
@@ -93,7 +94,8 @@ void mcpm_cpu_suspend(u64 expected_residency) · 35 unmodified lines
93{94{
94 phys_reset_t phys_reset;95 phys_reset_t phys_reset;
95 96
96 BUG_ON(!platform_ops);97 if (WARN_ON_ONCE(!platform_ops || !platform_ops->suspend))
98 return;
97 BUG_ON(!irqs_disabled());99 BUG_ON(!irqs_disabled());
98 100
99 /* Very similar to mcpm_cpu_power_down() */101 /* Very similar to mcpm_cpu_power_down() */
arch/arm/common/sharpsl_param.c+4−1
@@ -15,6 +15,7 @@ · 14 unmodified lines
15#include <linux/module.h>15#include <linux/module.h>
16#include <linux/string.h>16#include <linux/string.h>
17#include <asm/mach/sharpsl_param.h>17#include <asm/mach/sharpsl_param.h>
18#include <asm/memory.h>
18 19
19/*20/*
20 * Certain hardware parameters determined at the time of device manufacture,21 * Certain hardware parameters determined at the time of device manufacture,
@@ -25,8 +26,10 @@ · 4 unmodified lines
25 */26 */
26#ifdef CONFIG_ARCH_SA110027#ifdef CONFIG_ARCH_SA1100
27#define PARAM_BASE 0xe8ffc00028#define PARAM_BASE 0xe8ffc000
29#define param_start(x) (void *)(x)
28#else30#else
29#define PARAM_BASE 0xa0000a0031#define PARAM_BASE 0xa0000a00
32#define param_start(x) __va(x)
30#endif33#endif
31#define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 ) | ( b << 8 ) | a )34#define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 ) | ( b << 8 ) | a )
32 35
@@ -41,7 +44,7 @@ EXPORT_SYMBOL(sharpsl_param); · 8 unmodified lines
41 44
42void sharpsl_save_param(void)45void sharpsl_save_param(void)
43{46{
44 memcpy(&sharpsl_param, (void *)PARAM_BASE, sizeof(struct sharpsl_param_info));47 memcpy(&sharpsl_param, param_start(PARAM_BASE), sizeof(struct sharpsl_param_info));
45 48
46 if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)49 if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
47 sharpsl_param.comadj=-1;50 sharpsl_param.comadj=-1;
arch/arm/configs/multi_v7_defconfig+1−0
@@ -135,6 +135,7 @@ CONFIG_MMC=y · 134 unmodified lines
135CONFIG_MMC_ARMMMCI=y135CONFIG_MMC_ARMMMCI=y
136CONFIG_MMC_SDHCI=y136CONFIG_MMC_SDHCI=y
137CONFIG_MMC_SDHCI_PLTFM=y137CONFIG_MMC_SDHCI_PLTFM=y
138CONFIG_MMC_SDHCI_ESDHC_IMX=y
138CONFIG_MMC_SDHCI_TEGRA=y139CONFIG_MMC_SDHCI_TEGRA=y
139CONFIG_MMC_SDHCI_SPEAR=y140CONFIG_MMC_SDHCI_SPEAR=y
140CONFIG_MMC_OMAP=y141CONFIG_MMC_OMAP=y
arch/arm/include/asm/Kbuild+0−1
@@ -31,5 +31,4 @@ generic-y += termbits.h · 30 unmodified lines
31generic-y += termios.h31generic-y += termios.h
32generic-y += timex.h32generic-y += timex.h
33generic-y += trace_clock.h33generic-y += trace_clock.h
34generic-y += types.h
35generic-y += unaligned.h34generic-y += unaligned.h
arch/arm/include/asm/jump_label.h+1−1
@@ -16,7 +16,7 @@ · 15 unmodified lines
16 16
17static __always_inline bool arch_static_branch(struct static_key *key)17static __always_inline bool arch_static_branch(struct static_key *key)
18{18{
19 asm goto("1:\n\t"19 asm_volatile_goto("1:\n\t"
20 JUMP_LABEL_NOP "\n\t"20 JUMP_LABEL_NOP "\n\t"
21 ".pushsection __jump_table, \"aw\"\n\t"21 ".pushsection __jump_table, \"aw\"\n\t"
22 ".word 1b, %l[l_yes], %c0\n\t"22 ".word 1b, %l[l_yes], %c0\n\t"
arch/arm/include/asm/mcpm.h+10−4
@@ -76,8 +76,11 @@ int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster); · 75 unmodified lines
76 *76 *
77 * This must be called with interrupts disabled.77 * This must be called with interrupts disabled.
78 *78 *
79 * This does not return. Re-entry in the kernel is expected via79 * On success this does not return. Re-entry in the kernel is expected
80 * mcpm_entry_point.80 * via mcpm_entry_point.
81 *
82 * This will return if mcpm_platform_register() has not been called
83 * previously in which case the caller should take appropriate action.
81 */84 */
82void mcpm_cpu_power_down(void);85void mcpm_cpu_power_down(void);
83 86
@@ -98,8 +101,11 @@ void mcpm_cpu_power_down(void); · 14 unmodified lines
98 *101 *
99 * This must be called with interrupts disabled.102 * This must be called with interrupts disabled.
100 *103 *
101 * This does not return. Re-entry in the kernel is expected via104 * On success this does not return. Re-entry in the kernel is expected
102 * mcpm_entry_point.105 * via mcpm_entry_point.
106 *
107 * This will return if mcpm_platform_register() has not been called
108 * previously in which case the caller should take appropriate action.
103 */109 */
104void mcpm_cpu_suspend(u64 expected_residency);110void mcpm_cpu_suspend(u64 expected_residency);
105 111
arch/arm/include/asm/syscall.h+6−0
@@ -57,6 +57,9 @@ static inline void syscall_get_arguments(struct task_struct *task, · 56 unmodified lines
57 unsigned int i, unsigned int n,57 unsigned int i, unsigned int n,
58 unsigned long *args)58 unsigned long *args)
59{59{
60 if (n == 0)
61 return;
62
60 if (i + n > SYSCALL_MAX_ARGS) {63 if (i + n > SYSCALL_MAX_ARGS) {
61 unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;64 unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
62 unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;65 unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
@@ -81,6 +84,9 @@ static inline void syscall_set_arguments(struct task_struct *task, · 18 unmodified lines
81 unsigned int i, unsigned int n,84 unsigned int i, unsigned int n,
82 const unsigned long *args)85 const unsigned long *args)
83{86{
87 if (n == 0)
88 return;
89
84 if (i + n > SYSCALL_MAX_ARGS) {90 if (i + n > SYSCALL_MAX_ARGS) {
85 pr_warning("%s called with max args %d, handling only %d\n",91 pr_warning("%s called with max args %d, handling only %d\n",
86 __func__, i + n, SYSCALL_MAX_ARGS);92 __func__, i + n, SYSCALL_MAX_ARGS);
arch/arm/kernel/head.S+20−1
@@ -487,7 +487,26 @@ __fixup_smp: · 486 unmodified lines
487 mrc p15, 0, r0, c0, c0, 5 @ read MPIDR487 mrc p15, 0, r0, c0, c0, 5 @ read MPIDR
488 and r0, r0, #0xc0000000 @ multiprocessing extensions and488 and r0, r0, #0xc0000000 @ multiprocessing extensions and
489 teq r0, #0x80000000 @ not part of a uniprocessor system?489 teq r0, #0x80000000 @ not part of a uniprocessor system?
490 moveq pc, lr @ yes, assume SMP490 bne __fixup_smp_on_up @ no, assume UP
491
492 @ Core indicates it is SMP. Check for Aegis SOC where a single
493 @ Cortex-A9 CPU is present but SMP operations fault.
494 mov r4, #0x41000000
495 orr r4, r4, #0x0000c000
496 orr r4, r4, #0x00000090
497 teq r3, r4 @ Check for ARM Cortex-A9
498 movne pc, lr @ Not ARM Cortex-A9,
499
500 @ If a future SoC *does* use 0x0 as the PERIPH_BASE, then the
501 @ below address check will need to be #ifdef'd or equivalent
502 @ for the Aegis platform.
503 mrc p15, 4, r0, c15, c0 @ get SCU base address
504 teq r0, #0x0 @ '0' on actual UP A9 hardware
505 beq __fixup_smp_on_up @ So its an A9 UP
506 ldr r0, [r0, #4] @ read SCU Config
507 and r0, r0, #0x3 @ number of CPUs
508 teq r0, #0x0 @ is 1?
509 movne pc, lr
491 510
492__fixup_smp_on_up:511__fixup_smp_on_up:
493 adr r0, 1f512 adr r0, 1f
arch/arm/mach-at91/at91rm9200_time.c+1−1
@@ -93,7 +93,7 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id) · 92 unmodified lines
93 93
94static struct irqaction at91rm9200_timer_irq = {94static struct irqaction at91rm9200_timer_irq = {
95 .name = "at91_tick",95 .name = "at91_tick",
96 .flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,96 .flags = IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
97 .handler = at91rm9200_timer_interrupt,97 .handler = at91rm9200_timer_interrupt,
98 .irq = NR_IRQS_LEGACY + AT91_ID_SYS,98 .irq = NR_IRQS_LEGACY + AT91_ID_SYS,
99};99};
arch/arm/mach-at91/at91sam926x_time.c+1−1
@@ -171,7 +171,7 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id) · 170 unmodified lines
171 171
172static struct irqaction at91sam926x_pit_irq = {172static struct irqaction at91sam926x_pit_irq = {
173 .name = "at91_tick",173 .name = "at91_tick",
174 .flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,174 .flags = IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
175 .handler = at91sam926x_pit_interrupt,175 .handler = at91sam926x_pit_interrupt,
176 .irq = NR_IRQS_LEGACY + AT91_ID_SYS,176 .irq = NR_IRQS_LEGACY + AT91_ID_SYS,
177};177};
arch/arm/mach-at91/at91sam9g45_reset.S+8−0
@@ -16,11 +16,17 @@ · 15 unmodified lines
16#include "at91_rstc.h"16#include "at91_rstc.h"
17 .arm17 .arm
18 18
19/*
20 * at91_ramc_base is an array void*
21 * init at NULL if only one DDR controler is present in or DT
22 */
19 .globl at91sam9g45_restart23 .globl at91sam9g45_restart
20 24
21at91sam9g45_restart:25at91sam9g45_restart:
22 ldr r5, =at91_ramc_base @ preload constants26 ldr r5, =at91_ramc_base @ preload constants
23 ldr r0, [r5]27 ldr r0, [r5]
28 ldr r5, [r5, #4] @ ddr1
29 cmp r5, #0
24 ldr r4, =at91_rstc_base30 ldr r4, =at91_rstc_base
25 ldr r1, [r4]31 ldr r1, [r4]
26 32
@@ -30,6 +36,8 @@ at91sam9g45_restart: · 3 unmodified lines
30 36
31 .balign 32 @ align to cache line37 .balign 32 @ align to cache line
32 38
39 strne r2, [r5, #AT91_DDRSDRC_RTR] @ disable DDR1 access
40 strne r3, [r5, #AT91_DDRSDRC_LPR] @ power down DDR1
33 str r2, [r0, #AT91_DDRSDRC_RTR] @ disable DDR0 access41 str r2, [r0, #AT91_DDRSDRC_RTR] @ disable DDR0 access
34 str r3, [r0, #AT91_DDRSDRC_LPR] @ power down DDR042 str r3, [r0, #AT91_DDRSDRC_LPR] @ power down DDR0
35 str r4, [r1, #AT91_RSTC_CR] @ reset processor43 str r4, [r1, #AT91_RSTC_CR] @ reset processor
arch/arm/mach-at91/at91x40_time.c+1−1
@@ -57,7 +57,7 @@ static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id) · 56 unmodified lines
57 57
58static struct irqaction at91x40_timer_irq = {58static struct irqaction at91x40_timer_irq = {
59 .name = "at91_tick",59 .name = "at91_tick",
60 .flags = IRQF_DISABLED | IRQF_TIMER,60 .flags = IRQF_TIMER,
61 .handler = at91x40_timer_interrupt61 .handler = at91x40_timer_interrupt
62};62};
63 63
arch/arm/mach-davinci/board-dm365-evm.c+1−1
@@ -176,7 +176,7 @@ static struct at24_platform_data eeprom_info = { · 175 unmodified lines
176 .context = (void *)0x7f00,176 .context = (void *)0x7f00,
177};177};
178 178
179static struct snd_platform_data dm365_evm_snd_data = {179static struct snd_platform_data dm365_evm_snd_data __maybe_unused = {
180 .asp_chan_q = EVENTQ_3,180 .asp_chan_q = EVENTQ_3,
181};181};
182 182
arch/arm/mach-davinci/include/mach/serial.h+2−2
@@ -15,8 +15,6 @@ · 14 unmodified lines
15 15
16#include <mach/hardware.h>16#include <mach/hardware.h>
17 17
18#include <linux/platform_device.h>
19
20#define DAVINCI_UART0_BASE (IO_PHYS + 0x20000)18#define DAVINCI_UART0_BASE (IO_PHYS + 0x20000)
21#define DAVINCI_UART1_BASE (IO_PHYS + 0x20400)19#define DAVINCI_UART1_BASE (IO_PHYS + 0x20400)
22#define DAVINCI_UART2_BASE (IO_PHYS + 0x20800)20#define DAVINCI_UART2_BASE (IO_PHYS + 0x20800)
@@ -39,6 +37,8 @@ · 16 unmodified lines
39#define UART_DM646X_SCR_TX_WATERMARK 0x0837#define UART_DM646X_SCR_TX_WATERMARK 0x08
40 38
41#ifndef __ASSEMBLY__39#ifndef __ASSEMBLY__
40#include <linux/platform_device.h>
41
42extern int davinci_serial_init(struct platform_device *);42extern int davinci_serial_init(struct platform_device *);
43#endif43#endif
44 44
arch/arm/mach-integrator/pci_v3.h+7−0
@@ -1,2 +1,9 @@
1/* Simple oneliner include to the PCIv3 early init */1/* Simple oneliner include to the PCIv3 early init */
2#ifdef CONFIG_PCI
2extern int pci_v3_early_init(void);3extern int pci_v3_early_init(void);
4#else
5static inline int pci_v3_early_init(void)
6{
7 return 0;
8}
9#endif
arch/arm/mach-mvebu/coherency.c+7−1
@@ -140,6 +140,7 @@ int __init coherency_init(void) · 139 unmodified lines
140 coherency_base = of_iomap(np, 0);140 coherency_base = of_iomap(np, 0);
141 coherency_cpu_base = of_iomap(np, 1);141 coherency_cpu_base = of_iomap(np, 1);
142 set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);142 set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
143 of_node_put(np);
143 }144 }
144 145
145 return 0;146 return 0;
@@ -147,9 +148,14 @@ int __init coherency_init(void) · 1 unmodified line
147 148
148static int __init coherency_late_init(void)149static int __init coherency_late_init(void)
149{150{
150 if (of_find_matching_node(NULL, of_coherency_table))151 struct device_node *np;
152
153 np = of_find_matching_node(NULL, of_coherency_table);
154 if (np) {
151 bus_register_notifier(&platform_bus_type,155 bus_register_notifier(&platform_bus_type,
152 &mvebu_hwcc_platform_nb);156 &mvebu_hwcc_platform_nb);
157 of_node_put(np);
158 }
153 return 0;159 return 0;
154}160}
155 161
arch/arm/mach-mvebu/pmsu.c+1−0
@@ -67,6 +67,7 @@ int __init armada_370_xp_pmsu_init(void) · 66 unmodified lines
67 pr_info("Initializing Power Management Service Unit\n");67 pr_info("Initializing Power Management Service Unit\n");
68 pmsu_mp_base = of_iomap(np, 0);68 pmsu_mp_base = of_iomap(np, 0);
69 pmsu_reset_base = of_iomap(np, 1);69 pmsu_reset_base = of_iomap(np, 1);
70 of_node_put(np);
70 }71 }
71 72
72 return 0;73 return 0;
arch/arm/mach-mvebu/system-controller.c+1−0
@@ -98,6 +98,7 @@ static int __init mvebu_system_controller_init(void) · 97 unmodified lines
98 BUG_ON(!match);98 BUG_ON(!match);
99 system_controller_base = of_iomap(np, 0);99 system_controller_base = of_iomap(np, 0);
100 mvebu_sc = (struct mvebu_system_controller *)match->data;100 mvebu_sc = (struct mvebu_system_controller *)match->data;
101 of_node_put(np);
101 }102 }
102 103
103 return 0;104 return 0;
arch/arm/mach-omap2/board-generic.c+18−0
@@ -129,6 +129,24 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") · 128 unmodified lines
129 .restart = omap3xxx_restart,129 .restart = omap3xxx_restart,
130MACHINE_END130MACHINE_END
131 131
132static const char *omap36xx_boards_compat[] __initdata = {
133 "ti,omap36xx",
134 NULL,
135};
136
137DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)")
138 .reserve = omap_reserve,
139 .map_io = omap3_map_io,
140 .init_early = omap3630_init_early,
141 .init_irq = omap_intc_of_init,
142 .handle_irq = omap3_intc_handle_irq,
143 .init_machine = omap_generic_init,
144 .init_late = omap3_init_late,
145 .init_time = omap3_sync32k_timer_init,
146 .dt_compat = omap36xx_boards_compat,
147 .restart = omap3xxx_restart,
148MACHINE_END
149
132static const char *omap3_gp_boards_compat[] __initdata = {150static const char *omap3_gp_boards_compat[] __initdata = {
133 "ti,omap3-beagle",151 "ti,omap3-beagle",
134 "timll,omap3-devkit8000",152 "timll,omap3-devkit8000",
arch/arm/mach-omap2/board-rx51-peripherals.c+9−0
@@ -167,38 +167,47 @@ static struct lp55xx_led_config rx51_lp5523_led_config[] = { · 166 unmodified lines
167 .name = "lp5523:kb1",167 .name = "lp5523:kb1",
168 .chan_nr = 0,168 .chan_nr = 0,
169 .led_current = 50,169 .led_current = 50,
170 .max_current = 100,
170 }, {171 }, {
171 .name = "lp5523:kb2",172 .name = "lp5523:kb2",
172 .chan_nr = 1,173 .chan_nr = 1,
173 .led_current = 50,174 .led_current = 50,
175 .max_current = 100,
174 }, {176 }, {
175 .name = "lp5523:kb3",177 .name = "lp5523:kb3",
176 .chan_nr = 2,178 .chan_nr = 2,
177 .led_current = 50,179 .led_current = 50,
180 .max_current = 100,
178 }, {181 }, {
179 .name = "lp5523:kb4",182 .name = "lp5523:kb4",
180 .chan_nr = 3,183 .chan_nr = 3,
181 .led_current = 50,184 .led_current = 50,
185 .max_current = 100,
182 }, {186 }, {
183 .name = "lp5523:b",187 .name = "lp5523:b",
184 .chan_nr = 4,188 .chan_nr = 4,
185 .led_current = 50,189 .led_current = 50,
190 .max_current = 100,
186 }, {191 }, {
187 .name = "lp5523:g",192 .name = "lp5523:g",
188 .chan_nr = 5,193 .chan_nr = 5,
189 .led_current = 50,194 .led_current = 50,
195 .max_current = 100,
190 }, {196 }, {
191 .name = "lp5523:r",197 .name = "lp5523:r",
192 .chan_nr = 6,198 .chan_nr = 6,
193 .led_current = 50,199 .led_current = 50,
200 .max_current = 100,
194 }, {201 }, {
195 .name = "lp5523:kb5",202 .name = "lp5523:kb5",
196 .chan_nr = 7,203 .chan_nr = 7,
197 .led_current = 50,204 .led_current = 50,
205 .max_current = 100,
198 }, {206 }, {
199 .name = "lp5523:kb6",207 .name = "lp5523:kb6",
200 .chan_nr = 8,208 .chan_nr = 8,
201 .led_current = 50,209 .led_current = 50,
210 .max_current = 100,
202 }211 }
203};212};
204 213
arch/arm/mach-omap2/gpmc-onenand.c+11−1
@@ -272,9 +272,19 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base) · 271 unmodified lines
272 struct gpmc_timings t;272 struct gpmc_timings t;
273 int ret;273 int ret;
274 274
275 if (gpmc_onenand_data->of_node)275 if (gpmc_onenand_data->of_node) {
276 gpmc_read_settings_dt(gpmc_onenand_data->of_node,276 gpmc_read_settings_dt(gpmc_onenand_data->of_node,
277 &onenand_async);277 &onenand_async);
278 if (onenand_async.sync_read || onenand_async.sync_write) {
279 if (onenand_async.sync_write)
280 gpmc_onenand_data->flags |=
281 ONENAND_SYNC_READWRITE;
282 else
283 gpmc_onenand_data->flags |= ONENAND_SYNC_READ;
284 onenand_async.sync_read = false;
285 onenand_async.sync_write = false;
286 }
287 }
278 288
279 omap2_onenand_set_async_mode(onenand_base);289 omap2_onenand_set_async_mode(onenand_base);
280 290
arch/arm/mach-omap2/mux.h+1−3
@@ -28,7 +28,7 @@ · 27 unmodified lines
28#define OMAP_PULL_UP (1 << 4)28#define OMAP_PULL_UP (1 << 4)
29#define OMAP_ALTELECTRICALSEL (1 << 5)29#define OMAP_ALTELECTRICALSEL (1 << 5)
30 30
31/* 34xx specific mux bit defines */31/* omap3/4/5 specific mux bit defines */
32#define OMAP_INPUT_EN (1 << 8)32#define OMAP_INPUT_EN (1 << 8)
33#define OMAP_OFF_EN (1 << 9)33#define OMAP_OFF_EN (1 << 9)
34#define OMAP_OFFOUT_EN (1 << 10)34#define OMAP_OFFOUT_EN (1 << 10)
@@ -36,8 +36,6 @@ · 1 unmodified line
36#define OMAP_OFF_PULL_EN (1 << 12)36#define OMAP_OFF_PULL_EN (1 << 12)
37#define OMAP_OFF_PULL_UP (1 << 13)37#define OMAP_OFF_PULL_UP (1 << 13)
38#define OMAP_WAKEUP_EN (1 << 14)38#define OMAP_WAKEUP_EN (1 << 14)
39
40/* 44xx specific mux bit defines */
41#define OMAP_WAKEUP_EVENT (1 << 15)39#define OMAP_WAKEUP_EVENT (1 << 15)
42 40
43/* Active pin states */41/* Active pin states */
arch/arm/mach-omap2/timer.c+2−2
@@ -628,7 +628,7 @@ void __init omap4_local_timer_init(void) · 627 unmodified lines
628#endif /* CONFIG_HAVE_ARM_TWD */628#endif /* CONFIG_HAVE_ARM_TWD */
629#endif /* CONFIG_ARCH_OMAP4 */629#endif /* CONFIG_ARCH_OMAP4 */
630 630
631#ifdef CONFIG_SOC_OMAP5631#if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)
632void __init omap5_realtime_timer_init(void)632void __init omap5_realtime_timer_init(void)
633{633{
634 omap4_sync32k_timer_init();634 omap4_sync32k_timer_init();
@@ -636,7 +636,7 @@ void __init omap5_realtime_timer_init(void) · 1 unmodified line
636 636
637 clocksource_of_init();637 clocksource_of_init();
638}638}
639#endif /* CONFIG_SOC_OMAP5 */639#endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */
640 640
641/**641/**
642 * omap_timer_init - build and register timer device with an642 * omap_timer_init - build and register timer device with an
arch/arm/mach-shmobile/board-armadillo800eva.c+2−2
@@ -1108,9 +1108,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = { · 1107 unmodified lines
1108 PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",1108 PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
1109 "fsib_mclk_in", "fsib"),1109 "fsib_mclk_in", "fsib"),
1110 /* GETHER */1110 /* GETHER */
1111 PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",1111 PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
1112 "gether_mii", "gether"),1112 "gether_mii", "gether"),
1113 PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",1113 PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
1114 "gether_int", "gether"),1114 "gether_int", "gether"),
1115 /* HDMI */1115 /* HDMI */
1116 PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",1116 PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
arch/arm/mach-shmobile/board-lager.c+26−1
@@ -29,6 +29,7 @@ · 28 unmodified lines
29#include <linux/pinctrl/machine.h>29#include <linux/pinctrl/machine.h>
30#include <linux/platform_data/gpio-rcar.h>30#include <linux/platform_data/gpio-rcar.h>
31#include <linux/platform_device.h>31#include <linux/platform_device.h>
32#include <linux/phy.h>
32#include <linux/regulator/fixed.h>33#include <linux/regulator/fixed.h>
33#include <linux/regulator/machine.h>34#include <linux/regulator/machine.h>
34#include <linux/sh_eth.h>35#include <linux/sh_eth.h>
@@ -155,6 +156,30 @@ static void __init lager_add_standard_devices(void) · 120 unmodified lines
155 &ether_pdata, sizeof(ether_pdata));156 &ether_pdata, sizeof(ether_pdata));
156}157}
157 158
159/*
160 * Ether LEDs on the Lager board are named LINK and ACTIVE which corresponds
161 * to non-default 01 setting of the Micrel KSZ8041 PHY control register 1 bits
162 * 14-15. We have to set them back to 01 from the default 00 value each time
163 * the PHY is reset. It's also important because the PHY's LED0 signal is
164 * connected to SoC's ETH_LINK signal and in the PHY's default mode it will
165 * bounce on and off after each packet, which we apparently want to avoid.
166 */
167static int lager_ksz8041_fixup(struct phy_device *phydev)
168{
169 u16 phyctrl1 = phy_read(phydev, 0x1e);
170
171 phyctrl1 &= ~0xc000;
172 phyctrl1 |= 0x4000;
173 return phy_write(phydev, 0x1e, phyctrl1);
174}
175
176static void __init lager_init(void)
177{
178 lager_add_standard_devices();
179
180 phy_register_fixup_for_id("r8a7790-ether-ff:01", lager_ksz8041_fixup);
181}
182
158static const char *lager_boards_compat_dt[] __initdata = {183static const char *lager_boards_compat_dt[] __initdata = {
159 "renesas,lager",184 "renesas,lager",
160 NULL,185 NULL,
@@ -163,6 +188,6 @@ static const char *lager_boards_compat_dt[] __initdata = { · 2 unmodified lines
163DT_MACHINE_START(LAGER_DT, "lager")188DT_MACHINE_START(LAGER_DT, "lager")
164 .init_early = r8a7790_init_delay,189 .init_early = r8a7790_init_delay,
165 .init_time = r8a7790_timer_init,190 .init_time = r8a7790_timer_init,
166 .init_machine = lager_add_standard_devices,191 .init_machine = lager_init,
167 .dt_compat = lager_boards_compat_dt,192 .dt_compat = lager_boards_compat_dt,
168MACHINE_END193MACHINE_END
arch/arm/mach-vexpress/tc2_pm.c+10−1
@@ -131,6 +131,16 @@ static void tc2_pm_down(u64 residency) · 130 unmodified lines
131 } else131 } else
132 BUG();132 BUG();
133 133
134 /*
135 * If the CPU is committed to power down, make sure
136 * the power controller will be in charge of waking it
137 * up upon IRQ, ie IRQ lines are cut from GIC CPU IF
138 * to the CPU by disabling the GIC CPU IF to prevent wfi
139 * from completing execution behind power controller back
140 */
141 if (!skip_wfi)
142 gic_cpu_if_down();
143
134 if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {144 if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {
135 arch_spin_unlock(&tc2_pm_lock);145 arch_spin_unlock(&tc2_pm_lock);
136 146
@@ -231,7 +241,6 @@ static void tc2_pm_suspend(u64 residency) · 94 unmodified lines
231 cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);241 cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
232 cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);242 cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
233 ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));243 ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));
234 gic_cpu_if_down();
235 tc2_pm_down(residency);244 tc2_pm_down(residency);
236}245}
237 246
arch/arm/mm/dma-mapping.c+28−15
@@ -1232,7 +1232,8 @@ __iommu_create_mapping(struct device *dev, struct page **pages, size_t size) · 1231 unmodified lines
1232 break;1232 break;
1233 1233
1234 len = (j - i) << PAGE_SHIFT;1234 len = (j - i) << PAGE_SHIFT;
1235 ret = iommu_map(mapping->domain, iova, phys, len, 0);1235 ret = iommu_map(mapping->domain, iova, phys, len,
1236 IOMMU_READ|IOMMU_WRITE);
1236 if (ret < 0)1237 if (ret < 0)
1237 goto fail;1238 goto fail;
1238 iova += len;1239 iova += len;
@@ -1431,6 +1432,27 @@ static int arm_iommu_get_sgtable(struct device *dev, struct sg_table *sgt, · 192 unmodified lines
1431 GFP_KERNEL);1432 GFP_KERNEL);
1432}1433}
1433 1434
1435static int __dma_direction_to_prot(enum dma_data_direction dir)
1436{
1437 int prot;
1438
1439 switch (dir) {
1440 case DMA_BIDIRECTIONAL:
1441 prot = IOMMU_READ | IOMMU_WRITE;
1442 break;
1443 case DMA_TO_DEVICE:
1444 prot = IOMMU_READ;
1445 break;
1446 case DMA_FROM_DEVICE:
1447 prot = IOMMU_WRITE;
1448 break;
1449 default:
1450 prot = 0;
1451 }
1452
1453 return prot;
1454}
1455
1434/*1456/*
1435 * Map a part of the scatter-gather list into contiguous io address space1457 * Map a part of the scatter-gather list into contiguous io address space
1436 */1458 */
@@ -1444,6 +1466,7 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg, · 7 unmodified lines
1444 int ret = 0;1466 int ret = 0;
1445 unsigned int count;1467 unsigned int count;
1446 struct scatterlist *s;1468 struct scatterlist *s;
1469 int prot;
1447 1470
1448 size = PAGE_ALIGN(size);1471 size = PAGE_ALIGN(size);
1449 *handle = DMA_ERROR_CODE;1472 *handle = DMA_ERROR_CODE;
@@ -1460,7 +1483,9 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg, · 10 unmodified lines
1460 !dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))1483 !dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
1461 __dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);1484 __dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
1462 1485
1463 ret = iommu_map(mapping->domain, iova, phys, len, 0);1486 prot = __dma_direction_to_prot(dir);
1487
1488 ret = iommu_map(mapping->domain, iova, phys, len, prot);
1464 if (ret < 0)1489 if (ret < 0)
1465 goto fail;1490 goto fail;
1466 count += len >> PAGE_SHIFT;1491 count += len >> PAGE_SHIFT;
@@ -1665,19 +1690,7 @@ static dma_addr_t arm_coherent_iommu_map_page(struct device *dev, struct page *p · 198 unmodified lines
1665 if (dma_addr == DMA_ERROR_CODE)1690 if (dma_addr == DMA_ERROR_CODE)
1666 return dma_addr;1691 return dma_addr;
1667 1692
1668 switch (dir) {1693 prot = __dma_direction_to_prot(dir);
1669 case DMA_BIDIRECTIONAL:
1670 prot = IOMMU_READ | IOMMU_WRITE;
1671 break;
1672 case DMA_TO_DEVICE:
1673 prot = IOMMU_READ;
1674 break;
1675 case DMA_FROM_DEVICE:
1676 prot = IOMMU_WRITE;
1677 break;
1678 default:
1679 prot = 0;
1680 }
1681 1694
1682 ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);1695 ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
1683 if (ret < 0)1696 if (ret < 0)
arch/arm/mm/init.c+0−3
@@ -17,7 +17,6 @@ · 16 unmodified lines
17#include <linux/nodemask.h>17#include <linux/nodemask.h>
18#include <linux/initrd.h>18#include <linux/initrd.h>
19#include <linux/of_fdt.h>19#include <linux/of_fdt.h>
20#include <linux/of_reserved_mem.h>
21#include <linux/highmem.h>20#include <linux/highmem.h>
22#include <linux/gfp.h>21#include <linux/gfp.h>
23#include <linux/memblock.h>22#include <linux/memblock.h>
@@ -379,8 +378,6 @@ void __init arm_memblock_init(struct meminfo *mi, · 355 unmodified lines
379 if (mdesc->reserve)378 if (mdesc->reserve)
380 mdesc->reserve();379 mdesc->reserve();
381 380
382 early_init_dt_scan_reserved_mem();
383
384 /*381 /*
385 * reserve memory for DMA contigouos allocations,382 * reserve memory for DMA contigouos allocations,
386 * must come from DMA area inside low memory383 * must come from DMA area inside low memory
arch/arm64/Kconfig.debug+0−7
@@ -6,13 +6,6 @@ config FRAME_POINTER · 5 unmodified lines
6 bool6 bool
7 default y7 default y
8 8
9config DEBUG_STACK_USAGE
10 bool "Enable stack utilization instrumentation"
11 depends on DEBUG_KERNEL
12 help
13 Enables the display of the minimum amount of free stack which each
14 task has ever had available in the sysrq-T output.
15
16config EARLY_PRINTK9config EARLY_PRINTK
17 bool "Early printk support"10 bool "Early printk support"
18 default y11 default y
arch/arm64/configs/defconfig+4−1
@@ -42,7 +42,7 @@ CONFIG_IP_PNP_BOOTP=y · 41 unmodified lines
42# CONFIG_WIRELESS is not set42# CONFIG_WIRELESS is not set
43CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"43CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
44CONFIG_DEVTMPFS=y44CONFIG_DEVTMPFS=y
45# CONFIG_BLK_DEV is not set45CONFIG_BLK_DEV=y
46CONFIG_SCSI=y46CONFIG_SCSI=y
47# CONFIG_SCSI_PROC_FS is not set47# CONFIG_SCSI_PROC_FS is not set
48CONFIG_BLK_DEV_SD=y48CONFIG_BLK_DEV_SD=y
@@ -72,6 +72,7 @@ CONFIG_LOGO=y · 23 unmodified lines
72# CONFIG_IOMMU_SUPPORT is not set72# CONFIG_IOMMU_SUPPORT is not set
73CONFIG_EXT2_FS=y73CONFIG_EXT2_FS=y
74CONFIG_EXT3_FS=y74CONFIG_EXT3_FS=y
75CONFIG_EXT4_FS=y
75# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set76# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
76# CONFIG_EXT3_FS_XATTR is not set77# CONFIG_EXT3_FS_XATTR is not set
77CONFIG_FUSE_FS=y78CONFIG_FUSE_FS=y
@@ -90,3 +91,5 @@ CONFIG_DEBUG_KERNEL=y · 12 unmodified lines
90CONFIG_DEBUG_INFO=y91CONFIG_DEBUG_INFO=y
91# CONFIG_FTRACE is not set92# CONFIG_FTRACE is not set
92CONFIG_ATOMIC64_SELFTEST=y93CONFIG_ATOMIC64_SELFTEST=y
94CONFIG_VIRTIO_MMIO=y
95CONFIG_VIRTIO_BLK=y
arch/arm64/include/asm/uaccess.h+6−4
@@ -166,9 +166,10 @@ do { \ · 165 unmodified lines
166 166
167#define get_user(x, ptr) \167#define get_user(x, ptr) \
168({ \168({ \
169 __typeof__(*(ptr)) __user *__p = (ptr); \
169 might_fault(); \170 might_fault(); \
170 access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) ? \171 access_ok(VERIFY_READ, __p, sizeof(*__p)) ? \
171 __get_user((x), (ptr)) : \172 __get_user((x), __p) : \
172 ((x) = 0, -EFAULT); \173 ((x) = 0, -EFAULT); \
173})174})
174 175
@@ -227,9 +228,10 @@ do { \ · 52 unmodified lines
227 228
228#define put_user(x, ptr) \229#define put_user(x, ptr) \
229({ \230({ \
231 __typeof__(*(ptr)) __user *__p = (ptr); \
230 might_fault(); \232 might_fault(); \
231 access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) ? \233 access_ok(VERIFY_WRITE, __p, sizeof(*__p)) ? \
232 __put_user((x), (ptr)) : \234 __put_user((x), __p) : \
233 -EFAULT; \235 -EFAULT; \
234})236})
235 237
arch/arm64/kernel/fpsimd.c+2−0
@@ -80,8 +80,10 @@ void fpsimd_thread_switch(struct task_struct *next) · 79 unmodified lines
80 80
81void fpsimd_flush_thread(void)81void fpsimd_flush_thread(void)
82{82{
83 preempt_disable();
83 memset(&current->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));84 memset(&current->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));
84 fpsimd_load_state(&current->thread.fpsimd_state);85 fpsimd_load_state(&current->thread.fpsimd_state);
86 preempt_enable();
85}87}
86 88
87#ifdef CONFIG_KERNEL_MODE_NEON89#ifdef CONFIG_KERNEL_MODE_NEON
arch/arm64/mm/tlb.S+1−1
@@ -35,7 +35,7 @@ · 34 unmodified lines
35 */35 */
36ENTRY(__cpu_flush_user_tlb_range)36ENTRY(__cpu_flush_user_tlb_range)
37 vma_vm_mm x3, x2 // get vma->vm_mm37 vma_vm_mm x3, x2 // get vma->vm_mm
38 mmid x3, x3 // get vm_mm->context.id38 mmid w3, x3 // get vm_mm->context.id
39 dsb sy39 dsb sy
40 lsr x0, x0, #12 // align address40 lsr x0, x0, #12 // align address
41 lsr x1, x1, #1241 lsr x1, x1, #12
arch/mips/alchemy/board-mtx1.c+1−1
@@ -276,7 +276,7 @@ static struct platform_device mtx1_pci_host = { · 275 unmodified lines
276 .resource = alchemy_pci_host_res,276 .resource = alchemy_pci_host_res,
277};277};
278 278
279static struct __initdata platform_device * mtx1_devs[] = {279static struct platform_device *mtx1_devs[] __initdata = {
280 &mtx1_pci_host,280 &mtx1_pci_host,
281 &mtx1_gpio_leds,281 &mtx1_gpio_leds,
282 &mtx1_wdt,282 &mtx1_wdt,
arch/mips/include/asm/jump_label.h+1−1
@@ -22,7 +22,7 @@ · 21 unmodified lines
22 22
23static __always_inline bool arch_static_branch(struct static_key *key)23static __always_inline bool arch_static_branch(struct static_key *key)
24{24{
25 asm goto("1:\tnop\n\t"25 asm_volatile_goto("1:\tnop\n\t"
26 "nop\n\t"26 "nop\n\t"
27 ".pushsection __jump_table, \"aw\"\n\t"27 ".pushsection __jump_table, \"aw\"\n\t"
28 WORD_INSN " 1b, %l[l_yes], %0\n\t"28 WORD_INSN " 1b, %l[l_yes], %0\n\t"
arch/mips/kernel/octeon_switch.S+1−1
@@ -73,7 +73,7 @@ · 72 unmodified lines
733:733:
74 74
75#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)75#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
76 PTR_L t8, __stack_chk_guard76 PTR_LA t8, __stack_chk_guard
77 LONG_L t9, TASK_STACK_CANARY(a1)77 LONG_L t9, TASK_STACK_CANARY(a1)
78 LONG_S t9, 0(t8)78 LONG_S t9, 0(t8)
79#endif79#endif
arch/mips/kernel/r2300_switch.S+1−1
@@ -67,7 +67,7 @@ LEAF(resume) · 66 unmodified lines
671:671:
68 68
69#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)69#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
70 PTR_L t8, __stack_chk_guard70 PTR_LA t8, __stack_chk_guard
71 LONG_L t9, TASK_STACK_CANARY(a1)71 LONG_L t9, TASK_STACK_CANARY(a1)
72 LONG_S t9, 0(t8)72 LONG_S t9, 0(t8)
73#endif73#endif
arch/mips/kernel/r4k_switch.S+1−1
@@ -69,7 +69,7 @@ · 68 unmodified lines
691:691:
70 70
71#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)71#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
72 PTR_L t8, __stack_chk_guard72 PTR_LA t8, __stack_chk_guard
73 LONG_L t9, TASK_STACK_CANARY(a1)73 LONG_L t9, TASK_STACK_CANARY(a1)
74 LONG_S t9, 0(t8)74 LONG_S t9, 0(t8)
75#endif75#endif
arch/mips/mm/c-r4k.c+2−0
@@ -609,6 +609,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size) · 608 unmodified lines
609 r4k_blast_scache();609 r4k_blast_scache();
610 else610 else
611 blast_scache_range(addr, addr + size);611 blast_scache_range(addr, addr + size);
612 preempt_enable();
612 __sync();613 __sync();
613 return;614 return;
614 }615 }
@@ -650,6 +651,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size) · 35 unmodified lines
650 */651 */
651 blast_inv_scache_range(addr, addr + size);652 blast_inv_scache_range(addr, addr + size);
652 }653 }
654 preempt_enable();
653 __sync();655 __sync();
654 return;656 return;
655 }657 }
arch/parisc/configs/712_defconfig+2−0
@@ -40,6 +40,8 @@ CONFIG_IP_NF_QUEUE=m · 39 unmodified lines
40CONFIG_LLC2=m40CONFIG_LLC2=m
41CONFIG_NET_PKTGEN=m41CONFIG_NET_PKTGEN=m
42CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"42CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
43CONFIG_DEVTMPFS=y
44CONFIG_DEVTMPFS_MOUNT=y
43# CONFIG_STANDALONE is not set45# CONFIG_STANDALONE is not set
44# CONFIG_PREVENT_FIRMWARE_BUILD is not set46# CONFIG_PREVENT_FIRMWARE_BUILD is not set
45CONFIG_PARPORT=y47CONFIG_PARPORT=y
arch/parisc/configs/a500_defconfig+2−0
@@ -79,6 +79,8 @@ CONFIG_IP_DCCP=m · 78 unmodified lines
79CONFIG_LLC2=m79CONFIG_LLC2=m
80CONFIG_NET_PKTGEN=m80CONFIG_NET_PKTGEN=m
81CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"81CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
82CONFIG_DEVTMPFS=y
83CONFIG_DEVTMPFS_MOUNT=y
82# CONFIG_STANDALONE is not set84# CONFIG_STANDALONE is not set
83# CONFIG_PREVENT_FIRMWARE_BUILD is not set85# CONFIG_PREVENT_FIRMWARE_BUILD is not set
84CONFIG_BLK_DEV_UMEM=m86CONFIG_BLK_DEV_UMEM=m
arch/parisc/configs/b180_defconfig+3−0
@@ -4,6 +4,7 @@ CONFIG_IKCONFIG=y · 3 unmodified lines
4CONFIG_IKCONFIG_PROC=y4CONFIG_IKCONFIG_PROC=y
5CONFIG_LOG_BUF_SHIFT=165CONFIG_LOG_BUF_SHIFT=16
6CONFIG_SYSFS_DEPRECATED_V2=y6CONFIG_SYSFS_DEPRECATED_V2=y
7CONFIG_BLK_DEV_INITRD=y
7CONFIG_SLAB=y8CONFIG_SLAB=y
8CONFIG_MODULES=y9CONFIG_MODULES=y
9CONFIG_MODVERSIONS=y10CONFIG_MODVERSIONS=y
@@ -27,6 +28,8 @@ CONFIG_IP_PNP_BOOTP=y · 17 unmodified lines
27# CONFIG_INET_LRO is not set28# CONFIG_INET_LRO is not set
28CONFIG_IPV6=y29CONFIG_IPV6=y
29CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"30CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
31CONFIG_DEVTMPFS=y
32CONFIG_DEVTMPFS_MOUNT=y
30# CONFIG_PREVENT_FIRMWARE_BUILD is not set33# CONFIG_PREVENT_FIRMWARE_BUILD is not set
31CONFIG_PARPORT=y34CONFIG_PARPORT=y
32CONFIG_PARPORT_PC=y35CONFIG_PARPORT_PC=y
arch/parisc/configs/c3000_defconfig+3−0
@@ -5,6 +5,7 @@ CONFIG_IKCONFIG=y · 4 unmodified lines
5CONFIG_IKCONFIG_PROC=y5CONFIG_IKCONFIG_PROC=y
6CONFIG_LOG_BUF_SHIFT=166CONFIG_LOG_BUF_SHIFT=16
7CONFIG_SYSFS_DEPRECATED_V2=y7CONFIG_SYSFS_DEPRECATED_V2=y
8CONFIG_BLK_DEV_INITRD=y
8# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set9# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
9CONFIG_EXPERT=y10CONFIG_EXPERT=y
10CONFIG_KALLSYMS_ALL=y11CONFIG_KALLSYMS_ALL=y
@@ -39,6 +40,8 @@ CONFIG_NETFILTER_DEBUG=y · 28 unmodified lines
39CONFIG_IP_NF_QUEUE=m40CONFIG_IP_NF_QUEUE=m
40CONFIG_NET_PKTGEN=m41CONFIG_NET_PKTGEN=m
41CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"42CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
43CONFIG_DEVTMPFS=y
44CONFIG_DEVTMPFS_MOUNT=y
42# CONFIG_STANDALONE is not set45# CONFIG_STANDALONE is not set
43# CONFIG_PREVENT_FIRMWARE_BUILD is not set46# CONFIG_PREVENT_FIRMWARE_BUILD is not set
44CONFIG_BLK_DEV_UMEM=m47CONFIG_BLK_DEV_UMEM=m
arch/parisc/configs/c8000_defconfig+2−0
@@ -62,6 +62,8 @@ CONFIG_TIPC=m · 61 unmodified lines
62CONFIG_LLC2=m62CONFIG_LLC2=m
63CONFIG_DNS_RESOLVER=y63CONFIG_DNS_RESOLVER=y
64CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"64CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
65CONFIG_DEVTMPFS=y
66CONFIG_DEVTMPFS_MOUNT=y
65# CONFIG_STANDALONE is not set67# CONFIG_STANDALONE is not set
66CONFIG_PARPORT=y68CONFIG_PARPORT=y
67CONFIG_PARPORT_PC=y69CONFIG_PARPORT_PC=y
arch/parisc/configs/default_defconfig+2−0
@@ -49,6 +49,8 @@ CONFIG_INET6_ESP=y · 48 unmodified lines
49CONFIG_INET6_IPCOMP=y49CONFIG_INET6_IPCOMP=y
50CONFIG_LLC2=m50CONFIG_LLC2=m
51CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"51CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
52CONFIG_DEVTMPFS=y
53CONFIG_DEVTMPFS_MOUNT=y
52# CONFIG_STANDALONE is not set54# CONFIG_STANDALONE is not set
53# CONFIG_PREVENT_FIRMWARE_BUILD is not set55# CONFIG_PREVENT_FIRMWARE_BUILD is not set
54CONFIG_PARPORT=y56CONFIG_PARPORT=y
arch/parisc/include/asm/traps.h+1−1
@@ -6,7 +6,7 @@ struct pt_regs; · 5 unmodified lines
6 6
7/* traps.c */7/* traps.c */
8void parisc_terminate(char *msg, struct pt_regs *regs,8void parisc_terminate(char *msg, struct pt_regs *regs,
9 int code, unsigned long offset);9 int code, unsigned long offset) __noreturn __cold;
10 10
11/* mm/fault.c */11/* mm/fault.c */
12void do_page_fault(struct pt_regs *regs, unsigned long code,12void do_page_fault(struct pt_regs *regs, unsigned long code,
arch/parisc/kernel/smp.c+1−7
@@ -72,7 +72,6 @@ enum ipi_message_type { · 71 unmodified lines
72 IPI_NOP=0,72 IPI_NOP=0,
73 IPI_RESCHEDULE=1,73 IPI_RESCHEDULE=1,
74 IPI_CALL_FUNC,74 IPI_CALL_FUNC,
75 IPI_CALL_FUNC_SINGLE,
76 IPI_CPU_START,75 IPI_CPU_START,
77 IPI_CPU_STOP,76 IPI_CPU_STOP,
78 IPI_CPU_TEST77 IPI_CPU_TEST
@@ -164,11 +163,6 @@ ipi_interrupt(int irq, void *dev_id) · 85 unmodified lines
164 generic_smp_call_function_interrupt();163 generic_smp_call_function_interrupt();
165 break;164 break;
166 165
167 case IPI_CALL_FUNC_SINGLE:
168 smp_debug(100, KERN_DEBUG "CPU%d IPI_CALL_FUNC_SINGLE\n", this_cpu);
169 generic_smp_call_function_single_interrupt();
170 break;
171
172 case IPI_CPU_START:166 case IPI_CPU_START:
173 smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);167 smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);
174 break;168 break;
@@ -260,7 +254,7 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask) · 85 unmodified lines
260 254
261void arch_send_call_function_single_ipi(int cpu)255void arch_send_call_function_single_ipi(int cpu)
262{256{
263 send_IPI_single(cpu, IPI_CALL_FUNC_SINGLE);257 send_IPI_single(cpu, IPI_CALL_FUNC);
264}258}
265 259
266/*260/*
arch/parisc/kernel/traps.c+3−8
@@ -291,11 +291,6 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err) · 290 unmodified lines
291 do_exit(SIGSEGV);291 do_exit(SIGSEGV);
292}292}
293 293
294int syscall_ipi(int (*syscall) (struct pt_regs *), struct pt_regs *regs)
295{
296 return syscall(regs);
297}
298
299/* gdb uses break 4,8 */294/* gdb uses break 4,8 */
300#define GDB_BREAK_INSN 0x10004295#define GDB_BREAK_INSN 0x10004
301static void handle_gdb_break(struct pt_regs *regs, int wot)296static void handle_gdb_break(struct pt_regs *regs, int wot)
@@ -805,14 +800,14 @@ void notrace handle_interruption(int code, struct pt_regs *regs) · 503 unmodified lines
805 else {800 else {
806 801
807 /*802 /*
808 * The kernel should never fault on its own address space.803 * The kernel should never fault on its own address space,
804 * unless pagefault_disable() was called before.
809 */805 */
810 806
811 if (fault_space == 0) 807 if (fault_space == 0 && !in_atomic())
812 {808 {
813 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);809 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
814 parisc_terminate("Kernel Fault", regs, code, fault_address);810 parisc_terminate("Kernel Fault", regs, code, fault_address);
815
816 }811 }
817 }812 }
818 813
arch/parisc/lib/memcpy.c+14−1
@@ -56,7 +56,7 @@ · 55 unmodified lines
56#ifdef __KERNEL__56#ifdef __KERNEL__
57#include <linux/module.h>57#include <linux/module.h>
58#include <linux/compiler.h>58#include <linux/compiler.h>
59#include <asm/uaccess.h>59#include <linux/uaccess.h>
60#define s_space "%%sr1"60#define s_space "%%sr1"
61#define d_space "%%sr2"61#define d_space "%%sr2"
62#else62#else
@@ -524,4 +524,17 @@ EXPORT_SYMBOL(copy_to_user); · 461 unmodified lines
524EXPORT_SYMBOL(copy_from_user);524EXPORT_SYMBOL(copy_from_user);
525EXPORT_SYMBOL(copy_in_user);525EXPORT_SYMBOL(copy_in_user);
526EXPORT_SYMBOL(memcpy);526EXPORT_SYMBOL(memcpy);
527
528long probe_kernel_read(void *dst, const void *src, size_t size)
529{
530 unsigned long addr = (unsigned long)src;
531
532 if (size < 0 || addr < PAGE_SIZE)
533 return -EFAULT;
534
535 /* check for I/O space F_EXTEND(0xfff00000) access as well? */
536
537 return __probe_kernel_read(dst, src, size);
538}
539
527#endif540#endif
arch/parisc/mm/fault.c+10−5
@@ -171,20 +171,25 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, · 170 unmodified lines
171 unsigned long address)171 unsigned long address)
172{172{
173 struct vm_area_struct *vma, *prev_vma;173 struct vm_area_struct *vma, *prev_vma;
174 struct task_struct *tsk = current;174 struct task_struct *tsk;
175 struct mm_struct *mm = tsk->mm;175 struct mm_struct *mm;
176 unsigned long acc_type;176 unsigned long acc_type;
177 int fault;177 int fault;
178 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;178 unsigned int flags;
179 179
180 if (in_atomic() || !mm)180 if (in_atomic())
181 goto no_context;181 goto no_context;
182 182
183 tsk = current;
184 mm = tsk->mm;
185 if (!mm)
186 goto no_context;
187
188 flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
183 if (user_mode(regs))189 if (user_mode(regs))
184 flags |= FAULT_FLAG_USER;190 flags |= FAULT_FLAG_USER;
185 191
186 acc_type = parisc_acctyp(code, regs->iir);192 acc_type = parisc_acctyp(code, regs->iir);
187
188 if (acc_type & VM_WRITE)193 if (acc_type & VM_WRITE)
189 flags |= FAULT_FLAG_WRITE;194 flags |= FAULT_FLAG_WRITE;
190retry:195retry:
arch/powerpc/include/asm/jump_label.h+1−1
@@ -19,7 +19,7 @@ · 18 unmodified lines
19 19
20static __always_inline bool arch_static_branch(struct static_key *key)20static __always_inline bool arch_static_branch(struct static_key *key)
21{21{
22 asm goto("1:\n\t"22 asm_volatile_goto("1:\n\t"
23 "nop\n\t"23 "nop\n\t"
24 ".pushsection __jump_table, \"aw\"\n\t"24 ".pushsection __jump_table, \"aw\"\n\t"
25 JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"25 JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"
arch/powerpc/kernel/iommu.c+1−1
@@ -661,7 +661,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid) · 660 unmodified lines
661 /* number of bytes needed for the bitmap */661 /* number of bytes needed for the bitmap */
662 sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);662 sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
663 663
664 page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz));664 page = alloc_pages_node(nid, GFP_KERNEL, get_order(sz));
665 if (!page)665 if (!page)
666 panic("iommu_init_table: Can't allocate %ld bytes\n", sz);666 panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
667 tbl->it_map = page_address(page);667 tbl->it_map = page_address(page);
arch/powerpc/kernel/irq.c+3−2
@@ -495,14 +495,15 @@ void __do_irq(struct pt_regs *regs) · 494 unmodified lines
495void do_IRQ(struct pt_regs *regs)495void do_IRQ(struct pt_regs *regs)
496{496{
497 struct pt_regs *old_regs = set_irq_regs(regs);497 struct pt_regs *old_regs = set_irq_regs(regs);
498 struct thread_info *curtp, *irqtp;498 struct thread_info *curtp, *irqtp, *sirqtp;
499 499
500 /* Switch to the irq stack to handle this */500 /* Switch to the irq stack to handle this */
501 curtp = current_thread_info();501 curtp = current_thread_info();
502 irqtp = hardirq_ctx[raw_smp_processor_id()];502 irqtp = hardirq_ctx[raw_smp_processor_id()];
503 sirqtp = softirq_ctx[raw_smp_processor_id()];
503 504
504 /* Already there ? */505 /* Already there ? */
505 if (unlikely(curtp == irqtp)) {506 if (unlikely(curtp == irqtp || curtp == sirqtp)) {
506 __do_irq(regs);507 __do_irq(regs);
507 set_irq_regs(old_regs);508 set_irq_regs(old_regs);
508 return;509 return;
arch/powerpc/kernel/sysfs.c+16−2
@@ -17,6 +17,7 @@ · 16 unmodified lines
17#include <asm/machdep.h>17#include <asm/machdep.h>
18#include <asm/smp.h>18#include <asm/smp.h>
19#include <asm/pmc.h>19#include <asm/pmc.h>
20#include <asm/firmware.h>
20 21
21#include "cacheinfo.h"22#include "cacheinfo.h"
22 23
@@ -179,15 +180,25 @@ SYSFS_PMCSETUP(spurr, SPRN_SPURR); · 156 unmodified lines
179SYSFS_PMCSETUP(dscr, SPRN_DSCR);180SYSFS_PMCSETUP(dscr, SPRN_DSCR);
180SYSFS_PMCSETUP(pir, SPRN_PIR);181SYSFS_PMCSETUP(pir, SPRN_PIR);
181 182
183/*
184 Lets only enable read for phyp resources and
185 enable write when needed with a separate function.
186 Lets be conservative and default to pseries.
187*/
182static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);188static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
183static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);189static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
184static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);190static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);
185static DEVICE_ATTR(purr, 0600, show_purr, store_purr);191static DEVICE_ATTR(purr, 0400, show_purr, store_purr);
186static DEVICE_ATTR(pir, 0400, show_pir, NULL);192static DEVICE_ATTR(pir, 0400, show_pir, NULL);
187 193
188unsigned long dscr_default = 0;194unsigned long dscr_default = 0;
189EXPORT_SYMBOL(dscr_default);195EXPORT_SYMBOL(dscr_default);
190 196
197static void add_write_permission_dev_attr(struct device_attribute *attr)
198{
199 attr->attr.mode |= 0200;
200}
201
191static ssize_t show_dscr_default(struct device *dev,202static ssize_t show_dscr_default(struct device *dev,
192 struct device_attribute *attr, char *buf)203 struct device_attribute *attr, char *buf)
193{204{
@@ -394,8 +405,11 @@ static void register_cpu_online(unsigned int cpu) · 200 unmodified lines
394 if (cpu_has_feature(CPU_FTR_MMCRA))405 if (cpu_has_feature(CPU_FTR_MMCRA))
395 device_create_file(s, &dev_attr_mmcra);406 device_create_file(s, &dev_attr_mmcra);
396 407
397 if (cpu_has_feature(CPU_FTR_PURR))408 if (cpu_has_feature(CPU_FTR_PURR)) {
409 if (!firmware_has_feature(FW_FEATURE_LPAR))
410 add_write_permission_dev_attr(&dev_attr_purr);
398 device_create_file(s, &dev_attr_purr);411 device_create_file(s, &dev_attr_purr);
412 }
399 413
400 if (cpu_has_feature(CPU_FTR_SPURR))414 if (cpu_has_feature(CPU_FTR_SPURR))
401 device_create_file(s, &dev_attr_spurr);415 device_create_file(s, &dev_attr_spurr);
arch/powerpc/kernel/tm.S+64−31
@@ -79,6 +79,11 @@ _GLOBAL(tm_abort) · 78 unmodified lines
79 TABORT(R3)79 TABORT(R3)
80 blr80 blr
81 81
82 .section ".toc","aw"
83DSCR_DEFAULT:
84 .tc dscr_default[TC],dscr_default
85
86 .section ".text"
82 87
83/* void tm_reclaim(struct thread_struct *thread,88/* void tm_reclaim(struct thread_struct *thread,
84 * unsigned long orig_msr,89 * unsigned long orig_msr,
@@ -123,6 +128,7 @@ _GLOBAL(tm_reclaim) · 38 unmodified lines
123 mr r15, r14128 mr r15, r14
124 ori r15, r15, MSR_FP129 ori r15, r15, MSR_FP
125 li r16, MSR_RI130 li r16, MSR_RI
131 ori r16, r16, MSR_EE /* IRQs hard off */
126 andc r15, r15, r16132 andc r15, r15, r16
127 oris r15, r15, MSR_VEC@h133 oris r15, r15, MSR_VEC@h
128#ifdef CONFIG_VSX134#ifdef CONFIG_VSX
@@ -187,11 +193,18 @@ dont_backup_fp: · 58 unmodified lines
187 std r1, PACATMSCRATCH(r13)193 std r1, PACATMSCRATCH(r13)
188 ld r1, PACAR1(r13)194 ld r1, PACAR1(r13)
189 195
196 /* Store the PPR in r11 and reset to decent value */
197 std r11, GPR11(r1) /* Temporary stash */
198 mfspr r11, SPRN_PPR
199 HMT_MEDIUM
200
190 /* Now get some more GPRS free */201 /* Now get some more GPRS free */
191 std r7, GPR7(r1) /* Temporary stash */202 std r7, GPR7(r1) /* Temporary stash */
192 std r12, GPR12(r1) /* '' '' '' */203 std r12, GPR12(r1) /* '' '' '' */
193 ld r12, STACK_PARAM(0)(r1) /* Param 0, thread_struct * */204 ld r12, STACK_PARAM(0)(r1) /* Param 0, thread_struct * */
194 205
206 std r11, THREAD_TM_PPR(r12) /* Store PPR and free r11 */
207
195 addi r7, r12, PT_CKPT_REGS /* Thread's ckpt_regs */208 addi r7, r12, PT_CKPT_REGS /* Thread's ckpt_regs */
196 209
197 /* Make r7 look like an exception frame so that we210 /* Make r7 look like an exception frame so that we
@@ -203,15 +216,19 @@ dont_backup_fp: · 5 unmodified lines
203 SAVE_GPR(0, r7) /* user r0 */216 SAVE_GPR(0, r7) /* user r0 */
204 SAVE_GPR(2, r7) /* user r2 */217 SAVE_GPR(2, r7) /* user r2 */
205 SAVE_4GPRS(3, r7) /* user r3-r6 */218 SAVE_4GPRS(3, r7) /* user r3-r6 */
206 SAVE_4GPRS(8, r7) /* user r8-r11 */219 SAVE_GPR(8, r7) /* user r8 */
220 SAVE_GPR(9, r7) /* user r9 */
221 SAVE_GPR(10, r7) /* user r10 */
207 ld r3, PACATMSCRATCH(r13) /* user r1 */222 ld r3, PACATMSCRATCH(r13) /* user r1 */
208 ld r4, GPR7(r1) /* user r7 */223 ld r4, GPR7(r1) /* user r7 */
209 ld r5, GPR12(r1) /* user r12 */224 ld r5, GPR11(r1) /* user r11 */
210 GET_SCRATCH0(6) /* user r13 */225 ld r6, GPR12(r1) /* user r12 */
226 GET_SCRATCH0(8) /* user r13 */
211 std r3, GPR1(r7)227 std r3, GPR1(r7)
212 std r4, GPR7(r7)228 std r4, GPR7(r7)
213 std r5, GPR12(r7)229 std r5, GPR11(r7)
214 std r6, GPR13(r7)230 std r6, GPR12(r7)
231 std r8, GPR13(r7)
215 232
216 SAVE_NVGPRS(r7) /* user r14-r31 */233 SAVE_NVGPRS(r7) /* user r14-r31 */
217 234
@@ -234,14 +251,12 @@ dont_backup_fp: · 16 unmodified lines
234 std r6, _XER(r7)251 std r6, _XER(r7)
235 252
236 253
237 /* ******************** TAR, PPR, DSCR ********** */254 /* ******************** TAR, DSCR ********** */
238 mfspr r3, SPRN_TAR255 mfspr r3, SPRN_TAR
239 mfspr r4, SPRN_PPR256 mfspr r4, SPRN_DSCR
240 mfspr r5, SPRN_DSCR
241 257
242 std r3, THREAD_TM_TAR(r12)258 std r3, THREAD_TM_TAR(r12)
243 std r4, THREAD_TM_PPR(r12)259 std r4, THREAD_TM_DSCR(r12)
244 std r5, THREAD_TM_DSCR(r12)
245 260
246 /* MSR and flags: We don't change CRs, and we don't need to alter261 /* MSR and flags: We don't change CRs, and we don't need to alter
247 * MSR.262 * MSR.
@@ -258,7 +273,7 @@ dont_backup_fp: · 10 unmodified lines
258 std r3, THREAD_TM_TFHAR(r12)273 std r3, THREAD_TM_TFHAR(r12)
259 std r4, THREAD_TM_TFIAR(r12)274 std r4, THREAD_TM_TFIAR(r12)
260 275
261 /* AMR and PPR are checkpointed too, but are unsupported by Linux. */276 /* AMR is checkpointed too, but is unsupported by Linux. */
262 277
263 /* Restore original MSR/IRQ state & clear TM mode */278 /* Restore original MSR/IRQ state & clear TM mode */
264 ld r14, TM_FRAME_L0(r1) /* Orig MSR */279 ld r14, TM_FRAME_L0(r1) /* Orig MSR */
@@ -274,6 +289,12 @@ dont_backup_fp: · 9 unmodified lines
274 mtcr r4289 mtcr r4
275 mtlr r0290 mtlr r0
276 ld r2, 40(r1)291 ld r2, 40(r1)
292
293 /* Load system default DSCR */
294 ld r4, DSCR_DEFAULT@toc(r2)
295 ld r0, 0(r4)
296 mtspr SPRN_DSCR, r0
297
277 blr298 blr
278 299
279 300
@@ -358,25 +379,24 @@ dont_restore_fp: · 78 unmodified lines
358 379
359restore_gprs:380restore_gprs:
360 381
361 /* ******************** TAR, PPR, DSCR ********** */382 /* ******************** CR,LR,CCR,MSR ********** */
362 ld r4, THREAD_TM_TAR(r3)383 ld r4, _CTR(r7)
363 ld r5, THREAD_TM_PPR(r3)384 ld r5, _LINK(r7)
364 ld r6, THREAD_TM_DSCR(r3)385 ld r6, _CCR(r7)
386 ld r8, _XER(r7)
365 387
366 mtspr SPRN_TAR, r4388 mtctr r4
367 mtspr SPRN_PPR, r5389 mtlr r5
368 mtspr SPRN_DSCR, r6390 mtcr r6
391 mtxer r8
369 392
370 /* ******************** CR,LR,CCR,MSR ********** */393 /* ******************** TAR ******************** */
371 ld r3, _CTR(r7)394 ld r4, THREAD_TM_TAR(r3)
372 ld r4, _LINK(r7)395 mtspr SPRN_TAR, r4
373 ld r5, _CCR(r7)
374 ld r6, _XER(r7)
375 396
376 mtctr r3397 /* Load up the PPR and DSCR in GPRs only at this stage */
377 mtlr r4398 ld r5, THREAD_TM_DSCR(r3)
378 mtcr r5399 ld r6, THREAD_TM_PPR(r3)
379 mtxer r6
380 400
381 /* Clear the MSR RI since we are about to change R1. EE is already off401 /* Clear the MSR RI since we are about to change R1. EE is already off
382 */402 */
@@ -384,19 +404,26 @@ restore_gprs: · 1 unmodified line
384 mtmsrd r4, 1404 mtmsrd r4, 1
385 405
386 REST_4GPRS(0, r7) /* GPR0-3 */406 REST_4GPRS(0, r7) /* GPR0-3 */
387 REST_GPR(4, r7) /* GPR4-6 */407 REST_GPR(4, r7) /* GPR4 */
388 REST_GPR(5, r7)
389 REST_GPR(6, r7)
390 REST_4GPRS(8, r7) /* GPR8-11 */408 REST_4GPRS(8, r7) /* GPR8-11 */
391 REST_2GPRS(12, r7) /* GPR12-13 */409 REST_2GPRS(12, r7) /* GPR12-13 */
392 410
393 REST_NVGPRS(r7) /* GPR14-31 */411 REST_NVGPRS(r7) /* GPR14-31 */
394 412
395 ld r7, GPR7(r7) /* GPR7 */413 /* Load up PPR and DSCR here so we don't run with user values for long
414 */
415 mtspr SPRN_DSCR, r5
416 mtspr SPRN_PPR, r6
417
418 REST_GPR(5, r7) /* GPR5-7 */
419 REST_GPR(6, r7)
420 ld r7, GPR7(r7)
396 421
397 /* Commit register state as checkpointed state: */422 /* Commit register state as checkpointed state: */
398 TRECHKPT423 TRECHKPT
399 424
425 HMT_MEDIUM
426
400 /* Our transactional state has now changed.427 /* Our transactional state has now changed.
401 *428 *
402 * Now just get out of here. Transactional (current) state will be429 * Now just get out of here. Transactional (current) state will be
@@ -419,6 +446,12 @@ restore_gprs: · 16 unmodified lines
419 mtcr r4446 mtcr r4
420 mtlr r0447 mtlr r0
421 ld r2, 40(r1)448 ld r2, 40(r1)
449
450 /* Load system default DSCR */
451 ld r4, DSCR_DEFAULT@toc(r2)
452 ld r0, 0(r4)
453 mtspr SPRN_DSCR, r0
454
422 blr455 blr
423 456
424 /* ****************************************************************** */457 /* ****************************************************************** */
arch/powerpc/kernel/vio.c+8−4
@@ -1530,11 +1530,15 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, · 1529 unmodified lines
1530 const char *cp;1530 const char *cp;
1531 1531
1532 dn = dev->of_node;1532 dn = dev->of_node;
1533 if (!dn)1533 if (!dn) {
1534 return -ENODEV;1534 strcat(buf, "\n");
1535 return strlen(buf);
1536 }
1535 cp = of_get_property(dn, "compatible", NULL);1537 cp = of_get_property(dn, "compatible", NULL);
1536 if (!cp)1538 if (!cp) {
1537 return -ENODEV;1539 strcat(buf, "\n");
1540 return strlen(buf);
1541 }
1538 1542
1539 return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);1543 return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
1540}1544}
arch/powerpc/kvm/book3s_hv_rmhandlers.S+1−1
@@ -1066,7 +1066,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) · 1065 unmodified lines
1066BEGIN_FTR_SECTION1066BEGIN_FTR_SECTION
1067 mfspr r8, SPRN_DSCR1067 mfspr r8, SPRN_DSCR
1068 ld r7, HSTATE_DSCR(r13)1068 ld r7, HSTATE_DSCR(r13)
1069 std r8, VCPU_DSCR(r7)1069 std r8, VCPU_DSCR(r9)
1070 mtspr SPRN_DSCR, r71070 mtspr SPRN_DSCR, r7
1071END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)1071END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
1072 1072
arch/powerpc/kvm/e500_mmu_host.c+17−1
@@ -332,6 +332,13 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, · 331 unmodified lines
332 unsigned long hva;332 unsigned long hva;
333 int pfnmap = 0;333 int pfnmap = 0;
334 int tsize = BOOK3E_PAGESZ_4K;334 int tsize = BOOK3E_PAGESZ_4K;
335 int ret = 0;
336 unsigned long mmu_seq;
337 struct kvm *kvm = vcpu_e500->vcpu.kvm;
338
339 /* used to check for invalidations in progress */
340 mmu_seq = kvm->mmu_notifier_seq;
341 smp_rmb();
335 342
336 /*343 /*
337 * Translate guest physical to true physical, acquiring344 * Translate guest physical to true physical, acquiring
@@ -449,6 +456,12 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, · 111 unmodified lines
449 gvaddr &= ~((tsize_pages << PAGE_SHIFT) - 1);456 gvaddr &= ~((tsize_pages << PAGE_SHIFT) - 1);
450 }457 }
451 458
459 spin_lock(&kvm->mmu_lock);
460 if (mmu_notifier_retry(kvm, mmu_seq)) {
461 ret = -EAGAIN;
462 goto out;
463 }
464
452 kvmppc_e500_ref_setup(ref, gtlbe, pfn);465 kvmppc_e500_ref_setup(ref, gtlbe, pfn);
453 466
454 kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,467 kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
@@ -457,10 +470,13 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, · 2 unmodified lines
457 /* Clear i-cache for new pages */470 /* Clear i-cache for new pages */
458 kvmppc_mmu_flush_icache(pfn);471 kvmppc_mmu_flush_icache(pfn);
459 472
473out:
474 spin_unlock(&kvm->mmu_lock);
475
460 /* Drop refcount on page, so that mmu notifiers can clear it */476 /* Drop refcount on page, so that mmu notifiers can clear it */
461 kvm_release_pfn_clean(pfn);477 kvm_release_pfn_clean(pfn);
462 478
463 return 0;479 return ret;
464}480}
465 481
466/* XXX only map the one-one case, for now use TLB0 */482/* XXX only map the one-one case, for now use TLB0 */
arch/powerpc/lib/checksum_64.S+42−16
@@ -226,19 +226,35 @@ _GLOBAL(csum_partial) · 225 unmodified lines
226 blr226 blr
227 227
228 228
229 .macro source229 .macro srcnr
230100:230100:
231 .section __ex_table,"a"231 .section __ex_table,"a"
232 .align 3232 .align 3
233 .llong 100b,.Lsrc_error233 .llong 100b,.Lsrc_error_nr
234 .previous234 .previous
235 .endm235 .endm
236 236
237 .macro dest237 .macro source
238150:
239 .section __ex_table,"a"
240 .align 3
241 .llong 150b,.Lsrc_error
242 .previous
243 .endm
244
245 .macro dstnr
238200:246200:
239 .section __ex_table,"a"247 .section __ex_table,"a"
240 .align 3248 .align 3
241 .llong 200b,.Ldest_error249 .llong 200b,.Ldest_error_nr
250 .previous
251 .endm
252
253 .macro dest
254250:
255 .section __ex_table,"a"
256 .align 3
257 .llong 250b,.Ldest_error
242 .previous258 .previous
243 .endm259 .endm
244 260
@@ -269,16 +285,16 @@ _GLOBAL(csum_partial_copy_generic) · 24 unmodified lines
269 rldicl. r6,r3,64-1,64-2 /* r6 = (r3 & 0x3) >> 1 */285 rldicl. r6,r3,64-1,64-2 /* r6 = (r3 & 0x3) >> 1 */
270 beq .Lcopy_aligned286 beq .Lcopy_aligned
271 287
272 li r7,4288 li r9,4
273 sub r6,r7,r6289 sub r6,r9,r6
274 mtctr r6290 mtctr r6
275 291
2761:2921:
277source; lhz r6,0(r3) /* align to doubleword */293srcnr; lhz r6,0(r3) /* align to doubleword */
278 subi r5,r5,2294 subi r5,r5,2
279 addi r3,r3,2295 addi r3,r3,2
280 adde r0,r0,r6296 adde r0,r0,r6
281dest; sth r6,0(r4)297dstnr; sth r6,0(r4)
282 addi r4,r4,2298 addi r4,r4,2
283 bdnz 1b299 bdnz 1b
284 300
@@ -392,10 +408,10 @@ dest; std r16,56(r4) · 107 unmodified lines
392 408
393 mtctr r6409 mtctr r6
3943:4103:
395source; ld r6,0(r3)411srcnr; ld r6,0(r3)
396 addi r3,r3,8412 addi r3,r3,8
397 adde r0,r0,r6413 adde r0,r0,r6
398dest; std r6,0(r4)414dstnr; std r6,0(r4)
399 addi r4,r4,8415 addi r4,r4,8
400 bdnz 3b416 bdnz 3b
401 417
@@ -405,10 +421,10 @@ dest; std r6,0(r4) · 3 unmodified lines
405 srdi. r6,r5,2421 srdi. r6,r5,2
406 beq .Lcopy_tail_halfword422 beq .Lcopy_tail_halfword
407 423
408source; lwz r6,0(r3)424srcnr; lwz r6,0(r3)
409 addi r3,r3,4425 addi r3,r3,4
410 adde r0,r0,r6426 adde r0,r0,r6
411dest; stw r6,0(r4)427dstnr; stw r6,0(r4)
412 addi r4,r4,4428 addi r4,r4,4
413 subi r5,r5,4429 subi r5,r5,4
414 430
@@ -416,10 +432,10 @@ dest; stw r6,0(r4) · 1 unmodified line
416 srdi. r6,r5,1432 srdi. r6,r5,1
417 beq .Lcopy_tail_byte433 beq .Lcopy_tail_byte
418 434
419source; lhz r6,0(r3)435srcnr; lhz r6,0(r3)
420 addi r3,r3,2436 addi r3,r3,2
421 adde r0,r0,r6437 adde r0,r0,r6
422dest; sth r6,0(r4)438dstnr; sth r6,0(r4)
423 addi r4,r4,2439 addi r4,r4,2
424 subi r5,r5,2440 subi r5,r5,2
425 441
@@ -427,10 +443,10 @@ dest; sth r6,0(r4) · 1 unmodified line
427 andi. r6,r5,1443 andi. r6,r5,1
428 beq .Lcopy_finish444 beq .Lcopy_finish
429 445
430source; lbz r6,0(r3)446srcnr; lbz r6,0(r3)
431 sldi r9,r6,8 /* Pad the byte out to 16 bits */447 sldi r9,r6,8 /* Pad the byte out to 16 bits */
432 adde r0,r0,r9448 adde r0,r0,r9
433dest; stb r6,0(r4)449dstnr; stb r6,0(r4)
434 450
435.Lcopy_finish:451.Lcopy_finish:
436 addze r0,r0 /* add in final carry */452 addze r0,r0 /* add in final carry */
@@ -440,6 +456,11 @@ dest; stb r6,0(r4) · 3 unmodified lines
440 blr456 blr
441 457
442.Lsrc_error:458.Lsrc_error:
459 ld r14,STK_REG(R14)(r1)
460 ld r15,STK_REG(R15)(r1)
461 ld r16,STK_REG(R16)(r1)
462 addi r1,r1,STACKFRAMESIZE
463.Lsrc_error_nr:
443 cmpdi 0,r7,0464 cmpdi 0,r7,0
444 beqlr465 beqlr
445 li r6,-EFAULT466 li r6,-EFAULT
@@ -447,6 +468,11 @@ dest; stb r6,0(r4) · 1 unmodified line
447 blr468 blr
448 469
449.Ldest_error:470.Ldest_error:
471 ld r14,STK_REG(R14)(r1)
472 ld r15,STK_REG(R15)(r1)
473 ld r16,STK_REG(R16)(r1)
474 addi r1,r1,STACKFRAMESIZE
475.Ldest_error_nr:
450 cmpdi 0,r8,0476 cmpdi 0,r8,0
451 beqlr477 beqlr
452 li r6,-EFAULT478 li r6,-EFAULT
arch/powerpc/mm/init_64.c+4−0
@@ -300,5 +300,9 @@ void vmemmap_free(unsigned long start, unsigned long end) · 299 unmodified lines
300{300{
301}301}
302 302
303void register_page_bootmem_memmap(unsigned long section_nr,
304 struct page *start_page, unsigned long size)
305{
306}
303#endif /* CONFIG_SPARSEMEM_VMEMMAP */307#endif /* CONFIG_SPARSEMEM_VMEMMAP */
304 308
arch/powerpc/mm/mem.c+9−0
@@ -297,12 +297,21 @@ void __init paging_init(void) · 296 unmodified lines
297}297}
298#endif /* ! CONFIG_NEED_MULTIPLE_NODES */298#endif /* ! CONFIG_NEED_MULTIPLE_NODES */
299 299
300static void __init register_page_bootmem_info(void)
301{
302 int i;
303
304 for_each_online_node(i)
305 register_page_bootmem_info_node(NODE_DATA(i));
306}
307
300void __init mem_init(void)308void __init mem_init(void)
301{309{
302#ifdef CONFIG_SWIOTLB310#ifdef CONFIG_SWIOTLB
303 swiotlb_init(0);311 swiotlb_init(0);
304#endif312#endif
305 313
314 register_page_bootmem_info();
306 high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);315 high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
307 set_max_mapnr(max_pfn);316 set_max_mapnr(max_pfn);
308 free_all_bootmem();317 free_all_bootmem();
arch/powerpc/perf/power8-pmu.c+3−2
@@ -199,6 +199,7 @@ · 198 unmodified lines
199#define MMCR1_UNIT_SHIFT(pmc) (60 - (4 * ((pmc) - 1)))199#define MMCR1_UNIT_SHIFT(pmc) (60 - (4 * ((pmc) - 1)))
200#define MMCR1_COMBINE_SHIFT(pmc) (35 - ((pmc) - 1))200#define MMCR1_COMBINE_SHIFT(pmc) (35 - ((pmc) - 1))
201#define MMCR1_PMCSEL_SHIFT(pmc) (24 - (((pmc) - 1)) * 8)201#define MMCR1_PMCSEL_SHIFT(pmc) (24 - (((pmc) - 1)) * 8)
202#define MMCR1_FAB_SHIFT 36
202#define MMCR1_DC_QUAL_SHIFT 47203#define MMCR1_DC_QUAL_SHIFT 47
203#define MMCR1_IC_QUAL_SHIFT 46204#define MMCR1_IC_QUAL_SHIFT 46
204 205
@@ -388,8 +389,8 @@ static int power8_compute_mmcr(u64 event[], int n_ev, · 183 unmodified lines
388 * the threshold bits are used for the match value.389 * the threshold bits are used for the match value.
389 */390 */
390 if (event_is_fab_match(event[i])) {391 if (event_is_fab_match(event[i])) {
391 mmcr1 |= (event[i] >> EVENT_THR_CTL_SHIFT) &392 mmcr1 |= ((event[i] >> EVENT_THR_CTL_SHIFT) &
392 EVENT_THR_CTL_MASK;393 EVENT_THR_CTL_MASK) << MMCR1_FAB_SHIFT;
393 } else {394 } else {
394 val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;395 val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;
395 mmcra |= val << MMCRA_THR_CTL_SHIFT;396 mmcra |= val << MMCRA_THR_CTL_SHIFT;
arch/s390/include/asm/jump_label.h+1−1
@@ -15,7 +15,7 @@ · 14 unmodified lines
15 15
16static __always_inline bool arch_static_branch(struct static_key *key)16static __always_inline bool arch_static_branch(struct static_key *key)
17{17{
18 asm goto("0: brcl 0,0\n"18 asm_volatile_goto("0: brcl 0,0\n"
19 ".pushsection __jump_table, \"aw\"\n"19 ".pushsection __jump_table, \"aw\"\n"
20 ASM_ALIGN "\n"20 ASM_ALIGN "\n"
21 ASM_PTR " 0b, %l[label], %0\n"21 ASM_PTR " 0b, %l[label], %0\n"
arch/s390/include/asm/pgtable.h+3−1
@@ -748,7 +748,9 @@ static inline void pgste_set_key(pte_t *ptep, pgste_t pgste, pte_t entry) · 747 unmodified lines
748 748
749static inline void pgste_set_pte(pte_t *ptep, pte_t entry)749static inline void pgste_set_pte(pte_t *ptep, pte_t entry)
750{750{
751 if (!MACHINE_HAS_ESOP && (pte_val(entry) & _PAGE_WRITE)) {751 if (!MACHINE_HAS_ESOP &&
752 (pte_val(entry) & _PAGE_PRESENT) &&
753 (pte_val(entry) & _PAGE_WRITE)) {
752 /*754 /*
753 * Without enhanced suppression-on-protection force755 * Without enhanced suppression-on-protection force
754 * the dirty bit on for all writable ptes.756 * the dirty bit on for all writable ptes.
arch/s390/include/asm/timex.h+14−14
@@ -71,30 +71,30 @@ static inline void local_tick_enable(unsigned long long comp) · 70 unmodified lines
71 71
72typedef unsigned long long cycles_t;72typedef unsigned long long cycles_t;
73 73
74static inline unsigned long long get_tod_clock(void)
75{
76 unsigned long long clk;
77
78#ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES
79 asm volatile(".insn s,0xb27c0000,%0" : "=Q" (clk) : : "cc");
80#else
81 asm volatile("stck %0" : "=Q" (clk) : : "cc");
82#endif
83 return clk;
84}
85
86static inline void get_tod_clock_ext(char *clk)74static inline void get_tod_clock_ext(char *clk)
87{75{
88 asm volatile("stcke %0" : "=Q" (*clk) : : "cc");76 asm volatile("stcke %0" : "=Q" (*clk) : : "cc");
89}77}
90 78
91static inline unsigned long long get_tod_clock_xt(void)79static inline unsigned long long get_tod_clock(void)
92{80{
93 unsigned char clk[16];81 unsigned char clk[16];
94 get_tod_clock_ext(clk);82 get_tod_clock_ext(clk);
95 return *((unsigned long long *)&clk[1]);83 return *((unsigned long long *)&clk[1]);
96}84}
97 85
86static inline unsigned long long get_tod_clock_fast(void)
87{
88#ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES
89 unsigned long long clk;
90
91 asm volatile("stckf %0" : "=Q" (clk) : : "cc");
92 return clk;
93#else
94 return get_tod_clock();
95#endif
96}
97
98static inline cycles_t get_cycles(void)98static inline cycles_t get_cycles(void)
99{99{
100 return (cycles_t) get_tod_clock() >> 2;100 return (cycles_t) get_tod_clock() >> 2;
@@ -125,7 +125,7 @@ extern u64 sched_clock_base_cc; · 24 unmodified lines
125 */125 */
126static inline unsigned long long get_tod_clock_monotonic(void)126static inline unsigned long long get_tod_clock_monotonic(void)
127{127{
128 return get_tod_clock_xt() - sched_clock_base_cc;128 return get_tod_clock() - sched_clock_base_cc;
129}129}
130 130
131/**131/**
arch/s390/kernel/compat_signal.c+2−2
@@ -99,7 +99,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) · 98 unmodified lines
99 break;99 break;
100 }100 }
101 }101 }
102 return err;102 return err ? -EFAULT : 0;
103}103}
104 104
105int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)105int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
@@ -148,7 +148,7 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from) · 42 unmodified lines
148 break;148 break;
149 }149 }
150 }150 }
151 return err;151 return err ? -EFAULT : 0;
152}152}
153 153
154static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)154static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)
arch/s390/kernel/crash_dump.c+20−22
@@ -40,28 +40,26 @@ static inline void *load_real_addr(void *addr) · 39 unmodified lines
40}40}
41 41
42/*42/*
43 * Copy up to one page to vmalloc or real memory43 * Copy real to virtual or real memory
44 */44 */
45static ssize_t copy_page_real(void *buf, void *src, size_t csize)45static int copy_from_realmem(void *dest, void *src, size_t count)
46{46{
47 size_t size;47 unsigned long size;
48 int rc;
48 49
49 if (is_vmalloc_addr(buf)) {50 if (!count)
50 BUG_ON(csize >= PAGE_SIZE);51 return 0;
51 /* If buf is not page aligned, copy first part */52 if (!is_vmalloc_or_module_addr(dest))
52 size = min(roundup(__pa(buf), PAGE_SIZE) - __pa(buf), csize);53 return memcpy_real(dest, src, count);
53 if (size) {54 do {
54 if (memcpy_real(load_real_addr(buf), src, size))55 size = min(count, PAGE_SIZE - (__pa(dest) & ~PAGE_MASK));
55 return -EFAULT;56 if (memcpy_real(load_real_addr(dest), src, size))
56 buf += size;57 return -EFAULT;
57 src += size;58 count -= size;
58 }59 dest += size;
59 /* Copy second part */60 src += size;
60 size = csize - size;61 } while (count);
61 return (size) ? memcpy_real(load_real_addr(buf), src, size) : 0;62 return 0;
62 } else {
63 return memcpy_real(buf, src, csize);
64 }
65}63}
66 64
67/*65/*
@@ -114,7 +112,7 @@ static ssize_t copy_oldmem_page_kdump(char *buf, size_t csize, · 46 unmodified lines
114 rc = copy_to_user_real((void __force __user *) buf,112 rc = copy_to_user_real((void __force __user *) buf,
115 (void *) src, csize);113 (void *) src, csize);
116 else114 else
117 rc = copy_page_real(buf, (void *) src, csize);115 rc = copy_from_realmem(buf, (void *) src, csize);
118 return (rc == 0) ? rc : csize;116 return (rc == 0) ? rc : csize;
119}117}
120 118
@@ -210,7 +208,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count) · 89 unmodified lines
210 if (OLDMEM_BASE) {208 if (OLDMEM_BASE) {
211 if ((unsigned long) src < OLDMEM_SIZE) {209 if ((unsigned long) src < OLDMEM_SIZE) {
212 copied = min(count, OLDMEM_SIZE - (unsigned long) src);210 copied = min(count, OLDMEM_SIZE - (unsigned long) src);
213 rc = memcpy_real(dest, src + OLDMEM_BASE, copied);211 rc = copy_from_realmem(dest, src + OLDMEM_BASE, copied);
214 if (rc)212 if (rc)
215 return rc;213 return rc;
216 }214 }
@@ -223,7 +221,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count) · 6 unmodified lines
223 return rc;221 return rc;
224 }222 }
225 }223 }
226 return memcpy_real(dest + copied, src + copied, count - copied);224 return copy_from_realmem(dest + copied, src + copied, count - copied);
227}225}
228 226
229/*227/*
arch/s390/kernel/debug.c+1−1
@@ -867,7 +867,7 @@ static inline void · 866 unmodified lines
867debug_finish_entry(debug_info_t * id, debug_entry_t* active, int level,867debug_finish_entry(debug_info_t * id, debug_entry_t* active, int level,
868 int exception)868 int exception)
869{869{
870 active->id.stck = get_tod_clock();870 active->id.stck = get_tod_clock_fast();
871 active->id.fields.cpuid = smp_processor_id();871 active->id.fields.cpuid = smp_processor_id();
872 active->caller = __builtin_return_address(0);872 active->caller = __builtin_return_address(0);
873 active->id.fields.exception = exception;873 active->id.fields.exception = exception;
arch/s390/kernel/entry.S+1−0
@@ -266,6 +266,7 @@ sysc_sigpending: · 265 unmodified lines
266 tm __TI_flags+3(%r12),_TIF_SYSCALL266 tm __TI_flags+3(%r12),_TIF_SYSCALL
267 jno sysc_return267 jno sysc_return
268 lm %r2,%r7,__PT_R2(%r11) # load svc arguments268 lm %r2,%r7,__PT_R2(%r11) # load svc arguments
269 l %r10,__TI_sysc_table(%r12) # 31 bit system call table
269 xr %r8,%r8 # svc 0 returns -ENOSYS270 xr %r8,%r8 # svc 0 returns -ENOSYS
270 clc __PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2)271 clc __PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2)
271 jnl sysc_nr_ok # invalid svc number -> do svc 0272 jnl sysc_nr_ok # invalid svc number -> do svc 0
arch/s390/kernel/entry64.S+1−0
@@ -297,6 +297,7 @@ sysc_sigpending: · 296 unmodified lines
297 tm __TI_flags+7(%r12),_TIF_SYSCALL297 tm __TI_flags+7(%r12),_TIF_SYSCALL
298 jno sysc_return298 jno sysc_return
299 lmg %r2,%r7,__PT_R2(%r11) # load svc arguments299 lmg %r2,%r7,__PT_R2(%r11) # load svc arguments
300 lg %r10,__TI_sysc_table(%r12) # address of system call table
300 lghi %r8,0 # svc 0 returns -ENOSYS301 lghi %r8,0 # svc 0 returns -ENOSYS
301 llgh %r1,__PT_INT_CODE+2(%r11) # load new svc number302 llgh %r1,__PT_INT_CODE+2(%r11) # load new svc number
302 cghi %r1,NR_syscalls303 cghi %r1,NR_syscalls
arch/s390/kernel/kprobes.c+5−1
@@ -67,6 +67,11 @@ static int __kprobes is_prohibited_opcode(kprobe_opcode_t *insn) · 66 unmodified lines
67 case 0xac: /* stnsm */67 case 0xac: /* stnsm */
68 case 0xad: /* stosm */68 case 0xad: /* stosm */
69 return -EINVAL;69 return -EINVAL;
70 case 0xc6:
71 switch (insn[0] & 0x0f) {
72 case 0x00: /* exrl */
73 return -EINVAL;
74 }
70 }75 }
71 switch (insn[0]) {76 switch (insn[0]) {
72 case 0x0101: /* pr */77 case 0x0101: /* pr */
@@ -180,7 +185,6 @@ static int __kprobes is_insn_relative_long(kprobe_opcode_t *insn) · 107 unmodified lines
180 break;185 break;
181 case 0xc6:186 case 0xc6:
182 switch (insn[0] & 0x0f) {187 switch (insn[0] & 0x0f) {
183 case 0x00: /* exrl */
184 case 0x02: /* pfdrl */188 case 0x02: /* pfdrl */
185 case 0x04: /* cghrl */189 case 0x04: /* cghrl */
186 case 0x05: /* chrl */190 case 0x05: /* chrl */
arch/s390/kvm/interrupt.c+3−3
@@ -385,7 +385,7 @@ static int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) · 384 unmodified lines
385 }385 }
386 386
387 if ((!rc) && (vcpu->arch.sie_block->ckc <387 if ((!rc) && (vcpu->arch.sie_block->ckc <
388 get_tod_clock() + vcpu->arch.sie_block->epoch)) {388 get_tod_clock_fast() + vcpu->arch.sie_block->epoch)) {
389 if ((!psw_extint_disabled(vcpu)) &&389 if ((!psw_extint_disabled(vcpu)) &&
390 (vcpu->arch.sie_block->gcr[0] & 0x800ul))390 (vcpu->arch.sie_block->gcr[0] & 0x800ul))
391 rc = 1;391 rc = 1;
@@ -425,7 +425,7 @@ int kvm_s390_handle_wait(struct kvm_vcpu *vcpu) · 33 unmodified lines
425 goto no_timer;425 goto no_timer;
426 }426 }
427 427
428 now = get_tod_clock() + vcpu->arch.sie_block->epoch;428 now = get_tod_clock_fast() + vcpu->arch.sie_block->epoch;
429 if (vcpu->arch.sie_block->ckc < now) {429 if (vcpu->arch.sie_block->ckc < now) {
430 __unset_cpu_idle(vcpu);430 __unset_cpu_idle(vcpu);
431 return 0;431 return 0;
@@ -515,7 +515,7 @@ void kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu) · 83 unmodified lines
515 }515 }
516 516
517 if ((vcpu->arch.sie_block->ckc <517 if ((vcpu->arch.sie_block->ckc <
518 get_tod_clock() + vcpu->arch.sie_block->epoch))518 get_tod_clock_fast() + vcpu->arch.sie_block->epoch))
519 __try_deliver_ckc_interrupt(vcpu);519 __try_deliver_ckc_interrupt(vcpu);
520 520
521 if (atomic_read(&fi->active)) {521 if (atomic_read(&fi->active)) {
arch/s390/lib/delay.c+7−7
@@ -44,7 +44,7 @@ static void __udelay_disabled(unsigned long long usecs) · 43 unmodified lines
44 do {44 do {
45 set_clock_comparator(end);45 set_clock_comparator(end);
46 vtime_stop_cpu();46 vtime_stop_cpu();
47 } while (get_tod_clock() < end);47 } while (get_tod_clock_fast() < end);
48 lockdep_on();48 lockdep_on();
49 __ctl_load(cr0, 0, 0);49 __ctl_load(cr0, 0, 0);
50 __ctl_load(cr6, 6, 6);50 __ctl_load(cr6, 6, 6);
@@ -55,7 +55,7 @@ static void __udelay_enabled(unsigned long long usecs) · 4 unmodified lines
55{55{
56 u64 clock_saved, end;56 u64 clock_saved, end;
57 57
58 end = get_tod_clock() + (usecs << 12);58 end = get_tod_clock_fast() + (usecs << 12);
59 do {59 do {
60 clock_saved = 0;60 clock_saved = 0;
61 if (end < S390_lowcore.clock_comparator) {61 if (end < S390_lowcore.clock_comparator) {
@@ -65,7 +65,7 @@ static void __udelay_enabled(unsigned long long usecs) · 3 unmodified lines
65 vtime_stop_cpu();65 vtime_stop_cpu();
66 if (clock_saved)66 if (clock_saved)
67 local_tick_enable(clock_saved);67 local_tick_enable(clock_saved);
68 } while (get_tod_clock() < end);68 } while (get_tod_clock_fast() < end);
69}69}
70 70
71/*71/*
@@ -109,8 +109,8 @@ void udelay_simple(unsigned long long usecs) · 37 unmodified lines
109{109{
110 u64 end;110 u64 end;
111 111
112 end = get_tod_clock() + (usecs << 12);112 end = get_tod_clock_fast() + (usecs << 12);
113 while (get_tod_clock() < end)113 while (get_tod_clock_fast() < end)
114 cpu_relax();114 cpu_relax();
115}115}
116 116
@@ -120,10 +120,10 @@ void __ndelay(unsigned long long nsecs) · 3 unmodified lines
120 120
121 nsecs <<= 9;121 nsecs <<= 9;
122 do_div(nsecs, 125);122 do_div(nsecs, 125);
123 end = get_tod_clock() + nsecs;123 end = get_tod_clock_fast() + nsecs;
124 if (nsecs & ~0xfffUL)124 if (nsecs & ~0xfffUL)
125 __udelay(nsecs >> 12);125 __udelay(nsecs >> 12);
126 while (get_tod_clock() < end)126 while (get_tod_clock_fast() < end)
127 barrier();127 barrier();
128}128}
129EXPORT_SYMBOL(__ndelay);129EXPORT_SYMBOL(__ndelay);
arch/sparc/Kconfig+6−1
@@ -506,12 +506,17 @@ config SUN_OPENPROMFS · 505 unmodified lines
506 Only choose N if you know in advance that you will not need to modify506 Only choose N if you know in advance that you will not need to modify
507 OpenPROM settings on the running system.507 OpenPROM settings on the running system.
508 508
509# Makefile helper509# Makefile helpers
510config SPARC64_PCI510config SPARC64_PCI
511 bool511 bool
512 default y512 default y
513 depends on SPARC64 && PCI513 depends on SPARC64 && PCI
514 514
515config SPARC64_PCI_MSI
516 bool
517 default y
518 depends on SPARC64_PCI && PCI_MSI
519
515endmenu520endmenu
516 521
517menu "Executable file formats"522menu "Executable file formats"
arch/sparc/include/asm/floppy_64.h+1−1
@@ -254,7 +254,7 @@ static int sun_fd_request_irq(void) · 253 unmodified lines
254 once = 1;254 once = 1;
255 255
256 error = request_irq(FLOPPY_IRQ, sparc_floppy_irq,256 error = request_irq(FLOPPY_IRQ, sparc_floppy_irq,
257 IRQF_DISABLED, "floppy", NULL);257 0, "floppy", NULL);
258 258
259 return ((error == 0) ? 0 : -1);259 return ((error == 0) ? 0 : -1);
260 }260 }
arch/sparc/include/asm/jump_label.h+1−1
@@ -9,7 +9,7 @@ · 8 unmodified lines
9 9
10static __always_inline bool arch_static_branch(struct static_key *key)10static __always_inline bool arch_static_branch(struct static_key *key)
11{11{
12 asm goto("1:\n\t"12 asm_volatile_goto("1:\n\t"
13 "nop\n\t"13 "nop\n\t"
14 "nop\n\t"14 "nop\n\t"
15 ".pushsection __jump_table, \"aw\"\n\t"15 ".pushsection __jump_table, \"aw\"\n\t"
arch/sparc/kernel/Makefile+2−1
@@ -1,3 +1,4 @@
1
1#2#
2# Makefile for the linux kernel.3# Makefile for the linux kernel.
3#4#
@@ -99,7 +100,7 @@ obj-$(CONFIG_STACKTRACE) += stacktrace.o · 95 unmodified lines
99obj-$(CONFIG_SPARC64_PCI) += pci.o pci_common.o psycho_common.o100obj-$(CONFIG_SPARC64_PCI) += pci.o pci_common.o psycho_common.o
100obj-$(CONFIG_SPARC64_PCI) += pci_psycho.o pci_sabre.o pci_schizo.o101obj-$(CONFIG_SPARC64_PCI) += pci_psycho.o pci_sabre.o pci_schizo.o
101obj-$(CONFIG_SPARC64_PCI) += pci_sun4v.o pci_sun4v_asm.o pci_fire.o102obj-$(CONFIG_SPARC64_PCI) += pci_sun4v.o pci_sun4v_asm.o pci_fire.o
102obj-$(CONFIG_PCI_MSI) += pci_msi.o103obj-$(CONFIG_SPARC64_PCI_MSI) += pci_msi.o
103 104
104obj-$(CONFIG_COMPAT) += sys32.o sys_sparc32.o signal32.o105obj-$(CONFIG_COMPAT) += sys32.o sys_sparc32.o signal32.o
105 106
arch/sparc/kernel/ds.c+2−3
@@ -849,9 +849,8 @@ void ldom_reboot(const char *boot_command) · 848 unmodified lines
849 if (boot_command && strlen(boot_command)) {849 if (boot_command && strlen(boot_command)) {
850 unsigned long len;850 unsigned long len;
851 851
852 strcpy(full_boot_str, "boot ");852 snprintf(full_boot_str, sizeof(full_boot_str), "boot %s",
853 strlcpy(full_boot_str + strlen("boot "), boot_command,853 boot_command);
854 sizeof(full_boot_str));
855 len = strlen(full_boot_str);854 len = strlen(full_boot_str);
856 855
857 if (reboot_data_supported) {856 if (reboot_data_supported) {
arch/sparc/kernel/ldc.c+2−2
@@ -1249,12 +1249,12 @@ int ldc_bind(struct ldc_channel *lp, const char *name) · 1248 unmodified lines
1249 snprintf(lp->rx_irq_name, LDC_IRQ_NAME_MAX, "%s RX", name);1249 snprintf(lp->rx_irq_name, LDC_IRQ_NAME_MAX, "%s RX", name);
1250 snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name);1250 snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name);
1251 1251
1252 err = request_irq(lp->cfg.rx_irq, ldc_rx, IRQF_DISABLED,1252 err = request_irq(lp->cfg.rx_irq, ldc_rx, 0,
1253 lp->rx_irq_name, lp);1253 lp->rx_irq_name, lp);
1254 if (err)1254 if (err)
1255 return err;1255 return err;
1256 1256
1257 err = request_irq(lp->cfg.tx_irq, ldc_tx, IRQF_DISABLED,1257 err = request_irq(lp->cfg.tx_irq, ldc_tx, 0,
1258 lp->tx_irq_name, lp);1258 lp->tx_irq_name, lp);
1259 if (err) {1259 if (err) {
1260 free_irq(lp->cfg.rx_irq, lp);1260 free_irq(lp->cfg.rx_irq, lp);
arch/tile/include/asm/atomic.h+3−2
@@ -166,7 +166,7 @@ static inline int atomic_cmpxchg(atomic_t *v, int o, int n) · 165 unmodified lines
166 *166 *
167 * Atomically sets @v to @i and returns old @v167 * Atomically sets @v to @i and returns old @v
168 */168 */
169static inline u64 atomic64_xchg(atomic64_t *v, u64 n)169static inline long long atomic64_xchg(atomic64_t *v, long long n)
170{170{
171 return xchg64(&v->counter, n);171 return xchg64(&v->counter, n);
172}172}
@@ -180,7 +180,8 @@ static inline u64 atomic64_xchg(atomic64_t *v, u64 n) · 7 unmodified lines
180 * Atomically checks if @v holds @o and replaces it with @n if so.180 * Atomically checks if @v holds @o and replaces it with @n if so.
181 * Returns the old value at @v.181 * Returns the old value at @v.
182 */182 */
183static inline u64 atomic64_cmpxchg(atomic64_t *v, u64 o, u64 n)183static inline long long atomic64_cmpxchg(atomic64_t *v, long long o,
184 long long n)
184{185{
185 return cmpxchg64(&v->counter, o, n);186 return cmpxchg64(&v->counter, o, n);
186}187}
arch/tile/include/asm/atomic_32.h+15−12
@@ -80,7 +80,7 @@ static inline void atomic_set(atomic_t *v, int n) · 79 unmodified lines
80/* A 64bit atomic type */80/* A 64bit atomic type */
81 81
82typedef struct {82typedef struct {
83 u64 __aligned(8) counter;83 long long counter;
84} atomic64_t;84} atomic64_t;
85 85
86#define ATOMIC64_INIT(val) { (val) }86#define ATOMIC64_INIT(val) { (val) }
@@ -91,14 +91,14 @@ typedef struct { · 4 unmodified lines
91 *91 *
92 * Atomically reads the value of @v.92 * Atomically reads the value of @v.
93 */93 */
94static inline u64 atomic64_read(const atomic64_t *v)94static inline long long atomic64_read(const atomic64_t *v)
95{95{
96 /*96 /*
97 * Requires an atomic op to read both 32-bit parts consistently.97 * Requires an atomic op to read both 32-bit parts consistently.
98 * Casting away const is safe since the atomic support routines98 * Casting away const is safe since the atomic support routines
99 * do not write to memory if the value has not been modified.99 * do not write to memory if the value has not been modified.
100 */100 */
101 return _atomic64_xchg_add((u64 *)&v->counter, 0);101 return _atomic64_xchg_add((long long *)&v->counter, 0);
102}102}
103 103
104/**104/**
@@ -108,7 +108,7 @@ static inline u64 atomic64_read(const atomic64_t *v) · 3 unmodified lines
108 *108 *
109 * Atomically adds @i to @v.109 * Atomically adds @i to @v.
110 */110 */
111static inline void atomic64_add(u64 i, atomic64_t *v)111static inline void atomic64_add(long long i, atomic64_t *v)
112{112{
113 _atomic64_xchg_add(&v->counter, i);113 _atomic64_xchg_add(&v->counter, i);
114}114}
@@ -120,7 +120,7 @@ static inline void atomic64_add(u64 i, atomic64_t *v) · 5 unmodified lines
120 *120 *
121 * Atomically adds @i to @v and returns @i + @v121 * Atomically adds @i to @v and returns @i + @v
122 */122 */
123static inline u64 atomic64_add_return(u64 i, atomic64_t *v)123static inline long long atomic64_add_return(long long i, atomic64_t *v)
124{124{
125 smp_mb(); /* barrier for proper semantics */125 smp_mb(); /* barrier for proper semantics */
126 return _atomic64_xchg_add(&v->counter, i) + i;126 return _atomic64_xchg_add(&v->counter, i) + i;
@@ -135,7 +135,8 @@ static inline u64 atomic64_add_return(u64 i, atomic64_t *v) · 8 unmodified lines
135 * Atomically adds @a to @v, so long as @v was not already @u.135 * Atomically adds @a to @v, so long as @v was not already @u.
136 * Returns non-zero if @v was not @u, and zero otherwise.136 * Returns non-zero if @v was not @u, and zero otherwise.
137 */137 */
138static inline u64 atomic64_add_unless(atomic64_t *v, u64 a, u64 u)138static inline long long atomic64_add_unless(atomic64_t *v, long long a,
139 long long u)
139{140{
140 smp_mb(); /* barrier for proper semantics */141 smp_mb(); /* barrier for proper semantics */
141 return _atomic64_xchg_add_unless(&v->counter, a, u) != u;142 return _atomic64_xchg_add_unless(&v->counter, a, u) != u;
@@ -151,7 +152,7 @@ static inline u64 atomic64_add_unless(atomic64_t *v, u64 a, u64 u) · 9 unmodified lines
151 * atomic64_set() can't be just a raw store, since it would be lost if it152 * atomic64_set() can't be just a raw store, since it would be lost if it
152 * fell between the load and store of one of the other atomic ops.153 * fell between the load and store of one of the other atomic ops.
153 */154 */
154static inline void atomic64_set(atomic64_t *v, u64 n)155static inline void atomic64_set(atomic64_t *v, long long n)
155{156{
156 _atomic64_xchg(&v->counter, n);157 _atomic64_xchg(&v->counter, n);
157}158}
@@ -236,11 +237,13 @@ extern struct __get_user __atomic_xchg_add_unless(volatile int *p, · 78 unmodified lines
236extern struct __get_user __atomic_or(volatile int *p, int *lock, int n);237extern struct __get_user __atomic_or(volatile int *p, int *lock, int n);
237extern struct __get_user __atomic_andn(volatile int *p, int *lock, int n);238extern struct __get_user __atomic_andn(volatile int *p, int *lock, int n);
238extern struct __get_user __atomic_xor(volatile int *p, int *lock, int n);239extern struct __get_user __atomic_xor(volatile int *p, int *lock, int n);
239extern u64 __atomic64_cmpxchg(volatile u64 *p, int *lock, u64 o, u64 n);240extern long long __atomic64_cmpxchg(volatile long long *p, int *lock,
240extern u64 __atomic64_xchg(volatile u64 *p, int *lock, u64 n);241 long long o, long long n);
241extern u64 __atomic64_xchg_add(volatile u64 *p, int *lock, u64 n);242extern long long __atomic64_xchg(volatile long long *p, int *lock, long long n);
242extern u64 __atomic64_xchg_add_unless(volatile u64 *p,243extern long long __atomic64_xchg_add(volatile long long *p, int *lock,
243 int *lock, u64 o, u64 n);244 long long n);
245extern long long __atomic64_xchg_add_unless(volatile long long *p,
246 int *lock, long long o, long long n);
244 247
245/* Return failure from the atomic wrappers. */248/* Return failure from the atomic wrappers. */
246struct __get_user __atomic_bad_address(int __user *addr);249struct __get_user __atomic_bad_address(int __user *addr);
arch/tile/include/asm/cmpxchg.h+17−11
@@ -35,10 +35,10 @@ int _atomic_xchg(int *ptr, int n); · 34 unmodified lines
35int _atomic_xchg_add(int *v, int i);35int _atomic_xchg_add(int *v, int i);
36int _atomic_xchg_add_unless(int *v, int a, int u);36int _atomic_xchg_add_unless(int *v, int a, int u);
37int _atomic_cmpxchg(int *ptr, int o, int n);37int _atomic_cmpxchg(int *ptr, int o, int n);
38u64 _atomic64_xchg(u64 *v, u64 n);38long long _atomic64_xchg(long long *v, long long n);
39u64 _atomic64_xchg_add(u64 *v, u64 i);39long long _atomic64_xchg_add(long long *v, long long i);
40u64 _atomic64_xchg_add_unless(u64 *v, u64 a, u64 u);40long long _atomic64_xchg_add_unless(long long *v, long long a, long long u);
41u64 _atomic64_cmpxchg(u64 *v, u64 o, u64 n);41long long _atomic64_cmpxchg(long long *v, long long o, long long n);
42 42
43#define xchg(ptr, n) \43#define xchg(ptr, n) \
44 ({ \44 ({ \
@@ -53,7 +53,8 @@ u64 _atomic64_cmpxchg(u64 *v, u64 o, u64 n); · 8 unmodified lines
53 if (sizeof(*(ptr)) != 4) \53 if (sizeof(*(ptr)) != 4) \
54 __cmpxchg_called_with_bad_pointer(); \54 __cmpxchg_called_with_bad_pointer(); \
55 smp_mb(); \55 smp_mb(); \
56 (typeof(*(ptr)))_atomic_cmpxchg((int *)ptr, (int)o, (int)n); \56 (typeof(*(ptr)))_atomic_cmpxchg((int *)ptr, (int)o, \
57 (int)n); \
57 })58 })
58 59
59#define xchg64(ptr, n) \60#define xchg64(ptr, n) \
@@ -61,7 +62,8 @@ u64 _atomic64_cmpxchg(u64 *v, u64 o, u64 n); · 1 unmodified line
61 if (sizeof(*(ptr)) != 8) \62 if (sizeof(*(ptr)) != 8) \
62 __xchg_called_with_bad_pointer(); \63 __xchg_called_with_bad_pointer(); \
63 smp_mb(); \64 smp_mb(); \
64 (typeof(*(ptr)))_atomic64_xchg((u64 *)(ptr), (u64)(n)); \65 (typeof(*(ptr)))_atomic64_xchg((long long *)(ptr), \
66 (long long)(n)); \
65 })67 })
66 68
67#define cmpxchg64(ptr, o, n) \69#define cmpxchg64(ptr, o, n) \
@@ -69,7 +71,8 @@ u64 _atomic64_cmpxchg(u64 *v, u64 o, u64 n); · 1 unmodified line
69 if (sizeof(*(ptr)) != 8) \71 if (sizeof(*(ptr)) != 8) \
70 __cmpxchg_called_with_bad_pointer(); \72 __cmpxchg_called_with_bad_pointer(); \
71 smp_mb(); \73 smp_mb(); \
72 (typeof(*(ptr)))_atomic64_cmpxchg((u64 *)ptr, (u64)o, (u64)n); \74 (typeof(*(ptr)))_atomic64_cmpxchg((long long *)ptr, \
75 (long long)o, (long long)n); \
73 })76 })
74 77
75#else78#else
@@ -81,10 +84,11 @@ u64 _atomic64_cmpxchg(u64 *v, u64 o, u64 n); · 5 unmodified lines
81 switch (sizeof(*(ptr))) { \84 switch (sizeof(*(ptr))) { \
82 case 4: \85 case 4: \
83 __x = (typeof(__x))(unsigned long) \86 __x = (typeof(__x))(unsigned long) \
84 __insn_exch4((ptr), (u32)(unsigned long)(n)); \87 __insn_exch4((ptr), \
88 (u32)(unsigned long)(n)); \
85 break; \89 break; \
86 case 8: \90 case 8: \
87 __x = (typeof(__x)) \91 __x = (typeof(__x)) \
88 __insn_exch((ptr), (unsigned long)(n)); \92 __insn_exch((ptr), (unsigned long)(n)); \
89 break; \93 break; \
90 default: \94 default: \
@@ -103,10 +107,12 @@ u64 _atomic64_cmpxchg(u64 *v, u64 o, u64 n); · 12 unmodified lines
103 switch (sizeof(*(ptr))) { \107 switch (sizeof(*(ptr))) { \
104 case 4: \108 case 4: \
105 __x = (typeof(__x))(unsigned long) \109 __x = (typeof(__x))(unsigned long) \
106 __insn_cmpexch4((ptr), (u32)(unsigned long)(n)); \110 __insn_cmpexch4((ptr), \
111 (u32)(unsigned long)(n)); \
107 break; \112 break; \
108 case 8: \113 case 8: \
109 __x = (typeof(__x))__insn_cmpexch((ptr), (u64)(n)); \114 __x = (typeof(__x))__insn_cmpexch((ptr), \
115 (long long)(n)); \
110 break; \116 break; \
111 default: \117 default: \
112 __cmpxchg_called_with_bad_pointer(); \118 __cmpxchg_called_with_bad_pointer(); \
arch/tile/include/asm/percpu.h+31−3
@@ -15,9 +15,37 @@ · 14 unmodified lines
15#ifndef _ASM_TILE_PERCPU_H15#ifndef _ASM_TILE_PERCPU_H
16#define _ASM_TILE_PERCPU_H16#define _ASM_TILE_PERCPU_H
17 17
18register unsigned long __my_cpu_offset __asm__("tp");18register unsigned long my_cpu_offset_reg asm("tp");
19#define __my_cpu_offset __my_cpu_offset19
20#define set_my_cpu_offset(tp) (__my_cpu_offset = (tp))20#ifdef CONFIG_PREEMPT
21/*
22 * For full preemption, we can't just use the register variable
23 * directly, since we need barrier() to hazard against it, causing the
24 * compiler to reload anything computed from a previous "tp" value.
25 * But we also don't want to use volatile asm, since we'd like the
26 * compiler to be able to cache the value across multiple percpu reads.
27 * So we use a fake stack read as a hazard against barrier().
28 * The 'U' constraint is like 'm' but disallows postincrement.
29 */
30static inline unsigned long __my_cpu_offset(void)
31{
32 unsigned long tp;
33 register unsigned long *sp asm("sp");
34 asm("move %0, tp" : "=r" (tp) : "U" (*sp));
35 return tp;
36}
37#define __my_cpu_offset __my_cpu_offset()
38#else
39/*
40 * We don't need to hazard against barrier() since "tp" doesn't ever
41 * change with PREEMPT_NONE, and with PREEMPT_VOLUNTARY it only
42 * changes at function call points, at which we are already re-reading
43 * the value of "tp" due to "my_cpu_offset_reg" being a global variable.
44 */
45#define __my_cpu_offset my_cpu_offset_reg
46#endif
47
48#define set_my_cpu_offset(tp) (my_cpu_offset_reg = (tp))
21 49
22#include <asm-generic/percpu.h>50#include <asm-generic/percpu.h>
23 51
arch/tile/kernel/hardwall.c+3−3
@@ -66,7 +66,7 @@ static struct hardwall_type hardwall_types[] = { · 65 unmodified lines
66 0,66 0,
67 "udn",67 "udn",
68 LIST_HEAD_INIT(hardwall_types[HARDWALL_UDN].list),68 LIST_HEAD_INIT(hardwall_types[HARDWALL_UDN].list),
69 __SPIN_LOCK_INITIALIZER(hardwall_types[HARDWALL_UDN].lock),69 __SPIN_LOCK_UNLOCKED(hardwall_types[HARDWALL_UDN].lock),
70 NULL70 NULL
71 },71 },
72#ifndef __tilepro__72#ifndef __tilepro__
@@ -77,7 +77,7 @@ static struct hardwall_type hardwall_types[] = { · 4 unmodified lines
77 1, /* disabled pending hypervisor support */77 1, /* disabled pending hypervisor support */
78 "idn",78 "idn",
79 LIST_HEAD_INIT(hardwall_types[HARDWALL_IDN].list),79 LIST_HEAD_INIT(hardwall_types[HARDWALL_IDN].list),
80 __SPIN_LOCK_INITIALIZER(hardwall_types[HARDWALL_IDN].lock),80 __SPIN_LOCK_UNLOCKED(hardwall_types[HARDWALL_IDN].lock),
81 NULL81 NULL
82 },82 },
83 { /* access to user-space IPI */83 { /* access to user-space IPI */
@@ -87,7 +87,7 @@ static struct hardwall_type hardwall_types[] = { · 3 unmodified lines
87 0,87 0,
88 "ipi",88 "ipi",
89 LIST_HEAD_INIT(hardwall_types[HARDWALL_IPI].list),89 LIST_HEAD_INIT(hardwall_types[HARDWALL_IPI].list),
90 __SPIN_LOCK_INITIALIZER(hardwall_types[HARDWALL_IPI].lock),90 __SPIN_LOCK_UNLOCKED(hardwall_types[HARDWALL_IPI].lock),
91 NULL91 NULL
92 },92 },
93#endif93#endif
arch/tile/kernel/intvec_32.S+3−0
@@ -815,6 +815,9 @@ STD_ENTRY(interrupt_return) · 814 unmodified lines
815 }815 }
816 bzt r28, 1f816 bzt r28, 1f
817 bnz r29, 1f817 bnz r29, 1f
818 /* Disable interrupts explicitly for preemption. */
819 IRQ_DISABLE(r20,r21)
820 TRACE_IRQS_OFF
818 jal preempt_schedule_irq821 jal preempt_schedule_irq
819 FEEDBACK_REENTER(interrupt_return)822 FEEDBACK_REENTER(interrupt_return)
8201:8231:
arch/tile/kernel/intvec_64.S+3−0
@@ -841,6 +841,9 @@ STD_ENTRY(interrupt_return) · 840 unmodified lines
841 }841 }
842 beqzt r28, 1f842 beqzt r28, 1f
843 bnez r29, 1f843 bnez r29, 1f
844 /* Disable interrupts explicitly for preemption. */
845 IRQ_DISABLE(r20,r21)
846 TRACE_IRQS_OFF
844 jal preempt_schedule_irq847 jal preempt_schedule_irq
845 FEEDBACK_REENTER(interrupt_return)848 FEEDBACK_REENTER(interrupt_return)
8461:8491:
arch/tile/kernel/stack.c+5−7
@@ -23,6 +23,7 @@ · 22 unmodified lines
23#include <linux/mmzone.h>23#include <linux/mmzone.h>
24#include <linux/dcache.h>24#include <linux/dcache.h>
25#include <linux/fs.h>25#include <linux/fs.h>
26#include <linux/string.h>
26#include <asm/backtrace.h>27#include <asm/backtrace.h>
27#include <asm/page.h>28#include <asm/page.h>
28#include <asm/ucontext.h>29#include <asm/ucontext.h>
@@ -332,21 +333,18 @@ static void describe_addr(struct KBacktraceIterator *kbt, · 303 unmodified lines
332 }333 }
333 334
334 if (vma->vm_file) {335 if (vma->vm_file) {
335 char *s;
336 p = d_path(&vma->vm_file->f_path, buf, bufsize);336 p = d_path(&vma->vm_file->f_path, buf, bufsize);
337 if (IS_ERR(p))337 if (IS_ERR(p))
338 p = "?";338 p = "?";
339 s = strrchr(p, '/');339 name = kbasename(p);
340 if (s)
341 p = s+1;
342 } else {340 } else {
343 p = "anon";341 name = "anon";
344 }342 }
345 343
346 /* Generate a string description of the vma info. */344 /* Generate a string description of the vma info. */
347 namelen = strlen(p);345 namelen = strlen(name);
348 remaining = (bufsize - 1) - namelen;346 remaining = (bufsize - 1) - namelen;
349 memmove(buf, p, namelen);347 memmove(buf, name, namelen);
350 snprintf(buf + namelen, remaining, "[%lx+%lx] ",348 snprintf(buf + namelen, remaining, "[%lx+%lx] ",
351 vma->vm_start, vma->vm_end - vma->vm_start);349 vma->vm_start, vma->vm_end - vma->vm_start);
352}350}
arch/tile/lib/atomic_32.c+4−4
@@ -107,19 +107,19 @@ unsigned long _atomic_xor(volatile unsigned long *p, unsigned long mask) · 106 unmodified lines
107EXPORT_SYMBOL(_atomic_xor);107EXPORT_SYMBOL(_atomic_xor);
108 108
109 109
110u64 _atomic64_xchg(u64 *v, u64 n)110long long _atomic64_xchg(long long *v, long long n)
111{111{
112 return __atomic64_xchg(v, __atomic_setup(v), n);112 return __atomic64_xchg(v, __atomic_setup(v), n);
113}113}
114EXPORT_SYMBOL(_atomic64_xchg);114EXPORT_SYMBOL(_atomic64_xchg);
115 115
116u64 _atomic64_xchg_add(u64 *v, u64 i)116long long _atomic64_xchg_add(long long *v, long long i)
117{117{
118 return __atomic64_xchg_add(v, __atomic_setup(v), i);118 return __atomic64_xchg_add(v, __atomic_setup(v), i);
119}119}
120EXPORT_SYMBOL(_atomic64_xchg_add);120EXPORT_SYMBOL(_atomic64_xchg_add);
121 121
122u64 _atomic64_xchg_add_unless(u64 *v, u64 a, u64 u)122long long _atomic64_xchg_add_unless(long long *v, long long a, long long u)
123{123{
124 /*124 /*
125 * Note: argument order is switched here since it is easier125 * Note: argument order is switched here since it is easier
@@ -130,7 +130,7 @@ u64 _atomic64_xchg_add_unless(u64 *v, u64 a, u64 u) · 4 unmodified lines
130}130}
131EXPORT_SYMBOL(_atomic64_xchg_add_unless);131EXPORT_SYMBOL(_atomic64_xchg_add_unless);
132 132
133u64 _atomic64_cmpxchg(u64 *v, u64 o, u64 n)133long long _atomic64_cmpxchg(long long *v, long long o, long long n)
134{134{
135 return __atomic64_cmpxchg(v, __atomic_setup(v), o, n);135 return __atomic64_cmpxchg(v, __atomic_setup(v), o, n);
136}136}
arch/x86/Kconfig+4−3
@@ -860,7 +860,7 @@ source "kernel/Kconfig.preempt" · 859 unmodified lines
860 860
861config X86_UP_APIC861config X86_UP_APIC
862 bool "Local APIC support on uniprocessors"862 bool "Local APIC support on uniprocessors"
863 depends on X86_32 && !SMP && !X86_32_NON_STANDARD863 depends on X86_32 && !SMP && !X86_32_NON_STANDARD && !PCI_MSI
864 ---help---864 ---help---
865 A local APIC (Advanced Programmable Interrupt Controller) is an865 A local APIC (Advanced Programmable Interrupt Controller) is an
866 integrated interrupt controller in the CPU. If you have a single-CPU866 integrated interrupt controller in the CPU. If you have a single-CPU
@@ -885,11 +885,11 @@ config X86_UP_IOAPIC · 18 unmodified lines
885 885
886config X86_LOCAL_APIC886config X86_LOCAL_APIC
887 def_bool y887 def_bool y
888 depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC888 depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC || PCI_MSI
889 889
890config X86_IO_APIC890config X86_IO_APIC
891 def_bool y891 def_bool y
892 depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_IOAPIC892 depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_IOAPIC || PCI_MSI
893 893
894config X86_VISWS_APIC894config X86_VISWS_APIC
895 def_bool y895 def_bool y
@@ -1033,6 +1033,7 @@ config X86_REBOOTFIXUPS · 137 unmodified lines
1033 1033
1034config MICROCODE1034config MICROCODE
1035 tristate "CPU microcode loading support"1035 tristate "CPU microcode loading support"
1036 depends on CPU_SUP_AMD || CPU_SUP_INTEL
1036 select FW_LOADER1037 select FW_LOADER
1037 ---help---1038 ---help---
1038 1039
arch/x86/include/asm/cpufeature.h+3−3
@@ -374,7 +374,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) · 373 unmodified lines
374 * Catch too early usage of this before alternatives374 * Catch too early usage of this before alternatives
375 * have run.375 * have run.
376 */376 */
377 asm goto("1: jmp %l[t_warn]\n"377 asm_volatile_goto("1: jmp %l[t_warn]\n"
378 "2:\n"378 "2:\n"
379 ".section .altinstructions,\"a\"\n"379 ".section .altinstructions,\"a\"\n"
380 " .long 1b - .\n"380 " .long 1b - .\n"
@@ -388,7 +388,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) · 7 unmodified lines
388 388
389#endif389#endif
390 390
391 asm goto("1: jmp %l[t_no]\n"391 asm_volatile_goto("1: jmp %l[t_no]\n"
392 "2:\n"392 "2:\n"
393 ".section .altinstructions,\"a\"\n"393 ".section .altinstructions,\"a\"\n"
394 " .long 1b - .\n"394 " .long 1b - .\n"
@@ -453,7 +453,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) · 58 unmodified lines
453 * have. Thus, we force the jump to the widest, 4-byte, signed relative453 * have. Thus, we force the jump to the widest, 4-byte, signed relative
454 * offset even though the last would often fit in less bytes.454 * offset even though the last would often fit in less bytes.
455 */455 */
456 asm goto("1: .byte 0xe9\n .long %l[t_dynamic] - 2f\n"456 asm_volatile_goto("1: .byte 0xe9\n .long %l[t_dynamic] - 2f\n"
457 "2:\n"457 "2:\n"
458 ".section .altinstructions,\"a\"\n"458 ".section .altinstructions,\"a\"\n"
459 " .long 1b - .\n" /* src offset */459 " .long 1b - .\n" /* src offset */
arch/x86/include/asm/jump_label.h+1−1
@@ -18,7 +18,7 @@ · 17 unmodified lines
18 18
19static __always_inline bool arch_static_branch(struct static_key *key)19static __always_inline bool arch_static_branch(struct static_key *key)
20{20{
21 asm goto("1:"21 asm_volatile_goto("1:"
22 ".byte " __stringify(STATIC_KEY_INIT_NOP) "\n\t"22 ".byte " __stringify(STATIC_KEY_INIT_NOP) "\n\t"
23 ".pushsection __jump_table, \"aw\" \n\t"23 ".pushsection __jump_table, \"aw\" \n\t"
24 _ASM_ALIGN "\n\t"24 _ASM_ALIGN "\n\t"
arch/x86/include/asm/mutex_64.h+2−2
@@ -20,7 +20,7 @@ · 19 unmodified lines
20static inline void __mutex_fastpath_lock(atomic_t *v,20static inline void __mutex_fastpath_lock(atomic_t *v,
21 void (*fail_fn)(atomic_t *))21 void (*fail_fn)(atomic_t *))
22{22{
23 asm volatile goto(LOCK_PREFIX " decl %0\n"23 asm_volatile_goto(LOCK_PREFIX " decl %0\n"
24 " jns %l[exit]\n"24 " jns %l[exit]\n"
25 : : "m" (v->counter)25 : : "m" (v->counter)
26 : "memory", "cc"26 : "memory", "cc"
@@ -75,7 +75,7 @@ static inline int __mutex_fastpath_lock_retval(atomic_t *count) · 48 unmodified lines
75static inline void __mutex_fastpath_unlock(atomic_t *v,75static inline void __mutex_fastpath_unlock(atomic_t *v,
76 void (*fail_fn)(atomic_t *))76 void (*fail_fn)(atomic_t *))
77{77{
78 asm volatile goto(LOCK_PREFIX " incl %0\n"78 asm_volatile_goto(LOCK_PREFIX " incl %0\n"
79 " jg %l[exit]\n"79 " jg %l[exit]\n"
80 : : "m" (v->counter)80 : : "m" (v->counter)
81 : "memory", "cc"81 : "memory", "cc"
arch/x86/kernel/apic/x2apic_uv_x.c+1−1
@@ -113,7 +113,7 @@ static int __init early_get_pnodeid(void) · 112 unmodified lines
113 break;113 break;
114 case UV3_HUB_PART_NUMBER:114 case UV3_HUB_PART_NUMBER:
115 case UV3_HUB_PART_NUMBER_X:115 case UV3_HUB_PART_NUMBER_X:
116 uv_min_hub_revision_id += UV3_HUB_REVISION_BASE - 1;116 uv_min_hub_revision_id += UV3_HUB_REVISION_BASE;
117 break;117 break;
118 }118 }
119 119
arch/x86/kernel/cpu/perf_event.c+3−8
@@ -1888,10 +1888,7 @@ void arch_perf_update_userpage(struct perf_event_mmap_page *userpg, u64 now) · 1887 unmodified lines
1888 userpg->cap_user_rdpmc = x86_pmu.attr_rdpmc;1888 userpg->cap_user_rdpmc = x86_pmu.attr_rdpmc;
1889 userpg->pmc_width = x86_pmu.cntval_bits;1889 userpg->pmc_width = x86_pmu.cntval_bits;
1890 1890
1891 if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC))1891 if (!sched_clock_stable)
1892 return;
1893
1894 if (!boot_cpu_has(X86_FEATURE_NONSTOP_TSC))
1895 return;1892 return;
1896 1893
1897 userpg->cap_user_time = 1;1894 userpg->cap_user_time = 1;
@@ -1899,10 +1896,8 @@ void arch_perf_update_userpage(struct perf_event_mmap_page *userpg, u64 now) · 1 unmodified line
1899 userpg->time_shift = CYC2NS_SCALE_FACTOR;1896 userpg->time_shift = CYC2NS_SCALE_FACTOR;
1900 userpg->time_offset = this_cpu_read(cyc2ns_offset) - now;1897 userpg->time_offset = this_cpu_read(cyc2ns_offset) - now;
1901 1898
1902 if (sched_clock_stable && !check_tsc_disabled()) {1899 userpg->cap_user_time_zero = 1;
1903 userpg->cap_user_time_zero = 1;1900 userpg->time_zero = this_cpu_read(cyc2ns_offset);
1904 userpg->time_zero = this_cpu_read(cyc2ns_offset);
1905 }
1906}1901}
1907 1902
1908/*1903/*
arch/x86/kernel/kvm.c+14−3
@@ -775,11 +775,22 @@ void __init kvm_spinlock_init(void) · 774 unmodified lines
775 if (!kvm_para_has_feature(KVM_FEATURE_PV_UNHALT))775 if (!kvm_para_has_feature(KVM_FEATURE_PV_UNHALT))
776 return;776 return;
777 777
778 printk(KERN_INFO "KVM setup paravirtual spinlock\n");778 pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(kvm_lock_spinning);
779 pv_lock_ops.unlock_kick = kvm_unlock_kick;
780}
781
782static __init int kvm_spinlock_init_jump(void)
783{
784 if (!kvm_para_available())
785 return 0;
786 if (!kvm_para_has_feature(KVM_FEATURE_PV_UNHALT))
787 return 0;
779 788
780 static_key_slow_inc(&paravirt_ticketlocks_enabled);789 static_key_slow_inc(&paravirt_ticketlocks_enabled);
790 printk(KERN_INFO "KVM setup paravirtual spinlock\n");
781 791
782 pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(kvm_lock_spinning);792 return 0;
783 pv_lock_ops.unlock_kick = kvm_unlock_kick;
784}793}
794early_initcall(kvm_spinlock_init_jump);
795
785#endif /* CONFIG_PARAVIRT_SPINLOCKS */796#endif /* CONFIG_PARAVIRT_SPINLOCKS */
arch/x86/kernel/reboot.c+8−0
@@ -326,6 +326,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { · 325 unmodified lines
326 DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6320"),326 DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6320"),
327 },327 },
328 },328 },
329 { /* Handle problems with rebooting on the Latitude E5410. */
330 .callback = set_pci_reboot,
331 .ident = "Dell Latitude E5410",
332 .matches = {
333 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
334 DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5410"),
335 },
336 },
329 { /* Handle problems with rebooting on the Latitude E5420. */337 { /* Handle problems with rebooting on the Latitude E5420. */
330 .callback = set_pci_reboot,338 .callback = set_pci_reboot,
331 .ident = "Dell Latitude E5420",339 .ident = "Dell Latitude E5420",
arch/x86/kernel/sysfb_simplefb.c+2−2
@@ -72,14 +72,14 @@ __init int create_simplefb(const struct screen_info *si, · 71 unmodified lines
72 * the part that is occupied by the framebuffer */72 * the part that is occupied by the framebuffer */
73 len = mode->height * mode->stride;73 len = mode->height * mode->stride;
74 len = PAGE_ALIGN(len);74 len = PAGE_ALIGN(len);
75 if (len > si->lfb_size << 16) {75 if (len > (u64)si->lfb_size << 16) {
76 printk(KERN_WARNING "sysfb: VRAM smaller than advertised\n");76 printk(KERN_WARNING "sysfb: VRAM smaller than advertised\n");
77 return -EINVAL;77 return -EINVAL;
78 }78 }
79 79
80 /* setup IORESOURCE_MEM as framebuffer memory */80 /* setup IORESOURCE_MEM as framebuffer memory */
81 memset(&res, 0, sizeof(res));81 memset(&res, 0, sizeof(res));
82 res.flags = IORESOURCE_MEM;82 res.flags = IORESOURCE_MEM | IORESOURCE_BUSY;
83 res.name = simplefb_resname;83 res.name = simplefb_resname;
84 res.start = si->lfb_base;84 res.start = si->lfb_base;
85 res.end = si->lfb_base + len - 1;85 res.end = si->lfb_base + len - 1;
arch/x86/kvm/vmx.c+12−12
@@ -3255,25 +3255,29 @@ static void vmx_decache_cr4_guest_bits(struct kvm_vcpu *vcpu) · 3254 unmodified lines
3255 3255
3256static void ept_load_pdptrs(struct kvm_vcpu *vcpu)3256static void ept_load_pdptrs(struct kvm_vcpu *vcpu)
3257{3257{
3258 struct kvm_mmu *mmu = vcpu->arch.walk_mmu;
3259
3258 if (!test_bit(VCPU_EXREG_PDPTR,3260 if (!test_bit(VCPU_EXREG_PDPTR,
3259 (unsigned long *)&vcpu->arch.regs_dirty))3261 (unsigned long *)&vcpu->arch.regs_dirty))
3260 return;3262 return;
3261 3263
3262 if (is_paging(vcpu) && is_pae(vcpu) && !is_long_mode(vcpu)) {3264 if (is_paging(vcpu) && is_pae(vcpu) && !is_long_mode(vcpu)) {
3263 vmcs_write64(GUEST_PDPTR0, vcpu->arch.mmu.pdptrs[0]);3265 vmcs_write64(GUEST_PDPTR0, mmu->pdptrs[0]);
3264 vmcs_write64(GUEST_PDPTR1, vcpu->arch.mmu.pdptrs[1]);3266 vmcs_write64(GUEST_PDPTR1, mmu->pdptrs[1]);
3265 vmcs_write64(GUEST_PDPTR2, vcpu->arch.mmu.pdptrs[2]);3267 vmcs_write64(GUEST_PDPTR2, mmu->pdptrs[2]);
3266 vmcs_write64(GUEST_PDPTR3, vcpu->arch.mmu.pdptrs[3]);3268 vmcs_write64(GUEST_PDPTR3, mmu->pdptrs[3]);
3267 }3269 }
3268}3270}
3269 3271
3270static void ept_save_pdptrs(struct kvm_vcpu *vcpu)3272static void ept_save_pdptrs(struct kvm_vcpu *vcpu)
3271{3273{
3274 struct kvm_mmu *mmu = vcpu->arch.walk_mmu;
3275
3272 if (is_paging(vcpu) && is_pae(vcpu) && !is_long_mode(vcpu)) {3276 if (is_paging(vcpu) && is_pae(vcpu) && !is_long_mode(vcpu)) {
3273 vcpu->arch.mmu.pdptrs[0] = vmcs_read64(GUEST_PDPTR0);3277 mmu->pdptrs[0] = vmcs_read64(GUEST_PDPTR0);
3274 vcpu->arch.mmu.pdptrs[1] = vmcs_read64(GUEST_PDPTR1);3278 mmu->pdptrs[1] = vmcs_read64(GUEST_PDPTR1);
3275 vcpu->arch.mmu.pdptrs[2] = vmcs_read64(GUEST_PDPTR2);3279 mmu->pdptrs[2] = vmcs_read64(GUEST_PDPTR2);
3276 vcpu->arch.mmu.pdptrs[3] = vmcs_read64(GUEST_PDPTR3);3280 mmu->pdptrs[3] = vmcs_read64(GUEST_PDPTR3);
3277 }3281 }
3278 3282
3279 __set_bit(VCPU_EXREG_PDPTR,3283 __set_bit(VCPU_EXREG_PDPTR,
@@ -7777,10 +7781,6 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12) · 4497 unmodified lines
7777 vmcs_write64(GUEST_PDPTR1, vmcs12->guest_pdptr1);7781 vmcs_write64(GUEST_PDPTR1, vmcs12->guest_pdptr1);
7778 vmcs_write64(GUEST_PDPTR2, vmcs12->guest_pdptr2);7782 vmcs_write64(GUEST_PDPTR2, vmcs12->guest_pdptr2);
7779 vmcs_write64(GUEST_PDPTR3, vmcs12->guest_pdptr3);7783 vmcs_write64(GUEST_PDPTR3, vmcs12->guest_pdptr3);
7780 __clear_bit(VCPU_EXREG_PDPTR,
7781 (unsigned long *)&vcpu->arch.regs_avail);
7782 __clear_bit(VCPU_EXREG_PDPTR,
7783 (unsigned long *)&vcpu->arch.regs_dirty);
7784 }7784 }
7785 7785
7786 kvm_register_write(vcpu, VCPU_REGS_RSP, vmcs12->guest_rsp);7786 kvm_register_write(vcpu, VCPU_REGS_RSP, vmcs12->guest_rsp);
arch/x86/pci/mmconfig-shared.c+6−1
@@ -700,7 +700,7 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end, · 699 unmodified lines
700 if (!(pci_probe & PCI_PROBE_MMCONF) || pci_mmcfg_arch_init_failed)700 if (!(pci_probe & PCI_PROBE_MMCONF) || pci_mmcfg_arch_init_failed)
701 return -ENODEV;701 return -ENODEV;
702 702
703 if (start > end || !addr)703 if (start > end)
704 return -EINVAL;704 return -EINVAL;
705 705
706 mutex_lock(&pci_mmcfg_lock);706 mutex_lock(&pci_mmcfg_lock);
@@ -716,6 +716,11 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end, · 9 unmodified lines
716 return -EEXIST;716 return -EEXIST;
717 }717 }
718 718
719 if (!addr) {
720 mutex_unlock(&pci_mmcfg_lock);
721 return -EINVAL;
722 }
723
719 rc = -EBUSY;724 rc = -EBUSY;
720 cfg = pci_mmconfig_alloc(seg, start, end, addr);725 cfg = pci_mmconfig_alloc(seg, start, end, addr);
721 if (cfg == NULL) {726 if (cfg == NULL) {
arch/x86/xen/smp.c+9−0
@@ -278,6 +278,15 @@ static void __init xen_smp_prepare_boot_cpu(void) · 277 unmodified lines
278 old memory can be recycled */278 old memory can be recycled */
279 make_lowmem_page_readwrite(xen_initial_gdt);279 make_lowmem_page_readwrite(xen_initial_gdt);
280 280
281#ifdef CONFIG_X86_32
282 /*
283 * Xen starts us with XEN_FLAT_RING1_DS, but linux code
284 * expects __USER_DS
285 */
286 loadsegment(ds, __USER_DS);
287 loadsegment(es, __USER_DS);
288#endif
289
281 xen_filter_cpu_maps();290 xen_filter_cpu_maps();
282 xen_setup_vcpu_info_placement();291 xen_setup_vcpu_info_placement();
283 }292 }
block/partitions/efi.c+6−1
@@ -222,11 +222,16 @@ check_hybrid: · 221 unmodified lines
222 * the disk size.222 * the disk size.
223 *223 *
224 * Hybrid MBRs do not necessarily comply with this.224 * Hybrid MBRs do not necessarily comply with this.
225 *
226 * Consider a bad value here to be a warning to support dd'ing
227 * an image from a smaller disk to a larger disk.
225 */228 */
226 if (ret == GPT_MBR_PROTECTIVE) {229 if (ret == GPT_MBR_PROTECTIVE) {
227 sz = le32_to_cpu(mbr->partition_record[part].size_in_lba);230 sz = le32_to_cpu(mbr->partition_record[part].size_in_lba);
228 if (sz != (uint32_t) total_sectors - 1 && sz != 0xFFFFFFFF)231 if (sz != (uint32_t) total_sectors - 1 && sz != 0xFFFFFFFF)
229 ret = 0;232 pr_debug("GPT: mbr size in lba (%u) different than whole disk (%u).\n",
233 sz, min_t(uint32_t,
234 total_sectors - 1, 0xFFFFFFFF));
230 }235 }
231done:236done:
232 return ret;237 return ret;
drivers/acpi/Kconfig+4−4
@@ -24,7 +24,7 @@ menuconfig ACPI · 23 unmodified lines
24 are configured, ACPI is used.24 are configured, ACPI is used.
25 25
26 The project home page for the Linux ACPI subsystem is here:26 The project home page for the Linux ACPI subsystem is here:
27 <http://www.lesswatts.org/projects/acpi/>27 <https://01.org/linux-acpi>
28 28
29 Linux support for ACPI is based on Intel Corporation's ACPI29 Linux support for ACPI is based on Intel Corporation's ACPI
30 Component Architecture (ACPI CA). For more information on the30 Component Architecture (ACPI CA). For more information on the
@@ -123,9 +123,9 @@ config ACPI_BUTTON · 92 unmodified lines
123 default y123 default y
124 help124 help
125 This driver handles events on the power, sleep, and lid buttons.125 This driver handles events on the power, sleep, and lid buttons.
126 A daemon reads /proc/acpi/event and perform user-defined actions126 A daemon reads events from input devices or via netlink and
127 such as shutting down the system. This is necessary for127 performs user-defined actions such as shutting down the system.
128 software-controlled poweroff.128 This is necessary for software-controlled poweroff.
129 129
130 To compile this driver as a module, choose M here:130 To compile this driver as a module, choose M here:
131 the module will be called button.131 the module will be called button.
drivers/acpi/device_pm.c+0−56
@@ -1025,60 +1025,4 @@ void acpi_dev_pm_detach(struct device *dev, bool power_off) · 1024 unmodified lines
1025 }1025 }
1026}1026}
1027EXPORT_SYMBOL_GPL(acpi_dev_pm_detach);1027EXPORT_SYMBOL_GPL(acpi_dev_pm_detach);
1028
1029/**
1030 * acpi_dev_pm_add_dependent - Add physical device depending for PM.
1031 * @handle: Handle of ACPI device node.
1032 * @depdev: Device depending on that node for PM.
1033 */
1034void acpi_dev_pm_add_dependent(acpi_handle handle, struct device *depdev)
1035{
1036 struct acpi_device_physical_node *dep;
1037 struct acpi_device *adev;
1038
1039 if (!depdev || acpi_bus_get_device(handle, &adev))
1040 return;
1041
1042 mutex_lock(&adev->physical_node_lock);
1043
1044 list_for_each_entry(dep, &adev->power_dependent, node)
1045 if (dep->dev == depdev)
1046 goto out;
1047
1048 dep = kzalloc(sizeof(*dep), GFP_KERNEL);
1049 if (dep) {
1050 dep->dev = depdev;
1051 list_add_tail(&dep->node, &adev->power_dependent);
1052 }
1053
1054 out:
1055 mutex_unlock(&adev->physical_node_lock);
1056}
1057EXPORT_SYMBOL_GPL(acpi_dev_pm_add_dependent);
1058
1059/**
1060 * acpi_dev_pm_remove_dependent - Remove physical device depending for PM.
1061 * @handle: Handle of ACPI device node.
1062 * @depdev: Device depending on that node for PM.
1063 */
1064void acpi_dev_pm_remove_dependent(acpi_handle handle, struct device *depdev)
1065{
1066 struct acpi_device_physical_node *dep;
1067 struct acpi_device *adev;
1068
1069 if (!depdev || acpi_bus_get_device(handle, &adev))
1070 return;
1071
1072 mutex_lock(&adev->physical_node_lock);
1073
1074 list_for_each_entry(dep, &adev->power_dependent, node)
1075 if (dep->dev == depdev) {
1076 list_del(&dep->node);
1077 kfree(dep);
1078 break;
1079 }
1080
1081 mutex_unlock(&adev->physical_node_lock);
1082}
1083EXPORT_SYMBOL_GPL(acpi_dev_pm_remove_dependent);
1084#endif /* CONFIG_PM */1028#endif /* CONFIG_PM */
drivers/acpi/power.c+4−100
@@ -59,16 +59,9 @@ ACPI_MODULE_NAME("power"); · 58 unmodified lines
59#define ACPI_POWER_RESOURCE_STATE_ON 0x0159#define ACPI_POWER_RESOURCE_STATE_ON 0x01
60#define ACPI_POWER_RESOURCE_STATE_UNKNOWN 0xFF60#define ACPI_POWER_RESOURCE_STATE_UNKNOWN 0xFF
61 61
62struct acpi_power_dependent_device {
63 struct list_head node;
64 struct acpi_device *adev;
65 struct work_struct work;
66};
67
68struct acpi_power_resource {62struct acpi_power_resource {
69 struct acpi_device device;63 struct acpi_device device;
70 struct list_head list_node;64 struct list_head list_node;
71 struct list_head dependent;
72 char *name;65 char *name;
73 u32 system_level;66 u32 system_level;
74 u32 order;67 u32 order;
@@ -233,32 +226,6 @@ static int acpi_power_get_list_state(struct list_head *list, int *state) · 158 unmodified lines
233 return 0;226 return 0;
234}227}
235 228
236static void acpi_power_resume_dependent(struct work_struct *work)
237{
238 struct acpi_power_dependent_device *dep;
239 struct acpi_device_physical_node *pn;
240 struct acpi_device *adev;
241 int state;
242
243 dep = container_of(work, struct acpi_power_dependent_device, work);
244 adev = dep->adev;
245 if (acpi_power_get_inferred_state(adev, &state))
246 return;
247
248 if (state > ACPI_STATE_D0)
249 return;
250
251 mutex_lock(&adev->physical_node_lock);
252
253 list_for_each_entry(pn, &adev->physical_node_list, node)
254 pm_request_resume(pn->dev);
255
256 list_for_each_entry(pn, &adev->power_dependent, node)
257 pm_request_resume(pn->dev);
258
259 mutex_unlock(&adev->physical_node_lock);
260}
261
262static int __acpi_power_on(struct acpi_power_resource *resource)229static int __acpi_power_on(struct acpi_power_resource *resource)
263{230{
264 acpi_status status = AE_OK;231 acpi_status status = AE_OK;
@@ -283,14 +250,8 @@ static int acpi_power_on_unlocked(struct acpi_power_resource *resource) · 18 unmodified lines
283 resource->name));250 resource->name));
284 } else {251 } else {
285 result = __acpi_power_on(resource);252 result = __acpi_power_on(resource);
286 if (result) {253 if (result)
287 resource->ref_count--;254 resource->ref_count--;
288 } else {
289 struct acpi_power_dependent_device *dep;
290
291 list_for_each_entry(dep, &resource->dependent, node)
292 schedule_work(&dep->work);
293 }
294 }255 }
295 return result;256 return result;
296}257}
@@ -390,52 +351,6 @@ static int acpi_power_on_list(struct list_head *list) · 93 unmodified lines
390 return result;351 return result;
391}352}
392 353
393static void acpi_power_add_dependent(struct acpi_power_resource *resource,
394 struct acpi_device *adev)
395{
396 struct acpi_power_dependent_device *dep;
397
398 mutex_lock(&resource->resource_lock);
399
400 list_for_each_entry(dep, &resource->dependent, node)
401 if (dep->adev == adev)
402 goto out;
403
404 dep = kzalloc(sizeof(*dep), GFP_KERNEL);
405 if (!dep)
406 goto out;
407
408 dep->adev = adev;
409 INIT_WORK(&dep->work, acpi_power_resume_dependent);
410 list_add_tail(&dep->node, &resource->dependent);
411
412 out:
413 mutex_unlock(&resource->resource_lock);
414}
415
416static void acpi_power_remove_dependent(struct acpi_power_resource *resource,
417 struct acpi_device *adev)
418{
419 struct acpi_power_dependent_device *dep;
420 struct work_struct *work = NULL;
421
422 mutex_lock(&resource->resource_lock);
423
424 list_for_each_entry(dep, &resource->dependent, node)
425 if (dep->adev == adev) {
426 list_del(&dep->node);
427 work = &dep->work;
428 break;
429 }
430
431 mutex_unlock(&resource->resource_lock);
432
433 if (work) {
434 cancel_work_sync(work);
435 kfree(dep);
436 }
437}
438
439static struct attribute *attrs[] = {354static struct attribute *attrs[] = {
440 NULL,355 NULL,
441};356};
@@ -524,8 +439,6 @@ static void acpi_power_expose_hide(struct acpi_device *adev, · 82 unmodified lines
524 439
525void acpi_power_add_remove_device(struct acpi_device *adev, bool add)440void acpi_power_add_remove_device(struct acpi_device *adev, bool add)
526{441{
527 struct acpi_device_power_state *ps;
528 struct acpi_power_resource_entry *entry;
529 int state;442 int state;
530 443
531 if (adev->wakeup.flags.valid)444 if (adev->wakeup.flags.valid)
@@ -535,16 +448,6 @@ void acpi_power_add_remove_device(struct acpi_device *adev, bool add) · 3 unmodified lines
535 if (!adev->power.flags.power_resources)448 if (!adev->power.flags.power_resources)
536 return;449 return;
537 450
538 ps = &adev->power.states[ACPI_STATE_D0];
539 list_for_each_entry(entry, &ps->resources, node) {
540 struct acpi_power_resource *resource = entry->resource;
541
542 if (add)
543 acpi_power_add_dependent(resource, adev);
544 else
545 acpi_power_remove_dependent(resource, adev);
546 }
547
548 for (state = ACPI_STATE_D0; state <= ACPI_STATE_D3_HOT; state++)451 for (state = ACPI_STATE_D0; state <= ACPI_STATE_D3_HOT; state++)
549 acpi_power_expose_hide(adev,452 acpi_power_expose_hide(adev,
550 &adev->power.states[state].resources,453 &adev->power.states[state].resources,
@@ -882,7 +785,6 @@ int acpi_add_power_resource(acpi_handle handle) · 331 unmodified lines
882 acpi_init_device_object(device, handle, ACPI_BUS_TYPE_POWER,785 acpi_init_device_object(device, handle, ACPI_BUS_TYPE_POWER,
883 ACPI_STA_DEFAULT);786 ACPI_STA_DEFAULT);
884 mutex_init(&resource->resource_lock);787 mutex_init(&resource->resource_lock);
885 INIT_LIST_HEAD(&resource->dependent);
886 INIT_LIST_HEAD(&resource->list_node);788 INIT_LIST_HEAD(&resource->list_node);
887 resource->name = device->pnp.bus_id;789 resource->name = device->pnp.bus_id;
888 strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME);790 strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME);
@@ -936,8 +838,10 @@ void acpi_resume_power_resources(void) · 47 unmodified lines
936 mutex_lock(&resource->resource_lock);838 mutex_lock(&resource->resource_lock);
937 839
938 result = acpi_power_get_state(resource->device.handle, &state);840 result = acpi_power_get_state(resource->device.handle, &state);
939 if (result)841 if (result) {
842 mutex_unlock(&resource->resource_lock);
940 continue;843 continue;
844 }
941 845
942 if (state == ACPI_POWER_RESOURCE_STATE_OFF846 if (state == ACPI_POWER_RESOURCE_STATE_OFF
943 && resource->ref_count) {847 && resource->ref_count) {
drivers/acpi/scan.c+1−2
@@ -968,7 +968,7 @@ int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device) · 967 unmodified lines
968 }968 }
969 return 0;969 return 0;
970}970}
971EXPORT_SYMBOL_GPL(acpi_bus_get_device);971EXPORT_SYMBOL(acpi_bus_get_device);
972 972
973int acpi_device_add(struct acpi_device *device,973int acpi_device_add(struct acpi_device *device,
974 void (*release)(struct device *))974 void (*release)(struct device *))
@@ -999,7 +999,6 @@ int acpi_device_add(struct acpi_device *device, · 24 unmodified lines
999 INIT_LIST_HEAD(&device->wakeup_list);999 INIT_LIST_HEAD(&device->wakeup_list);
1000 INIT_LIST_HEAD(&device->physical_node_list);1000 INIT_LIST_HEAD(&device->physical_node_list);
1001 mutex_init(&device->physical_node_lock);1001 mutex_init(&device->physical_node_lock);
1002 INIT_LIST_HEAD(&device->power_dependent);
1003 1002
1004 new_bus_id = kzalloc(sizeof(struct acpi_device_bus_id), GFP_KERNEL);1003 new_bus_id = kzalloc(sizeof(struct acpi_device_bus_id), GFP_KERNEL);
1005 if (!new_bus_id) {1004 if (!new_bus_id) {
drivers/ata/ahci.c+1−1
@@ -1343,7 +1343,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 1342 unmodified lines
1343 if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)1343 if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)
1344 host->flags |= ATA_HOST_PARALLEL_SCAN;1344 host->flags |= ATA_HOST_PARALLEL_SCAN;
1345 else1345 else
1346 printk(KERN_INFO "ahci: SSS flag set, parallel bus scan disabled\n");1346 dev_info(&pdev->dev, "SSS flag set, parallel bus scan disabled\n");
1347 1347
1348 if (pi.flags & ATA_FLAG_EM)1348 if (pi.flags & ATA_FLAG_EM)
1349 ahci_reset_em(host);1349 ahci_reset_em(host);
drivers/ata/ahci_platform.c+1−1
@@ -184,7 +184,7 @@ static int ahci_probe(struct platform_device *pdev) · 183 unmodified lines
184 if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)184 if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)
185 host->flags |= ATA_HOST_PARALLEL_SCAN;185 host->flags |= ATA_HOST_PARALLEL_SCAN;
186 else186 else
187 printk(KERN_INFO "ahci: SSS flag set, parallel bus scan disabled\n");187 dev_info(dev, "SSS flag set, parallel bus scan disabled\n");
188 188
189 if (pi.flags & ATA_FLAG_EM)189 if (pi.flags & ATA_FLAG_EM)
190 ahci_reset_em(host);190 ahci_reset_em(host);
drivers/ata/libahci.c+9−1
@@ -778,8 +778,16 @@ static void ahci_start_port(struct ata_port *ap) · 777 unmodified lines
778 rc = ap->ops->transmit_led_message(ap,778 rc = ap->ops->transmit_led_message(ap,
779 emp->led_state,779 emp->led_state,
780 4);780 4);
781 /*
782 * If busy, give a breather but do not
783 * release EH ownership by using msleep()
784 * instead of ata_msleep(). EM Transmit
785 * bit is busy for the whole host and
786 * releasing ownership will cause other
787 * ports to fail the same way.
788 */
781 if (rc == -EBUSY)789 if (rc == -EBUSY)
782 ata_msleep(ap, 1);790 msleep(1);
783 else791 else
784 break;792 break;
785 }793 }
drivers/ata/libata-acpi.c+0−14
@@ -1035,17 +1035,3 @@ void ata_acpi_on_disable(struct ata_device *dev) · 1034 unmodified lines
1035{1035{
1036 ata_acpi_clear_gtf(dev);1036 ata_acpi_clear_gtf(dev);
1037}1037}
1038
1039void ata_scsi_acpi_bind(struct ata_device *dev)
1040{
1041 acpi_handle handle = ata_dev_acpi_handle(dev);
1042 if (handle)
1043 acpi_dev_pm_add_dependent(handle, &dev->sdev->sdev_gendev);
1044}
1045
1046void ata_scsi_acpi_unbind(struct ata_device *dev)
1047{
1048 acpi_handle handle = ata_dev_acpi_handle(dev);
1049 if (handle)
1050 acpi_dev_pm_remove_dependent(handle, &dev->sdev->sdev_gendev);
1051}
drivers/ata/libata-eh.c+3−3
@@ -1322,14 +1322,14 @@ void ata_eh_qc_complete(struct ata_queued_cmd *qc) · 1321 unmodified lines
1322 * should be retried. To be used from EH.1322 * should be retried. To be used from EH.
1323 *1323 *
1324 * SCSI midlayer limits the number of retries to scmd->allowed.1324 * SCSI midlayer limits the number of retries to scmd->allowed.
1325 * scmd->retries is decremented for commands which get retried1325 * scmd->allowed is incremented for commands which get retried
1326 * due to unrelated failures (qc->err_mask is zero).1326 * due to unrelated failures (qc->err_mask is zero).
1327 */1327 */
1328void ata_eh_qc_retry(struct ata_queued_cmd *qc)1328void ata_eh_qc_retry(struct ata_queued_cmd *qc)
1329{1329{
1330 struct scsi_cmnd *scmd = qc->scsicmd;1330 struct scsi_cmnd *scmd = qc->scsicmd;
1331 if (!qc->err_mask && scmd->retries)1331 if (!qc->err_mask)
1332 scmd->retries--;1332 scmd->allowed++;
1333 __ata_eh_qc_complete(qc);1333 __ata_eh_qc_complete(qc);
1334}1334}
1335 1335
drivers/ata/libata-scsi.c+0−3
@@ -3679,7 +3679,6 @@ void ata_scsi_scan_host(struct ata_port *ap, int sync) · 3678 unmodified lines
3679 if (!IS_ERR(sdev)) {3679 if (!IS_ERR(sdev)) {
3680 dev->sdev = sdev;3680 dev->sdev = sdev;
3681 scsi_device_put(sdev);3681 scsi_device_put(sdev);
3682 ata_scsi_acpi_bind(dev);
3683 } else {3682 } else {
3684 dev->sdev = NULL;3683 dev->sdev = NULL;
3685 }3684 }
@@ -3767,8 +3766,6 @@ static void ata_scsi_remove_dev(struct ata_device *dev) · 81 unmodified lines
3767 struct scsi_device *sdev;3766 struct scsi_device *sdev;
3768 unsigned long flags;3767 unsigned long flags;
3769 3768
3770 ata_scsi_acpi_unbind(dev);
3771
3772 /* Alas, we need to grab scan_mutex to ensure SCSI device3769 /* Alas, we need to grab scan_mutex to ensure SCSI device
3773 * state doesn't change underneath us and thus3770 * state doesn't change underneath us and thus
3774 * scsi_device_get() always succeeds. The mutex locking can3771 * scsi_device_get() always succeeds. The mutex locking can
drivers/ata/libata.h+0−4
@@ -121,8 +121,6 @@ extern void ata_acpi_set_state(struct ata_port *ap, pm_message_t state); · 120 unmodified lines
121extern void ata_acpi_bind_port(struct ata_port *ap);121extern void ata_acpi_bind_port(struct ata_port *ap);
122extern void ata_acpi_bind_dev(struct ata_device *dev);122extern void ata_acpi_bind_dev(struct ata_device *dev);
123extern acpi_handle ata_dev_acpi_handle(struct ata_device *dev);123extern acpi_handle ata_dev_acpi_handle(struct ata_device *dev);
124extern void ata_scsi_acpi_bind(struct ata_device *dev);
125extern void ata_scsi_acpi_unbind(struct ata_device *dev);
126#else124#else
127static inline void ata_acpi_dissociate(struct ata_host *host) { }125static inline void ata_acpi_dissociate(struct ata_host *host) { }
128static inline int ata_acpi_on_suspend(struct ata_port *ap) { return 0; }126static inline int ata_acpi_on_suspend(struct ata_port *ap) { return 0; }
@@ -133,8 +131,6 @@ static inline void ata_acpi_set_state(struct ata_port *ap, · 4 unmodified lines
133 pm_message_t state) { }131 pm_message_t state) { }
134static inline void ata_acpi_bind_port(struct ata_port *ap) {}132static inline void ata_acpi_bind_port(struct ata_port *ap) {}
135static inline void ata_acpi_bind_dev(struct ata_device *dev) {}133static inline void ata_acpi_bind_dev(struct ata_device *dev) {}
136static inline void ata_scsi_acpi_bind(struct ata_device *dev) {}
137static inline void ata_scsi_acpi_unbind(struct ata_device *dev) {}
138#endif134#endif
139 135
140/* libata-scsi.c */136/* libata-scsi.c */
drivers/ata/pata_isapnp.c+1−1
@@ -78,7 +78,7 @@ static int isapnp_init_one(struct pnp_dev *idev, const struct pnp_device_id *dev · 77 unmodified lines
78 78
79 ap->ioaddr.cmd_addr = cmd_addr;79 ap->ioaddr.cmd_addr = cmd_addr;
80 80
81 if (pnp_port_valid(idev, 1) == 0) {81 if (pnp_port_valid(idev, 1)) {
82 ctl_addr = devm_ioport_map(&idev->dev,82 ctl_addr = devm_ioport_map(&idev->dev,
83 pnp_port_start(idev, 1), 1);83 pnp_port_start(idev, 1), 1);
84 ap->ioaddr.altstatus_addr = ctl_addr;84 ap->ioaddr.altstatus_addr = ctl_addr;
drivers/base/memory.c+5−2
@@ -333,8 +333,10 @@ store_mem_state(struct device *dev, · 332 unmodified lines
333 online_type = ONLINE_KEEP;333 online_type = ONLINE_KEEP;
334 else if (!strncmp(buf, "offline", min_t(int, count, 7)))334 else if (!strncmp(buf, "offline", min_t(int, count, 7)))
335 online_type = -1;335 online_type = -1;
336 else336 else {
337 return -EINVAL;337 ret = -EINVAL;
338 goto err;
339 }
338 340
339 switch (online_type) {341 switch (online_type) {
340 case ONLINE_KERNEL:342 case ONLINE_KERNEL:
@@ -357,6 +359,7 @@ store_mem_state(struct device *dev, · 16 unmodified lines
357 ret = -EINVAL; /* should never happen */359 ret = -EINVAL; /* should never happen */
358 }360 }
359 361
362err:
360 unlock_device_hotplug();363 unlock_device_hotplug();
361 364
362 if (ret)365 if (ret)
drivers/bus/mvebu-mbus.c+9−3
@@ -700,6 +700,7 @@ static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, · 699 unmodified lines
700 phys_addr_t sdramwins_phys_base,700 phys_addr_t sdramwins_phys_base,
701 size_t sdramwins_size)701 size_t sdramwins_size)
702{702{
703 struct device_node *np;
703 int win;704 int win;
704 705
705 mbus->mbuswins_base = ioremap(mbuswins_phys_base, mbuswins_size);706 mbus->mbuswins_base = ioremap(mbuswins_phys_base, mbuswins_size);
@@ -712,8 +713,11 @@ static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, · 6 unmodified lines
712 return -ENOMEM;713 return -ENOMEM;
713 }714 }
714 715
715 if (of_find_compatible_node(NULL, NULL, "marvell,coherency-fabric"))716 np = of_find_compatible_node(NULL, NULL, "marvell,coherency-fabric");
717 if (np) {
716 mbus->hw_io_coherency = 1;718 mbus->hw_io_coherency = 1;
719 of_node_put(np);
720 }
717 721
718 for (win = 0; win < mbus->soc->num_wins; win++)722 for (win = 0; win < mbus->soc->num_wins; win++)
719 mvebu_mbus_disable_window(mbus, win);723 mvebu_mbus_disable_window(mbus, win);
@@ -861,11 +865,13 @@ static void __init mvebu_mbus_get_pcie_resources(struct device_node *np, · 141 unmodified lines
861 int ret;865 int ret;
862 866
863 /*867 /*
864 * These are optional, so we clear them and they'll868 * These are optional, so we make sure that resource_size(x) will
865 * be zero if they are missing from the DT.869 * return 0.
866 */870 */
867 memset(mem, 0, sizeof(struct resource));871 memset(mem, 0, sizeof(struct resource));
872 mem->end = -1;
868 memset(io, 0, sizeof(struct resource));873 memset(io, 0, sizeof(struct resource));
874 io->end = -1;
869 875
870 ret = of_property_read_u32_array(np, "pcie-mem-aperture", reg, ARRAY_SIZE(reg));876 ret = of_property_read_u32_array(np, "pcie-mem-aperture", reg, ARRAY_SIZE(reg));
871 if (!ret) {877 if (!ret) {
drivers/char/random.c+5−6
@@ -640,7 +640,7 @@ struct timer_rand_state { · 639 unmodified lines
640 */640 */
641void add_device_randomness(const void *buf, unsigned int size)641void add_device_randomness(const void *buf, unsigned int size)
642{642{
643 unsigned long time = get_cycles() ^ jiffies;643 unsigned long time = random_get_entropy() ^ jiffies;
644 644
645 mix_pool_bytes(&input_pool, buf, size, NULL);645 mix_pool_bytes(&input_pool, buf, size, NULL);
646 mix_pool_bytes(&input_pool, &time, sizeof(time), NULL);646 mix_pool_bytes(&input_pool, &time, sizeof(time), NULL);
@@ -677,7 +677,7 @@ static void add_timer_randomness(struct timer_rand_state *state, unsigned num) · 30 unmodified lines
677 goto out;677 goto out;
678 678
679 sample.jiffies = jiffies;679 sample.jiffies = jiffies;
680 sample.cycles = get_cycles();680 sample.cycles = random_get_entropy();
681 sample.num = num;681 sample.num = num;
682 mix_pool_bytes(&input_pool, &sample, sizeof(sample), NULL);682 mix_pool_bytes(&input_pool, &sample, sizeof(sample), NULL);
683 683
@@ -744,7 +744,7 @@ void add_interrupt_randomness(int irq, int irq_flags) · 60 unmodified lines
744 struct fast_pool *fast_pool = &__get_cpu_var(irq_randomness);744 struct fast_pool *fast_pool = &__get_cpu_var(irq_randomness);
745 struct pt_regs *regs = get_irq_regs();745 struct pt_regs *regs = get_irq_regs();
746 unsigned long now = jiffies;746 unsigned long now = jiffies;
747 __u32 input[4], cycles = get_cycles();747 __u32 input[4], cycles = random_get_entropy();
748 748
749 input[0] = cycles ^ jiffies;749 input[0] = cycles ^ jiffies;
750 input[1] = irq;750 input[1] = irq;
@@ -1459,12 +1459,11 @@ struct ctl_table random_table[] = { · 708 unmodified lines
1459 1459
1460static u32 random_int_secret[MD5_MESSAGE_BYTES / 4] ____cacheline_aligned;1460static u32 random_int_secret[MD5_MESSAGE_BYTES / 4] ____cacheline_aligned;
1461 1461
1462static int __init random_int_secret_init(void)1462int random_int_secret_init(void)
1463{1463{
1464 get_random_bytes(random_int_secret, sizeof(random_int_secret));1464 get_random_bytes(random_int_secret, sizeof(random_int_secret));
1465 return 0;1465 return 0;
1466}1466}
1467late_initcall(random_int_secret_init);
1468 1467
1469/*1468/*
1470 * Get a random word for internal kernel use only. Similar to urandom but1469 * Get a random word for internal kernel use only. Similar to urandom but
@@ -1483,7 +1482,7 @@ unsigned int get_random_int(void) · 12 unmodified lines
1483 1482
1484 hash = get_cpu_var(get_random_int_hash);1483 hash = get_cpu_var(get_random_int_hash);
1485 1484
1486 hash[0] += current->pid + jiffies + get_cycles();1485 hash[0] += current->pid + jiffies + random_get_entropy();
1487 md5_transform(hash, random_int_secret);1486 md5_transform(hash, random_int_secret);
1488 ret = hash[0];1487 ret = hash[0];
1489 put_cpu_var(get_random_int_hash);1488 put_cpu_var(get_random_int_hash);
drivers/char/tpm/xen-tpmfront.c+1−0
@@ -10,6 +10,7 @@ · 9 unmodified lines
10#include <linux/errno.h>10#include <linux/errno.h>
11#include <linux/err.h>11#include <linux/err.h>
12#include <linux/interrupt.h>12#include <linux/interrupt.h>
13#include <xen/xen.h>
13#include <xen/events.h>14#include <xen/events.h>
14#include <xen/interface/io/tpmif.h>15#include <xen/interface/io/tpmif.h>
15#include <xen/grant_table.h>16#include <xen/grant_table.h>
drivers/cpufreq/cpufreq-cpu0.c+1−1
@@ -229,7 +229,7 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev) · 228 unmodified lines
229 if (of_property_read_u32(np, "clock-latency", &transition_latency))229 if (of_property_read_u32(np, "clock-latency", &transition_latency))
230 transition_latency = CPUFREQ_ETERNAL;230 transition_latency = CPUFREQ_ETERNAL;
231 231
232 if (cpu_reg) {232 if (!IS_ERR(cpu_reg)) {
233 struct opp *opp;233 struct opp *opp;
234 unsigned long min_uV, max_uV;234 unsigned long min_uV, max_uV;
235 int i;235 int i;
drivers/cpufreq/intel_pstate.c+8−5
@@ -383,6 +383,7 @@ static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max) · 382 unmodified lines
383static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)383static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
384{384{
385 int max_perf, min_perf;385 int max_perf, min_perf;
386 u64 val;
386 387
387 intel_pstate_get_min_max(cpu, &min_perf, &max_perf);388 intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
388 389
@@ -394,8 +395,11 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate) · 5 unmodified lines
394 trace_cpu_frequency(pstate * 100000, cpu->cpu);395 trace_cpu_frequency(pstate * 100000, cpu->cpu);
395 396
396 cpu->pstate.current_pstate = pstate;397 cpu->pstate.current_pstate = pstate;
397 wrmsrl(MSR_IA32_PERF_CTL, pstate << 8);398 val = pstate << 8;
399 if (limits.no_turbo)
400 val |= (u64)1 << 32;
398 401
402 wrmsrl(MSR_IA32_PERF_CTL, val);
399}403}
400 404
401static inline void intel_pstate_pstate_increase(struct cpudata *cpu, int steps)405static inline void intel_pstate_pstate_increase(struct cpudata *cpu, int steps)
@@ -634,8 +638,8 @@ static int intel_pstate_cpu_exit(struct cpufreq_policy *policy) · 232 unmodified lines
634 638
635static int intel_pstate_cpu_init(struct cpufreq_policy *policy)639static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
636{640{
637 int rc, min_pstate, max_pstate;
638 struct cpudata *cpu;641 struct cpudata *cpu;
642 int rc;
639 643
640 rc = intel_pstate_init_cpu(policy->cpu);644 rc = intel_pstate_init_cpu(policy->cpu);
641 if (rc)645 if (rc)
@@ -649,9 +653,8 @@ static int intel_pstate_cpu_init(struct cpufreq_policy *policy) · 7 unmodified lines
649 else653 else
650 policy->policy = CPUFREQ_POLICY_POWERSAVE;654 policy->policy = CPUFREQ_POLICY_POWERSAVE;
651 655
652 intel_pstate_get_min_max(cpu, &min_pstate, &max_pstate);656 policy->min = cpu->pstate.min_pstate * 100000;
653 policy->min = min_pstate * 100000;657 policy->max = cpu->pstate.turbo_pstate * 100000;
654 policy->max = max_pstate * 100000;
655 658
656 /* cpuinfo and default policy values */659 /* cpuinfo and default policy values */
657 policy->cpuinfo.min_freq = cpu->pstate.min_pstate * 100000;660 policy->cpuinfo.min_freq = cpu->pstate.min_pstate * 100000;
drivers/cpufreq/s3c64xx-cpufreq.c+1−1
@@ -166,7 +166,7 @@ static void __init s3c64xx_cpufreq_config_regulator(void) · 165 unmodified lines
166 if (freq->frequency == CPUFREQ_ENTRY_INVALID)166 if (freq->frequency == CPUFREQ_ENTRY_INVALID)
167 continue;167 continue;
168 168
169 dvfs = &s3c64xx_dvfs_table[freq->index];169 dvfs = &s3c64xx_dvfs_table[freq->driver_data];
170 found = 0;170 found = 0;
171 171
172 for (i = 0; i < count; i++) {172 for (i = 0; i < count; i++) {
drivers/cpufreq/spear-cpufreq.c+1−1
@@ -113,7 +113,7 @@ static int spear_cpufreq_target(struct cpufreq_policy *policy, · 112 unmodified lines
113 unsigned int target_freq, unsigned int relation)113 unsigned int target_freq, unsigned int relation)
114{114{
115 struct cpufreq_freqs freqs;115 struct cpufreq_freqs freqs;
116 unsigned long newfreq;116 long newfreq;
117 struct clk *srcclk;117 struct clk *srcclk;
118 int index, ret, mult = 1;118 int index, ret, mult = 1;
119 119
drivers/dma/Kconfig+1−0
@@ -198,6 +198,7 @@ config TI_EDMA · 197 unmodified lines
198 depends on ARCH_DAVINCI || ARCH_OMAP198 depends on ARCH_DAVINCI || ARCH_OMAP
199 select DMA_ENGINE199 select DMA_ENGINE
200 select DMA_VIRTUAL_CHANNELS200 select DMA_VIRTUAL_CHANNELS
201 select TI_PRIV_EDMA
201 default n202 default n
202 help203 help
203 Enable support for the TI EDMA controller. This DMA204 Enable support for the TI EDMA controller. This DMA
drivers/dma/edma.c+2−1
@@ -306,6 +306,7 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg( · 305 unmodified lines
306 EDMA_SLOT_ANY);306 EDMA_SLOT_ANY);
307 if (echan->slot[i] < 0) {307 if (echan->slot[i] < 0) {
308 dev_err(dev, "Failed to allocate slot\n");308 dev_err(dev, "Failed to allocate slot\n");
309 kfree(edesc);
309 return NULL;310 return NULL;
310 }311 }
311 }312 }
@@ -749,6 +750,6 @@ static void __exit edma_exit(void) · 437 unmodified lines
749}750}
750module_exit(edma_exit);751module_exit(edma_exit);
751 752
752MODULE_AUTHOR("Matt Porter <mporter@ti.com>");753MODULE_AUTHOR("Matt Porter <matt.porter@linaro.org>");
753MODULE_DESCRIPTION("TI EDMA DMA engine driver");754MODULE_DESCRIPTION("TI EDMA DMA engine driver");
754MODULE_LICENSE("GPL v2");755MODULE_LICENSE("GPL v2");
drivers/dma/imx-dma.c+15−16
@@ -437,17 +437,18 @@ static void dma_irq_handle_channel(struct imxdma_channel *imxdmac) · 436 unmodified lines
437 struct imxdma_engine *imxdma = imxdmac->imxdma;437 struct imxdma_engine *imxdma = imxdmac->imxdma;
438 int chno = imxdmac->channel;438 int chno = imxdmac->channel;
439 struct imxdma_desc *desc;439 struct imxdma_desc *desc;
440 unsigned long flags;
440 441
441 spin_lock(&imxdma->lock);442 spin_lock_irqsave(&imxdma->lock, flags);
442 if (list_empty(&imxdmac->ld_active)) {443 if (list_empty(&imxdmac->ld_active)) {
443 spin_unlock(&imxdma->lock);444 spin_unlock_irqrestore(&imxdma->lock, flags);
444 goto out;445 goto out;
445 }446 }
446 447
447 desc = list_first_entry(&imxdmac->ld_active,448 desc = list_first_entry(&imxdmac->ld_active,
448 struct imxdma_desc,449 struct imxdma_desc,
449 node);450 node);
450 spin_unlock(&imxdma->lock);451 spin_unlock_irqrestore(&imxdma->lock, flags);
451 452
452 if (desc->sg) {453 if (desc->sg) {
453 u32 tmp;454 u32 tmp;
@@ -519,7 +520,6 @@ static int imxdma_xfer_desc(struct imxdma_desc *d) · 65 unmodified lines
519{520{
520 struct imxdma_channel *imxdmac = to_imxdma_chan(d->desc.chan);521 struct imxdma_channel *imxdmac = to_imxdma_chan(d->desc.chan);
521 struct imxdma_engine *imxdma = imxdmac->imxdma;522 struct imxdma_engine *imxdma = imxdmac->imxdma;
522 unsigned long flags;
523 int slot = -1;523 int slot = -1;
524 int i;524 int i;
525 525
@@ -527,7 +527,6 @@ static int imxdma_xfer_desc(struct imxdma_desc *d) · 1 unmodified line
527 switch (d->type) {527 switch (d->type) {
528 case IMXDMA_DESC_INTERLEAVED:528 case IMXDMA_DESC_INTERLEAVED:
529 /* Try to get a free 2D slot */529 /* Try to get a free 2D slot */
530 spin_lock_irqsave(&imxdma->lock, flags);
531 for (i = 0; i < IMX_DMA_2D_SLOTS; i++) {530 for (i = 0; i < IMX_DMA_2D_SLOTS; i++) {
532 if ((imxdma->slots_2d[i].count > 0) &&531 if ((imxdma->slots_2d[i].count > 0) &&
533 ((imxdma->slots_2d[i].xsr != d->x) ||532 ((imxdma->slots_2d[i].xsr != d->x) ||
@@ -537,10 +536,8 @@ static int imxdma_xfer_desc(struct imxdma_desc *d) · 3 unmodified lines
537 slot = i;536 slot = i;
538 break;537 break;
539 }538 }
540 if (slot < 0) {539 if (slot < 0)
541 spin_unlock_irqrestore(&imxdma->lock, flags);
542 return -EBUSY;540 return -EBUSY;
543 }
544 541
545 imxdma->slots_2d[slot].xsr = d->x;542 imxdma->slots_2d[slot].xsr = d->x;
546 imxdma->slots_2d[slot].ysr = d->y;543 imxdma->slots_2d[slot].ysr = d->y;
@@ -549,7 +546,6 @@ static int imxdma_xfer_desc(struct imxdma_desc *d) · 2 unmodified lines
549 546
550 imxdmac->slot_2d = slot;547 imxdmac->slot_2d = slot;
551 imxdmac->enabled_2d = true;548 imxdmac->enabled_2d = true;
552 spin_unlock_irqrestore(&imxdma->lock, flags);
553 549
554 if (slot == IMX_DMA_2D_SLOT_A) {550 if (slot == IMX_DMA_2D_SLOT_A) {
555 d->config_mem &= ~CCR_MSEL_B;551 d->config_mem &= ~CCR_MSEL_B;
@@ -625,18 +621,17 @@ static void imxdma_tasklet(unsigned long data) · 69 unmodified lines
625 struct imxdma_channel *imxdmac = (void *)data;621 struct imxdma_channel *imxdmac = (void *)data;
626 struct imxdma_engine *imxdma = imxdmac->imxdma;622 struct imxdma_engine *imxdma = imxdmac->imxdma;
627 struct imxdma_desc *desc;623 struct imxdma_desc *desc;
624 unsigned long flags;
628 625
629 spin_lock(&imxdma->lock);626 spin_lock_irqsave(&imxdma->lock, flags);
630 627
631 if (list_empty(&imxdmac->ld_active)) {628 if (list_empty(&imxdmac->ld_active)) {
632 /* Someone might have called terminate all */629 /* Someone might have called terminate all */
633 goto out;630 spin_unlock_irqrestore(&imxdma->lock, flags);
631 return;
634 }632 }
635 desc = list_first_entry(&imxdmac->ld_active, struct imxdma_desc, node);633 desc = list_first_entry(&imxdmac->ld_active, struct imxdma_desc, node);
636 634
637 if (desc->desc.callback)
638 desc->desc.callback(desc->desc.callback_param);
639
640 /* If we are dealing with a cyclic descriptor, keep it on ld_active635 /* If we are dealing with a cyclic descriptor, keep it on ld_active
641 * and dont mark the descriptor as complete.636 * and dont mark the descriptor as complete.
642 * Only in non-cyclic cases it would be marked as complete637 * Only in non-cyclic cases it would be marked as complete
@@ -663,7 +658,11 @@ static void imxdma_tasklet(unsigned long data) · 20 unmodified lines
663 __func__, imxdmac->channel);658 __func__, imxdmac->channel);
664 }659 }
665out:660out:
666 spin_unlock(&imxdma->lock);661 spin_unlock_irqrestore(&imxdma->lock, flags);
662
663 if (desc->desc.callback)
664 desc->desc.callback(desc->desc.callback_param);
665
667}666}
668 667
669static int imxdma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,668static int imxdma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
@@ -883,7 +882,7 @@ static struct dma_async_tx_descriptor *imxdma_prep_dma_cyclic( · 213 unmodified lines
883 kfree(imxdmac->sg_list);882 kfree(imxdmac->sg_list);
884 883
885 imxdmac->sg_list = kcalloc(periods + 1,884 imxdmac->sg_list = kcalloc(periods + 1,
886 sizeof(struct scatterlist), GFP_KERNEL);885 sizeof(struct scatterlist), GFP_ATOMIC);
887 if (!imxdmac->sg_list)886 if (!imxdmac->sg_list)
888 return NULL;887 return NULL;
889 888
drivers/dma/sh/rcar-hpbdma.c+5−4
@@ -93,6 +93,7 @@ struct hpb_dmae_chan { · 92 unmodified lines
93 void __iomem *base;93 void __iomem *base;
94 const struct hpb_dmae_slave_config *cfg;94 const struct hpb_dmae_slave_config *cfg;
95 char dev_id[16]; /* unique name per DMAC of channel */95 char dev_id[16]; /* unique name per DMAC of channel */
96 dma_addr_t slave_addr;
96};97};
97 98
98struct hpb_dmae_device {99struct hpb_dmae_device {
@@ -432,7 +433,6 @@ hpb_dmae_alloc_chan_resources(struct hpb_dmae_chan *hpb_chan, · 333 unmodified lines
432 hpb_chan->xfer_mode = XFER_DOUBLE;433 hpb_chan->xfer_mode = XFER_DOUBLE;
433 } else {434 } else {
434 dev_err(hpb_chan->shdma_chan.dev, "DCR setting error");435 dev_err(hpb_chan->shdma_chan.dev, "DCR setting error");
435 shdma_free_irq(&hpb_chan->shdma_chan);
436 return -EINVAL;436 return -EINVAL;
437 }437 }
438 438
@@ -446,7 +446,8 @@ hpb_dmae_alloc_chan_resources(struct hpb_dmae_chan *hpb_chan, · 7 unmodified lines
446 return 0;446 return 0;
447}447}
448 448
449static int hpb_dmae_set_slave(struct shdma_chan *schan, int slave_id, bool try)449static int hpb_dmae_set_slave(struct shdma_chan *schan, int slave_id,
450 dma_addr_t slave_addr, bool try)
450{451{
451 struct hpb_dmae_chan *chan = to_chan(schan);452 struct hpb_dmae_chan *chan = to_chan(schan);
452 const struct hpb_dmae_slave_config *sc =453 const struct hpb_dmae_slave_config *sc =
@@ -457,6 +458,7 @@ static int hpb_dmae_set_slave(struct shdma_chan *schan, int slave_id, bool try) · 4 unmodified lines
457 if (try)458 if (try)
458 return 0;459 return 0;
459 chan->cfg = sc;460 chan->cfg = sc;
461 chan->slave_addr = slave_addr ? : sc->addr;
460 return hpb_dmae_alloc_chan_resources(chan, sc);462 return hpb_dmae_alloc_chan_resources(chan, sc);
461}463}
462 464
@@ -468,7 +470,7 @@ static dma_addr_t hpb_dmae_slave_addr(struct shdma_chan *schan) · 5 unmodified lines
468{470{
469 struct hpb_dmae_chan *chan = to_chan(schan);471 struct hpb_dmae_chan *chan = to_chan(schan);
470 472
471 return chan->cfg->addr;473 return chan->slave_addr;
472}474}
473 475
474static struct shdma_desc *hpb_dmae_embedded_desc(void *buf, int i)476static struct shdma_desc *hpb_dmae_embedded_desc(void *buf, int i)
@@ -614,7 +616,6 @@ static void hpb_dmae_chan_remove(struct hpb_dmae_device *hpbdev) · 139 unmodified lines
614 shdma_for_each_chan(schan, &hpbdev->shdma_dev, i) {616 shdma_for_each_chan(schan, &hpbdev->shdma_dev, i) {
615 BUG_ON(!schan);617 BUG_ON(!schan);
616 618
617 shdma_free_irq(schan);
618 shdma_chan_remove(schan);619 shdma_chan_remove(schan);
619 }620 }
620 dma_dev->chancnt = 0;621 dma_dev->chancnt = 0;
drivers/gpio/gpio-lynxpoint.c+3−2
@@ -248,14 +248,15 @@ static void lp_gpio_irq_handler(unsigned irq, struct irq_desc *desc) · 247 unmodified lines
248 struct lp_gpio *lg = irq_data_get_irq_handler_data(data);248 struct lp_gpio *lg = irq_data_get_irq_handler_data(data);
249 struct irq_chip *chip = irq_data_get_irq_chip(data);249 struct irq_chip *chip = irq_data_get_irq_chip(data);
250 u32 base, pin, mask;250 u32 base, pin, mask;
251 unsigned long reg, pending;251 unsigned long reg, ena, pending;
252 unsigned virq;252 unsigned virq;
253 253
254 /* check from GPIO controller which pin triggered the interrupt */254 /* check from GPIO controller which pin triggered the interrupt */
255 for (base = 0; base < lg->chip.ngpio; base += 32) {255 for (base = 0; base < lg->chip.ngpio; base += 32) {
256 reg = lp_gpio_reg(&lg->chip, base, LP_INT_STAT);256 reg = lp_gpio_reg(&lg->chip, base, LP_INT_STAT);
257 ena = lp_gpio_reg(&lg->chip, base, LP_INT_ENABLE);
257 258
258 while ((pending = inl(reg))) {259 while ((pending = (inl(reg) & inl(ena)))) {
259 pin = __ffs(pending);260 pin = __ffs(pending);
260 mask = BIT(pin);261 mask = BIT(pin);
261 /* Clear before handling so we don't lose an edge */262 /* Clear before handling so we don't lose an edge */
drivers/gpio/gpio-omap.c+101−57
@@ -63,6 +63,7 @@ struct gpio_bank { · 62 unmodified lines
63 struct gpio_chip chip;63 struct gpio_chip chip;
64 struct clk *dbck;64 struct clk *dbck;
65 u32 mod_usage;65 u32 mod_usage;
66 u32 irq_usage;
66 u32 dbck_enable_mask;67 u32 dbck_enable_mask;
67 bool dbck_enabled;68 bool dbck_enabled;
68 struct device *dev;69 struct device *dev;
@@ -86,6 +87,9 @@ struct gpio_bank { · 17 unmodified lines
86#define GPIO_BIT(bank, gpio) (1 << GPIO_INDEX(bank, gpio))87#define GPIO_BIT(bank, gpio) (1 << GPIO_INDEX(bank, gpio))
87#define GPIO_MOD_CTRL_BIT BIT(0)88#define GPIO_MOD_CTRL_BIT BIT(0)
88 89
90#define BANK_USED(bank) (bank->mod_usage || bank->irq_usage)
91#define LINE_USED(line, offset) (line & (1 << offset))
92
89static int irq_to_gpio(struct gpio_bank *bank, unsigned int gpio_irq)93static int irq_to_gpio(struct gpio_bank *bank, unsigned int gpio_irq)
90{94{
91 return bank->chip.base + gpio_irq;95 return bank->chip.base + gpio_irq;
@@ -420,15 +424,69 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, · 328 unmodified lines
420 return 0;424 return 0;
421}425}
422 426
427static void _enable_gpio_module(struct gpio_bank *bank, unsigned offset)
428{
429 if (bank->regs->pinctrl) {
430 void __iomem *reg = bank->base + bank->regs->pinctrl;
431
432 /* Claim the pin for MPU */
433 __raw_writel(__raw_readl(reg) | (1 << offset), reg);
434 }
435
436 if (bank->regs->ctrl && !BANK_USED(bank)) {
437 void __iomem *reg = bank->base + bank->regs->ctrl;
438 u32 ctrl;
439
440 ctrl = __raw_readl(reg);
441 /* Module is enabled, clocks are not gated */
442 ctrl &= ~GPIO_MOD_CTRL_BIT;
443 __raw_writel(ctrl, reg);
444 bank->context.ctrl = ctrl;
445 }
446}
447
448static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset)
449{
450 void __iomem *base = bank->base;
451
452 if (bank->regs->wkup_en &&
453 !LINE_USED(bank->mod_usage, offset) &&
454 !LINE_USED(bank->irq_usage, offset)) {
455 /* Disable wake-up during idle for dynamic tick */
456 _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0);
457 bank->context.wake_en =
458 __raw_readl(bank->base + bank->regs->wkup_en);
459 }
460
461 if (bank->regs->ctrl && !BANK_USED(bank)) {
462 void __iomem *reg = bank->base + bank->regs->ctrl;
463 u32 ctrl;
464
465 ctrl = __raw_readl(reg);
466 /* Module is disabled, clocks are gated */
467 ctrl |= GPIO_MOD_CTRL_BIT;
468 __raw_writel(ctrl, reg);
469 bank->context.ctrl = ctrl;
470 }
471}
472
473static int gpio_is_input(struct gpio_bank *bank, int mask)
474{
475 void __iomem *reg = bank->base + bank->regs->direction;
476
477 return __raw_readl(reg) & mask;
478}
479
423static int gpio_irq_type(struct irq_data *d, unsigned type)480static int gpio_irq_type(struct irq_data *d, unsigned type)
424{481{
425 struct gpio_bank *bank = irq_data_get_irq_chip_data(d);482 struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
426 unsigned gpio = 0;483 unsigned gpio = 0;
427 int retval;484 int retval;
428 unsigned long flags;485 unsigned long flags;
486 unsigned offset;
429 487
430 if (WARN_ON(!bank->mod_usage))488 if (!BANK_USED(bank))
431 return -EINVAL;489 pm_runtime_get_sync(bank->dev);
432 490
433#ifdef CONFIG_ARCH_OMAP1491#ifdef CONFIG_ARCH_OMAP1
434 if (d->irq > IH_MPUIO_BASE)492 if (d->irq > IH_MPUIO_BASE)
@@ -446,7 +504,17 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) · 11 unmodified lines
446 return -EINVAL;504 return -EINVAL;
447 505
448 spin_lock_irqsave(&bank->lock, flags);506 spin_lock_irqsave(&bank->lock, flags);
449 retval = _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), type);507 offset = GPIO_INDEX(bank, gpio);
508 retval = _set_gpio_triggering(bank, offset, type);
509 if (!LINE_USED(bank->mod_usage, offset)) {
510 _enable_gpio_module(bank, offset);
511 _set_gpio_direction(bank, offset, 1);
512 } else if (!gpio_is_input(bank, 1 << offset)) {
513 spin_unlock_irqrestore(&bank->lock, flags);
514 return -EINVAL;
515 }
516
517 bank->irq_usage |= 1 << GPIO_INDEX(bank, gpio);
450 spin_unlock_irqrestore(&bank->lock, flags);518 spin_unlock_irqrestore(&bank->lock, flags);
451 519
452 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))520 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
@@ -603,35 +671,19 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) · 150 unmodified lines
603 * If this is the first gpio_request for the bank,671 * If this is the first gpio_request for the bank,
604 * enable the bank module.672 * enable the bank module.
605 */673 */
606 if (!bank->mod_usage)674 if (!BANK_USED(bank))
607 pm_runtime_get_sync(bank->dev);675 pm_runtime_get_sync(bank->dev);
608 676
609 spin_lock_irqsave(&bank->lock, flags);677 spin_lock_irqsave(&bank->lock, flags);
610 /* Set trigger to none. You need to enable the desired trigger with678 /* Set trigger to none. You need to enable the desired trigger with
611 * request_irq() or set_irq_type().679 * request_irq() or set_irq_type(). Only do this if the IRQ line has
680 * not already been requested.
612 */681 */
613 _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);682 if (!LINE_USED(bank->irq_usage, offset)) {
614 683 _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
615 if (bank->regs->pinctrl) {684 _enable_gpio_module(bank, offset);
616 void __iomem *reg = bank->base + bank->regs->pinctrl;
617
618 /* Claim the pin for MPU */
619 __raw_writel(__raw_readl(reg) | (1 << offset), reg);
620 }
621
622 if (bank->regs->ctrl && !bank->mod_usage) {
623 void __iomem *reg = bank->base + bank->regs->ctrl;
624 u32 ctrl;
625
626 ctrl = __raw_readl(reg);
627 /* Module is enabled, clocks are not gated */
628 ctrl &= ~GPIO_MOD_CTRL_BIT;
629 __raw_writel(ctrl, reg);
630 bank->context.ctrl = ctrl;
631 }685 }
632
633 bank->mod_usage |= 1 << offset;686 bank->mod_usage |= 1 << offset;
634
635 spin_unlock_irqrestore(&bank->lock, flags);687 spin_unlock_irqrestore(&bank->lock, flags);
636 688
637 return 0;689 return 0;
@@ -640,31 +692,11 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) · 2 unmodified lines
640static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)692static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
641{693{
642 struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);694 struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);
643 void __iomem *base = bank->base;
644 unsigned long flags;695 unsigned long flags;
645 696
646 spin_lock_irqsave(&bank->lock, flags);697 spin_lock_irqsave(&bank->lock, flags);
647
648 if (bank->regs->wkup_en) {
649 /* Disable wake-up during idle for dynamic tick */
650 _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0);
651 bank->context.wake_en =
652 __raw_readl(bank->base + bank->regs->wkup_en);
653 }
654
655 bank->mod_usage &= ~(1 << offset);698 bank->mod_usage &= ~(1 << offset);
656 699 _disable_gpio_module(bank, offset);
657 if (bank->regs->ctrl && !bank->mod_usage) {
658 void __iomem *reg = bank->base + bank->regs->ctrl;
659 u32 ctrl;
660
661 ctrl = __raw_readl(reg);
662 /* Module is disabled, clocks are gated */
663 ctrl |= GPIO_MOD_CTRL_BIT;
664 __raw_writel(ctrl, reg);
665 bank->context.ctrl = ctrl;
666 }
667
668 _reset_gpio(bank, bank->chip.base + offset);700 _reset_gpio(bank, bank->chip.base + offset);
669 spin_unlock_irqrestore(&bank->lock, flags);701 spin_unlock_irqrestore(&bank->lock, flags);
670 702
@@ -672,7 +704,7 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset) · 1 unmodified line
672 * If this is the last gpio to be freed in the bank,704 * If this is the last gpio to be freed in the bank,
673 * disable the bank module.705 * disable the bank module.
674 */706 */
675 if (!bank->mod_usage)707 if (!BANK_USED(bank))
676 pm_runtime_put(bank->dev);708 pm_runtime_put(bank->dev);
677}709}
678 710
@@ -762,10 +794,20 @@ static void gpio_irq_shutdown(struct irq_data *d) · 83 unmodified lines
762 struct gpio_bank *bank = irq_data_get_irq_chip_data(d);794 struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
763 unsigned int gpio = irq_to_gpio(bank, d->hwirq);795 unsigned int gpio = irq_to_gpio(bank, d->hwirq);
764 unsigned long flags;796 unsigned long flags;
797 unsigned offset = GPIO_INDEX(bank, gpio);
765 798
766 spin_lock_irqsave(&bank->lock, flags);799 spin_lock_irqsave(&bank->lock, flags);
800 bank->irq_usage &= ~(1 << offset);
801 _disable_gpio_module(bank, offset);
767 _reset_gpio(bank, gpio);802 _reset_gpio(bank, gpio);
768 spin_unlock_irqrestore(&bank->lock, flags);803 spin_unlock_irqrestore(&bank->lock, flags);
804
805 /*
806 * If this is the last IRQ to be freed in the bank,
807 * disable the bank module.
808 */
809 if (!BANK_USED(bank))
810 pm_runtime_put(bank->dev);
769}811}
770 812
771static void gpio_ack_irq(struct irq_data *d)813static void gpio_ack_irq(struct irq_data *d)
@@ -897,13 +939,6 @@ static int gpio_input(struct gpio_chip *chip, unsigned offset) · 125 unmodified lines
897 return 0;939 return 0;
898}940}
899 941
900static int gpio_is_input(struct gpio_bank *bank, int mask)
901{
902 void __iomem *reg = bank->base + bank->regs->direction;
903
904 return __raw_readl(reg) & mask;
905}
906
907static int gpio_get(struct gpio_chip *chip, unsigned offset)942static int gpio_get(struct gpio_chip *chip, unsigned offset)
908{943{
909 struct gpio_bank *bank;944 struct gpio_bank *bank;
@@ -922,13 +957,22 @@ static int gpio_output(struct gpio_chip *chip, unsigned offset, int value) · 12 unmodified lines
922{957{
923 struct gpio_bank *bank;958 struct gpio_bank *bank;
924 unsigned long flags;959 unsigned long flags;
960 int retval = 0;
925 961
926 bank = container_of(chip, struct gpio_bank, chip);962 bank = container_of(chip, struct gpio_bank, chip);
927 spin_lock_irqsave(&bank->lock, flags);963 spin_lock_irqsave(&bank->lock, flags);
964
965 if (LINE_USED(bank->irq_usage, offset)) {
966 retval = -EINVAL;
967 goto exit;
968 }
969
928 bank->set_dataout(bank, offset, value);970 bank->set_dataout(bank, offset, value);
929 _set_gpio_direction(bank, offset, 0);971 _set_gpio_direction(bank, offset, 0);
972
973exit:
930 spin_unlock_irqrestore(&bank->lock, flags);974 spin_unlock_irqrestore(&bank->lock, flags);
931 return 0;975 return retval;
932}976}
933 977
934static int gpio_debounce(struct gpio_chip *chip, unsigned offset,978static int gpio_debounce(struct gpio_chip *chip, unsigned offset,
@@ -1400,7 +1444,7 @@ void omap2_gpio_prepare_for_idle(int pwr_mode) · 465 unmodified lines
1400 struct gpio_bank *bank;1444 struct gpio_bank *bank;
1401 1445
1402 list_for_each_entry(bank, &omap_gpio_list, node) {1446 list_for_each_entry(bank, &omap_gpio_list, node) {
1403 if (!bank->mod_usage || !bank->loses_context)1447 if (!BANK_USED(bank) || !bank->loses_context)
1404 continue;1448 continue;
1405 1449
1406 bank->power_mode = pwr_mode;1450 bank->power_mode = pwr_mode;
@@ -1414,7 +1458,7 @@ void omap2_gpio_resume_after_idle(void) · 7 unmodified lines
1414 struct gpio_bank *bank;1458 struct gpio_bank *bank;
1415 1459
1416 list_for_each_entry(bank, &omap_gpio_list, node) {1460 list_for_each_entry(bank, &omap_gpio_list, node) {
1417 if (!bank->mod_usage || !bank->loses_context)1461 if (!BANK_USED(bank) || !bank->loses_context)
1418 continue;1462 continue;
1419 1463
1420 pm_runtime_get_sync(bank->dev);1464 pm_runtime_get_sync(bank->dev);
drivers/gpio/gpio-rcar.c+3−4
@@ -293,10 +293,9 @@ static void gpio_rcar_parse_pdata(struct gpio_rcar_priv *p) · 292 unmodified lines
293 if (pdata) {293 if (pdata) {
294 p->config = *pdata;294 p->config = *pdata;
295 } else if (IS_ENABLED(CONFIG_OF) && np) {295 } else if (IS_ENABLED(CONFIG_OF) && np) {
296 ret = of_parse_phandle_with_args(np, "gpio-ranges",296 ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, 0,
297 "#gpio-range-cells", 0, &args);297 &args);
298 p->config.number_of_pins = ret == 0 && args.args_count == 3298 p->config.number_of_pins = ret == 0 ? args.args[2]
299 ? args.args[2]
300 : RCAR_MAX_GPIO_PER_BANK;299 : RCAR_MAX_GPIO_PER_BANK;
301 p->config.gpio_base = -1;300 p->config.gpio_base = -1;
302 }301 }
drivers/gpio/gpiolib.c+4−2
@@ -136,7 +136,7 @@ static struct gpio_desc *gpio_to_desc(unsigned gpio) · 135 unmodified lines
136 */136 */
137static int desc_to_gpio(const struct gpio_desc *desc)137static int desc_to_gpio(const struct gpio_desc *desc)
138{138{
139 return desc->chip->base + gpio_chip_hwgpio(desc);139 return desc - &gpio_desc[0];
140}140}
141 141
142 142
@@ -1398,7 +1398,7 @@ static int gpiod_request(struct gpio_desc *desc, const char *label) · 1255 unmodified lines
1398 int status = -EPROBE_DEFER;1398 int status = -EPROBE_DEFER;
1399 unsigned long flags;1399 unsigned long flags;
1400 1400
1401 if (!desc || !desc->chip) {1401 if (!desc) {
1402 pr_warn("%s: invalid GPIO\n", __func__);1402 pr_warn("%s: invalid GPIO\n", __func__);
1403 return -EINVAL;1403 return -EINVAL;
1404 }1404 }
@@ -1406,6 +1406,8 @@ static int gpiod_request(struct gpio_desc *desc, const char *label) · 1 unmodified line
1406 spin_lock_irqsave(&gpio_lock, flags);1406 spin_lock_irqsave(&gpio_lock, flags);
1407 1407
1408 chip = desc->chip;1408 chip = desc->chip;
1409 if (chip == NULL)
1410 goto done;
1409 1411
1410 if (!try_module_get(chip->owner))1412 if (!try_module_get(chip->owner))
1411 goto done;1413 goto done;
drivers/gpu/drm/drm_drv.c+8−1
@@ -402,9 +402,16 @@ long drm_ioctl(struct file *filp, · 401 unmodified lines
402 cmd = ioctl->cmd_drv;402 cmd = ioctl->cmd_drv;
403 }403 }
404 else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) {404 else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) {
405 u32 drv_size;
406
405 ioctl = &drm_ioctls[nr];407 ioctl = &drm_ioctls[nr];
406 cmd = ioctl->cmd;408
409 drv_size = _IOC_SIZE(ioctl->cmd);
407 usize = asize = _IOC_SIZE(cmd);410 usize = asize = _IOC_SIZE(cmd);
411 if (drv_size > asize)
412 asize = drv_size;
413
414 cmd = ioctl->cmd;
408 } else415 } else
409 goto err_i1;416 goto err_i1;
410 417
drivers/gpu/drm/drm_edid.c+2−0
@@ -2925,6 +2925,8 @@ int drm_edid_to_speaker_allocation(struct edid *edid, u8 **sadb) · 2924 unmodified lines
2925 /* Speaker Allocation Data Block */2925 /* Speaker Allocation Data Block */
2926 if (dbl == 3) {2926 if (dbl == 3) {
2927 *sadb = kmalloc(dbl, GFP_KERNEL);2927 *sadb = kmalloc(dbl, GFP_KERNEL);
2928 if (!*sadb)
2929 return -ENOMEM;
2928 memcpy(*sadb, &db[1], dbl);2930 memcpy(*sadb, &db[1], dbl);
2929 count = dbl;2931 count = dbl;
2930 break;2932 break;
drivers/gpu/drm/drm_fb_helper.c+0−8
@@ -407,14 +407,6 @@ static void drm_fb_helper_dpms(struct fb_info *info, int dpms_mode) · 406 unmodified lines
407 struct drm_connector *connector;407 struct drm_connector *connector;
408 int i, j;408 int i, j;
409 409
410 /*
411 * fbdev->blank can be called from irq context in case of a panic.
412 * Since we already have our own special panic handler which will
413 * restore the fbdev console mode completely, just bail out early.
414 */
415 if (oops_in_progress)
416 return;
417
418 /*410 /*
419 * fbdev->blank can be called from irq context in case of a panic.411 * fbdev->blank can be called from irq context in case of a panic.
420 * Since we already have our own special panic handler which will412 * Since we already have our own special panic handler which will
drivers/gpu/drm/gma500/gtt.c+1−0
@@ -204,6 +204,7 @@ static int psb_gtt_attach_pages(struct gtt_range *gt) · 203 unmodified lines
204 if (IS_ERR(pages))204 if (IS_ERR(pages))
205 return PTR_ERR(pages);205 return PTR_ERR(pages);
206 206
207 gt->npage = gt->gem.size / PAGE_SIZE;
207 gt->pages = pages;208 gt->pages = pages;
208 209
209 return 0;210 return 0;
drivers/gpu/drm/i915/i915_dma.c+3−12
@@ -1290,12 +1290,9 @@ static int i915_load_modeset_init(struct drm_device *dev) · 1289 unmodified lines
1290 * then we do not take part in VGA arbitration and the1290 * then we do not take part in VGA arbitration and the
1291 * vga_client_register() fails with -ENODEV.1291 * vga_client_register() fails with -ENODEV.
1292 */1292 */
1293 if (!HAS_PCH_SPLIT(dev)) {1293 ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode);
1294 ret = vga_client_register(dev->pdev, dev, NULL,1294 if (ret && ret != -ENODEV)
1295 i915_vga_set_decode);1295 goto out;
1296 if (ret && ret != -ENODEV)
1297 goto out;
1298 }
1299 1296
1300 intel_register_dsm_handler();1297 intel_register_dsm_handler();
1301 1298
@@ -1351,12 +1348,6 @@ static int i915_load_modeset_init(struct drm_device *dev) · 49 unmodified lines
1351 */1348 */
1352 intel_fbdev_initial_config(dev);1349 intel_fbdev_initial_config(dev);
1353 1350
1354 /*
1355 * Must do this after fbcon init so that
1356 * vgacon_save_screen() works during the handover.
1357 */
1358 i915_disable_vga_mem(dev);
1359
1360 /* Only enable hotplug handling once the fbdev is fully set up. */1351 /* Only enable hotplug handling once the fbdev is fully set up. */
1361 dev_priv->enable_hotplug_processing = true;1352 dev_priv->enable_hotplug_processing = true;
1362 1353
drivers/gpu/drm/i915/i915_drv.c+4−1
@@ -505,6 +505,8 @@ static int i915_drm_freeze(struct drm_device *dev) · 504 unmodified lines
505 intel_modeset_suspend_hw(dev);505 intel_modeset_suspend_hw(dev);
506 }506 }
507 507
508 i915_gem_suspend_gtt_mappings(dev);
509
508 i915_save_state(dev);510 i915_save_state(dev);
509 511
510 intel_opregion_fini(dev);512 intel_opregion_fini(dev);
@@ -648,7 +650,8 @@ static int i915_drm_thaw(struct drm_device *dev) · 137 unmodified lines
648 mutex_lock(&dev->struct_mutex);650 mutex_lock(&dev->struct_mutex);
649 i915_gem_restore_gtt_mappings(dev);651 i915_gem_restore_gtt_mappings(dev);
650 mutex_unlock(&dev->struct_mutex);652 mutex_unlock(&dev->struct_mutex);
651 }653 } else if (drm_core_check_feature(dev, DRIVER_MODESET))
654 i915_check_and_clear_faults(dev);
652 655
653 __i915_drm_thaw(dev);656 __i915_drm_thaw(dev);
654 657
drivers/gpu/drm/i915/i915_drv.h+6−2
@@ -497,10 +497,12 @@ struct i915_address_space { · 496 unmodified lines
497 497
498 /* FIXME: Need a more generic return type */498 /* FIXME: Need a more generic return type */
499 gen6_gtt_pte_t (*pte_encode)(dma_addr_t addr,499 gen6_gtt_pte_t (*pte_encode)(dma_addr_t addr,
500 enum i915_cache_level level);500 enum i915_cache_level level,
501 bool valid); /* Create a valid PTE */
501 void (*clear_range)(struct i915_address_space *vm,502 void (*clear_range)(struct i915_address_space *vm,
502 unsigned int first_entry,503 unsigned int first_entry,
503 unsigned int num_entries);504 unsigned int num_entries,
505 bool use_scratch);
504 void (*insert_entries)(struct i915_address_space *vm,506 void (*insert_entries)(struct i915_address_space *vm,
505 struct sg_table *st,507 struct sg_table *st,
506 unsigned int first_entry,508 unsigned int first_entry,
@@ -2065,6 +2067,8 @@ void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt, · 1558 unmodified lines
2065void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,2067void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
2066 struct drm_i915_gem_object *obj);2068 struct drm_i915_gem_object *obj);
2067 2069
2070void i915_check_and_clear_faults(struct drm_device *dev);
2071void i915_gem_suspend_gtt_mappings(struct drm_device *dev);
2068void i915_gem_restore_gtt_mappings(struct drm_device *dev);2072void i915_gem_restore_gtt_mappings(struct drm_device *dev);
2069int __must_check i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj);2073int __must_check i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj);
2070void i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj,2074void i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj,
drivers/gpu/drm/i915/i915_gem_gtt.c+85−24
@@ -58,9 +58,10 @@ · 57 unmodified lines
58#define HSW_WT_ELLC_LLC_AGE0 HSW_CACHEABILITY_CONTROL(0x6)58#define HSW_WT_ELLC_LLC_AGE0 HSW_CACHEABILITY_CONTROL(0x6)
59 59
60static gen6_gtt_pte_t snb_pte_encode(dma_addr_t addr,60static gen6_gtt_pte_t snb_pte_encode(dma_addr_t addr,
61 enum i915_cache_level level)61 enum i915_cache_level level,
62 bool valid)
62{63{
63 gen6_gtt_pte_t pte = GEN6_PTE_VALID;64 gen6_gtt_pte_t pte = valid ? GEN6_PTE_VALID : 0;
64 pte |= GEN6_PTE_ADDR_ENCODE(addr);65 pte |= GEN6_PTE_ADDR_ENCODE(addr);
65 66
66 switch (level) {67 switch (level) {
@@ -79,9 +80,10 @@ static gen6_gtt_pte_t snb_pte_encode(dma_addr_t addr, · 12 unmodified lines
79}80}
80 81
81static gen6_gtt_pte_t ivb_pte_encode(dma_addr_t addr,82static gen6_gtt_pte_t ivb_pte_encode(dma_addr_t addr,
82 enum i915_cache_level level)83 enum i915_cache_level level,
84 bool valid)
83{85{
84 gen6_gtt_pte_t pte = GEN6_PTE_VALID;86 gen6_gtt_pte_t pte = valid ? GEN6_PTE_VALID : 0;
85 pte |= GEN6_PTE_ADDR_ENCODE(addr);87 pte |= GEN6_PTE_ADDR_ENCODE(addr);
86 88
87 switch (level) {89 switch (level) {
@@ -105,9 +107,10 @@ static gen6_gtt_pte_t ivb_pte_encode(dma_addr_t addr, · 17 unmodified lines
105#define BYT_PTE_SNOOPED_BY_CPU_CACHES (1 << 2)107#define BYT_PTE_SNOOPED_BY_CPU_CACHES (1 << 2)
106 108
107static gen6_gtt_pte_t byt_pte_encode(dma_addr_t addr,109static gen6_gtt_pte_t byt_pte_encode(dma_addr_t addr,
108 enum i915_cache_level level)110 enum i915_cache_level level,
111 bool valid)
109{112{
110 gen6_gtt_pte_t pte = GEN6_PTE_VALID;113 gen6_gtt_pte_t pte = valid ? GEN6_PTE_VALID : 0;
111 pte |= GEN6_PTE_ADDR_ENCODE(addr);114 pte |= GEN6_PTE_ADDR_ENCODE(addr);
112 115
113 /* Mark the page as writeable. Other platforms don't have a116 /* Mark the page as writeable. Other platforms don't have a
@@ -122,9 +125,10 @@ static gen6_gtt_pte_t byt_pte_encode(dma_addr_t addr, · 8 unmodified lines
122}125}
123 126
124static gen6_gtt_pte_t hsw_pte_encode(dma_addr_t addr,127static gen6_gtt_pte_t hsw_pte_encode(dma_addr_t addr,
125 enum i915_cache_level level)128 enum i915_cache_level level,
129 bool valid)
126{130{
127 gen6_gtt_pte_t pte = GEN6_PTE_VALID;131 gen6_gtt_pte_t pte = valid ? GEN6_PTE_VALID : 0;
128 pte |= HSW_PTE_ADDR_ENCODE(addr);132 pte |= HSW_PTE_ADDR_ENCODE(addr);
129 133
130 if (level != I915_CACHE_NONE)134 if (level != I915_CACHE_NONE)
@@ -134,9 +138,10 @@ static gen6_gtt_pte_t hsw_pte_encode(dma_addr_t addr, · 3 unmodified lines
134}138}
135 139
136static gen6_gtt_pte_t iris_pte_encode(dma_addr_t addr,140static gen6_gtt_pte_t iris_pte_encode(dma_addr_t addr,
137 enum i915_cache_level level)141 enum i915_cache_level level,
142 bool valid)
138{143{
139 gen6_gtt_pte_t pte = GEN6_PTE_VALID;144 gen6_gtt_pte_t pte = valid ? GEN6_PTE_VALID : 0;
140 pte |= HSW_PTE_ADDR_ENCODE(addr);145 pte |= HSW_PTE_ADDR_ENCODE(addr);
141 146
142 switch (level) {147 switch (level) {
@@ -236,7 +241,8 @@ static int gen6_ppgtt_enable(struct drm_device *dev) · 93 unmodified lines
236/* PPGTT support for Sandybdrige/Gen6 and later */241/* PPGTT support for Sandybdrige/Gen6 and later */
237static void gen6_ppgtt_clear_range(struct i915_address_space *vm,242static void gen6_ppgtt_clear_range(struct i915_address_space *vm,
238 unsigned first_entry,243 unsigned first_entry,
239 unsigned num_entries)244 unsigned num_entries,
245 bool use_scratch)
240{246{
241 struct i915_hw_ppgtt *ppgtt =247 struct i915_hw_ppgtt *ppgtt =
242 container_of(vm, struct i915_hw_ppgtt, base);248 container_of(vm, struct i915_hw_ppgtt, base);
@@ -245,7 +251,7 @@ static void gen6_ppgtt_clear_range(struct i915_address_space *vm, · 2 unmodified lines
245 unsigned first_pte = first_entry % I915_PPGTT_PT_ENTRIES;251 unsigned first_pte = first_entry % I915_PPGTT_PT_ENTRIES;
246 unsigned last_pte, i;252 unsigned last_pte, i;
247 253
248 scratch_pte = vm->pte_encode(vm->scratch.addr, I915_CACHE_LLC);254 scratch_pte = vm->pte_encode(vm->scratch.addr, I915_CACHE_LLC, true);
249 255
250 while (num_entries) {256 while (num_entries) {
251 last_pte = first_pte + num_entries;257 last_pte = first_pte + num_entries;
@@ -282,7 +288,7 @@ static void gen6_ppgtt_insert_entries(struct i915_address_space *vm, · 30 unmodified lines
282 dma_addr_t page_addr;288 dma_addr_t page_addr;
283 289
284 page_addr = sg_page_iter_dma_address(&sg_iter);290 page_addr = sg_page_iter_dma_address(&sg_iter);
285 pt_vaddr[act_pte] = vm->pte_encode(page_addr, cache_level);291 pt_vaddr[act_pte] = vm->pte_encode(page_addr, cache_level, true);
286 if (++act_pte == I915_PPGTT_PT_ENTRIES) {292 if (++act_pte == I915_PPGTT_PT_ENTRIES) {
287 kunmap_atomic(pt_vaddr);293 kunmap_atomic(pt_vaddr);
288 act_pt++;294 act_pt++;
@@ -367,7 +373,7 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt) · 78 unmodified lines
367 }373 }
368 374
369 ppgtt->base.clear_range(&ppgtt->base, 0,375 ppgtt->base.clear_range(&ppgtt->base, 0,
370 ppgtt->num_pd_entries * I915_PPGTT_PT_ENTRIES);376 ppgtt->num_pd_entries * I915_PPGTT_PT_ENTRIES, true);
371 377
372 ppgtt->pd_offset = first_pd_entry_in_global_pt * sizeof(gen6_gtt_pte_t);378 ppgtt->pd_offset = first_pd_entry_in_global_pt * sizeof(gen6_gtt_pte_t);
373 379
@@ -444,7 +450,8 @@ void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt, · 70 unmodified lines
444{450{
445 ppgtt->base.clear_range(&ppgtt->base,451 ppgtt->base.clear_range(&ppgtt->base,
446 i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT,452 i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT,
447 obj->base.size >> PAGE_SHIFT);453 obj->base.size >> PAGE_SHIFT,
454 true);
448}455}
449 456
450extern int intel_iommu_gfx_mapped;457extern int intel_iommu_gfx_mapped;
@@ -485,15 +492,65 @@ static void undo_idling(struct drm_i915_private *dev_priv, bool interruptible) · 34 unmodified lines
485 dev_priv->mm.interruptible = interruptible;492 dev_priv->mm.interruptible = interruptible;
486}493}
487 494
495void i915_check_and_clear_faults(struct drm_device *dev)
496{
497 struct drm_i915_private *dev_priv = dev->dev_private;
498 struct intel_ring_buffer *ring;
499 int i;
500
501 if (INTEL_INFO(dev)->gen < 6)
502 return;
503
504 for_each_ring(ring, dev_priv, i) {
505 u32 fault_reg;
506 fault_reg = I915_READ(RING_FAULT_REG(ring));
507 if (fault_reg & RING_FAULT_VALID) {
508 DRM_DEBUG_DRIVER("Unexpected fault\n"
509 "\tAddr: 0x%08lx\\n"
510 "\tAddress space: %s\n"
511 "\tSource ID: %d\n"
512 "\tType: %d\n",
513 fault_reg & PAGE_MASK,
514 fault_reg & RING_FAULT_GTTSEL_MASK ? "GGTT" : "PPGTT",
515 RING_FAULT_SRCID(fault_reg),
516 RING_FAULT_FAULT_TYPE(fault_reg));
517 I915_WRITE(RING_FAULT_REG(ring),
518 fault_reg & ~RING_FAULT_VALID);
519 }
520 }
521 POSTING_READ(RING_FAULT_REG(&dev_priv->ring[RCS]));
522}
523
524void i915_gem_suspend_gtt_mappings(struct drm_device *dev)
525{
526 struct drm_i915_private *dev_priv = dev->dev_private;
527
528 /* Don't bother messing with faults pre GEN6 as we have little
529 * documentation supporting that it's a good idea.
530 */
531 if (INTEL_INFO(dev)->gen < 6)
532 return;
533
534 i915_check_and_clear_faults(dev);
535
536 dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,
537 dev_priv->gtt.base.start / PAGE_SIZE,
538 dev_priv->gtt.base.total / PAGE_SIZE,
539 false);
540}
541
488void i915_gem_restore_gtt_mappings(struct drm_device *dev)542void i915_gem_restore_gtt_mappings(struct drm_device *dev)
489{543{
490 struct drm_i915_private *dev_priv = dev->dev_private;544 struct drm_i915_private *dev_priv = dev->dev_private;
491 struct drm_i915_gem_object *obj;545 struct drm_i915_gem_object *obj;
492 546
547 i915_check_and_clear_faults(dev);
548
493 /* First fill our portion of the GTT with scratch pages */549 /* First fill our portion of the GTT with scratch pages */
494 dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,550 dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,
495 dev_priv->gtt.base.start / PAGE_SIZE,551 dev_priv->gtt.base.start / PAGE_SIZE,
496 dev_priv->gtt.base.total / PAGE_SIZE);552 dev_priv->gtt.base.total / PAGE_SIZE,
553 true);
497 554
498 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {555 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
499 i915_gem_clflush_object(obj, obj->pin_display);556 i915_gem_clflush_object(obj, obj->pin_display);
@@ -536,7 +593,7 @@ static void gen6_ggtt_insert_entries(struct i915_address_space *vm, · 36 unmodified lines
536 593
537 for_each_sg_page(st->sgl, &sg_iter, st->nents, 0) {594 for_each_sg_page(st->sgl, &sg_iter, st->nents, 0) {
538 addr = sg_page_iter_dma_address(&sg_iter);595 addr = sg_page_iter_dma_address(&sg_iter);
539 iowrite32(vm->pte_encode(addr, level), &gtt_entries[i]);596 iowrite32(vm->pte_encode(addr, level, true), &gtt_entries[i]);
540 i++;597 i++;
541 }598 }
542 599
@@ -548,7 +605,7 @@ static void gen6_ggtt_insert_entries(struct i915_address_space *vm, · 5 unmodified lines
548 */605 */
549 if (i != 0)606 if (i != 0)
550 WARN_ON(readl(&gtt_entries[i-1]) !=607 WARN_ON(readl(&gtt_entries[i-1]) !=
551 vm->pte_encode(addr, level));608 vm->pte_encode(addr, level, true));
552 609
553 /* This next bit makes the above posting read even more important. We610 /* This next bit makes the above posting read even more important. We
554 * want to flush the TLBs only after we're certain all the PTE updates611 * want to flush the TLBs only after we're certain all the PTE updates
@@ -560,7 +617,8 @@ static void gen6_ggtt_insert_entries(struct i915_address_space *vm, · 5 unmodified lines
560 617
561static void gen6_ggtt_clear_range(struct i915_address_space *vm,618static void gen6_ggtt_clear_range(struct i915_address_space *vm,
562 unsigned int first_entry,619 unsigned int first_entry,
563 unsigned int num_entries)620 unsigned int num_entries,
621 bool use_scratch)
564{622{
565 struct drm_i915_private *dev_priv = vm->dev->dev_private;623 struct drm_i915_private *dev_priv = vm->dev->dev_private;
566 gen6_gtt_pte_t scratch_pte, __iomem *gtt_base =624 gen6_gtt_pte_t scratch_pte, __iomem *gtt_base =
@@ -573,7 +631,8 @@ static void gen6_ggtt_clear_range(struct i915_address_space *vm, · 6 unmodified lines
573 first_entry, num_entries, max_entries))631 first_entry, num_entries, max_entries))
574 num_entries = max_entries;632 num_entries = max_entries;
575 633
576 scratch_pte = vm->pte_encode(vm->scratch.addr, I915_CACHE_LLC);634 scratch_pte = vm->pte_encode(vm->scratch.addr, I915_CACHE_LLC, use_scratch);
635
577 for (i = 0; i < num_entries; i++)636 for (i = 0; i < num_entries; i++)
578 iowrite32(scratch_pte, &gtt_base[i]);637 iowrite32(scratch_pte, &gtt_base[i]);
579 readl(gtt_base);638 readl(gtt_base);
@@ -594,7 +653,8 @@ static void i915_ggtt_insert_entries(struct i915_address_space *vm, · 14 unmodified lines
594 653
595static void i915_ggtt_clear_range(struct i915_address_space *vm,654static void i915_ggtt_clear_range(struct i915_address_space *vm,
596 unsigned int first_entry,655 unsigned int first_entry,
597 unsigned int num_entries)656 unsigned int num_entries,
657 bool unused)
598{658{
599 intel_gtt_clear_range(first_entry, num_entries);659 intel_gtt_clear_range(first_entry, num_entries);
600}660}
@@ -622,7 +682,8 @@ void i915_gem_gtt_unbind_object(struct drm_i915_gem_object *obj) · 21 unmodified lines
622 682
623 dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,683 dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,
624 entry,684 entry,
625 obj->base.size >> PAGE_SHIFT);685 obj->base.size >> PAGE_SHIFT,
686 true);
626 687
627 obj->has_global_gtt_mapping = 0;688 obj->has_global_gtt_mapping = 0;
628}689}
@@ -709,11 +770,11 @@ void i915_gem_setup_global_gtt(struct drm_device *dev, · 80 unmodified lines
709 const unsigned long count = (hole_end - hole_start) / PAGE_SIZE;770 const unsigned long count = (hole_end - hole_start) / PAGE_SIZE;
710 DRM_DEBUG_KMS("clearing unused GTT space: [%lx, %lx]\n",771 DRM_DEBUG_KMS("clearing unused GTT space: [%lx, %lx]\n",
711 hole_start, hole_end);772 hole_start, hole_end);
712 ggtt_vm->clear_range(ggtt_vm, hole_start / PAGE_SIZE, count);773 ggtt_vm->clear_range(ggtt_vm, hole_start / PAGE_SIZE, count, true);
713 }774 }
714 775
715 /* And finally clear the reserved guard page */776 /* And finally clear the reserved guard page */
716 ggtt_vm->clear_range(ggtt_vm, end / PAGE_SIZE - 1, 1);777 ggtt_vm->clear_range(ggtt_vm, end / PAGE_SIZE - 1, 1, true);
717}778}
718 779
719static bool780static bool
drivers/gpu/drm/i915/i915_reg.h+12−0
@@ -604,6 +604,10 @@ · 603 unmodified lines
604#define ARB_MODE_SWIZZLE_IVB (1<<5)604#define ARB_MODE_SWIZZLE_IVB (1<<5)
605#define RENDER_HWS_PGA_GEN7 (0x04080)605#define RENDER_HWS_PGA_GEN7 (0x04080)
606#define RING_FAULT_REG(ring) (0x4094 + 0x100*(ring)->id)606#define RING_FAULT_REG(ring) (0x4094 + 0x100*(ring)->id)
607#define RING_FAULT_GTTSEL_MASK (1<<11)
608#define RING_FAULT_SRCID(x) ((x >> 3) & 0xff)
609#define RING_FAULT_FAULT_TYPE(x) ((x >> 1) & 0x3)
610#define RING_FAULT_VALID (1<<0)
607#define DONE_REG 0x40b0611#define DONE_REG 0x40b0
608#define BSD_HWS_PGA_GEN7 (0x04180)612#define BSD_HWS_PGA_GEN7 (0x04180)
609#define BLT_HWS_PGA_GEN7 (0x04280)613#define BLT_HWS_PGA_GEN7 (0x04280)
@@ -3881,6 +3885,9 @@ · 3271 unmodified lines
3881#define GEN7_SQ_CHICKEN_MBCUNIT_CONFIG 0x90303885#define GEN7_SQ_CHICKEN_MBCUNIT_CONFIG 0x9030
3882#define GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB (1<<11)3886#define GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB (1<<11)
3883 3887
3888#define HSW_SCRATCH1 0xb038
3889#define HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE (1<<27)
3890
3884#define HSW_FUSE_STRAP 0x420143891#define HSW_FUSE_STRAP 0x42014
3885#define HSW_CDCLK_LIMIT (1 << 24)3892#define HSW_CDCLK_LIMIT (1 << 24)
3886 3893
@@ -4276,7 +4283,9 @@ · 389 unmodified lines
4276#define FDI_RX_CHICKEN(pipe) _PIPE(pipe, _FDI_RXA_CHICKEN, _FDI_RXB_CHICKEN)4283#define FDI_RX_CHICKEN(pipe) _PIPE(pipe, _FDI_RXA_CHICKEN, _FDI_RXB_CHICKEN)
4277 4284
4278#define SOUTH_DSPCLK_GATE_D 0xc20204285#define SOUTH_DSPCLK_GATE_D 0xc2020
4286#define PCH_DPLUNIT_CLOCK_GATE_DISABLE (1<<30)
4279#define PCH_DPLSUNIT_CLOCK_GATE_DISABLE (1<<29)4287#define PCH_DPLSUNIT_CLOCK_GATE_DISABLE (1<<29)
4288#define PCH_CPUNIT_CLOCK_GATE_DISABLE (1<<14)
4280#define PCH_LP_PARTITION_LEVEL_DISABLE (1<<12)4289#define PCH_LP_PARTITION_LEVEL_DISABLE (1<<12)
4281 4290
4282/* CPU: FDI_TX */4291/* CPU: FDI_TX */
@@ -4728,6 +4737,9 @@ · 445 unmodified lines
4728#define GEN7_ROW_CHICKEN2_GT2 0xf4f44737#define GEN7_ROW_CHICKEN2_GT2 0xf4f4
4729#define DOP_CLOCK_GATING_DISABLE (1<<0)4738#define DOP_CLOCK_GATING_DISABLE (1<<0)
4730 4739
4740#define HSW_ROW_CHICKEN3 0xe49c
4741#define HSW_ROW_CHICKEN3_L3_GLOBAL_ATOMICS_DISABLE (1 << 6)
4742
4731#define G4X_AUD_VID_DID (dev_priv->info->display_mmio_offset + 0x62020)4743#define G4X_AUD_VID_DID (dev_priv->info->display_mmio_offset + 0x62020)
4732#define INTEL_AUDIO_DEVCL 0x808629FB4744#define INTEL_AUDIO_DEVCL 0x808629FB
4733#define INTEL_AUDIO_DEVBLC 0x808628014745#define INTEL_AUDIO_DEVBLC 0x80862801
drivers/gpu/drm/i915/intel_display.c+2−36
@@ -3941,8 +3941,6 @@ static void intel_connector_check_state(struct intel_connector *connector) · 3940 unmodified lines
3941 * consider. */3941 * consider. */
3942void intel_connector_dpms(struct drm_connector *connector, int mode)3942void intel_connector_dpms(struct drm_connector *connector, int mode)
3943{3943{
3944 struct intel_encoder *encoder = intel_attached_encoder(connector);
3945
3946 /* All the simple cases only support two dpms states. */3944 /* All the simple cases only support two dpms states. */
3947 if (mode != DRM_MODE_DPMS_ON)3945 if (mode != DRM_MODE_DPMS_ON)
3948 mode = DRM_MODE_DPMS_OFF;3946 mode = DRM_MODE_DPMS_OFF;
@@ -3953,10 +3951,8 @@ void intel_connector_dpms(struct drm_connector *connector, int mode) · 4 unmodified lines
3953 connector->dpms = mode;3951 connector->dpms = mode;
3954 3952
3955 /* Only need to change hw state when actually enabled */3953 /* Only need to change hw state when actually enabled */
3956 if (encoder->base.crtc)3954 if (connector->encoder)
3957 intel_encoder_dpms(encoder, mode);3955 intel_encoder_dpms(to_intel_encoder(connector->encoder), mode);
3958 else
3959 WARN_ON(encoder->connectors_active != false);
3960 3956
3961 intel_modeset_check_state(connector->dev);3957 intel_modeset_check_state(connector->dev);
3962}3958}
@@ -10049,33 +10045,6 @@ static void i915_disable_vga(struct drm_device *dev) · 6086 unmodified lines
10049 POSTING_READ(vga_reg);10045 POSTING_READ(vga_reg);
10050}10046}
10051 10047
10052static void i915_enable_vga_mem(struct drm_device *dev)
10053{
10054 /* Enable VGA memory on Intel HD */
10055 if (HAS_PCH_SPLIT(dev)) {
10056 vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
10057 outb(inb(VGA_MSR_READ) | VGA_MSR_MEM_EN, VGA_MSR_WRITE);
10058 vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
10059 VGA_RSRC_LEGACY_MEM |
10060 VGA_RSRC_NORMAL_IO |
10061 VGA_RSRC_NORMAL_MEM);
10062 vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
10063 }
10064}
10065
10066void i915_disable_vga_mem(struct drm_device *dev)
10067{
10068 /* Disable VGA memory on Intel HD */
10069 if (HAS_PCH_SPLIT(dev)) {
10070 vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
10071 outb(inb(VGA_MSR_READ) & ~VGA_MSR_MEM_EN, VGA_MSR_WRITE);
10072 vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
10073 VGA_RSRC_NORMAL_IO |
10074 VGA_RSRC_NORMAL_MEM);
10075 vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
10076 }
10077}
10078
10079void intel_modeset_init_hw(struct drm_device *dev)10048void intel_modeset_init_hw(struct drm_device *dev)
10080{10049{
10081 intel_init_power_well(dev);10050 intel_init_power_well(dev);
@@ -10354,7 +10323,6 @@ void i915_redisable_vga(struct drm_device *dev) · 272 unmodified lines
10354 if (I915_READ(vga_reg) != VGA_DISP_DISABLE) {10323 if (I915_READ(vga_reg) != VGA_DISP_DISABLE) {
10355 DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n");10324 DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n");
10356 i915_disable_vga(dev);10325 i915_disable_vga(dev);
10357 i915_disable_vga_mem(dev);
10358 }10326 }
10359}10327}
10360 10328
@@ -10568,8 +10536,6 @@ void intel_modeset_cleanup(struct drm_device *dev) · 207 unmodified lines
10568 10536
10569 intel_disable_fbc(dev);10537 intel_disable_fbc(dev);
10570 10538
10571 i915_enable_vga_mem(dev);
10572
10573 intel_disable_gt_powersave(dev);10539 intel_disable_gt_powersave(dev);
10574 10540
10575 ironlake_teardown_rc6(dev);10541 ironlake_teardown_rc6(dev);
drivers/gpu/drm/i915/intel_dp.c+1−1
@@ -1467,7 +1467,7 @@ static void intel_edp_psr_setup(struct intel_dp *intel_dp) · 1466 unmodified lines
1467 1467
1468 /* Avoid continuous PSR exit by masking memup and hpd */1468 /* Avoid continuous PSR exit by masking memup and hpd */
1469 I915_WRITE(EDP_PSR_DEBUG_CTL, EDP_PSR_DEBUG_MASK_MEMUP |1469 I915_WRITE(EDP_PSR_DEBUG_CTL, EDP_PSR_DEBUG_MASK_MEMUP |
1470 EDP_PSR_DEBUG_MASK_HPD);1470 EDP_PSR_DEBUG_MASK_HPD | EDP_PSR_DEBUG_MASK_LPSP);
1471 1471
1472 intel_dp->psr_setup_done = true;1472 intel_dp->psr_setup_done = true;
1473}1473}
drivers/gpu/drm/i915/intel_drv.h+0−1
@@ -793,6 +793,5 @@ extern void hsw_pc8_disable_interrupts(struct drm_device *dev); · 792 unmodified lines
793extern void hsw_pc8_restore_interrupts(struct drm_device *dev);793extern void hsw_pc8_restore_interrupts(struct drm_device *dev);
794extern void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv);794extern void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv);
795extern void intel_aux_display_runtime_put(struct drm_i915_private *dev_priv);795extern void intel_aux_display_runtime_put(struct drm_i915_private *dev_priv);
796extern void i915_disable_vga_mem(struct drm_device *dev);
797 796
798#endif /* __INTEL_DRV_H__ */797#endif /* __INTEL_DRV_H__ */
drivers/gpu/drm/i915/intel_pm.c+10−3
@@ -3864,8 +3864,6 @@ static void valleyview_enable_rps(struct drm_device *dev) · 3863 unmodified lines
3864 dev_priv->rps.rpe_delay),3864 dev_priv->rps.rpe_delay),
3865 dev_priv->rps.rpe_delay);3865 dev_priv->rps.rpe_delay);
3866 3866
3867 INIT_DELAYED_WORK(&dev_priv->rps.vlv_work, vlv_rps_timer_work);
3868
3869 valleyview_set_rps(dev_priv->dev, dev_priv->rps.rpe_delay);3867 valleyview_set_rps(dev_priv->dev, dev_priv->rps.rpe_delay);
3870 3868
3871 gen6_enable_rps_interrupts(dev);3869 gen6_enable_rps_interrupts(dev);
@@ -4761,7 +4759,9 @@ static void cpt_init_clock_gating(struct drm_device *dev) · 889 unmodified lines
4761 * gating for the panel power sequencer or it will fail to4759 * gating for the panel power sequencer or it will fail to
4762 * start up when no ports are active.4760 * start up when no ports are active.
4763 */4761 */
4764 I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);4762 I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE |
4763 PCH_DPLUNIT_CLOCK_GATE_DISABLE |
4764 PCH_CPUNIT_CLOCK_GATE_DISABLE);
4765 I915_WRITE(SOUTH_CHICKEN2, I915_READ(SOUTH_CHICKEN2) |4765 I915_WRITE(SOUTH_CHICKEN2, I915_READ(SOUTH_CHICKEN2) |
4766 DPLS_EDP_PPS_FIX_DIS);4766 DPLS_EDP_PPS_FIX_DIS);
4767 /* The below fixes the weird display corruption, a few pixels shifted4767 /* The below fixes the weird display corruption, a few pixels shifted
@@ -4955,6 +4955,11 @@ static void haswell_init_clock_gating(struct drm_device *dev) · 187 unmodified lines
4955 I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,4955 I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,
4956 GEN7_WA_L3_CHICKEN_MODE);4956 GEN7_WA_L3_CHICKEN_MODE);
4957 4957
4958 /* L3 caching of data atomics doesn't work -- disable it. */
4959 I915_WRITE(HSW_SCRATCH1, HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE);
4960 I915_WRITE(HSW_ROW_CHICKEN3,
4961 _MASKED_BIT_ENABLE(HSW_ROW_CHICKEN3_L3_GLOBAL_ATOMICS_DISABLE));
4962
4958 /* This is required by WaCatErrorRejectionIssue:hsw */4963 /* This is required by WaCatErrorRejectionIssue:hsw */
4959 I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,4964 I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
4960 I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |4965 I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
@@ -5681,5 +5686,7 @@ void intel_pm_init(struct drm_device *dev) · 720 unmodified lines
5681 5686
5682 INIT_DELAYED_WORK(&dev_priv->rps.delayed_resume_work,5687 INIT_DELAYED_WORK(&dev_priv->rps.delayed_resume_work,
5683 intel_gen6_powersave_work);5688 intel_gen6_powersave_work);
5689
5690 INIT_DELAYED_WORK(&dev_priv->rps.vlv_work, vlv_rps_timer_work);
5684}5691}
5685 5692
drivers/gpu/drm/nouveau/core/subdev/mc/base.c+1−1
@@ -113,7 +113,7 @@ nouveau_mc_create_(struct nouveau_object *parent, struct nouveau_object *engine, · 112 unmodified lines
113 pmc->use_msi = false;113 pmc->use_msi = false;
114 break;114 break;
115 default:115 default:
116 pmc->use_msi = nouveau_boolopt(device->cfgopt, "NvMSI", true);116 pmc->use_msi = nouveau_boolopt(device->cfgopt, "NvMSI", false);
117 if (pmc->use_msi) {117 if (pmc->use_msi) {
118 pmc->use_msi = pci_enable_msi(device->pdev) == 0;118 pmc->use_msi = pci_enable_msi(device->pdev) == 0;
119 if (pmc->use_msi) {119 if (pmc->use_msi) {
drivers/gpu/drm/radeon/atombios_encoders.c+36−18
@@ -707,24 +707,37 @@ atombios_get_encoder_mode(struct drm_encoder *encoder) · 706 unmodified lines
707 switch (connector->connector_type) {707 switch (connector->connector_type) {
708 case DRM_MODE_CONNECTOR_DVII:708 case DRM_MODE_CONNECTOR_DVII:
709 case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */709 case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */
710 if ((radeon_connector->audio == RADEON_AUDIO_ENABLE) ||710 if (radeon_audio != 0) {
711 (drm_detect_hdmi_monitor(radeon_connector->edid) &&711 if (radeon_connector->use_digital &&
712 (radeon_connector->audio == RADEON_AUDIO_AUTO)))712 (radeon_connector->audio == RADEON_AUDIO_ENABLE))
713 return ATOM_ENCODER_MODE_HDMI;713 return ATOM_ENCODER_MODE_HDMI;
714 else if (radeon_connector->use_digital)714 else if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
715 (radeon_connector->audio == RADEON_AUDIO_AUTO))
716 return ATOM_ENCODER_MODE_HDMI;
717 else if (radeon_connector->use_digital)
718 return ATOM_ENCODER_MODE_DVI;
719 else
720 return ATOM_ENCODER_MODE_CRT;
721 } else if (radeon_connector->use_digital) {
715 return ATOM_ENCODER_MODE_DVI;722 return ATOM_ENCODER_MODE_DVI;
716 else723 } else {
717 return ATOM_ENCODER_MODE_CRT;724 return ATOM_ENCODER_MODE_CRT;
725 }
718 break;726 break;
719 case DRM_MODE_CONNECTOR_DVID:727 case DRM_MODE_CONNECTOR_DVID:
720 case DRM_MODE_CONNECTOR_HDMIA:728 case DRM_MODE_CONNECTOR_HDMIA:
721 default:729 default:
722 if ((radeon_connector->audio == RADEON_AUDIO_ENABLE) ||730 if (radeon_audio != 0) {
723 (drm_detect_hdmi_monitor(radeon_connector->edid) &&731 if (radeon_connector->audio == RADEON_AUDIO_ENABLE)
724 (radeon_connector->audio == RADEON_AUDIO_AUTO)))732 return ATOM_ENCODER_MODE_HDMI;
725 return ATOM_ENCODER_MODE_HDMI;733 else if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
726 else734 (radeon_connector->audio == RADEON_AUDIO_AUTO))
735 return ATOM_ENCODER_MODE_HDMI;
736 else
737 return ATOM_ENCODER_MODE_DVI;
738 } else {
727 return ATOM_ENCODER_MODE_DVI;739 return ATOM_ENCODER_MODE_DVI;
740 }
728 break;741 break;
729 case DRM_MODE_CONNECTOR_LVDS:742 case DRM_MODE_CONNECTOR_LVDS:
730 return ATOM_ENCODER_MODE_LVDS;743 return ATOM_ENCODER_MODE_LVDS;
@@ -732,14 +745,19 @@ atombios_get_encoder_mode(struct drm_encoder *encoder) · 1 unmodified line
732 case DRM_MODE_CONNECTOR_DisplayPort:745 case DRM_MODE_CONNECTOR_DisplayPort:
733 dig_connector = radeon_connector->con_priv;746 dig_connector = radeon_connector->con_priv;
734 if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||747 if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
735 (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))748 (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
736 return ATOM_ENCODER_MODE_DP;749 return ATOM_ENCODER_MODE_DP;
737 else if ((radeon_connector->audio == RADEON_AUDIO_ENABLE) ||750 } else if (radeon_audio != 0) {
738 (drm_detect_hdmi_monitor(radeon_connector->edid) &&751 if (radeon_connector->audio == RADEON_AUDIO_ENABLE)
739 (radeon_connector->audio == RADEON_AUDIO_AUTO)))752 return ATOM_ENCODER_MODE_HDMI;
740 return ATOM_ENCODER_MODE_HDMI;753 else if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
741 else754 (radeon_connector->audio == RADEON_AUDIO_AUTO))
755 return ATOM_ENCODER_MODE_HDMI;
756 else
757 return ATOM_ENCODER_MODE_DVI;
758 } else {
742 return ATOM_ENCODER_MODE_DVI;759 return ATOM_ENCODER_MODE_DVI;
760 }
743 break;761 break;
744 case DRM_MODE_CONNECTOR_eDP:762 case DRM_MODE_CONNECTOR_eDP:
745 return ATOM_ENCODER_MODE_DP;763 return ATOM_ENCODER_MODE_DP;
@@ -1655,7 +1673,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) · 909 unmodified lines
1655 * does the same thing and more.1673 * does the same thing and more.
1656 */1674 */
1657 if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) &&1675 if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) &&
1658 (rdev->family != CHIP_RS880))1676 (rdev->family != CHIP_RS780) && (rdev->family != CHIP_RS880))
1659 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);1677 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
1660 }1678 }
1661 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {1679 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
drivers/gpu/drm/radeon/btc_dpm.c+3−3
@@ -1930,7 +1930,7 @@ static int btc_set_mc_special_registers(struct radeon_device *rdev, · 1929 unmodified lines
1930 }1930 }
1931 j++;1931 j++;
1932 1932
1933 if (j > SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE)1933 if (j >= SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE)
1934 return -EINVAL;1934 return -EINVAL;
1935 1935
1936 tmp = RREG32(MC_PMG_CMD_MRS);1936 tmp = RREG32(MC_PMG_CMD_MRS);
@@ -1945,7 +1945,7 @@ static int btc_set_mc_special_registers(struct radeon_device *rdev, · 8 unmodified lines
1945 }1945 }
1946 j++;1946 j++;
1947 1947
1948 if (j > SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE)1948 if (j >= SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE)
1949 return -EINVAL;1949 return -EINVAL;
1950 break;1950 break;
1951 case MC_SEQ_RESERVE_M >> 2:1951 case MC_SEQ_RESERVE_M >> 2:
@@ -1959,7 +1959,7 @@ static int btc_set_mc_special_registers(struct radeon_device *rdev, · 7 unmodified lines
1959 }1959 }
1960 j++;1960 j++;
1961 1961
1962 if (j > SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE)1962 if (j >= SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE)
1963 return -EINVAL;1963 return -EINVAL;
1964 break;1964 break;
1965 default:1965 default:
drivers/gpu/drm/radeon/cik.c+10−0
@@ -77,6 +77,8 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev); · 76 unmodified lines
77static void cik_program_aspm(struct radeon_device *rdev);77static void cik_program_aspm(struct radeon_device *rdev);
78static void cik_init_pg(struct radeon_device *rdev);78static void cik_init_pg(struct radeon_device *rdev);
79static void cik_init_cg(struct radeon_device *rdev);79static void cik_init_cg(struct radeon_device *rdev);
80static void cik_fini_pg(struct radeon_device *rdev);
81static void cik_fini_cg(struct radeon_device *rdev);
80static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev,82static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev,
81 bool enable);83 bool enable);
82 84
@@ -1692,6 +1694,7 @@ static int cik_init_microcode(struct radeon_device *rdev) · 1609 unmodified lines
1692 fw_name);1694 fw_name);
1693 release_firmware(rdev->smc_fw);1695 release_firmware(rdev->smc_fw);
1694 rdev->smc_fw = NULL;1696 rdev->smc_fw = NULL;
1697 err = 0;
1695 } else if (rdev->smc_fw->size != smc_req_size) {1698 } else if (rdev->smc_fw->size != smc_req_size) {
1696 printk(KERN_ERR1699 printk(KERN_ERR
1697 "cik_smc: Bogus length %zu in firmware \"%s\"\n",1700 "cik_smc: Bogus length %zu in firmware \"%s\"\n",
@@ -3180,6 +3183,7 @@ int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) · 1482 unmodified lines
3180 r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256);3183 r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256);
3181 if (r) {3184 if (r) {
3182 DRM_ERROR("radeon: failed to get ib (%d).\n", r);3185 DRM_ERROR("radeon: failed to get ib (%d).\n", r);
3186 radeon_scratch_free(rdev, scratch);
3183 return r;3187 return r;
3184 }3188 }
3185 ib.ptr[0] = PACKET3(PACKET3_SET_UCONFIG_REG, 1);3189 ib.ptr[0] = PACKET3(PACKET3_SET_UCONFIG_REG, 1);
@@ -3196,6 +3200,8 @@ int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) · 10 unmodified lines
3196 r = radeon_fence_wait(ib.fence, false);3200 r = radeon_fence_wait(ib.fence, false);
3197 if (r) {3201 if (r) {
3198 DRM_ERROR("radeon: fence wait failed (%d).\n", r);3202 DRM_ERROR("radeon: fence wait failed (%d).\n", r);
3203 radeon_scratch_free(rdev, scratch);
3204 radeon_ib_free(rdev, &ib);
3199 return r;3205 return r;
3200 }3206 }
3201 for (i = 0; i < rdev->usec_timeout; i++) {3207 for (i = 0; i < rdev->usec_timeout; i++) {
@@ -4185,6 +4191,10 @@ static void cik_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask) · 983 unmodified lines
4185 dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",4191 dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
4186 RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));4192 RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
4187 4193
4194 /* disable CG/PG */
4195 cik_fini_pg(rdev);
4196 cik_fini_cg(rdev);
4197
4188 /* stop the rlc */4198 /* stop the rlc */
4189 cik_rlc_stop(rdev);4199 cik_rlc_stop(rdev);
4190 4200
drivers/gpu/drm/radeon/dce6_afmt.c+3−0
@@ -113,6 +113,9 @@ void dce6_afmt_write_speaker_allocation(struct drm_encoder *encoder) · 112 unmodified lines
113 u8 *sadb;113 u8 *sadb;
114 int sad_count;114 int sad_count;
115 115
116 /* XXX: setting this register causes hangs on some asics */
117 return;
118
116 if (!dig->afmt->pin)119 if (!dig->afmt->pin)
117 return;120 return;
118 121
drivers/gpu/drm/radeon/evergreen.c+1−1
@@ -3131,7 +3131,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev) · 3130 unmodified lines
3131 rdev->config.evergreen.sx_max_export_size = 256;3131 rdev->config.evergreen.sx_max_export_size = 256;
3132 rdev->config.evergreen.sx_max_export_pos_size = 64;3132 rdev->config.evergreen.sx_max_export_pos_size = 64;
3133 rdev->config.evergreen.sx_max_export_smx_size = 192;3133 rdev->config.evergreen.sx_max_export_smx_size = 192;
3134 rdev->config.evergreen.max_hw_contexts = 8;3134 rdev->config.evergreen.max_hw_contexts = 4;
3135 rdev->config.evergreen.sq_num_cf_insts = 2;3135 rdev->config.evergreen.sq_num_cf_insts = 2;
3136 3136
3137 rdev->config.evergreen.sc_prim_fifo_size = 0x40;3137 rdev->config.evergreen.sc_prim_fifo_size = 0x40;
drivers/gpu/drm/radeon/evergreen_hdmi.c+4−2
@@ -67,6 +67,9 @@ static void dce4_afmt_write_speaker_allocation(struct drm_encoder *encoder) · 66 unmodified lines
67 u8 *sadb;67 u8 *sadb;
68 int sad_count;68 int sad_count;
69 69
70 /* XXX: setting this register causes hangs on some asics */
71 return;
72
70 list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {73 list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
71 if (connector->encoder == encoder)74 if (connector->encoder == encoder)
72 radeon_connector = to_radeon_connector(connector);75 radeon_connector = to_radeon_connector(connector);
@@ -288,8 +291,7 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode · 215 unmodified lines
288 /* fglrx clears sth in AFMT_AUDIO_PACKET_CONTROL2 here */291 /* fglrx clears sth in AFMT_AUDIO_PACKET_CONTROL2 here */
289 292
290 WREG32(HDMI_ACR_PACKET_CONTROL + offset,293 WREG32(HDMI_ACR_PACKET_CONTROL + offset,
291 HDMI_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */294 HDMI_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
292 HDMI_ACR_SOURCE); /* select SW CTS value */
293 295
294 evergreen_hdmi_update_ACR(encoder, mode->clock);296 evergreen_hdmi_update_ACR(encoder, mode->clock);
295 297
drivers/gpu/drm/radeon/evergreend.h+2−2
@@ -1501,7 +1501,7 @@ · 1500 unmodified lines
1501 * 6. COMMAND [29:22] | BYTE_COUNT [20:0]1501 * 6. COMMAND [29:22] | BYTE_COUNT [20:0]
1502 */1502 */
1503# define PACKET3_CP_DMA_DST_SEL(x) ((x) << 20)1503# define PACKET3_CP_DMA_DST_SEL(x) ((x) << 20)
1504 /* 0 - SRC_ADDR1504 /* 0 - DST_ADDR
1505 * 1 - GDS1505 * 1 - GDS
1506 */1506 */
1507# define PACKET3_CP_DMA_ENGINE(x) ((x) << 27)1507# define PACKET3_CP_DMA_ENGINE(x) ((x) << 27)
@@ -1516,7 +1516,7 @@ · 8 unmodified lines
1516# define PACKET3_CP_DMA_CP_SYNC (1 << 31)1516# define PACKET3_CP_DMA_CP_SYNC (1 << 31)
1517/* COMMAND */1517/* COMMAND */
1518# define PACKET3_CP_DMA_DIS_WC (1 << 21)1518# define PACKET3_CP_DMA_DIS_WC (1 << 21)
1519# define PACKET3_CP_DMA_CMD_SRC_SWAP(x) ((x) << 23)1519# define PACKET3_CP_DMA_CMD_SRC_SWAP(x) ((x) << 22)
1520 /* 0 - none1520 /* 0 - none
1521 * 1 - 8 in 161521 * 1 - 8 in 16
1522 * 2 - 8 in 321522 * 2 - 8 in 32
drivers/gpu/drm/radeon/ni.c+1−0
@@ -804,6 +804,7 @@ int ni_init_microcode(struct radeon_device *rdev) · 803 unmodified lines
804 fw_name);804 fw_name);
805 release_firmware(rdev->smc_fw);805 release_firmware(rdev->smc_fw);
806 rdev->smc_fw = NULL;806 rdev->smc_fw = NULL;
807 err = 0;
807 } else if (rdev->smc_fw->size != smc_req_size) {808 } else if (rdev->smc_fw->size != smc_req_size) {
808 printk(KERN_ERR809 printk(KERN_ERR
809 "ni_mc: Bogus length %zu in firmware \"%s\"\n",810 "ni_mc: Bogus length %zu in firmware \"%s\"\n",
drivers/gpu/drm/radeon/r600.c+1−0
@@ -2302,6 +2302,7 @@ int r600_init_microcode(struct radeon_device *rdev) · 2301 unmodified lines
2302 fw_name);2302 fw_name);
2303 release_firmware(rdev->smc_fw);2303 release_firmware(rdev->smc_fw);
2304 rdev->smc_fw = NULL;2304 rdev->smc_fw = NULL;
2305 err = 0;
2305 } else if (rdev->smc_fw->size != smc_req_size) {2306 } else if (rdev->smc_fw->size != smc_req_size) {
2306 printk(KERN_ERR2307 printk(KERN_ERR
2307 "smc: Bogus length %zu in firmware \"%s\"\n",2308 "smc: Bogus length %zu in firmware \"%s\"\n",
drivers/gpu/drm/radeon/r600_hdmi.c+17−7
@@ -57,15 +57,15 @@ enum r600_hdmi_iec_status_bits { · 56 unmodified lines
57static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {57static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
58 /* 32kHz 44.1kHz 48kHz */58 /* 32kHz 44.1kHz 48kHz */
59 /* Clock N CTS N CTS N CTS */59 /* Clock N CTS N CTS N CTS */
60 { 25174, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */60 { 25175, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
61 { 25200, 4096, 25200, 6272, 28000, 6144, 25200 }, /* 25.20 MHz */61 { 25200, 4096, 25200, 6272, 28000, 6144, 25200 }, /* 25.20 MHz */
62 { 27000, 4096, 27000, 6272, 30000, 6144, 27000 }, /* 27.00 MHz */62 { 27000, 4096, 27000, 6272, 30000, 6144, 27000 }, /* 27.00 MHz */
63 { 27027, 4096, 27027, 6272, 30030, 6144, 27027 }, /* 27.00*1.001 MHz */63 { 27027, 4096, 27027, 6272, 30030, 6144, 27027 }, /* 27.00*1.001 MHz */
64 { 54000, 4096, 54000, 6272, 60000, 6144, 54000 }, /* 54.00 MHz */64 { 54000, 4096, 54000, 6272, 60000, 6144, 54000 }, /* 54.00 MHz */
65 { 54054, 4096, 54054, 6272, 60060, 6144, 54054 }, /* 54.00*1.001 MHz */65 { 54054, 4096, 54054, 6272, 60060, 6144, 54054 }, /* 54.00*1.001 MHz */
66 { 74175, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */66 { 74176, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
67 { 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */67 { 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */
68 { 148351, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */68 { 148352, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
69 { 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */69 { 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */
70 { 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */70 { 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */
71};71};
@@ -75,8 +75,15 @@ static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = { · 3 unmodified lines
75 */75 */
76static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int N, int freq)76static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int N, int freq)
77{77{
78 if (*CTS == 0)78 u64 n;
79 *CTS = clock * N / (128 * freq) * 1000;79 u32 d;
80
81 if (*CTS == 0) {
82 n = (u64)clock * (u64)N * 1000ULL;
83 d = 128 * freq;
84 do_div(n, d);
85 *CTS = n;
86 }
80 DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n",87 DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n",
81 N, *CTS, freq);88 N, *CTS, freq);
82}89}
@@ -302,6 +309,9 @@ static void dce3_2_afmt_write_speaker_allocation(struct drm_encoder *encoder) · 219 unmodified lines
302 u8 *sadb;309 u8 *sadb;
303 int sad_count;310 int sad_count;
304 311
312 /* XXX: setting this register causes hangs on some asics */
313 return;
314
305 list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {315 list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
306 if (connector->encoder == encoder)316 if (connector->encoder == encoder)
307 radeon_connector = to_radeon_connector(connector);317 radeon_connector = to_radeon_connector(connector);
@@ -444,8 +454,8 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod · 136 unmodified lines
444 }454 }
445 455
446 WREG32(HDMI0_ACR_PACKET_CONTROL + offset,456 WREG32(HDMI0_ACR_PACKET_CONTROL + offset,
447 HDMI0_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */457 HDMI0_ACR_SOURCE | /* select SW CTS value - XXX verify that hw CTS works on all families */
448 HDMI0_ACR_SOURCE); /* select SW CTS value */458 HDMI0_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
449 459
450 WREG32(HDMI0_VBI_PACKET_CONTROL + offset,460 WREG32(HDMI0_VBI_PACKET_CONTROL + offset,
451 HDMI0_NULL_SEND | /* send null packets when required */461 HDMI0_NULL_SEND | /* send null packets when required */
drivers/gpu/drm/radeon/r600d.h+1−1
@@ -1523,7 +1523,7 @@ · 1522 unmodified lines
1523 */1523 */
1524# define PACKET3_CP_DMA_CP_SYNC (1 << 31)1524# define PACKET3_CP_DMA_CP_SYNC (1 << 31)
1525/* COMMAND */1525/* COMMAND */
1526# define PACKET3_CP_DMA_CMD_SRC_SWAP(x) ((x) << 23)1526# define PACKET3_CP_DMA_CMD_SRC_SWAP(x) ((x) << 22)
1527 /* 0 - none1527 /* 0 - none
1528 * 1 - 8 in 161528 * 1 - 8 in 16
1529 * 2 - 8 in 321529 * 2 - 8 in 32
drivers/gpu/drm/radeon/radeon_connectors.c+21−12
@@ -1658,9 +1658,12 @@ radeon_add_atom_connector(struct drm_device *dev, · 1657 unmodified lines
1658 drm_object_attach_property(&radeon_connector->base.base,1658 drm_object_attach_property(&radeon_connector->base.base,
1659 rdev->mode_info.underscan_vborder_property,1659 rdev->mode_info.underscan_vborder_property,
1660 0);1660 0);
1661 drm_object_attach_property(&radeon_connector->base.base,1661 if (radeon_audio != 0)
1662 rdev->mode_info.audio_property,1662 drm_object_attach_property(&radeon_connector->base.base,
1663 RADEON_AUDIO_DISABLE);1663 rdev->mode_info.audio_property,
1664 (radeon_audio == 1) ?
1665 RADEON_AUDIO_AUTO :
1666 RADEON_AUDIO_DISABLE);
1664 subpixel_order = SubPixelHorizontalRGB;1667 subpixel_order = SubPixelHorizontalRGB;
1665 connector->interlace_allowed = true;1668 connector->interlace_allowed = true;
1666 if (connector_type == DRM_MODE_CONNECTOR_HDMIB)1669 if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
@@ -1754,10 +1757,12 @@ radeon_add_atom_connector(struct drm_device *dev, · 87 unmodified lines
1754 rdev->mode_info.underscan_vborder_property,1757 rdev->mode_info.underscan_vborder_property,
1755 0);1758 0);
1756 }1759 }
1757 if (ASIC_IS_DCE2(rdev)) {1760 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
1758 drm_object_attach_property(&radeon_connector->base.base,1761 drm_object_attach_property(&radeon_connector->base.base,
1759 rdev->mode_info.audio_property,1762 rdev->mode_info.audio_property,
1760 RADEON_AUDIO_DISABLE);1763 (radeon_audio == 1) ?
1764 RADEON_AUDIO_AUTO :
1765 RADEON_AUDIO_DISABLE);
1761 }1766 }
1762 if (connector_type == DRM_MODE_CONNECTOR_DVII) {1767 if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1763 radeon_connector->dac_load_detect = true;1768 radeon_connector->dac_load_detect = true;
@@ -1799,10 +1804,12 @@ radeon_add_atom_connector(struct drm_device *dev, · 35 unmodified lines
1799 rdev->mode_info.underscan_vborder_property,1804 rdev->mode_info.underscan_vborder_property,
1800 0);1805 0);
1801 }1806 }
1802 if (ASIC_IS_DCE2(rdev)) {1807 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
1803 drm_object_attach_property(&radeon_connector->base.base,1808 drm_object_attach_property(&radeon_connector->base.base,
1804 rdev->mode_info.audio_property,1809 rdev->mode_info.audio_property,
1805 RADEON_AUDIO_DISABLE);1810 (radeon_audio == 1) ?
1811 RADEON_AUDIO_AUTO :
1812 RADEON_AUDIO_DISABLE);
1806 }1813 }
1807 subpixel_order = SubPixelHorizontalRGB;1814 subpixel_order = SubPixelHorizontalRGB;
1808 connector->interlace_allowed = true;1815 connector->interlace_allowed = true;
@@ -1843,10 +1850,12 @@ radeon_add_atom_connector(struct drm_device *dev, · 34 unmodified lines
1843 rdev->mode_info.underscan_vborder_property,1850 rdev->mode_info.underscan_vborder_property,
1844 0);1851 0);
1845 }1852 }
1846 if (ASIC_IS_DCE2(rdev)) {1853 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
1847 drm_object_attach_property(&radeon_connector->base.base,1854 drm_object_attach_property(&radeon_connector->base.base,
1848 rdev->mode_info.audio_property,1855 rdev->mode_info.audio_property,
1849 RADEON_AUDIO_DISABLE);1856 (radeon_audio == 1) ?
1857 RADEON_AUDIO_AUTO :
1858 RADEON_AUDIO_DISABLE);
1850 }1859 }
1851 connector->interlace_allowed = true;1860 connector->interlace_allowed = true;
1852 /* in theory with a DP to VGA converter... */1861 /* in theory with a DP to VGA converter... */
drivers/gpu/drm/radeon/radeon_cs.c+1−2
@@ -85,9 +85,8 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p) · 84 unmodified lines
85 VRAM, also but everything into VRAM on AGP cards to avoid85 VRAM, also but everything into VRAM on AGP cards to avoid
86 image corruptions */86 image corruptions */
87 if (p->ring == R600_RING_TYPE_UVD_INDEX &&87 if (p->ring == R600_RING_TYPE_UVD_INDEX &&
88 p->rdev->family < CHIP_PALM &&
89 (i == 0 || drm_pci_device_is_agp(p->rdev->ddev))) {88 (i == 0 || drm_pci_device_is_agp(p->rdev->ddev))) {
90 89 /* TODO: is this still needed for NI+ ? */
91 p->relocs[i].lobj.domain =90 p->relocs[i].lobj.domain =
92 RADEON_GEM_DOMAIN_VRAM;91 RADEON_GEM_DOMAIN_VRAM;
93 92
drivers/gpu/drm/radeon/radeon_drv.c+2−2
@@ -153,7 +153,7 @@ int radeon_benchmarking = 0; · 152 unmodified lines
153int radeon_testing = 0;153int radeon_testing = 0;
154int radeon_connector_table = 0;154int radeon_connector_table = 0;
155int radeon_tv = 1;155int radeon_tv = 1;
156int radeon_audio = 1;156int radeon_audio = -1;
157int radeon_disp_priority = 0;157int radeon_disp_priority = 0;
158int radeon_hw_i2c = 0;158int radeon_hw_i2c = 0;
159int radeon_pcie_gen2 = -1;159int radeon_pcie_gen2 = -1;
@@ -196,7 +196,7 @@ module_param_named(connector_table, radeon_connector_table, int, 0444); · 36 unmodified lines
196MODULE_PARM_DESC(tv, "TV enable (0 = disable)");196MODULE_PARM_DESC(tv, "TV enable (0 = disable)");
197module_param_named(tv, radeon_tv, int, 0444);197module_param_named(tv, radeon_tv, int, 0444);
198 198
199MODULE_PARM_DESC(audio, "Audio enable (1 = enable)");199MODULE_PARM_DESC(audio, "Audio enable (-1 = auto, 0 = disable, 1 = enable)");
200module_param_named(audio, radeon_audio, int, 0444);200module_param_named(audio, radeon_audio, int, 0444);
201 201
202MODULE_PARM_DESC(disp_priority, "Display Priority (0 = auto, 1 = normal, 2 = high)");202MODULE_PARM_DESC(disp_priority, "Display Priority (0 = auto, 1 = normal, 2 = high)");
drivers/gpu/drm/radeon/radeon_pm.c+3−0
@@ -945,6 +945,8 @@ void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable) · 944 unmodified lines
945 if (enable) {945 if (enable) {
946 mutex_lock(&rdev->pm.mutex);946 mutex_lock(&rdev->pm.mutex);
947 rdev->pm.dpm.uvd_active = true;947 rdev->pm.dpm.uvd_active = true;
948 /* disable this for now */
949#if 0
948 if ((rdev->pm.dpm.sd == 1) && (rdev->pm.dpm.hd == 0))950 if ((rdev->pm.dpm.sd == 1) && (rdev->pm.dpm.hd == 0))
949 dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_SD;951 dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_SD;
950 else if ((rdev->pm.dpm.sd == 2) && (rdev->pm.dpm.hd == 0))952 else if ((rdev->pm.dpm.sd == 2) && (rdev->pm.dpm.hd == 0))
@@ -954,6 +956,7 @@ void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable) · 3 unmodified lines
954 else if ((rdev->pm.dpm.sd == 0) && (rdev->pm.dpm.hd == 2))956 else if ((rdev->pm.dpm.sd == 0) && (rdev->pm.dpm.hd == 2))
955 dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_HD2;957 dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_HD2;
956 else958 else
959#endif
957 dpm_state = POWER_STATE_TYPE_INTERNAL_UVD;960 dpm_state = POWER_STATE_TYPE_INTERNAL_UVD;
958 rdev->pm.dpm.state = dpm_state;961 rdev->pm.dpm.state = dpm_state;
959 mutex_unlock(&rdev->pm.mutex);962 mutex_unlock(&rdev->pm.mutex);
drivers/gpu/drm/radeon/radeon_test.c+2−2
@@ -36,8 +36,8 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag) · 35 unmodified lines
36 struct radeon_bo *vram_obj = NULL;36 struct radeon_bo *vram_obj = NULL;
37 struct radeon_bo **gtt_obj = NULL;37 struct radeon_bo **gtt_obj = NULL;
38 uint64_t gtt_addr, vram_addr;38 uint64_t gtt_addr, vram_addr;
39 unsigned i, n, size;39 unsigned n, size;
40 int r, ring;40 int i, r, ring;
41 41
42 switch (flag) {42 switch (flag) {
43 case RADEON_TEST_COPY_DMA:43 case RADEON_TEST_COPY_DMA:
drivers/gpu/drm/radeon/radeon_uvd.c+4−2
@@ -476,7 +476,8 @@ static int radeon_uvd_cs_reloc(struct radeon_cs_parser *p, · 475 unmodified lines
476 return -EINVAL;476 return -EINVAL;
477 }477 }
478 478
479 if (p->rdev->family < CHIP_PALM && (cmd == 0 || cmd == 0x3) &&479 /* TODO: is this still necessary on NI+ ? */
480 if ((cmd == 0 || cmd == 0x3) &&
480 (start >> 28) != (p->rdev->uvd.gpu_addr >> 28)) {481 (start >> 28) != (p->rdev->uvd.gpu_addr >> 28)) {
481 DRM_ERROR("msg/fb buffer %LX-%LX out of 256MB segment!\n",482 DRM_ERROR("msg/fb buffer %LX-%LX out of 256MB segment!\n",
482 start, end);483 start, end);
@@ -798,7 +799,8 @@ void radeon_uvd_note_usage(struct radeon_device *rdev) · 315 unmodified lines
798 (rdev->pm.dpm.hd != hd)) {799 (rdev->pm.dpm.hd != hd)) {
799 rdev->pm.dpm.sd = sd;800 rdev->pm.dpm.sd = sd;
800 rdev->pm.dpm.hd = hd;801 rdev->pm.dpm.hd = hd;
801 streams_changed = true;802 /* disable this for now */
803 /*streams_changed = true;*/
802 }804 }
803 }805 }
804 806
drivers/gpu/drm/radeon/si.c+11−0
@@ -85,6 +85,9 @@ extern void si_dma_vm_set_page(struct radeon_device *rdev, · 84 unmodified lines
85 uint32_t incr, uint32_t flags);85 uint32_t incr, uint32_t flags);
86static void si_enable_gui_idle_interrupt(struct radeon_device *rdev,86static void si_enable_gui_idle_interrupt(struct radeon_device *rdev,
87 bool enable);87 bool enable);
88static void si_fini_pg(struct radeon_device *rdev);
89static void si_fini_cg(struct radeon_device *rdev);
90static void si_rlc_stop(struct radeon_device *rdev);
88 91
89static const u32 verde_rlc_save_restore_register_list[] =92static const u32 verde_rlc_save_restore_register_list[] =
90{93{
@@ -1678,6 +1681,7 @@ static int si_init_microcode(struct radeon_device *rdev) · 1587 unmodified lines
1678 fw_name);1681 fw_name);
1679 release_firmware(rdev->smc_fw);1682 release_firmware(rdev->smc_fw);
1680 rdev->smc_fw = NULL;1683 rdev->smc_fw = NULL;
1684 err = 0;
1681 } else if (rdev->smc_fw->size != smc_req_size) {1685 } else if (rdev->smc_fw->size != smc_req_size) {
1682 printk(KERN_ERR1686 printk(KERN_ERR
1683 "si_smc: Bogus length %zu in firmware \"%s\"\n",1687 "si_smc: Bogus length %zu in firmware \"%s\"\n",
@@ -3608,6 +3612,13 @@ static void si_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask) · 1924 unmodified lines
3608 dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",3612 dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
3609 RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));3613 RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
3610 3614
3615 /* disable PG/CG */
3616 si_fini_pg(rdev);
3617 si_fini_cg(rdev);
3618
3619 /* stop the rlc */
3620 si_rlc_stop(rdev);
3621
3611 /* Disable CP parsing/prefetching */3622 /* Disable CP parsing/prefetching */
3612 WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT);3623 WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT);
3613 3624
drivers/gpu/drm/radeon/si_dpm.c+3−3
@@ -5208,7 +5208,7 @@ static int si_set_mc_special_registers(struct radeon_device *rdev, · 5207 unmodified lines
5208 table->mc_reg_table_entry[k].mc_data[j] |= 0x100;5208 table->mc_reg_table_entry[k].mc_data[j] |= 0x100;
5209 }5209 }
5210 j++;5210 j++;
5211 if (j > SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE)5211 if (j >= SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE)
5212 return -EINVAL;5212 return -EINVAL;
5213 5213
5214 if (!pi->mem_gddr5) {5214 if (!pi->mem_gddr5) {
@@ -5218,7 +5218,7 @@ static int si_set_mc_special_registers(struct radeon_device *rdev, · 3 unmodified lines
5218 table->mc_reg_table_entry[k].mc_data[j] =5218 table->mc_reg_table_entry[k].mc_data[j] =
5219 (table->mc_reg_table_entry[k].mc_data[i] & 0xffff0000) >> 16;5219 (table->mc_reg_table_entry[k].mc_data[i] & 0xffff0000) >> 16;
5220 j++;5220 j++;
5221 if (j > SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE)5221 if (j >= SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE)
5222 return -EINVAL;5222 return -EINVAL;
5223 }5223 }
5224 break;5224 break;
@@ -5231,7 +5231,7 @@ static int si_set_mc_special_registers(struct radeon_device *rdev, · 6 unmodified lines
5231 (temp_reg & 0xffff0000) |5231 (temp_reg & 0xffff0000) |
5232 (table->mc_reg_table_entry[k].mc_data[i] & 0x0000ffff);5232 (table->mc_reg_table_entry[k].mc_data[i] & 0x0000ffff);
5233 j++;5233 j++;
5234 if (j > SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE)5234 if (j >= SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE)
5235 return -EINVAL;5235 return -EINVAL;
5236 break;5236 break;
5237 default:5237 default:
drivers/gpu/drm/radeon/sid.h+2−2
@@ -1553,7 +1553,7 @@ · 1552 unmodified lines
1553 * 6. COMMAND [30:21] | BYTE_COUNT [20:0]1553 * 6. COMMAND [30:21] | BYTE_COUNT [20:0]
1554 */1554 */
1555# define PACKET3_CP_DMA_DST_SEL(x) ((x) << 20)1555# define PACKET3_CP_DMA_DST_SEL(x) ((x) << 20)
1556 /* 0 - SRC_ADDR1556 /* 0 - DST_ADDR
1557 * 1 - GDS1557 * 1 - GDS
1558 */1558 */
1559# define PACKET3_CP_DMA_ENGINE(x) ((x) << 27)1559# define PACKET3_CP_DMA_ENGINE(x) ((x) << 27)
@@ -1568,7 +1568,7 @@ · 8 unmodified lines
1568# define PACKET3_CP_DMA_CP_SYNC (1 << 31)1568# define PACKET3_CP_DMA_CP_SYNC (1 << 31)
1569/* COMMAND */1569/* COMMAND */
1570# define PACKET3_CP_DMA_DIS_WC (1 << 21)1570# define PACKET3_CP_DMA_DIS_WC (1 << 21)
1571# define PACKET3_CP_DMA_CMD_SRC_SWAP(x) ((x) << 23)1571# define PACKET3_CP_DMA_CMD_SRC_SWAP(x) ((x) << 22)
1572 /* 0 - none1572 /* 0 - none
1573 * 1 - 8 in 161573 * 1 - 8 in 16
1574 * 2 - 8 in 321574 * 2 - 8 in 32
drivers/gpu/drm/radeon/trinity_dpm.c+1−1
@@ -1868,7 +1868,7 @@ int trinity_dpm_init(struct radeon_device *rdev) · 1867 unmodified lines
1868 for (i = 0; i < SUMO_MAX_HARDWARE_POWERLEVELS; i++)1868 for (i = 0; i < SUMO_MAX_HARDWARE_POWERLEVELS; i++)
1869 pi->at[i] = TRINITY_AT_DFLT;1869 pi->at[i] = TRINITY_AT_DFLT;
1870 1870
1871 pi->enable_bapm = true;1871 pi->enable_bapm = false;
1872 pi->enable_nbps_policy = true;1872 pi->enable_nbps_policy = true;
1873 pi->enable_sclk_ds = true;1873 pi->enable_sclk_ds = true;
1874 pi->enable_gfx_power_gating = true;1874 pi->enable_gfx_power_gating = true;
drivers/gpu/drm/radeon/uvd_v1_0.c+2−2
@@ -212,8 +212,8 @@ int uvd_v1_0_start(struct radeon_device *rdev) · 211 unmodified lines
212 /* enable VCPU clock */212 /* enable VCPU clock */
213 WREG32(UVD_VCPU_CNTL, 1 << 9);213 WREG32(UVD_VCPU_CNTL, 1 << 9);
214 214
215 /* enable UMC and NC0 */215 /* enable UMC */
216 WREG32_P(UVD_LMI_CTRL2, 1 << 13, ~((1 << 8) | (1 << 13)));216 WREG32_P(UVD_LMI_CTRL2, 0, ~(1 << 8));
217 217
218 /* boot up the VCPU */218 /* boot up the VCPU */
219 WREG32(UVD_SOFT_RESET, 0);219 WREG32(UVD_SOFT_RESET, 0);
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c+12−5
@@ -740,9 +740,17 @@ static void vmw_postclose(struct drm_device *dev, · 739 unmodified lines
740 struct vmw_fpriv *vmw_fp;740 struct vmw_fpriv *vmw_fp;
741 741
742 vmw_fp = vmw_fpriv(file_priv);742 vmw_fp = vmw_fpriv(file_priv);
743 ttm_object_file_release(&vmw_fp->tfile);743
744 if (vmw_fp->locked_master)744 if (vmw_fp->locked_master) {
745 struct vmw_master *vmaster =
746 vmw_master(vmw_fp->locked_master);
747
748 ttm_lock_set_kill(&vmaster->lock, true, SIGTERM);
749 ttm_vt_unlock(&vmaster->lock);
745 drm_master_put(&vmw_fp->locked_master);750 drm_master_put(&vmw_fp->locked_master);
751 }
752
753 ttm_object_file_release(&vmw_fp->tfile);
746 kfree(vmw_fp);754 kfree(vmw_fp);
747}755}
748 756
@@ -925,14 +933,13 @@ static void vmw_master_drop(struct drm_device *dev, · 176 unmodified lines
925 933
926 vmw_fp->locked_master = drm_master_get(file_priv->master);934 vmw_fp->locked_master = drm_master_get(file_priv->master);
927 ret = ttm_vt_lock(&vmaster->lock, false, vmw_fp->tfile);935 ret = ttm_vt_lock(&vmaster->lock, false, vmw_fp->tfile);
928 vmw_execbuf_release_pinned_bo(dev_priv);
929
930 if (unlikely((ret != 0))) {936 if (unlikely((ret != 0))) {
931 DRM_ERROR("Unable to lock TTM at VT switch.\n");937 DRM_ERROR("Unable to lock TTM at VT switch.\n");
932 drm_master_put(&vmw_fp->locked_master);938 drm_master_put(&vmw_fp->locked_master);
933 }939 }
934 940
935 ttm_lock_set_kill(&vmaster->lock, true, SIGTERM);941 ttm_lock_set_kill(&vmaster->lock, false, SIGTERM);
942 vmw_execbuf_release_pinned_bo(dev_priv);
936 943
937 if (!dev_priv->enable_fb) {944 if (!dev_priv->enable_fb) {
938 ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM);945 ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM);
drivers/gpu/drm/vmwgfx/vmwgfx_resource.c+1−1
@@ -970,7 +970,7 @@ void vmw_resource_unreserve(struct vmw_resource *res, · 969 unmodified lines
970 if (new_backup)970 if (new_backup)
971 res->backup_offset = new_backup_offset;971 res->backup_offset = new_backup_offset;
972 972
973 if (!res->func->may_evict)973 if (!res->func->may_evict || res->id == -1)
974 return;974 return;
975 975
976 write_lock(&dev_priv->resource_lock);976 write_lock(&dev_priv->resource_lock);
drivers/hid/Kconfig+1−0
@@ -241,6 +241,7 @@ config HID_HOLTEK · 240 unmodified lines
241 - Sharkoon Drakonia / Perixx MX-2000 gaming mice241 - Sharkoon Drakonia / Perixx MX-2000 gaming mice
242 - Tracer Sniper TRM-503 / NOVA Gaming Slider X200 /242 - Tracer Sniper TRM-503 / NOVA Gaming Slider X200 /
243 Zalman ZM-GM1243 Zalman ZM-GM1
244 - SHARKOON DarkGlider Gaming mouse
244 245
245config HOLTEK_FF246config HOLTEK_FF
246 bool "Holtek On Line Grip force feedback support"247 bool "Holtek On Line Grip force feedback support"
drivers/hid/hid-core.c+8−5
@@ -319,7 +319,7 @@ static s32 item_sdata(struct hid_item *item) · 318 unmodified lines
319 319
320static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)320static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
321{321{
322 __u32 raw_value;322 __s32 raw_value;
323 switch (item->tag) {323 switch (item->tag) {
324 case HID_GLOBAL_ITEM_TAG_PUSH:324 case HID_GLOBAL_ITEM_TAG_PUSH:
325 325
@@ -370,10 +370,11 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item) · 44 unmodified lines
370 return 0;370 return 0;
371 371
372 case HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT:372 case HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT:
373 /* Units exponent negative numbers are given through a373 /* Many devices provide unit exponent as a two's complement
374 * two's complement.374 * nibble due to the common misunderstanding of HID
375 * See "6.2.2.7 Global Items" for more information. */375 * specification 1.11, 6.2.2.7 Global Items. Attempt to handle
376 raw_value = item_udata(item);376 * both this and the standard encoding. */
377 raw_value = item_sdata(item);
377 if (!(raw_value & 0xfffffff0))378 if (!(raw_value & 0xfffffff0))
378 parser->global.unit_exponent = hid_snto32(raw_value, 4);379 parser->global.unit_exponent = hid_snto32(raw_value, 4);
379 else380 else
@@ -1715,6 +1716,7 @@ static const struct hid_device_id hid_have_special_driver[] = { · 1335 unmodified lines
1715 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD) },1716 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD) },
1716 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A) },1717 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A) },
1717 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067) },1718 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067) },
1719 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
1718 { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_580) },1720 { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_580) },
1719 { HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },1721 { HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },
1720 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },1722 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },
@@ -1869,6 +1871,7 @@ static const struct hid_device_id hid_have_special_driver[] = { · 148 unmodified lines
1869 1871
1870 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },1872 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
1871 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },1873 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
1874 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO2, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
1872 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) },1875 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
1873 { }1876 { }
1874};1877};
drivers/hid/hid-holtek-mouse.c+4−0
@@ -27,6 +27,7 @@ · 26 unmodified lines
27 * - USB ID 04d9:a067, sold as Sharkoon Drakonia and Perixx MX-200027 * - USB ID 04d9:a067, sold as Sharkoon Drakonia and Perixx MX-2000
28 * - USB ID 04d9:a04a, sold as Tracer Sniper TRM-503, NOVA Gaming Slider X20028 * - USB ID 04d9:a04a, sold as Tracer Sniper TRM-503, NOVA Gaming Slider X200
29 * and Zalman ZM-GM129 * and Zalman ZM-GM1
30 * - USB ID 04d9:a081, sold as SHARKOON DarkGlider Gaming mouse
30 */31 */
31 32
32static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc,33static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc,
@@ -46,6 +47,7 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc, · 13 unmodified lines
46 }47 }
47 break;48 break;
48 case USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A:49 case USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A:
50 case USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081:
49 if (*rsize >= 113 && rdesc[106] == 0xff && rdesc[107] == 0x7f51 if (*rsize >= 113 && rdesc[106] == 0xff && rdesc[107] == 0x7f
50 && rdesc[111] == 0xff && rdesc[112] == 0x7f) {52 && rdesc[111] == 0xff && rdesc[112] == 0x7f) {
51 hid_info(hdev, "Fixing up report descriptor\n");53 hid_info(hdev, "Fixing up report descriptor\n");
@@ -63,6 +65,8 @@ static const struct hid_device_id holtek_mouse_devices[] = { · 11 unmodified lines
63 USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067) },65 USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067) },
64 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT,66 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT,
65 USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A) },67 USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A) },
68 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT,
69 USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
66 { }70 { }
67};71};
68MODULE_DEVICE_TABLE(hid, holtek_mouse_devices);72MODULE_DEVICE_TABLE(hid, holtek_mouse_devices);
drivers/hid/hid-ids.h+7−0
@@ -450,6 +450,7 @@ · 449 unmodified lines
450#define USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD 0xa055450#define USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD 0xa055
451#define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067 0xa067451#define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067 0xa067
452#define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A 0xa04a452#define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A 0xa04a
453#define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081 0xa081
453 454
454#define USB_VENDOR_ID_IMATION 0x0718455#define USB_VENDOR_ID_IMATION 0x0718
455#define USB_DEVICE_ID_DISC_STAKKA 0xd000456#define USB_DEVICE_ID_DISC_STAKKA 0xd000
@@ -632,6 +633,7 @@ · 176 unmodified lines
632#define USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN 0x0003633#define USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN 0x0003
633 634
634#define USB_VENDOR_ID_NINTENDO 0x057e635#define USB_VENDOR_ID_NINTENDO 0x057e
636#define USB_VENDOR_ID_NINTENDO2 0x054c
635#define USB_DEVICE_ID_NINTENDO_WIIMOTE 0x0306637#define USB_DEVICE_ID_NINTENDO_WIIMOTE 0x0306
636#define USB_DEVICE_ID_NINTENDO_WIIMOTE2 0x0330638#define USB_DEVICE_ID_NINTENDO_WIIMOTE2 0x0330
637 639
@@ -791,6 +793,8 @@ · 153 unmodified lines
791#define USB_DEVICE_ID_SYNAPTICS_COMP_TP 0x0009793#define USB_DEVICE_ID_SYNAPTICS_COMP_TP 0x0009
792#define USB_DEVICE_ID_SYNAPTICS_WTP 0x0010794#define USB_DEVICE_ID_SYNAPTICS_WTP 0x0010
793#define USB_DEVICE_ID_SYNAPTICS_DPAD 0x0013795#define USB_DEVICE_ID_SYNAPTICS_DPAD 0x0013
796#define USB_DEVICE_ID_SYNAPTICS_LTS1 0x0af8
797#define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10
794 798
795#define USB_VENDOR_ID_THINGM 0x27b8799#define USB_VENDOR_ID_THINGM 0x27b8
796#define USB_DEVICE_ID_BLINK1 0x01ed800#define USB_DEVICE_ID_BLINK1 0x01ed
@@ -918,4 +922,7 @@ · 121 unmodified lines
918#define USB_VENDOR_ID_PRIMAX 0x0461922#define USB_VENDOR_ID_PRIMAX 0x0461
919#define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05923#define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05
920 924
925#define USB_VENDOR_ID_SIS 0x0457
926#define USB_DEVICE_ID_SIS_TS 0x1013
927
921#endif928#endif
drivers/hid/hid-input.c+4−9
@@ -192,6 +192,7 @@ static int hidinput_setkeycode(struct input_dev *dev, · 191 unmodified lines
192 return -EINVAL;192 return -EINVAL;
193}193}
194 194
195
195/**196/**
196 * hidinput_calc_abs_res - calculate an absolute axis resolution197 * hidinput_calc_abs_res - calculate an absolute axis resolution
197 * @field: the HID report field to calculate resolution for198 * @field: the HID report field to calculate resolution for
@@ -234,23 +235,17 @@ __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code) · 36 unmodified lines
234 case ABS_MT_TOOL_Y:235 case ABS_MT_TOOL_Y:
235 case ABS_MT_TOUCH_MAJOR:236 case ABS_MT_TOUCH_MAJOR:
236 case ABS_MT_TOUCH_MINOR:237 case ABS_MT_TOUCH_MINOR:
237 if (field->unit & 0xffffff00) /* Not a length */238 if (field->unit == 0x11) { /* If centimeters */
238 return 0;
239 unit_exponent += hid_snto32(field->unit >> 4, 4) - 1;
240 switch (field->unit & 0xf) {
241 case 0x1: /* If centimeters */
242 /* Convert to millimeters */239 /* Convert to millimeters */
243 unit_exponent += 1;240 unit_exponent += 1;
244 break;241 } else if (field->unit == 0x13) { /* If inches */
245 case 0x3: /* If inches */
246 /* Convert to millimeters */242 /* Convert to millimeters */
247 prev = physical_extents;243 prev = physical_extents;
248 physical_extents *= 254;244 physical_extents *= 254;
249 if (physical_extents < prev)245 if (physical_extents < prev)
250 return 0;246 return 0;
251 unit_exponent -= 1;247 unit_exponent -= 1;
252 break;248 } else {
253 default:
254 return 0;249 return 0;
255 }250 }
256 break;251 break;
drivers/hid/hid-roccat-kone.c+1−1
@@ -382,7 +382,7 @@ static ssize_t kone_sysfs_write_profilex(struct file *fp, · 381 unmodified lines
382}382}
383#define PROFILE_ATTR(number) \383#define PROFILE_ATTR(number) \
384static struct bin_attribute bin_attr_profile##number = { \384static struct bin_attribute bin_attr_profile##number = { \
385 .attr = { .name = "profile##number", .mode = 0660 }, \385 .attr = { .name = "profile" #number, .mode = 0660 }, \
386 .size = sizeof(struct kone_profile), \386 .size = sizeof(struct kone_profile), \
387 .read = kone_sysfs_read_profilex, \387 .read = kone_sysfs_read_profilex, \
388 .write = kone_sysfs_write_profilex, \388 .write = kone_sysfs_write_profilex, \
drivers/hid/hid-roccat-koneplus.c+2−2
@@ -229,13 +229,13 @@ static ssize_t koneplus_sysfs_read_profilex_buttons(struct file *fp, · 228 unmodified lines
229 229
230#define PROFILE_ATTR(number) \230#define PROFILE_ATTR(number) \
231static struct bin_attribute bin_attr_profile##number##_settings = { \231static struct bin_attribute bin_attr_profile##number##_settings = { \
232 .attr = { .name = "profile##number##_settings", .mode = 0440 }, \232 .attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
233 .size = KONEPLUS_SIZE_PROFILE_SETTINGS, \233 .size = KONEPLUS_SIZE_PROFILE_SETTINGS, \
234 .read = koneplus_sysfs_read_profilex_settings, \234 .read = koneplus_sysfs_read_profilex_settings, \
235 .private = &profile_numbers[number-1], \235 .private = &profile_numbers[number-1], \
236}; \236}; \
237static struct bin_attribute bin_attr_profile##number##_buttons = { \237static struct bin_attribute bin_attr_profile##number##_buttons = { \
238 .attr = { .name = "profile##number##_buttons", .mode = 0440 }, \238 .attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
239 .size = KONEPLUS_SIZE_PROFILE_BUTTONS, \239 .size = KONEPLUS_SIZE_PROFILE_BUTTONS, \
240 .read = koneplus_sysfs_read_profilex_buttons, \240 .read = koneplus_sysfs_read_profilex_buttons, \
241 .private = &profile_numbers[number-1], \241 .private = &profile_numbers[number-1], \
drivers/hid/hid-roccat-kovaplus.c+2−2
@@ -257,13 +257,13 @@ static ssize_t kovaplus_sysfs_read_profilex_buttons(struct file *fp, · 256 unmodified lines
257 257
258#define PROFILE_ATTR(number) \258#define PROFILE_ATTR(number) \
259static struct bin_attribute bin_attr_profile##number##_settings = { \259static struct bin_attribute bin_attr_profile##number##_settings = { \
260 .attr = { .name = "profile##number##_settings", .mode = 0440 }, \260 .attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
261 .size = KOVAPLUS_SIZE_PROFILE_SETTINGS, \261 .size = KOVAPLUS_SIZE_PROFILE_SETTINGS, \
262 .read = kovaplus_sysfs_read_profilex_settings, \262 .read = kovaplus_sysfs_read_profilex_settings, \
263 .private = &profile_numbers[number-1], \263 .private = &profile_numbers[number-1], \
264}; \264}; \
265static struct bin_attribute bin_attr_profile##number##_buttons = { \265static struct bin_attribute bin_attr_profile##number##_buttons = { \
266 .attr = { .name = "profile##number##_buttons", .mode = 0440 }, \266 .attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
267 .size = KOVAPLUS_SIZE_PROFILE_BUTTONS, \267 .size = KOVAPLUS_SIZE_PROFILE_BUTTONS, \
268 .read = kovaplus_sysfs_read_profilex_buttons, \268 .read = kovaplus_sysfs_read_profilex_buttons, \
269 .private = &profile_numbers[number-1], \269 .private = &profile_numbers[number-1], \
drivers/hid/hid-roccat-pyra.c+2−2
@@ -225,13 +225,13 @@ static ssize_t pyra_sysfs_read_profilex_buttons(struct file *fp, · 224 unmodified lines
225 225
226#define PROFILE_ATTR(number) \226#define PROFILE_ATTR(number) \
227static struct bin_attribute bin_attr_profile##number##_settings = { \227static struct bin_attribute bin_attr_profile##number##_settings = { \
228 .attr = { .name = "profile##number##_settings", .mode = 0440 }, \228 .attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
229 .size = PYRA_SIZE_PROFILE_SETTINGS, \229 .size = PYRA_SIZE_PROFILE_SETTINGS, \
230 .read = pyra_sysfs_read_profilex_settings, \230 .read = pyra_sysfs_read_profilex_settings, \
231 .private = &profile_numbers[number-1], \231 .private = &profile_numbers[number-1], \
232}; \232}; \
233static struct bin_attribute bin_attr_profile##number##_buttons = { \233static struct bin_attribute bin_attr_profile##number##_buttons = { \
234 .attr = { .name = "profile##number##_buttons", .mode = 0440 }, \234 .attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
235 .size = PYRA_SIZE_PROFILE_BUTTONS, \235 .size = PYRA_SIZE_PROFILE_BUTTONS, \
236 .read = pyra_sysfs_read_profilex_buttons, \236 .read = pyra_sysfs_read_profilex_buttons, \
237 .private = &profile_numbers[number-1], \237 .private = &profile_numbers[number-1], \
drivers/hid/hid-wiimote-core.c+4−1
@@ -834,7 +834,8 @@ static void wiimote_init_set_type(struct wiimote_data *wdata, · 833 unmodified lines
834 goto done;834 goto done;
835 }835 }
836 836
837 if (vendor == USB_VENDOR_ID_NINTENDO) {837 if (vendor == USB_VENDOR_ID_NINTENDO ||
838 vendor == USB_VENDOR_ID_NINTENDO2) {
838 if (product == USB_DEVICE_ID_NINTENDO_WIIMOTE) {839 if (product == USB_DEVICE_ID_NINTENDO_WIIMOTE) {
839 devtype = WIIMOTE_DEV_GEN10;840 devtype = WIIMOTE_DEV_GEN10;
840 goto done;841 goto done;
@@ -1855,6 +1856,8 @@ static void wiimote_hid_remove(struct hid_device *hdev) · 1014 unmodified lines
1855static const struct hid_device_id wiimote_hid_devices[] = {1856static const struct hid_device_id wiimote_hid_devices[] = {
1856 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,1857 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
1857 USB_DEVICE_ID_NINTENDO_WIIMOTE) },1858 USB_DEVICE_ID_NINTENDO_WIIMOTE) },
1859 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO2,
1860 USB_DEVICE_ID_NINTENDO_WIIMOTE) },
1858 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,1861 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
1859 USB_DEVICE_ID_NINTENDO_WIIMOTE2) },1862 USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
1860 { }1863 { }
drivers/hid/hid-wiimote-modules.c+29−11
@@ -119,12 +119,22 @@ static const struct wiimod_ops wiimod_keys = { · 118 unmodified lines
119 * the rumble motor, this flag shouldn't be set.119 * the rumble motor, this flag shouldn't be set.
120 */120 */
121 121
122/* used by wiimod_rumble and wiipro_rumble */
123static void wiimod_rumble_worker(struct work_struct *work)
124{
125 struct wiimote_data *wdata = container_of(work, struct wiimote_data,
126 rumble_worker);
127
128 spin_lock_irq(&wdata->state.lock);
129 wiiproto_req_rumble(wdata, wdata->state.cache_rumble);
130 spin_unlock_irq(&wdata->state.lock);
131}
132
122static int wiimod_rumble_play(struct input_dev *dev, void *data,133static int wiimod_rumble_play(struct input_dev *dev, void *data,
123 struct ff_effect *eff)134 struct ff_effect *eff)
124{135{
125 struct wiimote_data *wdata = input_get_drvdata(dev);136 struct wiimote_data *wdata = input_get_drvdata(dev);
126 __u8 value;137 __u8 value;
127 unsigned long flags;
128 138
129 /*139 /*
130 * The wiimote supports only a single rumble motor so if any magnitude140 * The wiimote supports only a single rumble motor so if any magnitude
@@ -137,9 +147,10 @@ static int wiimod_rumble_play(struct input_dev *dev, void *data, · 6 unmodified lines
137 else147 else
138 value = 0;148 value = 0;
139 149
140 spin_lock_irqsave(&wdata->state.lock, flags);150 /* Locking state.lock here might deadlock with input_event() calls.
141 wiiproto_req_rumble(wdata, value);151 * schedule_work acts as barrier. Merging multiple changes is fine. */
142 spin_unlock_irqrestore(&wdata->state.lock, flags);152 wdata->state.cache_rumble = value;
153 schedule_work(&wdata->rumble_worker);
143 154
144 return 0;155 return 0;
145}156}
@@ -147,6 +158,8 @@ static int wiimod_rumble_play(struct input_dev *dev, void *data, · 1 unmodified line
147static int wiimod_rumble_probe(const struct wiimod_ops *ops,158static int wiimod_rumble_probe(const struct wiimod_ops *ops,
148 struct wiimote_data *wdata)159 struct wiimote_data *wdata)
149{160{
161 INIT_WORK(&wdata->rumble_worker, wiimod_rumble_worker);
162
150 set_bit(FF_RUMBLE, wdata->input->ffbit);163 set_bit(FF_RUMBLE, wdata->input->ffbit);
151 if (input_ff_create_memless(wdata->input, NULL, wiimod_rumble_play))164 if (input_ff_create_memless(wdata->input, NULL, wiimod_rumble_play))
152 return -ENOMEM;165 return -ENOMEM;
@@ -159,6 +172,8 @@ static void wiimod_rumble_remove(const struct wiimod_ops *ops, · 6 unmodified lines
159{172{
160 unsigned long flags;173 unsigned long flags;
161 174
175 cancel_work_sync(&wdata->rumble_worker);
176
162 spin_lock_irqsave(&wdata->state.lock, flags);177 spin_lock_irqsave(&wdata->state.lock, flags);
163 wiiproto_req_rumble(wdata, 0);178 wiiproto_req_rumble(wdata, 0);
164 spin_unlock_irqrestore(&wdata->state.lock, flags);179 spin_unlock_irqrestore(&wdata->state.lock, flags);
@@ -1731,7 +1746,6 @@ static int wiimod_pro_play(struct input_dev *dev, void *data, · 1566 unmodified lines
1731{1746{
1732 struct wiimote_data *wdata = input_get_drvdata(dev);1747 struct wiimote_data *wdata = input_get_drvdata(dev);
1733 __u8 value;1748 __u8 value;
1734 unsigned long flags;
1735 1749
1736 /*1750 /*
1737 * The wiimote supports only a single rumble motor so if any magnitude1751 * The wiimote supports only a single rumble motor so if any magnitude
@@ -1744,9 +1758,10 @@ static int wiimod_pro_play(struct input_dev *dev, void *data, · 6 unmodified lines
1744 else1758 else
1745 value = 0;1759 value = 0;
1746 1760
1747 spin_lock_irqsave(&wdata->state.lock, flags);1761 /* Locking state.lock here might deadlock with input_event() calls.
1748 wiiproto_req_rumble(wdata, value);1762 * schedule_work acts as barrier. Merging multiple changes is fine. */
1749 spin_unlock_irqrestore(&wdata->state.lock, flags);1763 wdata->state.cache_rumble = value;
1764 schedule_work(&wdata->rumble_worker);
1750 1765
1751 return 0;1766 return 0;
1752}1767}
@@ -1756,6 +1771,8 @@ static int wiimod_pro_probe(const struct wiimod_ops *ops, · 3 unmodified lines
1756{1771{
1757 int ret, i;1772 int ret, i;
1758 1773
1774 INIT_WORK(&wdata->rumble_worker, wiimod_rumble_worker);
1775
1759 wdata->extension.input = input_allocate_device();1776 wdata->extension.input = input_allocate_device();
1760 if (!wdata->extension.input)1777 if (!wdata->extension.input)
1761 return -ENOMEM;1778 return -ENOMEM;
@@ -1817,12 +1834,13 @@ static void wiimod_pro_remove(const struct wiimod_ops *ops, · 55 unmodified lines
1817 if (!wdata->extension.input)1834 if (!wdata->extension.input)
1818 return;1835 return;
1819 1836
1837 input_unregister_device(wdata->extension.input);
1838 wdata->extension.input = NULL;
1839 cancel_work_sync(&wdata->rumble_worker);
1840
1820 spin_lock_irqsave(&wdata->state.lock, flags);1841 spin_lock_irqsave(&wdata->state.lock, flags);
1821 wiiproto_req_rumble(wdata, 0);1842 wiiproto_req_rumble(wdata, 0);
1822 spin_unlock_irqrestore(&wdata->state.lock, flags);1843 spin_unlock_irqrestore(&wdata->state.lock, flags);
1823
1824 input_unregister_device(wdata->extension.input);
1825 wdata->extension.input = NULL;
1826}1844}
1827 1845
1828static const struct wiimod_ops wiimod_pro = {1846static const struct wiimod_ops wiimod_pro = {
drivers/hid/hid-wiimote.h+3−1
@@ -133,13 +133,15 @@ struct wiimote_state { · 132 unmodified lines
133 __u8 *cmd_read_buf;133 __u8 *cmd_read_buf;
134 __u8 cmd_read_size;134 __u8 cmd_read_size;
135 135
136 /* calibration data */136 /* calibration/cache data */
137 __u16 calib_bboard[4][3];137 __u16 calib_bboard[4][3];
138 __u8 cache_rumble;
138};139};
139 140
140struct wiimote_data {141struct wiimote_data {
141 struct hid_device *hdev;142 struct hid_device *hdev;
142 struct input_dev *input;143 struct input_dev *input;
144 struct work_struct rumble_worker;
143 struct led_classdev *leds[4];145 struct led_classdev *leds[4];
144 struct input_dev *accel;146 struct input_dev *accel;
145 struct input_dev *ir;147 struct input_dev *ir;
drivers/hid/hidraw.c+14−7
@@ -308,18 +308,25 @@ static int hidraw_fasync(int fd, struct file *file, int on) · 307 unmodified lines
308static void drop_ref(struct hidraw *hidraw, int exists_bit)308static void drop_ref(struct hidraw *hidraw, int exists_bit)
309{309{
310 if (exists_bit) {310 if (exists_bit) {
311 hid_hw_close(hidraw->hid);
312 hidraw->exist = 0;311 hidraw->exist = 0;
313 if (hidraw->open)312 if (hidraw->open) {
313 hid_hw_close(hidraw->hid);
314 wake_up_interruptible(&hidraw->wait);314 wake_up_interruptible(&hidraw->wait);
315 }
315 } else {316 } else {
316 --hidraw->open;317 --hidraw->open;
317 }318 }
318 319 if (!hidraw->open) {
319 if (!hidraw->open && !hidraw->exist) {320 if (!hidraw->exist) {
320 device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor));321 device_destroy(hidraw_class,
321 hidraw_table[hidraw->minor] = NULL;322 MKDEV(hidraw_major, hidraw->minor));
322 kfree(hidraw);323 hidraw_table[hidraw->minor] = NULL;
324 kfree(hidraw);
325 } else {
326 /* close device for last reader */
327 hid_hw_power(hidraw->hid, PM_HINT_NORMAL);
328 hid_hw_close(hidraw->hid);
329 }
323 }330 }
324}331}
325 332
drivers/hid/uhid.c+2−1
@@ -615,7 +615,7 @@ static const struct file_operations uhid_fops = { · 614 unmodified lines
615 615
616static struct miscdevice uhid_misc = {616static struct miscdevice uhid_misc = {
617 .fops = &uhid_fops,617 .fops = &uhid_fops,
618 .minor = MISC_DYNAMIC_MINOR,618 .minor = UHID_MINOR,
619 .name = UHID_NAME,619 .name = UHID_NAME,
620};620};
621 621
@@ -634,4 +634,5 @@ module_exit(uhid_exit); · 12 unmodified lines
634MODULE_LICENSE("GPL");634MODULE_LICENSE("GPL");
635MODULE_AUTHOR("David Herrmann <dh.herrmann@gmail.com>");635MODULE_AUTHOR("David Herrmann <dh.herrmann@gmail.com>");
636MODULE_DESCRIPTION("User-space I/O driver support for HID subsystem");636MODULE_DESCRIPTION("User-space I/O driver support for HID subsystem");
637MODULE_ALIAS_MISCDEV(UHID_MINOR);
637MODULE_ALIAS("devname:" UHID_NAME);638MODULE_ALIAS("devname:" UHID_NAME);
drivers/hid/usbhid/hid-quirks.c+3−0
@@ -110,6 +110,9 @@ static const struct hid_blacklist { · 109 unmodified lines
110 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },110 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
111 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },111 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
112 { USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },112 { USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
113 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1, HID_QUIRK_NO_INIT_REPORTS },
114 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2, HID_QUIRK_NO_INIT_REPORTS },
115 { USB_VENDOR_ID_SIS, USB_DEVICE_ID_SIS_TS, HID_QUIRK_NO_INIT_REPORTS },
113 116
114 { 0, 0 }117 { 0, 0 }
115};118};
drivers/hwmon/applesmc.c+13−0
@@ -230,6 +230,7 @@ static int send_argument(const char *key) · 229 unmodified lines
230 230
231static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)231static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
232{232{
233 u8 status, data = 0;
233 int i;234 int i;
234 235
235 if (send_command(cmd) || send_argument(key)) {236 if (send_command(cmd) || send_argument(key)) {
@@ -237,6 +238,7 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len) · 1 unmodified line
237 return -EIO;238 return -EIO;
238 }239 }
239 240
241 /* This has no effect on newer (2012) SMCs */
240 if (send_byte(len, APPLESMC_DATA_PORT)) {242 if (send_byte(len, APPLESMC_DATA_PORT)) {
241 pr_warn("%.4s: read len fail\n", key);243 pr_warn("%.4s: read len fail\n", key);
242 return -EIO;244 return -EIO;
@@ -250,6 +252,17 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len) · 7 unmodified lines
250 buffer[i] = inb(APPLESMC_DATA_PORT);252 buffer[i] = inb(APPLESMC_DATA_PORT);
251 }253 }
252 254
255 /* Read the data port until bit0 is cleared */
256 for (i = 0; i < 16; i++) {
257 udelay(APPLESMC_MIN_WAIT);
258 status = inb(APPLESMC_CMD_PORT);
259 if (!(status & 0x01))
260 break;
261 data = inb(APPLESMC_DATA_PORT);
262 }
263 if (i)
264 pr_warn("flushed %d bytes, last value is: %d\n", i, data);
265
253 return 0;266 return 0;
254}267}
255 268
drivers/i2c/busses/i2c-designware-platdrv.c+3−2
@@ -270,7 +270,8 @@ static SIMPLE_DEV_PM_OPS(dw_i2c_dev_pm_ops, dw_i2c_suspend, dw_i2c_resume); · 269 unmodified lines
270MODULE_ALIAS("platform:i2c_designware");270MODULE_ALIAS("platform:i2c_designware");
271 271
272static struct platform_driver dw_i2c_driver = {272static struct platform_driver dw_i2c_driver = {
273 .remove = dw_i2c_remove,273 .probe = dw_i2c_probe,
274 .remove = dw_i2c_remove,
274 .driver = {275 .driver = {
275 .name = "i2c_designware",276 .name = "i2c_designware",
276 .owner = THIS_MODULE,277 .owner = THIS_MODULE,
@@ -282,7 +283,7 @@ static struct platform_driver dw_i2c_driver = { · 5 unmodified lines
282 283
283static int __init dw_i2c_init_driver(void)284static int __init dw_i2c_init_driver(void)
284{285{
285 return platform_driver_probe(&dw_i2c_driver, dw_i2c_probe);286 return platform_driver_register(&dw_i2c_driver);
286}287}
287subsys_initcall(dw_i2c_init_driver);288subsys_initcall(dw_i2c_init_driver);
288 289
drivers/i2c/busses/i2c-imx.c+6−5
@@ -365,7 +365,7 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx) · 364 unmodified lines
365 clk_disable_unprepare(i2c_imx->clk);365 clk_disable_unprepare(i2c_imx->clk);
366}366}
367 367
368static void __init i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx,368static void i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx,
369 unsigned int rate)369 unsigned int rate)
370{370{
371 struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div;371 struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div;
@@ -589,7 +589,7 @@ static struct i2c_algorithm i2c_imx_algo = { · 217 unmodified lines
589 .functionality = i2c_imx_func,589 .functionality = i2c_imx_func,
590};590};
591 591
592static int __init i2c_imx_probe(struct platform_device *pdev)592static int i2c_imx_probe(struct platform_device *pdev)
593{593{
594 const struct of_device_id *of_id = of_match_device(i2c_imx_dt_ids,594 const struct of_device_id *of_id = of_match_device(i2c_imx_dt_ids,
595 &pdev->dev);595 &pdev->dev);
@@ -697,7 +697,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev) · 101 unmodified lines
697 return 0; /* Return OK */697 return 0; /* Return OK */
698}698}
699 699
700static int __exit i2c_imx_remove(struct platform_device *pdev)700static int i2c_imx_remove(struct platform_device *pdev)
701{701{
702 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev);702 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev);
703 703
@@ -715,7 +715,8 @@ static int __exit i2c_imx_remove(struct platform_device *pdev) · 11 unmodified lines
715}715}
716 716
717static struct platform_driver i2c_imx_driver = {717static struct platform_driver i2c_imx_driver = {
718 .remove = __exit_p(i2c_imx_remove),718 .probe = i2c_imx_probe,
719 .remove = i2c_imx_remove,
719 .driver = {720 .driver = {
720 .name = DRIVER_NAME,721 .name = DRIVER_NAME,
721 .owner = THIS_MODULE,722 .owner = THIS_MODULE,
@@ -726,7 +727,7 @@ static struct platform_driver i2c_imx_driver = { · 4 unmodified lines
726 727
727static int __init i2c_adap_imx_init(void)728static int __init i2c_adap_imx_init(void)
728{729{
729 return platform_driver_probe(&i2c_imx_driver, i2c_imx_probe);730 return platform_driver_register(&i2c_imx_driver);
730}731}
731subsys_initcall(i2c_adap_imx_init);732subsys_initcall(i2c_adap_imx_init);
732 733
drivers/i2c/busses/i2c-mxs.c+2−1
@@ -780,12 +780,13 @@ static struct platform_driver mxs_i2c_driver = { · 779 unmodified lines
780 .owner = THIS_MODULE,780 .owner = THIS_MODULE,
781 .of_match_table = mxs_i2c_dt_ids,781 .of_match_table = mxs_i2c_dt_ids,
782 },782 },
783 .probe = mxs_i2c_probe,
783 .remove = mxs_i2c_remove,784 .remove = mxs_i2c_remove,
784};785};
785 786
786static int __init mxs_i2c_init(void)787static int __init mxs_i2c_init(void)
787{788{
788 return platform_driver_probe(&mxs_i2c_driver, mxs_i2c_probe);789 return platform_driver_register(&mxs_i2c_driver);
789}790}
790subsys_initcall(mxs_i2c_init);791subsys_initcall(mxs_i2c_init);
791 792
drivers/i2c/busses/i2c-omap.c+3−0
@@ -939,6 +939,9 @@ omap_i2c_isr_thread(int this_irq, void *dev_id) · 938 unmodified lines
939 /*939 /*
940 * ProDB0017052: Clear ARDY bit twice940 * ProDB0017052: Clear ARDY bit twice
941 */941 */
942 if (stat & OMAP_I2C_STAT_ARDY)
943 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ARDY);
944
942 if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK |945 if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK |
943 OMAP_I2C_STAT_AL)) {946 OMAP_I2C_STAT_AL)) {
944 omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_RRDY |947 omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_RRDY |
drivers/i2c/busses/i2c-stu300.c+5−6
@@ -859,8 +859,7 @@ static const struct i2c_algorithm stu300_algo = { · 858 unmodified lines
859 .functionality = stu300_func,859 .functionality = stu300_func,
860};860};
861 861
862static int __init862static int stu300_probe(struct platform_device *pdev)
863stu300_probe(struct platform_device *pdev)
864{863{
865 struct stu300_dev *dev;864 struct stu300_dev *dev;
866 struct i2c_adapter *adap;865 struct i2c_adapter *adap;
@@ -966,8 +965,7 @@ static SIMPLE_DEV_PM_OPS(stu300_pm, stu300_suspend, stu300_resume); · 99 unmodified lines
966#define STU300_I2C_PM NULL965#define STU300_I2C_PM NULL
967#endif966#endif
968 967
969static int __exit968static int stu300_remove(struct platform_device *pdev)
970stu300_remove(struct platform_device *pdev)
971{969{
972 struct stu300_dev *dev = platform_get_drvdata(pdev);970 struct stu300_dev *dev = platform_get_drvdata(pdev);
973 971
@@ -989,13 +987,14 @@ static struct platform_driver stu300_i2c_driver = { · 15 unmodified lines
989 .pm = STU300_I2C_PM,987 .pm = STU300_I2C_PM,
990 .of_match_table = stu300_dt_match,988 .of_match_table = stu300_dt_match,
991 },989 },
992 .remove = __exit_p(stu300_remove),990 .probe = stu300_probe,
991 .remove = stu300_remove,
993 992
994};993};
995 994
996static int __init stu300_init(void)995static int __init stu300_init(void)
997{996{
998 return platform_driver_probe(&stu300_i2c_driver, stu300_probe);997 return platform_driver_register(&stu300_i2c_driver);
999}998}
1000 999
1001static void __exit stu300_exit(void)1000static void __exit stu300_exit(void)
drivers/i2c/i2c-core.c+3−0
@@ -1134,6 +1134,9 @@ static void acpi_i2c_register_devices(struct i2c_adapter *adap) · 1133 unmodified lines
1134 acpi_handle handle;1134 acpi_handle handle;
1135 acpi_status status;1135 acpi_status status;
1136 1136
1137 if (!adap->dev.parent)
1138 return;
1139
1137 handle = ACPI_HANDLE(adap->dev.parent);1140 handle = ACPI_HANDLE(adap->dev.parent);
1138 if (!handle)1141 if (!handle)
1139 return;1142 return;
drivers/i2c/muxes/i2c-arb-gpio-challenge.c+1−1
@@ -200,7 +200,7 @@ static int i2c_arbitrator_probe(struct platform_device *pdev) · 199 unmodified lines
200 arb->parent = of_find_i2c_adapter_by_node(parent_np);200 arb->parent = of_find_i2c_adapter_by_node(parent_np);
201 if (!arb->parent) {201 if (!arb->parent) {
202 dev_err(dev, "Cannot find parent bus\n");202 dev_err(dev, "Cannot find parent bus\n");
203 return -EINVAL;203 return -EPROBE_DEFER;
204 }204 }
205 205
206 /* Actually add the mux adapter */206 /* Actually add the mux adapter */
drivers/i2c/muxes/i2c-mux-gpio.c+9−5
@@ -66,7 +66,7 @@ static int i2c_mux_gpio_probe_dt(struct gpiomux *mux, · 65 unmodified lines
66 struct device_node *adapter_np, *child;66 struct device_node *adapter_np, *child;
67 struct i2c_adapter *adapter;67 struct i2c_adapter *adapter;
68 unsigned *values, *gpios;68 unsigned *values, *gpios;
69 int i = 0;69 int i = 0, ret;
70 70
71 if (!np)71 if (!np)
72 return -ENODEV;72 return -ENODEV;
@@ -79,7 +79,7 @@ static int i2c_mux_gpio_probe_dt(struct gpiomux *mux, · 6 unmodified lines
79 adapter = of_find_i2c_adapter_by_node(adapter_np);79 adapter = of_find_i2c_adapter_by_node(adapter_np);
80 if (!adapter) {80 if (!adapter) {
81 dev_err(&pdev->dev, "Cannot find parent bus\n");81 dev_err(&pdev->dev, "Cannot find parent bus\n");
82 return -ENODEV;82 return -EPROBE_DEFER;
83 }83 }
84 mux->data.parent = i2c_adapter_id(adapter);84 mux->data.parent = i2c_adapter_id(adapter);
85 put_device(&adapter->dev);85 put_device(&adapter->dev);
@@ -116,8 +116,12 @@ static int i2c_mux_gpio_probe_dt(struct gpiomux *mux, · 30 unmodified lines
116 return -ENOMEM;116 return -ENOMEM;
117 }117 }
118 118
119 for (i = 0; i < mux->data.n_gpios; i++)119 for (i = 0; i < mux->data.n_gpios; i++) {
120 gpios[i] = of_get_named_gpio(np, "mux-gpios", i);120 ret = of_get_named_gpio(np, "mux-gpios", i);
121 if (ret < 0)
122 return ret;
123 gpios[i] = ret;
124 }
121 125
122 mux->data.gpios = gpios;126 mux->data.gpios = gpios;
123 127
@@ -177,7 +181,7 @@ static int i2c_mux_gpio_probe(struct platform_device *pdev) · 53 unmodified lines
177 if (!parent) {181 if (!parent) {
178 dev_err(&pdev->dev, "Parent adapter (%d) not found\n",182 dev_err(&pdev->dev, "Parent adapter (%d) not found\n",
179 mux->data.parent);183 mux->data.parent);
180 return -ENODEV;184 return -EPROBE_DEFER;
181 }185 }
182 186
183 mux->parent = parent;187 mux->parent = parent;
drivers/i2c/muxes/i2c-mux-pinctrl.c+2−2
@@ -113,7 +113,7 @@ static int i2c_mux_pinctrl_parse_dt(struct i2c_mux_pinctrl *mux, · 112 unmodified lines
113 adapter = of_find_i2c_adapter_by_node(adapter_np);113 adapter = of_find_i2c_adapter_by_node(adapter_np);
114 if (!adapter) {114 if (!adapter) {
115 dev_err(mux->dev, "Cannot find parent bus\n");115 dev_err(mux->dev, "Cannot find parent bus\n");
116 return -ENODEV;116 return -EPROBE_DEFER;
117 }117 }
118 mux->pdata->parent_bus_num = i2c_adapter_id(adapter);118 mux->pdata->parent_bus_num = i2c_adapter_id(adapter);
119 put_device(&adapter->dev);119 put_device(&adapter->dev);
@@ -211,7 +211,7 @@ static int i2c_mux_pinctrl_probe(struct platform_device *pdev) · 91 unmodified lines
211 if (!mux->parent) {211 if (!mux->parent) {
212 dev_err(&pdev->dev, "Parent adapter (%d) not found\n",212 dev_err(&pdev->dev, "Parent adapter (%d) not found\n",
213 mux->pdata->parent_bus_num);213 mux->pdata->parent_bus_num);
214 ret = -ENODEV;214 ret = -EPROBE_DEFER;
215 goto err;215 goto err;
216 }216 }
217 217
drivers/iio/amplifiers/ad8366.c+1−3
@@ -185,10 +185,8 @@ static int ad8366_remove(struct spi_device *spi) · 184 unmodified lines
185 185
186 iio_device_unregister(indio_dev);186 iio_device_unregister(indio_dev);
187 187
188 if (!IS_ERR(reg)) {188 if (!IS_ERR(reg))
189 regulator_disable(reg);189 regulator_disable(reg);
190 regulator_put(reg);
191 }
192 190
193 return 0;191 return 0;
194}192}
drivers/iio/frequency/adf4350.c+4−2
@@ -525,8 +525,10 @@ static int adf4350_probe(struct spi_device *spi) · 524 unmodified lines
525 }525 }
526 526
527 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));527 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
528 if (indio_dev == NULL)528 if (indio_dev == NULL) {
529 return -ENOMEM;529 ret = -ENOMEM;
530 goto error_disable_clk;
531 }
530 532
531 st = iio_priv(indio_dev);533 st = iio_priv(indio_dev);
532 534
drivers/iio/industrialio-buffer.c+3−0
@@ -477,6 +477,9 @@ void iio_disable_all_buffers(struct iio_dev *indio_dev) · 476 unmodified lines
477 indio_dev->currentmode = INDIO_DIRECT_MODE;477 indio_dev->currentmode = INDIO_DIRECT_MODE;
478 if (indio_dev->setup_ops->postdisable)478 if (indio_dev->setup_ops->postdisable)
479 indio_dev->setup_ops->postdisable(indio_dev);479 indio_dev->setup_ops->postdisable(indio_dev);
480
481 if (indio_dev->available_scan_masks == NULL)
482 kfree(indio_dev->active_scan_mask);
480}483}
481 484
482int iio_update_buffers(struct iio_dev *indio_dev,485int iio_update_buffers(struct iio_dev *indio_dev,
drivers/iio/industrialio-core.c+1−1
@@ -852,7 +852,6 @@ static void iio_dev_release(struct device *device) · 851 unmodified lines
852 iio_device_unregister_trigger_consumer(indio_dev);852 iio_device_unregister_trigger_consumer(indio_dev);
853 iio_device_unregister_eventset(indio_dev);853 iio_device_unregister_eventset(indio_dev);
854 iio_device_unregister_sysfs(indio_dev);854 iio_device_unregister_sysfs(indio_dev);
855 iio_device_unregister_debugfs(indio_dev);
856 855
857 ida_simple_remove(&iio_ida, indio_dev->id);856 ida_simple_remove(&iio_ida, indio_dev->id);
858 kfree(indio_dev);857 kfree(indio_dev);
@@ -1087,6 +1086,7 @@ void iio_device_unregister(struct iio_dev *indio_dev) · 228 unmodified lines
1087 1086
1088 if (indio_dev->chrdev.dev)1087 if (indio_dev->chrdev.dev)
1089 cdev_del(&indio_dev->chrdev);1088 cdev_del(&indio_dev->chrdev);
1089 iio_device_unregister_debugfs(indio_dev);
1090 1090
1091 iio_disable_all_buffers(indio_dev);1091 iio_disable_all_buffers(indio_dev);
1092 1092
drivers/iio/magnetometer/st_magn_core.c+9−9
@@ -29,9 +29,9 @@ · 28 unmodified lines
29#define ST_MAGN_NUMBER_DATA_CHANNELS 329#define ST_MAGN_NUMBER_DATA_CHANNELS 3
30 30
31/* DEFAULT VALUE FOR SENSORS */31/* DEFAULT VALUE FOR SENSORS */
32#define ST_MAGN_DEFAULT_OUT_X_L_ADDR 0X0432#define ST_MAGN_DEFAULT_OUT_X_H_ADDR 0X03
33#define ST_MAGN_DEFAULT_OUT_Y_L_ADDR 0X0833#define ST_MAGN_DEFAULT_OUT_Y_H_ADDR 0X07
34#define ST_MAGN_DEFAULT_OUT_Z_L_ADDR 0X0634#define ST_MAGN_DEFAULT_OUT_Z_H_ADDR 0X05
35 35
36/* FULLSCALE */36/* FULLSCALE */
37#define ST_MAGN_FS_AVL_1300MG 130037#define ST_MAGN_FS_AVL_1300MG 1300
@@ -117,16 +117,16 @@ · 79 unmodified lines
117static const struct iio_chan_spec st_magn_16bit_channels[] = {117static const struct iio_chan_spec st_magn_16bit_channels[] = {
118 ST_SENSORS_LSM_CHANNELS(IIO_MAGN,118 ST_SENSORS_LSM_CHANNELS(IIO_MAGN,
119 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),119 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
120 ST_SENSORS_SCAN_X, 1, IIO_MOD_X, 's', IIO_LE, 16, 16,120 ST_SENSORS_SCAN_X, 1, IIO_MOD_X, 's', IIO_BE, 16, 16,
121 ST_MAGN_DEFAULT_OUT_X_L_ADDR),121 ST_MAGN_DEFAULT_OUT_X_H_ADDR),
122 ST_SENSORS_LSM_CHANNELS(IIO_MAGN,122 ST_SENSORS_LSM_CHANNELS(IIO_MAGN,
123 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),123 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
124 ST_SENSORS_SCAN_Y, 1, IIO_MOD_Y, 's', IIO_LE, 16, 16,124 ST_SENSORS_SCAN_Y, 1, IIO_MOD_Y, 's', IIO_BE, 16, 16,
125 ST_MAGN_DEFAULT_OUT_Y_L_ADDR),125 ST_MAGN_DEFAULT_OUT_Y_H_ADDR),
126 ST_SENSORS_LSM_CHANNELS(IIO_MAGN,126 ST_SENSORS_LSM_CHANNELS(IIO_MAGN,
127 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),127 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
128 ST_SENSORS_SCAN_Z, 1, IIO_MOD_Z, 's', IIO_LE, 16, 16,128 ST_SENSORS_SCAN_Z, 1, IIO_MOD_Z, 's', IIO_BE, 16, 16,
129 ST_MAGN_DEFAULT_OUT_Z_L_ADDR),129 ST_MAGN_DEFAULT_OUT_Z_H_ADDR),
130 IIO_CHAN_SOFT_TIMESTAMP(3)130 IIO_CHAN_SOFT_TIMESTAMP(3)
131};131};
132 132
drivers/infiniband/Kconfig+11−0
@@ -31,6 +31,17 @@ config INFINIBAND_USER_ACCESS · 30 unmodified lines
31 libibverbs, libibcm and a hardware driver library from31 libibverbs, libibcm and a hardware driver library from
32 <http://www.openfabrics.org/git/>.32 <http://www.openfabrics.org/git/>.
33 33
34config INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
35 bool "Experimental and unstable ABI for userspace access to flow steering verbs"
36 depends on INFINIBAND_USER_ACCESS
37 depends on STAGING
38 ---help---
39 The final ABI for userspace access to flow steering verbs
40 has not been defined. To use the current ABI, *WHICH WILL
41 CHANGE IN THE FUTURE*, say Y here.
42
43 If unsure, say N.
44
34config INFINIBAND_USER_MEM45config INFINIBAND_USER_MEM
35 bool46 bool
36 depends on INFINIBAND_USER_ACCESS != n47 depends on INFINIBAND_USER_ACCESS != n
drivers/infiniband/core/uverbs.h+2−0
@@ -217,7 +217,9 @@ IB_UVERBS_DECLARE_CMD(destroy_srq); · 216 unmodified lines
217IB_UVERBS_DECLARE_CMD(create_xsrq);217IB_UVERBS_DECLARE_CMD(create_xsrq);
218IB_UVERBS_DECLARE_CMD(open_xrcd);218IB_UVERBS_DECLARE_CMD(open_xrcd);
219IB_UVERBS_DECLARE_CMD(close_xrcd);219IB_UVERBS_DECLARE_CMD(close_xrcd);
220#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
220IB_UVERBS_DECLARE_CMD(create_flow);221IB_UVERBS_DECLARE_CMD(create_flow);
221IB_UVERBS_DECLARE_CMD(destroy_flow);222IB_UVERBS_DECLARE_CMD(destroy_flow);
223#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
222 224
223#endif /* UVERBS_H */225#endif /* UVERBS_H */
drivers/infiniband/core/uverbs_cmd.c+4−0
@@ -54,7 +54,9 @@ static struct uverbs_lock_class qp_lock_class = { .name = "QP-uobj" }; · 53 unmodified lines
54static struct uverbs_lock_class ah_lock_class = { .name = "AH-uobj" };54static struct uverbs_lock_class ah_lock_class = { .name = "AH-uobj" };
55static struct uverbs_lock_class srq_lock_class = { .name = "SRQ-uobj" };55static struct uverbs_lock_class srq_lock_class = { .name = "SRQ-uobj" };
56static struct uverbs_lock_class xrcd_lock_class = { .name = "XRCD-uobj" };56static struct uverbs_lock_class xrcd_lock_class = { .name = "XRCD-uobj" };
57#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
57static struct uverbs_lock_class rule_lock_class = { .name = "RULE-uobj" };58static struct uverbs_lock_class rule_lock_class = { .name = "RULE-uobj" };
59#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
58 60
59#define INIT_UDATA(udata, ibuf, obuf, ilen, olen) \61#define INIT_UDATA(udata, ibuf, obuf, ilen, olen) \
60 do { \62 do { \
@@ -2599,6 +2601,7 @@ out_put: · 2538 unmodified lines
2599 return ret ? ret : in_len;2601 return ret ? ret : in_len;
2600}2602}
2601 2603
2604#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
2602static int kern_spec_to_ib_spec(struct ib_kern_spec *kern_spec,2605static int kern_spec_to_ib_spec(struct ib_kern_spec *kern_spec,
2603 union ib_flow_spec *ib_spec)2606 union ib_flow_spec *ib_spec)
2604{2607{
@@ -2824,6 +2827,7 @@ ssize_t ib_uverbs_destroy_flow(struct ib_uverbs_file *file, · 219 unmodified lines
2824 2827
2825 return ret ? ret : in_len;2828 return ret ? ret : in_len;
2826}2829}
2830#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
2827 2831
2828static int __uverbs_create_xsrq(struct ib_uverbs_file *file,2832static int __uverbs_create_xsrq(struct ib_uverbs_file *file,
2829 struct ib_uverbs_create_xsrq *cmd,2833 struct ib_uverbs_create_xsrq *cmd,
drivers/infiniband/core/uverbs_main.c+6−0
@@ -115,8 +115,10 @@ static ssize_t (*uverbs_cmd_table[])(struct ib_uverbs_file *file, · 114 unmodified lines
115 [IB_USER_VERBS_CMD_CLOSE_XRCD] = ib_uverbs_close_xrcd,115 [IB_USER_VERBS_CMD_CLOSE_XRCD] = ib_uverbs_close_xrcd,
116 [IB_USER_VERBS_CMD_CREATE_XSRQ] = ib_uverbs_create_xsrq,116 [IB_USER_VERBS_CMD_CREATE_XSRQ] = ib_uverbs_create_xsrq,
117 [IB_USER_VERBS_CMD_OPEN_QP] = ib_uverbs_open_qp,117 [IB_USER_VERBS_CMD_OPEN_QP] = ib_uverbs_open_qp,
118#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
118 [IB_USER_VERBS_CMD_CREATE_FLOW] = ib_uverbs_create_flow,119 [IB_USER_VERBS_CMD_CREATE_FLOW] = ib_uverbs_create_flow,
119 [IB_USER_VERBS_CMD_DESTROY_FLOW] = ib_uverbs_destroy_flow120 [IB_USER_VERBS_CMD_DESTROY_FLOW] = ib_uverbs_destroy_flow
121#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
120};122};
121 123
122static void ib_uverbs_add_one(struct ib_device *device);124static void ib_uverbs_add_one(struct ib_device *device);
@@ -605,6 +607,7 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf, · 482 unmodified lines
605 if (!(file->device->ib_dev->uverbs_cmd_mask & (1ull << hdr.command)))607 if (!(file->device->ib_dev->uverbs_cmd_mask & (1ull << hdr.command)))
606 return -ENOSYS;608 return -ENOSYS;
607 609
610#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
608 if (hdr.command >= IB_USER_VERBS_CMD_THRESHOLD) {611 if (hdr.command >= IB_USER_VERBS_CMD_THRESHOLD) {
609 struct ib_uverbs_cmd_hdr_ex hdr_ex;612 struct ib_uverbs_cmd_hdr_ex hdr_ex;
610 613
@@ -621,6 +624,7 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf, · 10 unmodified lines
621 (hdr_ex.out_words +624 (hdr_ex.out_words +
622 hdr_ex.provider_out_words) * 4);625 hdr_ex.provider_out_words) * 4);
623 } else {626 } else {
627#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
624 if (hdr.in_words * 4 != count)628 if (hdr.in_words * 4 != count)
625 return -EINVAL;629 return -EINVAL;
626 630
@@ -628,7 +632,9 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf, · 1 unmodified line
628 buf + sizeof(hdr),632 buf + sizeof(hdr),
629 hdr.in_words * 4,633 hdr.in_words * 4,
630 hdr.out_words * 4);634 hdr.out_words * 4);
635#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
631 }636 }
637#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
632}638}
633 639
634static int ib_uverbs_mmap(struct file *filp, struct vm_area_struct *vma)640static int ib_uverbs_mmap(struct file *filp, struct vm_area_struct *vma)
drivers/infiniband/hw/amso1100/c2_ae.c+1−1
@@ -141,7 +141,7 @@ static const char *to_qp_state_str(int state) · 140 unmodified lines
141 return "C2_QP_STATE_ERROR";141 return "C2_QP_STATE_ERROR";
142 default:142 default:
143 return "<invalid QP state>";143 return "<invalid QP state>";
144 };144 }
145}145}
146 146
147void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)147void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)
drivers/infiniband/hw/mlx4/main.c+2−0
@@ -1691,9 +1691,11 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) · 1690 unmodified lines
1691 ibdev->ib_dev.create_flow = mlx4_ib_create_flow;1691 ibdev->ib_dev.create_flow = mlx4_ib_create_flow;
1692 ibdev->ib_dev.destroy_flow = mlx4_ib_destroy_flow;1692 ibdev->ib_dev.destroy_flow = mlx4_ib_destroy_flow;
1693 1693
1694#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
1694 ibdev->ib_dev.uverbs_cmd_mask |=1695 ibdev->ib_dev.uverbs_cmd_mask |=
1695 (1ull << IB_USER_VERBS_CMD_CREATE_FLOW) |1696 (1ull << IB_USER_VERBS_CMD_CREATE_FLOW) |
1696 (1ull << IB_USER_VERBS_CMD_DESTROY_FLOW);1697 (1ull << IB_USER_VERBS_CMD_DESTROY_FLOW);
1698#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
1697 }1699 }
1698 1700
1699 mlx4_ib_alloc_eqs(dev, ibdev);1701 mlx4_ib_alloc_eqs(dev, ibdev);
drivers/infiniband/hw/mlx5/main.c+10−6
@@ -164,6 +164,7 @@ int mlx5_vector2eqn(struct mlx5_ib_dev *dev, int vector, int *eqn, int *irqn) · 163 unmodified lines
164static int alloc_comp_eqs(struct mlx5_ib_dev *dev)164static int alloc_comp_eqs(struct mlx5_ib_dev *dev)
165{165{
166 struct mlx5_eq_table *table = &dev->mdev.priv.eq_table;166 struct mlx5_eq_table *table = &dev->mdev.priv.eq_table;
167 char name[MLX5_MAX_EQ_NAME];
167 struct mlx5_eq *eq, *n;168 struct mlx5_eq *eq, *n;
168 int ncomp_vec;169 int ncomp_vec;
169 int nent;170 int nent;
@@ -180,11 +181,10 @@ static int alloc_comp_eqs(struct mlx5_ib_dev *dev) · 10 unmodified lines
180 goto clean;181 goto clean;
181 }182 }
182 183
183 snprintf(eq->name, MLX5_MAX_EQ_NAME, "mlx5_comp%d", i);184 snprintf(name, MLX5_MAX_EQ_NAME, "mlx5_comp%d", i);
184 err = mlx5_create_map_eq(&dev->mdev, eq,185 err = mlx5_create_map_eq(&dev->mdev, eq,
185 i + MLX5_EQ_VEC_COMP_BASE, nent, 0,186 i + MLX5_EQ_VEC_COMP_BASE, nent, 0,
186 eq->name,187 name, &dev->mdev.priv.uuari.uars[0]);
187 &dev->mdev.priv.uuari.uars[0]);
188 if (err) {188 if (err) {
189 kfree(eq);189 kfree(eq);
190 goto clean;190 goto clean;
@@ -301,9 +301,8 @@ static int mlx5_ib_query_device(struct ib_device *ibdev, · 110 unmodified lines
301 props->max_srq_sge = max_rq_sg - 1;301 props->max_srq_sge = max_rq_sg - 1;
302 props->max_fast_reg_page_list_len = (unsigned int)-1;302 props->max_fast_reg_page_list_len = (unsigned int)-1;
303 props->local_ca_ack_delay = dev->mdev.caps.local_ca_ack_delay;303 props->local_ca_ack_delay = dev->mdev.caps.local_ca_ack_delay;
304 props->atomic_cap = dev->mdev.caps.flags & MLX5_DEV_CAP_FLAG_ATOMIC ?304 props->atomic_cap = IB_ATOMIC_NONE;
305 IB_ATOMIC_HCA : IB_ATOMIC_NONE;305 props->masked_atomic_cap = IB_ATOMIC_NONE;
306 props->masked_atomic_cap = IB_ATOMIC_HCA;
307 props->max_pkeys = be16_to_cpup((__be16 *)(out_mad->data + 28));306 props->max_pkeys = be16_to_cpup((__be16 *)(out_mad->data + 28));
308 props->max_mcast_grp = 1 << dev->mdev.caps.log_max_mcg;307 props->max_mcast_grp = 1 << dev->mdev.caps.log_max_mcg;
309 props->max_mcast_qp_attach = dev->mdev.caps.max_qp_mcg;308 props->max_mcast_qp_attach = dev->mdev.caps.max_qp_mcg;
@@ -1006,6 +1005,11 @@ static void mlx5_ib_event(struct mlx5_core_dev *dev, enum mlx5_dev_event event, · 696 unmodified lines
1006 ibev.device = &ibdev->ib_dev;1005 ibev.device = &ibdev->ib_dev;
1007 ibev.element.port_num = port;1006 ibev.element.port_num = port;
1008 1007
1008 if (port < 1 || port > ibdev->num_ports) {
1009 mlx5_ib_warn(ibdev, "warning: event on port %d\n", port);
1010 return;
1011 }
1012
1009 if (ibdev->ib_active)1013 if (ibdev->ib_active)
1010 ib_dispatch_event(&ibev);1014 ib_dispatch_event(&ibev);
1011}1015}
drivers/infiniband/hw/mlx5/mr.c+33−37
@@ -42,6 +42,10 @@ enum { · 41 unmodified lines
42 DEF_CACHE_SIZE = 10,42 DEF_CACHE_SIZE = 10,
43};43};
44 44
45enum {
46 MLX5_UMR_ALIGN = 2048
47};
48
45static __be64 *mr_align(__be64 *ptr, int align)49static __be64 *mr_align(__be64 *ptr, int align)
46{50{
47 unsigned long mask = align - 1;51 unsigned long mask = align - 1;
@@ -61,13 +65,11 @@ static int order2idx(struct mlx5_ib_dev *dev, int order) · 13 unmodified lines
61 65
62static int add_keys(struct mlx5_ib_dev *dev, int c, int num)66static int add_keys(struct mlx5_ib_dev *dev, int c, int num)
63{67{
64 struct device *ddev = dev->ib_dev.dma_device;
65 struct mlx5_mr_cache *cache = &dev->cache;68 struct mlx5_mr_cache *cache = &dev->cache;
66 struct mlx5_cache_ent *ent = &cache->ent[c];69 struct mlx5_cache_ent *ent = &cache->ent[c];
67 struct mlx5_create_mkey_mbox_in *in;70 struct mlx5_create_mkey_mbox_in *in;
68 struct mlx5_ib_mr *mr;71 struct mlx5_ib_mr *mr;
69 int npages = 1 << ent->order;72 int npages = 1 << ent->order;
70 int size = sizeof(u64) * npages;
71 int err = 0;73 int err = 0;
72 int i;74 int i;
73 75
@@ -83,21 +85,6 @@ static int add_keys(struct mlx5_ib_dev *dev, int c, int num) · 9 unmodified lines
83 }85 }
84 mr->order = ent->order;86 mr->order = ent->order;
85 mr->umred = 1;87 mr->umred = 1;
86 mr->pas = kmalloc(size + 0x3f, GFP_KERNEL);
87 if (!mr->pas) {
88 kfree(mr);
89 err = -ENOMEM;
90 goto out;
91 }
92 mr->dma = dma_map_single(ddev, mr_align(mr->pas, 0x40), size,
93 DMA_TO_DEVICE);
94 if (dma_mapping_error(ddev, mr->dma)) {
95 kfree(mr->pas);
96 kfree(mr);
97 err = -ENOMEM;
98 goto out;
99 }
100
101 in->seg.status = 1 << 6;88 in->seg.status = 1 << 6;
102 in->seg.xlt_oct_size = cpu_to_be32((npages + 1) / 2);89 in->seg.xlt_oct_size = cpu_to_be32((npages + 1) / 2);
103 in->seg.qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);90 in->seg.qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
@@ -108,8 +95,6 @@ static int add_keys(struct mlx5_ib_dev *dev, int c, int num) · 4 unmodified lines
108 sizeof(*in));95 sizeof(*in));
109 if (err) {96 if (err) {
110 mlx5_ib_warn(dev, "create mkey failed %d\n", err);97 mlx5_ib_warn(dev, "create mkey failed %d\n", err);
111 dma_unmap_single(ddev, mr->dma, size, DMA_TO_DEVICE);
112 kfree(mr->pas);
113 kfree(mr);98 kfree(mr);
114 goto out;99 goto out;
115 }100 }
@@ -129,11 +114,9 @@ out: · 13 unmodified lines
129 114
130static void remove_keys(struct mlx5_ib_dev *dev, int c, int num)115static void remove_keys(struct mlx5_ib_dev *dev, int c, int num)
131{116{
132 struct device *ddev = dev->ib_dev.dma_device;
133 struct mlx5_mr_cache *cache = &dev->cache;117 struct mlx5_mr_cache *cache = &dev->cache;
134 struct mlx5_cache_ent *ent = &cache->ent[c];118 struct mlx5_cache_ent *ent = &cache->ent[c];
135 struct mlx5_ib_mr *mr;119 struct mlx5_ib_mr *mr;
136 int size;
137 int err;120 int err;
138 int i;121 int i;
139 122
@@ -149,14 +132,10 @@ static void remove_keys(struct mlx5_ib_dev *dev, int c, int num) · 9 unmodified lines
149 ent->size--;132 ent->size--;
150 spin_unlock(&ent->lock);133 spin_unlock(&ent->lock);
151 err = mlx5_core_destroy_mkey(&dev->mdev, &mr->mmr);134 err = mlx5_core_destroy_mkey(&dev->mdev, &mr->mmr);
152 if (err) {135 if (err)
153 mlx5_ib_warn(dev, "failed destroy mkey\n");136 mlx5_ib_warn(dev, "failed destroy mkey\n");
154 } else {137 else
155 size = ALIGN(sizeof(u64) * (1 << mr->order), 0x40);
156 dma_unmap_single(ddev, mr->dma, size, DMA_TO_DEVICE);
157 kfree(mr->pas);
158 kfree(mr);138 kfree(mr);
159 }
160 }139 }
161}140}
162 141
@@ -408,13 +387,12 @@ static void free_cached_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr) · 245 unmodified lines
408 387
409static void clean_keys(struct mlx5_ib_dev *dev, int c)388static void clean_keys(struct mlx5_ib_dev *dev, int c)
410{389{
411 struct device *ddev = dev->ib_dev.dma_device;
412 struct mlx5_mr_cache *cache = &dev->cache;390 struct mlx5_mr_cache *cache = &dev->cache;
413 struct mlx5_cache_ent *ent = &cache->ent[c];391 struct mlx5_cache_ent *ent = &cache->ent[c];
414 struct mlx5_ib_mr *mr;392 struct mlx5_ib_mr *mr;
415 int size;
416 int err;393 int err;
417 394
395 cancel_delayed_work(&ent->dwork);
418 while (1) {396 while (1) {
419 spin_lock(&ent->lock);397 spin_lock(&ent->lock);
420 if (list_empty(&ent->head)) {398 if (list_empty(&ent->head)) {
@@ -427,14 +405,10 @@ static void clean_keys(struct mlx5_ib_dev *dev, int c) · 6 unmodified lines
427 ent->size--;405 ent->size--;
428 spin_unlock(&ent->lock);406 spin_unlock(&ent->lock);
429 err = mlx5_core_destroy_mkey(&dev->mdev, &mr->mmr);407 err = mlx5_core_destroy_mkey(&dev->mdev, &mr->mmr);
430 if (err) {408 if (err)
431 mlx5_ib_warn(dev, "failed destroy mkey\n");409 mlx5_ib_warn(dev, "failed destroy mkey\n");
432 } else {410 else
433 size = ALIGN(sizeof(u64) * (1 << mr->order), 0x40);
434 dma_unmap_single(ddev, mr->dma, size, DMA_TO_DEVICE);
435 kfree(mr->pas);
436 kfree(mr);411 kfree(mr);
437 }
438 }412 }
439}413}
440 414
@@ -540,13 +514,15 @@ int mlx5_mr_cache_cleanup(struct mlx5_ib_dev *dev) · 99 unmodified lines
540 int i;514 int i;
541 515
542 dev->cache.stopped = 1;516 dev->cache.stopped = 1;
543 destroy_workqueue(dev->cache.wq);517 flush_workqueue(dev->cache.wq);
544 518
545 mlx5_mr_cache_debugfs_cleanup(dev);519 mlx5_mr_cache_debugfs_cleanup(dev);
546 520
547 for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++)521 for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++)
548 clean_keys(dev, i);522 clean_keys(dev, i);
549 523
524 destroy_workqueue(dev->cache.wq);
525
550 return 0;526 return 0;
551}527}
552 528
@@ -675,10 +651,12 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem, · 122 unmodified lines
675 int page_shift, int order, int access_flags)651 int page_shift, int order, int access_flags)
676{652{
677 struct mlx5_ib_dev *dev = to_mdev(pd->device);653 struct mlx5_ib_dev *dev = to_mdev(pd->device);
654 struct device *ddev = dev->ib_dev.dma_device;
678 struct umr_common *umrc = &dev->umrc;655 struct umr_common *umrc = &dev->umrc;
679 struct ib_send_wr wr, *bad;656 struct ib_send_wr wr, *bad;
680 struct mlx5_ib_mr *mr;657 struct mlx5_ib_mr *mr;
681 struct ib_sge sg;658 struct ib_sge sg;
659 int size = sizeof(u64) * npages;
682 int err;660 int err;
683 int i;661 int i;
684 662
@@ -697,7 +675,22 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem, · 12 unmodified lines
697 if (!mr)675 if (!mr)
698 return ERR_PTR(-EAGAIN);676 return ERR_PTR(-EAGAIN);
699 677
700 mlx5_ib_populate_pas(dev, umem, page_shift, mr_align(mr->pas, 0x40), 1);678 mr->pas = kmalloc(size + MLX5_UMR_ALIGN - 1, GFP_KERNEL);
679 if (!mr->pas) {
680 err = -ENOMEM;
681 goto error;
682 }
683
684 mlx5_ib_populate_pas(dev, umem, page_shift,
685 mr_align(mr->pas, MLX5_UMR_ALIGN), 1);
686
687 mr->dma = dma_map_single(ddev, mr_align(mr->pas, MLX5_UMR_ALIGN), size,
688 DMA_TO_DEVICE);
689 if (dma_mapping_error(ddev, mr->dma)) {
690 kfree(mr->pas);
691 err = -ENOMEM;
692 goto error;
693 }
701 694
702 memset(&wr, 0, sizeof(wr));695 memset(&wr, 0, sizeof(wr));
703 wr.wr_id = (u64)(unsigned long)mr;696 wr.wr_id = (u64)(unsigned long)mr;
@@ -718,6 +711,9 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem, · 14 unmodified lines
718 wait_for_completion(&mr->done);711 wait_for_completion(&mr->done);
719 up(&umrc->sem);712 up(&umrc->sem);
720 713
714 dma_unmap_single(ddev, mr->dma, size, DMA_TO_DEVICE);
715 kfree(mr->pas);
716
721 if (mr->status != IB_WC_SUCCESS) {717 if (mr->status != IB_WC_SUCCESS) {
722 mlx5_ib_warn(dev, "reg umr failed\n");718 mlx5_ib_warn(dev, "reg umr failed\n");
723 err = -EFAULT;719 err = -EFAULT;
drivers/infiniband/hw/mlx5/qp.c+30−50
@@ -203,7 +203,7 @@ static int sq_overhead(enum ib_qp_type qp_type) · 202 unmodified lines
203 203
204 switch (qp_type) {204 switch (qp_type) {
205 case IB_QPT_XRC_INI:205 case IB_QPT_XRC_INI:
206 size = sizeof(struct mlx5_wqe_xrc_seg);206 size += sizeof(struct mlx5_wqe_xrc_seg);
207 /* fall through */207 /* fall through */
208 case IB_QPT_RC:208 case IB_QPT_RC:
209 size += sizeof(struct mlx5_wqe_ctrl_seg) +209 size += sizeof(struct mlx5_wqe_ctrl_seg) +
@@ -211,20 +211,23 @@ static int sq_overhead(enum ib_qp_type qp_type) · 1 unmodified line
211 sizeof(struct mlx5_wqe_raddr_seg);211 sizeof(struct mlx5_wqe_raddr_seg);
212 break;212 break;
213 213
214 case IB_QPT_XRC_TGT:
215 return 0;
216
214 case IB_QPT_UC:217 case IB_QPT_UC:
215 size = sizeof(struct mlx5_wqe_ctrl_seg) +218 size += sizeof(struct mlx5_wqe_ctrl_seg) +
216 sizeof(struct mlx5_wqe_raddr_seg);219 sizeof(struct mlx5_wqe_raddr_seg);
217 break;220 break;
218 221
219 case IB_QPT_UD:222 case IB_QPT_UD:
220 case IB_QPT_SMI:223 case IB_QPT_SMI:
221 case IB_QPT_GSI:224 case IB_QPT_GSI:
222 size = sizeof(struct mlx5_wqe_ctrl_seg) +225 size += sizeof(struct mlx5_wqe_ctrl_seg) +
223 sizeof(struct mlx5_wqe_datagram_seg);226 sizeof(struct mlx5_wqe_datagram_seg);
224 break;227 break;
225 228
226 case MLX5_IB_QPT_REG_UMR:229 case MLX5_IB_QPT_REG_UMR:
227 size = sizeof(struct mlx5_wqe_ctrl_seg) +230 size += sizeof(struct mlx5_wqe_ctrl_seg) +
228 sizeof(struct mlx5_wqe_umr_ctrl_seg) +231 sizeof(struct mlx5_wqe_umr_ctrl_seg) +
229 sizeof(struct mlx5_mkey_seg);232 sizeof(struct mlx5_mkey_seg);
230 break;233 break;
@@ -270,7 +273,8 @@ static int calc_sq_size(struct mlx5_ib_dev *dev, struct ib_qp_init_attr *attr, · 39 unmodified lines
270 return wqe_size;273 return wqe_size;
271 274
272 if (wqe_size > dev->mdev.caps.max_sq_desc_sz) {275 if (wqe_size > dev->mdev.caps.max_sq_desc_sz) {
273 mlx5_ib_dbg(dev, "\n");276 mlx5_ib_dbg(dev, "wqe_size(%d) > max_sq_desc_sz(%d)\n",
277 wqe_size, dev->mdev.caps.max_sq_desc_sz);
274 return -EINVAL;278 return -EINVAL;
275 }279 }
276 280
@@ -280,9 +284,15 @@ static int calc_sq_size(struct mlx5_ib_dev *dev, struct ib_qp_init_attr *attr, · 3 unmodified lines
280 284
281 wq_size = roundup_pow_of_two(attr->cap.max_send_wr * wqe_size);285 wq_size = roundup_pow_of_two(attr->cap.max_send_wr * wqe_size);
282 qp->sq.wqe_cnt = wq_size / MLX5_SEND_WQE_BB;286 qp->sq.wqe_cnt = wq_size / MLX5_SEND_WQE_BB;
287 if (qp->sq.wqe_cnt > dev->mdev.caps.max_wqes) {
288 mlx5_ib_dbg(dev, "wqe count(%d) exceeds limits(%d)\n",
289 qp->sq.wqe_cnt, dev->mdev.caps.max_wqes);
290 return -ENOMEM;
291 }
283 qp->sq.wqe_shift = ilog2(MLX5_SEND_WQE_BB);292 qp->sq.wqe_shift = ilog2(MLX5_SEND_WQE_BB);
284 qp->sq.max_gs = attr->cap.max_send_sge;293 qp->sq.max_gs = attr->cap.max_send_sge;
285 qp->sq.max_post = 1 << ilog2(wq_size / wqe_size);294 qp->sq.max_post = wq_size / wqe_size;
295 attr->cap.max_send_wr = qp->sq.max_post;
286 296
287 return wq_size;297 return wq_size;
288}298}
@@ -1280,6 +1290,11 @@ static enum mlx5_qp_optpar opt_mask[MLX5_QP_NUM_STATE][MLX5_QP_NUM_STATE][MLX5_Q · 991 unmodified lines
1280 MLX5_QP_OPTPAR_Q_KEY,1290 MLX5_QP_OPTPAR_Q_KEY,
1281 [MLX5_QP_ST_MLX] = MLX5_QP_OPTPAR_PKEY_INDEX |1291 [MLX5_QP_ST_MLX] = MLX5_QP_OPTPAR_PKEY_INDEX |
1282 MLX5_QP_OPTPAR_Q_KEY,1292 MLX5_QP_OPTPAR_Q_KEY,
1293 [MLX5_QP_ST_XRC] = MLX5_QP_OPTPAR_ALT_ADDR_PATH |
1294 MLX5_QP_OPTPAR_RRE |
1295 MLX5_QP_OPTPAR_RAE |
1296 MLX5_QP_OPTPAR_RWE |
1297 MLX5_QP_OPTPAR_PKEY_INDEX,
1283 },1298 },
1284 },1299 },
1285 [MLX5_QP_STATE_RTR] = {1300 [MLX5_QP_STATE_RTR] = {
@@ -1314,6 +1329,11 @@ static enum mlx5_qp_optpar opt_mask[MLX5_QP_NUM_STATE][MLX5_QP_NUM_STATE][MLX5_Q · 28 unmodified lines
1314 [MLX5_QP_STATE_RTS] = {1329 [MLX5_QP_STATE_RTS] = {
1315 [MLX5_QP_ST_UD] = MLX5_QP_OPTPAR_Q_KEY,1330 [MLX5_QP_ST_UD] = MLX5_QP_OPTPAR_Q_KEY,
1316 [MLX5_QP_ST_MLX] = MLX5_QP_OPTPAR_Q_KEY,1331 [MLX5_QP_ST_MLX] = MLX5_QP_OPTPAR_Q_KEY,
1332 [MLX5_QP_ST_UC] = MLX5_QP_OPTPAR_RWE,
1333 [MLX5_QP_ST_RC] = MLX5_QP_OPTPAR_RNR_TIMEOUT |
1334 MLX5_QP_OPTPAR_RWE |
1335 MLX5_QP_OPTPAR_RAE |
1336 MLX5_QP_OPTPAR_RRE,
1317 },1337 },
1318 },1338 },
1319};1339};
@@ -1651,29 +1671,6 @@ static __always_inline void set_raddr_seg(struct mlx5_wqe_raddr_seg *rseg, · 331 unmodified lines
1651 rseg->reserved = 0;1671 rseg->reserved = 0;
1652}1672}
1653 1673
1654static void set_atomic_seg(struct mlx5_wqe_atomic_seg *aseg, struct ib_send_wr *wr)
1655{
1656 if (wr->opcode == IB_WR_ATOMIC_CMP_AND_SWP) {
1657 aseg->swap_add = cpu_to_be64(wr->wr.atomic.swap);
1658 aseg->compare = cpu_to_be64(wr->wr.atomic.compare_add);
1659 } else if (wr->opcode == IB_WR_MASKED_ATOMIC_FETCH_AND_ADD) {
1660 aseg->swap_add = cpu_to_be64(wr->wr.atomic.compare_add);
1661 aseg->compare = cpu_to_be64(wr->wr.atomic.compare_add_mask);
1662 } else {
1663 aseg->swap_add = cpu_to_be64(wr->wr.atomic.compare_add);
1664 aseg->compare = 0;
1665 }
1666}
1667
1668static void set_masked_atomic_seg(struct mlx5_wqe_masked_atomic_seg *aseg,
1669 struct ib_send_wr *wr)
1670{
1671 aseg->swap_add = cpu_to_be64(wr->wr.atomic.swap);
1672 aseg->swap_add_mask = cpu_to_be64(wr->wr.atomic.swap_mask);
1673 aseg->compare = cpu_to_be64(wr->wr.atomic.compare_add);
1674 aseg->compare_mask = cpu_to_be64(wr->wr.atomic.compare_add_mask);
1675}
1676
1677static void set_datagram_seg(struct mlx5_wqe_datagram_seg *dseg,1674static void set_datagram_seg(struct mlx5_wqe_datagram_seg *dseg,
1678 struct ib_send_wr *wr)1675 struct ib_send_wr *wr)
1679{1676{
@@ -2063,28 +2060,11 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, · 383 unmodified lines
2063 2060
2064 case IB_WR_ATOMIC_CMP_AND_SWP:2061 case IB_WR_ATOMIC_CMP_AND_SWP:
2065 case IB_WR_ATOMIC_FETCH_AND_ADD:2062 case IB_WR_ATOMIC_FETCH_AND_ADD:
2066 set_raddr_seg(seg, wr->wr.atomic.remote_addr,
2067 wr->wr.atomic.rkey);
2068 seg += sizeof(struct mlx5_wqe_raddr_seg);
2069
2070 set_atomic_seg(seg, wr);
2071 seg += sizeof(struct mlx5_wqe_atomic_seg);
2072
2073 size += (sizeof(struct mlx5_wqe_raddr_seg) +
2074 sizeof(struct mlx5_wqe_atomic_seg)) / 16;
2075 break;
2076
2077 case IB_WR_MASKED_ATOMIC_CMP_AND_SWP:2063 case IB_WR_MASKED_ATOMIC_CMP_AND_SWP:
2078 set_raddr_seg(seg, wr->wr.atomic.remote_addr,2064 mlx5_ib_warn(dev, "Atomic operations are not supported yet\n");
2079 wr->wr.atomic.rkey);2065 err = -ENOSYS;
2080 seg += sizeof(struct mlx5_wqe_raddr_seg);2066 *bad_wr = wr;
2081 2067 goto out;
2082 set_masked_atomic_seg(seg, wr);
2083 seg += sizeof(struct mlx5_wqe_masked_atomic_seg);
2084
2085 size += (sizeof(struct mlx5_wqe_raddr_seg) +
2086 sizeof(struct mlx5_wqe_masked_atomic_seg)) / 16;
2087 break;
2088 2068
2089 case IB_WR_LOCAL_INV:2069 case IB_WR_LOCAL_INV:
2090 next_fence = MLX5_FENCE_MODE_INITIATOR_SMALL;2070 next_fence = MLX5_FENCE_MODE_INITIATOR_SMALL;
drivers/infiniband/hw/mlx5/srq.c+3−1
@@ -295,7 +295,7 @@ struct ib_srq *mlx5_ib_create_srq(struct ib_pd *pd, · 294 unmodified lines
295 mlx5_vfree(in);295 mlx5_vfree(in);
296 if (err) {296 if (err) {
297 mlx5_ib_dbg(dev, "create SRQ failed, err %d\n", err);297 mlx5_ib_dbg(dev, "create SRQ failed, err %d\n", err);
298 goto err_srq;298 goto err_usr_kern_srq;
299 }299 }
300 300
301 mlx5_ib_dbg(dev, "create SRQ with srqn 0x%x\n", srq->msrq.srqn);301 mlx5_ib_dbg(dev, "create SRQ with srqn 0x%x\n", srq->msrq.srqn);
@@ -316,6 +316,8 @@ struct ib_srq *mlx5_ib_create_srq(struct ib_pd *pd, · 14 unmodified lines
316 316
317err_core:317err_core:
318 mlx5_core_destroy_srq(&dev->mdev, &srq->msrq);318 mlx5_core_destroy_srq(&dev->mdev, &srq->msrq);
319
320err_usr_kern_srq:
319 if (pd->uobject)321 if (pd->uobject)
320 destroy_srq_user(pd, srq);322 destroy_srq_user(pd, srq);
321 else323 else
drivers/infiniband/hw/mthca/mthca_eq.c+1−1
@@ -357,7 +357,7 @@ static int mthca_eq_int(struct mthca_dev *dev, struct mthca_eq *eq) · 356 unmodified lines
357 mthca_warn(dev, "Unhandled event %02x(%02x) on EQ %d\n",357 mthca_warn(dev, "Unhandled event %02x(%02x) on EQ %d\n",
358 eqe->type, eqe->subtype, eq->eqn);358 eqe->type, eqe->subtype, eq->eqn);
359 break;359 break;
360 };360 }
361 361
362 set_eqe_hw(eqe);362 set_eqe_hw(eqe);
363 ++eq->cons_index;363 ++eq->cons_index;
drivers/infiniband/hw/ocrdma/ocrdma_hw.c+3−3
@@ -150,7 +150,7 @@ enum ib_qp_state get_ibqp_state(enum ocrdma_qp_state qps) · 149 unmodified lines
150 return IB_QPS_SQE;150 return IB_QPS_SQE;
151 case OCRDMA_QPS_ERR:151 case OCRDMA_QPS_ERR:
152 return IB_QPS_ERR;152 return IB_QPS_ERR;
153 };153 }
154 return IB_QPS_ERR;154 return IB_QPS_ERR;
155}155}
156 156
@@ -171,7 +171,7 @@ static enum ocrdma_qp_state get_ocrdma_qp_state(enum ib_qp_state qps) · 14 unmodified lines
171 return OCRDMA_QPS_SQE;171 return OCRDMA_QPS_SQE;
172 case IB_QPS_ERR:172 case IB_QPS_ERR:
173 return OCRDMA_QPS_ERR;173 return OCRDMA_QPS_ERR;
174 };174 }
175 return OCRDMA_QPS_ERR;175 return OCRDMA_QPS_ERR;
176}176}
177 177
@@ -1982,7 +1982,7 @@ int ocrdma_mbx_create_qp(struct ocrdma_qp *qp, struct ib_qp_init_attr *attrs, · 1804 unmodified lines
1982 break;1982 break;
1983 default:1983 default:
1984 return -EINVAL;1984 return -EINVAL;
1985 };1985 }
1986 1986
1987 cmd = ocrdma_init_emb_mqe(OCRDMA_CMD_CREATE_QP, sizeof(*cmd));1987 cmd = ocrdma_init_emb_mqe(OCRDMA_CMD_CREATE_QP, sizeof(*cmd));
1988 if (!cmd)1988 if (!cmd)
drivers/infiniband/hw/ocrdma/ocrdma_main.c+1−1
@@ -531,7 +531,7 @@ static void ocrdma_event_handler(struct ocrdma_dev *dev, u32 event) · 530 unmodified lines
531 case BE_DEV_DOWN:531 case BE_DEV_DOWN:
532 ocrdma_close(dev);532 ocrdma_close(dev);
533 break;533 break;
534 };534 }
535}535}
536 536
537static struct ocrdma_driver ocrdma_drv = {537static struct ocrdma_driver ocrdma_drv = {
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c+3−3
@@ -141,7 +141,7 @@ static inline void get_link_speed_and_width(struct ocrdma_dev *dev, · 140 unmodified lines
141 /* Unsupported */141 /* Unsupported */
142 *ib_speed = IB_SPEED_SDR;142 *ib_speed = IB_SPEED_SDR;
143 *ib_width = IB_WIDTH_1X;143 *ib_width = IB_WIDTH_1X;
144 };144 }
145}145}
146 146
147 147
@@ -2331,7 +2331,7 @@ static enum ib_wc_status ocrdma_to_ibwc_err(u16 status) · 2183 unmodified lines
2331 default:2331 default:
2332 ibwc_status = IB_WC_GENERAL_ERR;2332 ibwc_status = IB_WC_GENERAL_ERR;
2333 break;2333 break;
2334 };2334 }
2335 return ibwc_status;2335 return ibwc_status;
2336}2336}
2337 2337
@@ -2370,7 +2370,7 @@ static void ocrdma_update_wc(struct ocrdma_qp *qp, struct ib_wc *ibwc, · 32 unmodified lines
2370 pr_err("%s() invalid opcode received = 0x%x\n",2370 pr_err("%s() invalid opcode received = 0x%x\n",
2371 __func__, hdr->cw & OCRDMA_WQE_OPCODE_MASK);2371 __func__, hdr->cw & OCRDMA_WQE_OPCODE_MASK);
2372 break;2372 break;
2373 };2373 }
2374}2374}
2375 2375
2376static void ocrdma_set_cqe_status_flushed(struct ocrdma_qp *qp,2376static void ocrdma_set_cqe_status_flushed(struct ocrdma_qp *qp,
drivers/infiniband/ulp/srpt/ib_srpt.c+6−8
@@ -1588,7 +1588,7 @@ static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch, · 1587 unmodified lines
1588 int resp_data_len;1588 int resp_data_len;
1589 int resp_len;1589 int resp_len;
1590 1590
1591 resp_data_len = (rsp_code == SRP_TSK_MGMT_SUCCESS) ? 0 : 4;1591 resp_data_len = 4;
1592 resp_len = sizeof(*srp_rsp) + resp_data_len;1592 resp_len = sizeof(*srp_rsp) + resp_data_len;
1593 1593
1594 srp_rsp = ioctx->ioctx.buf;1594 srp_rsp = ioctx->ioctx.buf;
@@ -1600,11 +1600,9 @@ static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch, · 5 unmodified lines
1600 + atomic_xchg(&ch->req_lim_delta, 0));1600 + atomic_xchg(&ch->req_lim_delta, 0));
1601 srp_rsp->tag = tag;1601 srp_rsp->tag = tag;
1602 1602
1603 if (rsp_code != SRP_TSK_MGMT_SUCCESS) {1603 srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID;
1604 srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID;1604 srp_rsp->resp_data_len = cpu_to_be32(resp_data_len);
1605 srp_rsp->resp_data_len = cpu_to_be32(resp_data_len);1605 srp_rsp->data[3] = rsp_code;
1606 srp_rsp->data[3] = rsp_code;
1607 }
1608 1606
1609 return resp_len;1607 return resp_len;
1610}1608}
@@ -2358,6 +2356,8 @@ static void srpt_release_channel_work(struct work_struct *w) · 747 unmodified lines
2358 transport_deregister_session(se_sess);2356 transport_deregister_session(se_sess);
2359 ch->sess = NULL;2357 ch->sess = NULL;
2360 2358
2359 ib_destroy_cm_id(ch->cm_id);
2360
2361 srpt_destroy_ch_ib(ch);2361 srpt_destroy_ch_ib(ch);
2362 2362
2363 srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring,2363 srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring,
@@ -2368,8 +2368,6 @@ static void srpt_release_channel_work(struct work_struct *w) · 4 unmodified lines
2368 list_del(&ch->list);2368 list_del(&ch->list);
2369 spin_unlock_irq(&sdev->spinlock);2369 spin_unlock_irq(&sdev->spinlock);
2370 2370
2371 ib_destroy_cm_id(ch->cm_id);
2372
2373 if (ch->release_done)2371 if (ch->release_done)
2374 complete(ch->release_done);2372 complete(ch->release_done);
2375 2373
drivers/iommu/Kconfig+1−1
@@ -52,7 +52,7 @@ config AMD_IOMMU · 51 unmodified lines
52 select PCI_PRI52 select PCI_PRI
53 select PCI_PASID53 select PCI_PASID
54 select IOMMU_API54 select IOMMU_API
55 depends on X86_64 && PCI && ACPI && X86_IO_APIC55 depends on X86_64 && PCI && ACPI
56 ---help---56 ---help---
57 With this option you can enable support for AMD IOMMU hardware in57 With this option you can enable support for AMD IOMMU hardware in
58 your system. An IOMMU is a hardware component which provides58 your system. An IOMMU is a hardware component which provides
drivers/iommu/arm-smmu.c+7−6
@@ -377,6 +377,7 @@ struct arm_smmu_cfg { · 376 unmodified lines
377 u32 cbar;377 u32 cbar;
378 pgd_t *pgd;378 pgd_t *pgd;
379};379};
380#define INVALID_IRPTNDX 0xff
380 381
381#define ARM_SMMU_CB_ASID(cfg) ((cfg)->cbndx)382#define ARM_SMMU_CB_ASID(cfg) ((cfg)->cbndx)
382#define ARM_SMMU_CB_VMID(cfg) ((cfg)->cbndx + 1)383#define ARM_SMMU_CB_VMID(cfg) ((cfg)->cbndx + 1)
@@ -840,7 +841,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, · 457 unmodified lines
840 if (IS_ERR_VALUE(ret)) {841 if (IS_ERR_VALUE(ret)) {
841 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",842 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
842 root_cfg->irptndx, irq);843 root_cfg->irptndx, irq);
843 root_cfg->irptndx = -1;844 root_cfg->irptndx = INVALID_IRPTNDX;
844 goto out_free_context;845 goto out_free_context;
845 }846 }
846 847
@@ -869,7 +870,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) · 22 unmodified lines
869 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);870 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
870 arm_smmu_tlb_inv_context(root_cfg);871 arm_smmu_tlb_inv_context(root_cfg);
871 872
872 if (root_cfg->irptndx != -1) {873 if (root_cfg->irptndx != INVALID_IRPTNDX) {
873 irq = smmu->irqs[smmu->num_global_irqs + root_cfg->irptndx];874 irq = smmu->irqs[smmu->num_global_irqs + root_cfg->irptndx];
874 free_irq(irq, domain);875 free_irq(irq, domain);
875 }876 }
@@ -1857,8 +1858,6 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) · 981 unmodified lines
1857 goto out_put_parent;1858 goto out_put_parent;
1858 }1859 }
1859 1860
1860 arm_smmu_device_reset(smmu);
1861
1862 for (i = 0; i < smmu->num_global_irqs; ++i) {1861 for (i = 0; i < smmu->num_global_irqs; ++i) {
1863 err = request_irq(smmu->irqs[i],1862 err = request_irq(smmu->irqs[i],
1864 arm_smmu_global_fault,1863 arm_smmu_global_fault,
@@ -1876,6 +1875,8 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) · 11 unmodified lines
1876 spin_lock(&arm_smmu_devices_lock);1875 spin_lock(&arm_smmu_devices_lock);
1877 list_add(&smmu->list, &arm_smmu_devices);1876 list_add(&smmu->list, &arm_smmu_devices);
1878 spin_unlock(&arm_smmu_devices_lock);1877 spin_unlock(&arm_smmu_devices_lock);
1878
1879 arm_smmu_device_reset(smmu);
1879 return 0;1880 return 0;
1880 1881
1881out_free_irqs:1882out_free_irqs:
@@ -1966,10 +1967,10 @@ static int __init arm_smmu_init(void) · 84 unmodified lines
1966 return ret;1967 return ret;
1967 1968
1968 /* Oh, for a proper bus abstraction */1969 /* Oh, for a proper bus abstraction */
1969 if (!iommu_present(&platform_bus_type));1970 if (!iommu_present(&platform_bus_type))
1970 bus_set_iommu(&platform_bus_type, &arm_smmu_ops);1971 bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
1971 1972
1972 if (!iommu_present(&amba_bustype));1973 if (!iommu_present(&amba_bustype))
1973 bus_set_iommu(&amba_bustype, &arm_smmu_ops);1974 bus_set_iommu(&amba_bustype, &arm_smmu_ops);
1974 1975
1975 return 0;1976 return 0;
drivers/md/bcache/request.c+2−3
@@ -996,10 +996,11 @@ static void request_write(struct cached_dev *dc, struct search *s) · 995 unmodified lines
996 closure_bio_submit(bio, cl, s->d);996 closure_bio_submit(bio, cl, s->d);
997 } else {997 } else {
998 bch_writeback_add(dc);998 bch_writeback_add(dc);
999 s->op.cache_bio = bio;
999 1000
1000 if (bio->bi_rw & REQ_FLUSH) {1001 if (bio->bi_rw & REQ_FLUSH) {
1001 /* Also need to send a flush to the backing device */1002 /* Also need to send a flush to the backing device */
1002 struct bio *flush = bio_alloc_bioset(0, GFP_NOIO,1003 struct bio *flush = bio_alloc_bioset(GFP_NOIO, 0,
1003 dc->disk.bio_split);1004 dc->disk.bio_split);
1004 1005
1005 flush->bi_rw = WRITE_FLUSH;1006 flush->bi_rw = WRITE_FLUSH;
@@ -1008,8 +1009,6 @@ static void request_write(struct cached_dev *dc, struct search *s) · 2 unmodified lines
1008 flush->bi_private = cl;1009 flush->bi_private = cl;
1009 1010
1010 closure_bio_submit(flush, cl, s->d);1011 closure_bio_submit(flush, cl, s->d);
1011 } else {
1012 s->op.cache_bio = bio;
1013 }1012 }
1014 }1013 }
1015out:1014out:
drivers/md/dm-snap-persistent.c+12−6
@@ -269,6 +269,14 @@ static chunk_t area_location(struct pstore *ps, chunk_t area) · 268 unmodified lines
269 return NUM_SNAPSHOT_HDR_CHUNKS + ((ps->exceptions_per_area + 1) * area);269 return NUM_SNAPSHOT_HDR_CHUNKS + ((ps->exceptions_per_area + 1) * area);
270}270}
271 271
272static void skip_metadata(struct pstore *ps)
273{
274 uint32_t stride = ps->exceptions_per_area + 1;
275 chunk_t next_free = ps->next_free;
276 if (sector_div(next_free, stride) == NUM_SNAPSHOT_HDR_CHUNKS)
277 ps->next_free++;
278}
279
272/*280/*
273 * Read or write a metadata area. Remembering to skip the first281 * Read or write a metadata area. Remembering to skip the first
274 * chunk which holds the header.282 * chunk which holds the header.
@@ -502,6 +510,8 @@ static int read_exceptions(struct pstore *ps, · 227 unmodified lines
502 510
503 ps->current_area--;511 ps->current_area--;
504 512
513 skip_metadata(ps);
514
505 return 0;515 return 0;
506}516}
507 517
@@ -616,8 +626,6 @@ static int persistent_prepare_exception(struct dm_exception_store *store, · 108 unmodified lines
616 struct dm_exception *e)626 struct dm_exception *e)
617{627{
618 struct pstore *ps = get_info(store);628 struct pstore *ps = get_info(store);
619 uint32_t stride;
620 chunk_t next_free;
621 sector_t size = get_dev_size(dm_snap_cow(store->snap)->bdev);629 sector_t size = get_dev_size(dm_snap_cow(store->snap)->bdev);
622 630
623 /* Is there enough room ? */631 /* Is there enough room ? */
@@ -630,10 +638,8 @@ static int persistent_prepare_exception(struct dm_exception_store *store, · 6 unmodified lines
630 * Move onto the next free pending, making sure to take638 * Move onto the next free pending, making sure to take
631 * into account the location of the metadata chunks.639 * into account the location of the metadata chunks.
632 */640 */
633 stride = (ps->exceptions_per_area + 1);641 ps->next_free++;
634 next_free = ++ps->next_free;642 skip_metadata(ps);
635 if (sector_div(next_free, stride) == 1)
636 ps->next_free++;
637 643
638 atomic_inc(&ps->pending_count);644 atomic_inc(&ps->pending_count);
639 return 0;645 return 0;
drivers/media/dvb-frontends/tda10071.c+1−8
@@ -912,14 +912,8 @@ static int tda10071_init(struct dvb_frontend *fe) · 911 unmodified lines
912 { 0xd5, 0x03, 0x03 },912 { 0xd5, 0x03, 0x03 },
913 };913 };
914 914
915 /* firmware status */915 if (priv->warm) {
916 ret = tda10071_rd_reg(priv, 0x51, &tmp);
917 if (ret)
918 goto error;
919
920 if (!tmp) {
921 /* warm state - wake up device from sleep */916 /* warm state - wake up device from sleep */
922 priv->warm = 1;
923 917
924 for (i = 0; i < ARRAY_SIZE(tab); i++) {918 for (i = 0; i < ARRAY_SIZE(tab); i++) {
925 ret = tda10071_wr_reg_mask(priv, tab[i].reg,919 ret = tda10071_wr_reg_mask(priv, tab[i].reg,
@@ -937,7 +931,6 @@ static int tda10071_init(struct dvb_frontend *fe) · 11 unmodified lines
937 goto error;931 goto error;
938 } else {932 } else {
939 /* cold state - try to download firmware */933 /* cold state - try to download firmware */
940 priv->warm = 0;
941 934
942 /* request the firmware, this will block and timeout */935 /* request the firmware, this will block and timeout */
943 ret = request_firmware(&fw, fw_file, priv->i2c->dev.parent);936 ret = request_firmware(&fw, fw_file, priv->i2c->dev.parent);
drivers/media/i2c/ad9389b.c+6−9
@@ -628,16 +628,13 @@ static int ad9389b_s_stream(struct v4l2_subdev *sd, int enable) · 627 unmodified lines
628 628
629static const struct v4l2_dv_timings_cap ad9389b_timings_cap = {629static const struct v4l2_dv_timings_cap ad9389b_timings_cap = {
630 .type = V4L2_DV_BT_656_1120,630 .type = V4L2_DV_BT_656_1120,
631 .bt = {631 /* keep this initialization for compatibility with GCC < 4.4.6 */
632 .max_width = 1920,632 .reserved = { 0 },
633 .max_height = 1200,633 V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000,
634 .min_pixelclock = 25000000,634 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
635 .max_pixelclock = 170000000,
636 .standards = V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
637 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,635 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
638 .capabilities = V4L2_DV_BT_CAP_PROGRESSIVE |636 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
639 V4L2_DV_BT_CAP_REDUCED_BLANKING | V4L2_DV_BT_CAP_CUSTOM,637 V4L2_DV_BT_CAP_CUSTOM)
640 },
641};638};
642 639
643static int ad9389b_s_dv_timings(struct v4l2_subdev *sd,640static int ad9389b_s_dv_timings(struct v4l2_subdev *sd,
drivers/media/i2c/adv7511.c+9−9
@@ -119,16 +119,14 @@ static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq); · 118 unmodified lines
119 119
120static const struct v4l2_dv_timings_cap adv7511_timings_cap = {120static const struct v4l2_dv_timings_cap adv7511_timings_cap = {
121 .type = V4L2_DV_BT_656_1120,121 .type = V4L2_DV_BT_656_1120,
122 .bt = {122 /* keep this initialization for compatibility with GCC < 4.4.6 */
123 .max_width = ADV7511_MAX_WIDTH,123 .reserved = { 0 },
124 .max_height = ADV7511_MAX_HEIGHT,124 V4L2_INIT_BT_TIMINGS(0, ADV7511_MAX_WIDTH, 0, ADV7511_MAX_HEIGHT,
125 .min_pixelclock = ADV7511_MIN_PIXELCLOCK,125 ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK,
126 .max_pixelclock = ADV7511_MAX_PIXELCLOCK,126 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
127 .standards = V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
128 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,127 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
129 .capabilities = V4L2_DV_BT_CAP_PROGRESSIVE |128 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
130 V4L2_DV_BT_CAP_REDUCED_BLANKING | V4L2_DV_BT_CAP_CUSTOM,129 V4L2_DV_BT_CAP_CUSTOM)
131 },
132};130};
133 131
134static inline struct adv7511_state *get_adv7511_state(struct v4l2_subdev *sd)132static inline struct adv7511_state *get_adv7511_state(struct v4l2_subdev *sd)
@@ -1126,6 +1124,7 @@ static int adv7511_probe(struct i2c_client *client, const struct i2c_device_id * · 991 unmodified lines
1126 state->i2c_edid = i2c_new_dummy(client->adapter, state->i2c_edid_addr >> 1);1124 state->i2c_edid = i2c_new_dummy(client->adapter, state->i2c_edid_addr >> 1);
1127 if (state->i2c_edid == NULL) {1125 if (state->i2c_edid == NULL) {
1128 v4l2_err(sd, "failed to register edid i2c client\n");1126 v4l2_err(sd, "failed to register edid i2c client\n");
1127 err = -ENOMEM;
1129 goto err_entity;1128 goto err_entity;
1130 }1129 }
1131 1130
@@ -1133,6 +1132,7 @@ static int adv7511_probe(struct i2c_client *client, const struct i2c_device_id * · 1 unmodified line
1133 state->work_queue = create_singlethread_workqueue(sd->name);1132 state->work_queue = create_singlethread_workqueue(sd->name);
1134 if (state->work_queue == NULL) {1133 if (state->work_queue == NULL) {
1135 v4l2_err(sd, "could not create workqueue\n");1134 v4l2_err(sd, "could not create workqueue\n");
1135 err = -ENOMEM;
1136 goto err_unreg_cec;1136 goto err_unreg_cec;
1137 }1137 }
1138 1138
drivers/media/i2c/adv7842.c+12−18
@@ -546,30 +546,24 @@ static inline bool is_digital_input(struct v4l2_subdev *sd) · 545 unmodified lines
546 546
547static const struct v4l2_dv_timings_cap adv7842_timings_cap_analog = {547static const struct v4l2_dv_timings_cap adv7842_timings_cap_analog = {
548 .type = V4L2_DV_BT_656_1120,548 .type = V4L2_DV_BT_656_1120,
549 .bt = {549 /* keep this initialization for compatibility with GCC < 4.4.6 */
550 .max_width = 1920,550 .reserved = { 0 },
551 .max_height = 1200,551 V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000,
552 .min_pixelclock = 25000000,552 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
553 .max_pixelclock = 170000000,
554 .standards = V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
555 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,553 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
556 .capabilities = V4L2_DV_BT_CAP_PROGRESSIVE |554 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
557 V4L2_DV_BT_CAP_REDUCED_BLANKING | V4L2_DV_BT_CAP_CUSTOM,555 V4L2_DV_BT_CAP_CUSTOM)
558 },
559};556};
560 557
561static const struct v4l2_dv_timings_cap adv7842_timings_cap_digital = {558static const struct v4l2_dv_timings_cap adv7842_timings_cap_digital = {
562 .type = V4L2_DV_BT_656_1120,559 .type = V4L2_DV_BT_656_1120,
563 .bt = {560 /* keep this initialization for compatibility with GCC < 4.4.6 */
564 .max_width = 1920,561 .reserved = { 0 },
565 .max_height = 1200,562 V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000,
566 .min_pixelclock = 25000000,563 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
567 .max_pixelclock = 225000000,
568 .standards = V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
569 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,564 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
570 .capabilities = V4L2_DV_BT_CAP_PROGRESSIVE |565 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
571 V4L2_DV_BT_CAP_REDUCED_BLANKING | V4L2_DV_BT_CAP_CUSTOM,566 V4L2_DV_BT_CAP_CUSTOM)
572 },
573};567};
574 568
575static inline const struct v4l2_dv_timings_cap *569static inline const struct v4l2_dv_timings_cap *
drivers/media/i2c/ths8200.c+4−8
@@ -46,14 +46,10 @@ struct ths8200_state { · 45 unmodified lines
46 46
47static const struct v4l2_dv_timings_cap ths8200_timings_cap = {47static const struct v4l2_dv_timings_cap ths8200_timings_cap = {
48 .type = V4L2_DV_BT_656_1120,48 .type = V4L2_DV_BT_656_1120,
49 .bt = {49 /* keep this initialization for compatibility with GCC < 4.4.6 */
50 .max_width = 1920,50 .reserved = { 0 },
51 .max_height = 1080,51 V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1080, 25000000, 148500000,
52 .min_pixelclock = 25000000,52 V4L2_DV_BT_STD_CEA861, V4L2_DV_BT_CAP_PROGRESSIVE)
53 .max_pixelclock = 148500000,
54 .standards = V4L2_DV_BT_STD_CEA861,
55 .capabilities = V4L2_DV_BT_CAP_PROGRESSIVE,
56 },
57};53};
58 54
59static inline struct ths8200_state *to_state(struct v4l2_subdev *sd)55static inline struct ths8200_state *to_state(struct v4l2_subdev *sd)
drivers/media/pci/saa7134/saa7134-video.c+1−0
@@ -1455,6 +1455,7 @@ static int video_release(struct file *file) · 1454 unmodified lines
1455 1455
1456 /* stop video capture */1456 /* stop video capture */
1457 if (res_check(fh, RESOURCE_VIDEO)) {1457 if (res_check(fh, RESOURCE_VIDEO)) {
1458 pm_qos_remove_request(&dev->qos_request);
1458 videobuf_streamoff(&fh->cap);1459 videobuf_streamoff(&fh->cap);
1459 res_free(dev,fh,RESOURCE_VIDEO);1460 res_free(dev,fh,RESOURCE_VIDEO);
1460 }1461 }
drivers/media/platform/s5p-jpeg/jpeg-core.c+1−0
@@ -1423,6 +1423,7 @@ static int s5p_jpeg_probe(struct platform_device *pdev) · 1422 unmodified lines
1423 jpeg->vfd_decoder->release = video_device_release;1423 jpeg->vfd_decoder->release = video_device_release;
1424 jpeg->vfd_decoder->lock = &jpeg->lock;1424 jpeg->vfd_decoder->lock = &jpeg->lock;
1425 jpeg->vfd_decoder->v4l2_dev = &jpeg->v4l2_dev;1425 jpeg->vfd_decoder->v4l2_dev = &jpeg->v4l2_dev;
1426 jpeg->vfd_decoder->vfl_dir = VFL_DIR_M2M;
1426 1427
1427 ret = video_register_device(jpeg->vfd_decoder, VFL_TYPE_GRABBER, -1);1428 ret = video_register_device(jpeg->vfd_decoder, VFL_TYPE_GRABBER, -1);
1428 if (ret) {1429 if (ret) {
drivers/media/platform/sh_vou.c+1−1
@@ -776,7 +776,7 @@ static int sh_vou_try_fmt_vid_out(struct file *file, void *priv, · 775 unmodified lines
776 v4l_bound_align_image(&pix->width, 0, VOU_MAX_IMAGE_WIDTH, 1,776 v4l_bound_align_image(&pix->width, 0, VOU_MAX_IMAGE_WIDTH, 1,
777 &pix->height, 0, VOU_MAX_IMAGE_HEIGHT, 1, 0);777 &pix->height, 0, VOU_MAX_IMAGE_HEIGHT, 1, 0);
778 778
779 for (i = 0; ARRAY_SIZE(vou_fmt); i++)779 for (i = 0; i < ARRAY_SIZE(vou_fmt); i++)
780 if (vou_fmt[i].pfmt == pix->pixelformat)780 if (vou_fmt[i].pfmt == pix->pixelformat)
781 return 0;781 return 0;
782 782
drivers/media/platform/soc_camera/mx3_camera.c+2−3
@@ -266,7 +266,6 @@ static void mx3_videobuf_queue(struct vb2_buffer *vb) · 265 unmodified lines
266 struct idmac_channel *ichan = mx3_cam->idmac_channel[0];266 struct idmac_channel *ichan = mx3_cam->idmac_channel[0];
267 struct idmac_video_param *video = &ichan->params.video;267 struct idmac_video_param *video = &ichan->params.video;
268 const struct soc_mbus_pixelfmt *host_fmt = icd->current_fmt->host_fmt;268 const struct soc_mbus_pixelfmt *host_fmt = icd->current_fmt->host_fmt;
269 unsigned long flags;
270 dma_cookie_t cookie;269 dma_cookie_t cookie;
271 size_t new_size;270 size_t new_size;
272 271
@@ -328,7 +327,7 @@ static void mx3_videobuf_queue(struct vb2_buffer *vb) · 55 unmodified lines
328 memset(vb2_plane_vaddr(vb, 0), 0xaa, vb2_get_plane_payload(vb, 0));327 memset(vb2_plane_vaddr(vb, 0), 0xaa, vb2_get_plane_payload(vb, 0));
329#endif328#endif
330 329
331 spin_lock_irqsave(&mx3_cam->lock, flags);330 spin_lock_irq(&mx3_cam->lock);
332 list_add_tail(&buf->queue, &mx3_cam->capture);331 list_add_tail(&buf->queue, &mx3_cam->capture);
333 332
334 if (!mx3_cam->active)333 if (!mx3_cam->active)
@@ -351,7 +350,7 @@ static void mx3_videobuf_queue(struct vb2_buffer *vb) · 16 unmodified lines
351 if (mx3_cam->active == buf)350 if (mx3_cam->active == buf)
352 mx3_cam->active = NULL;351 mx3_cam->active = NULL;
353 352
354 spin_unlock_irqrestore(&mx3_cam->lock, flags);353 spin_unlock_irq(&mx3_cam->lock);
355error:354error:
356 vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);355 vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
357}356}
drivers/media/tuners/e4000.c+2−1
@@ -19,6 +19,7 @@ · 18 unmodified lines
19 */19 */
20 20
21#include "e4000_priv.h"21#include "e4000_priv.h"
22#include <linux/math64.h>
22 23
23/* write multiple registers */24/* write multiple registers */
24static int e4000_wr_regs(struct e4000_priv *priv, u8 reg, u8 *val, int len)25static int e4000_wr_regs(struct e4000_priv *priv, u8 reg, u8 *val, int len)
@@ -233,7 +234,7 @@ static int e4000_set_params(struct dvb_frontend *fe) · 208 unmodified lines
233 * or more.234 * or more.
234 */235 */
235 f_vco = c->frequency * e4000_pll_lut[i].mul;236 f_vco = c->frequency * e4000_pll_lut[i].mul;
236 sigma_delta = 0x10000UL * (f_vco % priv->cfg->clock) / priv->cfg->clock;237 sigma_delta = div_u64(0x10000ULL * (f_vco % priv->cfg->clock), priv->cfg->clock);
237 buf[0] = f_vco / priv->cfg->clock;238 buf[0] = f_vco / priv->cfg->clock;
238 buf[1] = (sigma_delta >> 0) & 0xff;239 buf[1] = (sigma_delta >> 0) & 0xff;
239 buf[2] = (sigma_delta >> 8) & 0xff;240 buf[2] = (sigma_delta >> 8) & 0xff;
drivers/media/usb/stkwebcam/stk-webcam.c+7−0
@@ -111,6 +111,13 @@ static const struct dmi_system_id stk_upside_down_dmi_table[] = { · 110 unmodified lines
111 DMI_MATCH(DMI_PRODUCT_NAME, "F3JC")111 DMI_MATCH(DMI_PRODUCT_NAME, "F3JC")
112 }112 }
113 },113 },
114 {
115 .ident = "T12Rg-H",
116 .matches = {
117 DMI_MATCH(DMI_SYS_VENDOR, "HCL Infosystems Limited"),
118 DMI_MATCH(DMI_PRODUCT_NAME, "T12Rg-H")
119 }
120 },
114 {}121 {}
115};122};
116 123
drivers/media/usb/uvc/uvc_driver.c+18−0
@@ -2090,6 +2090,15 @@ static struct usb_device_id uvc_ids[] = { · 2089 unmodified lines
2090 .bInterfaceSubClass = 1,2090 .bInterfaceSubClass = 1,
2091 .bInterfaceProtocol = 0,2091 .bInterfaceProtocol = 0,
2092 .driver_info = UVC_QUIRK_PROBE_MINMAX },2092 .driver_info = UVC_QUIRK_PROBE_MINMAX },
2093 /* Microsoft Lifecam NX-3000 */
2094 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2095 | USB_DEVICE_ID_MATCH_INT_INFO,
2096 .idVendor = 0x045e,
2097 .idProduct = 0x0721,
2098 .bInterfaceClass = USB_CLASS_VIDEO,
2099 .bInterfaceSubClass = 1,
2100 .bInterfaceProtocol = 0,
2101 .driver_info = UVC_QUIRK_PROBE_DEF },
2093 /* Microsoft Lifecam VX-7000 */2102 /* Microsoft Lifecam VX-7000 */
2094 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE2103 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2095 | USB_DEVICE_ID_MATCH_INT_INFO,2104 | USB_DEVICE_ID_MATCH_INT_INFO,
@@ -2174,6 +2183,15 @@ static struct usb_device_id uvc_ids[] = { · 78 unmodified lines
2174 .bInterfaceSubClass = 1,2183 .bInterfaceSubClass = 1,
2175 .bInterfaceProtocol = 0,2184 .bInterfaceProtocol = 0,
2176 .driver_info = UVC_QUIRK_PROBE_DEF },2185 .driver_info = UVC_QUIRK_PROBE_DEF },
2186 /* Dell SP2008WFP Monitor */
2187 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2188 | USB_DEVICE_ID_MATCH_INT_INFO,
2189 .idVendor = 0x05a9,
2190 .idProduct = 0x2641,
2191 .bInterfaceClass = USB_CLASS_VIDEO,
2192 .bInterfaceSubClass = 1,
2193 .bInterfaceProtocol = 0,
2194 .driver_info = UVC_QUIRK_PROBE_DEF },
2177 /* Dell Alienware X51 */2195 /* Dell Alienware X51 */
2178 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE2196 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2179 | USB_DEVICE_ID_MATCH_INT_INFO,2197 | USB_DEVICE_ID_MATCH_INT_INFO,
drivers/media/v4l2-core/videobuf2-core.c+3−1
@@ -353,7 +353,9 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b) · 352 unmodified lines
353 353
354 if (b->m.planes[plane].bytesused > length)354 if (b->m.planes[plane].bytesused > length)
355 return -EINVAL;355 return -EINVAL;
356 if (b->m.planes[plane].data_offset >=356
357 if (b->m.planes[plane].data_offset > 0 &&
358 b->m.planes[plane].data_offset >=
357 b->m.planes[plane].bytesused)359 b->m.planes[plane].bytesused)
358 return -EINVAL;360 return -EINVAL;
359 }361 }
drivers/media/v4l2-core/videobuf2-dma-contig.c+82−5
@@ -423,6 +423,39 @@ static inline int vma_is_io(struct vm_area_struct *vma) · 422 unmodified lines
423 return !!(vma->vm_flags & (VM_IO | VM_PFNMAP));423 return !!(vma->vm_flags & (VM_IO | VM_PFNMAP));
424}424}
425 425
426static int vb2_dc_get_user_pfn(unsigned long start, int n_pages,
427 struct vm_area_struct *vma, unsigned long *res)
428{
429 unsigned long pfn, start_pfn, prev_pfn;
430 unsigned int i;
431 int ret;
432
433 if (!vma_is_io(vma))
434 return -EFAULT;
435
436 ret = follow_pfn(vma, start, &pfn);
437 if (ret)
438 return ret;
439
440 start_pfn = pfn;
441 start += PAGE_SIZE;
442
443 for (i = 1; i < n_pages; ++i, start += PAGE_SIZE) {
444 prev_pfn = pfn;
445 ret = follow_pfn(vma, start, &pfn);
446
447 if (ret) {
448 pr_err("no page for address %lu\n", start);
449 return ret;
450 }
451 if (pfn != prev_pfn + 1)
452 return -EINVAL;
453 }
454
455 *res = start_pfn;
456 return 0;
457}
458
426static int vb2_dc_get_user_pages(unsigned long start, struct page **pages,459static int vb2_dc_get_user_pages(unsigned long start, struct page **pages,
427 int n_pages, struct vm_area_struct *vma, int write)460 int n_pages, struct vm_area_struct *vma, int write)
428{461{
@@ -433,6 +466,9 @@ static int vb2_dc_get_user_pages(unsigned long start, struct page **pages, · 4 unmodified lines
433 unsigned long pfn;466 unsigned long pfn;
434 int ret = follow_pfn(vma, start, &pfn);467 int ret = follow_pfn(vma, start, &pfn);
435 468
469 if (!pfn_valid(pfn))
470 return -EINVAL;
471
436 if (ret) {472 if (ret) {
437 pr_err("no page for address %lu\n", start);473 pr_err("no page for address %lu\n", start);
438 return ret;474 return ret;
@@ -468,16 +504,49 @@ static void vb2_dc_put_userptr(void *buf_priv) · 29 unmodified lines
468 struct vb2_dc_buf *buf = buf_priv;504 struct vb2_dc_buf *buf = buf_priv;
469 struct sg_table *sgt = buf->dma_sgt;505 struct sg_table *sgt = buf->dma_sgt;
470 506
471 dma_unmap_sg(buf->dev, sgt->sgl, sgt->orig_nents, buf->dma_dir);507 if (sgt) {
472 if (!vma_is_io(buf->vma))508 dma_unmap_sg(buf->dev, sgt->sgl, sgt->orig_nents, buf->dma_dir);
473 vb2_dc_sgt_foreach_page(sgt, vb2_dc_put_dirty_page);509 if (!vma_is_io(buf->vma))
510 vb2_dc_sgt_foreach_page(sgt, vb2_dc_put_dirty_page);
474 511
475 sg_free_table(sgt);512 sg_free_table(sgt);
476 kfree(sgt);513 kfree(sgt);
514 }
477 vb2_put_vma(buf->vma);515 vb2_put_vma(buf->vma);
478 kfree(buf);516 kfree(buf);
479}517}
480 518
519/*
520 * For some kind of reserved memory there might be no struct page available,
521 * so all that can be done to support such 'pages' is to try to convert
522 * pfn to dma address or at the last resort just assume that
523 * dma address == physical address (like it has been assumed in earlier version
524 * of videobuf2-dma-contig
525 */
526
527#ifdef __arch_pfn_to_dma
528static inline dma_addr_t vb2_dc_pfn_to_dma(struct device *dev, unsigned long pfn)
529{
530 return (dma_addr_t)__arch_pfn_to_dma(dev, pfn);
531}
532#elif defined(__pfn_to_bus)
533static inline dma_addr_t vb2_dc_pfn_to_dma(struct device *dev, unsigned long pfn)
534{
535 return (dma_addr_t)__pfn_to_bus(pfn);
536}
537#elif defined(__pfn_to_phys)
538static inline dma_addr_t vb2_dc_pfn_to_dma(struct device *dev, unsigned long pfn)
539{
540 return (dma_addr_t)__pfn_to_phys(pfn);
541}
542#else
543static inline dma_addr_t vb2_dc_pfn_to_dma(struct device *dev, unsigned long pfn)
544{
545 /* really, we cannot do anything better at this point */
546 return (dma_addr_t)(pfn) << PAGE_SHIFT;
547}
548#endif
549
481static void *vb2_dc_get_userptr(void *alloc_ctx, unsigned long vaddr,550static void *vb2_dc_get_userptr(void *alloc_ctx, unsigned long vaddr,
482 unsigned long size, int write)551 unsigned long size, int write)
483{552{
@@ -548,6 +617,14 @@ static void *vb2_dc_get_userptr(void *alloc_ctx, unsigned long vaddr, · 64 unmodified lines
548 /* extract page list from userspace mapping */617 /* extract page list from userspace mapping */
549 ret = vb2_dc_get_user_pages(start, pages, n_pages, vma, write);618 ret = vb2_dc_get_user_pages(start, pages, n_pages, vma, write);
550 if (ret) {619 if (ret) {
620 unsigned long pfn;
621 if (vb2_dc_get_user_pfn(start, n_pages, vma, &pfn) == 0) {
622 buf->dma_addr = vb2_dc_pfn_to_dma(buf->dev, pfn);
623 buf->size = size;
624 kfree(pages);
625 return buf;
626 }
627
551 pr_err("failed to get user pages\n");628 pr_err("failed to get user pages\n");
552 goto fail_vma;629 goto fail_vma;
553 }630 }
drivers/mmc/host/sh_mobile_sdhi.c+8−8
@@ -113,14 +113,14 @@ static const struct sh_mobile_sdhi_ops sdhi_ops = { · 112 unmodified lines
113};113};
114 114
115static const struct of_device_id sh_mobile_sdhi_of_match[] = {115static const struct of_device_id sh_mobile_sdhi_of_match[] = {
116 { .compatible = "renesas,shmobile-sdhi" },116 { .compatible = "renesas,sdhi-shmobile" },
117 { .compatible = "renesas,sh7372-sdhi" },117 { .compatible = "renesas,sdhi-sh7372" },
118 { .compatible = "renesas,sh73a0-sdhi", .data = &sh_mobile_sdhi_of_cfg[0], },118 { .compatible = "renesas,sdhi-sh73a0", .data = &sh_mobile_sdhi_of_cfg[0], },
119 { .compatible = "renesas,r8a73a4-sdhi", .data = &sh_mobile_sdhi_of_cfg[0], },119 { .compatible = "renesas,sdhi-r8a73a4", .data = &sh_mobile_sdhi_of_cfg[0], },
120 { .compatible = "renesas,r8a7740-sdhi", .data = &sh_mobile_sdhi_of_cfg[0], },120 { .compatible = "renesas,sdhi-r8a7740", .data = &sh_mobile_sdhi_of_cfg[0], },
121 { .compatible = "renesas,r8a7778-sdhi", .data = &sh_mobile_sdhi_of_cfg[0], },121 { .compatible = "renesas,sdhi-r8a7778", .data = &sh_mobile_sdhi_of_cfg[0], },
122 { .compatible = "renesas,r8a7779-sdhi", .data = &sh_mobile_sdhi_of_cfg[0], },122 { .compatible = "renesas,sdhi-r8a7779", .data = &sh_mobile_sdhi_of_cfg[0], },
123 { .compatible = "renesas,r8a7790-sdhi", .data = &sh_mobile_sdhi_of_cfg[0], },123 { .compatible = "renesas,sdhi-r8a7790", .data = &sh_mobile_sdhi_of_cfg[0], },
124 {},124 {},
125};125};
126MODULE_DEVICE_TABLE(of, sh_mobile_sdhi_of_match);126MODULE_DEVICE_TABLE(of, sh_mobile_sdhi_of_match);
drivers/mtd/devices/m25p80.c+15−2
@@ -168,12 +168,25 @@ static inline int write_disable(struct m25p *flash) · 167 unmodified lines
168 */168 */
169static inline int set_4byte(struct m25p *flash, u32 jedec_id, int enable)169static inline int set_4byte(struct m25p *flash, u32 jedec_id, int enable)
170{170{
171 int status;
172 bool need_wren = false;
173
171 switch (JEDEC_MFR(jedec_id)) {174 switch (JEDEC_MFR(jedec_id)) {
172 case CFI_MFR_MACRONIX:
173 case CFI_MFR_ST: /* Micron, actually */175 case CFI_MFR_ST: /* Micron, actually */
176 /* Some Micron need WREN command; all will accept it */
177 need_wren = true;
178 case CFI_MFR_MACRONIX:
174 case 0xEF /* winbond */:179 case 0xEF /* winbond */:
180 if (need_wren)
181 write_enable(flash);
182
175 flash->command[0] = enable ? OPCODE_EN4B : OPCODE_EX4B;183 flash->command[0] = enable ? OPCODE_EN4B : OPCODE_EX4B;
176 return spi_write(flash->spi, flash->command, 1);184 status = spi_write(flash->spi, flash->command, 1);
185
186 if (need_wren)
187 write_disable(flash);
188
189 return status;
177 default:190 default:
178 /* Spansion style */191 /* Spansion style */
179 flash->command[0] = OPCODE_BRWR;192 flash->command[0] = OPCODE_BRWR;
drivers/mtd/nand/nand_base.c+3−5
@@ -2869,10 +2869,8 @@ static int nand_flash_detect_ext_param_page(struct mtd_info *mtd, · 2868 unmodified lines
2869 2869
2870 len = le16_to_cpu(p->ext_param_page_length) * 16;2870 len = le16_to_cpu(p->ext_param_page_length) * 16;
2871 ep = kmalloc(len, GFP_KERNEL);2871 ep = kmalloc(len, GFP_KERNEL);
2872 if (!ep) {2872 if (!ep)
2873 ret = -ENOMEM;2873 return -ENOMEM;
2874 goto ext_out;
2875 }
2876 2874
2877 /* Send our own NAND_CMD_PARAM. */2875 /* Send our own NAND_CMD_PARAM. */
2878 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);2876 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
@@ -2920,7 +2918,7 @@ static int nand_flash_detect_ext_param_page(struct mtd_info *mtd, · 41 unmodified lines
2920 }2918 }
2921 2919
2922 pr_info("ONFI extended param page detected.\n");2920 pr_info("ONFI extended param page detected.\n");
2923 return 0;2921 ret = 0;
2924 2922
2925ext_out:2923ext_out:
2926 kfree(ep);2924 kfree(ep);
drivers/net/can/at91_can.c+2−2
@@ -1405,10 +1405,10 @@ static int at91_can_remove(struct platform_device *pdev) · 1404 unmodified lines
1405 1405
1406static const struct platform_device_id at91_can_id_table[] = {1406static const struct platform_device_id at91_can_id_table[] = {
1407 {1407 {
1408 .name = "at91_can",1408 .name = "at91sam9x5_can",
1409 .driver_data = (kernel_ulong_t)&at91_at91sam9x5_data,1409 .driver_data = (kernel_ulong_t)&at91_at91sam9x5_data,
1410 }, {1410 }, {
1411 .name = "at91sam9x5_can",1411 .name = "at91_can",
1412 .driver_data = (kernel_ulong_t)&at91_at91sam9263_data,1412 .driver_data = (kernel_ulong_t)&at91_at91sam9263_data,
1413 }, {1413 }, {
1414 /* sentinel */1414 /* sentinel */
drivers/net/can/flexcan.c+10−4
@@ -62,7 +62,7 @@ · 61 unmodified lines
62#define FLEXCAN_MCR_BCC BIT(16)62#define FLEXCAN_MCR_BCC BIT(16)
63#define FLEXCAN_MCR_LPRIO_EN BIT(13)63#define FLEXCAN_MCR_LPRIO_EN BIT(13)
64#define FLEXCAN_MCR_AEN BIT(12)64#define FLEXCAN_MCR_AEN BIT(12)
65#define FLEXCAN_MCR_MAXMB(x) ((x) & 0xf)65#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x1f)
66#define FLEXCAN_MCR_IDAM_A (0 << 8)66#define FLEXCAN_MCR_IDAM_A (0 << 8)
67#define FLEXCAN_MCR_IDAM_B (1 << 8)67#define FLEXCAN_MCR_IDAM_B (1 << 8)
68#define FLEXCAN_MCR_IDAM_C (2 << 8)68#define FLEXCAN_MCR_IDAM_C (2 << 8)
@@ -735,9 +735,11 @@ static int flexcan_chip_start(struct net_device *dev) · 666 unmodified lines
735 *735 *
736 */736 */
737 reg_mcr = flexcan_read(&regs->mcr);737 reg_mcr = flexcan_read(&regs->mcr);
738 reg_mcr &= ~FLEXCAN_MCR_MAXMB(0xff);
738 reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT |739 reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT |
739 FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN |740 FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN |
740 FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS;741 FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS |
742 FLEXCAN_MCR_MAXMB(FLEXCAN_TX_BUF_ID);
741 netdev_dbg(dev, "%s: writing mcr=0x%08x", __func__, reg_mcr);743 netdev_dbg(dev, "%s: writing mcr=0x%08x", __func__, reg_mcr);
742 flexcan_write(reg_mcr, &regs->mcr);744 flexcan_write(reg_mcr, &regs->mcr);
743 745
@@ -771,6 +773,10 @@ static int flexcan_chip_start(struct net_device *dev) · 27 unmodified lines
771 netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl);773 netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl);
772 flexcan_write(reg_ctrl, &regs->ctrl);774 flexcan_write(reg_ctrl, &regs->ctrl);
773 775
776 /* Abort any pending TX, mark Mailbox as INACTIVE */
777 flexcan_write(FLEXCAN_MB_CNT_CODE(0x4),
778 &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
779
774 /* acceptance mask/acceptance code (accept everything) */780 /* acceptance mask/acceptance code (accept everything) */
775 flexcan_write(0x0, &regs->rxgmask);781 flexcan_write(0x0, &regs->rxgmask);
776 flexcan_write(0x0, &regs->rx14mask);782 flexcan_write(0x0, &regs->rx14mask);
@@ -979,9 +985,9 @@ static void unregister_flexcandev(struct net_device *dev) · 202 unmodified lines
979}985}
980 986
981static const struct of_device_id flexcan_of_match[] = {987static const struct of_device_id flexcan_of_match[] = {
982 { .compatible = "fsl,p1010-flexcan", .data = &fsl_p1010_devtype_data, },
983 { .compatible = "fsl,imx28-flexcan", .data = &fsl_imx28_devtype_data, },
984 { .compatible = "fsl,imx6q-flexcan", .data = &fsl_imx6q_devtype_data, },988 { .compatible = "fsl,imx6q-flexcan", .data = &fsl_imx6q_devtype_data, },
989 { .compatible = "fsl,imx28-flexcan", .data = &fsl_imx28_devtype_data, },
990 { .compatible = "fsl,p1010-flexcan", .data = &fsl_p1010_devtype_data, },
985 { /* sentinel */ },991 { /* sentinel */ },
986};992};
987MODULE_DEVICE_TABLE(of, flexcan_of_match);993MODULE_DEVICE_TABLE(of, flexcan_of_match);
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h+10−5
@@ -1197,8 +1197,9 @@ union cdu_context { · 1196 unmodified lines
1197/* TM (timers) host DB constants */1197/* TM (timers) host DB constants */
1198#define TM_ILT_PAGE_SZ_HW 01198#define TM_ILT_PAGE_SZ_HW 0
1199#define TM_ILT_PAGE_SZ (4096 << TM_ILT_PAGE_SZ_HW) /* 4K */1199#define TM_ILT_PAGE_SZ (4096 << TM_ILT_PAGE_SZ_HW) /* 4K */
1200/* #define TM_CONN_NUM (CNIC_STARTING_CID+CNIC_ISCSI_CXT_MAX) */1200#define TM_CONN_NUM (BNX2X_FIRST_VF_CID + \
1201#define TM_CONN_NUM 10241201 BNX2X_VF_CIDS + \
1202 CNIC_ISCSI_CID_MAX)
1202#define TM_ILT_SZ (8 * TM_CONN_NUM)1203#define TM_ILT_SZ (8 * TM_CONN_NUM)
1203#define TM_ILT_LINES DIV_ROUND_UP(TM_ILT_SZ, TM_ILT_PAGE_SZ)1204#define TM_ILT_LINES DIV_ROUND_UP(TM_ILT_SZ, TM_ILT_PAGE_SZ)
1204 1205
@@ -1527,7 +1528,6 @@ struct bnx2x { · 322 unmodified lines
1527#define PCI_32BIT_FLAG (1 << 1)1528#define PCI_32BIT_FLAG (1 << 1)
1528#define ONE_PORT_FLAG (1 << 2)1529#define ONE_PORT_FLAG (1 << 2)
1529#define NO_WOL_FLAG (1 << 3)1530#define NO_WOL_FLAG (1 << 3)
1530#define USING_DAC_FLAG (1 << 4)
1531#define USING_MSIX_FLAG (1 << 5)1531#define USING_MSIX_FLAG (1 << 5)
1532#define USING_MSI_FLAG (1 << 6)1532#define USING_MSI_FLAG (1 << 6)
1533#define DISABLE_MSI_FLAG (1 << 7)1533#define DISABLE_MSI_FLAG (1 << 7)
@@ -1622,7 +1622,7 @@ struct bnx2x { · 88 unmodified lines
1622 u16 rx_ticks_int;1622 u16 rx_ticks_int;
1623 u16 rx_ticks;1623 u16 rx_ticks;
1624/* Maximal coalescing timeout in us */1624/* Maximal coalescing timeout in us */
1625#define BNX2X_MAX_COALESCE_TOUT (0xf0*12)1625#define BNX2X_MAX_COALESCE_TOUT (0xff*BNX2X_BTR)
1626 1626
1627 u32 lin_cnt;1627 u32 lin_cnt;
1628 1628
@@ -2075,7 +2075,8 @@ u32 bnx2x_dmae_opcode(struct bnx2x *bp, u8 src_type, u8 dst_type, · 446 unmodified lines
2075 2075
2076void bnx2x_prep_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae,2076void bnx2x_prep_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae,
2077 u8 src_type, u8 dst_type);2077 u8 src_type, u8 dst_type);
2078int bnx2x_issue_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae);2078int bnx2x_issue_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae,
2079 u32 *comp);
2079 2080
2080/* FLR related routines */2081/* FLR related routines */
2081u32 bnx2x_flr_clnup_poll_count(struct bnx2x *bp);2082u32 bnx2x_flr_clnup_poll_count(struct bnx2x *bp);
@@ -2495,4 +2496,8 @@ enum { · 413 unmodified lines
2495#define NUM_MACS 82496#define NUM_MACS 8
2496 2497
2497void bnx2x_set_local_cmng(struct bnx2x *bp);2498void bnx2x_set_local_cmng(struct bnx2x *bp);
2499
2500#define MCPR_SCRATCH_BASE(bp) \
2501 (CHIP_IS_E1x(bp) ? MCP_REG_MCPR_SCRATCH : MCP_A_REG_MCPR_SCRATCH)
2502
2498#endif /* bnx2x.h */2503#endif /* bnx2x.h */
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c+1−0
@@ -681,6 +681,7 @@ static void bnx2x_gro_receive(struct bnx2x *bp, struct bnx2x_fastpath *fp, · 680 unmodified lines
681 }681 }
682 }682 }
683#endif683#endif
684 skb_record_rx_queue(skb, fp->rx_queue);
684 napi_gro_receive(&fp->napi, skb);685 napi_gro_receive(&fp->napi, skb);
685}686}
686 687
drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c+2−38
@@ -894,17 +894,8 @@ static void bnx2x_get_regs(struct net_device *dev, · 893 unmodified lines
894 * will re-enable parity attentions right after the dump.894 * will re-enable parity attentions right after the dump.
895 */895 */
896 896
897 /* Disable parity on path 0 */
898 bnx2x_pretend_func(bp, 0);
899 bnx2x_disable_blocks_parity(bp);897 bnx2x_disable_blocks_parity(bp);
900 898
901 /* Disable parity on path 1 */
902 bnx2x_pretend_func(bp, 1);
903 bnx2x_disable_blocks_parity(bp);
904
905 /* Return to current function */
906 bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
907
908 dump_hdr.header_size = (sizeof(struct dump_header) / 4) - 1;899 dump_hdr.header_size = (sizeof(struct dump_header) / 4) - 1;
909 dump_hdr.preset = DUMP_ALL_PRESETS;900 dump_hdr.preset = DUMP_ALL_PRESETS;
910 dump_hdr.version = BNX2X_DUMP_VERSION;901 dump_hdr.version = BNX2X_DUMP_VERSION;
@@ -931,18 +922,9 @@ static void bnx2x_get_regs(struct net_device *dev, · 20 unmodified lines
931 /* Actually read the registers */922 /* Actually read the registers */
932 __bnx2x_get_regs(bp, p);923 __bnx2x_get_regs(bp, p);
933 924
934 /* Re-enable parity attentions on path 0 */925 /* Re-enable parity attentions */
935 bnx2x_pretend_func(bp, 0);
936 bnx2x_clear_blocks_parity(bp);926 bnx2x_clear_blocks_parity(bp);
937 bnx2x_enable_blocks_parity(bp);927 bnx2x_enable_blocks_parity(bp);
938
939 /* Re-enable parity attentions on path 1 */
940 bnx2x_pretend_func(bp, 1);
941 bnx2x_clear_blocks_parity(bp);
942 bnx2x_enable_blocks_parity(bp);
943
944 /* Return to current function */
945 bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
946}928}
947 929
948static int bnx2x_get_preset_regs_len(struct net_device *dev, u32 preset)930static int bnx2x_get_preset_regs_len(struct net_device *dev, u32 preset)
@@ -996,17 +978,8 @@ static int bnx2x_get_dump_data(struct net_device *dev, · 47 unmodified lines
996 * will re-enable parity attentions right after the dump.978 * will re-enable parity attentions right after the dump.
997 */979 */
998 980
999 /* Disable parity on path 0 */
1000 bnx2x_pretend_func(bp, 0);
1001 bnx2x_disable_blocks_parity(bp);981 bnx2x_disable_blocks_parity(bp);
1002 982
1003 /* Disable parity on path 1 */
1004 bnx2x_pretend_func(bp, 1);
1005 bnx2x_disable_blocks_parity(bp);
1006
1007 /* Return to current function */
1008 bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
1009
1010 dump_hdr.header_size = (sizeof(struct dump_header) / 4) - 1;983 dump_hdr.header_size = (sizeof(struct dump_header) / 4) - 1;
1011 dump_hdr.preset = bp->dump_preset_idx;984 dump_hdr.preset = bp->dump_preset_idx;
1012 dump_hdr.version = BNX2X_DUMP_VERSION;985 dump_hdr.version = BNX2X_DUMP_VERSION;
@@ -1035,19 +1008,10 @@ static int bnx2x_get_dump_data(struct net_device *dev, · 22 unmodified lines
1035 /* Actually read the registers */1008 /* Actually read the registers */
1036 __bnx2x_get_preset_regs(bp, p, dump_hdr.preset);1009 __bnx2x_get_preset_regs(bp, p, dump_hdr.preset);
1037 1010
1038 /* Re-enable parity attentions on path 0 */1011 /* Re-enable parity attentions */
1039 bnx2x_pretend_func(bp, 0);
1040 bnx2x_clear_blocks_parity(bp);1012 bnx2x_clear_blocks_parity(bp);
1041 bnx2x_enable_blocks_parity(bp);1013 bnx2x_enable_blocks_parity(bp);
1042 1014
1043 /* Re-enable parity attentions on path 1 */
1044 bnx2x_pretend_func(bp, 1);
1045 bnx2x_clear_blocks_parity(bp);
1046 bnx2x_enable_blocks_parity(bp);
1047
1048 /* Return to current function */
1049 bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
1050
1051 return 0;1015 return 0;
1052}1016}
1053 1017
drivers/net/ethernet/broadcom/bnx2x/bnx2x_init.h+25−13
@@ -640,23 +640,35 @@ static const struct { · 639 unmodified lines
640 * [30] MCP Latched ump_tx_parity640 * [30] MCP Latched ump_tx_parity
641 * [31] MCP Latched scpad_parity641 * [31] MCP Latched scpad_parity
642 */642 */
643#define MISC_AEU_ENABLE_MCP_PRTY_BITS \643#define MISC_AEU_ENABLE_MCP_PRTY_SUB_BITS \
644 (AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY | \644 (AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY | \
645 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY | \645 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY | \
646 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY | \646 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY)
647
648#define MISC_AEU_ENABLE_MCP_PRTY_BITS \
649 (MISC_AEU_ENABLE_MCP_PRTY_SUB_BITS | \
647 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY)650 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY)
648 651
649/* Below registers control the MCP parity attention output. When652/* Below registers control the MCP parity attention output. When
650 * MISC_AEU_ENABLE_MCP_PRTY_BITS are set - attentions are653 * MISC_AEU_ENABLE_MCP_PRTY_BITS are set - attentions are
651 * enabled, when cleared - disabled.654 * enabled, when cleared - disabled.
652 */655 */
653static const u32 mcp_attn_ctl_regs[] = {656static const struct {
654 MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0,657 u32 addr;
655 MISC_REG_AEU_ENABLE4_NIG_0,658 u32 bits;
656 MISC_REG_AEU_ENABLE4_PXP_0,659} mcp_attn_ctl_regs[] = {
657 MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0,660 { MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0,
658 MISC_REG_AEU_ENABLE4_NIG_1,661 MISC_AEU_ENABLE_MCP_PRTY_BITS },
659 MISC_REG_AEU_ENABLE4_PXP_1662 { MISC_REG_AEU_ENABLE4_NIG_0,
663 MISC_AEU_ENABLE_MCP_PRTY_SUB_BITS },
664 { MISC_REG_AEU_ENABLE4_PXP_0,
665 MISC_AEU_ENABLE_MCP_PRTY_SUB_BITS },
666 { MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0,
667 MISC_AEU_ENABLE_MCP_PRTY_BITS },
668 { MISC_REG_AEU_ENABLE4_NIG_1,
669 MISC_AEU_ENABLE_MCP_PRTY_SUB_BITS },
670 { MISC_REG_AEU_ENABLE4_PXP_1,
671 MISC_AEU_ENABLE_MCP_PRTY_SUB_BITS }
660};672};
661 673
662static inline void bnx2x_set_mcp_parity(struct bnx2x *bp, u8 enable)674static inline void bnx2x_set_mcp_parity(struct bnx2x *bp, u8 enable)
@@ -665,14 +677,14 @@ static inline void bnx2x_set_mcp_parity(struct bnx2x *bp, u8 enable) · 2 unmodified lines
665 u32 reg_val;677 u32 reg_val;
666 678
667 for (i = 0; i < ARRAY_SIZE(mcp_attn_ctl_regs); i++) {679 for (i = 0; i < ARRAY_SIZE(mcp_attn_ctl_regs); i++) {
668 reg_val = REG_RD(bp, mcp_attn_ctl_regs[i]);680 reg_val = REG_RD(bp, mcp_attn_ctl_regs[i].addr);
669 681
670 if (enable)682 if (enable)
671 reg_val |= MISC_AEU_ENABLE_MCP_PRTY_BITS;683 reg_val |= mcp_attn_ctl_regs[i].bits;
672 else684 else
673 reg_val &= ~MISC_AEU_ENABLE_MCP_PRTY_BITS;685 reg_val &= ~mcp_attn_ctl_regs[i].bits;
674 686
675 REG_WR(bp, mcp_attn_ctl_regs[i], reg_val);687 REG_WR(bp, mcp_attn_ctl_regs[i].addr, reg_val);
676 }688 }
677}689}
678 690
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c+212−176
@@ -503,9 +503,9 @@ void bnx2x_prep_dmae_with_comp(struct bnx2x *bp, · 502 unmodified lines
503}503}
504 504
505/* issue a dmae command over the init-channel and wait for completion */505/* issue a dmae command over the init-channel and wait for completion */
506int bnx2x_issue_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae)506int bnx2x_issue_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae,
507 u32 *comp)
507{508{
508 u32 *wb_comp = bnx2x_sp(bp, wb_comp);
509 int cnt = CHIP_REV_IS_SLOW(bp) ? (400000) : 4000;509 int cnt = CHIP_REV_IS_SLOW(bp) ? (400000) : 4000;
510 int rc = 0;510 int rc = 0;
511 511
@@ -518,14 +518,14 @@ int bnx2x_issue_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae) · 6 unmodified lines
518 spin_lock_bh(&bp->dmae_lock);518 spin_lock_bh(&bp->dmae_lock);
519 519
520 /* reset completion */520 /* reset completion */
521 *wb_comp = 0;521 *comp = 0;
522 522
523 /* post the command on the channel used for initializations */523 /* post the command on the channel used for initializations */
524 bnx2x_post_dmae(bp, dmae, INIT_DMAE_C(bp));524 bnx2x_post_dmae(bp, dmae, INIT_DMAE_C(bp));
525 525
526 /* wait for completion */526 /* wait for completion */
527 udelay(5);527 udelay(5);
528 while ((*wb_comp & ~DMAE_PCI_ERR_FLAG) != DMAE_COMP_VAL) {528 while ((*comp & ~DMAE_PCI_ERR_FLAG) != DMAE_COMP_VAL) {
529 529
530 if (!cnt ||530 if (!cnt ||
531 (bp->recovery_state != BNX2X_RECOVERY_DONE &&531 (bp->recovery_state != BNX2X_RECOVERY_DONE &&
@@ -537,7 +537,7 @@ int bnx2x_issue_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae) · 5 unmodified lines
537 cnt--;537 cnt--;
538 udelay(50);538 udelay(50);
539 }539 }
540 if (*wb_comp & DMAE_PCI_ERR_FLAG) {540 if (*comp & DMAE_PCI_ERR_FLAG) {
541 BNX2X_ERR("DMAE PCI error!\n");541 BNX2X_ERR("DMAE PCI error!\n");
542 rc = DMAE_PCI_ERROR;542 rc = DMAE_PCI_ERROR;
543 }543 }
@@ -574,7 +574,7 @@ void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr, · 30 unmodified lines
574 dmae.len = len32;574 dmae.len = len32;
575 575
576 /* issue the command and wait for completion */576 /* issue the command and wait for completion */
577 rc = bnx2x_issue_dmae_with_comp(bp, &dmae);577 rc = bnx2x_issue_dmae_with_comp(bp, &dmae, bnx2x_sp(bp, wb_comp));
578 if (rc) {578 if (rc) {
579 BNX2X_ERR("DMAE returned failure %d\n", rc);579 BNX2X_ERR("DMAE returned failure %d\n", rc);
580 bnx2x_panic();580 bnx2x_panic();
@@ -611,7 +611,7 @@ void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32) · 30 unmodified lines
611 dmae.len = len32;611 dmae.len = len32;
612 612
613 /* issue the command and wait for completion */613 /* issue the command and wait for completion */
614 rc = bnx2x_issue_dmae_with_comp(bp, &dmae);614 rc = bnx2x_issue_dmae_with_comp(bp, &dmae, bnx2x_sp(bp, wb_comp));
615 if (rc) {615 if (rc) {
616 BNX2X_ERR("DMAE returned failure %d\n", rc);616 BNX2X_ERR("DMAE returned failure %d\n", rc);
617 bnx2x_panic();617 bnx2x_panic();
@@ -751,6 +751,10 @@ static int bnx2x_mc_assert(struct bnx2x *bp) · 133 unmodified lines
751 return rc;751 return rc;
752}752}
753 753
754#define MCPR_TRACE_BUFFER_SIZE (0x800)
755#define SCRATCH_BUFFER_SIZE(bp) \
756 (CHIP_IS_E1(bp) ? 0x10000 : (CHIP_IS_E1H(bp) ? 0x20000 : 0x28000))
757
754void bnx2x_fw_dump_lvl(struct bnx2x *bp, const char *lvl)758void bnx2x_fw_dump_lvl(struct bnx2x *bp, const char *lvl)
755{759{
756 u32 addr, val;760 u32 addr, val;
@@ -775,7 +779,17 @@ void bnx2x_fw_dump_lvl(struct bnx2x *bp, const char *lvl) · 18 unmodified lines
775 trace_shmem_base = bp->common.shmem_base;779 trace_shmem_base = bp->common.shmem_base;
776 else780 else
777 trace_shmem_base = SHMEM2_RD(bp, other_shmem_base_addr);781 trace_shmem_base = SHMEM2_RD(bp, other_shmem_base_addr);
778 addr = trace_shmem_base - 0x800;782
783 /* sanity */
784 if (trace_shmem_base < MCPR_SCRATCH_BASE(bp) + MCPR_TRACE_BUFFER_SIZE ||
785 trace_shmem_base >= MCPR_SCRATCH_BASE(bp) +
786 SCRATCH_BUFFER_SIZE(bp)) {
787 BNX2X_ERR("Unable to dump trace buffer (mark %x)\n",
788 trace_shmem_base);
789 return;
790 }
791
792 addr = trace_shmem_base - MCPR_TRACE_BUFFER_SIZE;
779 793
780 /* validate TRCB signature */794 /* validate TRCB signature */
781 mark = REG_RD(bp, addr);795 mark = REG_RD(bp, addr);
@@ -787,14 +801,17 @@ void bnx2x_fw_dump_lvl(struct bnx2x *bp, const char *lvl) · 5 unmodified lines
787 /* read cyclic buffer pointer */801 /* read cyclic buffer pointer */
788 addr += 4;802 addr += 4;
789 mark = REG_RD(bp, addr);803 mark = REG_RD(bp, addr);
790 mark = (CHIP_IS_E1x(bp) ? MCP_REG_MCPR_SCRATCH : MCP_A_REG_MCPR_SCRATCH)804 mark = MCPR_SCRATCH_BASE(bp) + ((mark + 0x3) & ~0x3) - 0x08000000;
791 + ((mark + 0x3) & ~0x3) - 0x08000000;805 if (mark >= trace_shmem_base || mark < addr + 4) {
806 BNX2X_ERR("Mark doesn't fall inside Trace Buffer\n");
807 return;
808 }
792 printk("%s" "begin fw dump (mark 0x%x)\n", lvl, mark);809 printk("%s" "begin fw dump (mark 0x%x)\n", lvl, mark);
793 810
794 printk("%s", lvl);811 printk("%s", lvl);
795 812
796 /* dump buffer after the mark */813 /* dump buffer after the mark */
797 for (offset = mark; offset <= trace_shmem_base; offset += 0x8*4) {814 for (offset = mark; offset < trace_shmem_base; offset += 0x8*4) {
798 for (word = 0; word < 8; word++)815 for (word = 0; word < 8; word++)
799 data[word] = htonl(REG_RD(bp, offset + 4*word));816 data[word] = htonl(REG_RD(bp, offset + 4*word));
800 data[8] = 0x0;817 data[8] = 0x0;
@@ -4280,65 +4297,60 @@ static void _print_next_block(int idx, const char *blk) · 3479 unmodified lines
4280 pr_cont("%s%s", idx ? ", " : "", blk);4297 pr_cont("%s%s", idx ? ", " : "", blk);
4281}4298}
4282 4299
4283static int bnx2x_check_blocks_with_parity0(struct bnx2x *bp, u32 sig,4300static bool bnx2x_check_blocks_with_parity0(struct bnx2x *bp, u32 sig,
4284 int par_num, bool print)4301 int *par_num, bool print)
4285{4302{
4286 int i = 0;4303 u32 cur_bit;
4287 u32 cur_bit = 0;4304 bool res;
4305 int i;
4306
4307 res = false;
4308
4288 for (i = 0; sig; i++) {4309 for (i = 0; sig; i++) {
4289 cur_bit = ((u32)0x1 << i);4310 cur_bit = (0x1UL << i);
4290 if (sig & cur_bit) {4311 if (sig & cur_bit) {
4291 switch (cur_bit) {4312 res |= true; /* Each bit is real error! */
4292 case AEU_INPUTS_ATTN_BITS_BRB_PARITY_ERROR:4313
4293 if (print) {4314 if (print) {
4294 _print_next_block(par_num++, "BRB");4315 switch (cur_bit) {
4316 case AEU_INPUTS_ATTN_BITS_BRB_PARITY_ERROR:
4317 _print_next_block((*par_num)++, "BRB");
4295 _print_parity(bp,4318 _print_parity(bp,
4296 BRB1_REG_BRB1_PRTY_STS);4319 BRB1_REG_BRB1_PRTY_STS);
4297 }4320 break;
4298 break;4321 case AEU_INPUTS_ATTN_BITS_PARSER_PARITY_ERROR:
4299 case AEU_INPUTS_ATTN_BITS_PARSER_PARITY_ERROR:4322 _print_next_block((*par_num)++,
4300 if (print) {4323 "PARSER");
4301 _print_next_block(par_num++, "PARSER");
4302 _print_parity(bp, PRS_REG_PRS_PRTY_STS);4324 _print_parity(bp, PRS_REG_PRS_PRTY_STS);
4303 }4325 break;
4304 break;4326 case AEU_INPUTS_ATTN_BITS_TSDM_PARITY_ERROR:
4305 case AEU_INPUTS_ATTN_BITS_TSDM_PARITY_ERROR:4327 _print_next_block((*par_num)++, "TSDM");
4306 if (print) {
4307 _print_next_block(par_num++, "TSDM");
4308 _print_parity(bp,4328 _print_parity(bp,
4309 TSDM_REG_TSDM_PRTY_STS);4329 TSDM_REG_TSDM_PRTY_STS);
4310 }4330 break;
4311 break;4331 case AEU_INPUTS_ATTN_BITS_SEARCHER_PARITY_ERROR:
4312 case AEU_INPUTS_ATTN_BITS_SEARCHER_PARITY_ERROR:4332 _print_next_block((*par_num)++,
4313 if (print) {
4314 _print_next_block(par_num++,
4315 "SEARCHER");4333 "SEARCHER");
4316 _print_parity(bp, SRC_REG_SRC_PRTY_STS);4334 _print_parity(bp, SRC_REG_SRC_PRTY_STS);
4317 }4335 break;
4318 break;4336 case AEU_INPUTS_ATTN_BITS_TCM_PARITY_ERROR:
4319 case AEU_INPUTS_ATTN_BITS_TCM_PARITY_ERROR:4337 _print_next_block((*par_num)++, "TCM");
4320 if (print) {4338 _print_parity(bp, TCM_REG_TCM_PRTY_STS);
4321 _print_next_block(par_num++, "TCM");4339 break;
4322 _print_parity(bp,4340 case AEU_INPUTS_ATTN_BITS_TSEMI_PARITY_ERROR:
4323 TCM_REG_TCM_PRTY_STS);4341 _print_next_block((*par_num)++,
4324 }4342 "TSEMI");
4325 break;
4326 case AEU_INPUTS_ATTN_BITS_TSEMI_PARITY_ERROR:
4327 if (print) {
4328 _print_next_block(par_num++, "TSEMI");
4329 _print_parity(bp,4343 _print_parity(bp,
4330 TSEM_REG_TSEM_PRTY_STS_0);4344 TSEM_REG_TSEM_PRTY_STS_0);
4331 _print_parity(bp,4345 _print_parity(bp,
4332 TSEM_REG_TSEM_PRTY_STS_1);4346 TSEM_REG_TSEM_PRTY_STS_1);
4333 }4347 break;
4334 break;4348 case AEU_INPUTS_ATTN_BITS_PBCLIENT_PARITY_ERROR:
4335 case AEU_INPUTS_ATTN_BITS_PBCLIENT_PARITY_ERROR:4349 _print_next_block((*par_num)++, "XPB");
4336 if (print) {
4337 _print_next_block(par_num++, "XPB");
4338 _print_parity(bp, GRCBASE_XPB +4350 _print_parity(bp, GRCBASE_XPB +
4339 PB_REG_PB_PRTY_STS);4351 PB_REG_PB_PRTY_STS);
4352 break;
4340 }4353 }
4341 break;
4342 }4354 }
4343 4355
4344 /* Clear the bit */4356 /* Clear the bit */
@@ -4346,53 +4358,59 @@ static int bnx2x_check_blocks_with_parity0(struct bnx2x *bp, u32 sig, · 1 unmodified line
4346 }4358 }
4347 }4359 }
4348 4360
4349 return par_num;4361 return res;
4350}4362}
4351 4363
4352static int bnx2x_check_blocks_with_parity1(struct bnx2x *bp, u32 sig,4364static bool bnx2x_check_blocks_with_parity1(struct bnx2x *bp, u32 sig,
4353 int par_num, bool *global,4365 int *par_num, bool *global,
4354 bool print)4366 bool print)
4355{4367{
4356 int i = 0;4368 u32 cur_bit;
4357 u32 cur_bit = 0;4369 bool res;
4370 int i;
4371
4372 res = false;
4373
4358 for (i = 0; sig; i++) {4374 for (i = 0; sig; i++) {
4359 cur_bit = ((u32)0x1 << i);4375 cur_bit = (0x1UL << i);
4360 if (sig & cur_bit) {4376 if (sig & cur_bit) {
4377 res |= true; /* Each bit is real error! */
4361 switch (cur_bit) {4378 switch (cur_bit) {
4362 case AEU_INPUTS_ATTN_BITS_PBF_PARITY_ERROR:4379 case AEU_INPUTS_ATTN_BITS_PBF_PARITY_ERROR:
4363 if (print) {4380 if (print) {
4364 _print_next_block(par_num++, "PBF");4381 _print_next_block((*par_num)++, "PBF");
4365 _print_parity(bp, PBF_REG_PBF_PRTY_STS);4382 _print_parity(bp, PBF_REG_PBF_PRTY_STS);
4366 }4383 }
4367 break;4384 break;
4368 case AEU_INPUTS_ATTN_BITS_QM_PARITY_ERROR:4385 case AEU_INPUTS_ATTN_BITS_QM_PARITY_ERROR:
4369 if (print) {4386 if (print) {
4370 _print_next_block(par_num++, "QM");4387 _print_next_block((*par_num)++, "QM");
4371 _print_parity(bp, QM_REG_QM_PRTY_STS);4388 _print_parity(bp, QM_REG_QM_PRTY_STS);
4372 }4389 }
4373 break;4390 break;
4374 case AEU_INPUTS_ATTN_BITS_TIMERS_PARITY_ERROR:4391 case AEU_INPUTS_ATTN_BITS_TIMERS_PARITY_ERROR:
4375 if (print) {4392 if (print) {
4376 _print_next_block(par_num++, "TM");4393 _print_next_block((*par_num)++, "TM");
4377 _print_parity(bp, TM_REG_TM_PRTY_STS);4394 _print_parity(bp, TM_REG_TM_PRTY_STS);
4378 }4395 }
4379 break;4396 break;
4380 case AEU_INPUTS_ATTN_BITS_XSDM_PARITY_ERROR:4397 case AEU_INPUTS_ATTN_BITS_XSDM_PARITY_ERROR:
4381 if (print) {4398 if (print) {
4382 _print_next_block(par_num++, "XSDM");4399 _print_next_block((*par_num)++, "XSDM");
4383 _print_parity(bp,4400 _print_parity(bp,
4384 XSDM_REG_XSDM_PRTY_STS);4401 XSDM_REG_XSDM_PRTY_STS);
4385 }4402 }
4386 break;4403 break;
4387 case AEU_INPUTS_ATTN_BITS_XCM_PARITY_ERROR:4404 case AEU_INPUTS_ATTN_BITS_XCM_PARITY_ERROR:
4388 if (print) {4405 if (print) {
4389 _print_next_block(par_num++, "XCM");4406 _print_next_block((*par_num)++, "XCM");
4390 _print_parity(bp, XCM_REG_XCM_PRTY_STS);4407 _print_parity(bp, XCM_REG_XCM_PRTY_STS);
4391 }4408 }
4392 break;4409 break;
4393 case AEU_INPUTS_ATTN_BITS_XSEMI_PARITY_ERROR:4410 case AEU_INPUTS_ATTN_BITS_XSEMI_PARITY_ERROR:
4394 if (print) {4411 if (print) {
4395 _print_next_block(par_num++, "XSEMI");4412 _print_next_block((*par_num)++,
4413 "XSEMI");
4396 _print_parity(bp,4414 _print_parity(bp,
4397 XSEM_REG_XSEM_PRTY_STS_0);4415 XSEM_REG_XSEM_PRTY_STS_0);
4398 _print_parity(bp,4416 _print_parity(bp,
@@ -4401,7 +4419,7 @@ static int bnx2x_check_blocks_with_parity1(struct bnx2x *bp, u32 sig, · 2 unmodified lines
4401 break;4419 break;
4402 case AEU_INPUTS_ATTN_BITS_DOORBELLQ_PARITY_ERROR:4420 case AEU_INPUTS_ATTN_BITS_DOORBELLQ_PARITY_ERROR:
4403 if (print) {4421 if (print) {
4404 _print_next_block(par_num++,4422 _print_next_block((*par_num)++,
4405 "DOORBELLQ");4423 "DOORBELLQ");
4406 _print_parity(bp,4424 _print_parity(bp,
4407 DORQ_REG_DORQ_PRTY_STS);4425 DORQ_REG_DORQ_PRTY_STS);
@@ -4409,7 +4427,7 @@ static int bnx2x_check_blocks_with_parity1(struct bnx2x *bp, u32 sig, · 1 unmodified line
4409 break;4427 break;
4410 case AEU_INPUTS_ATTN_BITS_NIG_PARITY_ERROR:4428 case AEU_INPUTS_ATTN_BITS_NIG_PARITY_ERROR:
4411 if (print) {4429 if (print) {
4412 _print_next_block(par_num++, "NIG");4430 _print_next_block((*par_num)++, "NIG");
4413 if (CHIP_IS_E1x(bp)) {4431 if (CHIP_IS_E1x(bp)) {
4414 _print_parity(bp,4432 _print_parity(bp,
4415 NIG_REG_NIG_PRTY_STS);4433 NIG_REG_NIG_PRTY_STS);
@@ -4423,32 +4441,34 @@ static int bnx2x_check_blocks_with_parity1(struct bnx2x *bp, u32 sig, · 7 unmodified lines
4423 break;4441 break;
4424 case AEU_INPUTS_ATTN_BITS_VAUX_PCI_CORE_PARITY_ERROR:4442 case AEU_INPUTS_ATTN_BITS_VAUX_PCI_CORE_PARITY_ERROR:
4425 if (print)4443 if (print)
4426 _print_next_block(par_num++,4444 _print_next_block((*par_num)++,
4427 "VAUX PCI CORE");4445 "VAUX PCI CORE");
4428 *global = true;4446 *global = true;
4429 break;4447 break;
4430 case AEU_INPUTS_ATTN_BITS_DEBUG_PARITY_ERROR:4448 case AEU_INPUTS_ATTN_BITS_DEBUG_PARITY_ERROR:
4431 if (print) {4449 if (print) {
4432 _print_next_block(par_num++, "DEBUG");4450 _print_next_block((*par_num)++,
4451 "DEBUG");
4433 _print_parity(bp, DBG_REG_DBG_PRTY_STS);4452 _print_parity(bp, DBG_REG_DBG_PRTY_STS);
4434 }4453 }
4435 break;4454 break;
4436 case AEU_INPUTS_ATTN_BITS_USDM_PARITY_ERROR:4455 case AEU_INPUTS_ATTN_BITS_USDM_PARITY_ERROR:
4437 if (print) {4456 if (print) {
4438 _print_next_block(par_num++, "USDM");4457 _print_next_block((*par_num)++, "USDM");
4439 _print_parity(bp,4458 _print_parity(bp,
4440 USDM_REG_USDM_PRTY_STS);4459 USDM_REG_USDM_PRTY_STS);
4441 }4460 }
4442 break;4461 break;
4443 case AEU_INPUTS_ATTN_BITS_UCM_PARITY_ERROR:4462 case AEU_INPUTS_ATTN_BITS_UCM_PARITY_ERROR:
4444 if (print) {4463 if (print) {
4445 _print_next_block(par_num++, "UCM");4464 _print_next_block((*par_num)++, "UCM");
4446 _print_parity(bp, UCM_REG_UCM_PRTY_STS);4465 _print_parity(bp, UCM_REG_UCM_PRTY_STS);
4447 }4466 }
4448 break;4467 break;
4449 case AEU_INPUTS_ATTN_BITS_USEMI_PARITY_ERROR:4468 case AEU_INPUTS_ATTN_BITS_USEMI_PARITY_ERROR:
4450 if (print) {4469 if (print) {
4451 _print_next_block(par_num++, "USEMI");4470 _print_next_block((*par_num)++,
4471 "USEMI");
4452 _print_parity(bp,4472 _print_parity(bp,
4453 USEM_REG_USEM_PRTY_STS_0);4473 USEM_REG_USEM_PRTY_STS_0);
4454 _print_parity(bp,4474 _print_parity(bp,
@@ -4457,21 +4477,21 @@ static int bnx2x_check_blocks_with_parity1(struct bnx2x *bp, u32 sig, · 2 unmodified lines
4457 break;4477 break;
4458 case AEU_INPUTS_ATTN_BITS_UPB_PARITY_ERROR:4478 case AEU_INPUTS_ATTN_BITS_UPB_PARITY_ERROR:
4459 if (print) {4479 if (print) {
4460 _print_next_block(par_num++, "UPB");4480 _print_next_block((*par_num)++, "UPB");
4461 _print_parity(bp, GRCBASE_UPB +4481 _print_parity(bp, GRCBASE_UPB +
4462 PB_REG_PB_PRTY_STS);4482 PB_REG_PB_PRTY_STS);
4463 }4483 }
4464 break;4484 break;
4465 case AEU_INPUTS_ATTN_BITS_CSDM_PARITY_ERROR:4485 case AEU_INPUTS_ATTN_BITS_CSDM_PARITY_ERROR:
4466 if (print) {4486 if (print) {
4467 _print_next_block(par_num++, "CSDM");4487 _print_next_block((*par_num)++, "CSDM");
4468 _print_parity(bp,4488 _print_parity(bp,
4469 CSDM_REG_CSDM_PRTY_STS);4489 CSDM_REG_CSDM_PRTY_STS);
4470 }4490 }
4471 break;4491 break;
4472 case AEU_INPUTS_ATTN_BITS_CCM_PARITY_ERROR:4492 case AEU_INPUTS_ATTN_BITS_CCM_PARITY_ERROR:
4473 if (print) {4493 if (print) {
4474 _print_next_block(par_num++, "CCM");4494 _print_next_block((*par_num)++, "CCM");
4475 _print_parity(bp, CCM_REG_CCM_PRTY_STS);4495 _print_parity(bp, CCM_REG_CCM_PRTY_STS);
4476 }4496 }
4477 break;4497 break;
@@ -4482,80 +4502,73 @@ static int bnx2x_check_blocks_with_parity1(struct bnx2x *bp, u32 sig, · 4 unmodified lines
4482 }4502 }
4483 }4503 }
4484 4504
4485 return par_num;4505 return res;
4486}4506}
4487 4507
4488static int bnx2x_check_blocks_with_parity2(struct bnx2x *bp, u32 sig,4508static bool bnx2x_check_blocks_with_parity2(struct bnx2x *bp, u32 sig,
4489 int par_num, bool print)4509 int *par_num, bool print)
4490{4510{
4491 int i = 0;4511 u32 cur_bit;
4492 u32 cur_bit = 0;4512 bool res;
4513 int i;
4514
4515 res = false;
4516
4493 for (i = 0; sig; i++) {4517 for (i = 0; sig; i++) {
4494 cur_bit = ((u32)0x1 << i);4518 cur_bit = (0x1UL << i);
4495 if (sig & cur_bit) {4519 if (sig & cur_bit) {
4496 switch (cur_bit) {4520 res |= true; /* Each bit is real error! */
4497 case AEU_INPUTS_ATTN_BITS_CSEMI_PARITY_ERROR:4521 if (print) {
4498 if (print) {4522 switch (cur_bit) {
4499 _print_next_block(par_num++, "CSEMI");4523 case AEU_INPUTS_ATTN_BITS_CSEMI_PARITY_ERROR:
4524 _print_next_block((*par_num)++,
4525 "CSEMI");
4500 _print_parity(bp,4526 _print_parity(bp,
4501 CSEM_REG_CSEM_PRTY_STS_0);4527 CSEM_REG_CSEM_PRTY_STS_0);
4502 _print_parity(bp,4528 _print_parity(bp,
4503 CSEM_REG_CSEM_PRTY_STS_1);4529 CSEM_REG_CSEM_PRTY_STS_1);
4504 }4530 break;
4505 break;4531 case AEU_INPUTS_ATTN_BITS_PXP_PARITY_ERROR:
4506 case AEU_INPUTS_ATTN_BITS_PXP_PARITY_ERROR:4532 _print_next_block((*par_num)++, "PXP");
4507 if (print) {
4508 _print_next_block(par_num++, "PXP");
4509 _print_parity(bp, PXP_REG_PXP_PRTY_STS);4533 _print_parity(bp, PXP_REG_PXP_PRTY_STS);
4510 _print_parity(bp,4534 _print_parity(bp,
4511 PXP2_REG_PXP2_PRTY_STS_0);4535 PXP2_REG_PXP2_PRTY_STS_0);
4512 _print_parity(bp,4536 _print_parity(bp,
4513 PXP2_REG_PXP2_PRTY_STS_1);4537 PXP2_REG_PXP2_PRTY_STS_1);
4514 }4538 break;
4515 break;4539 case AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR:
4516 case AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR:4540 _print_next_block((*par_num)++,
4517 if (print)4541 "PXPPCICLOCKCLIENT");
4518 _print_next_block(par_num++,4542 break;
4519 "PXPPCICLOCKCLIENT");4543 case AEU_INPUTS_ATTN_BITS_CFC_PARITY_ERROR:
4520 break;4544 _print_next_block((*par_num)++, "CFC");
4521 case AEU_INPUTS_ATTN_BITS_CFC_PARITY_ERROR:
4522 if (print) {
4523 _print_next_block(par_num++, "CFC");
4524 _print_parity(bp,4545 _print_parity(bp,
4525 CFC_REG_CFC_PRTY_STS);4546 CFC_REG_CFC_PRTY_STS);
4526 }4547 break;
4527 break;4548 case AEU_INPUTS_ATTN_BITS_CDU_PARITY_ERROR:
4528 case AEU_INPUTS_ATTN_BITS_CDU_PARITY_ERROR:4549 _print_next_block((*par_num)++, "CDU");
4529 if (print) {
4530 _print_next_block(par_num++, "CDU");
4531 _print_parity(bp, CDU_REG_CDU_PRTY_STS);4550 _print_parity(bp, CDU_REG_CDU_PRTY_STS);
4532 }4551 break;
4533 break;4552 case AEU_INPUTS_ATTN_BITS_DMAE_PARITY_ERROR:
4534 case AEU_INPUTS_ATTN_BITS_DMAE_PARITY_ERROR:4553 _print_next_block((*par_num)++, "DMAE");
4535 if (print) {
4536 _print_next_block(par_num++, "DMAE");
4537 _print_parity(bp,4554 _print_parity(bp,
4538 DMAE_REG_DMAE_PRTY_STS);4555 DMAE_REG_DMAE_PRTY_STS);
4539 }4556 break;
4540 break;4557 case AEU_INPUTS_ATTN_BITS_IGU_PARITY_ERROR:
4541 case AEU_INPUTS_ATTN_BITS_IGU_PARITY_ERROR:4558 _print_next_block((*par_num)++, "IGU");
4542 if (print) {
4543 _print_next_block(par_num++, "IGU");
4544 if (CHIP_IS_E1x(bp))4559 if (CHIP_IS_E1x(bp))
4545 _print_parity(bp,4560 _print_parity(bp,
4546 HC_REG_HC_PRTY_STS);4561 HC_REG_HC_PRTY_STS);
4547 else4562 else
4548 _print_parity(bp,4563 _print_parity(bp,
4549 IGU_REG_IGU_PRTY_STS);4564 IGU_REG_IGU_PRTY_STS);
4550 }4565 break;
4551 break;4566 case AEU_INPUTS_ATTN_BITS_MISC_PARITY_ERROR:
4552 case AEU_INPUTS_ATTN_BITS_MISC_PARITY_ERROR:4567 _print_next_block((*par_num)++, "MISC");
4553 if (print) {
4554 _print_next_block(par_num++, "MISC");
4555 _print_parity(bp,4568 _print_parity(bp,
4556 MISC_REG_MISC_PRTY_STS);4569 MISC_REG_MISC_PRTY_STS);
4570 break;
4557 }4571 }
4558 break;
4559 }4572 }
4560 4573
4561 /* Clear the bit */4574 /* Clear the bit */
@@ -4563,40 +4576,49 @@ static int bnx2x_check_blocks_with_parity2(struct bnx2x *bp, u32 sig, · 1 unmodified line
4563 }4576 }
4564 }4577 }
4565 4578
4566 return par_num;4579 return res;
4567}4580}
4568 4581
4569static int bnx2x_check_blocks_with_parity3(u32 sig, int par_num,4582static bool bnx2x_check_blocks_with_parity3(struct bnx2x *bp, u32 sig,
4570 bool *global, bool print)4583 int *par_num, bool *global,
4584 bool print)
4571{4585{
4572 int i = 0;4586 bool res = false;
4573 u32 cur_bit = 0;4587 u32 cur_bit;
4588 int i;
4589
4574 for (i = 0; sig; i++) {4590 for (i = 0; sig; i++) {
4575 cur_bit = ((u32)0x1 << i);4591 cur_bit = (0x1UL << i);
4576 if (sig & cur_bit) {4592 if (sig & cur_bit) {
4577 switch (cur_bit) {4593 switch (cur_bit) {
4578 case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY:4594 case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY:
4579 if (print)4595 if (print)
4580 _print_next_block(par_num++, "MCP ROM");4596 _print_next_block((*par_num)++,
4597 "MCP ROM");
4581 *global = true;4598 *global = true;
4599 res |= true;
4582 break;4600 break;
4583 case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY:4601 case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY:
4584 if (print)4602 if (print)
4585 _print_next_block(par_num++,4603 _print_next_block((*par_num)++,
4586 "MCP UMP RX");4604 "MCP UMP RX");
4587 *global = true;4605 *global = true;
4606 res |= true;
4588 break;4607 break;
4589 case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY:4608 case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY:
4590 if (print)4609 if (print)
4591 _print_next_block(par_num++,4610 _print_next_block((*par_num)++,
4592 "MCP UMP TX");4611 "MCP UMP TX");
4593 *global = true;4612 *global = true;
4613 res |= true;
4594 break;4614 break;
4595 case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY:4615 case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY:
4596 if (print)4616 if (print)
4597 _print_next_block(par_num++,4617 _print_next_block((*par_num)++,
4598 "MCP SCPAD");4618 "MCP SCPAD");
4599 *global = true;4619 /* clear latched SCPAD PATIRY from MCP */
4620 REG_WR(bp, MISC_REG_AEU_CLR_LATCH_SIGNAL,
4621 1UL << 10);
4600 break;4622 break;
4601 }4623 }
4602 4624
@@ -4605,45 +4627,50 @@ static int bnx2x_check_blocks_with_parity3(u32 sig, int par_num, · 2 unmodified lines
4605 }4627 }
4606 }4628 }
4607 4629
4608 return par_num;4630 return res;
4609}4631}
4610 4632
4611static int bnx2x_check_blocks_with_parity4(struct bnx2x *bp, u32 sig,4633static bool bnx2x_check_blocks_with_parity4(struct bnx2x *bp, u32 sig,
4612 int par_num, bool print)4634 int *par_num, bool print)
4613{4635{
4614 int i = 0;4636 u32 cur_bit;
4615 u32 cur_bit = 0;4637 bool res;
4638 int i;
4639
4640 res = false;
4641
4616 for (i = 0; sig; i++) {4642 for (i = 0; sig; i++) {
4617 cur_bit = ((u32)0x1 << i);4643 cur_bit = (0x1UL << i);
4618 if (sig & cur_bit) {4644 if (sig & cur_bit) {
4619 switch (cur_bit) {4645 res |= true; /* Each bit is real error! */
4620 case AEU_INPUTS_ATTN_BITS_PGLUE_PARITY_ERROR:4646 if (print) {
4621 if (print) {4647 switch (cur_bit) {
4622 _print_next_block(par_num++, "PGLUE_B");4648 case AEU_INPUTS_ATTN_BITS_PGLUE_PARITY_ERROR:
4649 _print_next_block((*par_num)++,
4650 "PGLUE_B");
4623 _print_parity(bp,4651 _print_parity(bp,
4624 PGLUE_B_REG_PGLUE_B_PRTY_STS);4652 PGLUE_B_REG_PGLUE_B_PRTY_STS);
4625 }4653 break;
4626 break;4654 case AEU_INPUTS_ATTN_BITS_ATC_PARITY_ERROR:
4627 case AEU_INPUTS_ATTN_BITS_ATC_PARITY_ERROR:4655 _print_next_block((*par_num)++, "ATC");
4628 if (print) {
4629 _print_next_block(par_num++, "ATC");
4630 _print_parity(bp,4656 _print_parity(bp,
4631 ATC_REG_ATC_PRTY_STS);4657 ATC_REG_ATC_PRTY_STS);
4658 break;
4632 }4659 }
4633 break;
4634 }4660 }
4635
4636 /* Clear the bit */4661 /* Clear the bit */
4637 sig &= ~cur_bit;4662 sig &= ~cur_bit;
4638 }4663 }
4639 }4664 }
4640 4665
4641 return par_num;4666 return res;
4642}4667}
4643 4668
4644static bool bnx2x_parity_attn(struct bnx2x *bp, bool *global, bool print,4669static bool bnx2x_parity_attn(struct bnx2x *bp, bool *global, bool print,
4645 u32 *sig)4670 u32 *sig)
4646{4671{
4672 bool res = false;
4673
4647 if ((sig[0] & HW_PRTY_ASSERT_SET_0) ||4674 if ((sig[0] & HW_PRTY_ASSERT_SET_0) ||
4648 (sig[1] & HW_PRTY_ASSERT_SET_1) ||4675 (sig[1] & HW_PRTY_ASSERT_SET_1) ||
4649 (sig[2] & HW_PRTY_ASSERT_SET_2) ||4676 (sig[2] & HW_PRTY_ASSERT_SET_2) ||
@@ -4660,23 +4687,22 @@ static bool bnx2x_parity_attn(struct bnx2x *bp, bool *global, bool print, · 10 unmodified lines
4660 if (print)4687 if (print)
4661 netdev_err(bp->dev,4688 netdev_err(bp->dev,
4662 "Parity errors detected in blocks: ");4689 "Parity errors detected in blocks: ");
4663 par_num = bnx2x_check_blocks_with_parity0(bp,4690 res |= bnx2x_check_blocks_with_parity0(bp,
4664 sig[0] & HW_PRTY_ASSERT_SET_0, par_num, print);4691 sig[0] & HW_PRTY_ASSERT_SET_0, &par_num, print);
4665 par_num = bnx2x_check_blocks_with_parity1(bp,4692 res |= bnx2x_check_blocks_with_parity1(bp,
4666 sig[1] & HW_PRTY_ASSERT_SET_1, par_num, global, print);4693 sig[1] & HW_PRTY_ASSERT_SET_1, &par_num, global, print);
4667 par_num = bnx2x_check_blocks_with_parity2(bp,4694 res |= bnx2x_check_blocks_with_parity2(bp,
4668 sig[2] & HW_PRTY_ASSERT_SET_2, par_num, print);4695 sig[2] & HW_PRTY_ASSERT_SET_2, &par_num, print);
4669 par_num = bnx2x_check_blocks_with_parity3(4696 res |= bnx2x_check_blocks_with_parity3(bp,
4670 sig[3] & HW_PRTY_ASSERT_SET_3, par_num, global, print);4697 sig[3] & HW_PRTY_ASSERT_SET_3, &par_num, global, print);
4671 par_num = bnx2x_check_blocks_with_parity4(bp,4698 res |= bnx2x_check_blocks_with_parity4(bp,
4672 sig[4] & HW_PRTY_ASSERT_SET_4, par_num, print);4699 sig[4] & HW_PRTY_ASSERT_SET_4, &par_num, print);
4673 4700
4674 if (print)4701 if (print)
4675 pr_cont("\n");4702 pr_cont("\n");
4703 }
4676 4704
4677 return true;4705 return res;
4678 } else
4679 return false;
4680}4706}
4681 4707
4682/**4708/**
@@ -7126,7 +7152,7 @@ static int bnx2x_init_hw_port(struct bnx2x *bp) · 2443 unmodified lines
7126 int port = BP_PORT(bp);7152 int port = BP_PORT(bp);
7127 int init_phase = port ? PHASE_PORT1 : PHASE_PORT0;7153 int init_phase = port ? PHASE_PORT1 : PHASE_PORT0;
7128 u32 low, high;7154 u32 low, high;
7129 u32 val;7155 u32 val, reg;
7130 7156
7131 DP(NETIF_MSG_HW, "starting port init port %d\n", port);7157 DP(NETIF_MSG_HW, "starting port init port %d\n", port);
7132 7158
@@ -7271,6 +7297,17 @@ static int bnx2x_init_hw_port(struct bnx2x *bp) · 138 unmodified lines
7271 val |= CHIP_IS_E1(bp) ? 0 : 0x10;7297 val |= CHIP_IS_E1(bp) ? 0 : 0x10;
7272 REG_WR(bp, MISC_REG_AEU_MASK_ATTN_FUNC_0 + port*4, val);7298 REG_WR(bp, MISC_REG_AEU_MASK_ATTN_FUNC_0 + port*4, val);
7273 7299
7300 /* SCPAD_PARITY should NOT trigger close the gates */
7301 reg = port ? MISC_REG_AEU_ENABLE4_NIG_1 : MISC_REG_AEU_ENABLE4_NIG_0;
7302 REG_WR(bp, reg,
7303 REG_RD(bp, reg) &
7304 ~AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY);
7305
7306 reg = port ? MISC_REG_AEU_ENABLE4_PXP_1 : MISC_REG_AEU_ENABLE4_PXP_0;
7307 REG_WR(bp, reg,
7308 REG_RD(bp, reg) &
7309 ~AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY);
7310
7274 bnx2x_init_block(bp, BLOCK_NIG, init_phase);7311 bnx2x_init_block(bp, BLOCK_NIG, init_phase);
7275 7312
7276 if (!CHIP_IS_E1x(bp)) {7313 if (!CHIP_IS_E1x(bp)) {
@@ -11693,9 +11730,6 @@ static int bnx2x_init_bp(struct bnx2x *bp) · 4416 unmodified lines
11693static int bnx2x_open(struct net_device *dev)11730static int bnx2x_open(struct net_device *dev)
11694{11731{
11695 struct bnx2x *bp = netdev_priv(dev);11732 struct bnx2x *bp = netdev_priv(dev);
11696 bool global = false;
11697 int other_engine = BP_PATH(bp) ? 0 : 1;
11698 bool other_load_status, load_status;
11699 int rc;11733 int rc;
11700 11734
11701 bp->stats_init = true;11735 bp->stats_init = true;
@@ -11711,6 +11745,10 @@ static int bnx2x_open(struct net_device *dev) · 9 unmodified lines
11711 * Parity recovery is only relevant for PF driver.11745 * Parity recovery is only relevant for PF driver.
11712 */11746 */
11713 if (IS_PF(bp)) {11747 if (IS_PF(bp)) {
11748 int other_engine = BP_PATH(bp) ? 0 : 1;
11749 bool other_load_status, load_status;
11750 bool global = false;
11751
11714 other_load_status = bnx2x_get_load_status(bp, other_engine);11752 other_load_status = bnx2x_get_load_status(bp, other_engine);
11715 load_status = bnx2x_get_load_status(bp, BP_PATH(bp));11753 load_status = bnx2x_get_load_status(bp, BP_PATH(bp));
11716 if (!bnx2x_reset_is_done(bp, BP_PATH(bp)) ||11754 if (!bnx2x_reset_is_done(bp, BP_PATH(bp)) ||
@@ -12103,7 +12141,6 @@ static int bnx2x_set_coherency_mask(struct bnx2x *bp) · 386 unmodified lines
12103 struct device *dev = &bp->pdev->dev;12141 struct device *dev = &bp->pdev->dev;
12104 12142
12105 if (dma_set_mask(dev, DMA_BIT_MASK(64)) == 0) {12143 if (dma_set_mask(dev, DMA_BIT_MASK(64)) == 0) {
12106 bp->flags |= USING_DAC_FLAG;
12107 if (dma_set_coherent_mask(dev, DMA_BIT_MASK(64)) != 0) {12144 if (dma_set_coherent_mask(dev, DMA_BIT_MASK(64)) != 0) {
12108 dev_err(dev, "dma_set_coherent_mask failed, aborting\n");12145 dev_err(dev, "dma_set_coherent_mask failed, aborting\n");
12109 return -EIO;12146 return -EIO;
@@ -12274,8 +12311,7 @@ static int bnx2x_init_dev(struct bnx2x *bp, struct pci_dev *pdev, · 164 unmodified lines
12274 NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_HIGHDMA;12311 NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_HIGHDMA;
12275 12312
12276 dev->features |= dev->hw_features | NETIF_F_HW_VLAN_CTAG_RX;12313 dev->features |= dev->hw_features | NETIF_F_HW_VLAN_CTAG_RX;
12277 if (bp->flags & USING_DAC_FLAG)12314 dev->features |= NETIF_F_HIGHDMA;
12278 dev->features |= NETIF_F_HIGHDMA;
12279 12315
12280 /* Add Loopback capability to the device */12316 /* Add Loopback capability to the device */
12281 dev->hw_features |= NETIF_F_LOOPBACK;12317 dev->hw_features |= NETIF_F_LOOPBACK;
@@ -12615,24 +12651,24 @@ static int set_max_cos_est(int chip_id) · 333 unmodified lines
12615 return BNX2X_MULTI_TX_COS_E1X;12651 return BNX2X_MULTI_TX_COS_E1X;
12616 case BCM57712:12652 case BCM57712:
12617 case BCM57712_MF:12653 case BCM57712_MF:
12618 case BCM57712_VF:
12619 return BNX2X_MULTI_TX_COS_E2_E3A0;12654 return BNX2X_MULTI_TX_COS_E2_E3A0;
12620 case BCM57800:12655 case BCM57800:
12621 case BCM57800_MF:12656 case BCM57800_MF:
12622 case BCM57800_VF:
12623 case BCM57810:12657 case BCM57810:
12624 case BCM57810_MF:12658 case BCM57810_MF:
12625 case BCM57840_4_10:12659 case BCM57840_4_10:
12626 case BCM57840_2_20:12660 case BCM57840_2_20:
12627 case BCM57840_O:12661 case BCM57840_O:
12628 case BCM57840_MFO:12662 case BCM57840_MFO:
12629 case BCM57810_VF:
12630 case BCM57840_MF:12663 case BCM57840_MF:
12631 case BCM57840_VF:
12632 case BCM57811:12664 case BCM57811:
12633 case BCM57811_MF:12665 case BCM57811_MF:
12634 case BCM57811_VF:
12635 return BNX2X_MULTI_TX_COS_E3B0;12666 return BNX2X_MULTI_TX_COS_E3B0;
12667 case BCM57712_VF:
12668 case BCM57800_VF:
12669 case BCM57810_VF:
12670 case BCM57840_VF:
12671 case BCM57811_VF:
12636 return 1;12672 return 1;
12637 default:12673 default:
12638 pr_err("Unknown board_type (%d), aborting\n", chip_id);12674 pr_err("Unknown board_type (%d), aborting\n", chip_id);
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c+17−12
@@ -470,10 +470,10 @@ static int bnx2x_vfop_qdtor_cmd(struct bnx2x *bp, · 469 unmodified lines
470 bnx2x_vfop_qdtor, cmd->done);470 bnx2x_vfop_qdtor, cmd->done);
471 return bnx2x_vfop_transition(bp, vf, bnx2x_vfop_qdtor,471 return bnx2x_vfop_transition(bp, vf, bnx2x_vfop_qdtor,
472 cmd->block);472 cmd->block);
473 } else {
474 BNX2X_ERR("VF[%d] failed to add a vfop\n", vf->abs_vfid);
475 return -ENOMEM;
473 }476 }
474 DP(BNX2X_MSG_IOV, "VF[%d] failed to add a vfop. rc %d\n",
475 vf->abs_vfid, vfop->rc);
476 return -ENOMEM;
477}477}
478 478
479static void479static void
@@ -3391,14 +3391,16 @@ int bnx2x_set_vf_mac(struct net_device *dev, int vfidx, u8 *mac) · 2911 unmodified lines
3391 rc = bnx2x_del_all_macs(bp, mac_obj, BNX2X_ETH_MAC, true);3391 rc = bnx2x_del_all_macs(bp, mac_obj, BNX2X_ETH_MAC, true);
3392 if (rc) {3392 if (rc) {
3393 BNX2X_ERR("failed to delete eth macs\n");3393 BNX2X_ERR("failed to delete eth macs\n");
3394 return -EINVAL;3394 rc = -EINVAL;
3395 goto out;
3395 }3396 }
3396 3397
3397 /* remove existing uc list macs */3398 /* remove existing uc list macs */
3398 rc = bnx2x_del_all_macs(bp, mac_obj, BNX2X_UC_LIST_MAC, true);3399 rc = bnx2x_del_all_macs(bp, mac_obj, BNX2X_UC_LIST_MAC, true);
3399 if (rc) {3400 if (rc) {
3400 BNX2X_ERR("failed to delete uc_list macs\n");3401 BNX2X_ERR("failed to delete uc_list macs\n");
3401 return -EINVAL;3402 rc = -EINVAL;
3403 goto out;
3402 }3404 }
3403 3405
3404 /* configure the new mac to device */3406 /* configure the new mac to device */
@@ -3406,6 +3408,7 @@ int bnx2x_set_vf_mac(struct net_device *dev, int vfidx, u8 *mac) · 1 unmodified line
3406 bnx2x_set_mac_one(bp, (u8 *)&bulletin->mac, mac_obj, true,3408 bnx2x_set_mac_one(bp, (u8 *)&bulletin->mac, mac_obj, true,
3407 BNX2X_ETH_MAC, &ramrod_flags);3409 BNX2X_ETH_MAC, &ramrod_flags);
3408 3410
3411out:
3409 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_MAC);3412 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_MAC);
3410 }3413 }
3411 3414
@@ -3468,7 +3471,8 @@ int bnx2x_set_vf_vlan(struct net_device *dev, int vfidx, u16 vlan, u8 qos) · 56 unmodified lines
3468 &ramrod_flags);3471 &ramrod_flags);
3469 if (rc) {3472 if (rc) {
3470 BNX2X_ERR("failed to delete vlans\n");3473 BNX2X_ERR("failed to delete vlans\n");
3471 return -EINVAL;3474 rc = -EINVAL;
3475 goto out;
3472 }3476 }
3473 3477
3474 /* send queue update ramrod to configure default vlan and silent3478 /* send queue update ramrod to configure default vlan and silent
@@ -3502,7 +3506,8 @@ int bnx2x_set_vf_vlan(struct net_device *dev, int vfidx, u16 vlan, u8 qos) · 27 unmodified lines
3502 rc = bnx2x_config_vlan_mac(bp, &ramrod_param);3506 rc = bnx2x_config_vlan_mac(bp, &ramrod_param);
3503 if (rc) {3507 if (rc) {
3504 BNX2X_ERR("failed to configure vlan\n");3508 BNX2X_ERR("failed to configure vlan\n");
3505 return -EINVAL;3509 rc = -EINVAL;
3510 goto out;
3506 }3511 }
3507 3512
3508 /* configure default vlan to vf queue and set silent3513 /* configure default vlan to vf queue and set silent
@@ -3520,18 +3525,18 @@ int bnx2x_set_vf_vlan(struct net_device *dev, int vfidx, u16 vlan, u8 qos) · 11 unmodified lines
3520 rc = bnx2x_queue_state_change(bp, &q_params);3525 rc = bnx2x_queue_state_change(bp, &q_params);
3521 if (rc) {3526 if (rc) {
3522 BNX2X_ERR("Failed to configure default VLAN\n");3527 BNX2X_ERR("Failed to configure default VLAN\n");
3523 return rc;3528 goto out;
3524 }3529 }
3525 3530
3526 /* clear the flag indicating that this VF needs its vlan3531 /* clear the flag indicating that this VF needs its vlan
3527 * (will only be set if the HV configured th Vlan before vf was3532 * (will only be set if the HV configured the Vlan before vf was
3528 * and we were called because the VF came up later3533 * up and we were called because the VF came up later
3529 */3534 */
3535out:
3530 vf->cfg_flags &= ~VF_CFG_VLAN;3536 vf->cfg_flags &= ~VF_CFG_VLAN;
3531
3532 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN);3537 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN);
3533 }3538 }
3534 return 0;3539 return rc;
3535}3540}
3536 3541
3537/* crc is the first field in the bulletin board. Compute the crc over the3542/* crc is the first field in the bulletin board. Compute the crc over the
drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c+1−1
@@ -196,7 +196,7 @@ static void bnx2x_hw_stats_post(struct bnx2x *bp) · 195 unmodified lines
196 196
197 } else if (bp->func_stx) {197 } else if (bp->func_stx) {
198 *stats_comp = 0;198 *stats_comp = 0;
199 bnx2x_post_dmae(bp, dmae, INIT_DMAE_C(bp));199 bnx2x_issue_dmae_with_comp(bp, dmae, stats_comp);
200 }200 }
201}201}
202 202
drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c+1−1
@@ -1020,7 +1020,7 @@ static int bnx2x_copy32_vf_dmae(struct bnx2x *bp, u8 from_vf, · 1019 unmodified lines
1020 dmae.len = len32;1020 dmae.len = len32;
1021 1021
1022 /* issue the command and wait for completion */1022 /* issue the command and wait for completion */
1023 return bnx2x_issue_dmae_with_comp(bp, &dmae);1023 return bnx2x_issue_dmae_with_comp(bp, &dmae, bnx2x_sp(bp, wb_comp));
1024}1024}
1025 1025
1026static void bnx2x_vf_mbx_resp_single_tlv(struct bnx2x *bp,1026static void bnx2x_vf_mbx_resp_single_tlv(struct bnx2x *bp,
drivers/net/ethernet/davicom/dm9000.c+38−18
@@ -158,18 +158,6 @@ static inline board_info_t *to_dm9000_board(struct net_device *dev) · 157 unmodified lines
158 158
159/* DM9000 network board routine ---------------------------- */159/* DM9000 network board routine ---------------------------- */
160 160
161static void
162dm9000_reset(board_info_t * db)
163{
164 dev_dbg(db->dev, "resetting device\n");
165
166 /* RESET device */
167 writeb(DM9000_NCR, db->io_addr);
168 udelay(200);
169 writeb(NCR_RST, db->io_data);
170 udelay(200);
171}
172
173/*161/*
174 * Read a byte from I/O port162 * Read a byte from I/O port
175 */163 */
@@ -191,6 +179,27 @@ iow(board_info_t * db, int reg, int value) · 15 unmodified lines
191 writeb(value, db->io_data);179 writeb(value, db->io_data);
192}180}
193 181
182static void
183dm9000_reset(board_info_t *db)
184{
185 dev_dbg(db->dev, "resetting device\n");
186
187 /* Reset DM9000, see DM9000 Application Notes V1.22 Jun 11, 2004 page 29
188 * The essential point is that we have to do a double reset, and the
189 * instruction is to set LBK into MAC internal loopback mode.
190 */
191 iow(db, DM9000_NCR, 0x03);
192 udelay(100); /* Application note says at least 20 us */
193 if (ior(db, DM9000_NCR) & 1)
194 dev_err(db->dev, "dm9000 did not respond to first reset\n");
195
196 iow(db, DM9000_NCR, 0);
197 iow(db, DM9000_NCR, 0x03);
198 udelay(100);
199 if (ior(db, DM9000_NCR) & 1)
200 dev_err(db->dev, "dm9000 did not respond to second reset\n");
201}
202
194/* routines for sending block to chip */203/* routines for sending block to chip */
195 204
196static void dm9000_outblk_8bit(void __iomem *reg, void *data, int count)205static void dm9000_outblk_8bit(void __iomem *reg, void *data, int count)
@@ -744,15 +753,20 @@ static const struct ethtool_ops dm9000_ethtool_ops = { · 547 unmodified lines
744static void dm9000_show_carrier(board_info_t *db,753static void dm9000_show_carrier(board_info_t *db,
745 unsigned carrier, unsigned nsr)754 unsigned carrier, unsigned nsr)
746{755{
756 int lpa;
747 struct net_device *ndev = db->ndev;757 struct net_device *ndev = db->ndev;
758 struct mii_if_info *mii = &db->mii;
748 unsigned ncr = dm9000_read_locked(db, DM9000_NCR);759 unsigned ncr = dm9000_read_locked(db, DM9000_NCR);
749 760
750 if (carrier)761 if (carrier) {
751 dev_info(db->dev, "%s: link up, %dMbps, %s-duplex, no LPA\n",762 lpa = mii->mdio_read(mii->dev, mii->phy_id, MII_LPA);
763 dev_info(db->dev,
764 "%s: link up, %dMbps, %s-duplex, lpa 0x%04X\n",
752 ndev->name, (nsr & NSR_SPEED) ? 10 : 100,765 ndev->name, (nsr & NSR_SPEED) ? 10 : 100,
753 (ncr & NCR_FDX) ? "full" : "half");766 (ncr & NCR_FDX) ? "full" : "half", lpa);
754 else767 } else {
755 dev_info(db->dev, "%s: link down\n", ndev->name);768 dev_info(db->dev, "%s: link down\n", ndev->name);
769 }
756}770}
757 771
758static void772static void
@@ -890,9 +904,15 @@ dm9000_init_dm9000(struct net_device *dev) · 131 unmodified lines
890 (dev->features & NETIF_F_RXCSUM) ? RCSR_CSUM : 0);904 (dev->features & NETIF_F_RXCSUM) ? RCSR_CSUM : 0);
891 905
892 iow(db, DM9000_GPCR, GPCR_GEP_CNTL); /* Let GPIO0 output */906 iow(db, DM9000_GPCR, GPCR_GEP_CNTL); /* Let GPIO0 output */
907 iow(db, DM9000_GPR, 0);
893 908
894 dm9000_phy_write(dev, 0, MII_BMCR, BMCR_RESET); /* PHY RESET */909 /* If we are dealing with DM9000B, some extra steps are required: a
895 dm9000_phy_write(dev, 0, MII_DM_DSPCR, DSPCR_INIT_PARAM); /* Init */910 * manual phy reset, and setting init params.
911 */
912 if (db->type == TYPE_DM9000B) {
913 dm9000_phy_write(dev, 0, MII_BMCR, BMCR_RESET);
914 dm9000_phy_write(dev, 0, MII_DM_DSPCR, DSPCR_INIT_PARAM);
915 }
896 916
897 ncr = (db->flags & DM9000_PLATF_EXT_PHY) ? NCR_EXT_PHY : 0;917 ncr = (db->flags & DM9000_PLATF_EXT_PHY) ? NCR_EXT_PHY : 0;
898 918
drivers/net/ethernet/freescale/gianfar.c+28−10
@@ -88,6 +88,7 @@ · 87 unmodified lines
88 88
89#include <asm/io.h>89#include <asm/io.h>
90#include <asm/reg.h>90#include <asm/reg.h>
91#include <asm/mpc85xx.h>
91#include <asm/irq.h>92#include <asm/irq.h>
92#include <asm/uaccess.h>93#include <asm/uaccess.h>
93#include <linux/module.h>94#include <linux/module.h>
@@ -939,9 +940,8 @@ static void gfar_init_filer_table(struct gfar_private *priv) · 845 unmodified lines
939 }940 }
940}941}
941 942
942static void gfar_detect_errata(struct gfar_private *priv)943static void __gfar_detect_errata_83xx(struct gfar_private *priv)
943{944{
944 struct device *dev = &priv->ofdev->dev;
945 unsigned int pvr = mfspr(SPRN_PVR);945 unsigned int pvr = mfspr(SPRN_PVR);
946 unsigned int svr = mfspr(SPRN_SVR);946 unsigned int svr = mfspr(SPRN_SVR);
947 unsigned int mod = (svr >> 16) & 0xfff6; /* w/o E suffix */947 unsigned int mod = (svr >> 16) & 0xfff6; /* w/o E suffix */
@@ -957,15 +957,33 @@ static void gfar_detect_errata(struct gfar_private *priv) · 9 unmodified lines
957 (pvr == 0x80861010 && (mod & 0xfff9) == 0x80c0))957 (pvr == 0x80861010 && (mod & 0xfff9) == 0x80c0))
958 priv->errata |= GFAR_ERRATA_76;958 priv->errata |= GFAR_ERRATA_76;
959 959
960 /* MPC8313 and MPC837x all rev */960 /* MPC8313 Rev < 2.0 */
961 if ((pvr == 0x80850010 && mod == 0x80b0) ||961 if (pvr == 0x80850010 && mod == 0x80b0 && rev < 0x0020)
962 (pvr == 0x80861010 && (mod & 0xfff9) == 0x80c0))962 priv->errata |= GFAR_ERRATA_12;
963 priv->errata |= GFAR_ERRATA_A002;963}
964 964
965 /* MPC8313 Rev < 2.0, MPC8548 rev 2.0 */965static void __gfar_detect_errata_85xx(struct gfar_private *priv)
966 if ((pvr == 0x80850010 && mod == 0x80b0 && rev < 0x0020) ||966{
967 (pvr == 0x80210020 && mod == 0x8030 && rev == 0x0020))967 unsigned int svr = mfspr(SPRN_SVR);
968
969 if ((SVR_SOC_VER(svr) == SVR_8548) && (SVR_REV(svr) == 0x20))
968 priv->errata |= GFAR_ERRATA_12;970 priv->errata |= GFAR_ERRATA_12;
971 if (((SVR_SOC_VER(svr) == SVR_P2020) && (SVR_REV(svr) < 0x20)) ||
972 ((SVR_SOC_VER(svr) == SVR_P2010) && (SVR_REV(svr) < 0x20)))
973 priv->errata |= GFAR_ERRATA_76; /* aka eTSEC 20 */
974}
975
976static void gfar_detect_errata(struct gfar_private *priv)
977{
978 struct device *dev = &priv->ofdev->dev;
979
980 /* no plans to fix */
981 priv->errata |= GFAR_ERRATA_A002;
982
983 if (pvr_version_is(PVR_VER_E500V1) || pvr_version_is(PVR_VER_E500V2))
984 __gfar_detect_errata_85xx(priv);
985 else /* non-mpc85xx parts, i.e. e300 core based */
986 __gfar_detect_errata_83xx(priv);
969 987
970 if (priv->errata)988 if (priv->errata)
971 dev_info(dev, "enabled errata workarounds, flags: 0x%x\n",989 dev_info(dev, "enabled errata workarounds, flags: 0x%x\n",
@@ -1599,7 +1617,7 @@ static int __gfar_is_rx_idle(struct gfar_private *priv) · 627 unmodified lines
1599 /* Normaly TSEC should not hang on GRS commands, so we should1617 /* Normaly TSEC should not hang on GRS commands, so we should
1600 * actually wait for IEVENT_GRSC flag.1618 * actually wait for IEVENT_GRSC flag.
1601 */1619 */
1602 if (likely(!gfar_has_errata(priv, GFAR_ERRATA_A002)))1620 if (!gfar_has_errata(priv, GFAR_ERRATA_A002))
1603 return 0;1621 return 0;
1604 1622
1605 /* Read the eTSEC register at offset 0xD1C. If bits 7-14 are1623 /* Read the eTSEC register at offset 0xD1C. If bits 7-14 are
drivers/net/ethernet/mellanox/mlx5/core/cmd.c+15−13
@@ -180,28 +180,32 @@ static int verify_block_sig(struct mlx5_cmd_prot_block *block) · 179 unmodified lines
180 return 0;180 return 0;
181}181}
182 182
183static void calc_block_sig(struct mlx5_cmd_prot_block *block, u8 token)183static void calc_block_sig(struct mlx5_cmd_prot_block *block, u8 token,
184 int csum)
184{185{
185 block->token = token;186 block->token = token;
186 block->ctrl_sig = ~xor8_buf(block->rsvd0, sizeof(*block) - sizeof(block->data) - 2);187 if (csum) {
187 block->sig = ~xor8_buf(block, sizeof(*block) - 1);188 block->ctrl_sig = ~xor8_buf(block->rsvd0, sizeof(*block) -
189 sizeof(block->data) - 2);
190 block->sig = ~xor8_buf(block, sizeof(*block) - 1);
191 }
188}192}
189 193
190static void calc_chain_sig(struct mlx5_cmd_msg *msg, u8 token)194static void calc_chain_sig(struct mlx5_cmd_msg *msg, u8 token, int csum)
191{195{
192 struct mlx5_cmd_mailbox *next = msg->next;196 struct mlx5_cmd_mailbox *next = msg->next;
193 197
194 while (next) {198 while (next) {
195 calc_block_sig(next->buf, token);199 calc_block_sig(next->buf, token, csum);
196 next = next->next;200 next = next->next;
197 }201 }
198}202}
199 203
200static void set_signature(struct mlx5_cmd_work_ent *ent)204static void set_signature(struct mlx5_cmd_work_ent *ent, int csum)
201{205{
202 ent->lay->sig = ~xor8_buf(ent->lay, sizeof(*ent->lay));206 ent->lay->sig = ~xor8_buf(ent->lay, sizeof(*ent->lay));
203 calc_chain_sig(ent->in, ent->token);207 calc_chain_sig(ent->in, ent->token, csum);
204 calc_chain_sig(ent->out, ent->token);208 calc_chain_sig(ent->out, ent->token, csum);
205}209}
206 210
207static void poll_timeout(struct mlx5_cmd_work_ent *ent)211static void poll_timeout(struct mlx5_cmd_work_ent *ent)
@@ -539,8 +543,7 @@ static void cmd_work_handler(struct work_struct *work) · 331 unmodified lines
539 lay->type = MLX5_PCI_CMD_XPORT;543 lay->type = MLX5_PCI_CMD_XPORT;
540 lay->token = ent->token;544 lay->token = ent->token;
541 lay->status_own = CMD_OWNER_HW;545 lay->status_own = CMD_OWNER_HW;
542 if (!cmd->checksum_disabled)546 set_signature(ent, !cmd->checksum_disabled);
543 set_signature(ent);
544 dump_command(dev, ent, 1);547 dump_command(dev, ent, 1);
545 ktime_get_ts(&ent->ts1);548 ktime_get_ts(&ent->ts1);
546 549
@@ -773,8 +776,6 @@ static int mlx5_copy_from_msg(void *to, struct mlx5_cmd_msg *from, int size) · 226 unmodified lines
773 776
774 copy = min_t(int, size, MLX5_CMD_DATA_BLOCK_SIZE);777 copy = min_t(int, size, MLX5_CMD_DATA_BLOCK_SIZE);
775 block = next->buf;778 block = next->buf;
776 if (xor8_buf(block, sizeof(*block)) != 0xff)
777 return -EINVAL;
778 779
779 memcpy(to, block->data, copy);780 memcpy(to, block->data, copy);
780 to += copy;781 to += copy;
@@ -1361,6 +1362,7 @@ int mlx5_cmd_init(struct mlx5_core_dev *dev) · 580 unmodified lines
1361 goto err_map;1362 goto err_map;
1362 }1363 }
1363 1364
1365 cmd->checksum_disabled = 1;
1364 cmd->max_reg_cmds = (1 << cmd->log_sz) - 1;1366 cmd->max_reg_cmds = (1 << cmd->log_sz) - 1;
1365 cmd->bitmask = (1 << cmd->max_reg_cmds) - 1;1367 cmd->bitmask = (1 << cmd->max_reg_cmds) - 1;
1366 1368
@@ -1510,7 +1512,7 @@ int mlx5_cmd_status_to_err(struct mlx5_outbox_hdr *hdr) · 143 unmodified lines
1510 case MLX5_CMD_STAT_BAD_SYS_STATE_ERR: return -EIO;1512 case MLX5_CMD_STAT_BAD_SYS_STATE_ERR: return -EIO;
1511 case MLX5_CMD_STAT_BAD_RES_ERR: return -EINVAL;1513 case MLX5_CMD_STAT_BAD_RES_ERR: return -EINVAL;
1512 case MLX5_CMD_STAT_RES_BUSY: return -EBUSY;1514 case MLX5_CMD_STAT_RES_BUSY: return -EBUSY;
1513 case MLX5_CMD_STAT_LIM_ERR: return -EINVAL;1515 case MLX5_CMD_STAT_LIM_ERR: return -ENOMEM;
1514 case MLX5_CMD_STAT_BAD_RES_STATE_ERR: return -EINVAL;1516 case MLX5_CMD_STAT_BAD_RES_STATE_ERR: return -EINVAL;
1515 case MLX5_CMD_STAT_IX_ERR: return -EINVAL;1517 case MLX5_CMD_STAT_IX_ERR: return -EINVAL;
1516 case MLX5_CMD_STAT_NO_RES_ERR: return -EAGAIN;1518 case MLX5_CMD_STAT_NO_RES_ERR: return -EAGAIN;
drivers/net/ethernet/mellanox/mlx5/core/eq.c+3−1
@@ -366,9 +366,11 @@ int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx, · 365 unmodified lines
366 goto err_in;366 goto err_in;
367 }367 }
368 368
369 snprintf(eq->name, MLX5_MAX_EQ_NAME, "%s@pci:%s",
370 name, pci_name(dev->pdev));
369 eq->eqn = out.eq_number;371 eq->eqn = out.eq_number;
370 err = request_irq(table->msix_arr[vecidx].vector, mlx5_msix_handler, 0,372 err = request_irq(table->msix_arr[vecidx].vector, mlx5_msix_handler, 0,
371 name, eq);373 eq->name, eq);
372 if (err)374 if (err)
373 goto err_eq;375 goto err_eq;
374 376
drivers/net/ethernet/mellanox/mlx5/core/main.c+5−16
@@ -165,9 +165,7 @@ static int handle_hca_cap(struct mlx5_core_dev *dev) · 164 unmodified lines
165 struct mlx5_cmd_set_hca_cap_mbox_in *set_ctx = NULL;165 struct mlx5_cmd_set_hca_cap_mbox_in *set_ctx = NULL;
166 struct mlx5_cmd_query_hca_cap_mbox_in query_ctx;166 struct mlx5_cmd_query_hca_cap_mbox_in query_ctx;
167 struct mlx5_cmd_set_hca_cap_mbox_out set_out;167 struct mlx5_cmd_set_hca_cap_mbox_out set_out;
168 struct mlx5_profile *prof = dev->profile;
169 u64 flags;168 u64 flags;
170 int csum = 1;
171 int err;169 int err;
172 170
173 memset(&query_ctx, 0, sizeof(query_ctx));171 memset(&query_ctx, 0, sizeof(query_ctx));
@@ -197,20 +195,14 @@ static int handle_hca_cap(struct mlx5_core_dev *dev) · 23 unmodified lines
197 memcpy(&set_ctx->hca_cap, &query_out->hca_cap,195 memcpy(&set_ctx->hca_cap, &query_out->hca_cap,
198 sizeof(set_ctx->hca_cap));196 sizeof(set_ctx->hca_cap));
199 197
200 if (prof->mask & MLX5_PROF_MASK_CMDIF_CSUM) {
201 csum = !!prof->cmdif_csum;
202 flags = be64_to_cpu(set_ctx->hca_cap.flags);
203 if (csum)
204 flags |= MLX5_DEV_CAP_FLAG_CMDIF_CSUM;
205 else
206 flags &= ~MLX5_DEV_CAP_FLAG_CMDIF_CSUM;
207
208 set_ctx->hca_cap.flags = cpu_to_be64(flags);
209 }
210
211 if (dev->profile->mask & MLX5_PROF_MASK_QP_SIZE)198 if (dev->profile->mask & MLX5_PROF_MASK_QP_SIZE)
212 set_ctx->hca_cap.log_max_qp = dev->profile->log_max_qp;199 set_ctx->hca_cap.log_max_qp = dev->profile->log_max_qp;
213 200
201 flags = be64_to_cpu(query_out->hca_cap.flags);
202 /* disable checksum */
203 flags &= ~MLX5_DEV_CAP_FLAG_CMDIF_CSUM;
204
205 set_ctx->hca_cap.flags = cpu_to_be64(flags);
214 memset(&set_out, 0, sizeof(set_out));206 memset(&set_out, 0, sizeof(set_out));
215 set_ctx->hca_cap.log_uar_page_sz = cpu_to_be16(PAGE_SHIFT - 12);207 set_ctx->hca_cap.log_uar_page_sz = cpu_to_be16(PAGE_SHIFT - 12);
216 set_ctx->hdr.opcode = cpu_to_be16(MLX5_CMD_OP_SET_HCA_CAP);208 set_ctx->hdr.opcode = cpu_to_be16(MLX5_CMD_OP_SET_HCA_CAP);
@@ -225,9 +217,6 @@ static int handle_hca_cap(struct mlx5_core_dev *dev) · 8 unmodified lines
225 if (err)217 if (err)
226 goto query_ex;218 goto query_ex;
227 219
228 if (!csum)
229 dev->cmd.checksum_disabled = 1;
230
231query_ex:220query_ex:
232 kfree(query_out);221 kfree(query_out);
233 kfree(set_ctx);222 kfree(set_ctx);
drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c+14−2
@@ -90,6 +90,10 @@ struct mlx5_manage_pages_outbox { · 89 unmodified lines
90 __be64 pas[0];90 __be64 pas[0];
91};91};
92 92
93enum {
94 MAX_RECLAIM_TIME_MSECS = 5000,
95};
96
93static int insert_page(struct mlx5_core_dev *dev, u64 addr, struct page *page, u16 func_id)97static int insert_page(struct mlx5_core_dev *dev, u64 addr, struct page *page, u16 func_id)
94{98{
95 struct rb_root *root = &dev->priv.page_root;99 struct rb_root *root = &dev->priv.page_root;
@@ -279,6 +283,9 @@ static int reclaim_pages(struct mlx5_core_dev *dev, u32 func_id, int npages, · 183 unmodified lines
279 int err;283 int err;
280 int i;284 int i;
281 285
286 if (nclaimed)
287 *nclaimed = 0;
288
282 memset(&in, 0, sizeof(in));289 memset(&in, 0, sizeof(in));
283 outlen = sizeof(*out) + npages * sizeof(out->pas[0]);290 outlen = sizeof(*out) + npages * sizeof(out->pas[0]);
284 out = mlx5_vzalloc(outlen);291 out = mlx5_vzalloc(outlen);
@@ -388,20 +395,25 @@ static int optimal_reclaimed_pages(void) · 103 unmodified lines
388 395
389int mlx5_reclaim_startup_pages(struct mlx5_core_dev *dev)396int mlx5_reclaim_startup_pages(struct mlx5_core_dev *dev)
390{397{
391 unsigned long end = jiffies + msecs_to_jiffies(5000);398 unsigned long end = jiffies + msecs_to_jiffies(MAX_RECLAIM_TIME_MSECS);
392 struct fw_page *fwp;399 struct fw_page *fwp;
393 struct rb_node *p;400 struct rb_node *p;
401 int nclaimed = 0;
394 int err;402 int err;
395 403
396 do {404 do {
397 p = rb_first(&dev->priv.page_root);405 p = rb_first(&dev->priv.page_root);
398 if (p) {406 if (p) {
399 fwp = rb_entry(p, struct fw_page, rb_node);407 fwp = rb_entry(p, struct fw_page, rb_node);
400 err = reclaim_pages(dev, fwp->func_id, optimal_reclaimed_pages(), NULL);408 err = reclaim_pages(dev, fwp->func_id,
409 optimal_reclaimed_pages(),
410 &nclaimed);
401 if (err) {411 if (err) {
402 mlx5_core_warn(dev, "failed reclaiming pages (%d)\n", err);412 mlx5_core_warn(dev, "failed reclaiming pages (%d)\n", err);
403 return err;413 return err;
404 }414 }
415 if (nclaimed)
416 end = jiffies + msecs_to_jiffies(MAX_RECLAIM_TIME_MSECS);
405 }417 }
406 if (time_after(jiffies, end)) {418 if (time_after(jiffies, end)) {
407 mlx5_core_warn(dev, "FW did not return all pages. giving up...\n");419 mlx5_core_warn(dev, "FW did not return all pages. giving up...\n");
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c+1−1
@@ -691,7 +691,7 @@ static int qlcnic_set_channels(struct net_device *dev, · 690 unmodified lines
691 return err;691 return err;
692 }692 }
693 693
694 if (channel->tx_count) {694 if (qlcnic_82xx_check(adapter) && channel->tx_count) {
695 err = qlcnic_validate_max_tx_rings(adapter, channel->tx_count);695 err = qlcnic_validate_max_tx_rings(adapter, channel->tx_count);
696 if (err)696 if (err)
697 return err;697 return err;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c+1−7
@@ -3648,11 +3648,6 @@ int qlcnic_validate_max_tx_rings(struct qlcnic_adapter *adapter, u32 txq) · 3647 unmodified lines
3648 u8 max_hw = QLCNIC_MAX_TX_RINGS;3648 u8 max_hw = QLCNIC_MAX_TX_RINGS;
3649 u32 max_allowed;3649 u32 max_allowed;
3650 3650
3651 if (!qlcnic_82xx_check(adapter)) {
3652 netdev_err(netdev, "No Multi TX-Q support\n");
3653 return -EINVAL;
3654 }
3655
3656 if (!qlcnic_use_msi_x && !qlcnic_use_msi) {3651 if (!qlcnic_use_msi_x && !qlcnic_use_msi) {
3657 netdev_err(netdev, "No Multi TX-Q support in INT-x mode\n");3652 netdev_err(netdev, "No Multi TX-Q support in INT-x mode\n");
3658 return -EINVAL;3653 return -EINVAL;
@@ -3692,8 +3687,7 @@ int qlcnic_validate_max_rss(struct qlcnic_adapter *adapter, · 33 unmodified lines
3692 u8 max_hw = adapter->ahw->max_rx_ques;3687 u8 max_hw = adapter->ahw->max_rx_ques;
3693 u32 max_allowed;3688 u32 max_allowed;
3694 3689
3695 if (qlcnic_82xx_check(adapter) && !qlcnic_use_msi_x &&3690 if (!qlcnic_use_msi_x && !qlcnic_use_msi) {
3696 !qlcnic_use_msi) {
3697 netdev_err(netdev, "No RSS support in INT-x mode\n");3691 netdev_err(netdev, "No RSS support in INT-x mode\n");
3698 return -EINVAL;3692 return -EINVAL;
3699 }3693 }
drivers/net/ethernet/renesas/sh_eth.c+4−4
@@ -620,16 +620,12 @@ static struct sh_eth_cpu_data sh7734_data = { · 619 unmodified lines
620 .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT |620 .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT |
621 EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE |621 EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE |
622 EESR_TDE | EESR_ECI,622 EESR_TDE | EESR_ECI,
623 .fdr_value = 0x0000070f,
624 .rmcr_value = 0x00000001,
625 623
626 .apr = 1,624 .apr = 1,
627 .mpr = 1,625 .mpr = 1,
628 .tpauser = 1,626 .tpauser = 1,
629 .bculr = 1,627 .bculr = 1,
630 .hw_swap = 1,628 .hw_swap = 1,
631 .rpadir = 1,
632 .rpadir_value = 2 << 16,
633 .no_trimd = 1,629 .no_trimd = 1,
634 .no_ade = 1,630 .no_ade = 1,
635 .tsu = 1,631 .tsu = 1,
@@ -692,12 +688,16 @@ static struct sh_eth_cpu_data r8a7740_data = { · 56 unmodified lines
692 .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT |688 .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT |
693 EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE |689 EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE |
694 EESR_TDE | EESR_ECI,690 EESR_TDE | EESR_ECI,
691 .fdr_value = 0x0000070f,
692 .rmcr_value = 0x00000001,
695 693
696 .apr = 1,694 .apr = 1,
697 .mpr = 1,695 .mpr = 1,
698 .tpauser = 1,696 .tpauser = 1,
699 .bculr = 1,697 .bculr = 1,
700 .hw_swap = 1,698 .hw_swap = 1,
699 .rpadir = 1,
700 .rpadir_value = 2 << 16,
701 .no_trimd = 1,701 .no_trimd = 1,
702 .no_ade = 1,702 .no_ade = 1,
703 .tsu = 1,703 .tsu = 1,
drivers/net/ethernet/smsc/smc91x.h+2−4
@@ -1124,8 +1124,7 @@ static const char * chip_ids[ 16 ] = { · 1123 unmodified lines
1124 void __iomem *__ioaddr = ioaddr; \1124 void __iomem *__ioaddr = ioaddr; \
1125 if (__len >= 2 && (unsigned long)__ptr & 2) { \1125 if (__len >= 2 && (unsigned long)__ptr & 2) { \
1126 __len -= 2; \1126 __len -= 2; \
1127 SMC_outw(*(u16 *)__ptr, ioaddr, \1127 SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
1128 DATA_REG(lp)); \
1129 __ptr += 2; \1128 __ptr += 2; \
1130 } \1129 } \
1131 if (SMC_CAN_USE_DATACS && lp->datacs) \1130 if (SMC_CAN_USE_DATACS && lp->datacs) \
@@ -1133,8 +1132,7 @@ static const char * chip_ids[ 16 ] = { · 1 unmodified line
1133 SMC_outsl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \1132 SMC_outsl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
1134 if (__len & 2) { \1133 if (__len & 2) { \
1135 __ptr += (__len & ~3); \1134 __ptr += (__len & ~3); \
1136 SMC_outw(*((u16 *)__ptr), ioaddr, \1135 SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
1137 DATA_REG(lp)); \
1138 } \1136 } \
1139 } else if (SMC_16BIT(lp)) \1137 } else if (SMC_16BIT(lp)) \
1140 SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \1138 SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
drivers/net/ethernet/ti/cpsw.c+1−8
@@ -637,13 +637,6 @@ void cpsw_rx_handler(void *token, int len, int status) · 636 unmodified lines
637static irqreturn_t cpsw_interrupt(int irq, void *dev_id)637static irqreturn_t cpsw_interrupt(int irq, void *dev_id)
638{638{
639 struct cpsw_priv *priv = dev_id;639 struct cpsw_priv *priv = dev_id;
640 u32 rx, tx, rx_thresh;
641
642 rx_thresh = __raw_readl(&priv->wr_regs->rx_thresh_stat);
643 rx = __raw_readl(&priv->wr_regs->rx_stat);
644 tx = __raw_readl(&priv->wr_regs->tx_stat);
645 if (!rx_thresh && !rx && !tx)
646 return IRQ_NONE;
647 640
648 cpsw_intr_disable(priv);641 cpsw_intr_disable(priv);
649 if (priv->irq_enabled == true) {642 if (priv->irq_enabled == true) {
@@ -1171,9 +1164,9 @@ static int cpsw_ndo_open(struct net_device *ndev) · 521 unmodified lines
1171 }1164 }
1172 }1165 }
1173 1166
1167 napi_enable(&priv->napi);
1174 cpdma_ctlr_start(priv->dma);1168 cpdma_ctlr_start(priv->dma);
1175 cpsw_intr_enable(priv);1169 cpsw_intr_enable(priv);
1176 napi_enable(&priv->napi);
1177 cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX);1170 cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX);
1178 cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX);1171 cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX);
1179 1172
drivers/net/ethernet/ti/davinci_emac.c+1−2
@@ -876,8 +876,7 @@ static void emac_dev_mcast_set(struct net_device *ndev) · 875 unmodified lines
876 netdev_mc_count(ndev) > EMAC_DEF_MAX_MULTICAST_ADDRESSES) {876 netdev_mc_count(ndev) > EMAC_DEF_MAX_MULTICAST_ADDRESSES) {
877 mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);877 mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
878 emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);878 emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);
879 }879 } else if (!netdev_mc_empty(ndev)) {
880 if (!netdev_mc_empty(ndev)) {
881 struct netdev_hw_addr *ha;880 struct netdev_hw_addr *ha;
882 881
883 mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);882 mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
drivers/net/hamradio/yam.c+0−1
@@ -975,7 +975,6 @@ static int yam_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) · 974 unmodified lines
975 return -EINVAL; /* Cannot change this parameter when up */975 return -EINVAL; /* Cannot change this parameter when up */
976 if ((ym = kmalloc(sizeof(struct yamdrv_ioctl_mcs), GFP_KERNEL)) == NULL)976 if ((ym = kmalloc(sizeof(struct yamdrv_ioctl_mcs), GFP_KERNEL)) == NULL)
977 return -ENOBUFS;977 return -ENOBUFS;
978 ym->bitrate = 9600;
979 if (copy_from_user(ym, ifr->ifr_data, sizeof(struct yamdrv_ioctl_mcs))) {978 if (copy_from_user(ym, ifr->ifr_data, sizeof(struct yamdrv_ioctl_mcs))) {
980 kfree(ym);979 kfree(ym);
981 return -EFAULT;980 return -EFAULT;
drivers/net/usb/ax88179_178a.c+20−3
@@ -36,8 +36,8 @@ · 35 unmodified lines
36#define AX_RXHDR_L4_TYPE_TCP 1636#define AX_RXHDR_L4_TYPE_TCP 16
37#define AX_RXHDR_L3CSUM_ERR 237#define AX_RXHDR_L3CSUM_ERR 2
38#define AX_RXHDR_L4CSUM_ERR 138#define AX_RXHDR_L4CSUM_ERR 1
39#define AX_RXHDR_CRC_ERR ((u32)BIT(31))39#define AX_RXHDR_CRC_ERR ((u32)BIT(29))
40#define AX_RXHDR_DROP_ERR ((u32)BIT(30))40#define AX_RXHDR_DROP_ERR ((u32)BIT(31))
41#define AX_ACCESS_MAC 0x0141#define AX_ACCESS_MAC 0x01
42#define AX_ACCESS_PHY 0x0242#define AX_ACCESS_PHY 0x02
43#define AX_ACCESS_EEPROM 0x0443#define AX_ACCESS_EEPROM 0x04
@@ -1406,6 +1406,19 @@ static const struct driver_info sitecom_info = { · 1362 unmodified lines
1406 .tx_fixup = ax88179_tx_fixup,1406 .tx_fixup = ax88179_tx_fixup,
1407};1407};
1408 1408
1409static const struct driver_info samsung_info = {
1410 .description = "Samsung USB Ethernet Adapter",
1411 .bind = ax88179_bind,
1412 .unbind = ax88179_unbind,
1413 .status = ax88179_status,
1414 .link_reset = ax88179_link_reset,
1415 .reset = ax88179_reset,
1416 .stop = ax88179_stop,
1417 .flags = FLAG_ETHER | FLAG_FRAMING_AX,
1418 .rx_fixup = ax88179_rx_fixup,
1419 .tx_fixup = ax88179_tx_fixup,
1420};
1421
1409static const struct usb_device_id products[] = {1422static const struct usb_device_id products[] = {
1410{1423{
1411 /* ASIX AX88179 10/100/1000 */1424 /* ASIX AX88179 10/100/1000 */
@@ -1418,7 +1431,11 @@ static const struct usb_device_id products[] = { · 6 unmodified lines
1418}, {1431}, {
1419 /* Sitecom USB 3.0 to Gigabit Adapter */1432 /* Sitecom USB 3.0 to Gigabit Adapter */
1420 USB_DEVICE(0x0df6, 0x0072),1433 USB_DEVICE(0x0df6, 0x0072),
1421 .driver_info = (unsigned long) &sitecom_info,1434 .driver_info = (unsigned long)&sitecom_info,
1435}, {
1436 /* Samsung USB Ethernet Adapter */
1437 USB_DEVICE(0x04e8, 0xa100),
1438 .driver_info = (unsigned long)&samsung_info,
1422},1439},
1423 { },1440 { },
1424};1441};
drivers/net/usb/qmi_wwan.c+1−0
@@ -730,6 +730,7 @@ static const struct usb_device_id products[] = { · 729 unmodified lines
730 {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */730 {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */
731 {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */731 {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */
732 {QMI_FIXED_INTF(0x1bc7, 0x1201, 2)}, /* Telit LE920 */732 {QMI_FIXED_INTF(0x1bc7, 0x1201, 2)}, /* Telit LE920 */
733 {QMI_FIXED_INTF(0x0b3c, 0xc005, 6)}, /* Olivetti Olicard 200 */
733 {QMI_FIXED_INTF(0x1e2d, 0x0060, 4)}, /* Cinterion PLxx */734 {QMI_FIXED_INTF(0x1e2d, 0x0060, 4)}, /* Cinterion PLxx */
734 735
735 /* 4. Gobi 1000 devices */736 /* 4. Gobi 1000 devices */
drivers/net/usb/usbnet.c+3−1
@@ -1688,8 +1688,10 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod) · 1687 unmodified lines
1688 if (dev->can_dma_sg && !(info->flags & FLAG_SEND_ZLP) &&1688 if (dev->can_dma_sg && !(info->flags & FLAG_SEND_ZLP) &&
1689 !(info->flags & FLAG_MULTI_PACKET)) {1689 !(info->flags & FLAG_MULTI_PACKET)) {
1690 dev->padding_pkt = kzalloc(1, GFP_KERNEL);1690 dev->padding_pkt = kzalloc(1, GFP_KERNEL);
1691 if (!dev->padding_pkt)1691 if (!dev->padding_pkt) {
1692 status = -ENOMEM;
1692 goto out4;1693 goto out4;
1694 }
1693 }1695 }
1694 1696
1695 status = register_netdev (net);1697 status = register_netdev (net);
drivers/net/virtio_net.c+13−1
@@ -938,7 +938,9 @@ static int virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs) · 937 unmodified lines
938 return -EINVAL;938 return -EINVAL;
939 } else {939 } else {
940 vi->curr_queue_pairs = queue_pairs;940 vi->curr_queue_pairs = queue_pairs;
941 schedule_delayed_work(&vi->refill, 0);941 /* virtnet_open() will refill when device is going to up. */
942 if (dev->flags & IFF_UP)
943 schedule_delayed_work(&vi->refill, 0);
942 }944 }
943 945
944 return 0;946 return 0;
@@ -1116,6 +1118,11 @@ static int virtnet_cpu_callback(struct notifier_block *nfb, · 171 unmodified lines
1116{1118{
1117 struct virtnet_info *vi = container_of(nfb, struct virtnet_info, nb);1119 struct virtnet_info *vi = container_of(nfb, struct virtnet_info, nb);
1118 1120
1121 mutex_lock(&vi->config_lock);
1122
1123 if (!vi->config_enable)
1124 goto done;
1125
1119 switch(action & ~CPU_TASKS_FROZEN) {1126 switch(action & ~CPU_TASKS_FROZEN) {
1120 case CPU_ONLINE:1127 case CPU_ONLINE:
1121 case CPU_DOWN_FAILED:1128 case CPU_DOWN_FAILED:
@@ -1128,6 +1135,9 @@ static int virtnet_cpu_callback(struct notifier_block *nfb, · 6 unmodified lines
1128 default:1135 default:
1129 break;1136 break;
1130 }1137 }
1138
1139done:
1140 mutex_unlock(&vi->config_lock);
1131 return NOTIFY_OK;1141 return NOTIFY_OK;
1132}1142}
1133 1143
@@ -1733,7 +1743,9 @@ static int virtnet_restore(struct virtio_device *vdev) · 599 unmodified lines
1733 vi->config_enable = true;1743 vi->config_enable = true;
1734 mutex_unlock(&vi->config_lock);1744 mutex_unlock(&vi->config_lock);
1735 1745
1746 rtnl_lock();
1736 virtnet_set_queues(vi, vi->curr_queue_pairs);1747 virtnet_set_queues(vi, vi->curr_queue_pairs);
1748 rtnl_unlock();
1737 1749
1738 return 0;1750 return 0;
1739}1751}
drivers/net/wan/farsync.c+1−0
@@ -1972,6 +1972,7 @@ fst_get_iface(struct fst_card_info *card, struct fst_port_info *port, · 1971 unmodified lines
1972 }1972 }
1973 1973
1974 i = port->index;1974 i = port->index;
1975 memset(&sync, 0, sizeof(sync));
1975 sync.clock_rate = FST_RDL(card, portConfig[i].lineSpeed);1976 sync.clock_rate = FST_RDL(card, portConfig[i].lineSpeed);
1976 /* Lucky card and linux use same encoding here */1977 /* Lucky card and linux use same encoding here */
1977 sync.clock_type = FST_RDB(card, portConfig[i].internalClock) ==1978 sync.clock_type = FST_RDB(card, portConfig[i].internalClock) ==
drivers/net/wan/wanxl.c+1−0
@@ -355,6 +355,7 @@ static int wanxl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) · 354 unmodified lines
355 ifr->ifr_settings.size = size; /* data size wanted */355 ifr->ifr_settings.size = size; /* data size wanted */
356 return -ENOBUFS;356 return -ENOBUFS;
357 }357 }
358 memset(&line, 0, sizeof(line));
358 line.clock_type = get_status(port)->clocking;359 line.clock_type = get_status(port)->clocking;
359 line.clock_rate = 0;360 line.clock_rate = 0;
360 line.loopback = 0;361 line.loopback = 0;
drivers/net/wireless/ath/ath9k/main.c+11−12
@@ -208,6 +208,7 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) · 207 unmodified lines
208 struct ath_hw *ah = sc->sc_ah;208 struct ath_hw *ah = sc->sc_ah;
209 struct ath_common *common = ath9k_hw_common(ah);209 struct ath_common *common = ath9k_hw_common(ah);
210 unsigned long flags;210 unsigned long flags;
211 int i;
211 212
212 if (ath_startrecv(sc) != 0) {213 if (ath_startrecv(sc) != 0) {
213 ath_err(common, "Unable to restart recv logic\n");214 ath_err(common, "Unable to restart recv logic\n");
@@ -235,6 +236,15 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) · 21 unmodified lines
235 }236 }
236 work:237 work:
237 ath_restart_work(sc);238 ath_restart_work(sc);
239
240 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
241 if (!ATH_TXQ_SETUP(sc, i))
242 continue;
243
244 spin_lock_bh(&sc->tx.txq[i].axq_lock);
245 ath_txq_schedule(sc, &sc->tx.txq[i]);
246 spin_unlock_bh(&sc->tx.txq[i].axq_lock);
247 }
238 }248 }
239 249
240 ieee80211_wake_queues(sc->hw);250 ieee80211_wake_queues(sc->hw);
@@ -619,21 +629,10 @@ chip_reset: · 378 unmodified lines
619 629
620static int ath_reset(struct ath_softc *sc)630static int ath_reset(struct ath_softc *sc)
621{631{
622 int i, r;632 int r;
623 633
624 ath9k_ps_wakeup(sc);634 ath9k_ps_wakeup(sc);
625
626 r = ath_reset_internal(sc, NULL);635 r = ath_reset_internal(sc, NULL);
627
628 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
629 if (!ATH_TXQ_SETUP(sc, i))
630 continue;
631
632 spin_lock_bh(&sc->tx.txq[i].axq_lock);
633 ath_txq_schedule(sc, &sc->tx.txq[i]);
634 spin_unlock_bh(&sc->tx.txq[i].axq_lock);
635 }
636
637 ath9k_ps_restore(sc);636 ath9k_ps_restore(sc);
638 637
639 return r;638 return r;
drivers/net/wireless/cw1200/cw1200_spi.c+2−0
@@ -237,7 +237,9 @@ static irqreturn_t cw1200_spi_irq_handler(int irq, void *dev_id) · 236 unmodified lines
237 struct hwbus_priv *self = dev_id;237 struct hwbus_priv *self = dev_id;
238 238
239 if (self->core) {239 if (self->core) {
240 cw1200_spi_lock(self);
240 cw1200_irq_handler(self->core);241 cw1200_irq_handler(self->core);
242 cw1200_spi_unlock(self);
241 return IRQ_HANDLED;243 return IRQ_HANDLED;
242 } else {244 } else {
243 return IRQ_NONE;245 return IRQ_NONE;
drivers/net/wireless/iwlwifi/iwl-6000.c+6−0
@@ -240,6 +240,12 @@ const struct iwl_cfg iwl6035_2agn_cfg = { · 239 unmodified lines
240 .ht_params = &iwl6000_ht_params,240 .ht_params = &iwl6000_ht_params,
241};241};
242 242
243const struct iwl_cfg iwl6035_2agn_sff_cfg = {
244 .name = "Intel(R) Centrino(R) Ultimate-N 6235 AGN",
245 IWL_DEVICE_6035,
246 .ht_params = &iwl6000_ht_params,
247};
248
243const struct iwl_cfg iwl1030_bgn_cfg = {249const struct iwl_cfg iwl1030_bgn_cfg = {
244 .name = "Intel(R) Centrino(R) Wireless-N 1030 BGN",250 .name = "Intel(R) Centrino(R) Wireless-N 1030 BGN",
245 IWL_DEVICE_6030,251 IWL_DEVICE_6030,
drivers/net/wireless/iwlwifi/iwl-config.h+1−0
@@ -280,6 +280,7 @@ extern const struct iwl_cfg iwl2000_2bgn_cfg; · 279 unmodified lines
280extern const struct iwl_cfg iwl2000_2bgn_d_cfg;280extern const struct iwl_cfg iwl2000_2bgn_d_cfg;
281extern const struct iwl_cfg iwl2030_2bgn_cfg;281extern const struct iwl_cfg iwl2030_2bgn_cfg;
282extern const struct iwl_cfg iwl6035_2agn_cfg;282extern const struct iwl_cfg iwl6035_2agn_cfg;
283extern const struct iwl_cfg iwl6035_2agn_sff_cfg;
283extern const struct iwl_cfg iwl105_bgn_cfg;284extern const struct iwl_cfg iwl105_bgn_cfg;
284extern const struct iwl_cfg iwl105_bgn_d_cfg;285extern const struct iwl_cfg iwl105_bgn_d_cfg;
285extern const struct iwl_cfg iwl135_bgn_cfg;286extern const struct iwl_cfg iwl135_bgn_cfg;
drivers/net/wireless/iwlwifi/iwl-trans.h+4−2
@@ -601,8 +601,10 @@ static inline int iwl_trans_send_cmd(struct iwl_trans *trans, · 600 unmodified lines
601{601{
602 int ret;602 int ret;
603 603
604 WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,604 if (trans->state != IWL_TRANS_FW_ALIVE) {
605 "%s bad state = %d", __func__, trans->state);605 IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
606 return -EIO;
607 }
606 608
607 if (!(cmd->flags & CMD_ASYNC))609 if (!(cmd->flags & CMD_ASYNC))
608 lock_map_acquire_read(&trans->sync_cmd_lockdep_map);610 lock_map_acquire_read(&trans->sync_cmd_lockdep_map);
drivers/net/wireless/iwlwifi/mvm/power.c+4−1
@@ -273,7 +273,10 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, · 272 unmodified lines
273 if (!mvmvif->queue_params[ac].uapsd)273 if (!mvmvif->queue_params[ac].uapsd)
274 continue;274 continue;
275 275
276 cmd->flags |= cpu_to_le16(POWER_FLAGS_ADVANCE_PM_ENA_MSK);276 if (mvm->cur_ucode != IWL_UCODE_WOWLAN)
277 cmd->flags |=
278 cpu_to_le16(POWER_FLAGS_ADVANCE_PM_ENA_MSK);
279
277 cmd->uapsd_ac_flags |= BIT(ac);280 cmd->uapsd_ac_flags |= BIT(ac);
278 281
279 /* QNDP TID - the highest TID with no admission control */282 /* QNDP TID - the highest TID with no admission control */
drivers/net/wireless/iwlwifi/mvm/scan.c+11−1
@@ -394,6 +394,11 @@ static bool iwl_mvm_scan_abort_notif(struct iwl_notif_wait_data *notif_wait, · 393 unmodified lines
394 return false;394 return false;
395 }395 }
396 396
397 /*
398 * If scan cannot be aborted, it means that we had a
399 * SCAN_COMPLETE_NOTIFICATION in the pipe and it called
400 * ieee80211_scan_completed already.
401 */
397 IWL_DEBUG_SCAN(mvm, "Scan cannot be aborted, exit now: %d\n",402 IWL_DEBUG_SCAN(mvm, "Scan cannot be aborted, exit now: %d\n",
398 *resp);403 *resp);
399 return true;404 return true;
@@ -417,14 +422,19 @@ void iwl_mvm_cancel_scan(struct iwl_mvm *mvm) · 17 unmodified lines
417 SCAN_COMPLETE_NOTIFICATION };422 SCAN_COMPLETE_NOTIFICATION };
418 int ret;423 int ret;
419 424
425 if (mvm->scan_status == IWL_MVM_SCAN_NONE)
426 return;
427
420 iwl_init_notification_wait(&mvm->notif_wait, &wait_scan_abort,428 iwl_init_notification_wait(&mvm->notif_wait, &wait_scan_abort,
421 scan_abort_notif,429 scan_abort_notif,
422 ARRAY_SIZE(scan_abort_notif),430 ARRAY_SIZE(scan_abort_notif),
423 iwl_mvm_scan_abort_notif, NULL);431 iwl_mvm_scan_abort_notif, NULL);
424 432
425 ret = iwl_mvm_send_cmd_pdu(mvm, SCAN_ABORT_CMD, CMD_SYNC, 0, NULL);433 ret = iwl_mvm_send_cmd_pdu(mvm, SCAN_ABORT_CMD,
434 CMD_SYNC | CMD_SEND_IN_RFKILL, 0, NULL);
426 if (ret) {435 if (ret) {
427 IWL_ERR(mvm, "Couldn't send SCAN_ABORT_CMD: %d\n", ret);436 IWL_ERR(mvm, "Couldn't send SCAN_ABORT_CMD: %d\n", ret);
437 /* mac80211's state will be cleaned in the fw_restart flow */
428 goto out_remove_notif;438 goto out_remove_notif;
429 }439 }
430 440
drivers/net/wireless/iwlwifi/pcie/drv.c+42−0
@@ -139,13 +139,16 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = { · 138 unmodified lines
139 139
140/* 6x00 Series */140/* 6x00 Series */
141 {IWL_PCI_DEVICE(0x422B, 0x1101, iwl6000_3agn_cfg)},141 {IWL_PCI_DEVICE(0x422B, 0x1101, iwl6000_3agn_cfg)},
142 {IWL_PCI_DEVICE(0x422B, 0x1108, iwl6000_3agn_cfg)},
142 {IWL_PCI_DEVICE(0x422B, 0x1121, iwl6000_3agn_cfg)},143 {IWL_PCI_DEVICE(0x422B, 0x1121, iwl6000_3agn_cfg)},
144 {IWL_PCI_DEVICE(0x422B, 0x1128, iwl6000_3agn_cfg)},
143 {IWL_PCI_DEVICE(0x422C, 0x1301, iwl6000i_2agn_cfg)},145 {IWL_PCI_DEVICE(0x422C, 0x1301, iwl6000i_2agn_cfg)},
144 {IWL_PCI_DEVICE(0x422C, 0x1306, iwl6000i_2abg_cfg)},146 {IWL_PCI_DEVICE(0x422C, 0x1306, iwl6000i_2abg_cfg)},
145 {IWL_PCI_DEVICE(0x422C, 0x1307, iwl6000i_2bg_cfg)},147 {IWL_PCI_DEVICE(0x422C, 0x1307, iwl6000i_2bg_cfg)},
146 {IWL_PCI_DEVICE(0x422C, 0x1321, iwl6000i_2agn_cfg)},148 {IWL_PCI_DEVICE(0x422C, 0x1321, iwl6000i_2agn_cfg)},
147 {IWL_PCI_DEVICE(0x422C, 0x1326, iwl6000i_2abg_cfg)},149 {IWL_PCI_DEVICE(0x422C, 0x1326, iwl6000i_2abg_cfg)},
148 {IWL_PCI_DEVICE(0x4238, 0x1111, iwl6000_3agn_cfg)},150 {IWL_PCI_DEVICE(0x4238, 0x1111, iwl6000_3agn_cfg)},
151 {IWL_PCI_DEVICE(0x4238, 0x1118, iwl6000_3agn_cfg)},
149 {IWL_PCI_DEVICE(0x4239, 0x1311, iwl6000i_2agn_cfg)},152 {IWL_PCI_DEVICE(0x4239, 0x1311, iwl6000i_2agn_cfg)},
150 {IWL_PCI_DEVICE(0x4239, 0x1316, iwl6000i_2abg_cfg)},153 {IWL_PCI_DEVICE(0x4239, 0x1316, iwl6000i_2abg_cfg)},
151 154
@@ -153,12 +156,16 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = { · 1 unmodified line
153 {IWL_PCI_DEVICE(0x0082, 0x1301, iwl6005_2agn_cfg)},156 {IWL_PCI_DEVICE(0x0082, 0x1301, iwl6005_2agn_cfg)},
154 {IWL_PCI_DEVICE(0x0082, 0x1306, iwl6005_2abg_cfg)},157 {IWL_PCI_DEVICE(0x0082, 0x1306, iwl6005_2abg_cfg)},
155 {IWL_PCI_DEVICE(0x0082, 0x1307, iwl6005_2bg_cfg)},158 {IWL_PCI_DEVICE(0x0082, 0x1307, iwl6005_2bg_cfg)},
159 {IWL_PCI_DEVICE(0x0082, 0x1308, iwl6005_2agn_cfg)},
156 {IWL_PCI_DEVICE(0x0082, 0x1321, iwl6005_2agn_cfg)},160 {IWL_PCI_DEVICE(0x0082, 0x1321, iwl6005_2agn_cfg)},
157 {IWL_PCI_DEVICE(0x0082, 0x1326, iwl6005_2abg_cfg)},161 {IWL_PCI_DEVICE(0x0082, 0x1326, iwl6005_2abg_cfg)},
162 {IWL_PCI_DEVICE(0x0082, 0x1328, iwl6005_2agn_cfg)},
158 {IWL_PCI_DEVICE(0x0085, 0x1311, iwl6005_2agn_cfg)},163 {IWL_PCI_DEVICE(0x0085, 0x1311, iwl6005_2agn_cfg)},
164 {IWL_PCI_DEVICE(0x0085, 0x1318, iwl6005_2agn_cfg)},
159 {IWL_PCI_DEVICE(0x0085, 0x1316, iwl6005_2abg_cfg)},165 {IWL_PCI_DEVICE(0x0085, 0x1316, iwl6005_2abg_cfg)},
160 {IWL_PCI_DEVICE(0x0082, 0xC020, iwl6005_2agn_sff_cfg)},166 {IWL_PCI_DEVICE(0x0082, 0xC020, iwl6005_2agn_sff_cfg)},
161 {IWL_PCI_DEVICE(0x0085, 0xC220, iwl6005_2agn_sff_cfg)},167 {IWL_PCI_DEVICE(0x0085, 0xC220, iwl6005_2agn_sff_cfg)},
168 {IWL_PCI_DEVICE(0x0085, 0xC228, iwl6005_2agn_sff_cfg)},
162 {IWL_PCI_DEVICE(0x0082, 0x4820, iwl6005_2agn_d_cfg)},169 {IWL_PCI_DEVICE(0x0082, 0x4820, iwl6005_2agn_d_cfg)},
163 {IWL_PCI_DEVICE(0x0082, 0x1304, iwl6005_2agn_mow1_cfg)},/* low 5GHz active */170 {IWL_PCI_DEVICE(0x0082, 0x1304, iwl6005_2agn_mow1_cfg)},/* low 5GHz active */
164 {IWL_PCI_DEVICE(0x0082, 0x1305, iwl6005_2agn_mow2_cfg)},/* high 5GHz active */171 {IWL_PCI_DEVICE(0x0082, 0x1305, iwl6005_2agn_mow2_cfg)},/* high 5GHz active */
@@ -240,8 +247,11 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = { · 75 unmodified lines
240 247
241/* 6x35 Series */248/* 6x35 Series */
242 {IWL_PCI_DEVICE(0x088E, 0x4060, iwl6035_2agn_cfg)},249 {IWL_PCI_DEVICE(0x088E, 0x4060, iwl6035_2agn_cfg)},
250 {IWL_PCI_DEVICE(0x088E, 0x406A, iwl6035_2agn_sff_cfg)},
243 {IWL_PCI_DEVICE(0x088F, 0x4260, iwl6035_2agn_cfg)},251 {IWL_PCI_DEVICE(0x088F, 0x4260, iwl6035_2agn_cfg)},
252 {IWL_PCI_DEVICE(0x088F, 0x426A, iwl6035_2agn_sff_cfg)},
244 {IWL_PCI_DEVICE(0x088E, 0x4460, iwl6035_2agn_cfg)},253 {IWL_PCI_DEVICE(0x088E, 0x4460, iwl6035_2agn_cfg)},
254 {IWL_PCI_DEVICE(0x088E, 0x446A, iwl6035_2agn_sff_cfg)},
245 {IWL_PCI_DEVICE(0x088E, 0x4860, iwl6035_2agn_cfg)},255 {IWL_PCI_DEVICE(0x088E, 0x4860, iwl6035_2agn_cfg)},
246 {IWL_PCI_DEVICE(0x088F, 0x5260, iwl6035_2agn_cfg)},256 {IWL_PCI_DEVICE(0x088F, 0x5260, iwl6035_2agn_cfg)},
247 257
@@ -260,54 +270,86 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = { · 12 unmodified lines
260#if IS_ENABLED(CONFIG_IWLMVM)270#if IS_ENABLED(CONFIG_IWLMVM)
261/* 7000 Series */271/* 7000 Series */
262 {IWL_PCI_DEVICE(0x08B1, 0x4070, iwl7260_2ac_cfg)},272 {IWL_PCI_DEVICE(0x08B1, 0x4070, iwl7260_2ac_cfg)},
273 {IWL_PCI_DEVICE(0x08B1, 0x4072, iwl7260_2ac_cfg)},
263 {IWL_PCI_DEVICE(0x08B1, 0x4170, iwl7260_2ac_cfg)},274 {IWL_PCI_DEVICE(0x08B1, 0x4170, iwl7260_2ac_cfg)},
264 {IWL_PCI_DEVICE(0x08B1, 0x4060, iwl7260_2n_cfg)},275 {IWL_PCI_DEVICE(0x08B1, 0x4060, iwl7260_2n_cfg)},
276 {IWL_PCI_DEVICE(0x08B1, 0x406A, iwl7260_2n_cfg)},
265 {IWL_PCI_DEVICE(0x08B1, 0x4160, iwl7260_2n_cfg)},277 {IWL_PCI_DEVICE(0x08B1, 0x4160, iwl7260_2n_cfg)},
266 {IWL_PCI_DEVICE(0x08B1, 0x4062, iwl7260_n_cfg)},278 {IWL_PCI_DEVICE(0x08B1, 0x4062, iwl7260_n_cfg)},
267 {IWL_PCI_DEVICE(0x08B1, 0x4162, iwl7260_n_cfg)},279 {IWL_PCI_DEVICE(0x08B1, 0x4162, iwl7260_n_cfg)},
268 {IWL_PCI_DEVICE(0x08B2, 0x4270, iwl7260_2ac_cfg)},280 {IWL_PCI_DEVICE(0x08B2, 0x4270, iwl7260_2ac_cfg)},
281 {IWL_PCI_DEVICE(0x08B2, 0x4272, iwl7260_2ac_cfg)},
269 {IWL_PCI_DEVICE(0x08B2, 0x4260, iwl7260_2n_cfg)},282 {IWL_PCI_DEVICE(0x08B2, 0x4260, iwl7260_2n_cfg)},
283 {IWL_PCI_DEVICE(0x08B2, 0x426A, iwl7260_2n_cfg)},
270 {IWL_PCI_DEVICE(0x08B2, 0x4262, iwl7260_n_cfg)},284 {IWL_PCI_DEVICE(0x08B2, 0x4262, iwl7260_n_cfg)},
271 {IWL_PCI_DEVICE(0x08B1, 0x4470, iwl7260_2ac_cfg)},285 {IWL_PCI_DEVICE(0x08B1, 0x4470, iwl7260_2ac_cfg)},
286 {IWL_PCI_DEVICE(0x08B1, 0x4472, iwl7260_2ac_cfg)},
272 {IWL_PCI_DEVICE(0x08B1, 0x4460, iwl7260_2n_cfg)},287 {IWL_PCI_DEVICE(0x08B1, 0x4460, iwl7260_2n_cfg)},
288 {IWL_PCI_DEVICE(0x08B1, 0x446A, iwl7260_2n_cfg)},
273 {IWL_PCI_DEVICE(0x08B1, 0x4462, iwl7260_n_cfg)},289 {IWL_PCI_DEVICE(0x08B1, 0x4462, iwl7260_n_cfg)},
274 {IWL_PCI_DEVICE(0x08B1, 0x4870, iwl7260_2ac_cfg)},290 {IWL_PCI_DEVICE(0x08B1, 0x4870, iwl7260_2ac_cfg)},
275 {IWL_PCI_DEVICE(0x08B1, 0x486E, iwl7260_2ac_cfg)},291 {IWL_PCI_DEVICE(0x08B1, 0x486E, iwl7260_2ac_cfg)},
276 {IWL_PCI_DEVICE(0x08B1, 0x4A70, iwl7260_2ac_cfg_high_temp)},292 {IWL_PCI_DEVICE(0x08B1, 0x4A70, iwl7260_2ac_cfg_high_temp)},
277 {IWL_PCI_DEVICE(0x08B1, 0x4A6E, iwl7260_2ac_cfg_high_temp)},293 {IWL_PCI_DEVICE(0x08B1, 0x4A6E, iwl7260_2ac_cfg_high_temp)},
278 {IWL_PCI_DEVICE(0x08B1, 0x4A6C, iwl7260_2ac_cfg_high_temp)},294 {IWL_PCI_DEVICE(0x08B1, 0x4A6C, iwl7260_2ac_cfg_high_temp)},
295 {IWL_PCI_DEVICE(0x08B1, 0x4570, iwl7260_2ac_cfg)},
296 {IWL_PCI_DEVICE(0x08B1, 0x4560, iwl7260_2n_cfg)},
297 {IWL_PCI_DEVICE(0x08B2, 0x4370, iwl7260_2ac_cfg)},
298 {IWL_PCI_DEVICE(0x08B2, 0x4360, iwl7260_2n_cfg)},
299 {IWL_PCI_DEVICE(0x08B1, 0x5070, iwl7260_2ac_cfg)},
279 {IWL_PCI_DEVICE(0x08B1, 0x4020, iwl7260_2n_cfg)},300 {IWL_PCI_DEVICE(0x08B1, 0x4020, iwl7260_2n_cfg)},
301 {IWL_PCI_DEVICE(0x08B1, 0x402A, iwl7260_2n_cfg)},
280 {IWL_PCI_DEVICE(0x08B2, 0x4220, iwl7260_2n_cfg)},302 {IWL_PCI_DEVICE(0x08B2, 0x4220, iwl7260_2n_cfg)},
281 {IWL_PCI_DEVICE(0x08B1, 0x4420, iwl7260_2n_cfg)},303 {IWL_PCI_DEVICE(0x08B1, 0x4420, iwl7260_2n_cfg)},
282 {IWL_PCI_DEVICE(0x08B1, 0xC070, iwl7260_2ac_cfg)},304 {IWL_PCI_DEVICE(0x08B1, 0xC070, iwl7260_2ac_cfg)},
305 {IWL_PCI_DEVICE(0x08B1, 0xC072, iwl7260_2ac_cfg)},
283 {IWL_PCI_DEVICE(0x08B1, 0xC170, iwl7260_2ac_cfg)},306 {IWL_PCI_DEVICE(0x08B1, 0xC170, iwl7260_2ac_cfg)},
284 {IWL_PCI_DEVICE(0x08B1, 0xC060, iwl7260_2n_cfg)},307 {IWL_PCI_DEVICE(0x08B1, 0xC060, iwl7260_2n_cfg)},
308 {IWL_PCI_DEVICE(0x08B1, 0xC06A, iwl7260_2n_cfg)},
285 {IWL_PCI_DEVICE(0x08B1, 0xC160, iwl7260_2n_cfg)},309 {IWL_PCI_DEVICE(0x08B1, 0xC160, iwl7260_2n_cfg)},
286 {IWL_PCI_DEVICE(0x08B1, 0xC062, iwl7260_n_cfg)},310 {IWL_PCI_DEVICE(0x08B1, 0xC062, iwl7260_n_cfg)},
287 {IWL_PCI_DEVICE(0x08B1, 0xC162, iwl7260_n_cfg)},311 {IWL_PCI_DEVICE(0x08B1, 0xC162, iwl7260_n_cfg)},
312 {IWL_PCI_DEVICE(0x08B1, 0xC770, iwl7260_2ac_cfg)},
313 {IWL_PCI_DEVICE(0x08B1, 0xC760, iwl7260_2n_cfg)},
288 {IWL_PCI_DEVICE(0x08B2, 0xC270, iwl7260_2ac_cfg)},314 {IWL_PCI_DEVICE(0x08B2, 0xC270, iwl7260_2ac_cfg)},
315 {IWL_PCI_DEVICE(0x08B2, 0xC272, iwl7260_2ac_cfg)},
289 {IWL_PCI_DEVICE(0x08B2, 0xC260, iwl7260_2n_cfg)},316 {IWL_PCI_DEVICE(0x08B2, 0xC260, iwl7260_2n_cfg)},
317 {IWL_PCI_DEVICE(0x08B2, 0xC26A, iwl7260_n_cfg)},
290 {IWL_PCI_DEVICE(0x08B2, 0xC262, iwl7260_n_cfg)},318 {IWL_PCI_DEVICE(0x08B2, 0xC262, iwl7260_n_cfg)},
291 {IWL_PCI_DEVICE(0x08B1, 0xC470, iwl7260_2ac_cfg)},319 {IWL_PCI_DEVICE(0x08B1, 0xC470, iwl7260_2ac_cfg)},
320 {IWL_PCI_DEVICE(0x08B1, 0xC472, iwl7260_2ac_cfg)},
292 {IWL_PCI_DEVICE(0x08B1, 0xC460, iwl7260_2n_cfg)},321 {IWL_PCI_DEVICE(0x08B1, 0xC460, iwl7260_2n_cfg)},
293 {IWL_PCI_DEVICE(0x08B1, 0xC462, iwl7260_n_cfg)},322 {IWL_PCI_DEVICE(0x08B1, 0xC462, iwl7260_n_cfg)},
323 {IWL_PCI_DEVICE(0x08B1, 0xC570, iwl7260_2ac_cfg)},
324 {IWL_PCI_DEVICE(0x08B1, 0xC560, iwl7260_2n_cfg)},
325 {IWL_PCI_DEVICE(0x08B2, 0xC370, iwl7260_2ac_cfg)},
326 {IWL_PCI_DEVICE(0x08B1, 0xC360, iwl7260_2n_cfg)},
294 {IWL_PCI_DEVICE(0x08B1, 0xC020, iwl7260_2n_cfg)},327 {IWL_PCI_DEVICE(0x08B1, 0xC020, iwl7260_2n_cfg)},
328 {IWL_PCI_DEVICE(0x08B1, 0xC02A, iwl7260_2n_cfg)},
295 {IWL_PCI_DEVICE(0x08B2, 0xC220, iwl7260_2n_cfg)},329 {IWL_PCI_DEVICE(0x08B2, 0xC220, iwl7260_2n_cfg)},
296 {IWL_PCI_DEVICE(0x08B1, 0xC420, iwl7260_2n_cfg)},330 {IWL_PCI_DEVICE(0x08B1, 0xC420, iwl7260_2n_cfg)},
297 331
298/* 3160 Series */332/* 3160 Series */
299 {IWL_PCI_DEVICE(0x08B3, 0x0070, iwl3160_2ac_cfg)},333 {IWL_PCI_DEVICE(0x08B3, 0x0070, iwl3160_2ac_cfg)},
334 {IWL_PCI_DEVICE(0x08B3, 0x0072, iwl3160_2ac_cfg)},
300 {IWL_PCI_DEVICE(0x08B3, 0x0170, iwl3160_2ac_cfg)},335 {IWL_PCI_DEVICE(0x08B3, 0x0170, iwl3160_2ac_cfg)},
336 {IWL_PCI_DEVICE(0x08B3, 0x0172, iwl3160_2ac_cfg)},
301 {IWL_PCI_DEVICE(0x08B3, 0x0060, iwl3160_2n_cfg)},337 {IWL_PCI_DEVICE(0x08B3, 0x0060, iwl3160_2n_cfg)},
302 {IWL_PCI_DEVICE(0x08B3, 0x0062, iwl3160_n_cfg)},338 {IWL_PCI_DEVICE(0x08B3, 0x0062, iwl3160_n_cfg)},
303 {IWL_PCI_DEVICE(0x08B4, 0x0270, iwl3160_2ac_cfg)},339 {IWL_PCI_DEVICE(0x08B4, 0x0270, iwl3160_2ac_cfg)},
340 {IWL_PCI_DEVICE(0x08B4, 0x0272, iwl3160_2ac_cfg)},
304 {IWL_PCI_DEVICE(0x08B3, 0x0470, iwl3160_2ac_cfg)},341 {IWL_PCI_DEVICE(0x08B3, 0x0470, iwl3160_2ac_cfg)},
342 {IWL_PCI_DEVICE(0x08B3, 0x0472, iwl3160_2ac_cfg)},
343 {IWL_PCI_DEVICE(0x08B4, 0x0370, iwl3160_2ac_cfg)},
305 {IWL_PCI_DEVICE(0x08B3, 0x8070, iwl3160_2ac_cfg)},344 {IWL_PCI_DEVICE(0x08B3, 0x8070, iwl3160_2ac_cfg)},
345 {IWL_PCI_DEVICE(0x08B3, 0x8072, iwl3160_2ac_cfg)},
306 {IWL_PCI_DEVICE(0x08B3, 0x8170, iwl3160_2ac_cfg)},346 {IWL_PCI_DEVICE(0x08B3, 0x8170, iwl3160_2ac_cfg)},
347 {IWL_PCI_DEVICE(0x08B3, 0x8172, iwl3160_2ac_cfg)},
307 {IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)},348 {IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)},
308 {IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)},349 {IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)},
309 {IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)},350 {IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)},
310 {IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)},351 {IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)},
352 {IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)},
311#endif /* CONFIG_IWLMVM */353#endif /* CONFIG_IWLMVM */
312 354
313 {0}355 {0}
drivers/net/wireless/iwlwifi/pcie/tx.c+2−0
@@ -1102,6 +1102,8 @@ void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo, · 1101 unmodified lines
1102 * non-AGG queue.1102 * non-AGG queue.
1103 */1103 */
1104 iwl_clear_bits_prph(trans, SCD_AGGR_SEL, BIT(txq_id));1104 iwl_clear_bits_prph(trans, SCD_AGGR_SEL, BIT(txq_id));
1105
1106 ssn = trans_pcie->txq[txq_id].q.read_ptr;
1105 }1107 }
1106 1108
1107 /* Place first TFD at index corresponding to start sequence number.1109 /* Place first TFD at index corresponding to start sequence number.
drivers/net/wireless/mwifiex/join.c+8−2
@@ -1422,13 +1422,19 @@ static int mwifiex_deauthenticate_infra(struct mwifiex_private *priv, u8 *mac) · 1421 unmodified lines
1422 */1422 */
1423int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac)1423int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac)
1424{1424{
1425 int ret = 0;
1426
1425 if (!priv->media_connected)1427 if (!priv->media_connected)
1426 return 0;1428 return 0;
1427 1429
1428 switch (priv->bss_mode) {1430 switch (priv->bss_mode) {
1429 case NL80211_IFTYPE_STATION:1431 case NL80211_IFTYPE_STATION:
1430 case NL80211_IFTYPE_P2P_CLIENT:1432 case NL80211_IFTYPE_P2P_CLIENT:
1431 return mwifiex_deauthenticate_infra(priv, mac);1433 ret = mwifiex_deauthenticate_infra(priv, mac);
1434 if (ret)
1435 cfg80211_disconnected(priv->netdev, 0, NULL, 0,
1436 GFP_KERNEL);
1437 break;
1432 case NL80211_IFTYPE_ADHOC:1438 case NL80211_IFTYPE_ADHOC:
1433 return mwifiex_send_cmd_sync(priv,1439 return mwifiex_send_cmd_sync(priv,
1434 HostCmd_CMD_802_11_AD_HOC_STOP,1440 HostCmd_CMD_802_11_AD_HOC_STOP,
@@ -1440,7 +1446,7 @@ int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac) · 5 unmodified lines
1440 break;1446 break;
1441 }1447 }
1442 1448
1443 return 0;1449 return ret;
1444}1450}
1445EXPORT_SYMBOL_GPL(mwifiex_deauthenticate);1451EXPORT_SYMBOL_GPL(mwifiex_deauthenticate);
1446 1452
drivers/net/wireless/mwifiex/sta_event.c+2−1
@@ -118,7 +118,8 @@ mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code) · 117 unmodified lines
118 dev_dbg(adapter->dev,118 dev_dbg(adapter->dev,
119 "info: successfully disconnected from %pM: reason code %d\n",119 "info: successfully disconnected from %pM: reason code %d\n",
120 priv->cfg_bssid, reason_code);120 priv->cfg_bssid, reason_code);
121 if (priv->bss_mode == NL80211_IFTYPE_STATION) {121 if (priv->bss_mode == NL80211_IFTYPE_STATION ||
122 priv->bss_mode == NL80211_IFTYPE_P2P_CLIENT) {
122 cfg80211_disconnected(priv->netdev, reason_code, NULL, 0,123 cfg80211_disconnected(priv->netdev, reason_code, NULL, 0,
123 GFP_KERNEL);124 GFP_KERNEL);
124 }125 }
drivers/net/wireless/rtlwifi/rtl8192cu/trx.c+2−1
@@ -343,7 +343,8 @@ bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw, · 342 unmodified lines
343 (bool)GET_RX_DESC_PAGGR(pdesc));343 (bool)GET_RX_DESC_PAGGR(pdesc));
344 rx_status->mactime = GET_RX_DESC_TSFL(pdesc);344 rx_status->mactime = GET_RX_DESC_TSFL(pdesc);
345 if (phystatus) {345 if (phystatus) {
346 p_drvinfo = (struct rx_fwinfo_92c *)(pdesc + RTL_RX_DESC_SIZE);346 p_drvinfo = (struct rx_fwinfo_92c *)(skb->data +
347 stats->rx_bufshift);
347 rtl92c_translate_rx_signal_stuff(hw, skb, stats, pdesc,348 rtl92c_translate_rx_signal_stuff(hw, skb, stats, pdesc,
348 p_drvinfo);349 p_drvinfo);
349 }350 }
drivers/of/Kconfig+0−6
@@ -74,10 +74,4 @@ config OF_MTD · 73 unmodified lines
74 depends on MTD74 depends on MTD
75 def_bool y75 def_bool y
76 76
77config OF_RESERVED_MEM
78 depends on OF_FLATTREE && (DMA_CMA || (HAVE_GENERIC_DMA_COHERENT && HAVE_MEMBLOCK))
79 def_bool y
80 help
81 Initialization code for DMA reserved memory
82
83endmenu # OF77endmenu # OF
drivers/of/Makefile+0−1
@@ -9,4 +9,3 @@ obj-$(CONFIG_OF_MDIO) += of_mdio.o · 8 unmodified lines
9obj-$(CONFIG_OF_PCI) += of_pci.o9obj-$(CONFIG_OF_PCI) += of_pci.o
10obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o10obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o
11obj-$(CONFIG_OF_MTD) += of_mtd.o11obj-$(CONFIG_OF_MTD) += of_mtd.o
12obj-$(CONFIG_OF_RESERVED_MEM) += of_reserved_mem.o
drivers/of/base.c+1−3
@@ -303,10 +303,8 @@ struct device_node *of_get_cpu_node(int cpu, unsigned int *thread) · 302 unmodified lines
303 struct device_node *cpun, *cpus;303 struct device_node *cpun, *cpus;
304 304
305 cpus = of_find_node_by_path("/cpus");305 cpus = of_find_node_by_path("/cpus");
306 if (!cpus) {306 if (!cpus)
307 pr_warn("Missing cpus node, bailing out\n");
308 return NULL;307 return NULL;
309 }
310 308
311 for_each_child_of_node(cpus, cpun) {309 for_each_child_of_node(cpus, cpun) {
312 if (of_node_cmp(cpun->type, "cpu"))310 if (of_node_cmp(cpun->type, "cpu"))
drivers/of/fdt.c+0−12
@@ -18,7 +18,6 @@ · 17 unmodified lines
18#include <linux/string.h>18#include <linux/string.h>
19#include <linux/errno.h>19#include <linux/errno.h>
20#include <linux/slab.h>20#include <linux/slab.h>
21#include <linux/random.h>
22 21
23#include <asm/setup.h> /* for COMMAND_LINE_SIZE */22#include <asm/setup.h> /* for COMMAND_LINE_SIZE */
24#ifdef CONFIG_PPC23#ifdef CONFIG_PPC
@@ -803,14 +802,3 @@ void __init unflatten_device_tree(void) · 778 unmodified lines
803}802}
804 803
805#endif /* CONFIG_OF_EARLY_FLATTREE */804#endif /* CONFIG_OF_EARLY_FLATTREE */
806
807/* Feed entire flattened device tree into the random pool */
808static int __init add_fdt_randomness(void)
809{
810 if (initial_boot_params)
811 add_device_randomness(initial_boot_params,
812 be32_to_cpu(initial_boot_params->totalsize));
813
814 return 0;
815}
816core_initcall(add_fdt_randomness);
drivers/of/of_reserved_mem.c+0−173
@@ -1,173 +0,0 @@
1/*
2 * Device tree based initialization code for reserved memory.
3 *
4 * Copyright (c) 2013 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com
6 * Author: Marek Szyprowski <m.szyprowski@samsung.com>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of the
11 * License or (at your optional) any later version of the license.
12 */
13
14#include <linux/memblock.h>
15#include <linux/err.h>
16#include <linux/of.h>
17#include <linux/of_fdt.h>
18#include <linux/of_platform.h>
19#include <linux/mm.h>
20#include <linux/sizes.h>
21#include <linux/mm_types.h>
22#include <linux/dma-contiguous.h>
23#include <linux/dma-mapping.h>
24#include <linux/of_reserved_mem.h>
25
26#define MAX_RESERVED_REGIONS 16
27struct reserved_mem {
28 phys_addr_t base;
29 unsigned long size;
30 struct cma *cma;
31 char name[32];
32};
33static struct reserved_mem reserved_mem[MAX_RESERVED_REGIONS];
34static int reserved_mem_count;
35
36static int __init fdt_scan_reserved_mem(unsigned long node, const char *uname,
37 int depth, void *data)
38{
39 struct reserved_mem *rmem = &reserved_mem[reserved_mem_count];
40 phys_addr_t base, size;
41 int is_cma, is_reserved;
42 unsigned long len;
43 const char *status;
44 __be32 *prop;
45
46 is_cma = IS_ENABLED(CONFIG_DMA_CMA) &&
47 of_flat_dt_is_compatible(node, "linux,contiguous-memory-region");
48 is_reserved = of_flat_dt_is_compatible(node, "reserved-memory-region");
49
50 if (!is_reserved && !is_cma) {
51 /* ignore node and scan next one */
52 return 0;
53 }
54
55 status = of_get_flat_dt_prop(node, "status", &len);
56 if (status && strcmp(status, "okay") != 0) {
57 /* ignore disabled node nad scan next one */
58 return 0;
59 }
60
61 prop = of_get_flat_dt_prop(node, "reg", &len);
62 if (!prop || (len < (dt_root_size_cells + dt_root_addr_cells) *
63 sizeof(__be32))) {
64 pr_err("Reserved mem: node %s, incorrect \"reg\" property\n",
65 uname);
66 /* ignore node and scan next one */
67 return 0;
68 }
69 base = dt_mem_next_cell(dt_root_addr_cells, &prop);
70 size = dt_mem_next_cell(dt_root_size_cells, &prop);
71
72 if (!size) {
73 /* ignore node and scan next one */
74 return 0;
75 }
76
77 pr_info("Reserved mem: found %s, memory base %lx, size %ld MiB\n",
78 uname, (unsigned long)base, (unsigned long)size / SZ_1M);
79
80 if (reserved_mem_count == ARRAY_SIZE(reserved_mem))
81 return -ENOSPC;
82
83 rmem->base = base;
84 rmem->size = size;
85 strlcpy(rmem->name, uname, sizeof(rmem->name));
86
87 if (is_cma) {
88 struct cma *cma;
89 if (dma_contiguous_reserve_area(size, base, 0, &cma) == 0) {
90 rmem->cma = cma;
91 reserved_mem_count++;
92 if (of_get_flat_dt_prop(node,
93 "linux,default-contiguous-region",
94 NULL))
95 dma_contiguous_set_default(cma);
96 }
97 } else if (is_reserved) {
98 if (memblock_remove(base, size) == 0)
99 reserved_mem_count++;
100 else
101 pr_err("Failed to reserve memory for %s\n", uname);
102 }
103
104 return 0;
105}
106
107static struct reserved_mem *get_dma_memory_region(struct device *dev)
108{
109 struct device_node *node;
110 const char *name;
111 int i;
112
113 node = of_parse_phandle(dev->of_node, "memory-region", 0);
114 if (!node)
115 return NULL;
116
117 name = kbasename(node->full_name);
118 for (i = 0; i < reserved_mem_count; i++)
119 if (strcmp(name, reserved_mem[i].name) == 0)
120 return &reserved_mem[i];
121 return NULL;
122}
123
124/**
125 * of_reserved_mem_device_init() - assign reserved memory region to given device
126 *
127 * This function assign memory region pointed by "memory-region" device tree
128 * property to the given device.
129 */
130void of_reserved_mem_device_init(struct device *dev)
131{
132 struct reserved_mem *region = get_dma_memory_region(dev);
133 if (!region)
134 return;
135
136 if (region->cma) {
137 dev_set_cma_area(dev, region->cma);
138 pr_info("Assigned CMA %s to %s device\n", region->name,
139 dev_name(dev));
140 } else {
141 if (dma_declare_coherent_memory(dev, region->base, region->base,
142 region->size, DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE) != 0)
143 pr_info("Declared reserved memory %s to %s device\n",
144 region->name, dev_name(dev));
145 }
146}
147
148/**
149 * of_reserved_mem_device_release() - release reserved memory device structures
150 *
151 * This function releases structures allocated for memory region handling for
152 * the given device.
153 */
154void of_reserved_mem_device_release(struct device *dev)
155{
156 struct reserved_mem *region = get_dma_memory_region(dev);
157 if (!region && !region->cma)
158 dma_release_declared_memory(dev);
159}
160
161/**
162 * early_init_dt_scan_reserved_mem() - create reserved memory regions
163 *
164 * This function grabs memory from early allocator for device exclusive use
165 * defined in device tree structures. It should be called by arch specific code
166 * once the early allocator (memblock) has been activated and all other
167 * subsystems have already allocated/reserved memory.
168 */
169void __init early_init_dt_scan_reserved_mem(void)
170{
171 of_scan_flat_dt_by_path("/memory/reserved-memory",
172 fdt_scan_reserved_mem, NULL);
173}
drivers/of/platform.c+0−4
@@ -21,7 +21,6 @@ · 20 unmodified lines
21#include <linux/of_device.h>21#include <linux/of_device.h>
22#include <linux/of_irq.h>22#include <linux/of_irq.h>
23#include <linux/of_platform.h>23#include <linux/of_platform.h>
24#include <linux/of_reserved_mem.h>
25#include <linux/platform_device.h>24#include <linux/platform_device.h>
26 25
27const struct of_device_id of_default_bus_match_table[] = {26const struct of_device_id of_default_bus_match_table[] = {
@@ -219,8 +218,6 @@ static struct platform_device *of_platform_device_create_pdata( · 191 unmodified lines
219 dev->dev.bus = &platform_bus_type;218 dev->dev.bus = &platform_bus_type;
220 dev->dev.platform_data = platform_data;219 dev->dev.platform_data = platform_data;
221 220
222 of_reserved_mem_device_init(&dev->dev);
223
224 /* We do not fill the DMA ops for platform devices by default.221 /* We do not fill the DMA ops for platform devices by default.
225 * This is currently the responsibility of the platform code222 * This is currently the responsibility of the platform code
226 * to do such, possibly using a device notifier223 * to do such, possibly using a device notifier
@@ -228,7 +225,6 @@ static struct platform_device *of_platform_device_create_pdata( · 1 unmodified line
228 225
229 if (of_device_add(dev) != 0) {226 if (of_device_add(dev) != 0) {
230 platform_device_put(dev);227 platform_device_put(dev);
231 of_reserved_mem_device_release(&dev->dev);
232 return NULL;228 return NULL;
233 }229 }
234 230
drivers/pci/hotplug/acpiphp_glue.c+5−3
@@ -994,14 +994,16 @@ void acpiphp_enumerate_slots(struct pci_bus *bus) · 993 unmodified lines
994 994
995 /*995 /*
996 * This bridge should have been registered as a hotplug function996 * This bridge should have been registered as a hotplug function
997 * under its parent, so the context has to be there. If not, we997 * under its parent, so the context should be there, unless the
998 * are in deep goo.998 * parent is going to be handled by pciehp, in which case this
999 * bridge is not interesting to us either.
999 */1000 */
1000 mutex_lock(&acpiphp_context_lock);1001 mutex_lock(&acpiphp_context_lock);
1001 context = acpiphp_get_context(handle);1002 context = acpiphp_get_context(handle);
1002 if (WARN_ON(!context)) {1003 if (!context) {
1003 mutex_unlock(&acpiphp_context_lock);1004 mutex_unlock(&acpiphp_context_lock);
1004 put_device(&bus->dev);1005 put_device(&bus->dev);
1006 pci_dev_put(bridge->pci_dev);
1005 kfree(bridge);1007 kfree(bridge);
1006 return;1008 return;
1007 }1009 }
drivers/pinctrl/pinconf.c+2−2
@@ -490,7 +490,7 @@ exit: · 489 unmodified lines
490 * <devicename> <state> <pinname> are values that should match the pinctrl-maps490 * <devicename> <state> <pinname> are values that should match the pinctrl-maps
491 * <newvalue> reflects the new config and is driver dependant491 * <newvalue> reflects the new config and is driver dependant
492 */492 */
493static int pinconf_dbg_config_write(struct file *file,493static ssize_t pinconf_dbg_config_write(struct file *file,
494 const char __user *user_buf, size_t count, loff_t *ppos)494 const char __user *user_buf, size_t count, loff_t *ppos)
495{495{
496 struct pinctrl_maps *maps_node;496 struct pinctrl_maps *maps_node;
@@ -508,7 +508,7 @@ static int pinconf_dbg_config_write(struct file *file, · 11 unmodified lines
508 int i;508 int i;
509 509
510 /* Get userspace string and assure termination */510 /* Get userspace string and assure termination */
511 buf_size = min(count, (size_t)(sizeof(buf)-1));511 buf_size = min(count, sizeof(buf) - 1);
512 if (copy_from_user(buf, user_buf, buf_size))512 if (copy_from_user(buf, user_buf, buf_size))
513 return -EFAULT;513 return -EFAULT;
514 buf[buf_size] = 0;514 buf[buf_size] = 0;
drivers/pinctrl/pinctrl-exynos.c+6−6
@@ -663,18 +663,18 @@ static void exynos_pinctrl_resume(struct samsung_pinctrl_drv_data *drvdata) · 662 unmodified lines
663/* pin banks of s5pv210 pin-controller */663/* pin banks of s5pv210 pin-controller */
664static struct samsung_pin_bank s5pv210_pin_bank[] = {664static struct samsung_pin_bank s5pv210_pin_bank[] = {
665 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),665 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
666 EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),666 EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpa1", 0x04),
667 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),667 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
668 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),668 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
669 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),669 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
670 EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),670 EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
671 EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpd1", 0x18),671 EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18),
672 EXYNOS_PIN_BANK_EINTG(5, 0x0e0, "gpe0", 0x1c),672 EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpe0", 0x1c),
673 EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpe1", 0x20),673 EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpe1", 0x20),
674 EXYNOS_PIN_BANK_EINTG(6, 0x120, "gpf0", 0x24),674 EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpf0", 0x24),
675 EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpf1", 0x28),675 EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpf1", 0x28),
676 EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpf2", 0x2c),676 EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpf2", 0x2c),
677 EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf3", 0x30),677 EXYNOS_PIN_BANK_EINTG(6, 0x180, "gpf3", 0x30),
678 EXYNOS_PIN_BANK_EINTG(7, 0x1a0, "gpg0", 0x34),678 EXYNOS_PIN_BANK_EINTG(7, 0x1a0, "gpg0", 0x34),
679 EXYNOS_PIN_BANK_EINTG(7, 0x1c0, "gpg1", 0x38),679 EXYNOS_PIN_BANK_EINTG(7, 0x1c0, "gpg1", 0x38),
680 EXYNOS_PIN_BANK_EINTG(7, 0x1e0, "gpg2", 0x3c),680 EXYNOS_PIN_BANK_EINTG(7, 0x1e0, "gpg2", 0x3c),
drivers/pinctrl/pinctrl-palmas.c+3−2
@@ -891,9 +891,10 @@ static int palmas_pinconf_set(struct pinctrl_dev *pctldev, · 890 unmodified lines
891 param = pinconf_to_config_param(configs[i]);891 param = pinconf_to_config_param(configs[i]);
892 param_val = pinconf_to_config_argument(configs[i]);892 param_val = pinconf_to_config_argument(configs[i]);
893 893
894 if (param == PIN_CONFIG_BIAS_PULL_PIN_DEFAULT)
895 continue;
896
894 switch (param) {897 switch (param) {
895 case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT:
896 return 0;
897 case PIN_CONFIG_BIAS_DISABLE:898 case PIN_CONFIG_BIAS_DISABLE:
898 case PIN_CONFIG_BIAS_PULL_UP:899 case PIN_CONFIG_BIAS_PULL_UP:
899 case PIN_CONFIG_BIAS_PULL_DOWN:900 case PIN_CONFIG_BIAS_PULL_DOWN:
drivers/pinctrl/pinctrl-tegra114.c+2−3
@@ -3,7 +3,7 @@ · 2 unmodified lines
3 *3 *
4 * Copyright (c) 2012-2013, NVIDIA CORPORATION. All rights reserved.4 * Copyright (c) 2012-2013, NVIDIA CORPORATION. All rights reserved.
5 *5 *
6 * Arthur: Pritesh Raithatha <praithatha@nvidia.com>6 * Author: Pritesh Raithatha <praithatha@nvidia.com>
7 *7 *
8 * This program is free software; you can redistribute it and/or modify it8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms and conditions of the GNU General Public License,9 * under the terms and conditions of the GNU General Public License,
@@ -2763,7 +2763,6 @@ static struct platform_driver tegra114_pinctrl_driver = { · 2753 unmodified lines
2763};2763};
2764module_platform_driver(tegra114_pinctrl_driver);2764module_platform_driver(tegra114_pinctrl_driver);
2765 2765
2766MODULE_ALIAS("platform:tegra114-pinctrl");
2767MODULE_AUTHOR("Pritesh Raithatha <praithatha@nvidia.com>");2766MODULE_AUTHOR("Pritesh Raithatha <praithatha@nvidia.com>");
2768MODULE_DESCRIPTION("NVIDIA Tegra114 pincontrol driver");2767MODULE_DESCRIPTION("NVIDIA Tegra114 pinctrl driver");
2769MODULE_LICENSE("GPL v2");2768MODULE_LICENSE("GPL v2");
drivers/platform/x86/Kconfig+1−0
@@ -504,6 +504,7 @@ config ASUS_WMI · 503 unmodified lines
504 depends on BACKLIGHT_CLASS_DEVICE504 depends on BACKLIGHT_CLASS_DEVICE
505 depends on RFKILL || RFKILL = n505 depends on RFKILL || RFKILL = n
506 depends on HOTPLUG_PCI506 depends on HOTPLUG_PCI
507 depends on ACPI_VIDEO || ACPI_VIDEO = n
507 select INPUT_SPARSEKMAP508 select INPUT_SPARSEKMAP
508 select LEDS_CLASS509 select LEDS_CLASS
509 select NEW_LEDS510 select NEW_LEDS
drivers/platform/x86/sony-laptop.c+9−17
@@ -127,18 +127,17 @@ MODULE_PARM_DESC(minor, · 126 unmodified lines
127 "default is -1 (automatic)");127 "default is -1 (automatic)");
128#endif128#endif
129 129
130static int kbd_backlight = 1;130static int kbd_backlight = -1;
131module_param(kbd_backlight, int, 0444);131module_param(kbd_backlight, int, 0444);
132MODULE_PARM_DESC(kbd_backlight,132MODULE_PARM_DESC(kbd_backlight,
133 "set this to 0 to disable keyboard backlight, "133 "set this to 0 to disable keyboard backlight, "
134 "1 to enable it (default: 0)");134 "1 to enable it (default: no change from current value)");
135 135
136static int kbd_backlight_timeout; /* = 0 */136static int kbd_backlight_timeout = -1;
137module_param(kbd_backlight_timeout, int, 0444);137module_param(kbd_backlight_timeout, int, 0444);
138MODULE_PARM_DESC(kbd_backlight_timeout,138MODULE_PARM_DESC(kbd_backlight_timeout,
139 "set this to 0 to set the default 10 seconds timeout, "139 "meaningful values vary from 0 to 3 and their meaning depends "
140 "1 for 30 seconds, 2 for 60 seconds and 3 to disable timeout "140 "on the model (default: no change from current value)");
141 "(default: 0)");
142 141
143#ifdef CONFIG_PM_SLEEP142#ifdef CONFIG_PM_SLEEP
144static void sony_nc_kbd_backlight_resume(void);143static void sony_nc_kbd_backlight_resume(void);
@@ -1844,6 +1843,8 @@ static int sony_nc_kbd_backlight_setup(struct platform_device *pd, · 1699 unmodified lines
1844 if (!kbdbl_ctl)1843 if (!kbdbl_ctl)
1845 return -ENOMEM;1844 return -ENOMEM;
1846 1845
1846 kbdbl_ctl->mode = kbd_backlight;
1847 kbdbl_ctl->timeout = kbd_backlight_timeout;
1847 kbdbl_ctl->handle = handle;1848 kbdbl_ctl->handle = handle;
1848 if (handle == 0x0137)1849 if (handle == 0x0137)
1849 kbdbl_ctl->base = 0x0C00;1850 kbdbl_ctl->base = 0x0C00;
@@ -1870,8 +1871,8 @@ static int sony_nc_kbd_backlight_setup(struct platform_device *pd, · 20 unmodified lines
1870 if (ret)1871 if (ret)
1871 goto outmode;1872 goto outmode;
1872 1873
1873 __sony_nc_kbd_backlight_mode_set(kbd_backlight);1874 __sony_nc_kbd_backlight_mode_set(kbdbl_ctl->mode);
1874 __sony_nc_kbd_backlight_timeout_set(kbd_backlight_timeout);1875 __sony_nc_kbd_backlight_timeout_set(kbdbl_ctl->timeout);
1875 1876
1876 return 0;1877 return 0;
1877 1878
@@ -1886,17 +1887,8 @@ outkzalloc: · 8 unmodified lines
1886static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd)1887static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd)
1887{1888{
1888 if (kbdbl_ctl) {1889 if (kbdbl_ctl) {
1889 int result;
1890
1891 device_remove_file(&pd->dev, &kbdbl_ctl->mode_attr);1890 device_remove_file(&pd->dev, &kbdbl_ctl->mode_attr);
1892 device_remove_file(&pd->dev, &kbdbl_ctl->timeout_attr);1891 device_remove_file(&pd->dev, &kbdbl_ctl->timeout_attr);
1893
1894 /* restore the default hw behaviour */
1895 sony_call_snc_handle(kbdbl_ctl->handle,
1896 kbdbl_ctl->base | 0x10000, &result);
1897 sony_call_snc_handle(kbdbl_ctl->handle,
1898 kbdbl_ctl->base + 0x200, &result);
1899
1900 kfree(kbdbl_ctl);1892 kfree(kbdbl_ctl);
1901 kbdbl_ctl = NULL;1893 kbdbl_ctl = NULL;
1902 }1894 }
drivers/s390/block/dasd_eckd.c+71−27
@@ -2077,6 +2077,7 @@ dasd_eckd_build_format(struct dasd_device *base, · 2076 unmodified lines
2077 int intensity = 0;2077 int intensity = 0;
2078 int r0_perm;2078 int r0_perm;
2079 int nr_tracks;2079 int nr_tracks;
2080 int use_prefix;
2080 2081
2081 startdev = dasd_alias_get_start_dev(base);2082 startdev = dasd_alias_get_start_dev(base);
2082 if (!startdev)2083 if (!startdev)
@@ -2106,28 +2107,46 @@ dasd_eckd_build_format(struct dasd_device *base, · 23 unmodified lines
2106 intensity = fdata->intensity;2107 intensity = fdata->intensity;
2107 }2108 }
2108 2109
2110 use_prefix = base_priv->features.feature[8] & 0x01;
2111
2109 switch (intensity) {2112 switch (intensity) {
2110 case 0x00: /* Normal format */2113 case 0x00: /* Normal format */
2111 case 0x08: /* Normal format, use cdl. */2114 case 0x08: /* Normal format, use cdl. */
2112 cplength = 2 + (rpt*nr_tracks);2115 cplength = 2 + (rpt*nr_tracks);
2113 datasize = sizeof(struct PFX_eckd_data) +2116 if (use_prefix)
2114 sizeof(struct LO_eckd_data) +2117 datasize = sizeof(struct PFX_eckd_data) +
2115 rpt * nr_tracks * sizeof(struct eckd_count);2118 sizeof(struct LO_eckd_data) +
2119 rpt * nr_tracks * sizeof(struct eckd_count);
2120 else
2121 datasize = sizeof(struct DE_eckd_data) +
2122 sizeof(struct LO_eckd_data) +
2123 rpt * nr_tracks * sizeof(struct eckd_count);
2116 break;2124 break;
2117 case 0x01: /* Write record zero and format track. */2125 case 0x01: /* Write record zero and format track. */
2118 case 0x09: /* Write record zero and format track, use cdl. */2126 case 0x09: /* Write record zero and format track, use cdl. */
2119 cplength = 2 + rpt * nr_tracks;2127 cplength = 2 + rpt * nr_tracks;
2120 datasize = sizeof(struct PFX_eckd_data) +2128 if (use_prefix)
2121 sizeof(struct LO_eckd_data) +2129 datasize = sizeof(struct PFX_eckd_data) +
2122 sizeof(struct eckd_count) +2130 sizeof(struct LO_eckd_data) +
2123 rpt * nr_tracks * sizeof(struct eckd_count);2131 sizeof(struct eckd_count) +
2132 rpt * nr_tracks * sizeof(struct eckd_count);
2133 else
2134 datasize = sizeof(struct DE_eckd_data) +
2135 sizeof(struct LO_eckd_data) +
2136 sizeof(struct eckd_count) +
2137 rpt * nr_tracks * sizeof(struct eckd_count);
2124 break;2138 break;
2125 case 0x04: /* Invalidate track. */2139 case 0x04: /* Invalidate track. */
2126 case 0x0c: /* Invalidate track, use cdl. */2140 case 0x0c: /* Invalidate track, use cdl. */
2127 cplength = 3;2141 cplength = 3;
2128 datasize = sizeof(struct PFX_eckd_data) +2142 if (use_prefix)
2129 sizeof(struct LO_eckd_data) +2143 datasize = sizeof(struct PFX_eckd_data) +
2130 sizeof(struct eckd_count);2144 sizeof(struct LO_eckd_data) +
2145 sizeof(struct eckd_count);
2146 else
2147 datasize = sizeof(struct DE_eckd_data) +
2148 sizeof(struct LO_eckd_data) +
2149 sizeof(struct eckd_count);
2131 break;2150 break;
2132 default:2151 default:
2133 dev_warn(&startdev->cdev->dev,2152 dev_warn(&startdev->cdev->dev,
@@ -2147,14 +2166,25 @@ dasd_eckd_build_format(struct dasd_device *base, · 13 unmodified lines
2147 2166
2148 switch (intensity & ~0x08) {2167 switch (intensity & ~0x08) {
2149 case 0x00: /* Normal format. */2168 case 0x00: /* Normal format. */
2150 prefix(ccw++, (struct PFX_eckd_data *) data,2169 if (use_prefix) {
2151 fdata->start_unit, fdata->stop_unit,2170 prefix(ccw++, (struct PFX_eckd_data *) data,
2152 DASD_ECKD_CCW_WRITE_CKD, base, startdev);2171 fdata->start_unit, fdata->stop_unit,
2153 /* grant subsystem permission to format R0 */2172 DASD_ECKD_CCW_WRITE_CKD, base, startdev);
2154 if (r0_perm)2173 /* grant subsystem permission to format R0 */
2155 ((struct PFX_eckd_data *)data)2174 if (r0_perm)
2156 ->define_extent.ga_extended |= 0x04;2175 ((struct PFX_eckd_data *)data)
2157 data += sizeof(struct PFX_eckd_data);2176 ->define_extent.ga_extended |= 0x04;
2177 data += sizeof(struct PFX_eckd_data);
2178 } else {
2179 define_extent(ccw++, (struct DE_eckd_data *) data,
2180 fdata->start_unit, fdata->stop_unit,
2181 DASD_ECKD_CCW_WRITE_CKD, startdev);
2182 /* grant subsystem permission to format R0 */
2183 if (r0_perm)
2184 ((struct DE_eckd_data *) data)
2185 ->ga_extended |= 0x04;
2186 data += sizeof(struct DE_eckd_data);
2187 }
2158 ccw[-1].flags |= CCW_FLAG_CC;2188 ccw[-1].flags |= CCW_FLAG_CC;
2159 locate_record(ccw++, (struct LO_eckd_data *) data,2189 locate_record(ccw++, (struct LO_eckd_data *) data,
2160 fdata->start_unit, 0, rpt*nr_tracks,2190 fdata->start_unit, 0, rpt*nr_tracks,
@@ -2163,11 +2193,18 @@ dasd_eckd_build_format(struct dasd_device *base, · 2 unmodified lines
2163 data += sizeof(struct LO_eckd_data);2193 data += sizeof(struct LO_eckd_data);
2164 break;2194 break;
2165 case 0x01: /* Write record zero + format track. */2195 case 0x01: /* Write record zero + format track. */
2166 prefix(ccw++, (struct PFX_eckd_data *) data,2196 if (use_prefix) {
2167 fdata->start_unit, fdata->stop_unit,2197 prefix(ccw++, (struct PFX_eckd_data *) data,
2168 DASD_ECKD_CCW_WRITE_RECORD_ZERO,2198 fdata->start_unit, fdata->stop_unit,
2169 base, startdev);2199 DASD_ECKD_CCW_WRITE_RECORD_ZERO,
2170 data += sizeof(struct PFX_eckd_data);2200 base, startdev);
2201 data += sizeof(struct PFX_eckd_data);
2202 } else {
2203 define_extent(ccw++, (struct DE_eckd_data *) data,
2204 fdata->start_unit, fdata->stop_unit,
2205 DASD_ECKD_CCW_WRITE_RECORD_ZERO, startdev);
2206 data += sizeof(struct DE_eckd_data);
2207 }
2171 ccw[-1].flags |= CCW_FLAG_CC;2208 ccw[-1].flags |= CCW_FLAG_CC;
2172 locate_record(ccw++, (struct LO_eckd_data *) data,2209 locate_record(ccw++, (struct LO_eckd_data *) data,
2173 fdata->start_unit, 0, rpt * nr_tracks + 1,2210 fdata->start_unit, 0, rpt * nr_tracks + 1,
@@ -2176,10 +2213,17 @@ dasd_eckd_build_format(struct dasd_device *base, · 2 unmodified lines
2176 data += sizeof(struct LO_eckd_data);2213 data += sizeof(struct LO_eckd_data);
2177 break;2214 break;
2178 case 0x04: /* Invalidate track. */2215 case 0x04: /* Invalidate track. */
2179 prefix(ccw++, (struct PFX_eckd_data *) data,2216 if (use_prefix) {
2180 fdata->start_unit, fdata->stop_unit,2217 prefix(ccw++, (struct PFX_eckd_data *) data,
2181 DASD_ECKD_CCW_WRITE_CKD, base, startdev);2218 fdata->start_unit, fdata->stop_unit,
2182 data += sizeof(struct PFX_eckd_data);2219 DASD_ECKD_CCW_WRITE_CKD, base, startdev);
2220 data += sizeof(struct PFX_eckd_data);
2221 } else {
2222 define_extent(ccw++, (struct DE_eckd_data *) data,
2223 fdata->start_unit, fdata->stop_unit,
2224 DASD_ECKD_CCW_WRITE_CKD, startdev);
2225 data += sizeof(struct DE_eckd_data);
2226 }
2183 ccw[-1].flags |= CCW_FLAG_CC;2227 ccw[-1].flags |= CCW_FLAG_CC;
2184 locate_record(ccw++, (struct LO_eckd_data *) data,2228 locate_record(ccw++, (struct LO_eckd_data *) data,
2185 fdata->start_unit, 0, 1,2229 fdata->start_unit, 0, 1,
drivers/s390/char/sclp.c+2−2
@@ -486,7 +486,7 @@ sclp_sync_wait(void) · 485 unmodified lines
486 timeout = 0;486 timeout = 0;
487 if (timer_pending(&sclp_request_timer)) {487 if (timer_pending(&sclp_request_timer)) {
488 /* Get timeout TOD value */488 /* Get timeout TOD value */
489 timeout = get_tod_clock() +489 timeout = get_tod_clock_fast() +
490 sclp_tod_from_jiffies(sclp_request_timer.expires -490 sclp_tod_from_jiffies(sclp_request_timer.expires -
491 jiffies);491 jiffies);
492 }492 }
@@ -508,7 +508,7 @@ sclp_sync_wait(void) · 15 unmodified lines
508 while (sclp_running_state != sclp_running_state_idle) {508 while (sclp_running_state != sclp_running_state_idle) {
509 /* Check for expired request timer */509 /* Check for expired request timer */
510 if (timer_pending(&sclp_request_timer) &&510 if (timer_pending(&sclp_request_timer) &&
511 get_tod_clock() > timeout &&511 get_tod_clock_fast() > timeout &&
512 del_timer(&sclp_request_timer))512 del_timer(&sclp_request_timer))
513 sclp_request_timer.function(sclp_request_timer.data);513 sclp_request_timer.function(sclp_request_timer.data);
514 cpu_relax();514 cpu_relax();
drivers/s390/char/sclp_cmd.c+5−3
@@ -145,9 +145,11 @@ bool __init sclp_has_linemode(void) · 144 unmodified lines
145 145
146 if (sccb->header.response_code != 0x20)146 if (sccb->header.response_code != 0x20)
147 return 0;147 return 0;
148 if (sccb->sclp_send_mask & (EVTYP_MSG_MASK | EVTYP_PMSGCMD_MASK))148 if (!(sccb->sclp_send_mask & (EVTYP_OPCMD_MASK | EVTYP_PMSGCMD_MASK)))
149 return 1;149 return 0;
150 return 0;150 if (!(sccb->sclp_receive_mask & (EVTYP_MSG_MASK | EVTYP_PMSGCMD_MASK)))
151 return 0;
152 return 1;
151}153}
152 154
153bool __init sclp_has_vt220(void)155bool __init sclp_has_vt220(void)
drivers/s390/char/tty3270.c+1−1
@@ -810,7 +810,7 @@ static void tty3270_resize_work(struct work_struct *work) · 809 unmodified lines
810 struct winsize ws;810 struct winsize ws;
811 811
812 screen = tty3270_alloc_screen(tp->n_rows, tp->n_cols);812 screen = tty3270_alloc_screen(tp->n_rows, tp->n_cols);
813 if (!screen)813 if (IS_ERR(screen))
814 return;814 return;
815 /* Switch to new output size */815 /* Switch to new output size */
816 spin_lock_bh(&tp->view.lock);816 spin_lock_bh(&tp->view.lock);
drivers/s390/char/vmlogrdr.c+1−1
@@ -313,7 +313,7 @@ static int vmlogrdr_open (struct inode *inode, struct file *filp) · 312 unmodified lines
313 int ret;313 int ret;
314 314
315 dev_num = iminor(inode);315 dev_num = iminor(inode);
316 if (dev_num > MAXMINOR)316 if (dev_num >= MAXMINOR)
317 return -ENODEV;317 return -ENODEV;
318 logptr = &sys_ser[dev_num];318 logptr = &sys_ser[dev_num];
319 319
drivers/s390/cio/cio.c+2−2
@@ -878,9 +878,9 @@ static void css_reset(void) · 877 unmodified lines
878 atomic_inc(&chpid_reset_count);878 atomic_inc(&chpid_reset_count);
879 }879 }
880 /* Wait for machine check for all channel paths. */880 /* Wait for machine check for all channel paths. */
881 timeout = get_tod_clock() + (RCHP_TIMEOUT << 12);881 timeout = get_tod_clock_fast() + (RCHP_TIMEOUT << 12);
882 while (atomic_read(&chpid_reset_count) != 0) {882 while (atomic_read(&chpid_reset_count) != 0) {
883 if (get_tod_clock() > timeout)883 if (get_tod_clock_fast() > timeout)
884 break;884 break;
885 cpu_relax();885 cpu_relax();
886 }886 }
drivers/s390/cio/qdio_main.c+5−5
@@ -338,10 +338,10 @@ again: · 337 unmodified lines
338 retries++;338 retries++;
339 339
340 if (!start_time) {340 if (!start_time) {
341 start_time = get_tod_clock();341 start_time = get_tod_clock_fast();
342 goto again;342 goto again;
343 }343 }
344 if ((get_tod_clock() - start_time) < QDIO_BUSY_BIT_PATIENCE)344 if (get_tod_clock_fast() - start_time < QDIO_BUSY_BIT_PATIENCE)
345 goto again;345 goto again;
346 }346 }
347 if (retries) {347 if (retries) {
@@ -504,7 +504,7 @@ static int get_inbound_buffer_frontier(struct qdio_q *q) · 156 unmodified lines
504 int count, stop;504 int count, stop;
505 unsigned char state = 0;505 unsigned char state = 0;
506 506
507 q->timestamp = get_tod_clock();507 q->timestamp = get_tod_clock_fast();
508 508
509 /*509 /*
510 * Don't check 128 buffers, as otherwise qdio_inbound_q_moved510 * Don't check 128 buffers, as otherwise qdio_inbound_q_moved
@@ -595,7 +595,7 @@ static inline int qdio_inbound_q_done(struct qdio_q *q) · 84 unmodified lines
595 * At this point we know, that inbound first_to_check595 * At this point we know, that inbound first_to_check
596 * has (probably) not moved (see qdio_inbound_processing).596 * has (probably) not moved (see qdio_inbound_processing).
597 */597 */
598 if (get_tod_clock() > q->u.in.timestamp + QDIO_INPUT_THRESHOLD) {598 if (get_tod_clock_fast() > q->u.in.timestamp + QDIO_INPUT_THRESHOLD) {
599 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in done:%02x",599 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in done:%02x",
600 q->first_to_check);600 q->first_to_check);
601 return 1;601 return 1;
@@ -728,7 +728,7 @@ static int get_outbound_buffer_frontier(struct qdio_q *q) · 126 unmodified lines
728 int count, stop;728 int count, stop;
729 unsigned char state = 0;729 unsigned char state = 0;
730 730
731 q->timestamp = get_tod_clock();731 q->timestamp = get_tod_clock_fast();
732 732
733 if (need_siga_sync(q))733 if (need_siga_sync(q))
734 if (((queue_type(q) != QDIO_IQDIO_QFMT) &&734 if (((queue_type(q) != QDIO_IQDIO_QFMT) &&
drivers/spi/spi-atmel.c+2−1
@@ -1583,7 +1583,7 @@ static int atmel_spi_probe(struct platform_device *pdev) · 1582 unmodified lines
1583 /* Initialize the hardware */1583 /* Initialize the hardware */
1584 ret = clk_prepare_enable(clk);1584 ret = clk_prepare_enable(clk);
1585 if (ret)1585 if (ret)
1586 goto out_unmap_regs;1586 goto out_free_irq;
1587 spi_writel(as, CR, SPI_BIT(SWRST));1587 spi_writel(as, CR, SPI_BIT(SWRST));
1588 spi_writel(as, CR, SPI_BIT(SWRST)); /* AT91SAM9263 Rev B workaround */1588 spi_writel(as, CR, SPI_BIT(SWRST)); /* AT91SAM9263 Rev B workaround */
1589 if (as->caps.has_wdrbt) {1589 if (as->caps.has_wdrbt) {
@@ -1614,6 +1614,7 @@ out_free_dma: · 24 unmodified lines
1614 spi_writel(as, CR, SPI_BIT(SWRST));1614 spi_writel(as, CR, SPI_BIT(SWRST));
1615 spi_writel(as, CR, SPI_BIT(SWRST)); /* AT91SAM9263 Rev B workaround */1615 spi_writel(as, CR, SPI_BIT(SWRST)); /* AT91SAM9263 Rev B workaround */
1616 clk_disable_unprepare(clk);1616 clk_disable_unprepare(clk);
1617out_free_irq:
1617 free_irq(irq, master);1618 free_irq(irq, master);
1618out_unmap_regs:1619out_unmap_regs:
1619 iounmap(as->regs);1620 iounmap(as->regs);
drivers/spi/spi-clps711x.c+0−3
@@ -226,7 +226,6 @@ static int spi_clps711x_probe(struct platform_device *pdev) · 225 unmodified lines
226 dev_name(&pdev->dev), hw);226 dev_name(&pdev->dev), hw);
227 if (ret) {227 if (ret) {
228 dev_err(&pdev->dev, "Can't request IRQ\n");228 dev_err(&pdev->dev, "Can't request IRQ\n");
229 clk_put(hw->spi_clk);
230 goto clk_out;229 goto clk_out;
231 }230 }
232 231
@@ -247,7 +246,6 @@ err_out: · 14 unmodified lines
247 gpio_free(hw->chipselect[i]);246 gpio_free(hw->chipselect[i]);
248 247
249 spi_master_put(master);248 spi_master_put(master);
250 kfree(master);
251 249
252 return ret;250 return ret;
253}251}
@@ -263,7 +261,6 @@ static int spi_clps711x_remove(struct platform_device *pdev) · 9 unmodified lines
263 gpio_free(hw->chipselect[i]);261 gpio_free(hw->chipselect[i]);
264 262
265 spi_unregister_master(master);263 spi_unregister_master(master);
266 kfree(master);
267 264
268 return 0;265 return 0;
269}266}
drivers/spi/spi-fsl-dspi.c+2−8
@@ -476,15 +476,9 @@ static int dspi_probe(struct platform_device *pdev) · 475 unmodified lines
476 master->bus_num = bus_num;476 master->bus_num = bus_num;
477 477
478 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);478 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
479 if (!res) {
480 dev_err(&pdev->dev, "can't get platform resource\n");
481 ret = -EINVAL;
482 goto out_master_put;
483 }
484
485 dspi->base = devm_ioremap_resource(&pdev->dev, res);479 dspi->base = devm_ioremap_resource(&pdev->dev, res);
486 if (!dspi->base) {480 if (IS_ERR(dspi->base)) {
487 ret = -EINVAL;481 ret = PTR_ERR(dspi->base);
488 goto out_master_put;482 goto out_master_put;
489 }483 }
490 484
drivers/spi/spi-mpc512x-psc.c+3−1
@@ -522,8 +522,10 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr, · 521 unmodified lines
522 psc_num = master->bus_num;522 psc_num = master->bus_num;
523 snprintf(clk_name, sizeof(clk_name), "psc%d_mclk", psc_num);523 snprintf(clk_name, sizeof(clk_name), "psc%d_mclk", psc_num);
524 clk = devm_clk_get(dev, clk_name);524 clk = devm_clk_get(dev, clk_name);
525 if (IS_ERR(clk))525 if (IS_ERR(clk)) {
526 ret = PTR_ERR(clk);
526 goto free_irq;527 goto free_irq;
528 }
527 ret = clk_prepare_enable(clk);529 ret = clk_prepare_enable(clk);
528 if (ret)530 if (ret)
529 goto free_irq;531 goto free_irq;
drivers/spi/spi-pxa2xx.c+10−1
@@ -546,8 +546,17 @@ static irqreturn_t ssp_int(int irq, void *dev_id) · 545 unmodified lines
546 if (pm_runtime_suspended(&drv_data->pdev->dev))546 if (pm_runtime_suspended(&drv_data->pdev->dev))
547 return IRQ_NONE;547 return IRQ_NONE;
548 548
549 sccr1_reg = read_SSCR1(reg);549 /*
550 * If the device is not yet in RPM suspended state and we get an
551 * interrupt that is meant for another device, check if status bits
552 * are all set to one. That means that the device is already
553 * powered off.
554 */
550 status = read_SSSR(reg);555 status = read_SSSR(reg);
556 if (status == ~0)
557 return IRQ_NONE;
558
559 sccr1_reg = read_SSCR1(reg);
551 560
552 /* Ignore possible writes if we don't need to write */561 /* Ignore possible writes if we don't need to write */
553 if (!(sccr1_reg & SSCR1_TIE))562 if (!(sccr1_reg & SSCR1_TIE))
drivers/spi/spi-s3c64xx.c+2−2
@@ -1428,6 +1428,8 @@ static int s3c64xx_spi_probe(struct platform_device *pdev) · 1427 unmodified lines
1428 S3C64XX_SPI_INT_TX_OVERRUN_EN | S3C64XX_SPI_INT_TX_UNDERRUN_EN,1428 S3C64XX_SPI_INT_TX_OVERRUN_EN | S3C64XX_SPI_INT_TX_UNDERRUN_EN,
1429 sdd->regs + S3C64XX_SPI_INT_EN);1429 sdd->regs + S3C64XX_SPI_INT_EN);
1430 1430
1431 pm_runtime_enable(&pdev->dev);
1432
1431 if (spi_register_master(master)) {1433 if (spi_register_master(master)) {
1432 dev_err(&pdev->dev, "cannot register SPI master\n");1434 dev_err(&pdev->dev, "cannot register SPI master\n");
1433 ret = -EBUSY;1435 ret = -EBUSY;
@@ -1440,8 +1442,6 @@ static int s3c64xx_spi_probe(struct platform_device *pdev) · 6 unmodified lines
1440 mem_res,1442 mem_res,
1441 sdd->rx_dma.dmach, sdd->tx_dma.dmach);1443 sdd->rx_dma.dmach, sdd->tx_dma.dmach);
1442 1444
1443 pm_runtime_enable(&pdev->dev);
1444
1445 return 0;1445 return 0;
1446 1446
1447err3:1447err3:
drivers/spi/spi-sh-hspi.c+2−2
@@ -296,6 +296,8 @@ static int hspi_probe(struct platform_device *pdev) · 295 unmodified lines
296 goto error1;296 goto error1;
297 }297 }
298 298
299 pm_runtime_enable(&pdev->dev);
300
299 master->num_chipselect = 1;301 master->num_chipselect = 1;
300 master->bus_num = pdev->id;302 master->bus_num = pdev->id;
301 master->setup = hspi_setup;303 master->setup = hspi_setup;
@@ -309,8 +311,6 @@ static int hspi_probe(struct platform_device *pdev) · 7 unmodified lines
309 goto error1;311 goto error1;
310 }312 }
311 313
312 pm_runtime_enable(&pdev->dev);
313
314 return 0;314 return 0;
315 315
316 error1:316 error1:
drivers/staging/comedi/drivers/ni_65xx.c+10−15
@@ -369,28 +369,23 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, · 368 unmodified lines
369{369{
370 const struct ni_65xx_board *board = comedi_board(dev);370 const struct ni_65xx_board *board = comedi_board(dev);
371 struct ni_65xx_private *devpriv = dev->private;371 struct ni_65xx_private *devpriv = dev->private;
372 unsigned base_bitfield_channel;372 int base_bitfield_channel;
373 const unsigned max_ports_per_bitfield = 5;
374 unsigned read_bits = 0;373 unsigned read_bits = 0;
375 unsigned j;374 int last_port_offset = ni_65xx_port_by_channel(s->n_chan - 1);
375 int port_offset;
376 376
377 base_bitfield_channel = CR_CHAN(insn->chanspec);377 base_bitfield_channel = CR_CHAN(insn->chanspec);
378 for (j = 0; j < max_ports_per_bitfield; ++j) {378 for (port_offset = ni_65xx_port_by_channel(base_bitfield_channel);
379 const unsigned port_offset =379 port_offset <= last_port_offset; port_offset++) {
380 ni_65xx_port_by_channel(base_bitfield_channel) + j;380 unsigned port = sprivate(s)->base_port + port_offset;
381 const unsigned port =381 int base_port_channel = port_offset * ni_65xx_channels_per_port;
382 sprivate(s)->base_port + port_offset;
383 unsigned base_port_channel;
384 unsigned port_mask, port_data, port_read_bits;382 unsigned port_mask, port_data, port_read_bits;
385 int bitshift;383 int bitshift = base_port_channel - base_bitfield_channel;
386 if (port >= ni_65xx_total_num_ports(board))384
385 if (bitshift >= 32)
387 break;386 break;
388 base_port_channel = port_offset * ni_65xx_channels_per_port;
389 port_mask = data[0];387 port_mask = data[0];
390 port_data = data[1];388 port_data = data[1];
391 bitshift = base_port_channel - base_bitfield_channel;
392 if (bitshift >= 32 || bitshift <= -32)
393 break;
394 if (bitshift > 0) {389 if (bitshift > 0) {
395 port_mask >>= bitshift;390 port_mask >>= bitshift;
396 port_data >>= bitshift;391 port_data >>= bitshift;
drivers/staging/media/msi3101/Kconfig+1−0
@@ -1,3 +1,4 @@
1config USB_MSI31011config USB_MSI3101
2 tristate "Mirics MSi3101 SDR Dongle"2 tristate "Mirics MSi3101 SDR Dongle"
3 depends on USB && VIDEO_DEV && VIDEO_V4L23 depends on USB && VIDEO_DEV && VIDEO_V4L2
4 select VIDEOBUF2_VMALLOC
drivers/staging/media/msi3101/sdr-msi3101.c+8−2
@@ -1131,7 +1131,13 @@ static int msi3101_queue_setup(struct vb2_queue *vq, · 1130 unmodified lines
1131 /* Absolute min and max number of buffers available for mmap() */1131 /* Absolute min and max number of buffers available for mmap() */
1132 *nbuffers = 32;1132 *nbuffers = 32;
1133 *nplanes = 1;1133 *nplanes = 1;
1134 sizes[0] = PAGE_ALIGN(3 * 3072); /* 3 * 768 * 4 */1134 /*
1135 * 3, wMaxPacketSize 3x 1024 bytes
1136 * 504, max IQ sample pairs per 1024 frame
1137 * 2, two samples, I and Q
1138 * 4, 32-bit float
1139 */
1140 sizes[0] = PAGE_ALIGN(3 * 504 * 2 * 4); /* = 12096 */
1135 dev_dbg(&s->udev->dev, "%s: nbuffers=%d sizes[0]=%d\n",1141 dev_dbg(&s->udev->dev, "%s: nbuffers=%d sizes[0]=%d\n",
1136 __func__, *nbuffers, sizes[0]);1142 __func__, *nbuffers, sizes[0]);
1137 return 0;1143 return 0;
@@ -1657,7 +1663,7 @@ static int vidioc_s_frequency(struct file *file, void *priv, · 519 unmodified lines
1657 f->frequency * 625UL / 10UL);1663 f->frequency * 625UL / 10UL);
1658}1664}
1659 1665
1660const struct v4l2_ioctl_ops msi3101_ioctl_ops = {1666static const struct v4l2_ioctl_ops msi3101_ioctl_ops = {
1661 .vidioc_querycap = msi3101_querycap,1667 .vidioc_querycap = msi3101_querycap,
1662 1668
1663 .vidioc_enum_input = msi3101_enum_input,1669 .vidioc_enum_input = msi3101_enum_input,
drivers/target/iscsi/iscsi_target.c+9−4
@@ -753,7 +753,8 @@ static void iscsit_unmap_iovec(struct iscsi_cmd *cmd) · 752 unmodified lines
753 753
754static void iscsit_ack_from_expstatsn(struct iscsi_conn *conn, u32 exp_statsn)754static void iscsit_ack_from_expstatsn(struct iscsi_conn *conn, u32 exp_statsn)
755{755{
756 struct iscsi_cmd *cmd;756 LIST_HEAD(ack_list);
757 struct iscsi_cmd *cmd, *cmd_p;
757 758
758 conn->exp_statsn = exp_statsn;759 conn->exp_statsn = exp_statsn;
759 760
@@ -761,19 +762,23 @@ static void iscsit_ack_from_expstatsn(struct iscsi_conn *conn, u32 exp_statsn) · 1 unmodified line
761 return;762 return;
762 763
763 spin_lock_bh(&conn->cmd_lock);764 spin_lock_bh(&conn->cmd_lock);
764 list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) {765 list_for_each_entry_safe(cmd, cmd_p, &conn->conn_cmd_list, i_conn_node) {
765 spin_lock(&cmd->istate_lock);766 spin_lock(&cmd->istate_lock);
766 if ((cmd->i_state == ISTATE_SENT_STATUS) &&767 if ((cmd->i_state == ISTATE_SENT_STATUS) &&
767 iscsi_sna_lt(cmd->stat_sn, exp_statsn)) {768 iscsi_sna_lt(cmd->stat_sn, exp_statsn)) {
768 cmd->i_state = ISTATE_REMOVE;769 cmd->i_state = ISTATE_REMOVE;
769 spin_unlock(&cmd->istate_lock);770 spin_unlock(&cmd->istate_lock);
770 iscsit_add_cmd_to_immediate_queue(cmd, conn,771 list_move_tail(&cmd->i_conn_node, &ack_list);
771 cmd->i_state);
772 continue;772 continue;
773 }773 }
774 spin_unlock(&cmd->istate_lock);774 spin_unlock(&cmd->istate_lock);
775 }775 }
776 spin_unlock_bh(&conn->cmd_lock);776 spin_unlock_bh(&conn->cmd_lock);
777
778 list_for_each_entry_safe(cmd, cmd_p, &ack_list, i_conn_node) {
779 list_del(&cmd->i_conn_node);
780 iscsit_free_cmd(cmd, false);
781 }
777}782}
778 783
779static int iscsit_allocate_iovecs(struct iscsi_cmd *cmd)784static int iscsit_allocate_iovecs(struct iscsi_cmd *cmd)
drivers/target/iscsi/iscsi_target_nego.c+1−1
@@ -1192,7 +1192,7 @@ get_target: · 1191 unmodified lines
1192 */1192 */
1193alloc_tags:1193alloc_tags:
1194 tag_num = max_t(u32, ISCSIT_MIN_TAGS, queue_depth);1194 tag_num = max_t(u32, ISCSIT_MIN_TAGS, queue_depth);
1195 tag_num += ISCSIT_EXTRA_TAGS;1195 tag_num += (tag_num / 2) + ISCSIT_EXTRA_TAGS;
1196 tag_size = sizeof(struct iscsi_cmd) + conn->conn_transport->priv_size;1196 tag_size = sizeof(struct iscsi_cmd) + conn->conn_transport->priv_size;
1197 1197
1198 ret = transport_alloc_session_tags(sess->se_sess, tag_num, tag_size);1198 ret = transport_alloc_session_tags(sess->se_sess, tag_num, tag_size);
drivers/target/iscsi/iscsi_target_util.c+2−2
@@ -736,7 +736,7 @@ void iscsit_free_cmd(struct iscsi_cmd *cmd, bool shutdown) · 735 unmodified lines
736 * Fallthrough736 * Fallthrough
737 */737 */
738 case ISCSI_OP_SCSI_TMFUNC:738 case ISCSI_OP_SCSI_TMFUNC:
739 rc = transport_generic_free_cmd(&cmd->se_cmd, 1);739 rc = transport_generic_free_cmd(&cmd->se_cmd, shutdown);
740 if (!rc && shutdown && se_cmd && se_cmd->se_sess) {740 if (!rc && shutdown && se_cmd && se_cmd->se_sess) {
741 __iscsit_free_cmd(cmd, true, shutdown);741 __iscsit_free_cmd(cmd, true, shutdown);
742 target_put_sess_cmd(se_cmd->se_sess, se_cmd);742 target_put_sess_cmd(se_cmd->se_sess, se_cmd);
@@ -752,7 +752,7 @@ void iscsit_free_cmd(struct iscsi_cmd *cmd, bool shutdown) · 9 unmodified lines
752 se_cmd = &cmd->se_cmd;752 se_cmd = &cmd->se_cmd;
753 __iscsit_free_cmd(cmd, true, shutdown);753 __iscsit_free_cmd(cmd, true, shutdown);
754 754
755 rc = transport_generic_free_cmd(&cmd->se_cmd, 1);755 rc = transport_generic_free_cmd(&cmd->se_cmd, shutdown);
756 if (!rc && shutdown && se_cmd->se_sess) {756 if (!rc && shutdown && se_cmd->se_sess) {
757 __iscsit_free_cmd(cmd, true, shutdown);757 __iscsit_free_cmd(cmd, true, shutdown);
758 target_put_sess_cmd(se_cmd->se_sess, se_cmd);758 target_put_sess_cmd(se_cmd->se_sess, se_cmd);
drivers/target/target_core_sbc.c+26−2
@@ -349,7 +349,16 @@ static sense_reason_t compare_and_write_post(struct se_cmd *cmd) · 348 unmodified lines
349{349{
350 struct se_device *dev = cmd->se_dev;350 struct se_device *dev = cmd->se_dev;
351 351
352 cmd->se_cmd_flags |= SCF_COMPARE_AND_WRITE_POST;352 /*
353 * Only set SCF_COMPARE_AND_WRITE_POST to force a response fall-through
354 * within target_complete_ok_work() if the command was successfully
355 * sent to the backend driver.
356 */
357 spin_lock_irq(&cmd->t_state_lock);
358 if ((cmd->transport_state & CMD_T_SENT) && !cmd->scsi_status)
359 cmd->se_cmd_flags |= SCF_COMPARE_AND_WRITE_POST;
360 spin_unlock_irq(&cmd->t_state_lock);
361
353 /*362 /*
354 * Unlock ->caw_sem originally obtained during sbc_compare_and_write()363 * Unlock ->caw_sem originally obtained during sbc_compare_and_write()
355 * before the original READ I/O submission.364 * before the original READ I/O submission.
@@ -363,7 +372,7 @@ static sense_reason_t compare_and_write_callback(struct se_cmd *cmd) · 7 unmodified lines
363{372{
364 struct se_device *dev = cmd->se_dev;373 struct se_device *dev = cmd->se_dev;
365 struct scatterlist *write_sg = NULL, *sg;374 struct scatterlist *write_sg = NULL, *sg;
366 unsigned char *buf, *addr;375 unsigned char *buf = NULL, *addr;
367 struct sg_mapping_iter m;376 struct sg_mapping_iter m;
368 unsigned int offset = 0, len;377 unsigned int offset = 0, len;
369 unsigned int nlbas = cmd->t_task_nolb;378 unsigned int nlbas = cmd->t_task_nolb;
@@ -378,6 +387,15 @@ static sense_reason_t compare_and_write_callback(struct se_cmd *cmd) · 8 unmodified lines
378 */387 */
379 if (!cmd->t_data_sg || !cmd->t_bidi_data_sg)388 if (!cmd->t_data_sg || !cmd->t_bidi_data_sg)
380 return TCM_NO_SENSE;389 return TCM_NO_SENSE;
390 /*
391 * Immediately exit + release dev->caw_sem if command has already
392 * been failed with a non-zero SCSI status.
393 */
394 if (cmd->scsi_status) {
395 pr_err("compare_and_write_callback: non zero scsi_status:"
396 " 0x%02x\n", cmd->scsi_status);
397 goto out;
398 }
381 399
382 buf = kzalloc(cmd->data_length, GFP_KERNEL);400 buf = kzalloc(cmd->data_length, GFP_KERNEL);
383 if (!buf) {401 if (!buf) {
@@ -508,6 +526,12 @@ sbc_compare_and_write(struct se_cmd *cmd) · 124 unmodified lines
508 cmd->transport_complete_callback = NULL;526 cmd->transport_complete_callback = NULL;
509 return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;527 return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
510 }528 }
529 /*
530 * Reset cmd->data_length to individual block_size in order to not
531 * confuse backend drivers that depend on this value matching the
532 * size of the I/O being submitted.
533 */
534 cmd->data_length = cmd->t_task_nolb * dev->dev_attrib.block_size;
511 535
512 ret = cmd->execute_rw(cmd, cmd->t_bidi_data_sg, cmd->t_bidi_data_nents,536 ret = cmd->execute_rw(cmd, cmd->t_bidi_data_sg, cmd->t_bidi_data_nents,
513 DMA_FROM_DEVICE);537 DMA_FROM_DEVICE);
drivers/target/target_core_transport.c+15−5
@@ -236,17 +236,24 @@ int transport_alloc_session_tags(struct se_session *se_sess, · 235 unmodified lines
236{236{
237 int rc;237 int rc;
238 238
239 se_sess->sess_cmd_map = kzalloc(tag_num * tag_size, GFP_KERNEL);239 se_sess->sess_cmd_map = kzalloc(tag_num * tag_size,
240 GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT);
240 if (!se_sess->sess_cmd_map) {241 if (!se_sess->sess_cmd_map) {
241 pr_err("Unable to allocate se_sess->sess_cmd_map\n");242 se_sess->sess_cmd_map = vzalloc(tag_num * tag_size);
242 return -ENOMEM;243 if (!se_sess->sess_cmd_map) {
244 pr_err("Unable to allocate se_sess->sess_cmd_map\n");
245 return -ENOMEM;
246 }
243 }247 }
244 248
245 rc = percpu_ida_init(&se_sess->sess_tag_pool, tag_num);249 rc = percpu_ida_init(&se_sess->sess_tag_pool, tag_num);
246 if (rc < 0) {250 if (rc < 0) {
247 pr_err("Unable to init se_sess->sess_tag_pool,"251 pr_err("Unable to init se_sess->sess_tag_pool,"
248 " tag_num: %u\n", tag_num);252 " tag_num: %u\n", tag_num);
249 kfree(se_sess->sess_cmd_map);253 if (is_vmalloc_addr(se_sess->sess_cmd_map))
254 vfree(se_sess->sess_cmd_map);
255 else
256 kfree(se_sess->sess_cmd_map);
250 se_sess->sess_cmd_map = NULL;257 se_sess->sess_cmd_map = NULL;
251 return -ENOMEM;258 return -ENOMEM;
252 }259 }
@@ -412,7 +419,10 @@ void transport_free_session(struct se_session *se_sess) · 159 unmodified lines
412{419{
413 if (se_sess->sess_cmd_map) {420 if (se_sess->sess_cmd_map) {
414 percpu_ida_destroy(&se_sess->sess_tag_pool);421 percpu_ida_destroy(&se_sess->sess_tag_pool);
415 kfree(se_sess->sess_cmd_map);422 if (is_vmalloc_addr(se_sess->sess_cmd_map))
423 vfree(se_sess->sess_cmd_map);
424 else
425 kfree(se_sess->sess_cmd_map);
416 }426 }
417 kmem_cache_free(se_sess_cache, se_sess);427 kmem_cache_free(se_sess_cache, se_sess);
418}428}
drivers/target/target_core_xcopy.c+2−2
@@ -298,8 +298,8 @@ static int target_xcopy_parse_segdesc_02(struct se_cmd *se_cmd, struct xcopy_op · 297 unmodified lines
298 (unsigned long long)xop->dst_lba);298 (unsigned long long)xop->dst_lba);
299 299
300 if (dc != 0) {300 if (dc != 0) {
301 xop->dbl = (desc[29] << 16) & 0xff;301 xop->dbl = (desc[29] & 0xff) << 16;
302 xop->dbl |= (desc[30] << 8) & 0xff;302 xop->dbl |= (desc[30] & 0xff) << 8;
303 xop->dbl |= desc[31] & 0xff;303 xop->dbl |= desc[31] & 0xff;
304 304
305 pr_debug("XCOPY seg desc 0x02: DC=1 w/ dbl: %u\n", xop->dbl);305 pr_debug("XCOPY seg desc 0x02: DC=1 w/ dbl: %u\n", xop->dbl);
drivers/thermal/samsung/exynos_thermal_common.c+0−2
@@ -310,8 +310,6 @@ void exynos_report_trigger(struct thermal_sensor_conf *conf) · 309 unmodified lines
310 }310 }
311 311
312 th_zone = conf->pzone_data;312 th_zone = conf->pzone_data;
313 if (th_zone->therm_dev)
314 return;
315 313
316 if (th_zone->bind == false) {314 if (th_zone->bind == false) {
317 for (i = 0; i < th_zone->cool_dev_size; i++) {315 for (i = 0; i < th_zone->cool_dev_size; i++) {
drivers/thermal/samsung/exynos_tmu.c+8−4
@@ -317,6 +317,9 @@ static void exynos_tmu_control(struct platform_device *pdev, bool on) · 316 unmodified lines
317 317
318 con = readl(data->base + reg->tmu_ctrl);318 con = readl(data->base + reg->tmu_ctrl);
319 319
320 if (pdata->test_mux)
321 con |= (pdata->test_mux << reg->test_mux_addr_shift);
322
320 if (pdata->reference_voltage) {323 if (pdata->reference_voltage) {
321 con &= ~(reg->buf_vref_sel_mask << reg->buf_vref_sel_shift);324 con &= ~(reg->buf_vref_sel_mask << reg->buf_vref_sel_shift);
322 con |= pdata->reference_voltage << reg->buf_vref_sel_shift;325 con |= pdata->reference_voltage << reg->buf_vref_sel_shift;
@@ -488,7 +491,7 @@ static const struct of_device_id exynos_tmu_match[] = { · 165 unmodified lines
488 },491 },
489 {492 {
490 .compatible = "samsung,exynos4412-tmu",493 .compatible = "samsung,exynos4412-tmu",
491 .data = (void *)EXYNOS5250_TMU_DRV_DATA,494 .data = (void *)EXYNOS4412_TMU_DRV_DATA,
492 },495 },
493 {496 {
494 .compatible = "samsung,exynos5250-tmu",497 .compatible = "samsung,exynos5250-tmu",
@@ -629,9 +632,10 @@ static int exynos_tmu_probe(struct platform_device *pdev) · 134 unmodified lines
629 if (ret)632 if (ret)
630 return ret;633 return ret;
631 634
632 if (pdata->type == SOC_ARCH_EXYNOS ||635 if (pdata->type == SOC_ARCH_EXYNOS4210 ||
633 pdata->type == SOC_ARCH_EXYNOS4210 ||636 pdata->type == SOC_ARCH_EXYNOS4412 ||
634 pdata->type == SOC_ARCH_EXYNOS5440)637 pdata->type == SOC_ARCH_EXYNOS5250 ||
638 pdata->type == SOC_ARCH_EXYNOS5440)
635 data->soc = pdata->type;639 data->soc = pdata->type;
636 else {640 else {
637 ret = -EINVAL;641 ret = -EINVAL;
drivers/thermal/samsung/exynos_tmu.h+6−1
@@ -41,7 +41,8 @@ enum calibration_mode { · 40 unmodified lines
41 41
42enum soc_type {42enum soc_type {
43 SOC_ARCH_EXYNOS4210 = 1,43 SOC_ARCH_EXYNOS4210 = 1,
44 SOC_ARCH_EXYNOS,44 SOC_ARCH_EXYNOS4412,
45 SOC_ARCH_EXYNOS5250,
45 SOC_ARCH_EXYNOS5440,46 SOC_ARCH_EXYNOS5440,
46};47};
47 48
@@ -84,6 +85,7 @@ enum soc_type { · 36 unmodified lines
84 * @triminfo_reload_shift: shift of triminfo reload enable bit in triminfo_ctrl85 * @triminfo_reload_shift: shift of triminfo reload enable bit in triminfo_ctrl
85 reg.86 reg.
86 * @tmu_ctrl: TMU main controller register.87 * @tmu_ctrl: TMU main controller register.
88 * @test_mux_addr_shift: shift bits of test mux address.
87 * @buf_vref_sel_shift: shift bits of reference voltage in tmu_ctrl register.89 * @buf_vref_sel_shift: shift bits of reference voltage in tmu_ctrl register.
88 * @buf_vref_sel_mask: mask bits of reference voltage in tmu_ctrl register.90 * @buf_vref_sel_mask: mask bits of reference voltage in tmu_ctrl register.
89 * @therm_trip_mode_shift: shift bits of tripping mode in tmu_ctrl register.91 * @therm_trip_mode_shift: shift bits of tripping mode in tmu_ctrl register.
@@ -150,6 +152,7 @@ struct exynos_tmu_registers { · 60 unmodified lines
150 u32 triminfo_reload_shift;152 u32 triminfo_reload_shift;
151 153
152 u32 tmu_ctrl;154 u32 tmu_ctrl;
155 u32 test_mux_addr_shift;
153 u32 buf_vref_sel_shift;156 u32 buf_vref_sel_shift;
154 u32 buf_vref_sel_mask;157 u32 buf_vref_sel_mask;
155 u32 therm_trip_mode_shift;158 u32 therm_trip_mode_shift;
@@ -257,6 +260,7 @@ struct exynos_tmu_registers { · 101 unmodified lines
257 * @first_point_trim: temp value of the first point trimming260 * @first_point_trim: temp value of the first point trimming
258 * @second_point_trim: temp value of the second point trimming261 * @second_point_trim: temp value of the second point trimming
259 * @default_temp_offset: default temperature offset in case of no trimming262 * @default_temp_offset: default temperature offset in case of no trimming
263 * @test_mux; information if SoC supports test MUX
260 * @cal_type: calibration type for temperature264 * @cal_type: calibration type for temperature
261 * @cal_mode: calibration mode for temperature265 * @cal_mode: calibration mode for temperature
262 * @freq_clip_table: Table representing frequency reduction percentage.266 * @freq_clip_table: Table representing frequency reduction percentage.
@@ -286,6 +290,7 @@ struct exynos_tmu_platform_data { · 23 unmodified lines
286 u8 first_point_trim;290 u8 first_point_trim;
287 u8 second_point_trim;291 u8 second_point_trim;
288 u8 default_temp_offset;292 u8 default_temp_offset;
293 u8 test_mux;
289 294
290 enum calibration_type cal_type;295 enum calibration_type cal_type;
291 enum calibration_mode cal_mode;296 enum calibration_mode cal_mode;
drivers/thermal/samsung/exynos_tmu_data.c+24−6
@@ -90,14 +90,15 @@ struct exynos_tmu_init_data const exynos4210_default_tmu_data = { · 89 unmodified lines
90};90};
91#endif91#endif
92 92
93#if defined(CONFIG_SOC_EXYNOS5250) || defined(CONFIG_SOC_EXYNOS4412)93#if defined(CONFIG_SOC_EXYNOS4412) || defined(CONFIG_SOC_EXYNOS5250)
94static const struct exynos_tmu_registers exynos5250_tmu_registers = {94static const struct exynos_tmu_registers exynos4412_tmu_registers = {
95 .triminfo_data = EXYNOS_TMU_REG_TRIMINFO,95 .triminfo_data = EXYNOS_TMU_REG_TRIMINFO,
96 .triminfo_25_shift = EXYNOS_TRIMINFO_25_SHIFT,96 .triminfo_25_shift = EXYNOS_TRIMINFO_25_SHIFT,
97 .triminfo_85_shift = EXYNOS_TRIMINFO_85_SHIFT,97 .triminfo_85_shift = EXYNOS_TRIMINFO_85_SHIFT,
98 .triminfo_ctrl = EXYNOS_TMU_TRIMINFO_CON,98 .triminfo_ctrl = EXYNOS_TMU_TRIMINFO_CON,
99 .triminfo_reload_shift = EXYNOS_TRIMINFO_RELOAD_SHIFT,99 .triminfo_reload_shift = EXYNOS_TRIMINFO_RELOAD_SHIFT,
100 .tmu_ctrl = EXYNOS_TMU_REG_CONTROL,100 .tmu_ctrl = EXYNOS_TMU_REG_CONTROL,
101 .test_mux_addr_shift = EXYNOS4412_MUX_ADDR_SHIFT,
101 .buf_vref_sel_shift = EXYNOS_TMU_REF_VOLTAGE_SHIFT,102 .buf_vref_sel_shift = EXYNOS_TMU_REF_VOLTAGE_SHIFT,
102 .buf_vref_sel_mask = EXYNOS_TMU_REF_VOLTAGE_MASK,103 .buf_vref_sel_mask = EXYNOS_TMU_REF_VOLTAGE_MASK,
103 .therm_trip_mode_shift = EXYNOS_TMU_TRIP_MODE_SHIFT,104 .therm_trip_mode_shift = EXYNOS_TMU_TRIP_MODE_SHIFT,
@@ -128,7 +129,7 @@ static const struct exynos_tmu_registers exynos5250_tmu_registers = { · 24 unmodified lines
128 .emul_time_mask = EXYNOS_EMUL_TIME_MASK,129 .emul_time_mask = EXYNOS_EMUL_TIME_MASK,
129};130};
130 131
131#define EXYNOS5250_TMU_DATA \132#define EXYNOS4412_TMU_DATA \
132 .threshold_falling = 10, \133 .threshold_falling = 10, \
133 .trigger_levels[0] = 85, \134 .trigger_levels[0] = 85, \
134 .trigger_levels[1] = 103, \135 .trigger_levels[1] = 103, \
@@ -162,15 +163,32 @@ static const struct exynos_tmu_registers exynos5250_tmu_registers = { · 27 unmodified lines
162 .temp_level = 103, \163 .temp_level = 103, \
163 }, \164 }, \
164 .freq_tab_count = 2, \165 .freq_tab_count = 2, \
165 .type = SOC_ARCH_EXYNOS, \166 .registers = &exynos4412_tmu_registers, \
166 .registers = &exynos5250_tmu_registers, \
167 .features = (TMU_SUPPORT_EMULATION | TMU_SUPPORT_TRIM_RELOAD | \167 .features = (TMU_SUPPORT_EMULATION | TMU_SUPPORT_TRIM_RELOAD | \
168 TMU_SUPPORT_FALLING_TRIP | TMU_SUPPORT_READY_STATUS | \168 TMU_SUPPORT_FALLING_TRIP | TMU_SUPPORT_READY_STATUS | \
169 TMU_SUPPORT_EMUL_TIME)169 TMU_SUPPORT_EMUL_TIME)
170#endif
170 171
172#if defined(CONFIG_SOC_EXYNOS4412)
173struct exynos_tmu_init_data const exynos4412_default_tmu_data = {
174 .tmu_data = {
175 {
176 EXYNOS4412_TMU_DATA,
177 .type = SOC_ARCH_EXYNOS4412,
178 .test_mux = EXYNOS4412_MUX_ADDR_VALUE,
179 },
180 },
181 .tmu_count = 1,
182};
183#endif
184
185#if defined(CONFIG_SOC_EXYNOS5250)
171struct exynos_tmu_init_data const exynos5250_default_tmu_data = {186struct exynos_tmu_init_data const exynos5250_default_tmu_data = {
172 .tmu_data = {187 .tmu_data = {
173 { EXYNOS5250_TMU_DATA },188 {
189 EXYNOS4412_TMU_DATA,
190 .type = SOC_ARCH_EXYNOS5250,
191 },
174 },192 },
175 .tmu_count = 1,193 .tmu_count = 1,
176};194};
drivers/thermal/samsung/exynos_tmu_data.h+12−1
@@ -95,6 +95,10 @@ · 94 unmodified lines
95 95
96#define EXYNOS_MAX_TRIGGER_PER_REG 496#define EXYNOS_MAX_TRIGGER_PER_REG 4
97 97
98/* Exynos4412 specific */
99#define EXYNOS4412_MUX_ADDR_VALUE 6
100#define EXYNOS4412_MUX_ADDR_SHIFT 20
101
98/*exynos5440 specific registers*/102/*exynos5440 specific registers*/
99#define EXYNOS5440_TMU_S0_7_TRIM 0x000103#define EXYNOS5440_TMU_S0_7_TRIM 0x000
100#define EXYNOS5440_TMU_S0_7_CTRL 0x020104#define EXYNOS5440_TMU_S0_7_CTRL 0x020
@@ -138,7 +142,14 @@ extern struct exynos_tmu_init_data const exynos4210_default_tmu_data; · 37 unmodified lines
138#define EXYNOS4210_TMU_DRV_DATA (NULL)142#define EXYNOS4210_TMU_DRV_DATA (NULL)
139#endif143#endif
140 144
141#if (defined(CONFIG_SOC_EXYNOS5250) || defined(CONFIG_SOC_EXYNOS4412))145#if defined(CONFIG_SOC_EXYNOS4412)
146extern struct exynos_tmu_init_data const exynos4412_default_tmu_data;
147#define EXYNOS4412_TMU_DRV_DATA (&exynos4412_default_tmu_data)
148#else
149#define EXYNOS4412_TMU_DRV_DATA (NULL)
150#endif
151
152#if defined(CONFIG_SOC_EXYNOS5250)
142extern struct exynos_tmu_init_data const exynos5250_default_tmu_data;153extern struct exynos_tmu_init_data const exynos5250_default_tmu_data;
143#define EXYNOS5250_TMU_DRV_DATA (&exynos5250_default_tmu_data)154#define EXYNOS5250_TMU_DRV_DATA (&exynos5250_default_tmu_data)
144#else155#else
drivers/thermal/thermal_hwmon.c+1−1
@@ -159,7 +159,7 @@ int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) · 158 unmodified lines
159 159
160 INIT_LIST_HEAD(&hwmon->tz_list);160 INIT_LIST_HEAD(&hwmon->tz_list);
161 strlcpy(hwmon->type, tz->type, THERMAL_NAME_LENGTH);161 strlcpy(hwmon->type, tz->type, THERMAL_NAME_LENGTH);
162 hwmon->device = hwmon_device_register(&tz->device);162 hwmon->device = hwmon_device_register(NULL);
163 if (IS_ERR(hwmon->device)) {163 if (IS_ERR(hwmon->device)) {
164 result = PTR_ERR(hwmon->device);164 result = PTR_ERR(hwmon->device);
165 goto free_mem;165 goto free_mem;
drivers/thermal/ti-soc-thermal/ti-thermal-common.c+1−0
@@ -110,6 +110,7 @@ static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal, · 109 unmodified lines
110 } else {110 } else {
111 dev_err(bgp->dev,111 dev_err(bgp->dev,
112 "Failed to read PCB state. Using defaults\n");112 "Failed to read PCB state. Using defaults\n");
113 ret = 0;
113 }114 }
114 }115 }
115 *temp = ti_thermal_hotspot_temperature(tmp, slope, constant);116 *temp = ti_thermal_hotspot_temperature(tmp, slope, constant);
drivers/thermal/x86_pkg_temp_thermal.c+8−6
@@ -316,18 +316,19 @@ static void pkg_temp_thermal_threshold_work_fn(struct work_struct *work) · 315 unmodified lines
316 int phy_id = topology_physical_package_id(cpu);316 int phy_id = topology_physical_package_id(cpu);
317 struct phy_dev_entry *phdev = pkg_temp_thermal_get_phy_entry(cpu);317 struct phy_dev_entry *phdev = pkg_temp_thermal_get_phy_entry(cpu);
318 bool notify = false;318 bool notify = false;
319 unsigned long flags;
319 320
320 if (!phdev)321 if (!phdev)
321 return;322 return;
322 323
323 spin_lock(&pkg_work_lock);324 spin_lock_irqsave(&pkg_work_lock, flags);
324 ++pkg_work_cnt;325 ++pkg_work_cnt;
325 if (unlikely(phy_id > max_phy_id)) {326 if (unlikely(phy_id > max_phy_id)) {
326 spin_unlock(&pkg_work_lock);327 spin_unlock_irqrestore(&pkg_work_lock, flags);
327 return;328 return;
328 }329 }
329 pkg_work_scheduled[phy_id] = 0;330 pkg_work_scheduled[phy_id] = 0;
330 spin_unlock(&pkg_work_lock);331 spin_unlock_irqrestore(&pkg_work_lock, flags);
331 332
332 enable_pkg_thres_interrupt();333 enable_pkg_thres_interrupt();
333 rdmsrl(MSR_IA32_PACKAGE_THERM_STATUS, msr_val);334 rdmsrl(MSR_IA32_PACKAGE_THERM_STATUS, msr_val);
@@ -397,6 +398,7 @@ static int pkg_temp_thermal_device_add(unsigned int cpu) · 63 unmodified lines
397 int thres_count;398 int thres_count;
398 u32 eax, ebx, ecx, edx;399 u32 eax, ebx, ecx, edx;
399 u8 *temp;400 u8 *temp;
401 unsigned long flags;
400 402
401 cpuid(6, &eax, &ebx, &ecx, &edx);403 cpuid(6, &eax, &ebx, &ecx, &edx);
402 thres_count = ebx & 0x07;404 thres_count = ebx & 0x07;
@@ -420,19 +422,19 @@ static int pkg_temp_thermal_device_add(unsigned int cpu) · 17 unmodified lines
420 goto err_ret_unlock;422 goto err_ret_unlock;
421 }423 }
422 424
423 spin_lock(&pkg_work_lock);425 spin_lock_irqsave(&pkg_work_lock, flags);
424 if (topology_physical_package_id(cpu) > max_phy_id)426 if (topology_physical_package_id(cpu) > max_phy_id)
425 max_phy_id = topology_physical_package_id(cpu);427 max_phy_id = topology_physical_package_id(cpu);
426 temp = krealloc(pkg_work_scheduled,428 temp = krealloc(pkg_work_scheduled,
427 (max_phy_id+1) * sizeof(u8), GFP_ATOMIC);429 (max_phy_id+1) * sizeof(u8), GFP_ATOMIC);
428 if (!temp) {430 if (!temp) {
429 spin_unlock(&pkg_work_lock);431 spin_unlock_irqrestore(&pkg_work_lock, flags);
430 err = -ENOMEM;432 err = -ENOMEM;
431 goto err_ret_free;433 goto err_ret_free;
432 }434 }
433 pkg_work_scheduled = temp;435 pkg_work_scheduled = temp;
434 pkg_work_scheduled[topology_physical_package_id(cpu)] = 0;436 pkg_work_scheduled[topology_physical_package_id(cpu)] = 0;
435 spin_unlock(&pkg_work_lock);437 spin_unlock_irqrestore(&pkg_work_lock, flags);
436 438
437 phy_dev_entry->phys_proc_id = topology_physical_package_id(cpu);439 phy_dev_entry->phys_proc_id = topology_physical_package_id(cpu);
438 phy_dev_entry->first_cpu = cpu;440 phy_dev_entry->first_cpu = cpu;
drivers/tty/hvc/hvc_xen.c+1−0
@@ -636,6 +636,7 @@ struct console xenboot_console = { · 635 unmodified lines
636 .name = "xenboot",636 .name = "xenboot",
637 .write = xenboot_write_console,637 .write = xenboot_write_console,
638 .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME,638 .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME,
639 .index = -1,
639};640};
640#endif /* CONFIG_EARLY_PRINTK */641#endif /* CONFIG_EARLY_PRINTK */
641 642
drivers/tty/n_tty.c+26−20
@@ -2183,28 +2183,34 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file, · 2182 unmodified lines
2183 2183
2184 if (!input_available_p(tty, 0)) {2184 if (!input_available_p(tty, 0)) {
2185 if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {2185 if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {
2186 retval = -EIO;2186 up_read(&tty->termios_rwsem);
2187 break;2187 tty_flush_to_ldisc(tty);
2188 }2188 down_read(&tty->termios_rwsem);
2189 if (tty_hung_up_p(file))2189 if (!input_available_p(tty, 0)) {
2190 break;2190 retval = -EIO;
2191 if (!timeout)2191 break;
2192 break;2192 }
2193 if (file->f_flags & O_NONBLOCK) {2193 } else {
2194 retval = -EAGAIN;2194 if (tty_hung_up_p(file))
2195 break;2195 break;
2196 }2196 if (!timeout)
2197 if (signal_pending(current)) {2197 break;
2198 retval = -ERESTARTSYS;2198 if (file->f_flags & O_NONBLOCK) {
2199 break;2199 retval = -EAGAIN;
2200 }2200 break;
2201 n_tty_set_room(tty);2201 }
2202 up_read(&tty->termios_rwsem);2202 if (signal_pending(current)) {
2203 retval = -ERESTARTSYS;
2204 break;
2205 }
2206 n_tty_set_room(tty);
2207 up_read(&tty->termios_rwsem);
2203 2208
2204 timeout = schedule_timeout(timeout);2209 timeout = schedule_timeout(timeout);
2205 2210
2206 down_read(&tty->termios_rwsem);2211 down_read(&tty->termios_rwsem);
2207 continue;2212 continue;
2213 }
2208 }2214 }
2209 __set_current_state(TASK_RUNNING);2215 __set_current_state(TASK_RUNNING);
2210 2216
drivers/tty/serial/imx.c+0−3
@@ -1912,9 +1912,6 @@ static int serial_imx_probe_dt(struct imx_port *sport, · 1911 unmodified lines
1912 1912
1913 sport->devdata = of_id->data;1913 sport->devdata = of_id->data;
1914 1914
1915 if (of_device_is_stdout_path(np))
1916 add_preferred_console(imx_reg.cons->name, sport->port.line, 0);
1917
1918 return 0;1915 return 0;
1919}1916}
1920#else1917#else
drivers/tty/serial/vt8500_serial.c+3−2
@@ -561,12 +561,13 @@ static int vt8500_serial_probe(struct platform_device *pdev) · 560 unmodified lines
561 if (!mmres || !irqres)561 if (!mmres || !irqres)
562 return -ENODEV;562 return -ENODEV;
563 563
564 if (np)564 if (np) {
565 port = of_alias_get_id(np, "serial");565 port = of_alias_get_id(np, "serial");
566 if (port >= VT8500_MAX_PORTS)566 if (port >= VT8500_MAX_PORTS)
567 port = -1;567 port = -1;
568 else568 } else {
569 port = -1;569 port = -1;
570 }
570 571
571 if (port < 0) {572 if (port < 0) {
572 /* calculate the port id */573 /* calculate the port id */
drivers/usb/chipidea/ci_hdrc_pci.c+6−1
@@ -129,7 +129,12 @@ static DEFINE_PCI_DEVICE_TABLE(ci_hdrc_pci_id_table) = { · 128 unmodified lines
129 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0829),129 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0829),
130 .driver_data = (kernel_ulong_t)&penwell_pci_platdata,130 .driver_data = (kernel_ulong_t)&penwell_pci_platdata,
131 },131 },
132 { 0, 0, 0, 0, 0, 0, 0 /* end: all zeroes */ }132 {
133 /* Intel Clovertrail */
134 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xe006),
135 .driver_data = (kernel_ulong_t)&penwell_pci_platdata,
136 },
137 { 0 } /* end: all zeroes */
133};138};
134MODULE_DEVICE_TABLE(pci, ci_hdrc_pci_id_table);139MODULE_DEVICE_TABLE(pci, ci_hdrc_pci_id_table);
135 140
drivers/usb/chipidea/host.c+4−2
@@ -100,8 +100,10 @@ static void host_stop(struct ci_hdrc *ci) · 99 unmodified lines
100{100{
101 struct usb_hcd *hcd = ci->hcd;101 struct usb_hcd *hcd = ci->hcd;
102 102
103 usb_remove_hcd(hcd);103 if (hcd) {
104 usb_put_hcd(hcd);104 usb_remove_hcd(hcd);
105 usb_put_hcd(hcd);
106 }
105 if (ci->platdata->reg_vbus)107 if (ci->platdata->reg_vbus)
106 regulator_disable(ci->platdata->reg_vbus);108 regulator_disable(ci->platdata->reg_vbus);
107}109}
drivers/usb/core/quirks.c+6−0
@@ -97,6 +97,9 @@ static const struct usb_device_id usb_quirk_list[] = { · 96 unmodified lines
97 /* Alcor Micro Corp. Hub */97 /* Alcor Micro Corp. Hub */
98 { USB_DEVICE(0x058f, 0x9254), .driver_info = USB_QUIRK_RESET_RESUME },98 { USB_DEVICE(0x058f, 0x9254), .driver_info = USB_QUIRK_RESET_RESUME },
99 99
100 /* MicroTouch Systems touchscreen */
101 { USB_DEVICE(0x0596, 0x051e), .driver_info = USB_QUIRK_RESET_RESUME },
102
100 /* appletouch */103 /* appletouch */
101 { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME },104 { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME },
102 105
@@ -130,6 +133,9 @@ static const struct usb_device_id usb_quirk_list[] = { · 27 unmodified lines
130 /* Broadcom BCM92035DGROM BT dongle */133 /* Broadcom BCM92035DGROM BT dongle */
131 { USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME },134 { USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME },
132 135
136 /* MAYA44USB sound device */
137 { USB_DEVICE(0x0a92, 0x0091), .driver_info = USB_QUIRK_RESET_RESUME },
138
133 /* Action Semiconductor flash disk */139 /* Action Semiconductor flash disk */
134 { USB_DEVICE(0x10d6, 0x2200), .driver_info =140 { USB_DEVICE(0x10d6, 0x2200), .driver_info =
135 USB_QUIRK_STRING_FETCH_255 },141 USB_QUIRK_STRING_FETCH_255 },
drivers/usb/gadget/f_fs.c+2−0
@@ -2256,6 +2256,8 @@ static int ffs_func_bind(struct usb_configuration *c, · 2255 unmodified lines
2256 data->raw_descs + ret,2256 data->raw_descs + ret,
2257 (sizeof data->raw_descs) - ret,2257 (sizeof data->raw_descs) - ret,
2258 __ffs_func_bind_do_descs, func);2258 __ffs_func_bind_do_descs, func);
2259 if (unlikely(ret < 0))
2260 goto error;
2259 }2261 }
2260 2262
2261 /*2263 /*
drivers/usb/gadget/pxa25x_udc.c+5−4
@@ -2054,7 +2054,7 @@ static struct pxa25x_udc memory = { · 2053 unmodified lines
2054/*2054/*
2055 * probe - binds to the platform device2055 * probe - binds to the platform device
2056 */2056 */
2057static int __init pxa25x_udc_probe(struct platform_device *pdev)2057static int pxa25x_udc_probe(struct platform_device *pdev)
2058{2058{
2059 struct pxa25x_udc *dev = &memory;2059 struct pxa25x_udc *dev = &memory;
2060 int retval, irq;2060 int retval, irq;
@@ -2203,7 +2203,7 @@ static void pxa25x_udc_shutdown(struct platform_device *_dev) · 142 unmodified lines
2203 pullup_off();2203 pullup_off();
2204}2204}
2205 2205
2206static int __exit pxa25x_udc_remove(struct platform_device *pdev)2206static int pxa25x_udc_remove(struct platform_device *pdev)
2207{2207{
2208 struct pxa25x_udc *dev = platform_get_drvdata(pdev);2208 struct pxa25x_udc *dev = platform_get_drvdata(pdev);
2209 2209
@@ -2294,7 +2294,8 @@ static int pxa25x_udc_resume(struct platform_device *dev) · 84 unmodified lines
2294 2294
2295static struct platform_driver udc_driver = {2295static struct platform_driver udc_driver = {
2296 .shutdown = pxa25x_udc_shutdown,2296 .shutdown = pxa25x_udc_shutdown,
2297 .remove = __exit_p(pxa25x_udc_remove),2297 .probe = pxa25x_udc_probe,
2298 .remove = pxa25x_udc_remove,
2298 .suspend = pxa25x_udc_suspend,2299 .suspend = pxa25x_udc_suspend,
2299 .resume = pxa25x_udc_resume,2300 .resume = pxa25x_udc_resume,
2300 .driver = {2301 .driver = {
@@ -2303,7 +2304,7 @@ static struct platform_driver udc_driver = { · 2 unmodified lines
2303 },2304 },
2304};2305};
2305 2306
2306module_platform_driver_probe(udc_driver, pxa25x_udc_probe);2307module_platform_driver(udc_driver);
2307 2308
2308MODULE_DESCRIPTION(DRIVER_DESC);2309MODULE_DESCRIPTION(DRIVER_DESC);
2309MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell");2310MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell");
drivers/usb/gadget/s3c-hsotg.c+1−1
@@ -543,7 +543,7 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg, · 542 unmodified lines
543 * FIFO, requests of >512 cause the endpoint to get stuck with a543 * FIFO, requests of >512 cause the endpoint to get stuck with a
544 * fragment of the end of the transfer in it.544 * fragment of the end of the transfer in it.
545 */545 */
546 if (can_write > 512)546 if (can_write > 512 && !periodic)
547 can_write = 512;547 can_write = 512;
548 548
549 /*549 /*
drivers/usb/host/pci-quirks.c+2−2
@@ -799,7 +799,7 @@ void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev) · 798 unmodified lines
799 * switchable ports.799 * switchable ports.
800 */800 */
801 pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN,801 pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN,
802 cpu_to_le32(ports_available));802 ports_available);
803 803
804 pci_read_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN,804 pci_read_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN,
805 &ports_available);805 &ports_available);
@@ -821,7 +821,7 @@ void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev) · 15 unmodified lines
821 * host.821 * host.
822 */822 */
823 pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,823 pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,
824 cpu_to_le32(ports_available));824 ports_available);
825 825
826 pci_read_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,826 pci_read_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,
827 &ports_available);827 &ports_available);
drivers/usb/host/xhci-hub.c+0−26
@@ -1157,18 +1157,6 @@ int xhci_bus_suspend(struct usb_hcd *hcd) · 1156 unmodified lines
1157 t1 = xhci_port_state_to_neutral(t1);1157 t1 = xhci_port_state_to_neutral(t1);
1158 if (t1 != t2)1158 if (t1 != t2)
1159 xhci_writel(xhci, t2, port_array[port_index]);1159 xhci_writel(xhci, t2, port_array[port_index]);
1160
1161 if (hcd->speed != HCD_USB3) {
1162 /* enable remote wake up for USB 2.0 */
1163 __le32 __iomem *addr;
1164 u32 tmp;
1165
1166 /* Get the port power control register address. */
1167 addr = port_array[port_index] + PORTPMSC;
1168 tmp = xhci_readl(xhci, addr);
1169 tmp |= PORT_RWE;
1170 xhci_writel(xhci, tmp, addr);
1171 }
1172 }1160 }
1173 hcd->state = HC_STATE_SUSPENDED;1161 hcd->state = HC_STATE_SUSPENDED;
1174 bus_state->next_statechange = jiffies + msecs_to_jiffies(10);1162 bus_state->next_statechange = jiffies + msecs_to_jiffies(10);
@@ -1247,20 +1235,6 @@ int xhci_bus_resume(struct usb_hcd *hcd) · 72 unmodified lines
1247 xhci_ring_device(xhci, slot_id);1235 xhci_ring_device(xhci, slot_id);
1248 } else1236 } else
1249 xhci_writel(xhci, temp, port_array[port_index]);1237 xhci_writel(xhci, temp, port_array[port_index]);
1250
1251 if (hcd->speed != HCD_USB3) {
1252 /* disable remote wake up for USB 2.0 */
1253 __le32 __iomem *addr;
1254 u32 tmp;
1255
1256 /* Add one to the port status register address to get
1257 * the port power control register address.
1258 */
1259 addr = port_array[port_index] + PORTPMSC;
1260 tmp = xhci_readl(xhci, addr);
1261 tmp &= ~PORT_RWE;
1262 xhci_writel(xhci, tmp, addr);
1263 }
1264 }1238 }
1265 1239
1266 (void) xhci_readl(xhci, &xhci->op_regs->command);1240 (void) xhci_readl(xhci, &xhci->op_regs->command);
drivers/usb/host/xhci-pci.c+25−0
@@ -35,6 +35,9 @@ · 34 unmodified lines
35#define PCI_VENDOR_ID_ETRON 0x1b6f35#define PCI_VENDOR_ID_ETRON 0x1b6f
36#define PCI_DEVICE_ID_ASROCK_P67 0x702336#define PCI_DEVICE_ID_ASROCK_P67 0x7023
37 37
38#define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI 0x8c31
39#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31
40
38static const char hcd_name[] = "xhci_hcd";41static const char hcd_name[] = "xhci_hcd";
39 42
40/* called after powerup, by probe or system-pm "wakeup" */43/* called after powerup, by probe or system-pm "wakeup" */
@@ -69,6 +72,14 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) · 28 unmodified lines
69 "QUIRK: Fresco Logic xHC needs configure"72 "QUIRK: Fresco Logic xHC needs configure"
70 " endpoint cmd after reset endpoint");73 " endpoint cmd after reset endpoint");
71 }74 }
75 if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK &&
76 pdev->revision == 0x4) {
77 xhci->quirks |= XHCI_SLOW_SUSPEND;
78 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
79 "QUIRK: Fresco Logic xHC revision %u"
80 "must be suspended extra slowly",
81 pdev->revision);
82 }
72 /* Fresco Logic confirms: all revisions of this chip do not83 /* Fresco Logic confirms: all revisions of this chip do not
73 * support MSI, even though some of them claim to in their PCI84 * support MSI, even though some of them claim to in their PCI
74 * capabilities.85 * capabilities.
@@ -110,6 +121,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) · 35 unmodified lines
110 xhci->quirks |= XHCI_SPURIOUS_REBOOT;121 xhci->quirks |= XHCI_SPURIOUS_REBOOT;
111 xhci->quirks |= XHCI_AVOID_BEI;122 xhci->quirks |= XHCI_AVOID_BEI;
112 }123 }
124 if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
125 (pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI ||
126 pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI)) {
127 /* Workaround for occasional spurious wakeups from S5 (or
128 * any other sleep) on Haswell machines with LPT and LPT-LP
129 * with the new Intel BIOS
130 */
131 xhci->quirks |= XHCI_SPURIOUS_WAKEUP;
132 }
113 if (pdev->vendor == PCI_VENDOR_ID_ETRON &&133 if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
114 pdev->device == PCI_DEVICE_ID_ASROCK_P67) {134 pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
115 xhci->quirks |= XHCI_RESET_ON_RESUME;135 xhci->quirks |= XHCI_RESET_ON_RESUME;
@@ -217,6 +237,11 @@ static void xhci_pci_remove(struct pci_dev *dev) · 101 unmodified lines
217 usb_put_hcd(xhci->shared_hcd);237 usb_put_hcd(xhci->shared_hcd);
218 }238 }
219 usb_hcd_pci_remove(dev);239 usb_hcd_pci_remove(dev);
240
241 /* Workaround for spurious wakeups at shutdown with HSW */
242 if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
243 pci_set_power_state(dev, PCI_D3hot);
244
220 kfree(xhci);245 kfree(xhci);
221}246}
222 247
drivers/usb/host/xhci.c+13−1
@@ -730,6 +730,9 @@ void xhci_shutdown(struct usb_hcd *hcd) · 729 unmodified lines
730 730
731 spin_lock_irq(&xhci->lock);731 spin_lock_irq(&xhci->lock);
732 xhci_halt(xhci);732 xhci_halt(xhci);
733 /* Workaround for spurious wakeups at shutdown with HSW */
734 if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
735 xhci_reset(xhci);
733 spin_unlock_irq(&xhci->lock);736 spin_unlock_irq(&xhci->lock);
734 737
735 xhci_cleanup_msix(xhci);738 xhci_cleanup_msix(xhci);
@@ -737,6 +740,10 @@ void xhci_shutdown(struct usb_hcd *hcd) · 1 unmodified line
737 xhci_dbg_trace(xhci, trace_xhci_dbg_init,740 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
738 "xhci_shutdown completed - status = %x",741 "xhci_shutdown completed - status = %x",
739 xhci_readl(xhci, &xhci->op_regs->status));742 xhci_readl(xhci, &xhci->op_regs->status));
743
744 /* Yet another workaround for spurious wakeups at shutdown with HSW */
745 if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
746 pci_set_power_state(to_pci_dev(hcd->self.controller), PCI_D3hot);
740}747}
741 748
742#ifdef CONFIG_PM749#ifdef CONFIG_PM
@@ -839,6 +846,7 @@ static void xhci_clear_command_ring(struct xhci_hcd *xhci) · 96 unmodified lines
839int xhci_suspend(struct xhci_hcd *xhci)846int xhci_suspend(struct xhci_hcd *xhci)
840{847{
841 int rc = 0;848 int rc = 0;
849 unsigned int delay = XHCI_MAX_HALT_USEC;
842 struct usb_hcd *hcd = xhci_to_hcd(xhci);850 struct usb_hcd *hcd = xhci_to_hcd(xhci);
843 u32 command;851 u32 command;
844 852
@@ -861,8 +869,12 @@ int xhci_suspend(struct xhci_hcd *xhci) · 16 unmodified lines
861 command = xhci_readl(xhci, &xhci->op_regs->command);869 command = xhci_readl(xhci, &xhci->op_regs->command);
862 command &= ~CMD_RUN;870 command &= ~CMD_RUN;
863 xhci_writel(xhci, command, &xhci->op_regs->command);871 xhci_writel(xhci, command, &xhci->op_regs->command);
872
873 /* Some chips from Fresco Logic need an extraordinary delay */
874 delay *= (xhci->quirks & XHCI_SLOW_SUSPEND) ? 10 : 1;
875
864 if (xhci_handshake(xhci, &xhci->op_regs->status,876 if (xhci_handshake(xhci, &xhci->op_regs->status,
865 STS_HALT, STS_HALT, XHCI_MAX_HALT_USEC)) {877 STS_HALT, STS_HALT, delay)) {
866 xhci_warn(xhci, "WARN: xHC CMD_RUN timeout\n");878 xhci_warn(xhci, "WARN: xHC CMD_RUN timeout\n");
867 spin_unlock_irq(&xhci->lock);879 spin_unlock_irq(&xhci->lock);
868 return -ETIMEDOUT;880 return -ETIMEDOUT;
drivers/usb/host/xhci.h+2−0
@@ -1548,6 +1548,8 @@ struct xhci_hcd { · 1547 unmodified lines
1548#define XHCI_COMP_MODE_QUIRK (1 << 14)1548#define XHCI_COMP_MODE_QUIRK (1 << 14)
1549#define XHCI_AVOID_BEI (1 << 15)1549#define XHCI_AVOID_BEI (1 << 15)
1550#define XHCI_PLAT (1 << 16)1550#define XHCI_PLAT (1 << 16)
1551#define XHCI_SLOW_SUSPEND (1 << 17)
1552#define XHCI_SPURIOUS_WAKEUP (1 << 18)
1551 unsigned int num_active_eps;1553 unsigned int num_active_eps;
1552 unsigned int limit_active_eps;1554 unsigned int limit_active_eps;
1553 /* There are two roothubs to keep track of bus suspend info for */1555 /* There are two roothubs to keep track of bus suspend info for */
drivers/usb/misc/Kconfig+1−1
@@ -246,6 +246,6 @@ config USB_EZUSB_FX2 · 245 unmodified lines
246config USB_HSIC_USB3503246config USB_HSIC_USB3503
247 tristate "USB3503 HSIC to USB20 Driver"247 tristate "USB3503 HSIC to USB20 Driver"
248 depends on I2C248 depends on I2C
249 select REGMAP249 select REGMAP_I2C
250 help250 help
251 This option enables support for SMSC USB3503 HSIC to USB 2.0 Driver.251 This option enables support for SMSC USB3503 HSIC to USB 2.0 Driver.
drivers/usb/musb/musb_core.c+46−0
@@ -921,6 +921,52 @@ static void musb_generic_disable(struct musb *musb) · 920 unmodified lines
921 921
922}922}
923 923
924/*
925 * Program the HDRC to start (enable interrupts, dma, etc.).
926 */
927void musb_start(struct musb *musb)
928{
929 void __iomem *regs = musb->mregs;
930 u8 devctl = musb_readb(regs, MUSB_DEVCTL);
931
932 dev_dbg(musb->controller, "<== devctl %02x\n", devctl);
933
934 /* Set INT enable registers, enable interrupts */
935 musb->intrtxe = musb->epmask;
936 musb_writew(regs, MUSB_INTRTXE, musb->intrtxe);
937 musb->intrrxe = musb->epmask & 0xfffe;
938 musb_writew(regs, MUSB_INTRRXE, musb->intrrxe);
939 musb_writeb(regs, MUSB_INTRUSBE, 0xf7);
940
941 musb_writeb(regs, MUSB_TESTMODE, 0);
942
943 /* put into basic highspeed mode and start session */
944 musb_writeb(regs, MUSB_POWER, MUSB_POWER_ISOUPDATE
945 | MUSB_POWER_HSENAB
946 /* ENSUSPEND wedges tusb */
947 /* | MUSB_POWER_ENSUSPEND */
948 );
949
950 musb->is_active = 0;
951 devctl = musb_readb(regs, MUSB_DEVCTL);
952 devctl &= ~MUSB_DEVCTL_SESSION;
953
954 /* session started after:
955 * (a) ID-grounded irq, host mode;
956 * (b) vbus present/connect IRQ, peripheral mode;
957 * (c) peripheral initiates, using SRP
958 */
959 if (musb->port_mode != MUSB_PORT_MODE_HOST &&
960 (devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS) {
961 musb->is_active = 1;
962 } else {
963 devctl |= MUSB_DEVCTL_SESSION;
964 }
965
966 musb_platform_enable(musb);
967 musb_writeb(regs, MUSB_DEVCTL, devctl);
968}
969
924/*970/*
925 * Make the HDRC stop (disable interrupts, etc.);971 * Make the HDRC stop (disable interrupts, etc.);
926 * reversible by musb_start972 * reversible by musb_start
drivers/usb/musb/musb_core.h+1−0
@@ -503,6 +503,7 @@ static inline void musb_configure_ep0(struct musb *musb) · 502 unmodified lines
503extern const char musb_driver_name[];503extern const char musb_driver_name[];
504 504
505extern void musb_stop(struct musb *musb);505extern void musb_stop(struct musb *musb);
506extern void musb_start(struct musb *musb);
506 507
507extern void musb_write_fifo(struct musb_hw_ep *ep, u16 len, const u8 *src);508extern void musb_write_fifo(struct musb_hw_ep *ep, u16 len, const u8 *src);
508extern void musb_read_fifo(struct musb_hw_ep *ep, u16 len, u8 *dst);509extern void musb_read_fifo(struct musb_hw_ep *ep, u16 len, u8 *dst);
drivers/usb/musb/musb_dsps.c+3−0
@@ -535,6 +535,9 @@ static int dsps_probe(struct platform_device *pdev) · 534 unmodified lines
535 struct dsps_glue *glue;535 struct dsps_glue *glue;
536 int ret;536 int ret;
537 537
538 if (!strcmp(pdev->name, "musb-hdrc"))
539 return -ENODEV;
540
538 match = of_match_node(musb_dsps_of_match, pdev->dev.of_node);541 match = of_match_node(musb_dsps_of_match, pdev->dev.of_node);
539 if (!match) {542 if (!match) {
540 dev_err(&pdev->dev, "fail to get matching of_match struct\n");543 dev_err(&pdev->dev, "fail to get matching of_match struct\n");
drivers/usb/musb/musb_gadget.c+6−0
@@ -1790,6 +1790,10 @@ int musb_gadget_setup(struct musb *musb) · 1789 unmodified lines
1790 musb->g.max_speed = USB_SPEED_HIGH;1790 musb->g.max_speed = USB_SPEED_HIGH;
1791 musb->g.speed = USB_SPEED_UNKNOWN;1791 musb->g.speed = USB_SPEED_UNKNOWN;
1792 1792
1793 MUSB_DEV_MODE(musb);
1794 musb->xceiv->otg->default_a = 0;
1795 musb->xceiv->state = OTG_STATE_B_IDLE;
1796
1793 /* this "gadget" abstracts/virtualizes the controller */1797 /* this "gadget" abstracts/virtualizes the controller */
1794 musb->g.name = musb_driver_name;1798 musb->g.name = musb_driver_name;
1795 musb->g.is_otg = 1;1799 musb->g.is_otg = 1;
@@ -1855,6 +1859,8 @@ static int musb_gadget_start(struct usb_gadget *g, · 59 unmodified lines
1855 musb->xceiv->state = OTG_STATE_B_IDLE;1859 musb->xceiv->state = OTG_STATE_B_IDLE;
1856 spin_unlock_irqrestore(&musb->lock, flags);1860 spin_unlock_irqrestore(&musb->lock, flags);
1857 1861
1862 musb_start(musb);
1863
1858 /* REVISIT: funcall to other code, which also1864 /* REVISIT: funcall to other code, which also
1859 * handles power budgeting ... this way also1865 * handles power budgeting ... this way also
1860 * ensures HdrcStart is indirectly called.1866 * ensures HdrcStart is indirectly called.
drivers/usb/musb/musb_virthub.c+0−46
@@ -44,52 +44,6 @@ · 43 unmodified lines
44 44
45#include "musb_core.h"45#include "musb_core.h"
46 46
47/*
48* Program the HDRC to start (enable interrupts, dma, etc.).
49*/
50static void musb_start(struct musb *musb)
51{
52 void __iomem *regs = musb->mregs;
53 u8 devctl = musb_readb(regs, MUSB_DEVCTL);
54
55 dev_dbg(musb->controller, "<== devctl %02x\n", devctl);
56
57 /* Set INT enable registers, enable interrupts */
58 musb->intrtxe = musb->epmask;
59 musb_writew(regs, MUSB_INTRTXE, musb->intrtxe);
60 musb->intrrxe = musb->epmask & 0xfffe;
61 musb_writew(regs, MUSB_INTRRXE, musb->intrrxe);
62 musb_writeb(regs, MUSB_INTRUSBE, 0xf7);
63
64 musb_writeb(regs, MUSB_TESTMODE, 0);
65
66 /* put into basic highspeed mode and start session */
67 musb_writeb(regs, MUSB_POWER, MUSB_POWER_ISOUPDATE
68 | MUSB_POWER_HSENAB
69 /* ENSUSPEND wedges tusb */
70 /* | MUSB_POWER_ENSUSPEND */
71 );
72
73 musb->is_active = 0;
74 devctl = musb_readb(regs, MUSB_DEVCTL);
75 devctl &= ~MUSB_DEVCTL_SESSION;
76
77 /* session started after:
78 * (a) ID-grounded irq, host mode;
79 * (b) vbus present/connect IRQ, peripheral mode;
80 * (c) peripheral initiates, using SRP
81 */
82 if (musb->port_mode != MUSB_PORT_MODE_HOST &&
83 (devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS) {
84 musb->is_active = 1;
85 } else {
86 devctl |= MUSB_DEVCTL_SESSION;
87 }
88
89 musb_platform_enable(musb);
90 musb_writeb(regs, MUSB_DEVCTL, devctl);
91}
92
93static void musb_port_suspend(struct musb *musb, bool do_suspend)47static void musb_port_suspend(struct musb *musb, bool do_suspend)
94{48{
95 struct usb_otg *otg = musb->xceiv->otg;49 struct usb_otg *otg = musb->xceiv->otg;
drivers/usb/phy/phy-gpio-vbus-usb.c+5−6
@@ -241,7 +241,7 @@ static int gpio_vbus_set_suspend(struct usb_phy *phy, int suspend) · 240 unmodified lines
241 241
242/* platform driver interface */242/* platform driver interface */
243 243
244static int __init gpio_vbus_probe(struct platform_device *pdev)244static int gpio_vbus_probe(struct platform_device *pdev)
245{245{
246 struct gpio_vbus_mach_info *pdata = dev_get_platdata(&pdev->dev);246 struct gpio_vbus_mach_info *pdata = dev_get_platdata(&pdev->dev);
247 struct gpio_vbus_data *gpio_vbus;247 struct gpio_vbus_data *gpio_vbus;
@@ -349,7 +349,7 @@ err_gpio: · 101 unmodified lines
349 return err;349 return err;
350}350}
351 351
352static int __exit gpio_vbus_remove(struct platform_device *pdev)352static int gpio_vbus_remove(struct platform_device *pdev)
353{353{
354 struct gpio_vbus_data *gpio_vbus = platform_get_drvdata(pdev);354 struct gpio_vbus_data *gpio_vbus = platform_get_drvdata(pdev);
355 struct gpio_vbus_mach_info *pdata = dev_get_platdata(&pdev->dev);355 struct gpio_vbus_mach_info *pdata = dev_get_platdata(&pdev->dev);
@@ -398,8 +398,6 @@ static const struct dev_pm_ops gpio_vbus_dev_pm_ops = { · 42 unmodified lines
398};398};
399#endif399#endif
400 400
401/* NOTE: the gpio-vbus device may *NOT* be hotplugged */
402
403MODULE_ALIAS("platform:gpio-vbus");401MODULE_ALIAS("platform:gpio-vbus");
404 402
405static struct platform_driver gpio_vbus_driver = {403static struct platform_driver gpio_vbus_driver = {
@@ -410,10 +408,11 @@ static struct platform_driver gpio_vbus_driver = { · 4 unmodified lines
410 .pm = &gpio_vbus_dev_pm_ops,408 .pm = &gpio_vbus_dev_pm_ops,
411#endif409#endif
412 },410 },
413 .remove = __exit_p(gpio_vbus_remove),411 .probe = gpio_vbus_probe,
412 .remove = gpio_vbus_remove,
414};413};
415 414
416module_platform_driver_probe(gpio_vbus_driver, gpio_vbus_probe);415module_platform_driver(gpio_vbus_driver);
417 416
418MODULE_DESCRIPTION("simple GPIO controlled OTG transceiver driver");417MODULE_DESCRIPTION("simple GPIO controlled OTG transceiver driver");
419MODULE_AUTHOR("Philipp Zabel");418MODULE_AUTHOR("Philipp Zabel");
drivers/usb/serial/option.c+227−1
@@ -81,6 +81,7 @@ static void option_instat_callback(struct urb *urb); · 80 unmodified lines
81 81
82#define HUAWEI_VENDOR_ID 0x12D182#define HUAWEI_VENDOR_ID 0x12D1
83#define HUAWEI_PRODUCT_E173 0x140C83#define HUAWEI_PRODUCT_E173 0x140C
84#define HUAWEI_PRODUCT_E1750 0x1406
84#define HUAWEI_PRODUCT_K4505 0x146485#define HUAWEI_PRODUCT_K4505 0x1464
85#define HUAWEI_PRODUCT_K3765 0x146586#define HUAWEI_PRODUCT_K3765 0x1465
86#define HUAWEI_PRODUCT_K4605 0x14C687#define HUAWEI_PRODUCT_K4605 0x14C6
@@ -450,6 +451,10 @@ static void option_instat_callback(struct urb *urb); · 363 unmodified lines
450#define CHANGHONG_VENDOR_ID 0x2077451#define CHANGHONG_VENDOR_ID 0x2077
451#define CHANGHONG_PRODUCT_CH690 0x7001452#define CHANGHONG_PRODUCT_CH690 0x7001
452 453
454/* Inovia */
455#define INOVIA_VENDOR_ID 0x20a6
456#define INOVIA_SEW858 0x1105
457
453/* some devices interfaces need special handling due to a number of reasons */458/* some devices interfaces need special handling due to a number of reasons */
454enum option_blacklist_reason {459enum option_blacklist_reason {
455 OPTION_BLACKLIST_NONE = 0,460 OPTION_BLACKLIST_NONE = 0,
@@ -567,6 +572,8 @@ static const struct usb_device_id option_ids[] = { · 111 unmodified lines
567 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },572 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
568 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff),573 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff),
569 .driver_info = (kernel_ulong_t) &net_intf1_blacklist },574 .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
575 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1750, 0xff, 0xff, 0xff),
576 .driver_info = (kernel_ulong_t) &net_intf2_blacklist },
570 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) },577 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) },
571 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1442, USB_CLASS_COMM, 0x02, 0xff) },578 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1442, USB_CLASS_COMM, 0x02, 0xff) },
572 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff),579 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff),
@@ -686,6 +693,222 @@ static const struct usb_device_id option_ids[] = { · 113 unmodified lines
686 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) },693 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) },
687 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7B) },694 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7B) },
688 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7C) },695 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7C) },
696 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x01) },
697 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x02) },
698 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x03) },
699 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x04) },
700 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x05) },
701 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x06) },
702 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0A) },
703 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0B) },
704 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0D) },
705 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0E) },
706 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0F) },
707 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x10) },
708 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x12) },
709 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x13) },
710 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x14) },
711 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x15) },
712 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x17) },
713 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x18) },
714 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x19) },
715 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1A) },
716 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1B) },
717 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1C) },
718 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x31) },
719 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x32) },
720 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x33) },
721 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x34) },
722 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x35) },
723 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x36) },
724 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3A) },
725 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3B) },
726 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3D) },
727 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3E) },
728 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3F) },
729 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x48) },
730 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x49) },
731 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4A) },
732 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4B) },
733 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4C) },
734 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x61) },
735 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x62) },
736 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x63) },
737 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x64) },
738 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x65) },
739 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x66) },
740 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6A) },
741 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6B) },
742 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6D) },
743 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6E) },
744 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6F) },
745 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x78) },
746 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x79) },
747 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7A) },
748 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7B) },
749 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7C) },
750 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x01) },
751 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x02) },
752 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x03) },
753 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x04) },
754 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x05) },
755 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x06) },
756 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0A) },
757 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0B) },
758 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0D) },
759 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0E) },
760 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0F) },
761 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x10) },
762 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x12) },
763 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x13) },
764 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x14) },
765 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x15) },
766 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x17) },
767 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x18) },
768 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x19) },
769 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1A) },
770 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1B) },
771 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1C) },
772 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x31) },
773 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x32) },
774 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x33) },
775 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x34) },
776 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x35) },
777 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x36) },
778 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3A) },
779 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3B) },
780 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3D) },
781 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3E) },
782 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3F) },
783 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x48) },
784 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x49) },
785 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4A) },
786 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4B) },
787 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4C) },
788 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x61) },
789 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x62) },
790 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x63) },
791 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x64) },
792 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x65) },
793 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x66) },
794 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6A) },
795 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6B) },
796 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6D) },
797 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6E) },
798 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6F) },
799 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x78) },
800 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x79) },
801 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7A) },
802 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7B) },
803 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7C) },
804 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x01) },
805 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x02) },
806 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x03) },
807 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x04) },
808 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x05) },
809 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x06) },
810 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0A) },
811 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0B) },
812 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0D) },
813 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0E) },
814 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0F) },
815 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x10) },
816 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x12) },
817 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x13) },
818 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x14) },
819 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x15) },
820 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x17) },
821 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x18) },
822 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x19) },
823 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1A) },
824 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1B) },
825 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1C) },
826 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x31) },
827 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x32) },
828 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x33) },
829 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x34) },
830 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x35) },
831 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x36) },
832 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3A) },
833 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3B) },
834 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3D) },
835 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3E) },
836 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3F) },
837 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x48) },
838 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x49) },
839 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4A) },
840 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4B) },
841 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4C) },
842 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x61) },
843 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x62) },
844 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x63) },
845 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x64) },
846 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x65) },
847 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x66) },
848 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6A) },
849 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6B) },
850 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6D) },
851 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6E) },
852 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6F) },
853 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x78) },
854 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x79) },
855 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7A) },
856 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7B) },
857 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7C) },
858 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x01) },
859 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x02) },
860 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x03) },
861 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x04) },
862 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x05) },
863 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x06) },
864 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0A) },
865 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0B) },
866 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0D) },
867 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0E) },
868 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0F) },
869 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x10) },
870 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x12) },
871 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x13) },
872 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x14) },
873 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x15) },
874 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x17) },
875 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x18) },
876 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x19) },
877 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1A) },
878 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1B) },
879 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1C) },
880 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x31) },
881 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x32) },
882 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x33) },
883 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x34) },
884 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x35) },
885 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x36) },
886 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3A) },
887 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3B) },
888 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3D) },
889 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3E) },
890 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3F) },
891 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x48) },
892 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x49) },
893 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4A) },
894 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4B) },
895 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4C) },
896 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x61) },
897 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x62) },
898 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x63) },
899 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x64) },
900 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x65) },
901 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x66) },
902 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6A) },
903 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6B) },
904 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6D) },
905 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6E) },
906 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6F) },
907 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x78) },
908 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x79) },
909 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7A) },
910 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) },
911 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) },
689 912
690 913
691 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },914 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
@@ -1254,7 +1477,9 @@ static const struct usb_device_id option_ids[] = { · 562 unmodified lines
1254 1477
1255 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },1478 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
1256 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) },1479 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) },
1257 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) },1480 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200),
1481 .driver_info = (kernel_ulong_t)&net_intf6_blacklist
1482 },
1258 { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */1483 { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
1259 { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/1484 { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
1260 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },1485 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
@@ -1342,6 +1567,7 @@ static const struct usb_device_id option_ids[] = { · 81 unmodified lines
1342 { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },1567 { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
1343 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */1568 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
1344 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */1569 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
1570 { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) },
1345 { } /* Terminating entry */1571 { } /* Terminating entry */
1346};1572};
1347MODULE_DEVICE_TABLE(usb, option_ids);1573MODULE_DEVICE_TABLE(usb, option_ids);
drivers/usb/serial/ti_usb_3410_5052.c+1−0
@@ -190,6 +190,7 @@ static struct usb_device_id ti_id_table_combined[] = { · 189 unmodified lines
190 { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },190 { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
191 { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },191 { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
192 { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },192 { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
193 { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_ID) },
193 { USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },194 { USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
194 { } /* terminator */195 { } /* terminator */
195};196};
drivers/usb/storage/scsiglue.c+4−1
@@ -211,8 +211,11 @@ static int slave_configure(struct scsi_device *sdev) · 210 unmodified lines
211 /*211 /*
212 * Many devices do not respond properly to READ_CAPACITY_16.212 * Many devices do not respond properly to READ_CAPACITY_16.
213 * Tell the SCSI layer to try READ_CAPACITY_10 first.213 * Tell the SCSI layer to try READ_CAPACITY_10 first.
214 * However some USB 3.0 drive enclosures return capacity
215 * modulo 2TB. Those must use READ_CAPACITY_16
214 */216 */
215 sdev->try_rc_10_first = 1;217 if (!(us->fflags & US_FL_NEEDS_CAP16))
218 sdev->try_rc_10_first = 1;
216 219
217 /* assume SPC3 or latter devices support sense size > 18 */220 /* assume SPC3 or latter devices support sense size > 18 */
218 if (sdev->scsi_level > SCSI_SPC_2)221 if (sdev->scsi_level > SCSI_SPC_2)
drivers/usb/storage/unusual_devs.h+7−0
@@ -1925,6 +1925,13 @@ UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201, · 1924 unmodified lines
1925 USB_SC_DEVICE, USB_PR_DEVICE, NULL,1925 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1926 US_FL_IGNORE_RESIDUE ),1926 US_FL_IGNORE_RESIDUE ),
1927 1927
1928/* Reported by Oliver Neukum <oneukum@suse.com> */
1929UNUSUAL_DEV( 0x174c, 0x55aa, 0x0100, 0x0100,
1930 "ASMedia",
1931 "AS2105",
1932 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1933 US_FL_NEEDS_CAP16),
1934
1928/* Reported by Jesse Feddema <jdfeddema@gmail.com> */1935/* Reported by Jesse Feddema <jdfeddema@gmail.com> */
1929UNUSUAL_DEV( 0x177f, 0x0400, 0x0000, 0x0000,1936UNUSUAL_DEV( 0x177f, 0x0400, 0x0000, 0x0000,
1930 "Yarvik",1937 "Yarvik",
drivers/vfio/vfio_iommu_type1.c+21−19
@@ -545,6 +545,8 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu, · 544 unmodified lines
545 long npage;545 long npage;
546 int ret = 0, prot = 0;546 int ret = 0, prot = 0;
547 uint64_t mask;547 uint64_t mask;
548 struct vfio_dma *dma = NULL;
549 unsigned long pfn;
548 550
549 end = map->iova + map->size;551 end = map->iova + map->size;
550 552
@@ -587,8 +589,6 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu, · 36 unmodified lines
587 }589 }
588 590
589 for (iova = map->iova; iova < end; iova += size, vaddr += size) {591 for (iova = map->iova; iova < end; iova += size, vaddr += size) {
590 struct vfio_dma *dma = NULL;
591 unsigned long pfn;
592 long i;592 long i;
593 593
594 /* Pin a contiguous chunk of memory */594 /* Pin a contiguous chunk of memory */
@@ -597,16 +597,15 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu, · 2 unmodified lines
597 if (npage <= 0) {597 if (npage <= 0) {
598 WARN_ON(!npage);598 WARN_ON(!npage);
599 ret = (int)npage;599 ret = (int)npage;
600 break;600 goto out;
601 }601 }
602 602
603 /* Verify pages are not already mapped */603 /* Verify pages are not already mapped */
604 for (i = 0; i < npage; i++) {604 for (i = 0; i < npage; i++) {
605 if (iommu_iova_to_phys(iommu->domain,605 if (iommu_iova_to_phys(iommu->domain,
606 iova + (i << PAGE_SHIFT))) {606 iova + (i << PAGE_SHIFT))) {
607 vfio_unpin_pages(pfn, npage, prot, true);
608 ret = -EBUSY;607 ret = -EBUSY;
609 break;608 goto out_unpin;
610 }609 }
611 }610 }
612 611
@@ -616,8 +615,7 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu, · 3 unmodified lines
616 if (ret) {615 if (ret) {
617 if (ret != -EBUSY ||616 if (ret != -EBUSY ||
618 map_try_harder(iommu, iova, pfn, npage, prot)) {617 map_try_harder(iommu, iova, pfn, npage, prot)) {
619 vfio_unpin_pages(pfn, npage, prot, true);618 goto out_unpin;
620 break;
621 }619 }
622 }620 }
623 621
@@ -672,9 +670,8 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu, · 48 unmodified lines
672 dma = kzalloc(sizeof(*dma), GFP_KERNEL);670 dma = kzalloc(sizeof(*dma), GFP_KERNEL);
673 if (!dma) {671 if (!dma) {
674 iommu_unmap(iommu->domain, iova, size);672 iommu_unmap(iommu->domain, iova, size);
675 vfio_unpin_pages(pfn, npage, prot, true);
676 ret = -ENOMEM;673 ret = -ENOMEM;
677 break;674 goto out_unpin;
678 }675 }
679 676
680 dma->size = size;677 dma->size = size;
@@ -685,16 +682,21 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu, · 4 unmodified lines
685 }682 }
686 }683 }
687 684
688 if (ret) {685 WARN_ON(ret);
689 struct vfio_dma *tmp;686 mutex_unlock(&iommu->lock);
690 iova = map->iova;687 return ret;
691 size = map->size;688
692 while ((tmp = vfio_find_dma(iommu, iova, size))) {689out_unpin:
693 int r = vfio_remove_dma_overlap(iommu, iova,690 vfio_unpin_pages(pfn, npage, prot, true);
694 &size, tmp);691
695 if (WARN_ON(r || !size))692out:
696 break;693 iova = map->iova;
697 }694 size = map->size;
695 while ((dma = vfio_find_dma(iommu, iova, size))) {
696 int r = vfio_remove_dma_overlap(iommu, iova,
697 &size, dma);
698 if (WARN_ON(r || !size))
699 break;
698 }700 }
699 701
700 mutex_unlock(&iommu->lock);702 mutex_unlock(&iommu->lock);
drivers/vhost/scsi.c+6−1
@@ -728,7 +728,12 @@ vhost_scsi_get_tag(struct vhost_virtqueue *vq, · 727 unmodified lines
728 }728 }
729 se_sess = tv_nexus->tvn_se_sess;729 se_sess = tv_nexus->tvn_se_sess;
730 730
731 tag = percpu_ida_alloc(&se_sess->sess_tag_pool, GFP_KERNEL);731 tag = percpu_ida_alloc(&se_sess->sess_tag_pool, GFP_ATOMIC);
732 if (tag < 0) {
733 pr_err("Unable to obtain tag for tcm_vhost_cmd\n");
734 return ERR_PTR(-ENOMEM);
735 }
736
732 cmd = &((struct tcm_vhost_cmd *)se_sess->sess_cmd_map)[tag];737 cmd = &((struct tcm_vhost_cmd *)se_sess->sess_cmd_map)[tag];
733 sg = cmd->tvc_sgl;738 sg = cmd->tvc_sgl;
734 pages = cmd->tvc_upages;739 pages = cmd->tvc_upages;
drivers/w1/w1.c+6−0
@@ -613,6 +613,9 @@ static int w1_bus_notify(struct notifier_block *nb, unsigned long action, · 612 unmodified lines
613 sl = dev_to_w1_slave(dev);613 sl = dev_to_w1_slave(dev);
614 fops = sl->family->fops;614 fops = sl->family->fops;
615 615
616 if (!fops)
617 return 0;
618
616 switch (action) {619 switch (action) {
617 case BUS_NOTIFY_ADD_DEVICE:620 case BUS_NOTIFY_ADD_DEVICE:
618 /* if the family driver needs to initialize something... */621 /* if the family driver needs to initialize something... */
@@ -713,7 +716,10 @@ static int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn) · 94 unmodified lines
713 atomic_set(&sl->refcnt, 0);716 atomic_set(&sl->refcnt, 0);
714 init_completion(&sl->released);717 init_completion(&sl->released);
715 718
719 /* slave modules need to be loaded in a context with unlocked mutex */
720 mutex_unlock(&dev->mutex);
716 request_module("w1-family-0x%0x", rn->family);721 request_module("w1-family-0x%0x", rn->family);
722 mutex_lock(&dev->mutex);
717 723
718 spin_lock(&w1_flock);724 spin_lock(&w1_flock);
719 f = w1_family_registered(rn->family);725 f = w1_family_registered(rn->family);
drivers/watchdog/hpwdt.c+6−0
@@ -802,6 +802,12 @@ static int hpwdt_init_one(struct pci_dev *dev, · 801 unmodified lines
802 return -ENODEV;802 return -ENODEV;
803 }803 }
804 804
805 /*
806 * Ignore all auxilary iLO devices with the following PCI ID
807 */
808 if (dev->subsystem_device == 0x1979)
809 return -ENODEV;
810
805 if (pci_enable_device(dev)) {811 if (pci_enable_device(dev)) {
806 dev_warn(&dev->dev,812 dev_warn(&dev->dev,
807 "Not possible to enable PCI Device: 0x%x:0x%x.\n",813 "Not possible to enable PCI Device: 0x%x:0x%x.\n",
drivers/watchdog/kempld_wdt.c+1−1
@@ -35,7 +35,7 @@ · 34 unmodified lines
35#define KEMPLD_WDT_STAGE_TIMEOUT(x) (0x1b + (x) * 4)35#define KEMPLD_WDT_STAGE_TIMEOUT(x) (0x1b + (x) * 4)
36#define KEMPLD_WDT_STAGE_CFG(x) (0x18 + (x))36#define KEMPLD_WDT_STAGE_CFG(x) (0x18 + (x))
37#define STAGE_CFG_GET_PRESCALER(x) (((x) & 0x30) >> 4)37#define STAGE_CFG_GET_PRESCALER(x) (((x) & 0x30) >> 4)
38#define STAGE_CFG_SET_PRESCALER(x) (((x) & 0x30) << 4)38#define STAGE_CFG_SET_PRESCALER(x) (((x) & 0x3) << 4)
39#define STAGE_CFG_PRESCALER_MASK 0x3039#define STAGE_CFG_PRESCALER_MASK 0x30
40#define STAGE_CFG_ACTION_MASK 0x740#define STAGE_CFG_ACTION_MASK 0x7
41#define STAGE_CFG_ASSERT (1 << 3)41#define STAGE_CFG_ASSERT (1 << 3)
drivers/watchdog/sunxi_wdt.c+2−2
@@ -146,7 +146,7 @@ static const struct watchdog_ops sunxi_wdt_ops = { · 145 unmodified lines
146 .set_timeout = sunxi_wdt_set_timeout,146 .set_timeout = sunxi_wdt_set_timeout,
147};147};
148 148
149static int __init sunxi_wdt_probe(struct platform_device *pdev)149static int sunxi_wdt_probe(struct platform_device *pdev)
150{150{
151 struct sunxi_wdt_dev *sunxi_wdt;151 struct sunxi_wdt_dev *sunxi_wdt;
152 struct resource *res;152 struct resource *res;
@@ -187,7 +187,7 @@ static int __init sunxi_wdt_probe(struct platform_device *pdev) · 34 unmodified lines
187 return 0;187 return 0;
188}188}
189 189
190static int __exit sunxi_wdt_remove(struct platform_device *pdev)190static int sunxi_wdt_remove(struct platform_device *pdev)
191{191{
192 struct sunxi_wdt_dev *sunxi_wdt = platform_get_drvdata(pdev);192 struct sunxi_wdt_dev *sunxi_wdt = platform_get_drvdata(pdev);
193 193
drivers/watchdog/ts72xx_wdt.c+2−1
@@ -310,7 +310,8 @@ static long ts72xx_wdt_ioctl(struct file *file, unsigned int cmd, · 309 unmodified lines
310 310
311 case WDIOC_GETSTATUS:311 case WDIOC_GETSTATUS:
312 case WDIOC_GETBOOTSTATUS:312 case WDIOC_GETBOOTSTATUS:
313 return put_user(0, p);313 error = put_user(0, p);
314 break;
314 315
315 case WDIOC_KEEPALIVE:316 case WDIOC_KEEPALIVE:
316 ts72xx_wdt_kick(wdt);317 ts72xx_wdt_kick(wdt);
fs/aio.c+37−15
@@ -167,10 +167,25 @@ static int __init aio_setup(void) · 166 unmodified lines
167}167}
168__initcall(aio_setup);168__initcall(aio_setup);
169 169
170static void put_aio_ring_file(struct kioctx *ctx)
171{
172 struct file *aio_ring_file = ctx->aio_ring_file;
173 if (aio_ring_file) {
174 truncate_setsize(aio_ring_file->f_inode, 0);
175
176 /* Prevent further access to the kioctx from migratepages */
177 spin_lock(&aio_ring_file->f_inode->i_mapping->private_lock);
178 aio_ring_file->f_inode->i_mapping->private_data = NULL;
179 ctx->aio_ring_file = NULL;
180 spin_unlock(&aio_ring_file->f_inode->i_mapping->private_lock);
181
182 fput(aio_ring_file);
183 }
184}
185
170static void aio_free_ring(struct kioctx *ctx)186static void aio_free_ring(struct kioctx *ctx)
171{187{
172 int i;188 int i;
173 struct file *aio_ring_file = ctx->aio_ring_file;
174 189
175 for (i = 0; i < ctx->nr_pages; i++) {190 for (i = 0; i < ctx->nr_pages; i++) {
176 pr_debug("pid(%d) [%d] page->count=%d\n", current->pid, i,191 pr_debug("pid(%d) [%d] page->count=%d\n", current->pid, i,
@@ -178,14 +193,10 @@ static void aio_free_ring(struct kioctx *ctx) · 1 unmodified line
178 put_page(ctx->ring_pages[i]);193 put_page(ctx->ring_pages[i]);
179 }194 }
180 195
196 put_aio_ring_file(ctx);
197
181 if (ctx->ring_pages && ctx->ring_pages != ctx->internal_pages)198 if (ctx->ring_pages && ctx->ring_pages != ctx->internal_pages)
182 kfree(ctx->ring_pages);199 kfree(ctx->ring_pages);
183
184 if (aio_ring_file) {
185 truncate_setsize(aio_ring_file->f_inode, 0);
186 fput(aio_ring_file);
187 ctx->aio_ring_file = NULL;
188 }
189}200}
190 201
191static int aio_ring_mmap(struct file *file, struct vm_area_struct *vma)202static int aio_ring_mmap(struct file *file, struct vm_area_struct *vma)
@@ -207,9 +218,8 @@ static int aio_set_page_dirty(struct page *page) · 15 unmodified lines
207static int aio_migratepage(struct address_space *mapping, struct page *new,218static int aio_migratepage(struct address_space *mapping, struct page *new,
208 struct page *old, enum migrate_mode mode)219 struct page *old, enum migrate_mode mode)
209{220{
210 struct kioctx *ctx = mapping->private_data;221 struct kioctx *ctx;
211 unsigned long flags;222 unsigned long flags;
212 unsigned idx = old->index;
213 int rc;223 int rc;
214 224
215 /* Writeback must be complete */225 /* Writeback must be complete */
@@ -224,10 +234,23 @@ static int aio_migratepage(struct address_space *mapping, struct page *new, · 8 unmodified lines
224 234
225 get_page(new);235 get_page(new);
226 236
227 spin_lock_irqsave(&ctx->completion_lock, flags);237 /* We can potentially race against kioctx teardown here. Use the
228 migrate_page_copy(new, old);238 * address_space's private data lock to protect the mapping's
229 ctx->ring_pages[idx] = new;239 * private_data.
230 spin_unlock_irqrestore(&ctx->completion_lock, flags);240 */
241 spin_lock(&mapping->private_lock);
242 ctx = mapping->private_data;
243 if (ctx) {
244 pgoff_t idx;
245 spin_lock_irqsave(&ctx->completion_lock, flags);
246 migrate_page_copy(new, old);
247 idx = old->index;
248 if (idx < (pgoff_t)ctx->nr_pages)
249 ctx->ring_pages[idx] = new;
250 spin_unlock_irqrestore(&ctx->completion_lock, flags);
251 } else
252 rc = -EBUSY;
253 spin_unlock(&mapping->private_lock);
231 254
232 return rc;255 return rc;
233}256}
@@ -617,8 +640,7 @@ out_freepcpu: · 383 unmodified lines
617out_freeref:640out_freeref:
618 free_percpu(ctx->users.pcpu_count);641 free_percpu(ctx->users.pcpu_count);
619out_freectx:642out_freectx:
620 if (ctx->aio_ring_file)643 put_aio_ring_file(ctx);
621 fput(ctx->aio_ring_file);
622 kmem_cache_free(kioctx_cachep, ctx);644 kmem_cache_free(kioctx_cachep, ctx);
623 pr_debug("error allocating ioctx %d\n", err);645 pr_debug("error allocating ioctx %d\n", err);
624 return ERR_PTR(err);646 return ERR_PTR(err);
fs/btrfs/async-thread.c+19−6
@@ -107,7 +107,8 @@ static void check_idle_worker(struct btrfs_worker_thread *worker) · 106 unmodified lines
107 worker->idle = 1;107 worker->idle = 1;
108 108
109 /* the list may be empty if the worker is just starting */109 /* the list may be empty if the worker is just starting */
110 if (!list_empty(&worker->worker_list)) {110 if (!list_empty(&worker->worker_list) &&
111 !worker->workers->stopping) {
111 list_move(&worker->worker_list,112 list_move(&worker->worker_list,
112 &worker->workers->idle_list);113 &worker->workers->idle_list);
113 }114 }
@@ -127,7 +128,8 @@ static void check_busy_worker(struct btrfs_worker_thread *worker) · 13 unmodified lines
127 spin_lock_irqsave(&worker->workers->lock, flags);128 spin_lock_irqsave(&worker->workers->lock, flags);
128 worker->idle = 0;129 worker->idle = 0;
129 130
130 if (!list_empty(&worker->worker_list)) {131 if (!list_empty(&worker->worker_list) &&
132 !worker->workers->stopping) {
131 list_move_tail(&worker->worker_list,133 list_move_tail(&worker->worker_list,
132 &worker->workers->worker_list);134 &worker->workers->worker_list);
133 }135 }
@@ -412,6 +414,7 @@ void btrfs_stop_workers(struct btrfs_workers *workers) · 278 unmodified lines
412 int can_stop;414 int can_stop;
413 415
414 spin_lock_irq(&workers->lock);416 spin_lock_irq(&workers->lock);
417 workers->stopping = 1;
415 list_splice_init(&workers->idle_list, &workers->worker_list);418 list_splice_init(&workers->idle_list, &workers->worker_list);
416 while (!list_empty(&workers->worker_list)) {419 while (!list_empty(&workers->worker_list)) {
417 cur = workers->worker_list.next;420 cur = workers->worker_list.next;
@@ -455,6 +458,7 @@ void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max, · 37 unmodified lines
455 workers->ordered = 0;458 workers->ordered = 0;
456 workers->atomic_start_pending = 0;459 workers->atomic_start_pending = 0;
457 workers->atomic_worker_start = async_helper;460 workers->atomic_worker_start = async_helper;
461 workers->stopping = 0;
458}462}
459 463
460/*464/*
@@ -480,15 +484,19 @@ static int __btrfs_start_workers(struct btrfs_workers *workers) · 19 unmodified lines
480 atomic_set(&worker->num_pending, 0);484 atomic_set(&worker->num_pending, 0);
481 atomic_set(&worker->refs, 1);485 atomic_set(&worker->refs, 1);
482 worker->workers = workers;486 worker->workers = workers;
483 worker->task = kthread_run(worker_loop, worker,487 worker->task = kthread_create(worker_loop, worker,
484 "btrfs-%s-%d", workers->name,488 "btrfs-%s-%d", workers->name,
485 workers->num_workers + 1);489 workers->num_workers + 1);
486 if (IS_ERR(worker->task)) {490 if (IS_ERR(worker->task)) {
487 ret = PTR_ERR(worker->task);491 ret = PTR_ERR(worker->task);
488 kfree(worker);
489 goto fail;492 goto fail;
490 }493 }
494
491 spin_lock_irq(&workers->lock);495 spin_lock_irq(&workers->lock);
496 if (workers->stopping) {
497 spin_unlock_irq(&workers->lock);
498 goto fail_kthread;
499 }
492 list_add_tail(&worker->worker_list, &workers->idle_list);500 list_add_tail(&worker->worker_list, &workers->idle_list);
493 worker->idle = 1;501 worker->idle = 1;
494 workers->num_workers++;502 workers->num_workers++;
@@ -496,8 +504,13 @@ static int __btrfs_start_workers(struct btrfs_workers *workers) · 1 unmodified line
496 WARN_ON(workers->num_workers_starting < 0);504 WARN_ON(workers->num_workers_starting < 0);
497 spin_unlock_irq(&workers->lock);505 spin_unlock_irq(&workers->lock);
498 506
507 wake_up_process(worker->task);
499 return 0;508 return 0;
509
510fail_kthread:
511 kthread_stop(worker->task);
500fail:512fail:
513 kfree(worker);
501 spin_lock_irq(&workers->lock);514 spin_lock_irq(&workers->lock);
502 workers->num_workers_starting--;515 workers->num_workers_starting--;
503 spin_unlock_irq(&workers->lock);516 spin_unlock_irq(&workers->lock);
fs/btrfs/async-thread.h+2−0
@@ -107,6 +107,8 @@ struct btrfs_workers { · 106 unmodified lines
107 107
108 /* extra name for this worker, used for current->name */108 /* extra name for this worker, used for current->name */
109 char *name;109 char *name;
110
111 int stopping;
110};112};
111 113
112void btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work);114void btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work);
fs/btrfs/dev-replace.c+1−4
@@ -535,10 +535,7 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, · 534 unmodified lines
535 list_add(&tgt_device->dev_alloc_list, &fs_info->fs_devices->alloc_list);535 list_add(&tgt_device->dev_alloc_list, &fs_info->fs_devices->alloc_list);
536 536
537 btrfs_rm_dev_replace_srcdev(fs_info, src_device);537 btrfs_rm_dev_replace_srcdev(fs_info, src_device);
538 if (src_device->bdev) {538
539 /* zero out the old super */
540 btrfs_scratch_superblock(src_device);
541 }
542 /*539 /*
543 * this is again a consistent state where no dev_replace procedure540 * this is again a consistent state where no dev_replace procedure
544 * is running, the target device is part of the filesystem, the541 * is running, the target device is part of the filesystem, the
fs/btrfs/disk-io.c+5−4
@@ -1561,8 +1561,9 @@ int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, · 1560 unmodified lines
1561 return ret;1561 return ret;
1562}1562}
1563 1563
1564struct btrfs_root *btrfs_read_fs_root_no_name(struct btrfs_fs_info *fs_info,1564struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info,
1565 struct btrfs_key *location)1565 struct btrfs_key *location,
1566 bool check_ref)
1566{1567{
1567 struct btrfs_root *root;1568 struct btrfs_root *root;
1568 int ret;1569 int ret;
@@ -1586,7 +1587,7 @@ struct btrfs_root *btrfs_read_fs_root_no_name(struct btrfs_fs_info *fs_info, · 17 unmodified lines
1586again:1587again:
1587 root = btrfs_lookup_fs_root(fs_info, location->objectid);1588 root = btrfs_lookup_fs_root(fs_info, location->objectid);
1588 if (root) {1589 if (root) {
1589 if (btrfs_root_refs(&root->root_item) == 0)1590 if (check_ref && btrfs_root_refs(&root->root_item) == 0)
1590 return ERR_PTR(-ENOENT);1591 return ERR_PTR(-ENOENT);
1591 return root;1592 return root;
1592 }1593 }
@@ -1595,7 +1596,7 @@ again: · 2 unmodified lines
1595 if (IS_ERR(root))1596 if (IS_ERR(root))
1596 return root;1597 return root;
1597 1598
1598 if (btrfs_root_refs(&root->root_item) == 0) {1599 if (check_ref && btrfs_root_refs(&root->root_item) == 0) {
1599 ret = -ENOENT;1600 ret = -ENOENT;
1600 goto fail;1601 goto fail;
1601 }1602 }
fs/btrfs/disk-io.h+11−2
@@ -68,8 +68,17 @@ struct btrfs_root *btrfs_read_fs_root(struct btrfs_root *tree_root, · 67 unmodified lines
68int btrfs_init_fs_root(struct btrfs_root *root);68int btrfs_init_fs_root(struct btrfs_root *root);
69int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info,69int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info,
70 struct btrfs_root *root);70 struct btrfs_root *root);
71struct btrfs_root *btrfs_read_fs_root_no_name(struct btrfs_fs_info *fs_info,71
72 struct btrfs_key *location);72struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info,
73 struct btrfs_key *key,
74 bool check_ref);
75static inline struct btrfs_root *
76btrfs_read_fs_root_no_name(struct btrfs_fs_info *fs_info,
77 struct btrfs_key *location)
78{
79 return btrfs_get_fs_root(fs_info, location, true);
80}
81
73int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info);82int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info);
74void btrfs_btree_balance_dirty(struct btrfs_root *root);83void btrfs_btree_balance_dirty(struct btrfs_root *root);
75void btrfs_btree_balance_dirty_nodelay(struct btrfs_root *root);84void btrfs_btree_balance_dirty_nodelay(struct btrfs_root *root);
fs/btrfs/extent_io.c+13−9
@@ -145,8 +145,16 @@ int __init extent_io_init(void) · 144 unmodified lines
145 offsetof(struct btrfs_io_bio, bio));145 offsetof(struct btrfs_io_bio, bio));
146 if (!btrfs_bioset)146 if (!btrfs_bioset)
147 goto free_buffer_cache;147 goto free_buffer_cache;
148
149 if (bioset_integrity_create(btrfs_bioset, BIO_POOL_SIZE))
150 goto free_bioset;
151
148 return 0;152 return 0;
149 153
154free_bioset:
155 bioset_free(btrfs_bioset);
156 btrfs_bioset = NULL;
157
150free_buffer_cache:158free_buffer_cache:
151 kmem_cache_destroy(extent_buffer_cache);159 kmem_cache_destroy(extent_buffer_cache);
152 extent_buffer_cache = NULL;160 extent_buffer_cache = NULL;
@@ -1482,10 +1490,8 @@ static noinline u64 find_delalloc_range(struct extent_io_tree *tree, · 1329 unmodified lines
1482 cur_start = state->end + 1;1490 cur_start = state->end + 1;
1483 node = rb_next(node);1491 node = rb_next(node);
1484 total_bytes += state->end - state->start + 1;1492 total_bytes += state->end - state->start + 1;
1485 if (total_bytes >= max_bytes) {1493 if (total_bytes >= max_bytes)
1486 *end = *start + max_bytes - 1;
1487 break;1494 break;
1488 }
1489 if (!node)1495 if (!node)
1490 break;1496 break;
1491 }1497 }
@@ -1614,7 +1620,7 @@ again: · 122 unmodified lines
1614 *start = delalloc_start;1620 *start = delalloc_start;
1615 *end = delalloc_end;1621 *end = delalloc_end;
1616 free_extent_state(cached_state);1622 free_extent_state(cached_state);
1617 return found;1623 return 0;
1618 }1624 }
1619 1625
1620 /*1626 /*
@@ -1627,10 +1633,9 @@ again: · 6 unmodified lines
1627 1633
1628 /*1634 /*
1629 * make sure to limit the number of pages we try to lock down1635 * make sure to limit the number of pages we try to lock down
1630 * if we're looping.
1631 */1636 */
1632 if (delalloc_end + 1 - delalloc_start > max_bytes && loops)1637 if (delalloc_end + 1 - delalloc_start > max_bytes)
1633 delalloc_end = delalloc_start + PAGE_CACHE_SIZE - 1;1638 delalloc_end = delalloc_start + max_bytes - 1;
1634 1639
1635 /* step two, lock all the pages after the page that has start */1640 /* step two, lock all the pages after the page that has start */
1636 ret = lock_delalloc_pages(inode, locked_page,1641 ret = lock_delalloc_pages(inode, locked_page,
@@ -1641,8 +1646,7 @@ again: · 4 unmodified lines
1641 */1646 */
1642 free_extent_state(cached_state);1647 free_extent_state(cached_state);
1643 if (!loops) {1648 if (!loops) {
1644 unsigned long offset = (*start) & (PAGE_CACHE_SIZE - 1);1649 max_bytes = PAGE_CACHE_SIZE;
1645 max_bytes = PAGE_CACHE_SIZE - offset;
1646 loops = 1;1650 loops = 1;
1647 goto again;1651 goto again;
1648 } else {1652 } else {
fs/btrfs/inode.c+2−1
@@ -6437,6 +6437,7 @@ noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, · 6436 unmodified lines
6437 6437
6438 if (btrfs_extent_readonly(root, disk_bytenr))6438 if (btrfs_extent_readonly(root, disk_bytenr))
6439 goto out;6439 goto out;
6440 btrfs_release_path(path);
6440 6441
6441 /*6442 /*
6442 * look for other files referencing this extent, if we6443 * look for other files referencing this extent, if we
@@ -7986,7 +7987,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, · 1543 unmodified lines
7986 7987
7987 7988
7988 /* check for collisions, even if the name isn't there */7989 /* check for collisions, even if the name isn't there */
7989 ret = btrfs_check_dir_item_collision(root, new_dir->i_ino,7990 ret = btrfs_check_dir_item_collision(dest, new_dir->i_ino,
7990 new_dentry->d_name.name,7991 new_dentry->d_name.name,
7991 new_dentry->d_name.len);7992 new_dentry->d_name.len);
7992 7993
fs/btrfs/relocation.c+1−1
@@ -588,7 +588,7 @@ static struct btrfs_root *read_fs_root(struct btrfs_fs_info *fs_info, · 587 unmodified lines
588 else588 else
589 key.offset = (u64)-1;589 key.offset = (u64)-1;
590 590
591 return btrfs_read_fs_root_no_name(fs_info, &key);591 return btrfs_get_fs_root(fs_info, &key, false);
592}592}
593 593
594#ifdef BTRFS_COMPAT_EXTENT_TREE_V0594#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
fs/btrfs/root-tree.c+3−5
@@ -299,11 +299,6 @@ int btrfs_find_orphan_roots(struct btrfs_root *tree_root) · 298 unmodified lines
299 continue;299 continue;
300 }300 }
301 301
302 if (btrfs_root_refs(&root->root_item) == 0) {
303 btrfs_add_dead_root(root);
304 continue;
305 }
306
307 err = btrfs_init_fs_root(root);302 err = btrfs_init_fs_root(root);
308 if (err) {303 if (err) {
309 btrfs_free_fs_root(root);304 btrfs_free_fs_root(root);
@@ -318,6 +313,9 @@ int btrfs_find_orphan_roots(struct btrfs_root *tree_root) · 8 unmodified lines
318 btrfs_free_fs_root(root);313 btrfs_free_fs_root(root);
319 break;314 break;
320 }315 }
316
317 if (btrfs_root_refs(&root->root_item) == 0)
318 btrfs_add_dead_root(root);
321 }319 }
322 320
323 btrfs_free_path(path);321 btrfs_free_path(path);
fs/btrfs/transaction.c+2−5
@@ -1838,11 +1838,8 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, · 1837 unmodified lines
1838 assert_qgroups_uptodate(trans);1838 assert_qgroups_uptodate(trans);
1839 update_super_roots(root);1839 update_super_roots(root);
1840 1840
1841 if (!root->fs_info->log_root_recovering) {1841 btrfs_set_super_log_root(root->fs_info->super_copy, 0);
1842 btrfs_set_super_log_root(root->fs_info->super_copy, 0);1842 btrfs_set_super_log_root_level(root->fs_info->super_copy, 0);
1843 btrfs_set_super_log_root_level(root->fs_info->super_copy, 0);
1844 }
1845
1846 memcpy(root->fs_info->super_for_commit, root->fs_info->super_copy,1843 memcpy(root->fs_info->super_for_commit, root->fs_info->super_copy,
1847 sizeof(*root->fs_info->super_copy));1844 sizeof(*root->fs_info->super_copy));
1848 1845
fs/btrfs/volumes.c+6−1
@@ -1716,6 +1716,7 @@ void btrfs_rm_dev_replace_srcdev(struct btrfs_fs_info *fs_info, · 1715 unmodified lines
1716 struct btrfs_device *srcdev)1716 struct btrfs_device *srcdev)
1717{1717{
1718 WARN_ON(!mutex_is_locked(&fs_info->fs_devices->device_list_mutex));1718 WARN_ON(!mutex_is_locked(&fs_info->fs_devices->device_list_mutex));
1719
1719 list_del_rcu(&srcdev->dev_list);1720 list_del_rcu(&srcdev->dev_list);
1720 list_del_rcu(&srcdev->dev_alloc_list);1721 list_del_rcu(&srcdev->dev_alloc_list);
1721 fs_info->fs_devices->num_devices--;1722 fs_info->fs_devices->num_devices--;
@@ -1725,9 +1726,13 @@ void btrfs_rm_dev_replace_srcdev(struct btrfs_fs_info *fs_info, · 3 unmodified lines
1725 }1726 }
1726 if (srcdev->can_discard)1727 if (srcdev->can_discard)
1727 fs_info->fs_devices->num_can_discard--;1728 fs_info->fs_devices->num_can_discard--;
1728 if (srcdev->bdev)1729 if (srcdev->bdev) {
1729 fs_info->fs_devices->open_devices--;1730 fs_info->fs_devices->open_devices--;
1730 1731
1732 /* zero out the old super */
1733 btrfs_scratch_superblock(srcdev);
1734 }
1735
1731 call_rcu(&srcdev->rcu, free_device);1736 call_rcu(&srcdev->rcu, free_device);
1732}1737}
1733 1738
fs/buffer.c+12−2
@@ -1005,9 +1005,19 @@ grow_dev_page(struct block_device *bdev, sector_t block, · 1004 unmodified lines
1005 struct buffer_head *bh;1005 struct buffer_head *bh;
1006 sector_t end_block;1006 sector_t end_block;
1007 int ret = 0; /* Will call free_more_memory() */1007 int ret = 0; /* Will call free_more_memory() */
1008 gfp_t gfp_mask;
1008 1009
1009 page = find_or_create_page(inode->i_mapping, index,1010 gfp_mask = mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS;
1010 (mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS)|__GFP_MOVABLE);1011 gfp_mask |= __GFP_MOVABLE;
1012 /*
1013 * XXX: __getblk_slow() can not really deal with failure and
1014 * will endlessly loop on improvised global reclaim. Prefer
1015 * looping in the allocator rather than here, at least that
1016 * code knows what it's doing.
1017 */
1018 gfp_mask |= __GFP_NOFAIL;
1019
1020 page = find_or_create_page(inode->i_mapping, index, gfp_mask);
1011 if (!page)1021 if (!page)
1012 return ret;1022 return ret;
1013 1023
fs/cifs/cifsfs.c+4−2
@@ -120,14 +120,16 @@ cifs_read_super(struct super_block *sb) · 119 unmodified lines
120{120{
121 struct inode *inode;121 struct inode *inode;
122 struct cifs_sb_info *cifs_sb;122 struct cifs_sb_info *cifs_sb;
123 struct cifs_tcon *tcon;
123 int rc = 0;124 int rc = 0;
124 125
125 cifs_sb = CIFS_SB(sb);126 cifs_sb = CIFS_SB(sb);
127 tcon = cifs_sb_master_tcon(cifs_sb);
126 128
127 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL)129 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL)
128 sb->s_flags |= MS_POSIXACL;130 sb->s_flags |= MS_POSIXACL;
129 131
130 if (cifs_sb_master_tcon(cifs_sb)->ses->capabilities & CAP_LARGE_FILES)132 if (tcon->ses->capabilities & tcon->ses->server->vals->cap_large_files)
131 sb->s_maxbytes = MAX_LFS_FILESIZE;133 sb->s_maxbytes = MAX_LFS_FILESIZE;
132 else134 else
133 sb->s_maxbytes = MAX_NON_LFS;135 sb->s_maxbytes = MAX_NON_LFS;
@@ -147,7 +149,7 @@ cifs_read_super(struct super_block *sb) · 13 unmodified lines
147 goto out_no_root;149 goto out_no_root;
148 }150 }
149 151
150 if (cifs_sb_master_tcon(cifs_sb)->nocase)152 if (tcon->nocase)
151 sb->s_d_op = &cifs_ci_dentry_ops;153 sb->s_d_op = &cifs_ci_dentry_ops;
152 else154 else
153 sb->s_d_op = &cifs_dentry_ops;155 sb->s_d_op = &cifs_dentry_ops;
fs/cifs/cifsfs.h+1−1
@@ -132,5 +132,5 @@ extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg); · 131 unmodified lines
132extern const struct export_operations cifs_export_ops;132extern const struct export_operations cifs_export_ops;
133#endif /* CONFIG_CIFS_NFSD_EXPORT */133#endif /* CONFIG_CIFS_NFSD_EXPORT */
134 134
135#define CIFS_VERSION "2.01"135#define CIFS_VERSION "2.02"
136#endif /* _CIFSFS_H */136#endif /* _CIFSFS_H */
fs/cifs/cifsglob.h+1−4
@@ -547,9 +547,6 @@ struct TCP_Server_Info { · 546 unmodified lines
547 unsigned int max_rw; /* maxRw specifies the maximum */547 unsigned int max_rw; /* maxRw specifies the maximum */
548 /* message size the server can send or receive for */548 /* message size the server can send or receive for */
549 /* SMB_COM_WRITE_RAW or SMB_COM_READ_RAW. */549 /* SMB_COM_WRITE_RAW or SMB_COM_READ_RAW. */
550 unsigned int max_vcs; /* maximum number of smb sessions, at least
551 those that can be specified uniquely with
552 vcnumbers */
553 unsigned int capabilities; /* selective disabling of caps by smb sess */550 unsigned int capabilities; /* selective disabling of caps by smb sess */
554 int timeAdj; /* Adjust for difference in server time zone in sec */551 int timeAdj; /* Adjust for difference in server time zone in sec */
555 __u64 CurrentMid; /* multiplex id - rotating counter */552 __u64 CurrentMid; /* multiplex id - rotating counter */
@@ -715,7 +712,6 @@ struct cifs_ses { · 159 unmodified lines
715 enum statusEnum status;712 enum statusEnum status;
716 unsigned overrideSecFlg; /* if non-zero override global sec flags */713 unsigned overrideSecFlg; /* if non-zero override global sec flags */
717 __u16 ipc_tid; /* special tid for connection to IPC share */714 __u16 ipc_tid; /* special tid for connection to IPC share */
718 __u16 vcnum;
719 char *serverOS; /* name of operating system underlying server */715 char *serverOS; /* name of operating system underlying server */
720 char *serverNOS; /* name of network operating system of server */716 char *serverNOS; /* name of network operating system of server */
721 char *serverDomain; /* security realm of server */717 char *serverDomain; /* security realm of server */
@@ -1272,6 +1268,7 @@ struct dfs_info3_param { · 550 unmodified lines
1272#define CIFS_FATTR_DELETE_PENDING 0x21268#define CIFS_FATTR_DELETE_PENDING 0x2
1273#define CIFS_FATTR_NEED_REVAL 0x41269#define CIFS_FATTR_NEED_REVAL 0x4
1274#define CIFS_FATTR_INO_COLLISION 0x81270#define CIFS_FATTR_INO_COLLISION 0x8
1271#define CIFS_FATTR_UNKNOWN_NLINK 0x10
1275 1272
1276struct cifs_fattr {1273struct cifs_fattr {
1277 u32 cf_flags;1274 u32 cf_flags;
fs/cifs/cifspdu.h+24−28
@@ -1491,15 +1491,30 @@ struct file_notify_information { · 1490 unmodified lines
1491 __u8 FileName[0];1491 __u8 FileName[0];
1492} __attribute__((packed));1492} __attribute__((packed));
1493 1493
1494struct reparse_data {1494/* For IO_REPARSE_TAG_SYMLINK */
1495 __u32 ReparseTag;1495struct reparse_symlink_data {
1496 __u16 ReparseDataLength;1496 __le32 ReparseTag;
1497 __le16 ReparseDataLength;
1497 __u16 Reserved;1498 __u16 Reserved;
1498 __u16 SubstituteNameOffset;1499 __le16 SubstituteNameOffset;
1499 __u16 SubstituteNameLength;1500 __le16 SubstituteNameLength;
1500 __u16 PrintNameOffset;1501 __le16 PrintNameOffset;
1501 __u16 PrintNameLength;1502 __le16 PrintNameLength;
1502 __u32 Flags;1503 __le32 Flags;
1504 char PathBuffer[0];
1505} __attribute__((packed));
1506
1507/* For IO_REPARSE_TAG_NFS */
1508#define NFS_SPECFILE_LNK 0x00000000014B4E4C
1509#define NFS_SPECFILE_CHR 0x0000000000524843
1510#define NFS_SPECFILE_BLK 0x00000000004B4C42
1511#define NFS_SPECFILE_FIFO 0x000000004F464946
1512#define NFS_SPECFILE_SOCK 0x000000004B434F53
1513struct reparse_posix_data {
1514 __le32 ReparseTag;
1515 __le16 ReparseDataLength;
1516 __u16 Reserved;
1517 __le64 InodeType; /* LNK, FIFO, CHR etc. */
1503 char PathBuffer[0];1518 char PathBuffer[0];
1504} __attribute__((packed));1519} __attribute__((packed));
1505 1520
@@ -2652,26 +2667,7 @@ typedef struct file_xattr_info { · 1146 unmodified lines
2652} __attribute__((packed)) FILE_XATTR_INFO; /* extended attribute info2667} __attribute__((packed)) FILE_XATTR_INFO; /* extended attribute info
2653 level 0x205 */2668 level 0x205 */
2654 2669
2655 2670/* flags for lsattr and chflags commands removed arein uapi/linux/fs.h */
2656/* flags for chattr command */
2657#define EXT_SECURE_DELETE 0x00000001 /* EXT3_SECRM_FL */
2658#define EXT_ENABLE_UNDELETE 0x00000002 /* EXT3_UNRM_FL */
2659/* Reserved for compress file 0x4 */
2660#define EXT_SYNCHRONOUS 0x00000008 /* EXT3_SYNC_FL */
2661#define EXT_IMMUTABLE_FL 0x00000010 /* EXT3_IMMUTABLE_FL */
2662#define EXT_OPEN_APPEND_ONLY 0x00000020 /* EXT3_APPEND_FL */
2663#define EXT_DO_NOT_BACKUP 0x00000040 /* EXT3_NODUMP_FL */
2664#define EXT_NO_UPDATE_ATIME 0x00000080 /* EXT3_NOATIME_FL */
2665/* 0x100 through 0x800 reserved for compression flags and are GET-ONLY */
2666#define EXT_HASH_TREE_INDEXED_DIR 0x00001000 /* GET-ONLY EXT3_INDEX_FL */
2667/* 0x2000 reserved for IMAGIC_FL */
2668#define EXT_JOURNAL_THIS_FILE 0x00004000 /* GET-ONLY EXT3_JOURNAL_DATA_FL */
2669/* 0x8000 reserved for EXT3_NOTAIL_FL */
2670#define EXT_SYNCHRONOUS_DIR 0x00010000 /* EXT3_DIRSYNC_FL */
2671#define EXT_TOPDIR 0x00020000 /* EXT3_TOPDIR_FL */
2672
2673#define EXT_SET_MASK 0x000300FF
2674#define EXT_GET_MASK 0x0003DFFF
2675 2671
2676typedef struct file_chattr_info {2672typedef struct file_chattr_info {
2677 __le64 mask; /* list of all possible attribute bits */2673 __le64 mask; /* list of all possible attribute bits */
fs/cifs/cifssmb.c+34−7
@@ -463,7 +463,6 @@ decode_lanman_negprot_rsp(struct TCP_Server_Info *server, NEGOTIATE_RSP *pSMBr) · 462 unmodified lines
463 cifs_max_pending);463 cifs_max_pending);
464 set_credits(server, server->maxReq);464 set_credits(server, server->maxReq);
465 server->maxBuf = le16_to_cpu(rsp->MaxBufSize);465 server->maxBuf = le16_to_cpu(rsp->MaxBufSize);
466 server->max_vcs = le16_to_cpu(rsp->MaxNumberVcs);
467 /* even though we do not use raw we might as well set this466 /* even though we do not use raw we might as well set this
468 accurately, in case we ever find a need for it */467 accurately, in case we ever find a need for it */
469 if ((le16_to_cpu(rsp->RawMode) & RAW_ENABLE) == RAW_ENABLE) {468 if ((le16_to_cpu(rsp->RawMode) & RAW_ENABLE) == RAW_ENABLE) {
@@ -3089,7 +3088,8 @@ CIFSSMBQuerySymLink(const unsigned int xid, struct cifs_tcon *tcon, · 2619 unmodified lines
3089 bool is_unicode;3088 bool is_unicode;
3090 unsigned int sub_len;3089 unsigned int sub_len;
3091 char *sub_start;3090 char *sub_start;
3092 struct reparse_data *reparse_buf;3091 struct reparse_symlink_data *reparse_buf;
3092 struct reparse_posix_data *posix_buf;
3093 __u32 data_offset, data_count;3093 __u32 data_offset, data_count;
3094 char *end_of_smb;3094 char *end_of_smb;
3095 3095
@@ -3138,20 +3138,47 @@ CIFSSMBQuerySymLink(const unsigned int xid, struct cifs_tcon *tcon, · 42 unmodified lines
3138 goto qreparse_out;3138 goto qreparse_out;
3139 }3139 }
3140 end_of_smb = 2 + get_bcc(&pSMBr->hdr) + (char *)&pSMBr->ByteCount;3140 end_of_smb = 2 + get_bcc(&pSMBr->hdr) + (char *)&pSMBr->ByteCount;
3141 reparse_buf = (struct reparse_data *)3141 reparse_buf = (struct reparse_symlink_data *)
3142 ((char *)&pSMBr->hdr.Protocol + data_offset);3142 ((char *)&pSMBr->hdr.Protocol + data_offset);
3143 if ((char *)reparse_buf >= end_of_smb) {3143 if ((char *)reparse_buf >= end_of_smb) {
3144 rc = -EIO;3144 rc = -EIO;
3145 goto qreparse_out;3145 goto qreparse_out;
3146 }3146 }
3147 if ((reparse_buf->PathBuffer + reparse_buf->PrintNameOffset +3147 if (reparse_buf->ReparseTag == cpu_to_le32(IO_REPARSE_TAG_NFS)) {
3148 reparse_buf->PrintNameLength) > end_of_smb) {3148 cifs_dbg(FYI, "NFS style reparse tag\n");
3149 posix_buf = (struct reparse_posix_data *)reparse_buf;
3150
3151 if (posix_buf->InodeType != cpu_to_le64(NFS_SPECFILE_LNK)) {
3152 cifs_dbg(FYI, "unsupported file type 0x%llx\n",
3153 le64_to_cpu(posix_buf->InodeType));
3154 rc = -EOPNOTSUPP;
3155 goto qreparse_out;
3156 }
3157 is_unicode = true;
3158 sub_len = le16_to_cpu(reparse_buf->ReparseDataLength);
3159 if (posix_buf->PathBuffer + sub_len > end_of_smb) {
3160 cifs_dbg(FYI, "reparse buf beyond SMB\n");
3161 rc = -EIO;
3162 goto qreparse_out;
3163 }
3164 *symlinkinfo = cifs_strndup_from_utf16(posix_buf->PathBuffer,
3165 sub_len, is_unicode, nls_codepage);
3166 goto qreparse_out;
3167 } else if (reparse_buf->ReparseTag !=
3168 cpu_to_le32(IO_REPARSE_TAG_SYMLINK)) {
3169 rc = -EOPNOTSUPP;
3170 goto qreparse_out;
3171 }
3172
3173 /* Reparse tag is NTFS symlink */
3174 sub_start = le16_to_cpu(reparse_buf->SubstituteNameOffset) +
3175 reparse_buf->PathBuffer;
3176 sub_len = le16_to_cpu(reparse_buf->SubstituteNameLength);
3177 if (sub_start + sub_len > end_of_smb) {
3149 cifs_dbg(FYI, "reparse buf beyond SMB\n");3178 cifs_dbg(FYI, "reparse buf beyond SMB\n");
3150 rc = -EIO;3179 rc = -EIO;
3151 goto qreparse_out;3180 goto qreparse_out;
3152 }3181 }
3153 sub_start = reparse_buf->SubstituteNameOffset + reparse_buf->PathBuffer;
3154 sub_len = reparse_buf->SubstituteNameLength;
3155 if (pSMBr->hdr.Flags2 & SMBFLG2_UNICODE)3182 if (pSMBr->hdr.Flags2 & SMBFLG2_UNICODE)
3156 is_unicode = true;3183 is_unicode = true;
3157 else3184 else
fs/cifs/file.c+8−0
@@ -3254,6 +3254,9 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, · 3253 unmodified lines
3254 /*3254 /*
3255 * Reads as many pages as possible from fscache. Returns -ENOBUFS3255 * Reads as many pages as possible from fscache. Returns -ENOBUFS
3256 * immediately if the cookie is negative3256 * immediately if the cookie is negative
3257 *
3258 * After this point, every page in the list might have PG_fscache set,
3259 * so we will need to clean that up off of every page we don't use.
3257 */3260 */
3258 rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,3261 rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
3259 &num_pages);3262 &num_pages);
@@ -3376,6 +3379,11 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, · 116 unmodified lines
3376 kref_put(&rdata->refcount, cifs_readdata_release);3379 kref_put(&rdata->refcount, cifs_readdata_release);
3377 }3380 }
3378 3381
3382 /* Any pages that have been shown to fscache but didn't get added to
3383 * the pagecache must be uncached before they get returned to the
3384 * allocator.
3385 */
3386 cifs_fscache_readpages_cancel(mapping->host, page_list);
3379 return rc;3387 return rc;
3380}3388}
3381 3389
fs/cifs/fscache.c+7−0
@@ -223,6 +223,13 @@ void __cifs_readpage_to_fscache(struct inode *inode, struct page *page) · 222 unmodified lines
223 fscache_uncache_page(CIFS_I(inode)->fscache, page);223 fscache_uncache_page(CIFS_I(inode)->fscache, page);
224}224}
225 225
226void __cifs_fscache_readpages_cancel(struct inode *inode, struct list_head *pages)
227{
228 cifs_dbg(FYI, "%s: (fsc: %p, i: %p)\n",
229 __func__, CIFS_I(inode)->fscache, inode);
230 fscache_readpages_cancel(CIFS_I(inode)->fscache, pages);
231}
232
226void __cifs_fscache_invalidate_page(struct page *page, struct inode *inode)233void __cifs_fscache_invalidate_page(struct page *page, struct inode *inode)
227{234{
228 struct cifsInodeInfo *cifsi = CIFS_I(inode);235 struct cifsInodeInfo *cifsi = CIFS_I(inode);
fs/cifs/fscache.h+13−0
@@ -54,6 +54,7 @@ extern int __cifs_readpages_from_fscache(struct inode *, · 53 unmodified lines
54 struct address_space *,54 struct address_space *,
55 struct list_head *,55 struct list_head *,
56 unsigned *);56 unsigned *);
57extern void __cifs_fscache_readpages_cancel(struct inode *, struct list_head *);
57 58
58extern void __cifs_readpage_to_fscache(struct inode *, struct page *);59extern void __cifs_readpage_to_fscache(struct inode *, struct page *);
59 60
@@ -91,6 +92,13 @@ static inline void cifs_readpage_to_fscache(struct inode *inode, · 31 unmodified lines
91 __cifs_readpage_to_fscache(inode, page);92 __cifs_readpage_to_fscache(inode, page);
92}93}
93 94
95static inline void cifs_fscache_readpages_cancel(struct inode *inode,
96 struct list_head *pages)
97{
98 if (CIFS_I(inode)->fscache)
99 return __cifs_fscache_readpages_cancel(inode, pages);
100}
101
94#else /* CONFIG_CIFS_FSCACHE */102#else /* CONFIG_CIFS_FSCACHE */
95static inline int cifs_fscache_register(void) { return 0; }103static inline int cifs_fscache_register(void) { return 0; }
96static inline void cifs_fscache_unregister(void) {}104static inline void cifs_fscache_unregister(void) {}
@@ -131,6 +139,11 @@ static inline int cifs_readpages_from_fscache(struct inode *inode, · 34 unmodified lines
131static inline void cifs_readpage_to_fscache(struct inode *inode,139static inline void cifs_readpage_to_fscache(struct inode *inode,
132 struct page *page) {}140 struct page *page) {}
133 141
142static inline void cifs_fscache_readpages_cancel(struct inode *inode,
143 struct list_head *pages)
144{
145}
146
134#endif /* CONFIG_CIFS_FSCACHE */147#endif /* CONFIG_CIFS_FSCACHE */
135 148
136#endif /* _CIFS_FSCACHE_H */149#endif /* _CIFS_FSCACHE_H */
fs/cifs/inode.c+39−6
@@ -120,6 +120,33 @@ cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr) · 119 unmodified lines
120 cifs_i->invalid_mapping = true;120 cifs_i->invalid_mapping = true;
121}121}
122 122
123/*
124 * copy nlink to the inode, unless it wasn't provided. Provide
125 * sane values if we don't have an existing one and none was provided
126 */
127static void
128cifs_nlink_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr)
129{
130 /*
131 * if we're in a situation where we can't trust what we
132 * got from the server (readdir, some non-unix cases)
133 * fake reasonable values
134 */
135 if (fattr->cf_flags & CIFS_FATTR_UNKNOWN_NLINK) {
136 /* only provide fake values on a new inode */
137 if (inode->i_state & I_NEW) {
138 if (fattr->cf_cifsattrs & ATTR_DIRECTORY)
139 set_nlink(inode, 2);
140 else
141 set_nlink(inode, 1);
142 }
143 return;
144 }
145
146 /* we trust the server, so update it */
147 set_nlink(inode, fattr->cf_nlink);
148}
149
123/* populate an inode with info from a cifs_fattr struct */150/* populate an inode with info from a cifs_fattr struct */
124void151void
125cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr)152cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr)
@@ -134,7 +161,7 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) · 8 unmodified lines
134 inode->i_mtime = fattr->cf_mtime;161 inode->i_mtime = fattr->cf_mtime;
135 inode->i_ctime = fattr->cf_ctime;162 inode->i_ctime = fattr->cf_ctime;
136 inode->i_rdev = fattr->cf_rdev;163 inode->i_rdev = fattr->cf_rdev;
137 set_nlink(inode, fattr->cf_nlink);164 cifs_nlink_fattr_to_inode(inode, fattr);
138 inode->i_uid = fattr->cf_uid;165 inode->i_uid = fattr->cf_uid;
139 inode->i_gid = fattr->cf_gid;166 inode->i_gid = fattr->cf_gid;
140 167
@@ -541,6 +568,7 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info, · 400 unmodified lines
541 fattr->cf_bytes = le64_to_cpu(info->AllocationSize);568 fattr->cf_bytes = le64_to_cpu(info->AllocationSize);
542 fattr->cf_createtime = le64_to_cpu(info->CreationTime);569 fattr->cf_createtime = le64_to_cpu(info->CreationTime);
543 570
571 fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks);
544 if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {572 if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {
545 fattr->cf_mode = S_IFDIR | cifs_sb->mnt_dir_mode;573 fattr->cf_mode = S_IFDIR | cifs_sb->mnt_dir_mode;
546 fattr->cf_dtype = DT_DIR;574 fattr->cf_dtype = DT_DIR;
@@ -548,7 +576,8 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info, · 1 unmodified line
548 * Server can return wrong NumberOfLinks value for directories576 * Server can return wrong NumberOfLinks value for directories
549 * when Unix extensions are disabled - fake it.577 * when Unix extensions are disabled - fake it.
550 */578 */
551 fattr->cf_nlink = 2;579 if (!tcon->unix_ext)
580 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
552 } else if (fattr->cf_cifsattrs & ATTR_REPARSE) {581 } else if (fattr->cf_cifsattrs & ATTR_REPARSE) {
553 fattr->cf_mode = S_IFLNK;582 fattr->cf_mode = S_IFLNK;
554 fattr->cf_dtype = DT_LNK;583 fattr->cf_dtype = DT_LNK;
@@ -561,11 +590,15 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info, · 6 unmodified lines
561 if (fattr->cf_cifsattrs & ATTR_READONLY)590 if (fattr->cf_cifsattrs & ATTR_READONLY)
562 fattr->cf_mode &= ~(S_IWUGO);591 fattr->cf_mode &= ~(S_IWUGO);
563 592
564 fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks);593 /*
565 if (fattr->cf_nlink < 1) {594 * Don't accept zero nlink from non-unix servers unless
566 cifs_dbg(1, "replacing bogus file nlink value %u\n",595 * delete is pending. Instead mark it as unknown.
596 */
597 if ((fattr->cf_nlink < 1) && !tcon->unix_ext &&
598 !info->DeletePending) {
599 cifs_dbg(1, "bogus file nlink value %u\n",
567 fattr->cf_nlink);600 fattr->cf_nlink);
568 fattr->cf_nlink = 1;601 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
569 }602 }
570 }603 }
571 604
fs/cifs/netmisc.c+3−1
@@ -780,7 +780,9 @@ static const struct { · 779 unmodified lines
780 ERRDOS, ERRnoaccess, 0xc0000290}, {780 ERRDOS, ERRnoaccess, 0xc0000290}, {
781 ERRDOS, ERRbadfunc, 0xc000029c}, {781 ERRDOS, ERRbadfunc, 0xc000029c}, {
782 ERRDOS, ERRsymlink, NT_STATUS_STOPPED_ON_SYMLINK}, {782 ERRDOS, ERRsymlink, NT_STATUS_STOPPED_ON_SYMLINK}, {
783 ERRDOS, ERRinvlevel, 0x007c0001}, };783 ERRDOS, ERRinvlevel, 0x007c0001}, {
784 0, 0, 0 }
785};
784 786
785/*****************************************************************************787/*****************************************************************************
786 Print an error message from the status code788 Print an error message from the status code
fs/cifs/readdir.c+3−0
@@ -180,6 +180,9 @@ cifs_fill_common_info(struct cifs_fattr *fattr, struct cifs_sb_info *cifs_sb) · 179 unmodified lines
180 fattr->cf_dtype = DT_REG;180 fattr->cf_dtype = DT_REG;
181 }181 }
182 182
183 /* non-unix readdir doesn't provide nlink */
184 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
185
183 if (fattr->cf_cifsattrs & ATTR_READONLY)186 if (fattr->cf_cifsattrs & ATTR_READONLY)
184 fattr->cf_mode &= ~S_IWUGO;187 fattr->cf_mode &= ~S_IWUGO;
185 188
fs/cifs/sess.c+3−85
@@ -32,88 +32,6 @@ · 31 unmodified lines
32#include <linux/slab.h>32#include <linux/slab.h>
33#include "cifs_spnego.h"33#include "cifs_spnego.h"
34 34
35/*
36 * Checks if this is the first smb session to be reconnected after
37 * the socket has been reestablished (so we know whether to use vc 0).
38 * Called while holding the cifs_tcp_ses_lock, so do not block
39 */
40static bool is_first_ses_reconnect(struct cifs_ses *ses)
41{
42 struct list_head *tmp;
43 struct cifs_ses *tmp_ses;
44
45 list_for_each(tmp, &ses->server->smb_ses_list) {
46 tmp_ses = list_entry(tmp, struct cifs_ses,
47 smb_ses_list);
48 if (tmp_ses->need_reconnect == false)
49 return false;
50 }
51 /* could not find a session that was already connected,
52 this must be the first one we are reconnecting */
53 return true;
54}
55
56/*
57 * vc number 0 is treated specially by some servers, and should be the
58 * first one we request. After that we can use vcnumbers up to maxvcs,
59 * one for each smb session (some Windows versions set maxvcs incorrectly
60 * so maxvc=1 can be ignored). If we have too many vcs, we can reuse
61 * any vc but zero (some servers reset the connection on vcnum zero)
62 *
63 */
64static __le16 get_next_vcnum(struct cifs_ses *ses)
65{
66 __u16 vcnum = 0;
67 struct list_head *tmp;
68 struct cifs_ses *tmp_ses;
69 __u16 max_vcs = ses->server->max_vcs;
70 __u16 i;
71 int free_vc_found = 0;
72
73 /* Quoting the MS-SMB specification: "Windows-based SMB servers set this
74 field to one but do not enforce this limit, which allows an SMB client
75 to establish more virtual circuits than allowed by this value ... but
76 other server implementations can enforce this limit." */
77 if (max_vcs < 2)
78 max_vcs = 0xFFFF;
79
80 spin_lock(&cifs_tcp_ses_lock);
81 if ((ses->need_reconnect) && is_first_ses_reconnect(ses))
82 goto get_vc_num_exit; /* vcnum will be zero */
83 for (i = ses->server->srv_count - 1; i < max_vcs; i++) {
84 if (i == 0) /* this is the only connection, use vc 0 */
85 break;
86
87 free_vc_found = 1;
88
89 list_for_each(tmp, &ses->server->smb_ses_list) {
90 tmp_ses = list_entry(tmp, struct cifs_ses,
91 smb_ses_list);
92 if (tmp_ses->vcnum == i) {
93 free_vc_found = 0;
94 break; /* found duplicate, try next vcnum */
95 }
96 }
97 if (free_vc_found)
98 break; /* we found a vcnumber that will work - use it */
99 }
100
101 if (i == 0)
102 vcnum = 0; /* for most common case, ie if one smb session, use
103 vc zero. Also for case when no free vcnum, zero
104 is safest to send (some clients only send zero) */
105 else if (free_vc_found == 0)
106 vcnum = 1; /* we can not reuse vc=0 safely, since some servers
107 reset all uids on that, but 1 is ok. */
108 else
109 vcnum = i;
110 ses->vcnum = vcnum;
111get_vc_num_exit:
112 spin_unlock(&cifs_tcp_ses_lock);
113
114 return cpu_to_le16(vcnum);
115}
116
117static __u32 cifs_ssetup_hdr(struct cifs_ses *ses, SESSION_SETUP_ANDX *pSMB)35static __u32 cifs_ssetup_hdr(struct cifs_ses *ses, SESSION_SETUP_ANDX *pSMB)
118{36{
119 __u32 capabilities = 0;37 __u32 capabilities = 0;
@@ -128,7 +46,7 @@ static __u32 cifs_ssetup_hdr(struct cifs_ses *ses, SESSION_SETUP_ANDX *pSMB) · 8 unmodified lines
128 CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4,46 CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4,
129 USHRT_MAX));47 USHRT_MAX));
130 pSMB->req.MaxMpxCount = cpu_to_le16(ses->server->maxReq);48 pSMB->req.MaxMpxCount = cpu_to_le16(ses->server->maxReq);
131 pSMB->req.VcNumber = get_next_vcnum(ses);49 pSMB->req.VcNumber = __constant_cpu_to_le16(1);
132 50
133 /* Now no need to set SMBFLG_CASELESS or obsolete CANONICAL PATH */51 /* Now no need to set SMBFLG_CASELESS or obsolete CANONICAL PATH */
134 52
@@ -582,9 +500,9 @@ select_sectype(struct TCP_Server_Info *server, enum securityEnum requested) · 447 unmodified lines
582 return NTLMv2;500 return NTLMv2;
583 if (global_secflags & CIFSSEC_MAY_NTLM)501 if (global_secflags & CIFSSEC_MAY_NTLM)
584 return NTLM;502 return NTLM;
585 /* Fallthrough */
586 default:503 default:
587 return Unspecified;504 /* Fallthrough to attempt LANMAN authentication next */
505 break;
588 }506 }
589 case CIFS_NEGFLAVOR_LANMAN:507 case CIFS_NEGFLAVOR_LANMAN:
590 switch (requested) {508 switch (requested) {
fs/cifs/smb2pdu.c+6−0
@@ -687,6 +687,10 @@ SMB2_logoff(const unsigned int xid, struct cifs_ses *ses) · 686 unmodified lines
687 else687 else
688 return -EIO;688 return -EIO;
689 689
690 /* no need to send SMB logoff if uid already closed due to reconnect */
691 if (ses->need_reconnect)
692 goto smb2_session_already_dead;
693
690 rc = small_smb2_init(SMB2_LOGOFF, NULL, (void **) &req);694 rc = small_smb2_init(SMB2_LOGOFF, NULL, (void **) &req);
691 if (rc)695 if (rc)
692 return rc;696 return rc;
@@ -701,6 +705,8 @@ SMB2_logoff(const unsigned int xid, struct cifs_ses *ses) · 8 unmodified lines
701 * No tcon so can't do705 * No tcon so can't do
702 * cifs_stats_inc(&tcon->stats.smb2_stats.smb2_com_fail[SMB2...]);706 * cifs_stats_inc(&tcon->stats.smb2_stats.smb2_com_fail[SMB2...]);
703 */707 */
708
709smb2_session_already_dead:
704 return rc;710 return rc;
705}711}
706 712
fs/cifs/smbfsctl.h+14−0
@@ -97,9 +97,23 @@ · 96 unmodified lines
97#define FSCTL_QUERY_NETWORK_INTERFACE_INFO 0x001401FC /* BB add struct */97#define FSCTL_QUERY_NETWORK_INTERFACE_INFO 0x001401FC /* BB add struct */
98#define FSCTL_SRV_READ_HASH 0x001441BB /* BB add struct */98#define FSCTL_SRV_READ_HASH 0x001441BB /* BB add struct */
99 99
100/* See FSCC 2.1.2.5 */
100#define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003101#define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003
101#define IO_REPARSE_TAG_HSM 0xC0000004102#define IO_REPARSE_TAG_HSM 0xC0000004
102#define IO_REPARSE_TAG_SIS 0x80000007103#define IO_REPARSE_TAG_SIS 0x80000007
104#define IO_REPARSE_TAG_HSM2 0x80000006
105#define IO_REPARSE_TAG_DRIVER_EXTENDER 0x80000005
106/* Used by the DFS filter. See MS-DFSC */
107#define IO_REPARSE_TAG_DFS 0x8000000A
108/* Used by the DFS filter See MS-DFSC */
109#define IO_REPARSE_TAG_DFSR 0x80000012
110#define IO_REPARSE_TAG_FILTER_MANAGER 0x8000000B
111/* See section MS-FSCC 2.1.2.4 */
112#define IO_REPARSE_TAG_SYMLINK 0xA000000C
113#define IO_REPARSE_TAG_DEDUP 0x80000013
114#define IO_REPARSE_APPXSTREAM 0xC0000014
115/* NFS symlinks, Win 8/SMB3 and later */
116#define IO_REPARSE_TAG_NFS 0x80000014
103 117
104/* fsctl flags */118/* fsctl flags */
105/* If Flags is set to this value, the request is an FSCTL not ioctl request */119/* If Flags is set to this value, the request is an FSCTL not ioctl request */
fs/cifs/transport.c+7−2
@@ -410,8 +410,13 @@ static int · 409 unmodified lines
410wait_for_free_request(struct TCP_Server_Info *server, const int timeout,410wait_for_free_request(struct TCP_Server_Info *server, const int timeout,
411 const int optype)411 const int optype)
412{412{
413 return wait_for_free_credits(server, timeout,413 int *val;
414 server->ops->get_credits_field(server, optype));414
415 val = server->ops->get_credits_field(server, optype);
416 /* Since an echo is already inflight, no need to wait to send another */
417 if (*val <= 0 && optype == CIFS_ECHO_OP)
418 return -EAGAIN;
419 return wait_for_free_credits(server, timeout, val);
415}420}
416 421
417static int allocate_mid(struct cifs_ses *ses, struct smb_hdr *in_buf,422static int allocate_mid(struct cifs_ses *ses, struct smb_hdr *in_buf,
fs/dcache.c+7−8
@@ -1331,14 +1331,6 @@ rename_retry: · 1330 unmodified lines
1331 * list is non-empty and continue searching.1331 * list is non-empty and continue searching.
1332 */1332 */
1333 1333
1334/**
1335 * have_submounts - check for mounts over a dentry
1336 * @parent: dentry to check.
1337 *
1338 * Return true if the parent or its subdirectories contain
1339 * a mount point
1340 */
1341
1342static enum d_walk_ret check_mount(void *data, struct dentry *dentry)1334static enum d_walk_ret check_mount(void *data, struct dentry *dentry)
1343{1335{
1344 int *ret = data;1336 int *ret = data;
@@ -1349,6 +1341,13 @@ static enum d_walk_ret check_mount(void *data, struct dentry *dentry) · 4 unmodified lines
1349 return D_WALK_CONTINUE;1341 return D_WALK_CONTINUE;
1350}1342}
1351 1343
1344/**
1345 * have_submounts - check for mounts over a dentry
1346 * @parent: dentry to check.
1347 *
1348 * Return true if the parent or its subdirectories contain
1349 * a mount point
1350 */
1352int have_submounts(struct dentry *parent)1351int have_submounts(struct dentry *parent)
1353{1352{
1354 int ret = 0;1353 int ret = 0;
fs/ext3/namei.c+2−3
@@ -1783,7 +1783,7 @@ retry: · 1782 unmodified lines
1783 d_tmpfile(dentry, inode);1783 d_tmpfile(dentry, inode);
1784 err = ext3_orphan_add(handle, inode);1784 err = ext3_orphan_add(handle, inode);
1785 if (err)1785 if (err)
1786 goto err_drop_inode;1786 goto err_unlock_inode;
1787 mark_inode_dirty(inode);1787 mark_inode_dirty(inode);
1788 unlock_new_inode(inode);1788 unlock_new_inode(inode);
1789 }1789 }
@@ -1791,10 +1791,9 @@ retry: · 1 unmodified line
1791 if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries))1791 if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries))
1792 goto retry;1792 goto retry;
1793 return err;1793 return err;
1794err_drop_inode:1794err_unlock_inode:
1795 ext3_journal_stop(handle);1795 ext3_journal_stop(handle);
1796 unlock_new_inode(inode);1796 unlock_new_inode(inode);
1797 iput(inode);
1798 return err;1797 return err;
1799}1798}
1800 1799
fs/ext4/inode.c+1−1
@@ -2563,7 +2563,7 @@ retry: · 2562 unmodified lines
2563 break;2563 break;
2564 }2564 }
2565 blk_finish_plug(&plug);2565 blk_finish_plug(&plug);
2566 if (!ret && !cycled) {2566 if (!ret && !cycled && wbc->nr_to_write > 0) {
2567 cycled = 1;2567 cycled = 1;
2568 mpd.last_page = writeback_index - 1;2568 mpd.last_page = writeback_index - 1;
2569 mpd.first_page = 0;2569 mpd.first_page = 0;
fs/ext4/namei.c+2−3
@@ -2319,7 +2319,7 @@ retry: · 2318 unmodified lines
2319 d_tmpfile(dentry, inode);2319 d_tmpfile(dentry, inode);
2320 err = ext4_orphan_add(handle, inode);2320 err = ext4_orphan_add(handle, inode);
2321 if (err)2321 if (err)
2322 goto err_drop_inode;2322 goto err_unlock_inode;
2323 mark_inode_dirty(inode);2323 mark_inode_dirty(inode);
2324 unlock_new_inode(inode);2324 unlock_new_inode(inode);
2325 }2325 }
@@ -2328,10 +2328,9 @@ retry: · 2 unmodified lines
2328 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))2328 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
2329 goto retry;2329 goto retry;
2330 return err;2330 return err;
2331err_drop_inode:2331err_unlock_inode:
2332 ext4_journal_stop(handle);2332 ext4_journal_stop(handle);
2333 unlock_new_inode(inode);2333 unlock_new_inode(inode);
2334 iput(inode);
2335 return err;2334 return err;
2336}2335}
2337 2336
fs/ext4/xattr.c+2−0
@@ -1350,6 +1350,8 @@ retry: · 1349 unmodified lines
1350 s_min_extra_isize) {1350 s_min_extra_isize) {
1351 tried_min_extra_isize++;1351 tried_min_extra_isize++;
1352 new_extra_isize = s_min_extra_isize;1352 new_extra_isize = s_min_extra_isize;
1353 kfree(is); is = NULL;
1354 kfree(bs); bs = NULL;
1353 goto retry;1355 goto retry;
1354 }1356 }
1355 error = -1;1357 error = -1;
fs/fuse/dir.c+13−7
@@ -182,6 +182,7 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) · 181 unmodified lines
182 struct inode *inode;182 struct inode *inode;
183 struct dentry *parent;183 struct dentry *parent;
184 struct fuse_conn *fc;184 struct fuse_conn *fc;
185 struct fuse_inode *fi;
185 int ret;186 int ret;
186 187
187 inode = ACCESS_ONCE(entry->d_inode);188 inode = ACCESS_ONCE(entry->d_inode);
@@ -228,7 +229,7 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) · 40 unmodified lines
228 if (!err && !outarg.nodeid)229 if (!err && !outarg.nodeid)
229 err = -ENOENT;230 err = -ENOENT;
230 if (!err) {231 if (!err) {
231 struct fuse_inode *fi = get_fuse_inode(inode);232 fi = get_fuse_inode(inode);
232 if (outarg.nodeid != get_node_id(inode)) {233 if (outarg.nodeid != get_node_id(inode)) {
233 fuse_queue_forget(fc, forget, outarg.nodeid, 1);234 fuse_queue_forget(fc, forget, outarg.nodeid, 1);
234 goto invalid;235 goto invalid;
@@ -246,8 +247,11 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) · 11 unmodified lines
246 attr_version);247 attr_version);
247 fuse_change_entry_timeout(entry, &outarg);248 fuse_change_entry_timeout(entry, &outarg);
248 } else if (inode) {249 } else if (inode) {
249 fc = get_fuse_conn(inode);250 fi = get_fuse_inode(inode);
250 if (fc->readdirplus_auto) {251 if (flags & LOOKUP_RCU) {
252 if (test_bit(FUSE_I_INIT_RDPLUS, &fi->state))
253 return -ECHILD;
254 } else if (test_and_clear_bit(FUSE_I_INIT_RDPLUS, &fi->state)) {
251 parent = dget_parent(entry);255 parent = dget_parent(entry);
252 fuse_advise_use_readdirplus(parent->d_inode);256 fuse_advise_use_readdirplus(parent->d_inode);
253 dput(parent);257 dput(parent);
@@ -259,7 +263,8 @@ out: · 5 unmodified lines
259 263
260invalid:264invalid:
261 ret = 0;265 ret = 0;
262 if (check_submounts_and_drop(entry) != 0)266
267 if (!(flags & LOOKUP_RCU) && check_submounts_and_drop(entry) != 0)
263 ret = 1;268 ret = 1;
264 goto out;269 goto out;
265}270}
@@ -1063,6 +1068,8 @@ static int fuse_access(struct inode *inode, int mask) · 797 unmodified lines
1063 struct fuse_access_in inarg;1068 struct fuse_access_in inarg;
1064 int err;1069 int err;
1065 1070
1071 BUG_ON(mask & MAY_NOT_BLOCK);
1072
1066 if (fc->no_access)1073 if (fc->no_access)
1067 return 0;1074 return 0;
1068 1075
@@ -1150,9 +1157,6 @@ static int fuse_permission(struct inode *inode, int mask) · 81 unmodified lines
1150 noticed immediately, only after the attribute1157 noticed immediately, only after the attribute
1151 timeout has expired */1158 timeout has expired */
1152 } else if (mask & (MAY_ACCESS | MAY_CHDIR)) {1159 } else if (mask & (MAY_ACCESS | MAY_CHDIR)) {
1153 if (mask & MAY_NOT_BLOCK)
1154 return -ECHILD;
1155
1156 err = fuse_access(inode, mask);1160 err = fuse_access(inode, mask);
1157 } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) {1161 } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) {
1158 if (!(inode->i_mode & S_IXUGO)) {1162 if (!(inode->i_mode & S_IXUGO)) {
@@ -1291,6 +1295,8 @@ static int fuse_direntplus_link(struct file *file, · 132 unmodified lines
1291 }1295 }
1292 1296
1293found:1297found:
1298 if (fc->readdirplus_auto)
1299 set_bit(FUSE_I_INIT_RDPLUS, &get_fuse_inode(inode)->state);
1294 fuse_change_entry_timeout(dentry, o);1300 fuse_change_entry_timeout(dentry, o);
1295 1301
1296 err = 0;1302 err = 0;
fs/fuse/file.c+17−6
@@ -2467,6 +2467,7 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, · 2466 unmodified lines
2467{2467{
2468 struct fuse_file *ff = file->private_data;2468 struct fuse_file *ff = file->private_data;
2469 struct inode *inode = file->f_inode;2469 struct inode *inode = file->f_inode;
2470 struct fuse_inode *fi = get_fuse_inode(inode);
2470 struct fuse_conn *fc = ff->fc;2471 struct fuse_conn *fc = ff->fc;
2471 struct fuse_req *req;2472 struct fuse_req *req;
2472 struct fuse_fallocate_in inarg = {2473 struct fuse_fallocate_in inarg = {
@@ -2484,10 +2485,20 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, · 11 unmodified lines
2484 2485
2485 if (lock_inode) {2486 if (lock_inode) {
2486 mutex_lock(&inode->i_mutex);2487 mutex_lock(&inode->i_mutex);
2487 if (mode & FALLOC_FL_PUNCH_HOLE)2488 if (mode & FALLOC_FL_PUNCH_HOLE) {
2488 fuse_set_nowrite(inode);2489 loff_t endbyte = offset + length - 1;
2490 err = filemap_write_and_wait_range(inode->i_mapping,
2491 offset, endbyte);
2492 if (err)
2493 goto out;
2494
2495 fuse_sync_writes(inode);
2496 }
2489 }2497 }
2490 2498
2499 if (!(mode & FALLOC_FL_KEEP_SIZE))
2500 set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
2501
2491 req = fuse_get_req_nopages(fc);2502 req = fuse_get_req_nopages(fc);
2492 if (IS_ERR(req)) {2503 if (IS_ERR(req)) {
2493 err = PTR_ERR(req);2504 err = PTR_ERR(req);
@@ -2520,11 +2531,11 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, · 26 unmodified lines
2520 fuse_invalidate_attr(inode);2531 fuse_invalidate_attr(inode);
2521 2532
2522out:2533out:
2523 if (lock_inode) {2534 if (!(mode & FALLOC_FL_KEEP_SIZE))
2524 if (mode & FALLOC_FL_PUNCH_HOLE)2535 clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
2525 fuse_release_nowrite(inode);2536
2537 if (lock_inode)
2526 mutex_unlock(&inode->i_mutex);2538 mutex_unlock(&inode->i_mutex);
2527 }
2528 2539
2529 return err;2540 return err;
2530}2541}
fs/fuse/fuse_i.h+2−0
@@ -115,6 +115,8 @@ struct fuse_inode { · 114 unmodified lines
115enum {115enum {
116 /** Advise readdirplus */116 /** Advise readdirplus */
117 FUSE_I_ADVISE_RDPLUS,117 FUSE_I_ADVISE_RDPLUS,
118 /** Initialized with readdirplus */
119 FUSE_I_INIT_RDPLUS,
118 /** An operation changing file size is in progress */120 /** An operation changing file size is in progress */
119 FUSE_I_SIZE_UNSTABLE,121 FUSE_I_SIZE_UNSTABLE,
120};122};
fs/jfs/jfs_inode.c+1−2
@@ -95,7 +95,7 @@ struct inode *ialloc(struct inode *parent, umode_t mode) · 94 unmodified lines
95 95
96 if (insert_inode_locked(inode) < 0) {96 if (insert_inode_locked(inode) < 0) {
97 rc = -EINVAL;97 rc = -EINVAL;
98 goto fail_unlock;98 goto fail_put;
99 }99 }
100 100
101 inode_init_owner(inode, parent, mode);101 inode_init_owner(inode, parent, mode);
@@ -156,7 +156,6 @@ struct inode *ialloc(struct inode *parent, umode_t mode) · 54 unmodified lines
156fail_drop:156fail_drop:
157 dquot_drop(inode);157 dquot_drop(inode);
158 inode->i_flags |= S_NOQUOTA;158 inode->i_flags |= S_NOQUOTA;
159fail_unlock:
160 clear_nlink(inode);159 clear_nlink(inode);
161 unlock_new_inode(inode);160 unlock_new_inode(inode);
162fail_put:161fail_put:
fs/namei.c+2−1
@@ -2294,10 +2294,11 @@ out: · 2293 unmodified lines
2294 * path_mountpoint - look up a path to be umounted2294 * path_mountpoint - look up a path to be umounted
2295 * @dfd: directory file descriptor to start walk from2295 * @dfd: directory file descriptor to start walk from
2296 * @name: full pathname to walk2296 * @name: full pathname to walk
2297 * @path: pointer to container for result
2297 * @flags: lookup flags2298 * @flags: lookup flags
2298 *2299 *
2299 * Look up the given name, but don't attempt to revalidate the last component.2300 * Look up the given name, but don't attempt to revalidate the last component.
2300 * Returns 0 and "path" will be valid on success; Retuns error otherwise.2301 * Returns 0 and "path" will be valid on success; Returns error otherwise.
2301 */2302 */
2302static int2303static int
2303path_mountpoint(int dfd, const char *name, struct path *path, unsigned int flags)2304path_mountpoint(int dfd, const char *name, struct path *path, unsigned int flags)
fs/proc/inode.c+7−3
@@ -288,10 +288,14 @@ static int proc_reg_mmap(struct file *file, struct vm_area_struct *vma) · 287 unmodified lines
288static unsigned long proc_reg_get_unmapped_area(struct file *file, unsigned long orig_addr, unsigned long len, unsigned long pgoff, unsigned long flags)288static unsigned long proc_reg_get_unmapped_area(struct file *file, unsigned long orig_addr, unsigned long len, unsigned long pgoff, unsigned long flags)
289{289{
290 struct proc_dir_entry *pde = PDE(file_inode(file));290 struct proc_dir_entry *pde = PDE(file_inode(file));
291 int rv = -EIO;291 unsigned long rv = -EIO;
292 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);292 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long) = NULL;
293 if (use_pde(pde)) {293 if (use_pde(pde)) {
294 get_unmapped_area = pde->proc_fops->get_unmapped_area;294#ifdef CONFIG_MMU
295 get_unmapped_area = current->mm->get_unmapped_area;
296#endif
297 if (pde->proc_fops->get_unmapped_area)
298 get_unmapped_area = pde->proc_fops->get_unmapped_area;
295 if (get_unmapped_area)299 if (get_unmapped_area)
296 rv = get_unmapped_area(file, orig_addr, len, pgoff, flags);300 rv = get_unmapped_area(file, orig_addr, len, pgoff, flags);
297 unuse_pde(pde);301 unuse_pde(pde);
fs/proc/task_mmu.c+3−1
@@ -941,6 +941,8 @@ static void pte_to_pagemap_entry(pagemap_entry_t *pme, struct pagemapread *pm, · 940 unmodified lines
941 frame = pte_pfn(pte);941 frame = pte_pfn(pte);
942 flags = PM_PRESENT;942 flags = PM_PRESENT;
943 page = vm_normal_page(vma, addr, pte);943 page = vm_normal_page(vma, addr, pte);
944 if (pte_soft_dirty(pte))
945 flags2 |= __PM_SOFT_DIRTY;
944 } else if (is_swap_pte(pte)) {946 } else if (is_swap_pte(pte)) {
945 swp_entry_t entry;947 swp_entry_t entry;
946 if (pte_swp_soft_dirty(pte))948 if (pte_swp_soft_dirty(pte))
@@ -960,7 +962,7 @@ static void pte_to_pagemap_entry(pagemap_entry_t *pme, struct pagemapread *pm, · 13 unmodified lines
960 962
961 if (page && !PageAnon(page))963 if (page && !PageAnon(page))
962 flags |= PM_FILE;964 flags |= PM_FILE;
963 if ((vma->vm_flags & VM_SOFTDIRTY) || pte_soft_dirty(pte))965 if ((vma->vm_flags & VM_SOFTDIRTY))
964 flags2 |= __PM_SOFT_DIRTY;966 flags2 |= __PM_SOFT_DIRTY;
965 967
966 *pme = make_pme(PM_PFRAME(frame) | PM_STATUS2(pm->v2, flags2) | flags);968 *pme = make_pme(PM_PFRAME(frame) | PM_STATUS2(pm->v2, flags2) | flags);
fs/statfs.c+1−1
@@ -94,7 +94,7 @@ retry: · 93 unmodified lines
94 94
95int fd_statfs(int fd, struct kstatfs *st)95int fd_statfs(int fd, struct kstatfs *st)
96{96{
97 struct fd f = fdget(fd);97 struct fd f = fdget_raw(fd);
98 int error = -EBADF;98 int error = -EBADF;
99 if (f.file) {99 if (f.file) {
100 error = vfs_statfs(&f.file->f_path, st);100 error = vfs_statfs(&f.file->f_path, st);
fs/xfs/xfs_dir2_block.c+3−3
@@ -1158,7 +1158,7 @@ xfs_dir2_sf_to_block( · 1157 unmodified lines
1158 /*1158 /*
1159 * Create entry for .1159 * Create entry for .
1160 */1160 */
1161 dep = xfs_dir3_data_dot_entry_p(hdr);1161 dep = xfs_dir3_data_dot_entry_p(mp, hdr);
1162 dep->inumber = cpu_to_be64(dp->i_ino);1162 dep->inumber = cpu_to_be64(dp->i_ino);
1163 dep->namelen = 1;1163 dep->namelen = 1;
1164 dep->name[0] = '.';1164 dep->name[0] = '.';
@@ -1172,7 +1172,7 @@ xfs_dir2_sf_to_block( · 7 unmodified lines
1172 /*1172 /*
1173 * Create entry for ..1173 * Create entry for ..
1174 */1174 */
1175 dep = xfs_dir3_data_dotdot_entry_p(hdr);1175 dep = xfs_dir3_data_dotdot_entry_p(mp, hdr);
1176 dep->inumber = cpu_to_be64(xfs_dir2_sf_get_parent_ino(sfp));1176 dep->inumber = cpu_to_be64(xfs_dir2_sf_get_parent_ino(sfp));
1177 dep->namelen = 2;1177 dep->namelen = 2;
1178 dep->name[0] = dep->name[1] = '.';1178 dep->name[0] = dep->name[1] = '.';
@@ -1183,7 +1183,7 @@ xfs_dir2_sf_to_block( · 4 unmodified lines
1183 blp[1].hashval = cpu_to_be32(xfs_dir_hash_dotdot);1183 blp[1].hashval = cpu_to_be32(xfs_dir_hash_dotdot);
1184 blp[1].address = cpu_to_be32(xfs_dir2_byte_to_dataptr(mp,1184 blp[1].address = cpu_to_be32(xfs_dir2_byte_to_dataptr(mp,
1185 (char *)dep - (char *)hdr));1185 (char *)dep - (char *)hdr));
1186 offset = xfs_dir3_data_first_offset(hdr);1186 offset = xfs_dir3_data_first_offset(mp);
1187 /*1187 /*
1188 * Loop over existing entries, stuff them in.1188 * Loop over existing entries, stuff them in.
1189 */1189 */
fs/xfs/xfs_dir2_format.h+20−31
@@ -497,69 +497,58 @@ xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *hdr) · 496 unmodified lines
497/*497/*
498 * Offsets of . and .. in data space (always block 0)498 * Offsets of . and .. in data space (always block 0)
499 *499 *
500 * The macros are used for shortform directories as they have no headers to read
501 * the magic number out of. Shortform directories need to know the size of the
502 * data block header because the sfe embeds the block offset of the entry into
503 * it so that it doesn't change when format conversion occurs. Bad Things Happen
504 * if we don't follow this rule.
505 *
506 * XXX: there is scope for significant optimisation of the logic here. Right500 * XXX: there is scope for significant optimisation of the logic here. Right
507 * now we are checking for "dir3 format" over and over again. Ideally we should501 * now we are checking for "dir3 format" over and over again. Ideally we should
508 * only do it once for each operation.502 * only do it once for each operation.
509 */503 */
510#define XFS_DIR3_DATA_DOT_OFFSET(mp) \
511 xfs_dir3_data_hdr_size(xfs_sb_version_hascrc(&(mp)->m_sb))
512#define XFS_DIR3_DATA_DOTDOT_OFFSET(mp) \
513 (XFS_DIR3_DATA_DOT_OFFSET(mp) + xfs_dir3_data_entsize(mp, 1))
514#define XFS_DIR3_DATA_FIRST_OFFSET(mp) \
515 (XFS_DIR3_DATA_DOTDOT_OFFSET(mp) + xfs_dir3_data_entsize(mp, 2))
516
517static inline xfs_dir2_data_aoff_t504static inline xfs_dir2_data_aoff_t
518xfs_dir3_data_dot_offset(struct xfs_dir2_data_hdr *hdr)505xfs_dir3_data_dot_offset(struct xfs_mount *mp)
519{506{
520 return xfs_dir3_data_entry_offset(hdr);507 return xfs_dir3_data_hdr_size(xfs_sb_version_hascrc(&mp->m_sb));
521}508}
522 509
523static inline xfs_dir2_data_aoff_t510static inline xfs_dir2_data_aoff_t
524xfs_dir3_data_dotdot_offset(struct xfs_dir2_data_hdr *hdr)511xfs_dir3_data_dotdot_offset(struct xfs_mount *mp)
525{512{
526 bool dir3 = hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) ||513 return xfs_dir3_data_dot_offset(mp) +
527 hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC);514 xfs_dir3_data_entsize(mp, 1);
528 return xfs_dir3_data_dot_offset(hdr) +
529 __xfs_dir3_data_entsize(dir3, 1);
530}515}
531 516
532static inline xfs_dir2_data_aoff_t517static inline xfs_dir2_data_aoff_t
533xfs_dir3_data_first_offset(struct xfs_dir2_data_hdr *hdr)518xfs_dir3_data_first_offset(struct xfs_mount *mp)
534{519{
535 bool dir3 = hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) ||520 return xfs_dir3_data_dotdot_offset(mp) +
536 hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC);521 xfs_dir3_data_entsize(mp, 2);
537 return xfs_dir3_data_dotdot_offset(hdr) +
538 __xfs_dir3_data_entsize(dir3, 2);
539}522}
540 523
541/*524/*
542 * location of . and .. in data space (always block 0)525 * location of . and .. in data space (always block 0)
543 */526 */
544static inline struct xfs_dir2_data_entry *527static inline struct xfs_dir2_data_entry *
545xfs_dir3_data_dot_entry_p(struct xfs_dir2_data_hdr *hdr)528xfs_dir3_data_dot_entry_p(
529 struct xfs_mount *mp,
530 struct xfs_dir2_data_hdr *hdr)
546{531{
547 return (struct xfs_dir2_data_entry *)532 return (struct xfs_dir2_data_entry *)
548 ((char *)hdr + xfs_dir3_data_dot_offset(hdr));533 ((char *)hdr + xfs_dir3_data_dot_offset(mp));
549}534}
550 535
551static inline struct xfs_dir2_data_entry *536static inline struct xfs_dir2_data_entry *
552xfs_dir3_data_dotdot_entry_p(struct xfs_dir2_data_hdr *hdr)537xfs_dir3_data_dotdot_entry_p(
538 struct xfs_mount *mp,
539 struct xfs_dir2_data_hdr *hdr)
553{540{
554 return (struct xfs_dir2_data_entry *)541 return (struct xfs_dir2_data_entry *)
555 ((char *)hdr + xfs_dir3_data_dotdot_offset(hdr));542 ((char *)hdr + xfs_dir3_data_dotdot_offset(mp));
556}543}
557 544
558static inline struct xfs_dir2_data_entry *545static inline struct xfs_dir2_data_entry *
559xfs_dir3_data_first_entry_p(struct xfs_dir2_data_hdr *hdr)546xfs_dir3_data_first_entry_p(
547 struct xfs_mount *mp,
548 struct xfs_dir2_data_hdr *hdr)
560{549{
561 return (struct xfs_dir2_data_entry *)550 return (struct xfs_dir2_data_entry *)
562 ((char *)hdr + xfs_dir3_data_first_offset(hdr));551 ((char *)hdr + xfs_dir3_data_first_offset(mp));
563}552}
564 553
565/*554/*
fs/xfs/xfs_dir2_readdir.c+2−2
@@ -119,9 +119,9 @@ xfs_dir2_sf_getdents( · 118 unmodified lines
119 * mp->m_dirdatablk.119 * mp->m_dirdatablk.
120 */120 */
121 dot_offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk,121 dot_offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk,
122 XFS_DIR3_DATA_DOT_OFFSET(mp));122 xfs_dir3_data_dot_offset(mp));
123 dotdot_offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk,123 dotdot_offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk,
124 XFS_DIR3_DATA_DOTDOT_OFFSET(mp));124 xfs_dir3_data_dotdot_offset(mp));
125 125
126 /*126 /*
127 * Put . entry unless we're starting past it.127 * Put . entry unless we're starting past it.
fs/xfs/xfs_dir2_sf.c+3−3
@@ -557,7 +557,7 @@ xfs_dir2_sf_addname_hard( · 556 unmodified lines
557 * to insert the new entry.557 * to insert the new entry.
558 * If it's going to end up at the end then oldsfep will point there.558 * If it's going to end up at the end then oldsfep will point there.
559 */559 */
560 for (offset = XFS_DIR3_DATA_FIRST_OFFSET(mp),560 for (offset = xfs_dir3_data_first_offset(mp),
561 oldsfep = xfs_dir2_sf_firstentry(oldsfp),561 oldsfep = xfs_dir2_sf_firstentry(oldsfp),
562 add_datasize = xfs_dir3_data_entsize(mp, args->namelen),562 add_datasize = xfs_dir3_data_entsize(mp, args->namelen),
563 eof = (char *)oldsfep == &buf[old_isize];563 eof = (char *)oldsfep == &buf[old_isize];
@@ -640,7 +640,7 @@ xfs_dir2_sf_addname_pick( · 76 unmodified lines
640 640
641 sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;641 sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
642 size = xfs_dir3_data_entsize(mp, args->namelen);642 size = xfs_dir3_data_entsize(mp, args->namelen);
643 offset = XFS_DIR3_DATA_FIRST_OFFSET(mp);643 offset = xfs_dir3_data_first_offset(mp);
644 sfep = xfs_dir2_sf_firstentry(sfp);644 sfep = xfs_dir2_sf_firstentry(sfp);
645 holefit = 0;645 holefit = 0;
646 /*646 /*
@@ -713,7 +713,7 @@ xfs_dir2_sf_check( · 66 unmodified lines
713 mp = dp->i_mount;713 mp = dp->i_mount;
714 714
715 sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;715 sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
716 offset = XFS_DIR3_DATA_FIRST_OFFSET(mp);716 offset = xfs_dir3_data_first_offset(mp);
717 ino = xfs_dir2_sf_get_parent_ino(sfp);717 ino = xfs_dir2_sf_get_parent_ino(sfp);
718 i8count = ino > XFS_DIR2_MAX_SHORT_INUM;718 i8count = ino > XFS_DIR2_MAX_SHORT_INUM;
719 719
fs/xfs/xfs_dquot.c+16−3
@@ -64,7 +64,8 @@ int xfs_dqerror_mod = 33; · 63 unmodified lines
64struct kmem_zone *xfs_qm_dqtrxzone;64struct kmem_zone *xfs_qm_dqtrxzone;
65static struct kmem_zone *xfs_qm_dqzone;65static struct kmem_zone *xfs_qm_dqzone;
66 66
67static struct lock_class_key xfs_dquot_other_class;67static struct lock_class_key xfs_dquot_group_class;
68static struct lock_class_key xfs_dquot_project_class;
68 69
69/*70/*
70 * This is called to free all the memory associated with a dquot71 * This is called to free all the memory associated with a dquot
@@ -703,8 +704,20 @@ xfs_qm_dqread( · 632 unmodified lines
703 * Make sure group quotas have a different lock class than user704 * Make sure group quotas have a different lock class than user
704 * quotas.705 * quotas.
705 */706 */
706 if (!(type & XFS_DQ_USER))707 switch (type) {
707 lockdep_set_class(&dqp->q_qlock, &xfs_dquot_other_class);708 case XFS_DQ_USER:
709 /* uses the default lock class */
710 break;
711 case XFS_DQ_GROUP:
712 lockdep_set_class(&dqp->q_qlock, &xfs_dquot_group_class);
713 break;
714 case XFS_DQ_PROJ:
715 lockdep_set_class(&dqp->q_qlock, &xfs_dquot_project_class);
716 break;
717 default:
718 ASSERT(0);
719 break;
720 }
708 721
709 XFS_STATS_INC(xs_qm_dquot);722 XFS_STATS_INC(xs_qm_dquot);
710 723
fs/xfs/xfs_log_recover.c+1−0
@@ -1585,6 +1585,7 @@ xlog_recover_add_to_trans( · 1584 unmodified lines
1585 "bad number of regions (%d) in inode log format",1585 "bad number of regions (%d) in inode log format",
1586 in_f->ilf_size);1586 in_f->ilf_size);
1587 ASSERT(0);1587 ASSERT(0);
1588 kmem_free(ptr);
1588 return XFS_ERROR(EIO);1589 return XFS_ERROR(EIO);
1589 }1590 }
1590 1591
include/acpi/acpi_bus.h+0−7
@@ -311,7 +311,6 @@ struct acpi_device { · 310 unmodified lines
311 unsigned int physical_node_count;311 unsigned int physical_node_count;
312 struct list_head physical_node_list;312 struct list_head physical_node_list;
313 struct mutex physical_node_lock;313 struct mutex physical_node_lock;
314 struct list_head power_dependent;
315 void (*remove)(struct acpi_device *);314 void (*remove)(struct acpi_device *);
316};315};
317 316
@@ -456,8 +455,6 @@ acpi_status acpi_add_pm_notifier(struct acpi_device *adev, · 138 unmodified lines
456acpi_status acpi_remove_pm_notifier(struct acpi_device *adev,455acpi_status acpi_remove_pm_notifier(struct acpi_device *adev,
457 acpi_notify_handler handler);456 acpi_notify_handler handler);
458int acpi_pm_device_sleep_state(struct device *, int *, int);457int acpi_pm_device_sleep_state(struct device *, int *, int);
459void acpi_dev_pm_add_dependent(acpi_handle handle, struct device *depdev);
460void acpi_dev_pm_remove_dependent(acpi_handle handle, struct device *depdev);
461#else458#else
462static inline acpi_status acpi_add_pm_notifier(struct acpi_device *adev,459static inline acpi_status acpi_add_pm_notifier(struct acpi_device *adev,
463 acpi_notify_handler handler,460 acpi_notify_handler handler,
@@ -478,10 +475,6 @@ static inline int acpi_pm_device_sleep_state(struct device *d, int *p, int m) · 14 unmodified lines
478 return (m >= ACPI_STATE_D0 && m <= ACPI_STATE_D3_COLD) ?475 return (m >= ACPI_STATE_D0 && m <= ACPI_STATE_D3_COLD) ?
479 m : ACPI_STATE_D0;476 m : ACPI_STATE_D0;
480}477}
481static inline void acpi_dev_pm_add_dependent(acpi_handle handle,
482 struct device *depdev) {}
483static inline void acpi_dev_pm_remove_dependent(acpi_handle handle,
484 struct device *depdev) {}
485#endif478#endif
486 479
487#ifdef CONFIG_PM_RUNTIME480#ifdef CONFIG_PM_RUNTIME
include/asm-generic/hugetlb.h+2−2
@@ -6,12 +6,12 @@ static inline pte_t mk_huge_pte(struct page *page, pgprot_t pgprot) · 5 unmodified lines
6 return mk_pte(page, pgprot);6 return mk_pte(page, pgprot);
7}7}
8 8
9static inline int huge_pte_write(pte_t pte)9static inline unsigned long huge_pte_write(pte_t pte)
10{10{
11 return pte_write(pte);11 return pte_write(pte);
12}12}
13 13
14static inline int huge_pte_dirty(pte_t pte)14static inline unsigned long huge_pte_dirty(pte_t pte)
15{15{
16 return pte_dirty(pte);16 return pte_dirty(pte);
17}17}
include/dt-bindings/pinctrl/omap.h+1−3
@@ -23,7 +23,7 @@ · 22 unmodified lines
23#define PULL_UP (1 << 4)23#define PULL_UP (1 << 4)
24#define ALTELECTRICALSEL (1 << 5)24#define ALTELECTRICALSEL (1 << 5)
25 25
26/* 34xx specific mux bit defines */26/* omap3/4/5 specific mux bit defines */
27#define INPUT_EN (1 << 8)27#define INPUT_EN (1 << 8)
28#define OFF_EN (1 << 9)28#define OFF_EN (1 << 9)
29#define OFFOUT_EN (1 << 10)29#define OFFOUT_EN (1 << 10)
@@ -31,8 +31,6 @@ · 1 unmodified line
31#define OFF_PULL_EN (1 << 12)31#define OFF_PULL_EN (1 << 12)
32#define OFF_PULL_UP (1 << 13)32#define OFF_PULL_UP (1 << 13)
33#define WAKEUP_EN (1 << 14)33#define WAKEUP_EN (1 << 14)
34
35/* 44xx specific mux bit defines */
36#define WAKEUP_EVENT (1 << 15)34#define WAKEUP_EVENT (1 << 15)
37 35
38/* Active pin states */36/* Active pin states */
include/linux/compiler-gcc4.h+15−0
@@ -65,6 +65,21 @@ · 64 unmodified lines
65#define __visible __attribute__((externally_visible))65#define __visible __attribute__((externally_visible))
66#endif66#endif
67 67
68/*
69 * GCC 'asm goto' miscompiles certain code sequences:
70 *
71 * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
72 *
73 * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
74 * Fixed in GCC 4.8.2 and later versions.
75 *
76 * (asm goto is automatically volatile - the naming reflects this.)
77 */
78#if GCC_VERSION <= 40801
79# define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
80#else
81# define asm_volatile_goto(x...) do { asm goto(x); } while (0)
82#endif
68 83
69#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP84#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
70#if GCC_VERSION >= 4040085#if GCC_VERSION >= 40400
include/linux/intel-iommu.h+1−1
@@ -55,7 +55,7 @@ · 54 unmodified lines
55#define DMAR_IQT_REG 0x88 /* Invalidation queue tail register */55#define DMAR_IQT_REG 0x88 /* Invalidation queue tail register */
56#define DMAR_IQ_SHIFT 4 /* Invalidation queue head/tail shift */56#define DMAR_IQ_SHIFT 4 /* Invalidation queue head/tail shift */
57#define DMAR_IQA_REG 0x90 /* Invalidation queue addr register */57#define DMAR_IQA_REG 0x90 /* Invalidation queue addr register */
58#define DMAR_ICS_REG 0x98 /* Invalidation complete status register */58#define DMAR_ICS_REG 0x9c /* Invalidation complete status register */
59#define DMAR_IRTA_REG 0xb8 /* Interrupt remapping table addr register */59#define DMAR_IRTA_REG 0xb8 /* Interrupt remapping table addr register */
60 60
61#define OFFSET_STRIDE (9)61#define OFFSET_STRIDE (9)
include/linux/memcontrol.h+11−39
@@ -137,47 +137,24 @@ extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, · 136 unmodified lines
137extern void mem_cgroup_replace_page_cache(struct page *oldpage,137extern void mem_cgroup_replace_page_cache(struct page *oldpage,
138 struct page *newpage);138 struct page *newpage);
139 139
140/**140static inline void mem_cgroup_oom_enable(void)
141 * mem_cgroup_toggle_oom - toggle the memcg OOM killer for the current task
142 * @new: true to enable, false to disable
143 *
144 * Toggle whether a failed memcg charge should invoke the OOM killer
145 * or just return -ENOMEM. Returns the previous toggle state.
146 *
147 * NOTE: Any path that enables the OOM killer before charging must
148 * call mem_cgroup_oom_synchronize() afterward to finalize the
149 * OOM handling and clean up.
150 */
151static inline bool mem_cgroup_toggle_oom(bool new)
152{141{
153 bool old;142 WARN_ON(current->memcg_oom.may_oom);
154 143 current->memcg_oom.may_oom = 1;
155 old = current->memcg_oom.may_oom;
156 current->memcg_oom.may_oom = new;
157
158 return old;
159}144}
160 145
161static inline void mem_cgroup_enable_oom(void)146static inline void mem_cgroup_oom_disable(void)
162{147{
163 bool old = mem_cgroup_toggle_oom(true);148 WARN_ON(!current->memcg_oom.may_oom);
164 149 current->memcg_oom.may_oom = 0;
165 WARN_ON(old == true);
166}
167
168static inline void mem_cgroup_disable_oom(void)
169{
170 bool old = mem_cgroup_toggle_oom(false);
171
172 WARN_ON(old == false);
173}150}
174 151
175static inline bool task_in_memcg_oom(struct task_struct *p)152static inline bool task_in_memcg_oom(struct task_struct *p)
176{153{
177 return p->memcg_oom.in_memcg_oom;154 return p->memcg_oom.memcg;
178}155}
179 156
180bool mem_cgroup_oom_synchronize(void);157bool mem_cgroup_oom_synchronize(bool wait);
181 158
182#ifdef CONFIG_MEMCG_SWAP159#ifdef CONFIG_MEMCG_SWAP
183extern int do_swap_account;160extern int do_swap_account;
@@ -402,16 +379,11 @@ static inline void mem_cgroup_end_update_page_stat(struct page *page, · 218 unmodified lines
402{379{
403}380}
404 381
405static inline bool mem_cgroup_toggle_oom(bool new)382static inline void mem_cgroup_oom_enable(void)
406{
407 return false;
408}
409
410static inline void mem_cgroup_enable_oom(void)
411{383{
412}384}
413 385
414static inline void mem_cgroup_disable_oom(void)386static inline void mem_cgroup_oom_disable(void)
415{387{
416}388}
417 389
@@ -420,7 +392,7 @@ static inline bool task_in_memcg_oom(struct task_struct *p) · 2 unmodified lines
420 return false;392 return false;
421}393}
422 394
423static inline bool mem_cgroup_oom_synchronize(void)395static inline bool mem_cgroup_oom_synchronize(bool wait)
424{396{
425 return false;397 return false;
426}398}
include/linux/miscdevice.h+1−0
@@ -45,6 +45,7 @@ · 44 unmodified lines
45#define MAPPER_CTRL_MINOR 23645#define MAPPER_CTRL_MINOR 236
46#define LOOP_CTRL_MINOR 23746#define LOOP_CTRL_MINOR 237
47#define VHOST_NET_MINOR 23847#define VHOST_NET_MINOR 238
48#define UHID_MINOR 239
48#define MISC_DYNAMIC_MINOR 25549#define MISC_DYNAMIC_MINOR 255
49 50
50struct device;51struct device;
include/linux/mlx5/device.h+2−2
@@ -181,7 +181,7 @@ enum { · 180 unmodified lines
181 MLX5_DEV_CAP_FLAG_TLP_HINTS = 1LL << 39,181 MLX5_DEV_CAP_FLAG_TLP_HINTS = 1LL << 39,
182 MLX5_DEV_CAP_FLAG_SIG_HAND_OVER = 1LL << 40,182 MLX5_DEV_CAP_FLAG_SIG_HAND_OVER = 1LL << 40,
183 MLX5_DEV_CAP_FLAG_DCT = 1LL << 41,183 MLX5_DEV_CAP_FLAG_DCT = 1LL << 41,
184 MLX5_DEV_CAP_FLAG_CMDIF_CSUM = 1LL << 46,184 MLX5_DEV_CAP_FLAG_CMDIF_CSUM = 3LL << 46,
185};185};
186 186
187enum {187enum {
@@ -417,7 +417,7 @@ struct mlx5_init_seg { · 229 unmodified lines
417 struct health_buffer health;417 struct health_buffer health;
418 __be32 rsvd2[884];418 __be32 rsvd2[884];
419 __be32 health_counter;419 __be32 health_counter;
420 __be32 rsvd3[1023];420 __be32 rsvd3[1019];
421 __be64 ieee1588_clk;421 __be64 ieee1588_clk;
422 __be32 ieee1588_clk_type;422 __be32 ieee1588_clk_type;
423 __be32 clr_intx;423 __be32 clr_intx;
include/linux/mlx5/driver.h+2−4
@@ -82,7 +82,7 @@ enum { · 81 unmodified lines
82};82};
83 83
84enum {84enum {
85 MLX5_MAX_EQ_NAME = 2085 MLX5_MAX_EQ_NAME = 32
86};86};
87 87
88enum {88enum {
@@ -747,8 +747,7 @@ static inline u32 mlx5_idx_to_mkey(u32 mkey_idx) · 658 unmodified lines
747 747
748enum {748enum {
749 MLX5_PROF_MASK_QP_SIZE = (u64)1 << 0,749 MLX5_PROF_MASK_QP_SIZE = (u64)1 << 0,
750 MLX5_PROF_MASK_CMDIF_CSUM = (u64)1 << 1,750 MLX5_PROF_MASK_MR_CACHE = (u64)1 << 1,
751 MLX5_PROF_MASK_MR_CACHE = (u64)1 << 2,
752};751};
753 752
754enum {753enum {
@@ -758,7 +757,6 @@ enum { · 3 unmodified lines
758struct mlx5_profile {757struct mlx5_profile {
759 u64 mask;758 u64 mask;
760 u32 log_max_qp;759 u32 log_max_qp;
761 int cmdif_csum;
762 struct {760 struct {
763 int size;761 int size;
764 int limit;762 int limit;
include/linux/of_reserved_mem.h+0−14
@@ -1,14 +0,0 @@
1#ifndef __OF_RESERVED_MEM_H
2#define __OF_RESERVED_MEM_H
3
4#ifdef CONFIG_OF_RESERVED_MEM
5void of_reserved_mem_device_init(struct device *dev);
6void of_reserved_mem_device_release(struct device *dev);
7void early_init_dt_scan_reserved_mem(void);
8#else
9static inline void of_reserved_mem_device_init(struct device *dev) { }
10static inline void of_reserved_mem_device_release(struct device *dev) { }
11static inline void early_init_dt_scan_reserved_mem(void) { }
12#endif
13
14#endif /* __OF_RESERVED_MEM_H */
include/linux/perf_event.h+23−1
@@ -294,9 +294,31 @@ struct ring_buffer; · 293 unmodified lines
294 */294 */
295struct perf_event {295struct perf_event {
296#ifdef CONFIG_PERF_EVENTS296#ifdef CONFIG_PERF_EVENTS
297 struct list_head group_entry;297 /*
298 * entry onto perf_event_context::event_list;
299 * modifications require ctx->lock
300 * RCU safe iterations.
301 */
298 struct list_head event_entry;302 struct list_head event_entry;
303
304 /*
305 * XXX: group_entry and sibling_list should be mutually exclusive;
306 * either you're a sibling on a group, or you're the group leader.
307 * Rework the code to always use the same list element.
308 *
309 * Locked for modification by both ctx->mutex and ctx->lock; holding
310 * either sufficies for read.
311 */
312 struct list_head group_entry;
299 struct list_head sibling_list;313 struct list_head sibling_list;
314
315 /*
316 * We need storage to track the entries in perf_pmu_migrate_context; we
317 * cannot use the event_entry because of RCU and we want to keep the
318 * group in tact which avoids us using the other two entries.
319 */
320 struct list_head migrate_entry;
321
300 struct hlist_node hlist_entry;322 struct hlist_node hlist_entry;
301 int nr_siblings;323 int nr_siblings;
302 int group_flags;324 int group_flags;
include/linux/random.h+1−0
@@ -17,6 +17,7 @@ extern void add_interrupt_randomness(int irq, int irq_flags); · 16 unmodified lines
17extern void get_random_bytes(void *buf, int nbytes);17extern void get_random_bytes(void *buf, int nbytes);
18extern void get_random_bytes_arch(void *buf, int nbytes);18extern void get_random_bytes_arch(void *buf, int nbytes);
19void generate_random_uuid(unsigned char uuid_out[16]);19void generate_random_uuid(unsigned char uuid_out[16]);
20extern int random_int_secret_init(void);
20 21
21#ifndef MODULE22#ifndef MODULE
22extern const struct file_operations random_fops, urandom_fops;23extern const struct file_operations random_fops, urandom_fops;
include/linux/sched.h+3−4
@@ -1394,11 +1394,10 @@ struct task_struct { · 1393 unmodified lines
1394 } memcg_batch;1394 } memcg_batch;
1395 unsigned int memcg_kmem_skip_account;1395 unsigned int memcg_kmem_skip_account;
1396 struct memcg_oom_info {1396 struct memcg_oom_info {
1397 struct mem_cgroup *memcg;
1398 gfp_t gfp_mask;
1399 int order;
1397 unsigned int may_oom:1;1400 unsigned int may_oom:1;
1398 unsigned int in_memcg_oom:1;
1399 unsigned int oom_locked:1;
1400 int wakeups;
1401 struct mem_cgroup *wait_on_memcg;
1402 } memcg_oom;1401 } memcg_oom;
1403#endif1402#endif
1404#ifdef CONFIG_UPROBES1403#ifdef CONFIG_UPROBES
include/linux/timex.h+14−0
@@ -64,6 +64,20 @@ · 63 unmodified lines
64 64
65#include <asm/timex.h>65#include <asm/timex.h>
66 66
67#ifndef random_get_entropy
68/*
69 * The random_get_entropy() function is used by the /dev/random driver
70 * in order to extract entropy via the relative unpredictability of
71 * when an interrupt takes places versus a high speed, fine-grained
72 * timing source or cycle counter. Since it will be occurred on every
73 * single interrupt, it must have a very low cost/overhead.
74 *
75 * By default we use get_cycles() for this purpose, but individual
76 * architectures may override this in their asm/timex.h header file.
77 */
78#define random_get_entropy() get_cycles()
79#endif
80
67/*81/*
68 * SHIFT_PLL is used as a dampening factor to define how much we82 * SHIFT_PLL is used as a dampening factor to define how much we
69 * adjust the frequency correction for a given offset in PLL mode.83 * adjust the frequency correction for a given offset in PLL mode.
include/linux/usb/usb_phy_gen_xceiv.h+1−1
@@ -12,7 +12,7 @@ struct usb_phy_gen_xceiv_platform_data { · 11 unmodified lines
12 unsigned int needs_reset:1;12 unsigned int needs_reset:1;
13};13};
14 14
15#if IS_ENABLED(CONFIG_NOP_USB_XCEIV)15#if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE))
16/* sometimes transceivers are accessed only through e.g. ULPI */16/* sometimes transceivers are accessed only through e.g. ULPI */
17extern void usb_nop_xceiv_register(void);17extern void usb_nop_xceiv_register(void);
18extern void usb_nop_xceiv_unregister(void);18extern void usb_nop_xceiv_unregister(void);
include/linux/usb_usual.h+3−1
@@ -66,7 +66,9 @@ · 65 unmodified lines
66 US_FLAG(INITIAL_READ10, 0x00100000) \66 US_FLAG(INITIAL_READ10, 0x00100000) \
67 /* Initial READ(10) (and others) must be retried */ \67 /* Initial READ(10) (and others) must be retried */ \
68 US_FLAG(WRITE_CACHE, 0x00200000) \68 US_FLAG(WRITE_CACHE, 0x00200000) \
69 /* Write Cache status is not available */69 /* Write Cache status is not available */ \
70 US_FLAG(NEEDS_CAP16, 0x00400000)
71 /* cannot handle READ_CAPACITY_10 */
70 72
71#define US_FLAG(name, value) US_FL_##name = value ,73#define US_FLAG(name, value) US_FL_##name = value ,
72enum { US_DO_ALL_FLAGS };74enum { US_DO_ALL_FLAGS };
include/linux/vgaarb.h+0−7
@@ -65,15 +65,8 @@ struct pci_dev; · 64 unmodified lines
65 * out of the arbitration process (and can be safe to take65 * out of the arbitration process (and can be safe to take
66 * interrupts at any time.66 * interrupts at any time.
67 */67 */
68#if defined(CONFIG_VGA_ARB)
69extern void vga_set_legacy_decoding(struct pci_dev *pdev,68extern void vga_set_legacy_decoding(struct pci_dev *pdev,
70 unsigned int decodes);69 unsigned int decodes);
71#else
72static inline void vga_set_legacy_decoding(struct pci_dev *pdev,
73 unsigned int decodes)
74{
75}
76#endif
77 70
78/**71/**
79 * vga_get - acquire & locks VGA resources72 * vga_get - acquire & locks VGA resources
include/linux/yam.h+1−1
@@ -77,6 +77,6 @@ struct yamdrv_ioctl_cfg { · 76 unmodified lines
77 77
78struct yamdrv_ioctl_mcs {78struct yamdrv_ioctl_mcs {
79 int cmd;79 int cmd;
80 int bitrate;80 unsigned int bitrate;
81 unsigned char bits[YAM_FPGA_SIZE];81 unsigned char bits[YAM_FPGA_SIZE];
82};82};
include/net/cipso_ipv4.h+4−2
@@ -290,6 +290,7 @@ static inline int cipso_v4_validate(const struct sk_buff *skb, · 289 unmodified lines
290 unsigned char err_offset = 0;290 unsigned char err_offset = 0;
291 u8 opt_len = opt[1];291 u8 opt_len = opt[1];
292 u8 opt_iter;292 u8 opt_iter;
293 u8 tag_len;
293 294
294 if (opt_len < 8) {295 if (opt_len < 8) {
295 err_offset = 1;296 err_offset = 1;
@@ -302,11 +303,12 @@ static inline int cipso_v4_validate(const struct sk_buff *skb, · 6 unmodified lines
302 }303 }
303 304
304 for (opt_iter = 6; opt_iter < opt_len;) {305 for (opt_iter = 6; opt_iter < opt_len;) {
305 if (opt[opt_iter + 1] > (opt_len - opt_iter)) {306 tag_len = opt[opt_iter + 1];
307 if ((tag_len == 0) || (opt[opt_iter + 1] > (opt_len - opt_iter))) {
306 err_offset = opt_iter + 1;308 err_offset = opt_iter + 1;
307 goto out;309 goto out;
308 }310 }
309 opt_iter += opt[opt_iter + 1];311 opt_iter += tag_len;
310 }312 }
311 313
312out:314out:
include/net/dst.h+12−0
@@ -478,10 +478,22 @@ static inline struct dst_entry *xfrm_lookup(struct net *net, · 477 unmodified lines
478{478{
479 return dst_orig;479 return dst_orig;
480} 480}
481
482static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst)
483{
484 return NULL;
485}
486
481#else487#else
482struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,488struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
483 const struct flowi *fl, struct sock *sk,489 const struct flowi *fl, struct sock *sk,
484 int flags);490 int flags);
491
492/* skb attached with this dst needs transformation if dst->xfrm is valid */
493static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst)
494{
495 return dst->xfrm;
496}
485#endif497#endif
486 498
487#endif /* _NET_DST_H */499#endif /* _NET_DST_H */
include/net/ip6_route.h+2−4
@@ -182,11 +182,9 @@ static inline int ip6_skb_dst_mtu(struct sk_buff *skb) · 181 unmodified lines
182 skb_dst(skb)->dev->mtu : dst_mtu(skb_dst(skb));182 skb_dst(skb)->dev->mtu : dst_mtu(skb_dst(skb));
183}183}
184 184
185static inline struct in6_addr *rt6_nexthop(struct rt6_info *rt, struct in6_addr *dest)185static inline struct in6_addr *rt6_nexthop(struct rt6_info *rt)
186{186{
187 if (rt->rt6i_flags & RTF_GATEWAY)187 return &rt->rt6i_gateway;
188 return &rt->rt6i_gateway;
189 return dest;
190}188}
191 189
192#endif190#endif
include/net/mac802154.h+1−1
@@ -133,7 +133,7 @@ struct ieee802154_ops { · 132 unmodified lines
133 133
134/* Basic interface to register ieee802154 device */134/* Basic interface to register ieee802154 device */
135struct ieee802154_dev *135struct ieee802154_dev *
136ieee802154_alloc_device(size_t priv_data_lex, struct ieee802154_ops *ops);136ieee802154_alloc_device(size_t priv_data_len, struct ieee802154_ops *ops);
137void ieee802154_free_device(struct ieee802154_dev *dev);137void ieee802154_free_device(struct ieee802154_dev *dev);
138int ieee802154_register_device(struct ieee802154_dev *dev);138int ieee802154_register_device(struct ieee802154_dev *dev);
139void ieee802154_unregister_device(struct ieee802154_dev *dev);139void ieee802154_unregister_device(struct ieee802154_dev *dev);
include/sound/rcar_snd.h+1−0
@@ -68,6 +68,7 @@ struct rsnd_scu_platform_info { · 67 unmodified lines
68 *68 *
69 * A : generation69 * A : generation
70 */70 */
71#define RSND_GEN_MASK (0xF << 0)
71#define RSND_GEN1 (1 << 0) /* fixme */72#define RSND_GEN1 (1 << 0) /* fixme */
72#define RSND_GEN2 (2 << 0) /* fixme */73#define RSND_GEN2 (2 << 0) /* fixme */
73 74
include/uapi/drm/drm_mode.h+2−0
@@ -223,6 +223,8 @@ struct drm_mode_get_connector { · 222 unmodified lines
223 __u32 connection;223 __u32 connection;
224 __u32 mm_width, mm_height; /**< HxW in millimeters */224 __u32 mm_width, mm_height; /**< HxW in millimeters */
225 __u32 subpixel;225 __u32 subpixel;
226
227 __u32 pad;
226};228};
227 229
228#define DRM_MODE_PROP_PENDING (1<<0)230#define DRM_MODE_PROP_PENDING (1<<0)
include/uapi/rdma/ib_user_verbs.h+6−0
@@ -87,8 +87,10 @@ enum { · 86 unmodified lines
87 IB_USER_VERBS_CMD_CLOSE_XRCD,87 IB_USER_VERBS_CMD_CLOSE_XRCD,
88 IB_USER_VERBS_CMD_CREATE_XSRQ,88 IB_USER_VERBS_CMD_CREATE_XSRQ,
89 IB_USER_VERBS_CMD_OPEN_QP,89 IB_USER_VERBS_CMD_OPEN_QP,
90#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
90 IB_USER_VERBS_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,91 IB_USER_VERBS_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
91 IB_USER_VERBS_CMD_DESTROY_FLOW92 IB_USER_VERBS_CMD_DESTROY_FLOW
93#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
92};94};
93 95
94/*96/*
@@ -126,6 +128,7 @@ struct ib_uverbs_cmd_hdr { · 31 unmodified lines
126 __u16 out_words;128 __u16 out_words;
127};129};
128 130
131#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
129struct ib_uverbs_cmd_hdr_ex {132struct ib_uverbs_cmd_hdr_ex {
130 __u32 command;133 __u32 command;
131 __u16 in_words;134 __u16 in_words;
@@ -134,6 +137,7 @@ struct ib_uverbs_cmd_hdr_ex { · 2 unmodified lines
134 __u16 provider_out_words;137 __u16 provider_out_words;
135 __u32 cmd_hdr_reserved;138 __u32 cmd_hdr_reserved;
136};139};
140#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
137 141
138struct ib_uverbs_get_context {142struct ib_uverbs_get_context {
139 __u64 response;143 __u64 response;
@@ -696,6 +700,7 @@ struct ib_uverbs_detach_mcast { · 556 unmodified lines
696 __u64 driver_data[0];700 __u64 driver_data[0];
697};701};
698 702
703#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
699struct ib_kern_eth_filter {704struct ib_kern_eth_filter {
700 __u8 dst_mac[6];705 __u8 dst_mac[6];
701 __u8 src_mac[6];706 __u8 src_mac[6];
@@ -780,6 +785,7 @@ struct ib_uverbs_destroy_flow { · 78 unmodified lines
780 __u32 comp_mask;785 __u32 comp_mask;
781 __u32 flow_handle;786 __u32 flow_handle;
782};787};
788#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
783 789
784struct ib_uverbs_create_srq {790struct ib_uverbs_create_srq {
785 __u64 response;791 __u64 response;
init/main.c+2−0
@@ -76,6 +76,7 @@ · 75 unmodified lines
76#include <linux/elevator.h>76#include <linux/elevator.h>
77#include <linux/sched_clock.h>77#include <linux/sched_clock.h>
78#include <linux/context_tracking.h>78#include <linux/context_tracking.h>
79#include <linux/random.h>
79 80
80#include <asm/io.h>81#include <asm/io.h>
81#include <asm/bugs.h>82#include <asm/bugs.h>
@@ -787,6 +788,7 @@ static void __init do_basic_setup(void) · 705 unmodified lines
787 do_ctors();788 do_ctors();
788 usermodehelper_enable();789 usermodehelper_enable();
789 do_initcalls();790 do_initcalls();
791 random_int_secret_init();
790}792}
791 793
792static void __init do_pre_smp_initcalls(void)794static void __init do_pre_smp_initcalls(void)
ipc/sem.c+29−13
@@ -1282,6 +1282,12 @@ static int semctl_setval(struct ipc_namespace *ns, int semid, int semnum, · 1281 unmodified lines
1282 1282
1283 sem_lock(sma, NULL, -1);1283 sem_lock(sma, NULL, -1);
1284 1284
1285 if (sma->sem_perm.deleted) {
1286 sem_unlock(sma, -1);
1287 rcu_read_unlock();
1288 return -EIDRM;
1289 }
1290
1285 curr = &sma->sem_base[semnum];1291 curr = &sma->sem_base[semnum];
1286 1292
1287 ipc_assert_locked_object(&sma->sem_perm);1293 ipc_assert_locked_object(&sma->sem_perm);
@@ -1336,12 +1342,14 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, · 48 unmodified lines
1336 int i;1342 int i;
1337 1343
1338 sem_lock(sma, NULL, -1);1344 sem_lock(sma, NULL, -1);
1345 if (sma->sem_perm.deleted) {
1346 err = -EIDRM;
1347 goto out_unlock;
1348 }
1339 if(nsems > SEMMSL_FAST) {1349 if(nsems > SEMMSL_FAST) {
1340 if (!ipc_rcu_getref(sma)) {1350 if (!ipc_rcu_getref(sma)) {
1341 sem_unlock(sma, -1);
1342 rcu_read_unlock();
1343 err = -EIDRM;1351 err = -EIDRM;
1344 goto out_free;1352 goto out_unlock;
1345 }1353 }
1346 sem_unlock(sma, -1);1354 sem_unlock(sma, -1);
1347 rcu_read_unlock();1355 rcu_read_unlock();
@@ -1354,10 +1362,8 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, · 6 unmodified lines
1354 rcu_read_lock();1362 rcu_read_lock();
1355 sem_lock_and_putref(sma);1363 sem_lock_and_putref(sma);
1356 if (sma->sem_perm.deleted) {1364 if (sma->sem_perm.deleted) {
1357 sem_unlock(sma, -1);
1358 rcu_read_unlock();
1359 err = -EIDRM;1365 err = -EIDRM;
1360 goto out_free;1366 goto out_unlock;
1361 }1367 }
1362 }1368 }
1363 for (i = 0; i < sma->sem_nsems; i++)1369 for (i = 0; i < sma->sem_nsems; i++)
@@ -1375,8 +1381,8 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, · 11 unmodified lines
1375 struct sem_undo *un;1381 struct sem_undo *un;
1376 1382
1377 if (!ipc_rcu_getref(sma)) {1383 if (!ipc_rcu_getref(sma)) {
1378 rcu_read_unlock();1384 err = -EIDRM;
1379 return -EIDRM;1385 goto out_rcu_wakeup;
1380 }1386 }
1381 rcu_read_unlock();1387 rcu_read_unlock();
1382 1388
@@ -1404,10 +1410,8 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, · 21 unmodified lines
1404 rcu_read_lock();1410 rcu_read_lock();
1405 sem_lock_and_putref(sma);1411 sem_lock_and_putref(sma);
1406 if (sma->sem_perm.deleted) {1412 if (sma->sem_perm.deleted) {
1407 sem_unlock(sma, -1);
1408 rcu_read_unlock();
1409 err = -EIDRM;1413 err = -EIDRM;
1410 goto out_free;1414 goto out_unlock;
1411 }1415 }
1412 1416
1413 for (i = 0; i < nsems; i++)1417 for (i = 0; i < nsems; i++)
@@ -1431,6 +1435,10 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, · 17 unmodified lines
1431 goto out_rcu_wakeup;1435 goto out_rcu_wakeup;
1432 1436
1433 sem_lock(sma, NULL, -1);1437 sem_lock(sma, NULL, -1);
1438 if (sma->sem_perm.deleted) {
1439 err = -EIDRM;
1440 goto out_unlock;
1441 }
1434 curr = &sma->sem_base[semnum];1442 curr = &sma->sem_base[semnum];
1435 1443
1436 switch (cmd) {1444 switch (cmd) {
@@ -1836,6 +1844,10 @@ SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, · 399 unmodified lines
1836 if (error)1844 if (error)
1837 goto out_rcu_wakeup;1845 goto out_rcu_wakeup;
1838 1846
1847 error = -EIDRM;
1848 locknum = sem_lock(sma, sops, nsops);
1849 if (sma->sem_perm.deleted)
1850 goto out_unlock_free;
1839 /*1851 /*
1840 * semid identifiers are not unique - find_alloc_undo may have1852 * semid identifiers are not unique - find_alloc_undo may have
1841 * allocated an undo structure, it was invalidated by an RMID1853 * allocated an undo structure, it was invalidated by an RMID
@@ -1843,8 +1855,6 @@ SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, · 1 unmodified line
1843 * This case can be detected checking un->semid. The existence of1855 * This case can be detected checking un->semid. The existence of
1844 * "un" itself is guaranteed by rcu.1856 * "un" itself is guaranteed by rcu.
1845 */1857 */
1846 error = -EIDRM;
1847 locknum = sem_lock(sma, sops, nsops);
1848 if (un && un->semid == -1)1858 if (un && un->semid == -1)
1849 goto out_unlock_free;1859 goto out_unlock_free;
1850 1860
@@ -2057,6 +2067,12 @@ void exit_sem(struct task_struct *tsk) · 206 unmodified lines
2057 }2067 }
2058 2068
2059 sem_lock(sma, NULL, -1);2069 sem_lock(sma, NULL, -1);
2070 /* exit_sem raced with IPC_RMID, nothing to do */
2071 if (sma->sem_perm.deleted) {
2072 sem_unlock(sma, -1);
2073 rcu_read_unlock();
2074 continue;
2075 }
2060 un = __lookup_undo(ulp, semid);2076 un = __lookup_undo(ulp, semid);
2061 if (un == NULL) {2077 if (un == NULL) {
2062 /* exit_sem raced with IPC_RMID+semget() that created2078 /* exit_sem raced with IPC_RMID+semget() that created
ipc/util.c+21−6
@@ -17,12 +17,27 @@ · 16 unmodified lines
17 * Pavel Emelianov <xemul@openvz.org>17 * Pavel Emelianov <xemul@openvz.org>
18 *18 *
19 * General sysv ipc locking scheme:19 * General sysv ipc locking scheme:
20 * when doing ipc id lookups, take the ids->rwsem20 * rcu_read_lock()
21 * rcu_read_lock()21 * obtain the ipc object (kern_ipc_perm) by looking up the id in an idr
22 * obtain the ipc object (kern_ipc_perm)22 * tree.
23 * perform security, capabilities, auditing and permission checks, etc.23 * - perform initial checks (capabilities, auditing and permission,
24 * acquire the ipc lock (kern_ipc_perm.lock) throught ipc_lock_object()24 * etc).
25 * perform data updates (ie: SET, RMID, LOCK/UNLOCK commands)25 * - perform read-only operations, such as STAT, INFO commands.
26 * acquire the ipc lock (kern_ipc_perm.lock) through
27 * ipc_lock_object()
28 * - perform data updates, such as SET, RMID commands and
29 * mechanism-specific operations (semop/semtimedop,
30 * msgsnd/msgrcv, shmat/shmdt).
31 * drop the ipc lock, through ipc_unlock_object().
32 * rcu_read_unlock()
33 *
34 * The ids->rwsem must be taken when:
35 * - creating, removing and iterating the existing entries in ipc
36 * identifier sets.
37 * - iterating through files under /proc/sysvipc/
38 *
39 * Note that sems have a special fast path that avoids kern_ipc_perm.lock -
40 * see sem_lock().
26 */41 */
27 42
28#include <linux/mm.h>43#include <linux/mm.h>
kernel/cgroup.c+6−8
@@ -2039,7 +2039,7 @@ static int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk, · 2038 unmodified lines
2039 2039
2040 /* @tsk either already exited or can't exit until the end */2040 /* @tsk either already exited or can't exit until the end */
2041 if (tsk->flags & PF_EXITING)2041 if (tsk->flags & PF_EXITING)
2042 continue;2042 goto next;
2043 2043
2044 /* as per above, nr_threads may decrease, but not increase. */2044 /* as per above, nr_threads may decrease, but not increase. */
2045 BUG_ON(i >= group_size);2045 BUG_ON(i >= group_size);
@@ -2047,7 +2047,7 @@ static int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk, · 1 unmodified line
2047 ent.cgrp = task_cgroup_from_root(tsk, root);2047 ent.cgrp = task_cgroup_from_root(tsk, root);
2048 /* nothing to do if this task is already in the cgroup */2048 /* nothing to do if this task is already in the cgroup */
2049 if (ent.cgrp == cgrp)2049 if (ent.cgrp == cgrp)
2050 continue;2050 goto next;
2051 /*2051 /*
2052 * saying GFP_ATOMIC has no effect here because we did prealloc2052 * saying GFP_ATOMIC has no effect here because we did prealloc
2053 * earlier, but it's good form to communicate our expectations.2053 * earlier, but it's good form to communicate our expectations.
@@ -2055,7 +2055,7 @@ static int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk, · 1 unmodified line
2055 retval = flex_array_put(group, i, &ent, GFP_ATOMIC);2055 retval = flex_array_put(group, i, &ent, GFP_ATOMIC);
2056 BUG_ON(retval != 0);2056 BUG_ON(retval != 0);
2057 i++;2057 i++;
2058 2058 next:
2059 if (!threadgroup)2059 if (!threadgroup)
2060 break;2060 break;
2061 } while_each_thread(leader, tsk);2061 } while_each_thread(leader, tsk);
@@ -3188,11 +3188,9 @@ css_next_descendant_post(struct cgroup_subsys_state *pos, · 1126 unmodified lines
3188 3188
3189 WARN_ON_ONCE(!rcu_read_lock_held());3189 WARN_ON_ONCE(!rcu_read_lock_held());
3190 3190
3191 /* if first iteration, visit the leftmost descendant */3191 /* if first iteration, visit leftmost descendant which may be @root */
3192 if (!pos) {3192 if (!pos)
3193 next = css_leftmost_descendant(root);3193 return css_leftmost_descendant(root);
3194 return next != root ? next : NULL;
3195 }
3196 3194
3197 /* if we visited @root, we're done */3195 /* if we visited @root, we're done */
3198 if (pos == root)3196 if (pos == root)
kernel/events/core.c+3−3
@@ -7234,15 +7234,15 @@ void perf_pmu_migrate_context(struct pmu *pmu, int src_cpu, int dst_cpu) · 7233 unmodified lines
7234 perf_remove_from_context(event);7234 perf_remove_from_context(event);
7235 unaccount_event_cpu(event, src_cpu);7235 unaccount_event_cpu(event, src_cpu);
7236 put_ctx(src_ctx);7236 put_ctx(src_ctx);
7237 list_add(&event->event_entry, &events);7237 list_add(&event->migrate_entry, &events);
7238 }7238 }
7239 mutex_unlock(&src_ctx->mutex);7239 mutex_unlock(&src_ctx->mutex);
7240 7240
7241 synchronize_rcu();7241 synchronize_rcu();
7242 7242
7243 mutex_lock(&dst_ctx->mutex);7243 mutex_lock(&dst_ctx->mutex);
7244 list_for_each_entry_safe(event, tmp, &events, event_entry) {7244 list_for_each_entry_safe(event, tmp, &events, migrate_entry) {
7245 list_del(&event->event_entry);7245 list_del(&event->migrate_entry);
7246 if (event->state >= PERF_EVENT_STATE_OFF)7246 if (event->state >= PERF_EVENT_STATE_OFF)
7247 event->state = PERF_EVENT_STATE_INACTIVE;7247 event->state = PERF_EVENT_STATE_INACTIVE;
7248 account_event_cpu(event, dst_cpu);7248 account_event_cpu(event, dst_cpu);
kernel/power/snapshot.c+4−1
@@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void) · 742 unmodified lines
743 struct memory_bitmap *bm1, *bm2;743 struct memory_bitmap *bm1, *bm2;
744 int error = 0;744 int error = 0;
745 745
746 BUG_ON(forbidden_pages_map || free_pages_map);746 if (forbidden_pages_map && free_pages_map)
747 return 0;
748 else
749 BUG_ON(forbidden_pages_map || free_pages_map);
747 750
748 bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);751 bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
749 if (!bm1)752 if (!bm1)
kernel/power/user.c+8−0
@@ -39,6 +39,7 @@ static struct snapshot_data { · 38 unmodified lines
39 char frozen;39 char frozen;
40 char ready;40 char ready;
41 char platform_support;41 char platform_support;
42 bool free_bitmaps;
42} snapshot_state;43} snapshot_state;
43 44
44atomic_t snapshot_device_available = ATOMIC_INIT(1);45atomic_t snapshot_device_available = ATOMIC_INIT(1);
@@ -82,6 +83,10 @@ static int snapshot_open(struct inode *inode, struct file *filp) · 37 unmodified lines
82 data->swap = -1;83 data->swap = -1;
83 data->mode = O_WRONLY;84 data->mode = O_WRONLY;
84 error = pm_notifier_call_chain(PM_RESTORE_PREPARE);85 error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
86 if (!error) {
87 error = create_basic_memory_bitmaps();
88 data->free_bitmaps = !error;
89 }
85 if (error)90 if (error)
86 pm_notifier_call_chain(PM_POST_RESTORE);91 pm_notifier_call_chain(PM_POST_RESTORE);
87 }92 }
@@ -111,6 +116,8 @@ static int snapshot_release(struct inode *inode, struct file *filp) · 23 unmodified lines
111 pm_restore_gfp_mask();116 pm_restore_gfp_mask();
112 free_basic_memory_bitmaps();117 free_basic_memory_bitmaps();
113 thaw_processes();118 thaw_processes();
119 } else if (data->free_bitmaps) {
120 free_basic_memory_bitmaps();
114 }121 }
115 pm_notifier_call_chain(data->mode == O_RDONLY ?122 pm_notifier_call_chain(data->mode == O_RDONLY ?
116 PM_POST_HIBERNATION : PM_POST_RESTORE);123 PM_POST_HIBERNATION : PM_POST_RESTORE);
@@ -231,6 +238,7 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, · 114 unmodified lines
231 break;238 break;
232 pm_restore_gfp_mask();239 pm_restore_gfp_mask();
233 free_basic_memory_bitmaps();240 free_basic_memory_bitmaps();
241 data->free_bitmaps = false;
234 thaw_processes();242 thaw_processes();
235 data->frozen = 0;243 data->frozen = 0;
236 break;244 break;
kernel/softirq.c+12−3
@@ -328,10 +328,19 @@ void irq_enter(void) · 327 unmodified lines
328 328
329static inline void invoke_softirq(void)329static inline void invoke_softirq(void)
330{330{
331 if (!force_irqthreads)331 if (!force_irqthreads) {
332 __do_softirq();332 /*
333 else333 * We can safely execute softirq on the current stack if
334 * it is the irq stack, because it should be near empty
335 * at this stage. But we have no way to know if the arch
336 * calls irq_exit() on the irq stack. So call softirq
337 * in its own stack to prevent from any overrun on top
338 * of a potentially deep task stack.
339 */
340 do_softirq();
341 } else {
334 wakeup_softirqd();342 wakeup_softirqd();
343 }
335}344}
336 345
337static inline void tick_irq_exit(void)346static inline void tick_irq_exit(void)
lib/kobject.c+1−1
@@ -592,7 +592,7 @@ static void kobject_release(struct kref *kref) · 591 unmodified lines
592{592{
593 struct kobject *kobj = container_of(kref, struct kobject, kref);593 struct kobject *kobj = container_of(kref, struct kobject, kref);
594#ifdef CONFIG_DEBUG_KOBJECT_RELEASE594#ifdef CONFIG_DEBUG_KOBJECT_RELEASE
595 pr_debug("kobject: '%s' (%p): %s, parent %p (delayed)\n",595 pr_info("kobject: '%s' (%p): %s, parent %p (delayed)\n",
596 kobject_name(kobj), kobj, __func__, kobj->parent);596 kobject_name(kobj), kobj, __func__, kobj->parent);
597 INIT_DELAYED_WORK(&kobj->release, kobject_delayed_cleanup);597 INIT_DELAYED_WORK(&kobj->release, kobject_delayed_cleanup);
598 schedule_delayed_work(&kobj->release, HZ);598 schedule_delayed_work(&kobj->release, HZ);
lib/percpu-refcount.c+3−0
@@ -53,6 +53,7 @@ int percpu_ref_init(struct percpu_ref *ref, percpu_ref_func_t *release) · 52 unmodified lines
53 ref->release = release;53 ref->release = release;
54 return 0;54 return 0;
55}55}
56EXPORT_SYMBOL_GPL(percpu_ref_init);
56 57
57/**58/**
58 * percpu_ref_cancel_init - cancel percpu_ref_init()59 * percpu_ref_cancel_init - cancel percpu_ref_init()
@@ -84,6 +85,7 @@ void percpu_ref_cancel_init(struct percpu_ref *ref) · 25 unmodified lines
84 free_percpu(ref->pcpu_count);85 free_percpu(ref->pcpu_count);
85 }86 }
86}87}
88EXPORT_SYMBOL_GPL(percpu_ref_cancel_init);
87 89
88static void percpu_ref_kill_rcu(struct rcu_head *rcu)90static void percpu_ref_kill_rcu(struct rcu_head *rcu)
89{91{
@@ -156,3 +158,4 @@ void percpu_ref_kill_and_confirm(struct percpu_ref *ref, · 66 unmodified lines
156 158
157 call_rcu_sched(&ref->rcu, percpu_ref_kill_rcu);159 call_rcu_sched(&ref->rcu, percpu_ref_kill_rcu);
158}160}
161EXPORT_SYMBOL_GPL(percpu_ref_kill_and_confirm);
mm/Kconfig+1−1
@@ -183,7 +183,7 @@ config MEMORY_HOTPLUG_SPARSE · 182 unmodified lines
183config MEMORY_HOTREMOVE183config MEMORY_HOTREMOVE
184 bool "Allow for memory hot remove"184 bool "Allow for memory hot remove"
185 select MEMORY_ISOLATION185 select MEMORY_ISOLATION
186 select HAVE_BOOTMEM_INFO_NODE if X86_64186 select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
187 depends on MEMORY_HOTPLUG && ARCH_ENABLE_MEMORY_HOTREMOVE187 depends on MEMORY_HOTPLUG && ARCH_ENABLE_MEMORY_HOTREMOVE
188 depends on MIGRATION188 depends on MIGRATION
189 189
mm/filemap.c+1−10
@@ -1616,7 +1616,6 @@ int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf) · 1615 unmodified lines
1616 struct inode *inode = mapping->host;1616 struct inode *inode = mapping->host;
1617 pgoff_t offset = vmf->pgoff;1617 pgoff_t offset = vmf->pgoff;
1618 struct page *page;1618 struct page *page;
1619 bool memcg_oom;
1620 pgoff_t size;1619 pgoff_t size;
1621 int ret = 0;1620 int ret = 0;
1622 1621
@@ -1625,11 +1624,7 @@ int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf) · 2 unmodified lines
1625 return VM_FAULT_SIGBUS;1624 return VM_FAULT_SIGBUS;
1626 1625
1627 /*1626 /*
1628 * Do we have something in the page cache already? Either1627 * Do we have something in the page cache already?
1629 * way, try readahead, but disable the memcg OOM killer for it
1630 * as readahead is optional and no errors are propagated up
1631 * the fault stack. The OOM killer is enabled while trying to
1632 * instantiate the faulting page individually below.
1633 */1628 */
1634 page = find_get_page(mapping, offset);1629 page = find_get_page(mapping, offset);
1635 if (likely(page) && !(vmf->flags & FAULT_FLAG_TRIED)) {1630 if (likely(page) && !(vmf->flags & FAULT_FLAG_TRIED)) {
@@ -1637,14 +1632,10 @@ int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf) · 1 unmodified line
1637 * We found the page, so try async readahead before1632 * We found the page, so try async readahead before
1638 * waiting for the lock.1633 * waiting for the lock.
1639 */1634 */
1640 memcg_oom = mem_cgroup_toggle_oom(false);
1641 do_async_mmap_readahead(vma, ra, file, page, offset);1635 do_async_mmap_readahead(vma, ra, file, page, offset);
1642 mem_cgroup_toggle_oom(memcg_oom);
1643 } else if (!page) {1636 } else if (!page) {
1644 /* No page in the page cache at all */1637 /* No page in the page cache at all */
1645 memcg_oom = mem_cgroup_toggle_oom(false);
1646 do_sync_mmap_readahead(vma, ra, file, offset);1638 do_sync_mmap_readahead(vma, ra, file, offset);
1647 mem_cgroup_toggle_oom(memcg_oom);
1648 count_vm_event(PGMAJFAULT);1639 count_vm_event(PGMAJFAULT);
1649 mem_cgroup_count_vm_event(vma->vm_mm, PGMAJFAULT);1640 mem_cgroup_count_vm_event(vma->vm_mm, PGMAJFAULT);
1650 ret = VM_FAULT_MAJOR;1641 ret = VM_FAULT_MAJOR;
mm/huge_memory.c+9−1
@@ -2697,6 +2697,7 @@ void __split_huge_page_pmd(struct vm_area_struct *vma, unsigned long address, · 2696 unmodified lines
2697 2697
2698 mmun_start = haddr;2698 mmun_start = haddr;
2699 mmun_end = haddr + HPAGE_PMD_SIZE;2699 mmun_end = haddr + HPAGE_PMD_SIZE;
2700again:
2700 mmu_notifier_invalidate_range_start(mm, mmun_start, mmun_end);2701 mmu_notifier_invalidate_range_start(mm, mmun_start, mmun_end);
2701 spin_lock(&mm->page_table_lock);2702 spin_lock(&mm->page_table_lock);
2702 if (unlikely(!pmd_trans_huge(*pmd))) {2703 if (unlikely(!pmd_trans_huge(*pmd))) {
@@ -2719,7 +2720,14 @@ void __split_huge_page_pmd(struct vm_area_struct *vma, unsigned long address, · 16 unmodified lines
2719 split_huge_page(page);2720 split_huge_page(page);
2720 2721
2721 put_page(page);2722 put_page(page);
2722 BUG_ON(pmd_trans_huge(*pmd));2723
2724 /*
2725 * We don't always have down_write of mmap_sem here: a racing
2726 * do_huge_pmd_wp_page() might have copied-on-write to another
2727 * huge page before our split_huge_page() got the anon_vma lock.
2728 */
2729 if (unlikely(pmd_trans_huge(*pmd)))
2730 goto again;
2723}2731}
2724 2732
2725void split_huge_page_pmd_mm(struct mm_struct *mm, unsigned long address,2733void split_huge_page_pmd_mm(struct mm_struct *mm, unsigned long address,
mm/hugetlb.c+16−1
@@ -653,6 +653,7 @@ static void free_huge_page(struct page *page) · 652 unmodified lines
653 BUG_ON(page_count(page));653 BUG_ON(page_count(page));
654 BUG_ON(page_mapcount(page));654 BUG_ON(page_mapcount(page));
655 restore_reserve = PagePrivate(page);655 restore_reserve = PagePrivate(page);
656 ClearPagePrivate(page);
656 657
657 spin_lock(&hugetlb_lock);658 spin_lock(&hugetlb_lock);
658 hugetlb_cgroup_uncharge_page(hstate_index(h),659 hugetlb_cgroup_uncharge_page(hstate_index(h),
@@ -695,8 +696,22 @@ static void prep_compound_gigantic_page(struct page *page, unsigned long order) · 36 unmodified lines
695 /* we rely on prep_new_huge_page to set the destructor */696 /* we rely on prep_new_huge_page to set the destructor */
696 set_compound_order(page, order);697 set_compound_order(page, order);
697 __SetPageHead(page);698 __SetPageHead(page);
699 __ClearPageReserved(page);
698 for (i = 1; i < nr_pages; i++, p = mem_map_next(p, page, i)) {700 for (i = 1; i < nr_pages; i++, p = mem_map_next(p, page, i)) {
699 __SetPageTail(p);701 __SetPageTail(p);
702 /*
703 * For gigantic hugepages allocated through bootmem at
704 * boot, it's safer to be consistent with the not-gigantic
705 * hugepages and clear the PG_reserved bit from all tail pages
706 * too. Otherwse drivers using get_user_pages() to access tail
707 * pages may get the reference counting wrong if they see
708 * PG_reserved set on a tail page (despite the head page not
709 * having PG_reserved set). Enforcing this consistency between
710 * head and tail pages allows drivers to optimize away a check
711 * on the head page when they need know if put_page() is needed
712 * after get_user_pages().
713 */
714 __ClearPageReserved(p);
700 set_page_count(p, 0);715 set_page_count(p, 0);
701 p->first_page = page;716 p->first_page = page;
702 }717 }
@@ -1329,9 +1344,9 @@ static void __init gather_bootmem_prealloc(void) · 626 unmodified lines
1329#else1344#else
1330 page = virt_to_page(m);1345 page = virt_to_page(m);
1331#endif1346#endif
1332 __ClearPageReserved(page);
1333 WARN_ON(page_count(page) != 1);1347 WARN_ON(page_count(page) != 1);
1334 prep_compound_huge_page(page, h->order);1348 prep_compound_huge_page(page, h->order);
1349 WARN_ON(PageReserved(page));
1335 prep_new_huge_page(h, page, page_to_nid(page));1350 prep_new_huge_page(h, page, page_to_nid(page));
1336 /*1351 /*
1337 * If we had gigantic hugepages allocated at boot time, we need1352 * If we had gigantic hugepages allocated at boot time, we need
mm/memcontrol.c+55−88
@@ -866,6 +866,7 @@ static unsigned long mem_cgroup_read_events(struct mem_cgroup *memcg, · 865 unmodified lines
866 unsigned long val = 0;866 unsigned long val = 0;
867 int cpu;867 int cpu;
868 868
869 get_online_cpus();
869 for_each_online_cpu(cpu)870 for_each_online_cpu(cpu)
870 val += per_cpu(memcg->stat->events[idx], cpu);871 val += per_cpu(memcg->stat->events[idx], cpu);
871#ifdef CONFIG_HOTPLUG_CPU872#ifdef CONFIG_HOTPLUG_CPU
@@ -873,6 +874,7 @@ static unsigned long mem_cgroup_read_events(struct mem_cgroup *memcg, · 1 unmodified line
873 val += memcg->nocpu_base.events[idx];874 val += memcg->nocpu_base.events[idx];
874 spin_unlock(&memcg->pcp_counter_lock);875 spin_unlock(&memcg->pcp_counter_lock);
875#endif876#endif
877 put_online_cpus();
876 return val;878 return val;
877}879}
878 880
@@ -2159,110 +2161,59 @@ static void memcg_oom_recover(struct mem_cgroup *memcg) · 1280 unmodified lines
2159 memcg_wakeup_oom(memcg);2161 memcg_wakeup_oom(memcg);
2160}2162}
2161 2163
2162/*
2163 * try to call OOM killer
2164 */
2165static void mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int order)2164static void mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int order)
2166{2165{
2167 bool locked;
2168 int wakeups;
2169
2170 if (!current->memcg_oom.may_oom)2166 if (!current->memcg_oom.may_oom)
2171 return;2167 return;
2172
2173 current->memcg_oom.in_memcg_oom = 1;
2174
2175 /*2168 /*
2176 * As with any blocking lock, a contender needs to start2169 * We are in the middle of the charge context here, so we
2177 * listening for wakeups before attempting the trylock,2170 * don't want to block when potentially sitting on a callstack
2178 * otherwise it can miss the wakeup from the unlock and sleep2171 * that holds all kinds of filesystem and mm locks.
2179 * indefinitely. This is just open-coded because our locking2172 *
2180 * is so particular to memcg hierarchies.2173 * Also, the caller may handle a failed allocation gracefully
2174 * (like optional page cache readahead) and so an OOM killer
2175 * invocation might not even be necessary.
2176 *
2177 * That's why we don't do anything here except remember the
2178 * OOM context and then deal with it at the end of the page
2179 * fault when the stack is unwound, the locks are released,
2180 * and when we know whether the fault was overall successful.
2181 */2181 */
2182 wakeups = atomic_read(&memcg->oom_wakeups);2182 css_get(&memcg->css);
2183 mem_cgroup_mark_under_oom(memcg);2183 current->memcg_oom.memcg = memcg;
2184 2184 current->memcg_oom.gfp_mask = mask;
2185 locked = mem_cgroup_oom_trylock(memcg);2185 current->memcg_oom.order = order;
2186
2187 if (locked)
2188 mem_cgroup_oom_notify(memcg);
2189
2190 if (locked && !memcg->oom_kill_disable) {
2191 mem_cgroup_unmark_under_oom(memcg);
2192 mem_cgroup_out_of_memory(memcg, mask, order);
2193 mem_cgroup_oom_unlock(memcg);
2194 /*
2195 * There is no guarantee that an OOM-lock contender
2196 * sees the wakeups triggered by the OOM kill
2197 * uncharges. Wake any sleepers explicitely.
2198 */
2199 memcg_oom_recover(memcg);
2200 } else {
2201 /*
2202 * A system call can just return -ENOMEM, but if this
2203 * is a page fault and somebody else is handling the
2204 * OOM already, we need to sleep on the OOM waitqueue
2205 * for this memcg until the situation is resolved.
2206 * Which can take some time because it might be
2207 * handled by a userspace task.
2208 *
2209 * However, this is the charge context, which means
2210 * that we may sit on a large call stack and hold
2211 * various filesystem locks, the mmap_sem etc. and we
2212 * don't want the OOM handler to deadlock on them
2213 * while we sit here and wait. Store the current OOM
2214 * context in the task_struct, then return -ENOMEM.
2215 * At the end of the page fault handler, with the
2216 * stack unwound, pagefault_out_of_memory() will check
2217 * back with us by calling
2218 * mem_cgroup_oom_synchronize(), possibly putting the
2219 * task to sleep.
2220 */
2221 current->memcg_oom.oom_locked = locked;
2222 current->memcg_oom.wakeups = wakeups;
2223 css_get(&memcg->css);
2224 current->memcg_oom.wait_on_memcg = memcg;
2225 }
2226}2186}
2227 2187
2228/**2188/**
2229 * mem_cgroup_oom_synchronize - complete memcg OOM handling2189 * mem_cgroup_oom_synchronize - complete memcg OOM handling
2190 * @handle: actually kill/wait or just clean up the OOM state
2230 *2191 *
2231 * This has to be called at the end of a page fault if the the memcg2192 * This has to be called at the end of a page fault if the memcg OOM
2232 * OOM handler was enabled and the fault is returning %VM_FAULT_OOM.2193 * handler was enabled.
2233 *2194 *
2234 * Memcg supports userspace OOM handling, so failed allocations must2195 * Memcg supports userspace OOM handling where failed allocations must
2235 * sleep on a waitqueue until the userspace task resolves the2196 * sleep on a waitqueue until the userspace task resolves the
2236 * situation. Sleeping directly in the charge context with all kinds2197 * situation. Sleeping directly in the charge context with all kinds
2237 * of locks held is not a good idea, instead we remember an OOM state2198 * of locks held is not a good idea, instead we remember an OOM state
2238 * in the task and mem_cgroup_oom_synchronize() has to be called at2199 * in the task and mem_cgroup_oom_synchronize() has to be called at
2239 * the end of the page fault to put the task to sleep and clean up the2200 * the end of the page fault to complete the OOM handling.
2240 * OOM state.
2241 *2201 *
2242 * Returns %true if an ongoing memcg OOM situation was detected and2202 * Returns %true if an ongoing memcg OOM situation was detected and
2243 * finalized, %false otherwise.2203 * completed, %false otherwise.
2244 */2204 */
2245bool mem_cgroup_oom_synchronize(void)2205bool mem_cgroup_oom_synchronize(bool handle)
2246{2206{
2207 struct mem_cgroup *memcg = current->memcg_oom.memcg;
2247 struct oom_wait_info owait;2208 struct oom_wait_info owait;
2248 struct mem_cgroup *memcg;2209 bool locked;
2249 2210
2250 /* OOM is global, do not handle */2211 /* OOM is global, do not handle */
2251 if (!current->memcg_oom.in_memcg_oom)
2252 return false;
2253
2254 /*
2255 * We invoked the OOM killer but there is a chance that a kill
2256 * did not free up any charges. Everybody else might already
2257 * be sleeping, so restart the fault and keep the rampage
2258 * going until some charges are released.
2259 */
2260 memcg = current->memcg_oom.wait_on_memcg;
2261 if (!memcg)2212 if (!memcg)
2262 goto out;2213 return false;
2263 2214
2264 if (test_thread_flag(TIF_MEMDIE) || fatal_signal_pending(current))2215 if (!handle)
2265 goto out_memcg;2216 goto cleanup;
2266 2217
2267 owait.memcg = memcg;2218 owait.memcg = memcg;
2268 owait.wait.flags = 0;2219 owait.wait.flags = 0;
@@ -2271,13 +2222,25 @@ bool mem_cgroup_oom_synchronize(void) · 2 unmodified lines
2271 INIT_LIST_HEAD(&owait.wait.task_list);2222 INIT_LIST_HEAD(&owait.wait.task_list);
2272 2223
2273 prepare_to_wait(&memcg_oom_waitq, &owait.wait, TASK_KILLABLE);2224 prepare_to_wait(&memcg_oom_waitq, &owait.wait, TASK_KILLABLE);
2274 /* Only sleep if we didn't miss any wakeups since OOM */2225 mem_cgroup_mark_under_oom(memcg);
2275 if (atomic_read(&memcg->oom_wakeups) == current->memcg_oom.wakeups)2226
2227 locked = mem_cgroup_oom_trylock(memcg);
2228
2229 if (locked)
2230 mem_cgroup_oom_notify(memcg);
2231
2232 if (locked && !memcg->oom_kill_disable) {
2233 mem_cgroup_unmark_under_oom(memcg);
2234 finish_wait(&memcg_oom_waitq, &owait.wait);
2235 mem_cgroup_out_of_memory(memcg, current->memcg_oom.gfp_mask,
2236 current->memcg_oom.order);
2237 } else {
2276 schedule();2238 schedule();
2277 finish_wait(&memcg_oom_waitq, &owait.wait);2239 mem_cgroup_unmark_under_oom(memcg);
2278out_memcg:2240 finish_wait(&memcg_oom_waitq, &owait.wait);
2279 mem_cgroup_unmark_under_oom(memcg);2241 }
2280 if (current->memcg_oom.oom_locked) {2242
2243 if (locked) {
2281 mem_cgroup_oom_unlock(memcg);2244 mem_cgroup_oom_unlock(memcg);
2282 /*2245 /*
2283 * There is no guarantee that an OOM-lock contender2246 * There is no guarantee that an OOM-lock contender
@@ -2286,10 +2249,9 @@ out_memcg: · 2 unmodified lines
2286 */2249 */
2287 memcg_oom_recover(memcg);2250 memcg_oom_recover(memcg);
2288 }2251 }
2252cleanup:
2253 current->memcg_oom.memcg = NULL;
2289 css_put(&memcg->css);2254 css_put(&memcg->css);
2290 current->memcg_oom.wait_on_memcg = NULL;
2291out:
2292 current->memcg_oom.in_memcg_oom = 0;
2293 return true;2255 return true;
2294}2256}
2295 2257
@@ -2703,6 +2665,9 @@ static int __mem_cgroup_try_charge(struct mm_struct *mm, · 407 unmodified lines
2703 || fatal_signal_pending(current)))2665 || fatal_signal_pending(current)))
2704 goto bypass;2666 goto bypass;
2705 2667
2668 if (unlikely(task_in_memcg_oom(current)))
2669 goto bypass;
2670
2706 /*2671 /*
2707 * We always charge the cgroup the mm_struct belongs to.2672 * We always charge the cgroup the mm_struct belongs to.
2708 * The mm_struct's mem_cgroup changes on task migration if the2673 * The mm_struct's mem_cgroup changes on task migration if the
@@ -2801,6 +2766,8 @@ done: · 92 unmodified lines
2801 return 0;2766 return 0;
2802nomem:2767nomem:
2803 *ptr = NULL;2768 *ptr = NULL;
2769 if (gfp_mask & __GFP_NOFAIL)
2770 return 0;
2804 return -ENOMEM;2771 return -ENOMEM;
2805bypass:2772bypass:
2806 *ptr = root_mem_cgroup;2773 *ptr = root_mem_cgroup;
mm/memory.c+14−6
@@ -837,6 +837,8 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm, · 836 unmodified lines
837 */837 */
838 make_migration_entry_read(&entry);838 make_migration_entry_read(&entry);
839 pte = swp_entry_to_pte(entry);839 pte = swp_entry_to_pte(entry);
840 if (pte_swp_soft_dirty(*src_pte))
841 pte = pte_swp_mksoft_dirty(pte);
840 set_pte_at(src_mm, addr, src_pte, pte);842 set_pte_at(src_mm, addr, src_pte, pte);
841 }843 }
842 }844 }
@@ -3863,15 +3865,21 @@ int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, · 3020 unmodified lines
3863 * space. Kernel faults are handled more gracefully.3865 * space. Kernel faults are handled more gracefully.
3864 */3866 */
3865 if (flags & FAULT_FLAG_USER)3867 if (flags & FAULT_FLAG_USER)
3866 mem_cgroup_enable_oom();3868 mem_cgroup_oom_enable();
3867 3869
3868 ret = __handle_mm_fault(mm, vma, address, flags);3870 ret = __handle_mm_fault(mm, vma, address, flags);
3869 3871
3870 if (flags & FAULT_FLAG_USER)3872 if (flags & FAULT_FLAG_USER) {
3871 mem_cgroup_disable_oom();3873 mem_cgroup_oom_disable();
3872 3874 /*
3873 if (WARN_ON(task_in_memcg_oom(current) && !(ret & VM_FAULT_OOM)))3875 * The task may have entered a memcg OOM situation but
3874 mem_cgroup_oom_synchronize();3876 * if the allocation error was handled gracefully (no
3877 * VM_FAULT_OOM), there is no need to kill anything.
3878 * Just clean up the OOM state peacefully.
3879 */
3880 if (task_in_memcg_oom(current) && !(ret & VM_FAULT_OOM))
3881 mem_cgroup_oom_synchronize(false);
3882 }
3875 3883
3876 return ret;3884 return ret;
3877}3885}
mm/migrate.c+2−0
@@ -161,6 +161,8 @@ static int remove_migration_pte(struct page *new, struct vm_area_struct *vma, · 160 unmodified lines
161 161
162 get_page(new);162 get_page(new);
163 pte = pte_mkold(mk_pte(new, vma->vm_page_prot));163 pte = pte_mkold(mk_pte(new, vma->vm_page_prot));
164 if (pte_swp_soft_dirty(*ptep))
165 pte = pte_mksoft_dirty(pte);
164 if (is_write_migration_entry(entry))166 if (is_write_migration_entry(entry))
165 pte = pte_mkwrite(pte);167 pte = pte_mkwrite(pte);
166#ifdef CONFIG_HUGETLB_PAGE168#ifdef CONFIG_HUGETLB_PAGE
mm/mprotect.c+5−2
@@ -94,13 +94,16 @@ static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd, · 93 unmodified lines
94 swp_entry_t entry = pte_to_swp_entry(oldpte);94 swp_entry_t entry = pte_to_swp_entry(oldpte);
95 95
96 if (is_write_migration_entry(entry)) {96 if (is_write_migration_entry(entry)) {
97 pte_t newpte;
97 /*98 /*
98 * A protection check is difficult so99 * A protection check is difficult so
99 * just be safe and disable write100 * just be safe and disable write
100 */101 */
101 make_migration_entry_read(&entry);102 make_migration_entry_read(&entry);
102 set_pte_at(mm, addr, pte,103 newpte = swp_entry_to_pte(entry);
103 swp_entry_to_pte(entry));104 if (pte_swp_soft_dirty(oldpte))
105 newpte = pte_swp_mksoft_dirty(newpte);
106 set_pte_at(mm, addr, pte, newpte);
104 }107 }
105 pages++;108 pages++;
106 }109 }
mm/mremap.c+1−4
@@ -25,7 +25,6 @@ · 24 unmodified lines
25#include <asm/uaccess.h>25#include <asm/uaccess.h>
26#include <asm/cacheflush.h>26#include <asm/cacheflush.h>
27#include <asm/tlbflush.h>27#include <asm/tlbflush.h>
28#include <asm/pgalloc.h>
29 28
30#include "internal.h"29#include "internal.h"
31 30
@@ -63,10 +62,8 @@ static pmd_t *alloc_new_pmd(struct mm_struct *mm, struct vm_area_struct *vma, · 31 unmodified lines
63 return NULL;62 return NULL;
64 63
65 pmd = pmd_alloc(mm, pud, addr);64 pmd = pmd_alloc(mm, pud, addr);
66 if (!pmd) {65 if (!pmd)
67 pud_free(mm, pud);
68 return NULL;66 return NULL;
69 }
70 67
71 VM_BUG_ON(pmd_trans_huge(*pmd));68 VM_BUG_ON(pmd_trans_huge(*pmd));
72 69
mm/oom_kill.c+1−1
@@ -680,7 +680,7 @@ void pagefault_out_of_memory(void) · 679 unmodified lines
680{680{
681 struct zonelist *zonelist;681 struct zonelist *zonelist;
682 682
683 if (mem_cgroup_oom_synchronize())683 if (mem_cgroup_oom_synchronize(true))
684 return;684 return;
685 685
686 zonelist = node_zonelist(first_online_node, GFP_KERNEL);686 zonelist = node_zonelist(first_online_node, GFP_KERNEL);
mm/page-writeback.c+5−5
@@ -1210,11 +1210,11 @@ static unsigned long dirty_poll_interval(unsigned long dirty, · 1209 unmodified lines
1210 return 1;1210 return 1;
1211}1211}
1212 1212
1213static long bdi_max_pause(struct backing_dev_info *bdi,1213static unsigned long bdi_max_pause(struct backing_dev_info *bdi,
1214 unsigned long bdi_dirty)1214 unsigned long bdi_dirty)
1215{1215{
1216 long bw = bdi->avg_write_bandwidth;1216 unsigned long bw = bdi->avg_write_bandwidth;
1217 long t;1217 unsigned long t;
1218 1218
1219 /*1219 /*
1220 * Limit pause time for small memory systems. If sleeping for too long1220 * Limit pause time for small memory systems. If sleeping for too long
@@ -1226,7 +1226,7 @@ static long bdi_max_pause(struct backing_dev_info *bdi, · 5 unmodified lines
1226 t = bdi_dirty / (1 + bw / roundup_pow_of_two(1 + HZ / 8));1226 t = bdi_dirty / (1 + bw / roundup_pow_of_two(1 + HZ / 8));
1227 t++;1227 t++;
1228 1228
1229 return min_t(long, t, MAX_PAUSE);1229 return min_t(unsigned long, t, MAX_PAUSE);
1230}1230}
1231 1231
1232static long bdi_min_pause(struct backing_dev_info *bdi,1232static long bdi_min_pause(struct backing_dev_info *bdi,
mm/slab_common.c+2−0
@@ -56,6 +56,7 @@ static int kmem_cache_sanity_check(struct mem_cgroup *memcg, const char *name, · 55 unmodified lines
56 continue;56 continue;
57 }57 }
58 58
59#if !defined(CONFIG_SLUB) || !defined(CONFIG_SLUB_DEBUG_ON)
59 /*60 /*
60 * For simplicity, we won't check this in the list of memcg61 * For simplicity, we won't check this in the list of memcg
61 * caches. We have control over memcg naming, and if there62 * caches. We have control over memcg naming, and if there
@@ -69,6 +70,7 @@ static int kmem_cache_sanity_check(struct mem_cgroup *memcg, const char *name, · 7 unmodified lines
69 s = NULL;70 s = NULL;
70 return -EINVAL;71 return -EINVAL;
71 }72 }
73#endif
72 }74 }
73 75
74 WARN_ON(strchr(name, ' ')); /* It confuses parsers */76 WARN_ON(strchr(name, ' ')); /* It confuses parsers */
mm/swapfile.c+3−1
@@ -1824,6 +1824,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) · 1823 unmodified lines
1824 struct filename *pathname;1824 struct filename *pathname;
1825 int i, type, prev;1825 int i, type, prev;
1826 int err;1826 int err;
1827 unsigned int old_block_size;
1827 1828
1828 if (!capable(CAP_SYS_ADMIN))1829 if (!capable(CAP_SYS_ADMIN))
1829 return -EPERM;1830 return -EPERM;
@@ -1914,6 +1915,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) · 84 unmodified lines
1914 }1915 }
1915 1916
1916 swap_file = p->swap_file;1917 swap_file = p->swap_file;
1918 old_block_size = p->old_block_size;
1917 p->swap_file = NULL;1919 p->swap_file = NULL;
1918 p->max = 0;1920 p->max = 0;
1919 swap_map = p->swap_map;1921 swap_map = p->swap_map;
@@ -1938,7 +1940,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) · 18 unmodified lines
1938 inode = mapping->host;1940 inode = mapping->host;
1939 if (S_ISBLK(inode->i_mode)) {1941 if (S_ISBLK(inode->i_mode)) {
1940 struct block_device *bdev = I_BDEV(inode);1942 struct block_device *bdev = I_BDEV(inode);
1941 set_blocksize(bdev, p->old_block_size);1943 set_blocksize(bdev, old_block_size);
1942 blkdev_put(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);1944 blkdev_put(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
1943 } else {1945 } else {
1944 mutex_lock(&inode->i_mutex);1946 mutex_lock(&inode->i_mutex);
mm/vmscan.c+1−0
@@ -211,6 +211,7 @@ void unregister_shrinker(struct shrinker *shrinker) · 210 unmodified lines
211 down_write(&shrinker_rwsem);211 down_write(&shrinker_rwsem);
212 list_del(&shrinker->list);212 list_del(&shrinker->list);
213 up_write(&shrinker_rwsem);213 up_write(&shrinker_rwsem);
214 kfree(shrinker->nr_deferred);
214}215}
215EXPORT_SYMBOL(unregister_shrinker);216EXPORT_SYMBOL(unregister_shrinker);
216 217
mm/zswap.c+4−0
@@ -804,6 +804,10 @@ static void zswap_frontswap_invalidate_area(unsigned type) · 803 unmodified lines
804 }804 }
805 tree->rbroot = RB_ROOT;805 tree->rbroot = RB_ROOT;
806 spin_unlock(&tree->lock);806 spin_unlock(&tree->lock);
807
808 zbud_destroy_pool(tree->pool);
809 kfree(tree);
810 zswap_trees[type] = NULL;
807}811}
808 812
809static struct zbud_ops zswap_zbud_ops = {813static struct zbud_ops zswap_zbud_ops = {
net/bridge/br_fdb.c+2−2
@@ -700,7 +700,7 @@ int br_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], · 699 unmodified lines
700 700
701 vid = nla_get_u16(tb[NDA_VLAN]);701 vid = nla_get_u16(tb[NDA_VLAN]);
702 702
703 if (vid >= VLAN_N_VID) {703 if (!vid || vid >= VLAN_VID_MASK) {
704 pr_info("bridge: RTM_NEWNEIGH with invalid vlan id %d\n",704 pr_info("bridge: RTM_NEWNEIGH with invalid vlan id %d\n",
705 vid);705 vid);
706 return -EINVAL;706 return -EINVAL;
@@ -794,7 +794,7 @@ int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[], · 87 unmodified lines
794 794
795 vid = nla_get_u16(tb[NDA_VLAN]);795 vid = nla_get_u16(tb[NDA_VLAN]);
796 796
797 if (vid >= VLAN_N_VID) {797 if (!vid || vid >= VLAN_VID_MASK) {
798 pr_info("bridge: RTM_NEWNEIGH with invalid vlan id %d\n",798 pr_info("bridge: RTM_NEWNEIGH with invalid vlan id %d\n",
799 vid);799 vid);
800 return -EINVAL;800 return -EINVAL;
net/bridge/br_mdb.c+1−1
@@ -453,7 +453,7 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry) · 452 unmodified lines
453 call_rcu_bh(&p->rcu, br_multicast_free_pg);453 call_rcu_bh(&p->rcu, br_multicast_free_pg);
454 err = 0;454 err = 0;
455 455
456 if (!mp->ports && !mp->mglist && mp->timer_armed &&456 if (!mp->ports && !mp->mglist &&
457 netif_running(br->dev))457 netif_running(br->dev))
458 mod_timer(&mp->timer, jiffies);458 mod_timer(&mp->timer, jiffies);
459 break;459 break;
net/bridge/br_multicast.c+26−12
@@ -272,7 +272,7 @@ static void br_multicast_del_pg(struct net_bridge *br, · 271 unmodified lines
272 del_timer(&p->timer);272 del_timer(&p->timer);
273 call_rcu_bh(&p->rcu, br_multicast_free_pg);273 call_rcu_bh(&p->rcu, br_multicast_free_pg);
274 274
275 if (!mp->ports && !mp->mglist && mp->timer_armed &&275 if (!mp->ports && !mp->mglist &&
276 netif_running(br->dev))276 netif_running(br->dev))
277 mod_timer(&mp->timer, jiffies);277 mod_timer(&mp->timer, jiffies);
278 278
@@ -620,7 +620,6 @@ rehash: · 341 unmodified lines
620 620
621 mp->br = br;621 mp->br = br;
622 mp->addr = *group;622 mp->addr = *group;
623
624 setup_timer(&mp->timer, br_multicast_group_expired,623 setup_timer(&mp->timer, br_multicast_group_expired,
625 (unsigned long)mp);624 (unsigned long)mp);
626 625
@@ -660,6 +659,7 @@ static int br_multicast_add_group(struct net_bridge *br, · 33 unmodified lines
660 struct net_bridge_mdb_entry *mp;659 struct net_bridge_mdb_entry *mp;
661 struct net_bridge_port_group *p;660 struct net_bridge_port_group *p;
662 struct net_bridge_port_group __rcu **pp;661 struct net_bridge_port_group __rcu **pp;
662 unsigned long now = jiffies;
663 int err;663 int err;
664 664
665 spin_lock(&br->multicast_lock);665 spin_lock(&br->multicast_lock);
@@ -674,6 +674,7 @@ static int br_multicast_add_group(struct net_bridge *br, · 8 unmodified lines
674 674
675 if (!port) {675 if (!port) {
676 mp->mglist = true;676 mp->mglist = true;
677 mod_timer(&mp->timer, now + br->multicast_membership_interval);
677 goto out;678 goto out;
678 }679 }
679 680
@@ -681,7 +682,7 @@ static int br_multicast_add_group(struct net_bridge *br, · 1 unmodified line
681 (p = mlock_dereference(*pp, br)) != NULL;682 (p = mlock_dereference(*pp, br)) != NULL;
682 pp = &p->next) {683 pp = &p->next) {
683 if (p->port == port)684 if (p->port == port)
684 goto out;685 goto found;
685 if ((unsigned long)p->port < (unsigned long)port)686 if ((unsigned long)p->port < (unsigned long)port)
686 break;687 break;
687 }688 }
@@ -692,6 +693,8 @@ static int br_multicast_add_group(struct net_bridge *br, · 4 unmodified lines
692 rcu_assign_pointer(*pp, p);693 rcu_assign_pointer(*pp, p);
693 br_mdb_notify(br->dev, port, group, RTM_NEWMDB);694 br_mdb_notify(br->dev, port, group, RTM_NEWMDB);
694 695
696found:
697 mod_timer(&p->timer, now + br->multicast_membership_interval);
695out:698out:
696 err = 0;699 err = 0;
697 700
@@ -1191,9 +1194,6 @@ static int br_ip4_multicast_query(struct net_bridge *br, · 493 unmodified lines
1191 if (!mp)1194 if (!mp)
1192 goto out;1195 goto out;
1193 1196
1194 mod_timer(&mp->timer, now + br->multicast_membership_interval);
1195 mp->timer_armed = true;
1196
1197 max_delay *= br->multicast_last_member_count;1197 max_delay *= br->multicast_last_member_count;
1198 1198
1199 if (mp->mglist &&1199 if (mp->mglist &&
@@ -1270,9 +1270,6 @@ static int br_ip6_multicast_query(struct net_bridge *br, · 70 unmodified lines
1270 if (!mp)1270 if (!mp)
1271 goto out;1271 goto out;
1272 1272
1273 mod_timer(&mp->timer, now + br->multicast_membership_interval);
1274 mp->timer_armed = true;
1275
1276 max_delay *= br->multicast_last_member_count;1273 max_delay *= br->multicast_last_member_count;
1277 if (mp->mglist &&1274 if (mp->mglist &&
1278 (timer_pending(&mp->timer) ?1275 (timer_pending(&mp->timer) ?
@@ -1358,7 +1355,7 @@ static void br_multicast_leave_group(struct net_bridge *br, · 79 unmodified lines
1358 call_rcu_bh(&p->rcu, br_multicast_free_pg);1355 call_rcu_bh(&p->rcu, br_multicast_free_pg);
1359 br_mdb_notify(br->dev, port, group, RTM_DELMDB);1356 br_mdb_notify(br->dev, port, group, RTM_DELMDB);
1360 1357
1361 if (!mp->ports && !mp->mglist && mp->timer_armed &&1358 if (!mp->ports && !mp->mglist &&
1362 netif_running(br->dev))1359 netif_running(br->dev))
1363 mod_timer(&mp->timer, jiffies);1360 mod_timer(&mp->timer, jiffies);
1364 }1361 }
@@ -1370,12 +1367,30 @@ static void br_multicast_leave_group(struct net_bridge *br, · 5 unmodified lines
1370 br->multicast_last_member_interval;1367 br->multicast_last_member_interval;
1371 1368
1372 if (!port) {1369 if (!port) {
1373 if (mp->mglist && mp->timer_armed &&1370 if (mp->mglist &&
1374 (timer_pending(&mp->timer) ?1371 (timer_pending(&mp->timer) ?
1375 time_after(mp->timer.expires, time) :1372 time_after(mp->timer.expires, time) :
1376 try_to_del_timer_sync(&mp->timer) >= 0)) {1373 try_to_del_timer_sync(&mp->timer) >= 0)) {
1377 mod_timer(&mp->timer, time);1374 mod_timer(&mp->timer, time);
1378 }1375 }
1376
1377 goto out;
1378 }
1379
1380 for (p = mlock_dereference(mp->ports, br);
1381 p != NULL;
1382 p = mlock_dereference(p->next, br)) {
1383 if (p->port != port)
1384 continue;
1385
1386 if (!hlist_unhashed(&p->mglist) &&
1387 (timer_pending(&p->timer) ?
1388 time_after(p->timer.expires, time) :
1389 try_to_del_timer_sync(&p->timer) >= 0)) {
1390 mod_timer(&p->timer, time);
1391 }
1392
1393 break;
1379 }1394 }
1380out:1395out:
1381 spin_unlock(&br->multicast_lock);1396 spin_unlock(&br->multicast_lock);
@@ -1798,7 +1813,6 @@ void br_multicast_stop(struct net_bridge *br) · 416 unmodified lines
1798 hlist_for_each_entry_safe(mp, n, &mdb->mhash[i],1813 hlist_for_each_entry_safe(mp, n, &mdb->mhash[i],
1799 hlist[ver]) {1814 hlist[ver]) {
1800 del_timer(&mp->timer);1815 del_timer(&mp->timer);
1801 mp->timer_armed = false;
1802 call_rcu_bh(&mp->rcu, br_multicast_free_group);1816 call_rcu_bh(&mp->rcu, br_multicast_free_group);
1803 }1817 }
1804 }1818 }
net/bridge/br_netlink.c+1−1
@@ -243,7 +243,7 @@ static int br_afspec(struct net_bridge *br, · 242 unmodified lines
243 243
244 vinfo = nla_data(tb[IFLA_BRIDGE_VLAN_INFO]);244 vinfo = nla_data(tb[IFLA_BRIDGE_VLAN_INFO]);
245 245
246 if (vinfo->vid >= VLAN_N_VID)246 if (!vinfo->vid || vinfo->vid >= VLAN_VID_MASK)
247 return -EINVAL;247 return -EINVAL;
248 248
249 switch (cmd) {249 switch (cmd) {
net/bridge/br_private.h+1−4
@@ -126,7 +126,6 @@ struct net_bridge_mdb_entry · 125 unmodified lines
126 struct timer_list timer;126 struct timer_list timer;
127 struct br_ip addr;127 struct br_ip addr;
128 bool mglist;128 bool mglist;
129 bool timer_armed;
130};129};
131 130
132struct net_bridge_mdb_htable131struct net_bridge_mdb_htable
@@ -624,9 +623,7 @@ static inline u16 br_get_pvid(const struct net_port_vlans *v) · 491 unmodified lines
624 * vid wasn't set623 * vid wasn't set
625 */624 */
626 smp_rmb();625 smp_rmb();
627 return (v->pvid & VLAN_TAG_PRESENT) ?626 return v->pvid ?: VLAN_N_VID;
628 (v->pvid & ~VLAN_TAG_PRESENT) :
629 VLAN_N_VID;
630}627}
631 628
632#else629#else
net/bridge/br_stp_if.c+1−1
@@ -134,7 +134,7 @@ static void br_stp_start(struct net_bridge *br) · 133 unmodified lines
134 134
135 if (br->bridge_forward_delay < BR_MIN_FORWARD_DELAY)135 if (br->bridge_forward_delay < BR_MIN_FORWARD_DELAY)
136 __br_set_forward_delay(br, BR_MIN_FORWARD_DELAY);136 __br_set_forward_delay(br, BR_MIN_FORWARD_DELAY);
137 else if (br->bridge_forward_delay < BR_MAX_FORWARD_DELAY)137 else if (br->bridge_forward_delay > BR_MAX_FORWARD_DELAY)
138 __br_set_forward_delay(br, BR_MAX_FORWARD_DELAY);138 __br_set_forward_delay(br, BR_MAX_FORWARD_DELAY);
139 139
140 if (r == 0) {140 if (r == 0) {
net/bridge/br_vlan.c+67−58
@@ -45,37 +45,34 @@ static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags) · 44 unmodified lines
45 return 0;45 return 0;
46 }46 }
47 47
48 if (vid) {48 if (v->port_idx) {
49 if (v->port_idx) {49 p = v->parent.port;
50 p = v->parent.port;50 br = p->br;
51 br = p->br;51 dev = p->dev;
52 dev = p->dev;52 } else {
53 } else {53 br = v->parent.br;
54 br = v->parent.br;54 dev = br->dev;
55 dev = br->dev;55 }
56 }56 ops = dev->netdev_ops;
57 ops = dev->netdev_ops;57
58 58 if (p && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) {
59 if (p && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) {59 /* Add VLAN to the device filter if it is supported.
60 /* Add VLAN to the device filter if it is supported.60 * Stricly speaking, this is not necessary now, since
61 * Stricly speaking, this is not necessary now, since61 * devices are made promiscuous by the bridge, but if
62 * devices are made promiscuous by the bridge, but if62 * that ever changes this code will allow tagged
63 * that ever changes this code will allow tagged63 * traffic to enter the bridge.
64 * traffic to enter the bridge.64 */
65 */65 err = ops->ndo_vlan_rx_add_vid(dev, htons(ETH_P_8021Q),
66 err = ops->ndo_vlan_rx_add_vid(dev, htons(ETH_P_8021Q),66 vid);
67 vid);67 if (err)
68 if (err)68 return err;
69 return err;69 }
70 }
71
72 err = br_fdb_insert(br, p, dev->dev_addr, vid);
73 if (err) {
74 br_err(br, "failed insert local address into bridge "
75 "forwarding table\n");
76 goto out_filt;
77 }
78 70
71 err = br_fdb_insert(br, p, dev->dev_addr, vid);
72 if (err) {
73 br_err(br, "failed insert local address into bridge "
74 "forwarding table\n");
75 goto out_filt;
79 }76 }
80 77
81 set_bit(vid, v->vlan_bitmap);78 set_bit(vid, v->vlan_bitmap);
@@ -98,7 +95,7 @@ static int __vlan_del(struct net_port_vlans *v, u16 vid) · 16 unmodified lines
98 __vlan_delete_pvid(v, vid);95 __vlan_delete_pvid(v, vid);
99 clear_bit(vid, v->untagged_bitmap);96 clear_bit(vid, v->untagged_bitmap);
100 97
101 if (v->port_idx && vid) {98 if (v->port_idx) {
102 struct net_device *dev = v->parent.port->dev;99 struct net_device *dev = v->parent.port->dev;
103 const struct net_device_ops *ops = dev->netdev_ops;100 const struct net_device_ops *ops = dev->netdev_ops;
104 101
@@ -192,6 +189,8 @@ out: · 87 unmodified lines
192bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,189bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
193 struct sk_buff *skb, u16 *vid)190 struct sk_buff *skb, u16 *vid)
194{191{
192 int err;
193
195 /* If VLAN filtering is disabled on the bridge, all packets are194 /* If VLAN filtering is disabled on the bridge, all packets are
196 * permitted.195 * permitted.
197 */196 */
@@ -204,20 +203,32 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v, · 6 unmodified lines
204 if (!v)203 if (!v)
205 return false;204 return false;
206 205
207 if (br_vlan_get_tag(skb, vid)) {206 err = br_vlan_get_tag(skb, vid);
207 if (!*vid) {
208 u16 pvid = br_get_pvid(v);208 u16 pvid = br_get_pvid(v);
209 209
210 /* Frame did not have a tag. See if pvid is set210 /* Frame had a tag with VID 0 or did not have a tag.
211 * on this port. That tells us which vlan untagged211 * See if pvid is set on this port. That tells us which
212 * traffic belongs to.212 * vlan untagged or priority-tagged traffic belongs to.
213 */213 */
214 if (pvid == VLAN_N_VID)214 if (pvid == VLAN_N_VID)
215 return false;215 return false;
216 216
217 /* PVID is set on this port. Any untagged ingress217 /* PVID is set on this port. Any untagged or priority-tagged
218 * frame is considered to belong to this vlan.218 * ingress frame is considered to belong to this vlan.
219 */219 */
220 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), pvid);220 *vid = pvid;
221 if (likely(err))
222 /* Untagged Frame. */
223 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), pvid);
224 else
225 /* Priority-tagged Frame.
226 * At this point, We know that skb->vlan_tci had
227 * VLAN_TAG_PRESENT bit and its VID field was 0x000.
228 * We update only VID field and preserve PCP field.
229 */
230 skb->vlan_tci |= pvid;
231
221 return true;232 return true;
222 }233 }
223 234
@@ -248,7 +259,9 @@ bool br_allowed_egress(struct net_bridge *br, · 24 unmodified lines
248 return false;259 return false;
249}260}
250 261
251/* Must be protected by RTNL */262/* Must be protected by RTNL.
263 * Must be called with vid in range from 1 to 4094 inclusive.
264 */
252int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags)265int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags)
253{266{
254 struct net_port_vlans *pv = NULL;267 struct net_port_vlans *pv = NULL;
@@ -278,7 +291,9 @@ out: · 23 unmodified lines
278 return err;291 return err;
279}292}
280 293
281/* Must be protected by RTNL */294/* Must be protected by RTNL.
295 * Must be called with vid in range from 1 to 4094 inclusive.
296 */
282int br_vlan_delete(struct net_bridge *br, u16 vid)297int br_vlan_delete(struct net_bridge *br, u16 vid)
283{298{
284 struct net_port_vlans *pv;299 struct net_port_vlans *pv;
@@ -289,14 +304,9 @@ int br_vlan_delete(struct net_bridge *br, u16 vid) · 4 unmodified lines
289 if (!pv)304 if (!pv)
290 return -EINVAL;305 return -EINVAL;
291 306
292 if (vid) {307 spin_lock_bh(&br->hash_lock);
293 /* If the VID !=0 remove fdb for this vid. VID 0 is special308 fdb_delete_by_addr(br, br->dev->dev_addr, vid);
294 * in that it's the default and is always there in the fdb.309 spin_unlock_bh(&br->hash_lock);
295 */
296 spin_lock_bh(&br->hash_lock);
297 fdb_delete_by_addr(br, br->dev->dev_addr, vid);
298 spin_unlock_bh(&br->hash_lock);
299 }
300 310
301 __vlan_del(pv, vid);311 __vlan_del(pv, vid);
302 return 0;312 return 0;
@@ -329,7 +339,9 @@ unlock: · 26 unmodified lines
329 return 0;339 return 0;
330}340}
331 341
332/* Must be protected by RTNL */342/* Must be protected by RTNL.
343 * Must be called with vid in range from 1 to 4094 inclusive.
344 */
333int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags)345int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags)
334{346{
335 struct net_port_vlans *pv = NULL;347 struct net_port_vlans *pv = NULL;
@@ -363,7 +375,9 @@ clean_up: · 27 unmodified lines
363 return err;375 return err;
364}376}
365 377
366/* Must be protected by RTNL */378/* Must be protected by RTNL.
379 * Must be called with vid in range from 1 to 4094 inclusive.
380 */
367int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)381int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
368{382{
369 struct net_port_vlans *pv;383 struct net_port_vlans *pv;
@@ -374,14 +388,9 @@ int nbp_vlan_delete(struct net_bridge_port *port, u16 vid) · 4 unmodified lines
374 if (!pv)388 if (!pv)
375 return -EINVAL;389 return -EINVAL;
376 390
377 if (vid) {391 spin_lock_bh(&port->br->hash_lock);
378 /* If the VID !=0 remove fdb for this vid. VID 0 is special392 fdb_delete_by_addr(port->br, port->dev->dev_addr, vid);
379 * in that it's the default and is always there in the fdb.393 spin_unlock_bh(&port->br->hash_lock);
380 */
381 spin_lock_bh(&port->br->hash_lock);
382 fdb_delete_by_addr(port->br, port->dev->dev_addr, vid);
383 spin_unlock_bh(&port->br->hash_lock);
384 }
385 394
386 return __vlan_del(pv, vid);395 return __vlan_del(pv, vid);
387}396}
net/core/secure_seq.c+2−0
@@ -11,6 +11,7 @@ · 10 unmodified lines
11 11
12#include <net/secure_seq.h>12#include <net/secure_seq.h>
13 13
14#if IS_ENABLED(CONFIG_IPV6) || IS_ENABLED(CONFIG_INET)
14#define NET_SECRET_SIZE (MD5_MESSAGE_BYTES / 4)15#define NET_SECRET_SIZE (MD5_MESSAGE_BYTES / 4)
15 16
16static u32 net_secret[NET_SECRET_SIZE] ____cacheline_aligned;17static u32 net_secret[NET_SECRET_SIZE] ____cacheline_aligned;
@@ -19,6 +20,7 @@ static __always_inline void net_secret_init(void) · 2 unmodified lines
19{20{
20 net_get_random_once(net_secret, sizeof(net_secret));21 net_get_random_once(net_secret, sizeof(net_secret));
21}22}
23#endif
22 24
23#ifdef CONFIG_INET25#ifdef CONFIG_INET
24static u32 seq_scale(u32 seq)26static u32 seq_scale(u32 seq)
net/ipv4/ip_output.c+9−4
@@ -772,15 +772,20 @@ static inline int ip_ufo_append_data(struct sock *sk, · 771 unmodified lines
772 /* initialize protocol header pointer */772 /* initialize protocol header pointer */
773 skb->transport_header = skb->network_header + fragheaderlen;773 skb->transport_header = skb->network_header + fragheaderlen;
774 774
775 skb->ip_summed = CHECKSUM_PARTIAL;
776 skb->csum = 0;775 skb->csum = 0;
777 776
778 /* specify the length of each IP datagram fragment */777
779 skb_shinfo(skb)->gso_size = maxfraglen - fragheaderlen;
780 skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
781 __skb_queue_tail(queue, skb);778 __skb_queue_tail(queue, skb);
779 } else if (skb_is_gso(skb)) {
780 goto append;
782 }781 }
783 782
783 skb->ip_summed = CHECKSUM_PARTIAL;
784 /* specify the length of each IP datagram fragment */
785 skb_shinfo(skb)->gso_size = maxfraglen - fragheaderlen;
786 skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
787
788append:
784 return skb_append_datato_frags(sk, skb, getfrag, from,789 return skb_append_datato_frags(sk, skb, getfrag, from,
785 (length - transhdrlen));790 (length - transhdrlen));
786}791}
net/ipv4/ip_vti.c+11−3
@@ -61,8 +61,17 @@ static int vti_rcv(struct sk_buff *skb) · 60 unmodified lines
61 iph->saddr, iph->daddr, 0);61 iph->saddr, iph->daddr, 0);
62 if (tunnel != NULL) {62 if (tunnel != NULL) {
63 struct pcpu_tstats *tstats;63 struct pcpu_tstats *tstats;
64 u32 oldmark = skb->mark;
65 int ret;
64 66
65 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))67
68 /* temporarily mark the skb with the tunnel o_key, to
69 * only match policies with this mark.
70 */
71 skb->mark = be32_to_cpu(tunnel->parms.o_key);
72 ret = xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb);
73 skb->mark = oldmark;
74 if (!ret)
66 return -1;75 return -1;
67 76
68 tstats = this_cpu_ptr(tunnel->dev->tstats);77 tstats = this_cpu_ptr(tunnel->dev->tstats);
@@ -71,7 +80,6 @@ static int vti_rcv(struct sk_buff *skb) · 2 unmodified lines
71 tstats->rx_bytes += skb->len;80 tstats->rx_bytes += skb->len;
72 u64_stats_update_end(&tstats->syncp);81 u64_stats_update_end(&tstats->syncp);
73 82
74 skb->mark = 0;
75 secpath_reset(skb);83 secpath_reset(skb);
76 skb->dev = tunnel->dev;84 skb->dev = tunnel->dev;
77 return 1;85 return 1;
@@ -103,7 +111,7 @@ static netdev_tx_t vti_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) · 25 unmodified lines
103 111
104 memset(&fl4, 0, sizeof(fl4));112 memset(&fl4, 0, sizeof(fl4));
105 flowi4_init_output(&fl4, tunnel->parms.link,113 flowi4_init_output(&fl4, tunnel->parms.link,
106 be32_to_cpu(tunnel->parms.i_key), RT_TOS(tos),114 be32_to_cpu(tunnel->parms.o_key), RT_TOS(tos),
107 RT_SCOPE_UNIVERSE,115 RT_SCOPE_UNIVERSE,
108 IPPROTO_IPIP, 0,116 IPPROTO_IPIP, 0,
109 dst, tiph->saddr, 0, 0);117 dst, tiph->saddr, 0, 0);
net/ipv4/tcp_input.c+3−1
@@ -3338,7 +3338,7 @@ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag) · 3337 unmodified lines
3338 tcp_init_cwnd_reduction(sk, true);3338 tcp_init_cwnd_reduction(sk, true);
3339 tcp_set_ca_state(sk, TCP_CA_CWR);3339 tcp_set_ca_state(sk, TCP_CA_CWR);
3340 tcp_end_cwnd_reduction(sk);3340 tcp_end_cwnd_reduction(sk);
3341 tcp_set_ca_state(sk, TCP_CA_Open);3341 tcp_try_keep_open(sk);
3342 NET_INC_STATS_BH(sock_net(sk),3342 NET_INC_STATS_BH(sock_net(sk),
3343 LINUX_MIB_TCPLOSSPROBERECOVERY);3343 LINUX_MIB_TCPLOSSPROBERECOVERY);
3344 }3344 }
@@ -5751,6 +5751,8 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, · 2406 unmodified lines
5751 } else5751 } else
5752 tcp_init_metrics(sk);5752 tcp_init_metrics(sk);
5753 5753
5754 tcp_update_pacing_rate(sk);
5755
5754 /* Prevent spurious tcp_cwnd_restart() on first data packet */5756 /* Prevent spurious tcp_cwnd_restart() on first data packet */
5755 tp->lsndtime = tcp_time_stamp;5757 tp->lsndtime = tcp_time_stamp;
5756 5758
net/ipv4/tcp_output.c+7−5
@@ -986,8 +986,10 @@ static void tcp_queue_skb(struct sock *sk, struct sk_buff *skb) · 985 unmodified lines
986static void tcp_set_skb_tso_segs(const struct sock *sk, struct sk_buff *skb,986static void tcp_set_skb_tso_segs(const struct sock *sk, struct sk_buff *skb,
987 unsigned int mss_now)987 unsigned int mss_now)
988{988{
989 if (skb->len <= mss_now || !sk_can_gso(sk) ||989 /* Make sure we own this skb before messing gso_size/gso_segs */
990 skb->ip_summed == CHECKSUM_NONE) {990 WARN_ON_ONCE(skb_cloned(skb));
991
992 if (skb->len <= mss_now || skb->ip_summed == CHECKSUM_NONE) {
991 /* Avoid the costly divide in the normal993 /* Avoid the costly divide in the normal
992 * non-TSO case.994 * non-TSO case.
993 */995 */
@@ -1067,9 +1069,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, · 73 unmodified lines
1067 if (nsize < 0)1069 if (nsize < 0)
1068 nsize = 0;1070 nsize = 0;
1069 1071
1070 if (skb_cloned(skb) &&1072 if (skb_unclone(skb, GFP_ATOMIC))
1071 skb_is_nonlinear(skb) &&
1072 pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
1073 return -ENOMEM;1073 return -ENOMEM;
1074 1074
1075 /* Get a new skb... force flag on. */1075 /* Get a new skb... force flag on. */
@@ -2344,6 +2344,8 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb) · 1268 unmodified lines
2344 int oldpcount = tcp_skb_pcount(skb);2344 int oldpcount = tcp_skb_pcount(skb);
2345 2345
2346 if (unlikely(oldpcount > 1)) {2346 if (unlikely(oldpcount > 1)) {
2347 if (skb_unclone(skb, GFP_ATOMIC))
2348 return -ENOMEM;
2347 tcp_init_tso_segs(sk, skb, cur_mss);2349 tcp_init_tso_segs(sk, skb, cur_mss);
2348 tcp_adjust_pcount(sk, skb, oldpcount - tcp_skb_pcount(skb));2350 tcp_adjust_pcount(sk, skb, oldpcount - tcp_skb_pcount(skb));
2349 }2351 }
net/ipv4/xfrm4_policy.c+1−0
@@ -107,6 +107,7 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse) · 106 unmodified lines
107 107
108 memset(fl4, 0, sizeof(struct flowi4));108 memset(fl4, 0, sizeof(struct flowi4));
109 fl4->flowi4_mark = skb->mark;109 fl4->flowi4_mark = skb->mark;
110 fl4->flowi4_oif = skb_dst(skb)->dev->ifindex;
110 111
111 if (!ip_is_fragment(iph)) {112 if (!ip_is_fragment(iph)) {
112 switch (iph->protocol) {113 switch (iph->protocol) {
net/ipv6/ah6.c+1−2
@@ -618,8 +618,7 @@ static void ah6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, · 617 unmodified lines
618 struct ip_auth_hdr *ah = (struct ip_auth_hdr*)(skb->data+offset);618 struct ip_auth_hdr *ah = (struct ip_auth_hdr*)(skb->data+offset);
619 struct xfrm_state *x;619 struct xfrm_state *x;
620 620
621 if (type != ICMPV6_DEST_UNREACH &&621 if (type != ICMPV6_PKT_TOOBIG &&
622 type != ICMPV6_PKT_TOOBIG &&
623 type != NDISC_REDIRECT)622 type != NDISC_REDIRECT)
624 return;623 return;
625 624
net/ipv6/esp6.c+1−2
@@ -436,8 +436,7 @@ static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, · 435 unmodified lines
436 struct ip_esp_hdr *esph = (struct ip_esp_hdr *)(skb->data + offset);436 struct ip_esp_hdr *esph = (struct ip_esp_hdr *)(skb->data + offset);
437 struct xfrm_state *x;437 struct xfrm_state *x;
438 438
439 if (type != ICMPV6_DEST_UNREACH &&439 if (type != ICMPV6_PKT_TOOBIG &&
440 type != ICMPV6_PKT_TOOBIG &&
441 type != NDISC_REDIRECT)440 type != NDISC_REDIRECT)
442 return;441 return;
443 442
net/ipv6/ip6_gre.c+1−2
@@ -976,6 +976,7 @@ static void ip6gre_tnl_link_config(struct ip6_tnl *t, int set_mtu) · 975 unmodified lines
976 if (t->parms.o_flags&GRE_SEQ)976 if (t->parms.o_flags&GRE_SEQ)
977 addend += 4;977 addend += 4;
978 }978 }
979 t->hlen = addend;
979 980
980 if (p->flags & IP6_TNL_F_CAP_XMIT) {981 if (p->flags & IP6_TNL_F_CAP_XMIT) {
981 int strict = (ipv6_addr_type(&p->raddr) &982 int strict = (ipv6_addr_type(&p->raddr) &
@@ -1002,8 +1003,6 @@ static void ip6gre_tnl_link_config(struct ip6_tnl *t, int set_mtu) · 20 unmodified lines
1002 }1003 }
1003 ip6_rt_put(rt);1004 ip6_rt_put(rt);
1004 }1005 }
1005
1006 t->hlen = addend;
1007}1006}
1008 1007
1009static int ip6gre_tnl_change(struct ip6_tnl *t,1008static int ip6gre_tnl_change(struct ip6_tnl *t,
net/ipv6/ip6_output.c+16−13
@@ -105,7 +105,7 @@ static int ip6_finish_output2(struct sk_buff *skb) · 104 unmodified lines
105 }105 }
106 106
107 rcu_read_lock_bh();107 rcu_read_lock_bh();
108 nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr);108 nexthop = rt6_nexthop((struct rt6_info *)dst);
109 neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);109 neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
110 if (unlikely(!neigh))110 if (unlikely(!neigh))
111 neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);111 neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
@@ -874,7 +874,7 @@ static int ip6_dst_lookup_tail(struct sock *sk, · 762 unmodified lines
874 */874 */
875 rt = (struct rt6_info *) *dst;875 rt = (struct rt6_info *) *dst;
876 rcu_read_lock_bh();876 rcu_read_lock_bh();
877 n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt, &fl6->daddr));877 n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt));
878 err = n && !(n->nud_state & NUD_VALID) ? -EINVAL : 0;878 err = n && !(n->nud_state & NUD_VALID) ? -EINVAL : 0;
879 rcu_read_unlock_bh();879 rcu_read_unlock_bh();
880 880
@@ -1008,6 +1008,7 @@ static inline int ip6_ufo_append_data(struct sock *sk, · 127 unmodified lines
1008 1008
1009{1009{
1010 struct sk_buff *skb;1010 struct sk_buff *skb;
1011 struct frag_hdr fhdr;
1011 int err;1012 int err;
1012 1013
1013 /* There is support for UDP large send offload by network1014 /* There is support for UDP large send offload by network
@@ -1015,8 +1016,6 @@ static inline int ip6_ufo_append_data(struct sock *sk, · 1 unmodified line
1015 * udp datagram1016 * udp datagram
1016 */1017 */
1017 if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL) {1018 if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL) {
1018 struct frag_hdr fhdr;
1019
1020 skb = sock_alloc_send_skb(sk,1019 skb = sock_alloc_send_skb(sk,
1021 hh_len + fragheaderlen + transhdrlen + 20,1020 hh_len + fragheaderlen + transhdrlen + 20,
1022 (flags & MSG_DONTWAIT), &err);1021 (flags & MSG_DONTWAIT), &err);
@@ -1036,20 +1035,24 @@ static inline int ip6_ufo_append_data(struct sock *sk, · 13 unmodified lines
1036 skb->transport_header = skb->network_header + fragheaderlen;1035 skb->transport_header = skb->network_header + fragheaderlen;
1037 1036
1038 skb->protocol = htons(ETH_P_IPV6);1037 skb->protocol = htons(ETH_P_IPV6);
1039 skb->ip_summed = CHECKSUM_PARTIAL;
1040 skb->csum = 0;1038 skb->csum = 0;
1041 1039
1042 /* Specify the length of each IPv6 datagram fragment.
1043 * It has to be a multiple of 8.
1044 */
1045 skb_shinfo(skb)->gso_size = (mtu - fragheaderlen -
1046 sizeof(struct frag_hdr)) & ~7;
1047 skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
1048 ipv6_select_ident(&fhdr, rt);
1049 skb_shinfo(skb)->ip6_frag_id = fhdr.identification;
1050 __skb_queue_tail(&sk->sk_write_queue, skb);1040 __skb_queue_tail(&sk->sk_write_queue, skb);
1041 } else if (skb_is_gso(skb)) {
1042 goto append;
1051 }1043 }
1052 1044
1045 skb->ip_summed = CHECKSUM_PARTIAL;
1046 /* Specify the length of each IPv6 datagram fragment.
1047 * It has to be a multiple of 8.
1048 */
1049 skb_shinfo(skb)->gso_size = (mtu - fragheaderlen -
1050 sizeof(struct frag_hdr)) & ~7;
1051 skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
1052 ipv6_select_ident(&fhdr, rt);
1053 skb_shinfo(skb)->ip6_frag_id = fhdr.identification;
1054
1055append:
1053 return skb_append_datato_frags(sk, skb, getfrag, from,1056 return skb_append_datato_frags(sk, skb, getfrag, from,
1054 (length - transhdrlen));1057 (length - transhdrlen));
1055}1058}
net/ipv6/ipcomp6.c+1−2
@@ -64,8 +64,7 @@ static void ipcomp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, · 63 unmodified lines
64 (struct ip_comp_hdr *)(skb->data + offset);64 (struct ip_comp_hdr *)(skb->data + offset);
65 struct xfrm_state *x;65 struct xfrm_state *x;
66 66
67 if (type != ICMPV6_DEST_UNREACH &&67 if (type != ICMPV6_PKT_TOOBIG &&
68 type != ICMPV6_PKT_TOOBIG &&
69 type != NDISC_REDIRECT)68 type != NDISC_REDIRECT)
70 return;69 return;
71 70
net/ipv6/route.c+37−9
@@ -476,6 +476,24 @@ out: · 475 unmodified lines
476}476}
477 477
478#ifdef CONFIG_IPV6_ROUTER_PREF478#ifdef CONFIG_IPV6_ROUTER_PREF
479struct __rt6_probe_work {
480 struct work_struct work;
481 struct in6_addr target;
482 struct net_device *dev;
483};
484
485static void rt6_probe_deferred(struct work_struct *w)
486{
487 struct in6_addr mcaddr;
488 struct __rt6_probe_work *work =
489 container_of(w, struct __rt6_probe_work, work);
490
491 addrconf_addr_solict_mult(&work->target, &mcaddr);
492 ndisc_send_ns(work->dev, NULL, &work->target, &mcaddr, NULL);
493 dev_put(work->dev);
494 kfree(w);
495}
496
479static void rt6_probe(struct rt6_info *rt)497static void rt6_probe(struct rt6_info *rt)
480{498{
481 struct neighbour *neigh;499 struct neighbour *neigh;
@@ -499,17 +517,23 @@ static void rt6_probe(struct rt6_info *rt) · 17 unmodified lines
499 517
500 if (!neigh ||518 if (!neigh ||
501 time_after(jiffies, neigh->updated + rt->rt6i_idev->cnf.rtr_probe_interval)) {519 time_after(jiffies, neigh->updated + rt->rt6i_idev->cnf.rtr_probe_interval)) {
502 struct in6_addr mcaddr;520 struct __rt6_probe_work *work;
503 struct in6_addr *target;
504 521
505 if (neigh) {522 work = kmalloc(sizeof(*work), GFP_ATOMIC);
523
524 if (neigh && work)
506 neigh->updated = jiffies;525 neigh->updated = jiffies;
526
527 if (neigh)
507 write_unlock(&neigh->lock);528 write_unlock(&neigh->lock);
508 }
509 529
510 target = (struct in6_addr *)&rt->rt6i_gateway;530 if (work) {
511 addrconf_addr_solict_mult(target, &mcaddr);531 INIT_WORK(&work->work, rt6_probe_deferred);
512 ndisc_send_ns(rt->dst.dev, NULL, target, &mcaddr, NULL);532 work->target = rt->rt6i_gateway;
533 dev_hold(rt->dst.dev);
534 work->dev = rt->dst.dev;
535 schedule_work(&work->work);
536 }
513 } else {537 } else {
514out:538out:
515 write_unlock(&neigh->lock);539 write_unlock(&neigh->lock);
@@ -851,7 +875,6 @@ static struct rt6_info *rt6_alloc_cow(struct rt6_info *ort, · 335 unmodified lines
851 if (ort->rt6i_dst.plen != 128 &&875 if (ort->rt6i_dst.plen != 128 &&
852 ipv6_addr_equal(&ort->rt6i_dst.addr, daddr))876 ipv6_addr_equal(&ort->rt6i_dst.addr, daddr))
853 rt->rt6i_flags |= RTF_ANYCAST;877 rt->rt6i_flags |= RTF_ANYCAST;
854 rt->rt6i_gateway = *daddr;
855 }878 }
856 879
857 rt->rt6i_flags |= RTF_CACHE;880 rt->rt6i_flags |= RTF_CACHE;
@@ -1335,6 +1358,7 @@ struct dst_entry *icmp6_dst_alloc(struct net_device *dev, · 477 unmodified lines
1335 rt->dst.flags |= DST_HOST;1358 rt->dst.flags |= DST_HOST;
1336 rt->dst.output = ip6_output;1359 rt->dst.output = ip6_output;
1337 atomic_set(&rt->dst.__refcnt, 1);1360 atomic_set(&rt->dst.__refcnt, 1);
1361 rt->rt6i_gateway = fl6->daddr;
1338 rt->rt6i_dst.addr = fl6->daddr;1362 rt->rt6i_dst.addr = fl6->daddr;
1339 rt->rt6i_dst.plen = 128;1363 rt->rt6i_dst.plen = 128;
1340 rt->rt6i_idev = idev;1364 rt->rt6i_idev = idev;
@@ -1870,7 +1894,10 @@ static struct rt6_info *ip6_rt_copy(struct rt6_info *ort, · 529 unmodified lines
1870 in6_dev_hold(rt->rt6i_idev);1894 in6_dev_hold(rt->rt6i_idev);
1871 rt->dst.lastuse = jiffies;1895 rt->dst.lastuse = jiffies;
1872 1896
1873 rt->rt6i_gateway = ort->rt6i_gateway;1897 if (ort->rt6i_flags & RTF_GATEWAY)
1898 rt->rt6i_gateway = ort->rt6i_gateway;
1899 else
1900 rt->rt6i_gateway = *dest;
1874 rt->rt6i_flags = ort->rt6i_flags;1901 rt->rt6i_flags = ort->rt6i_flags;
1875 if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ==1902 if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ==
1876 (RTF_DEFAULT | RTF_ADDRCONF))1903 (RTF_DEFAULT | RTF_ADDRCONF))
@@ -2157,6 +2184,7 @@ struct rt6_info *addrconf_dst_alloc(struct inet6_dev *idev, · 280 unmodified lines
2157 else2184 else
2158 rt->rt6i_flags |= RTF_LOCAL;2185 rt->rt6i_flags |= RTF_LOCAL;
2159 2186
2187 rt->rt6i_gateway = *addr;
2160 rt->rt6i_dst.addr = *addr;2188 rt->rt6i_dst.addr = *addr;
2161 rt->rt6i_dst.plen = 128;2189 rt->rt6i_dst.plen = 128;
2162 rt->rt6i_table = fib6_get_table(net, RT6_TABLE_LOCAL);2190 rt->rt6i_table = fib6_get_table(net, RT6_TABLE_LOCAL);
net/ipv6/udp.c+2−3
@@ -1243,9 +1243,6 @@ do_udp_sendmsg: · 1242 unmodified lines
1243 if (tclass < 0)1243 if (tclass < 0)
1244 tclass = np->tclass;1244 tclass = np->tclass;
1245 1245
1246 if (dontfrag < 0)
1247 dontfrag = np->dontfrag;
1248
1249 if (msg->msg_flags&MSG_CONFIRM)1246 if (msg->msg_flags&MSG_CONFIRM)
1250 goto do_confirm;1247 goto do_confirm;
1251back_from_confirm:1248back_from_confirm:
@@ -1264,6 +1261,8 @@ back_from_confirm: · 12 unmodified lines
1264 up->pending = AF_INET6;1261 up->pending = AF_INET6;
1265 1262
1266do_append_data:1263do_append_data:
1264 if (dontfrag < 0)
1265 dontfrag = np->dontfrag;
1267 up->len += ulen;1266 up->len += ulen;
1268 getfrag = is_udplite ? udplite_getfrag : ip_generic_getfrag;1267 getfrag = is_udplite ? udplite_getfrag : ip_generic_getfrag;
1269 err = ip6_append_data(sk, getfrag, msg->msg_iov, ulen,1268 err = ip6_append_data(sk, getfrag, msg->msg_iov, ulen,
net/ipv6/xfrm6_policy.c+1−0
@@ -138,6 +138,7 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse) · 137 unmodified lines
138 138
139 memset(fl6, 0, sizeof(struct flowi6));139 memset(fl6, 0, sizeof(struct flowi6));
140 fl6->flowi6_mark = skb->mark;140 fl6->flowi6_mark = skb->mark;
141 fl6->flowi6_oif = skb_dst(skb)->dev->ifindex;
141 142
142 fl6->daddr = reverse ? hdr->saddr : hdr->daddr;143 fl6->daddr = reverse ? hdr->saddr : hdr->daddr;
143 fl6->saddr = reverse ? hdr->daddr : hdr->saddr;144 fl6->saddr = reverse ? hdr->daddr : hdr->saddr;
net/key/af_key.c+2−1
@@ -1098,7 +1098,8 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net, · 1097 unmodified lines
1098 1098
1099 x->id.proto = proto;1099 x->id.proto = proto;
1100 x->id.spi = sa->sadb_sa_spi;1100 x->id.spi = sa->sadb_sa_spi;
1101 x->props.replay_window = sa->sadb_sa_replay;1101 x->props.replay_window = min_t(unsigned int, sa->sadb_sa_replay,
1102 (sizeof(x->replay.bitmap) * 8));
1102 if (sa->sadb_sa_flags & SADB_SAFLAGS_NOECN)1103 if (sa->sadb_sa_flags & SADB_SAFLAGS_NOECN)
1103 x->props.flags |= XFRM_STATE_NOECN;1104 x->props.flags |= XFRM_STATE_NOECN;
1104 if (sa->sadb_sa_flags & SADB_SAFLAGS_DECAP_DSCP)1105 if (sa->sadb_sa_flags & SADB_SAFLAGS_DECAP_DSCP)
net/l2tp/l2tp_ppp.c+4−0
@@ -353,7 +353,9 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh · 352 unmodified lines
353 goto error_put_sess_tun;353 goto error_put_sess_tun;
354 }354 }
355 355
356 local_bh_disable();
356 l2tp_xmit_skb(session, skb, session->hdr_len);357 l2tp_xmit_skb(session, skb, session->hdr_len);
358 local_bh_enable();
357 359
358 sock_put(ps->tunnel_sock);360 sock_put(ps->tunnel_sock);
359 sock_put(sk);361 sock_put(sk);
@@ -422,7 +424,9 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb) · 62 unmodified lines
422 skb->data[0] = ppph[0];424 skb->data[0] = ppph[0];
423 skb->data[1] = ppph[1];425 skb->data[1] = ppph[1];
424 426
427 local_bh_disable();
425 l2tp_xmit_skb(session, skb, session->hdr_len);428 l2tp_xmit_skb(session, skb, session->hdr_len);
429 local_bh_enable();
426 430
427 sock_put(sk_tun);431 sock_put(sk_tun);
428 sock_put(sk);432 sock_put(sk);
net/mac80211/cfg.c+1−1
@@ -3564,7 +3564,7 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev, · 3563 unmodified lines
3564 return -EINVAL;3564 return -EINVAL;
3565 }3565 }
3566 band = chanctx_conf->def.chan->band;3566 band = chanctx_conf->def.chan->band;
3567 sta = sta_info_get(sdata, peer);3567 sta = sta_info_get_bss(sdata, peer);
3568 if (sta) {3568 if (sta) {
3569 qos = test_sta_flag(sta, WLAN_STA_WME);3569 qos = test_sta_flag(sta, WLAN_STA_WME);
3570 } else {3570 } else {
net/mac80211/ieee80211_i.h+3−0
@@ -893,6 +893,8 @@ struct tpt_led_trigger { · 892 unmodified lines
893 * that the scan completed.893 * that the scan completed.
894 * @SCAN_ABORTED: Set for our scan work function when the driver reported894 * @SCAN_ABORTED: Set for our scan work function when the driver reported
895 * a scan complete for an aborted scan.895 * a scan complete for an aborted scan.
896 * @SCAN_HW_CANCELLED: Set for our scan work function when the scan is being
897 * cancelled.
896 */898 */
897enum {899enum {
898 SCAN_SW_SCANNING,900 SCAN_SW_SCANNING,
@@ -900,6 +902,7 @@ enum { · 1 unmodified line
900 SCAN_ONCHANNEL_SCANNING,902 SCAN_ONCHANNEL_SCANNING,
901 SCAN_COMPLETED,903 SCAN_COMPLETED,
902 SCAN_ABORTED,904 SCAN_ABORTED,
905 SCAN_HW_CANCELLED,
903};906};
904 907
905/**908/**
net/mac80211/offchannel.c+2−0
@@ -394,6 +394,8 @@ void ieee80211_sw_roc_work(struct work_struct *work) · 393 unmodified lines
394 394
395 if (started)395 if (started)
396 ieee80211_start_next_roc(local);396 ieee80211_start_next_roc(local);
397 else if (list_empty(&local->roc_list))
398 ieee80211_run_deferred_scan(local);
397 }399 }
398 400
399 out_unlock:401 out_unlock:
net/mac80211/scan.c+19−0
@@ -238,6 +238,9 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local) · 237 unmodified lines
238 enum ieee80211_band band;238 enum ieee80211_band band;
239 int i, ielen, n_chans;239 int i, ielen, n_chans;
240 240
241 if (test_bit(SCAN_HW_CANCELLED, &local->scanning))
242 return false;
243
241 do {244 do {
242 if (local->hw_scan_band == IEEE80211_NUM_BANDS)245 if (local->hw_scan_band == IEEE80211_NUM_BANDS)
243 return false;246 return false;
@@ -939,7 +942,23 @@ void ieee80211_scan_cancel(struct ieee80211_local *local) · 695 unmodified lines
939 if (!local->scan_req)942 if (!local->scan_req)
940 goto out;943 goto out;
941 944
945 /*
946 * We have a scan running and the driver already reported completion,
947 * but the worker hasn't run yet or is stuck on the mutex - mark it as
948 * cancelled.
949 */
950 if (test_bit(SCAN_HW_SCANNING, &local->scanning) &&
951 test_bit(SCAN_COMPLETED, &local->scanning)) {
952 set_bit(SCAN_HW_CANCELLED, &local->scanning);
953 goto out;
954 }
955
942 if (test_bit(SCAN_HW_SCANNING, &local->scanning)) {956 if (test_bit(SCAN_HW_SCANNING, &local->scanning)) {
957 /*
958 * Make sure that __ieee80211_scan_completed doesn't trigger a
959 * scan on another band.
960 */
961 set_bit(SCAN_HW_CANCELLED, &local->scanning);
943 if (local->ops->cancel_hw_scan)962 if (local->ops->cancel_hw_scan)
944 drv_cancel_hw_scan(local,963 drv_cancel_hw_scan(local,
945 rcu_dereference_protected(local->scan_sdata,964 rcu_dereference_protected(local->scan_sdata,
net/mac80211/status.c+3−0
@@ -180,6 +180,9 @@ static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb) · 179 unmodified lines
180 struct ieee80211_local *local = sta->local;180 struct ieee80211_local *local = sta->local;
181 struct ieee80211_sub_if_data *sdata = sta->sdata;181 struct ieee80211_sub_if_data *sdata = sta->sdata;
182 182
183 if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)
184 sta->last_rx = jiffies;
185
183 if (ieee80211_is_data_qos(mgmt->frame_control)) {186 if (ieee80211_is_data_qos(mgmt->frame_control)) {
184 struct ieee80211_hdr *hdr = (void *) skb->data;187 struct ieee80211_hdr *hdr = (void *) skb->data;
185 u8 *qc = ieee80211_get_qos_ctl(hdr);188 u8 *qc = ieee80211_get_qos_ctl(hdr);
net/mac80211/tx.c+2−1
@@ -1120,7 +1120,8 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata, · 1119 unmodified lines
1120 tx->sta = rcu_dereference(sdata->u.vlan.sta);1120 tx->sta = rcu_dereference(sdata->u.vlan.sta);
1121 if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr)1121 if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr)
1122 return TX_DROP;1122 return TX_DROP;
1123 } else if (info->flags & IEEE80211_TX_CTL_INJECTED ||1123 } else if (info->flags & (IEEE80211_TX_CTL_INJECTED |
1124 IEEE80211_TX_INTFL_NL80211_FRAME_TX) ||
1124 tx->sdata->control_port_protocol == tx->skb->protocol) {1125 tx->sdata->control_port_protocol == tx->skb->protocol) {
1125 tx->sta = sta_info_get_bss(sdata, hdr->addr1);1126 tx->sta = sta_info_get_bss(sdata, hdr->addr1);
1126 }1127 }
net/mac80211/util.c+4−0
@@ -2236,6 +2236,10 @@ u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local, · 2235 unmodified lines
2236 }2236 }
2237 2237
2238 rate = cfg80211_calculate_bitrate(&ri);2238 rate = cfg80211_calculate_bitrate(&ri);
2239 if (WARN_ONCE(!rate,
2240 "Invalid bitrate: flags=0x%x, idx=%d, vht_nss=%d\n",
2241 status->flag, status->rate_idx, status->vht_nss))
2242 return 0;
2239 2243
2240 /* rewind from end of MPDU */2244 /* rewind from end of MPDU */
2241 if (status->flag & RX_FLAG_MACTIME_END)2245 if (status->flag & RX_FLAG_MACTIME_END)
net/netfilter/nf_conntrack_h323_main.c+2−2
@@ -778,8 +778,8 @@ static int callforward_do_filter(const union nf_inet_addr *src, · 777 unmodified lines
778 flowi6_to_flowi(&fl1), false)) {778 flowi6_to_flowi(&fl1), false)) {
779 if (!afinfo->route(&init_net, (struct dst_entry **)&rt2,779 if (!afinfo->route(&init_net, (struct dst_entry **)&rt2,
780 flowi6_to_flowi(&fl2), false)) {780 flowi6_to_flowi(&fl2), false)) {
781 if (!memcmp(&rt1->rt6i_gateway, &rt2->rt6i_gateway,781 if (ipv6_addr_equal(rt6_nexthop(rt1),
782 sizeof(rt1->rt6i_gateway)) &&782 rt6_nexthop(rt2)) &&
783 rt1->dst.dev == rt2->dst.dev)783 rt1->dst.dev == rt2->dst.dev)
784 ret = 1;784 ret = 1;
785 dst_release(&rt2->dst);785 dst_release(&rt2->dst);
net/sched/sch_netem.c+17−0
@@ -358,6 +358,21 @@ static psched_time_t packet_len_2_sched_time(unsigned int len, struct netem_sche · 357 unmodified lines
358 return PSCHED_NS2TICKS(ticks);358 return PSCHED_NS2TICKS(ticks);
359}359}
360 360
361static void tfifo_reset(struct Qdisc *sch)
362{
363 struct netem_sched_data *q = qdisc_priv(sch);
364 struct rb_node *p;
365
366 while ((p = rb_first(&q->t_root))) {
367 struct sk_buff *skb = netem_rb_to_skb(p);
368
369 rb_erase(p, &q->t_root);
370 skb->next = NULL;
371 skb->prev = NULL;
372 kfree_skb(skb);
373 }
374}
375
361static void tfifo_enqueue(struct sk_buff *nskb, struct Qdisc *sch)376static void tfifo_enqueue(struct sk_buff *nskb, struct Qdisc *sch)
362{377{
363 struct netem_sched_data *q = qdisc_priv(sch);378 struct netem_sched_data *q = qdisc_priv(sch);
@@ -520,6 +535,7 @@ static unsigned int netem_drop(struct Qdisc *sch) · 156 unmodified lines
520 skb->next = NULL;535 skb->next = NULL;
521 skb->prev = NULL;536 skb->prev = NULL;
522 len = qdisc_pkt_len(skb);537 len = qdisc_pkt_len(skb);
538 sch->qstats.backlog -= len;
523 kfree_skb(skb);539 kfree_skb(skb);
524 }540 }
525 }541 }
@@ -609,6 +625,7 @@ static void netem_reset(struct Qdisc *sch) · 83 unmodified lines
609 struct netem_sched_data *q = qdisc_priv(sch);625 struct netem_sched_data *q = qdisc_priv(sch);
610 626
611 qdisc_reset_queue(sch);627 qdisc_reset_queue(sch);
628 tfifo_reset(sch);
612 if (q->qdisc)629 if (q->qdisc)
613 qdisc_reset(q->qdisc);630 qdisc_reset(q->qdisc);
614 qdisc_watchdog_cancel(&q->watchdog);631 qdisc_watchdog_cancel(&q->watchdog);
net/sctp/output.c+2−1
@@ -536,7 +536,8 @@ int sctp_packet_transmit(struct sctp_packet *packet) · 535 unmodified lines
536 * by CRC32-C as described in <draft-ietf-tsvwg-sctpcsum-02.txt>.536 * by CRC32-C as described in <draft-ietf-tsvwg-sctpcsum-02.txt>.
537 */537 */
538 if (!sctp_checksum_disable) {538 if (!sctp_checksum_disable) {
539 if (!(dst->dev->features & NETIF_F_SCTP_CSUM)) {539 if (!(dst->dev->features & NETIF_F_SCTP_CSUM) ||
540 (dst_xfrm(dst) != NULL) || packet->ipfragok) {
540 __u32 crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len);541 __u32 crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len);
541 542
542 /* 3) Put the resultant value into the checksum field in the543 /* 3) Put the resultant value into the checksum field in the
net/unix/af_unix.c+10−0
@@ -1246,6 +1246,15 @@ static int unix_socketpair(struct socket *socka, struct socket *sockb) · 1245 unmodified lines
1246 return 0;1246 return 0;
1247}1247}
1248 1248
1249static void unix_sock_inherit_flags(const struct socket *old,
1250 struct socket *new)
1251{
1252 if (test_bit(SOCK_PASSCRED, &old->flags))
1253 set_bit(SOCK_PASSCRED, &new->flags);
1254 if (test_bit(SOCK_PASSSEC, &old->flags))
1255 set_bit(SOCK_PASSSEC, &new->flags);
1256}
1257
1249static int unix_accept(struct socket *sock, struct socket *newsock, int flags)1258static int unix_accept(struct socket *sock, struct socket *newsock, int flags)
1250{1259{
1251 struct sock *sk = sock->sk;1260 struct sock *sk = sock->sk;
@@ -1280,6 +1289,7 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags) · 28 unmodified lines
1280 /* attach accepted sock to socket */1289 /* attach accepted sock to socket */
1281 unix_state_lock(tsk);1290 unix_state_lock(tsk);
1282 newsock->state = SS_CONNECTED;1291 newsock->state = SS_CONNECTED;
1292 unix_sock_inherit_flags(sock, newsock);
1283 sock_graft(tsk, newsock);1293 sock_graft(tsk, newsock);
1284 unix_state_unlock(tsk);1294 unix_state_unlock(tsk);
1285 return 0;1295 return 0;
net/wireless/core.c+0−2
@@ -958,8 +958,6 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, · 957 unmodified lines
958 case NETDEV_PRE_UP:958 case NETDEV_PRE_UP:
959 if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))959 if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
960 return notifier_from_errno(-EOPNOTSUPP);960 return notifier_from_errno(-EOPNOTSUPP);
961 if (rfkill_blocked(rdev->rfkill))
962 return notifier_from_errno(-ERFKILL);
963 ret = cfg80211_can_add_interface(rdev, wdev->iftype);961 ret = cfg80211_can_add_interface(rdev, wdev->iftype);
964 if (ret)962 if (ret)
965 return notifier_from_errno(ret);963 return notifier_from_errno(ret);
net/wireless/core.h+3−0
@@ -402,6 +402,9 @@ static inline int · 401 unmodified lines
402cfg80211_can_add_interface(struct cfg80211_registered_device *rdev,402cfg80211_can_add_interface(struct cfg80211_registered_device *rdev,
403 enum nl80211_iftype iftype)403 enum nl80211_iftype iftype)
404{404{
405 if (rfkill_blocked(rdev->rfkill))
406 return -ERFKILL;
407
405 return cfg80211_can_change_interface(rdev, NULL, iftype);408 return cfg80211_can_change_interface(rdev, NULL, iftype);
406}409}
407 410
net/wireless/radiotap.c+6−1
@@ -97,6 +97,10 @@ int ieee80211_radiotap_iterator_init( · 96 unmodified lines
97 struct ieee80211_radiotap_header *radiotap_header,97 struct ieee80211_radiotap_header *radiotap_header,
98 int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns)98 int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns)
99{99{
100 /* check the radiotap header can actually be present */
101 if (max_length < sizeof(struct ieee80211_radiotap_header))
102 return -EINVAL;
103
100 /* Linux only supports version 0 radiotap format */104 /* Linux only supports version 0 radiotap format */
101 if (radiotap_header->it_version)105 if (radiotap_header->it_version)
102 return -EINVAL;106 return -EINVAL;
@@ -131,7 +135,8 @@ int ieee80211_radiotap_iterator_init( · 28 unmodified lines
131 */135 */
132 136
133 if ((unsigned long)iterator->_arg -137 if ((unsigned long)iterator->_arg -
134 (unsigned long)iterator->_rtheader >138 (unsigned long)iterator->_rtheader +
139 sizeof(uint32_t) >
135 (unsigned long)iterator->_max_length)140 (unsigned long)iterator->_max_length)
136 return -EINVAL;141 return -EINVAL;
137 }142 }
net/xfrm/xfrm_policy.c+21−7
@@ -334,7 +334,8 @@ static void xfrm_policy_kill(struct xfrm_policy *policy) · 333 unmodified lines
334 334
335 atomic_inc(&policy->genid);335 atomic_inc(&policy->genid);
336 336
337 del_timer(&policy->polq.hold_timer);337 if (del_timer(&policy->polq.hold_timer))
338 xfrm_pol_put(policy);
338 xfrm_queue_purge(&policy->polq.hold_queue);339 xfrm_queue_purge(&policy->polq.hold_queue);
339 340
340 if (del_timer(&policy->timer))341 if (del_timer(&policy->timer))
@@ -589,7 +590,8 @@ static void xfrm_policy_requeue(struct xfrm_policy *old, · 248 unmodified lines
589 590
590 spin_lock_bh(&pq->hold_queue.lock);591 spin_lock_bh(&pq->hold_queue.lock);
591 skb_queue_splice_init(&pq->hold_queue, &list);592 skb_queue_splice_init(&pq->hold_queue, &list);
592 del_timer(&pq->hold_timer);593 if (del_timer(&pq->hold_timer))
594 xfrm_pol_put(old);
593 spin_unlock_bh(&pq->hold_queue.lock);595 spin_unlock_bh(&pq->hold_queue.lock);
594 596
595 if (skb_queue_empty(&list))597 if (skb_queue_empty(&list))
@@ -600,7 +602,8 @@ static void xfrm_policy_requeue(struct xfrm_policy *old, · 4 unmodified lines
600 spin_lock_bh(&pq->hold_queue.lock);602 spin_lock_bh(&pq->hold_queue.lock);
601 skb_queue_splice(&list, &pq->hold_queue);603 skb_queue_splice(&list, &pq->hold_queue);
602 pq->timeout = XFRM_QUEUE_TMO_MIN;604 pq->timeout = XFRM_QUEUE_TMO_MIN;
603 mod_timer(&pq->hold_timer, jiffies);605 if (!mod_timer(&pq->hold_timer, jiffies))
606 xfrm_pol_hold(new);
604 spin_unlock_bh(&pq->hold_queue.lock);607 spin_unlock_bh(&pq->hold_queue.lock);
605}608}
606 609
@@ -1769,6 +1772,10 @@ static void xfrm_policy_queue_process(unsigned long arg) · 1162 unmodified lines
1769 1772
1770 spin_lock(&pq->hold_queue.lock);1773 spin_lock(&pq->hold_queue.lock);
1771 skb = skb_peek(&pq->hold_queue);1774 skb = skb_peek(&pq->hold_queue);
1775 if (!skb) {
1776 spin_unlock(&pq->hold_queue.lock);
1777 goto out;
1778 }
1772 dst = skb_dst(skb);1779 dst = skb_dst(skb);
1773 sk = skb->sk;1780 sk = skb->sk;
1774 xfrm_decode_session(skb, &fl, dst->ops->family);1781 xfrm_decode_session(skb, &fl, dst->ops->family);
@@ -1787,8 +1794,9 @@ static void xfrm_policy_queue_process(unsigned long arg) · 12 unmodified lines
1787 goto purge_queue;1794 goto purge_queue;
1788 1795
1789 pq->timeout = pq->timeout << 1;1796 pq->timeout = pq->timeout << 1;
1790 mod_timer(&pq->hold_timer, jiffies + pq->timeout);1797 if (!mod_timer(&pq->hold_timer, jiffies + pq->timeout))
1791 return;1798 xfrm_pol_hold(pol);
1799 goto out;
1792 }1800 }
1793 1801
1794 dst_release(dst);1802 dst_release(dst);
@@ -1819,11 +1827,14 @@ static void xfrm_policy_queue_process(unsigned long arg) · 24 unmodified lines
1819 err = dst_output(skb);1827 err = dst_output(skb);
1820 }1828 }
1821 1829
1830out:
1831 xfrm_pol_put(pol);
1822 return;1832 return;
1823 1833
1824purge_queue:1834purge_queue:
1825 pq->timeout = 0;1835 pq->timeout = 0;
1826 xfrm_queue_purge(&pq->hold_queue);1836 xfrm_queue_purge(&pq->hold_queue);
1837 xfrm_pol_put(pol);
1827}1838}
1828 1839
1829static int xdst_queue_output(struct sk_buff *skb)1840static int xdst_queue_output(struct sk_buff *skb)
@@ -1831,7 +1842,8 @@ static int xdst_queue_output(struct sk_buff *skb) · 1 unmodified line
1831 unsigned long sched_next;1842 unsigned long sched_next;
1832 struct dst_entry *dst = skb_dst(skb);1843 struct dst_entry *dst = skb_dst(skb);
1833 struct xfrm_dst *xdst = (struct xfrm_dst *) dst;1844 struct xfrm_dst *xdst = (struct xfrm_dst *) dst;
1834 struct xfrm_policy_queue *pq = &xdst->pols[0]->polq;1845 struct xfrm_policy *pol = xdst->pols[0];
1846 struct xfrm_policy_queue *pq = &pol->polq;
1835 1847
1836 if (pq->hold_queue.qlen > XFRM_MAX_QUEUE_LEN) {1848 if (pq->hold_queue.qlen > XFRM_MAX_QUEUE_LEN) {
1837 kfree_skb(skb);1849 kfree_skb(skb);
@@ -1850,10 +1862,12 @@ static int xdst_queue_output(struct sk_buff *skb) · 12 unmodified lines
1850 if (del_timer(&pq->hold_timer)) {1862 if (del_timer(&pq->hold_timer)) {
1851 if (time_before(pq->hold_timer.expires, sched_next))1863 if (time_before(pq->hold_timer.expires, sched_next))
1852 sched_next = pq->hold_timer.expires;1864 sched_next = pq->hold_timer.expires;
1865 xfrm_pol_put(pol);
1853 }1866 }
1854 1867
1855 __skb_queue_tail(&pq->hold_queue, skb);1868 __skb_queue_tail(&pq->hold_queue, skb);
1856 mod_timer(&pq->hold_timer, sched_next);1869 if (!mod_timer(&pq->hold_timer, sched_next))
1870 xfrm_pol_hold(pol);
1857 1871
1858 spin_unlock_bh(&pq->hold_queue.lock);1872 spin_unlock_bh(&pq->hold_queue.lock);
1859 1873
net/xfrm/xfrm_replay.c+28−26
@@ -61,9 +61,9 @@ static void xfrm_replay_notify(struct xfrm_state *x, int event) · 60 unmodified lines
61 61
62 switch (event) {62 switch (event) {
63 case XFRM_REPLAY_UPDATE:63 case XFRM_REPLAY_UPDATE:
64 if (x->replay_maxdiff &&64 if (!x->replay_maxdiff ||
65 (x->replay.seq - x->preplay.seq < x->replay_maxdiff) &&65 ((x->replay.seq - x->preplay.seq < x->replay_maxdiff) &&
66 (x->replay.oseq - x->preplay.oseq < x->replay_maxdiff)) {66 (x->replay.oseq - x->preplay.oseq < x->replay_maxdiff))) {
67 if (x->xflags & XFRM_TIME_DEFER)67 if (x->xflags & XFRM_TIME_DEFER)
68 event = XFRM_REPLAY_TIMEOUT;68 event = XFRM_REPLAY_TIMEOUT;
69 else69 else
@@ -129,8 +129,7 @@ static int xfrm_replay_check(struct xfrm_state *x, · 59 unmodified lines
129 return 0;129 return 0;
130 130
131 diff = x->replay.seq - seq;131 diff = x->replay.seq - seq;
132 if (diff >= min_t(unsigned int, x->props.replay_window,132 if (diff >= x->props.replay_window) {
133 sizeof(x->replay.bitmap) * 8)) {
134 x->stats.replay_window++;133 x->stats.replay_window++;
135 goto err;134 goto err;
136 }135 }
@@ -302,9 +301,10 @@ static void xfrm_replay_notify_bmp(struct xfrm_state *x, int event) · 165 unmodified lines
302 301
303 switch (event) {302 switch (event) {
304 case XFRM_REPLAY_UPDATE:303 case XFRM_REPLAY_UPDATE:
305 if (x->replay_maxdiff &&304 if (!x->replay_maxdiff ||
306 (replay_esn->seq - preplay_esn->seq < x->replay_maxdiff) &&305 ((replay_esn->seq - preplay_esn->seq < x->replay_maxdiff) &&
307 (replay_esn->oseq - preplay_esn->oseq < x->replay_maxdiff)) {306 (replay_esn->oseq - preplay_esn->oseq
307 < x->replay_maxdiff))) {
308 if (x->xflags & XFRM_TIME_DEFER)308 if (x->xflags & XFRM_TIME_DEFER)
309 event = XFRM_REPLAY_TIMEOUT;309 event = XFRM_REPLAY_TIMEOUT;
310 else310 else
@@ -353,28 +353,30 @@ static void xfrm_replay_notify_esn(struct xfrm_state *x, int event) · 42 unmodified lines
353 353
354 switch (event) {354 switch (event) {
355 case XFRM_REPLAY_UPDATE:355 case XFRM_REPLAY_UPDATE:
356 if (!x->replay_maxdiff)356 if (x->replay_maxdiff) {
357 break;357 if (replay_esn->seq_hi == preplay_esn->seq_hi)
358 358 seq_diff = replay_esn->seq - preplay_esn->seq;
359 if (replay_esn->seq_hi == preplay_esn->seq_hi)359 else
360 seq_diff = replay_esn->seq - preplay_esn->seq;360 seq_diff = ~preplay_esn->seq + replay_esn->seq
361 else361 + 1;
362 seq_diff = ~preplay_esn->seq + replay_esn->seq + 1;
363
364 if (replay_esn->oseq_hi == preplay_esn->oseq_hi)
365 oseq_diff = replay_esn->oseq - preplay_esn->oseq;
366 else
367 oseq_diff = ~preplay_esn->oseq + replay_esn->oseq + 1;
368
369 if (seq_diff < x->replay_maxdiff &&
370 oseq_diff < x->replay_maxdiff) {
371 362
372 if (x->xflags & XFRM_TIME_DEFER)363 if (replay_esn->oseq_hi == preplay_esn->oseq_hi)
373 event = XFRM_REPLAY_TIMEOUT;364 oseq_diff = replay_esn->oseq
365 - preplay_esn->oseq;
374 else366 else
375 return;367 oseq_diff = ~preplay_esn->oseq
368 + replay_esn->oseq + 1;
369
370 if (seq_diff >= x->replay_maxdiff ||
371 oseq_diff >= x->replay_maxdiff)
372 break;
376 }373 }
377 374
375 if (x->xflags & XFRM_TIME_DEFER)
376 event = XFRM_REPLAY_TIMEOUT;
377 else
378 return;
379
378 break;380 break;
379 381
380 case XFRM_REPLAY_TIMEOUT:382 case XFRM_REPLAY_TIMEOUT:
net/xfrm/xfrm_user.c+3−2
@@ -446,7 +446,8 @@ static void copy_from_user_state(struct xfrm_state *x, struct xfrm_usersa_info * · 445 unmodified lines
446 memcpy(&x->sel, &p->sel, sizeof(x->sel));446 memcpy(&x->sel, &p->sel, sizeof(x->sel));
447 memcpy(&x->lft, &p->lft, sizeof(x->lft));447 memcpy(&x->lft, &p->lft, sizeof(x->lft));
448 x->props.mode = p->mode;448 x->props.mode = p->mode;
449 x->props.replay_window = p->replay_window;449 x->props.replay_window = min_t(unsigned int, p->replay_window,
450 sizeof(x->replay.bitmap) * 8);
450 x->props.reqid = p->reqid;451 x->props.reqid = p->reqid;
451 x->props.family = p->family;452 x->props.family = p->family;
452 memcpy(&x->props.saddr, &p->saddr, sizeof(x->props.saddr));453 memcpy(&x->props.saddr, &p->saddr, sizeof(x->props.saddr));
@@ -1856,7 +1857,7 @@ static int xfrm_new_ae(struct sk_buff *skb, struct nlmsghdr *nlh, · 1403 unmodified lines
1856 if (x->km.state != XFRM_STATE_VALID)1857 if (x->km.state != XFRM_STATE_VALID)
1857 goto out;1858 goto out;
1858 1859
1859 err = xfrm_replay_verify_len(x->replay_esn, rp);1860 err = xfrm_replay_verify_len(x->replay_esn, re);
1860 if (err)1861 if (err)
1861 goto out;1862 goto out;
1862 1863
security/apparmor/apparmorfs.c+1−3
@@ -580,15 +580,13 @@ static struct aa_namespace *__next_namespace(struct aa_namespace *root, · 579 unmodified lines
580 580
581 /* check if the next ns is a sibling, parent, gp, .. */581 /* check if the next ns is a sibling, parent, gp, .. */
582 parent = ns->parent;582 parent = ns->parent;
583 while (parent) {583 while (ns != root) {
584 mutex_unlock(&ns->lock);584 mutex_unlock(&ns->lock);
585 next = list_entry_next(ns, base.list);585 next = list_entry_next(ns, base.list);
586 if (!list_entry_is_head(next, &parent->sub_ns, base.list)) {586 if (!list_entry_is_head(next, &parent->sub_ns, base.list)) {
587 mutex_lock(&next->lock);587 mutex_lock(&next->lock);
588 return next;588 return next;
589 }589 }
590 if (parent == root)
591 return NULL;
592 ns = parent;590 ns = parent;
593 parent = parent->parent;591 parent = parent->parent;
594 }592 }
security/apparmor/policy.c+1−0
@@ -610,6 +610,7 @@ void aa_free_profile(struct aa_profile *profile) · 609 unmodified lines
610 aa_put_dfa(profile->policy.dfa);610 aa_put_dfa(profile->policy.dfa);
611 aa_put_replacedby(profile->replacedby);611 aa_put_replacedby(profile->replacedby);
612 612
613 kzfree(profile->hash);
613 kzfree(profile);614 kzfree(profile);
614}615}
615 616
security/selinux/avc.c+3−6
@@ -746,7 +746,6 @@ inline int avc_has_perm_noaudit(u32 ssid, u32 tsid, · 745 unmodified lines
746 * @tclass: target security class746 * @tclass: target security class
747 * @requested: requested permissions, interpreted based on @tclass747 * @requested: requested permissions, interpreted based on @tclass
748 * @auditdata: auxiliary audit data748 * @auditdata: auxiliary audit data
749 * @flags: VFS walk flags
750 *749 *
751 * Check the AVC to determine whether the @requested permissions are granted750 * Check the AVC to determine whether the @requested permissions are granted
752 * for the SID pair (@ssid, @tsid), interpreting the permissions751 * for the SID pair (@ssid, @tsid), interpreting the permissions
@@ -756,17 +755,15 @@ inline int avc_has_perm_noaudit(u32 ssid, u32 tsid, · 3 unmodified lines
756 * permissions are granted, -%EACCES if any permissions are denied, or755 * permissions are granted, -%EACCES if any permissions are denied, or
757 * another -errno upon other errors.756 * another -errno upon other errors.
758 */757 */
759int avc_has_perm_flags(u32 ssid, u32 tsid, u16 tclass,758int avc_has_perm(u32 ssid, u32 tsid, u16 tclass,
760 u32 requested, struct common_audit_data *auditdata,759 u32 requested, struct common_audit_data *auditdata)
761 unsigned flags)
762{760{
763 struct av_decision avd;761 struct av_decision avd;
764 int rc, rc2;762 int rc, rc2;
765 763
766 rc = avc_has_perm_noaudit(ssid, tsid, tclass, requested, 0, &avd);764 rc = avc_has_perm_noaudit(ssid, tsid, tclass, requested, 0, &avd);
767 765
768 rc2 = avc_audit(ssid, tsid, tclass, requested, &avd, rc, auditdata,766 rc2 = avc_audit(ssid, tsid, tclass, requested, &avd, rc, auditdata);
769 flags);
770 if (rc2)767 if (rc2)
771 return rc2;768 return rc2;
772 return rc;769 return rc;
security/selinux/hooks.c+7−8
@@ -1502,7 +1502,7 @@ static int cred_has_capability(const struct cred *cred, · 1501 unmodified lines
1502 1502
1503 rc = avc_has_perm_noaudit(sid, sid, sclass, av, 0, &avd);1503 rc = avc_has_perm_noaudit(sid, sid, sclass, av, 0, &avd);
1504 if (audit == SECURITY_CAP_AUDIT) {1504 if (audit == SECURITY_CAP_AUDIT) {
1505 int rc2 = avc_audit(sid, sid, sclass, av, &avd, rc, &ad, 0);1505 int rc2 = avc_audit(sid, sid, sclass, av, &avd, rc, &ad);
1506 if (rc2)1506 if (rc2)
1507 return rc2;1507 return rc2;
1508 }1508 }
@@ -1525,8 +1525,7 @@ static int task_has_system(struct task_struct *tsk, · 16 unmodified lines
1525static int inode_has_perm(const struct cred *cred,1525static int inode_has_perm(const struct cred *cred,
1526 struct inode *inode,1526 struct inode *inode,
1527 u32 perms,1527 u32 perms,
1528 struct common_audit_data *adp,1528 struct common_audit_data *adp)
1529 unsigned flags)
1530{1529{
1531 struct inode_security_struct *isec;1530 struct inode_security_struct *isec;
1532 u32 sid;1531 u32 sid;
@@ -1539,7 +1538,7 @@ static int inode_has_perm(const struct cred *cred, · 6 unmodified lines
1539 sid = cred_sid(cred);1538 sid = cred_sid(cred);
1540 isec = inode->i_security;1539 isec = inode->i_security;
1541 1540
1542 return avc_has_perm_flags(sid, isec->sid, isec->sclass, perms, adp, flags);1541 return avc_has_perm(sid, isec->sid, isec->sclass, perms, adp);
1543}1542}
1544 1543
1545/* Same as inode_has_perm, but pass explicit audit data containing1544/* Same as inode_has_perm, but pass explicit audit data containing
@@ -1554,7 +1553,7 @@ static inline int dentry_has_perm(const struct cred *cred, · 8 unmodified lines
1554 1553
1555 ad.type = LSM_AUDIT_DATA_DENTRY;1554 ad.type = LSM_AUDIT_DATA_DENTRY;
1556 ad.u.dentry = dentry;1555 ad.u.dentry = dentry;
1557 return inode_has_perm(cred, inode, av, &ad, 0);1556 return inode_has_perm(cred, inode, av, &ad);
1558}1557}
1559 1558
1560/* Same as inode_has_perm, but pass explicit audit data containing1559/* Same as inode_has_perm, but pass explicit audit data containing
@@ -1569,7 +1568,7 @@ static inline int path_has_perm(const struct cred *cred, · 8 unmodified lines
1569 1568
1570 ad.type = LSM_AUDIT_DATA_PATH;1569 ad.type = LSM_AUDIT_DATA_PATH;
1571 ad.u.path = *path;1570 ad.u.path = *path;
1572 return inode_has_perm(cred, inode, av, &ad, 0);1571 return inode_has_perm(cred, inode, av, &ad);
1573}1572}
1574 1573
1575/* Same as path_has_perm, but uses the inode from the file struct. */1574/* Same as path_has_perm, but uses the inode from the file struct. */
@@ -1581,7 +1580,7 @@ static inline int file_path_has_perm(const struct cred *cred, · 5 unmodified lines
1581 1580
1582 ad.type = LSM_AUDIT_DATA_PATH;1581 ad.type = LSM_AUDIT_DATA_PATH;
1583 ad.u.path = file->f_path;1582 ad.u.path = file->f_path;
1584 return inode_has_perm(cred, file_inode(file), av, &ad, 0);1583 return inode_has_perm(cred, file_inode(file), av, &ad);
1585}1584}
1586 1585
1587/* Check whether a task can use an open file descriptor to1586/* Check whether a task can use an open file descriptor to
@@ -1617,7 +1616,7 @@ static int file_has_perm(const struct cred *cred, · 29 unmodified lines
1617 /* av is zero if only checking access to the descriptor. */1616 /* av is zero if only checking access to the descriptor. */
1618 rc = 0;1617 rc = 0;
1619 if (av)1618 if (av)
1620 rc = inode_has_perm(cred, inode, av, &ad, 0);1619 rc = inode_has_perm(cred, inode, av, &ad);
1621 1620
1622out:1621out:
1623 return rc;1622 return rc;
security/selinux/include/avc.h+5−13
@@ -130,7 +130,7 @@ static inline int avc_audit(u32 ssid, u32 tsid, · 129 unmodified lines
130 u16 tclass, u32 requested,130 u16 tclass, u32 requested,
131 struct av_decision *avd,131 struct av_decision *avd,
132 int result,132 int result,
133 struct common_audit_data *a, unsigned flags)133 struct common_audit_data *a)
134{134{
135 u32 audited, denied;135 u32 audited, denied;
136 audited = avc_audit_required(requested, avd, result, 0, &denied);136 audited = avc_audit_required(requested, avd, result, 0, &denied);
@@ -138,7 +138,7 @@ static inline int avc_audit(u32 ssid, u32 tsid, · 1 unmodified line
138 return 0;138 return 0;
139 return slow_avc_audit(ssid, tsid, tclass,139 return slow_avc_audit(ssid, tsid, tclass,
140 requested, audited, denied,140 requested, audited, denied,
141 a, flags);141 a, 0);
142}142}
143 143
144#define AVC_STRICT 1 /* Ignore permissive mode. */144#define AVC_STRICT 1 /* Ignore permissive mode. */
@@ -147,17 +147,9 @@ int avc_has_perm_noaudit(u32 ssid, u32 tsid, · 2 unmodified lines
147 unsigned flags,147 unsigned flags,
148 struct av_decision *avd);148 struct av_decision *avd);
149 149
150int avc_has_perm_flags(u32 ssid, u32 tsid,150int avc_has_perm(u32 ssid, u32 tsid,
151 u16 tclass, u32 requested,151 u16 tclass, u32 requested,
152 struct common_audit_data *auditdata,152 struct common_audit_data *auditdata);
153 unsigned);
154
155static inline int avc_has_perm(u32 ssid, u32 tsid,
156 u16 tclass, u32 requested,
157 struct common_audit_data *auditdata)
158{
159 return avc_has_perm_flags(ssid, tsid, tclass, requested, auditdata, 0);
160}
161 153
162u32 avc_policy_seqno(void);154u32 avc_policy_seqno(void);
163 155
sound/pci/ac97/ac97_codec.c+1−0
@@ -175,6 +175,7 @@ static const struct ac97_codec_id snd_ac97_codec_ids[] = { · 174 unmodified lines
175{ 0x54524106, 0xffffffff, "TR28026", NULL, NULL },175{ 0x54524106, 0xffffffff, "TR28026", NULL, NULL },
176{ 0x54524108, 0xffffffff, "TR28028", patch_tritech_tr28028, NULL }, // added by xin jin [07/09/99]176{ 0x54524108, 0xffffffff, "TR28028", patch_tritech_tr28028, NULL }, // added by xin jin [07/09/99]
177{ 0x54524123, 0xffffffff, "TR28602", NULL, NULL }, // only guess --jk [TR28023 = eMicro EM28023 (new CT1297)]177{ 0x54524123, 0xffffffff, "TR28602", NULL, NULL }, // only guess --jk [TR28023 = eMicro EM28023 (new CT1297)]
178{ 0x54584e03, 0xffffffff, "TLV320AIC27", NULL, NULL },
178{ 0x54584e20, 0xffffffff, "TLC320AD9xC", NULL, NULL },179{ 0x54584e20, 0xffffffff, "TLC320AD9xC", NULL, NULL },
179{ 0x56494161, 0xffffffff, "VIA1612A", NULL, NULL }, // modified ICE1232 with S/PDIF180{ 0x56494161, 0xffffffff, "VIA1612A", NULL, NULL }, // modified ICE1232 with S/PDIF
180{ 0x56494170, 0xffffffff, "VIA1617A", patch_vt1617a, NULL }, // modified VT1616 with S/PDIF181{ 0x56494170, 0xffffffff, "VIA1617A", patch_vt1617a, NULL }, // modified VT1616 with S/PDIF
sound/pci/hda/hda_generic.c+1−1
@@ -3531,7 +3531,7 @@ static int create_capture_mixers(struct hda_codec *codec) · 3530 unmodified lines
3531 if (!multi)3531 if (!multi)
3532 err = create_single_cap_vol_ctl(codec, n, vol, sw,3532 err = create_single_cap_vol_ctl(codec, n, vol, sw,
3533 inv_dmic);3533 inv_dmic);
3534 else if (!multi_cap_vol)3534 else if (!multi_cap_vol && !inv_dmic)
3535 err = create_bind_cap_vol_ctl(codec, n, vol, sw);3535 err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3536 else3536 else
3537 err = create_multi_cap_vol_ctl(codec);3537 err = create_multi_cap_vol_ctl(codec);
sound/pci/hda/patch_conexant.c+11−0
@@ -3231,6 +3231,7 @@ enum { · 3230 unmodified lines
3231 CXT_FIXUP_INC_MIC_BOOST,3231 CXT_FIXUP_INC_MIC_BOOST,
3232 CXT_FIXUP_HEADPHONE_MIC_PIN,3232 CXT_FIXUP_HEADPHONE_MIC_PIN,
3233 CXT_FIXUP_HEADPHONE_MIC,3233 CXT_FIXUP_HEADPHONE_MIC,
3234 CXT_FIXUP_GPIO1,
3234};3235};
3235 3236
3236static void cxt_fixup_stereo_dmic(struct hda_codec *codec,3237static void cxt_fixup_stereo_dmic(struct hda_codec *codec,
@@ -3375,6 +3376,15 @@ static const struct hda_fixup cxt_fixups[] = { · 138 unmodified lines
3375 .type = HDA_FIXUP_FUNC,3376 .type = HDA_FIXUP_FUNC,
3376 .v.func = cxt_fixup_headphone_mic,3377 .v.func = cxt_fixup_headphone_mic,
3377 },3378 },
3379 [CXT_FIXUP_GPIO1] = {
3380 .type = HDA_FIXUP_VERBS,
3381 .v.verbs = (const struct hda_verb[]) {
3382 { 0x01, AC_VERB_SET_GPIO_MASK, 0x01 },
3383 { 0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01 },
3384 { 0x01, AC_VERB_SET_GPIO_DATA, 0x01 },
3385 { }
3386 },
3387 },
3378};3388};
3379 3389
3380static const struct snd_pci_quirk cxt5051_fixups[] = {3390static const struct snd_pci_quirk cxt5051_fixups[] = {
@@ -3384,6 +3394,7 @@ static const struct snd_pci_quirk cxt5051_fixups[] = { · 3 unmodified lines
3384 3394
3385static const struct snd_pci_quirk cxt5066_fixups[] = {3395static const struct snd_pci_quirk cxt5066_fixups[] = {
3386 SND_PCI_QUIRK(0x1025, 0x0543, "Acer Aspire One 522", CXT_FIXUP_STEREO_DMIC),3396 SND_PCI_QUIRK(0x1025, 0x0543, "Acer Aspire One 522", CXT_FIXUP_STEREO_DMIC),
3397 SND_PCI_QUIRK(0x1025, 0x054c, "Acer Aspire 3830TG", CXT_FIXUP_GPIO1),
3387 SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN),3398 SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN),
3388 SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410),3399 SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410),
3389 SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo T410", CXT_PINCFG_LENOVO_TP410),3400 SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo T410", CXT_PINCFG_LENOVO_TP410),
sound/pci/hda/patch_hdmi.c+8−10
@@ -936,6 +936,14 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, · 935 unmodified lines
936 return;936 return;
937 }937 }
938 938
939 /*
940 * always configure channel mapping, it may have been changed by the
941 * user in the meantime
942 */
943 hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
944 channels, per_pin->chmap,
945 per_pin->chmap_set);
946
939 /*947 /*
940 * sizeof(ai) is used instead of sizeof(*hdmi_ai) or948 * sizeof(ai) is used instead of sizeof(*hdmi_ai) or
941 * sizeof(*dp_ai) to avoid partial match/update problems when949 * sizeof(*dp_ai) to avoid partial match/update problems when
@@ -947,20 +955,10 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, · 5 unmodified lines
947 "pin=%d channels=%d\n",955 "pin=%d channels=%d\n",
948 pin_nid,956 pin_nid,
949 channels);957 channels);
950 hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
951 channels, per_pin->chmap,
952 per_pin->chmap_set);
953 hdmi_stop_infoframe_trans(codec, pin_nid);958 hdmi_stop_infoframe_trans(codec, pin_nid);
954 hdmi_fill_audio_infoframe(codec, pin_nid,959 hdmi_fill_audio_infoframe(codec, pin_nid,
955 ai.bytes, sizeof(ai));960 ai.bytes, sizeof(ai));
956 hdmi_start_infoframe_trans(codec, pin_nid);961 hdmi_start_infoframe_trans(codec, pin_nid);
957 } else {
958 /* For non-pcm audio switch, setup new channel mapping
959 * accordingly */
960 if (per_pin->non_pcm != non_pcm)
961 hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
962 channels, per_pin->chmap,
963 per_pin->chmap_set);
964 }962 }
965 963
966 per_pin->non_pcm = non_pcm;964 per_pin->non_pcm = non_pcm;
sound/pci/hda/patch_realtek.c+54−0
@@ -2819,6 +2819,15 @@ static void alc269_fixup_hweq(struct hda_codec *codec, · 2818 unmodified lines
2819 alc_write_coef_idx(codec, 0x1e, coef | 0x80);2819 alc_write_coef_idx(codec, 0x1e, coef | 0x80);
2820}2820}
2821 2821
2822static void alc269_fixup_headset_mic(struct hda_codec *codec,
2823 const struct hda_fixup *fix, int action)
2824{
2825 struct alc_spec *spec = codec->spec;
2826
2827 if (action == HDA_FIXUP_ACT_PRE_PROBE)
2828 spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
2829}
2830
2822static void alc271_fixup_dmic(struct hda_codec *codec,2831static void alc271_fixup_dmic(struct hda_codec *codec,
2823 const struct hda_fixup *fix, int action)2832 const struct hda_fixup *fix, int action)
2824{2833{
@@ -3496,6 +3505,15 @@ static void alc282_fixup_asus_tx300(struct hda_codec *codec, · 671 unmodified lines
3496 }3505 }
3497}3506}
3498 3507
3508static void alc290_fixup_mono_speakers(struct hda_codec *codec,
3509 const struct hda_fixup *fix, int action)
3510{
3511 if (action == HDA_FIXUP_ACT_PRE_PROBE)
3512 /* Remove DAC node 0x03, as it seems to be
3513 giving mono output */
3514 snd_hda_override_wcaps(codec, 0x03, 0);
3515}
3516
3499enum {3517enum {
3500 ALC269_FIXUP_SONY_VAIO,3518 ALC269_FIXUP_SONY_VAIO,
3501 ALC275_FIXUP_SONY_VAIO_GPIO2,3519 ALC275_FIXUP_SONY_VAIO_GPIO2,
@@ -3507,6 +3525,7 @@ enum { · 5 unmodified lines
3507 ALC271_FIXUP_DMIC,3525 ALC271_FIXUP_DMIC,
3508 ALC269_FIXUP_PCM_44K,3526 ALC269_FIXUP_PCM_44K,
3509 ALC269_FIXUP_STEREO_DMIC,3527 ALC269_FIXUP_STEREO_DMIC,
3528 ALC269_FIXUP_HEADSET_MIC,
3510 ALC269_FIXUP_QUANTA_MUTE,3529 ALC269_FIXUP_QUANTA_MUTE,
3511 ALC269_FIXUP_LIFEBOOK,3530 ALC269_FIXUP_LIFEBOOK,
3512 ALC269_FIXUP_AMIC,3531 ALC269_FIXUP_AMIC,
@@ -3519,9 +3538,11 @@ enum { · 6 unmodified lines
3519 ALC269_FIXUP_HP_GPIO_LED,3538 ALC269_FIXUP_HP_GPIO_LED,
3520 ALC269_FIXUP_INV_DMIC,3539 ALC269_FIXUP_INV_DMIC,
3521 ALC269_FIXUP_LENOVO_DOCK,3540 ALC269_FIXUP_LENOVO_DOCK,
3541 ALC286_FIXUP_SONY_MIC_NO_PRESENCE,
3522 ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,3542 ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,
3523 ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,3543 ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
3524 ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,3544 ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,
3545 ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
3525 ALC269_FIXUP_HEADSET_MODE,3546 ALC269_FIXUP_HEADSET_MODE,
3526 ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,3547 ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
3527 ALC269_FIXUP_ASUS_X101_FUNC,3548 ALC269_FIXUP_ASUS_X101_FUNC,
@@ -3535,6 +3556,7 @@ enum { · 7 unmodified lines
3535 ALC283_FIXUP_CHROME_BOOK,3556 ALC283_FIXUP_CHROME_BOOK,
3536 ALC282_FIXUP_ASUS_TX300,3557 ALC282_FIXUP_ASUS_TX300,
3537 ALC283_FIXUP_INT_MIC,3558 ALC283_FIXUP_INT_MIC,
3559 ALC290_FIXUP_MONO_SPEAKERS,
3538};3560};
3539 3561
3540static const struct hda_fixup alc269_fixups[] = {3562static const struct hda_fixup alc269_fixups[] = {
@@ -3603,6 +3625,10 @@ static const struct hda_fixup alc269_fixups[] = { · 62 unmodified lines
3603 .type = HDA_FIXUP_FUNC,3625 .type = HDA_FIXUP_FUNC,
3604 .v.func = alc269_fixup_stereo_dmic,3626 .v.func = alc269_fixup_stereo_dmic,
3605 },3627 },
3628 [ALC269_FIXUP_HEADSET_MIC] = {
3629 .type = HDA_FIXUP_FUNC,
3630 .v.func = alc269_fixup_headset_mic,
3631 },
3606 [ALC269_FIXUP_QUANTA_MUTE] = {3632 [ALC269_FIXUP_QUANTA_MUTE] = {
3607 .type = HDA_FIXUP_FUNC,3633 .type = HDA_FIXUP_FUNC,
3608 .v.func = alc269_fixup_quanta_mute,3634 .v.func = alc269_fixup_quanta_mute,
@@ -3712,6 +3738,15 @@ static const struct hda_fixup alc269_fixups[] = { · 103 unmodified lines
3712 .chained = true,3738 .chained = true,
3713 .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC3739 .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
3714 },3740 },
3741 [ALC269_FIXUP_DELL3_MIC_NO_PRESENCE] = {
3742 .type = HDA_FIXUP_PINS,
3743 .v.pins = (const struct hda_pintbl[]) {
3744 { 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
3745 { }
3746 },
3747 .chained = true,
3748 .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
3749 },
3715 [ALC269_FIXUP_HEADSET_MODE] = {3750 [ALC269_FIXUP_HEADSET_MODE] = {
3716 .type = HDA_FIXUP_FUNC,3751 .type = HDA_FIXUP_FUNC,
3717 .v.func = alc_fixup_headset_mode,3752 .v.func = alc_fixup_headset_mode,
@@ -3720,6 +3755,15 @@ static const struct hda_fixup alc269_fixups[] = { · 2 unmodified lines
3720 .type = HDA_FIXUP_FUNC,3755 .type = HDA_FIXUP_FUNC,
3721 .v.func = alc_fixup_headset_mode_no_hp_mic,3756 .v.func = alc_fixup_headset_mode_no_hp_mic,
3722 },3757 },
3758 [ALC286_FIXUP_SONY_MIC_NO_PRESENCE] = {
3759 .type = HDA_FIXUP_PINS,
3760 .v.pins = (const struct hda_pintbl[]) {
3761 { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
3762 { }
3763 },
3764 .chained = true,
3765 .chain_id = ALC269_FIXUP_HEADSET_MIC
3766 },
3723 [ALC269_FIXUP_ASUS_X101_FUNC] = {3767 [ALC269_FIXUP_ASUS_X101_FUNC] = {
3724 .type = HDA_FIXUP_FUNC,3768 .type = HDA_FIXUP_FUNC,
3725 .v.func = alc269_fixup_x101_headset_mic,3769 .v.func = alc269_fixup_x101_headset_mic,
@@ -3804,6 +3848,12 @@ static const struct hda_fixup alc269_fixups[] = { · 78 unmodified lines
3804 .chained = true,3848 .chained = true,
3805 .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST3849 .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
3806 },3850 },
3851 [ALC290_FIXUP_MONO_SPEAKERS] = {
3852 .type = HDA_FIXUP_FUNC,
3853 .v.func = alc290_fixup_mono_speakers,
3854 .chained = true,
3855 .chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
3856 },
3807};3857};
3808 3858
3809static const struct snd_pci_quirk alc269_fixup_tbl[] = {3859static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -3845,6 +3895,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 35 unmodified lines
3845 SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),3895 SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
3846 SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),3896 SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
3847 SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),3897 SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
3898 SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS),
3848 SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),3899 SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
3849 SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),3900 SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
3850 SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),3901 SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
@@ -3867,6 +3918,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 16 unmodified lines
3867 SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),3918 SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
3868 SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),3919 SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
3869 SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101),3920 SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101),
3921 SND_PCI_QUIRK(0x104d, 0x90b6, "Sony VAIO Pro 13", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
3870 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),3922 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),
3871 SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),3923 SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
3872 SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),3924 SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
@@ -3952,6 +4004,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = { · 79 unmodified lines
3952 {.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"},4004 {.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"},
3953 {.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"},4005 {.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"},
3954 {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"},4006 {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"},
4007 {.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"},
3955 {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},4008 {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
3956 {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},4009 {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
3957 {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},4010 {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
@@ -4569,6 +4622,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { · 611 unmodified lines
4569 SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),4622 SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
4570 SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),4623 SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
4571 SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),4624 SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
4625 SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4),
4572 SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),4626 SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
4573 SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),4627 SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
4574 SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),4628 SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
sound/pci/rme9652/hdsp.c+1−0
@@ -4845,6 +4845,7 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne · 4844 unmodified lines
4845 if ((err = hdsp_get_iobox_version(hdsp)) < 0)4845 if ((err = hdsp_get_iobox_version(hdsp)) < 0)
4846 return err;4846 return err;
4847 }4847 }
4848 memset(&hdsp_version, 0, sizeof(hdsp_version));
4848 hdsp_version.io_type = hdsp->io_type;4849 hdsp_version.io_type = hdsp->io_type;
4849 hdsp_version.firmware_rev = hdsp->firmware_rev;4850 hdsp_version.firmware_rev = hdsp->firmware_rev;
4850 if ((err = copy_to_user(argp, &hdsp_version, sizeof(hdsp_version))))4851 if ((err = copy_to_user(argp, &hdsp_version, sizeof(hdsp_version))))
sound/soc/blackfin/bf6xx-i2s.c+1−0
@@ -88,6 +88,7 @@ static int bfin_i2s_hw_params(struct snd_pcm_substream *substream, · 87 unmodified lines
88 case SNDRV_PCM_FORMAT_S8:88 case SNDRV_PCM_FORMAT_S8:
89 param.spctl |= 0x70;89 param.spctl |= 0x70;
90 sport->wdsize = 1;90 sport->wdsize = 1;
91 break;
91 case SNDRV_PCM_FORMAT_S16_LE:92 case SNDRV_PCM_FORMAT_S16_LE:
92 param.spctl |= 0xf0;93 param.spctl |= 0xf0;
93 sport->wdsize = 2;94 sport->wdsize = 2;
sound/soc/codecs/88pm860x-codec.c+3−0
@@ -349,6 +349,9 @@ static int snd_soc_put_volsw_2r_st(struct snd_kcontrol *kcontrol, · 348 unmodified lines
349 val = ucontrol->value.integer.value[0];349 val = ucontrol->value.integer.value[0];
350 val2 = ucontrol->value.integer.value[1];350 val2 = ucontrol->value.integer.value[1];
351 351
352 if (val >= ARRAY_SIZE(st_table) || val2 >= ARRAY_SIZE(st_table))
353 return -EINVAL;
354
352 err = snd_soc_update_bits(codec, reg, 0x3f, st_table[val].m);355 err = snd_soc_update_bits(codec, reg, 0x3f, st_table[val].m);
353 if (err < 0)356 if (err < 0)
354 return err;357 return err;
sound/soc/codecs/ab8500-codec.c+6−1
@@ -1225,13 +1225,18 @@ static int anc_status_control_put(struct snd_kcontrol *kcontrol, · 1224 unmodified lines
1225 struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);1225 struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
1226 struct device *dev = codec->dev;1226 struct device *dev = codec->dev;
1227 bool apply_fir, apply_iir;1227 bool apply_fir, apply_iir;
1228 int req, status;1228 unsigned int req;
1229 int status;
1229 1230
1230 dev_dbg(dev, "%s: Enter.\n", __func__);1231 dev_dbg(dev, "%s: Enter.\n", __func__);
1231 1232
1232 mutex_lock(&drvdata->anc_lock);1233 mutex_lock(&drvdata->anc_lock);
1233 1234
1234 req = ucontrol->value.integer.value[0];1235 req = ucontrol->value.integer.value[0];
1236 if (req >= ARRAY_SIZE(enum_anc_state)) {
1237 status = -EINVAL;
1238 goto cleanup;
1239 }
1235 if (req != ANC_APPLY_FIR_IIR && req != ANC_APPLY_FIR &&1240 if (req != ANC_APPLY_FIR_IIR && req != ANC_APPLY_FIR &&
1236 req != ANC_APPLY_IIR) {1241 req != ANC_APPLY_IIR) {
1237 dev_err(dev, "%s: ERROR: Unsupported status to set '%s'!\n",1242 dev_err(dev, "%s: ERROR: Unsupported status to set '%s'!\n",
sound/soc/codecs/max98095.c+2−2
@@ -1863,7 +1863,7 @@ static int max98095_put_eq_enum(struct snd_kcontrol *kcontrol, · 1862 unmodified lines
1863 struct max98095_pdata *pdata = max98095->pdata;1863 struct max98095_pdata *pdata = max98095->pdata;
1864 int channel = max98095_get_eq_channel(kcontrol->id.name);1864 int channel = max98095_get_eq_channel(kcontrol->id.name);
1865 struct max98095_cdata *cdata;1865 struct max98095_cdata *cdata;
1866 int sel = ucontrol->value.integer.value[0];1866 unsigned int sel = ucontrol->value.integer.value[0];
1867 struct max98095_eq_cfg *coef_set;1867 struct max98095_eq_cfg *coef_set;
1868 int fs, best, best_val, i;1868 int fs, best, best_val, i;
1869 int regmask, regsave;1869 int regmask, regsave;
@@ -2016,7 +2016,7 @@ static int max98095_put_bq_enum(struct snd_kcontrol *kcontrol, · 146 unmodified lines
2016 struct max98095_pdata *pdata = max98095->pdata;2016 struct max98095_pdata *pdata = max98095->pdata;
2017 int channel = max98095_get_bq_channel(codec, kcontrol->id.name);2017 int channel = max98095_get_bq_channel(codec, kcontrol->id.name);
2018 struct max98095_cdata *cdata;2018 struct max98095_cdata *cdata;
2019 int sel = ucontrol->value.integer.value[0];2019 unsigned int sel = ucontrol->value.integer.value[0];
2020 struct max98095_biquad_cfg *coef_set;2020 struct max98095_biquad_cfg *coef_set;
2021 int fs, best, best_val, i;2021 int fs, best, best_val, i;
2022 int regmask, regsave;2022 int regmask, regsave;
sound/soc/codecs/pcm1681.c+1−1
@@ -270,7 +270,7 @@ MODULE_DEVICE_TABLE(of, pcm1681_dt_ids); · 269 unmodified lines
270static const struct regmap_config pcm1681_regmap = {270static const struct regmap_config pcm1681_regmap = {
271 .reg_bits = 8,271 .reg_bits = 8,
272 .val_bits = 8,272 .val_bits = 8,
273 .max_register = ARRAY_SIZE(pcm1681_reg_defaults) + 1,273 .max_register = 0x13,
274 .reg_defaults = pcm1681_reg_defaults,274 .reg_defaults = pcm1681_reg_defaults,
275 .num_reg_defaults = ARRAY_SIZE(pcm1681_reg_defaults),275 .num_reg_defaults = ARRAY_SIZE(pcm1681_reg_defaults),
276 .writeable_reg = pcm1681_writeable_reg,276 .writeable_reg = pcm1681_writeable_reg,
sound/soc/codecs/pcm1792a.c+1−1
@@ -188,7 +188,7 @@ MODULE_DEVICE_TABLE(of, pcm1792a_of_match); · 187 unmodified lines
188static const struct regmap_config pcm1792a_regmap = {188static const struct regmap_config pcm1792a_regmap = {
189 .reg_bits = 8,189 .reg_bits = 8,
190 .val_bits = 8,190 .val_bits = 8,
191 .max_register = 24,191 .max_register = 23,
192 .reg_defaults = pcm1792a_reg_defaults,192 .reg_defaults = pcm1792a_reg_defaults,
193 .num_reg_defaults = ARRAY_SIZE(pcm1792a_reg_defaults),193 .num_reg_defaults = ARRAY_SIZE(pcm1792a_reg_defaults),
194 .writeable_reg = pcm1792a_writeable_reg,194 .writeable_reg = pcm1792a_writeable_reg,
sound/soc/codecs/tlv320aic3x.c+4−0
@@ -674,6 +674,8 @@ static const struct snd_soc_dapm_route intercon[] = { · 673 unmodified lines
674 /* Left Input */674 /* Left Input */
675 {"Left Line1L Mux", "single-ended", "LINE1L"},675 {"Left Line1L Mux", "single-ended", "LINE1L"},
676 {"Left Line1L Mux", "differential", "LINE1L"},676 {"Left Line1L Mux", "differential", "LINE1L"},
677 {"Left Line1R Mux", "single-ended", "LINE1R"},
678 {"Left Line1R Mux", "differential", "LINE1R"},
677 679
678 {"Left Line2L Mux", "single-ended", "LINE2L"},680 {"Left Line2L Mux", "single-ended", "LINE2L"},
679 {"Left Line2L Mux", "differential", "LINE2L"},681 {"Left Line2L Mux", "differential", "LINE2L"},
@@ -690,6 +692,8 @@ static const struct snd_soc_dapm_route intercon[] = { · 10 unmodified lines
690 /* Right Input */692 /* Right Input */
691 {"Right Line1R Mux", "single-ended", "LINE1R"},693 {"Right Line1R Mux", "single-ended", "LINE1R"},
692 {"Right Line1R Mux", "differential", "LINE1R"},694 {"Right Line1R Mux", "differential", "LINE1R"},
695 {"Right Line1L Mux", "single-ended", "LINE1L"},
696 {"Right Line1L Mux", "differential", "LINE1L"},
693 697
694 {"Right Line2R Mux", "single-ended", "LINE2R"},698 {"Right Line2R Mux", "single-ended", "LINE2R"},
695 {"Right Line2R Mux", "differential", "LINE2R"},699 {"Right Line2R Mux", "differential", "LINE2R"},
sound/soc/fsl/fsl_ssi.c+1−1
@@ -936,7 +936,7 @@ static int fsl_ssi_probe(struct platform_device *pdev) · 935 unmodified lines
936 ssi_private->ssi_phys = res.start;936 ssi_private->ssi_phys = res.start;
937 937
938 ssi_private->irq = irq_of_parse_and_map(np, 0);938 ssi_private->irq = irq_of_parse_and_map(np, 0);
939 if (ssi_private->irq == NO_IRQ) {939 if (ssi_private->irq == 0) {
940 dev_err(&pdev->dev, "no irq for node %s\n", np->full_name);940 dev_err(&pdev->dev, "no irq for node %s\n", np->full_name);
941 return -ENXIO;941 return -ENXIO;
942 }942 }
sound/soc/fsl/imx-mc13783.c+1−1
@@ -112,7 +112,7 @@ static int imx_mc13783_probe(struct platform_device *pdev) · 111 unmodified lines
112 return ret;112 return ret;
113 }113 }
114 114
115 if (machine_is_mx31_3ds()) {115 if (machine_is_mx31_3ds() || machine_is_mx31moboard()) {
116 imx_audmux_v2_configure_port(MX31_AUDMUX_PORT4_SSI_PINS_4,116 imx_audmux_v2_configure_port(MX31_AUDMUX_PORT4_SSI_PINS_4,
117 IMX_AUDMUX_V2_PTCR_SYN,117 IMX_AUDMUX_V2_PTCR_SYN,
118 IMX_AUDMUX_V2_PDCR_RXDSEL(MX31_AUDMUX_PORT1_SSI0) |118 IMX_AUDMUX_V2_PDCR_RXDSEL(MX31_AUDMUX_PORT1_SSI0) |
sound/soc/fsl/imx-sgtl5000.c+5−2
@@ -62,7 +62,7 @@ static int imx_sgtl5000_probe(struct platform_device *pdev) · 61 unmodified lines
62 struct device_node *ssi_np, *codec_np;62 struct device_node *ssi_np, *codec_np;
63 struct platform_device *ssi_pdev;63 struct platform_device *ssi_pdev;
64 struct i2c_client *codec_dev;64 struct i2c_client *codec_dev;
65 struct imx_sgtl5000_data *data;65 struct imx_sgtl5000_data *data = NULL;
66 int int_port, ext_port;66 int int_port, ext_port;
67 int ret;67 int ret;
68 68
@@ -128,7 +128,7 @@ static int imx_sgtl5000_probe(struct platform_device *pdev) · 59 unmodified lines
128 goto fail;128 goto fail;
129 }129 }
130 130
131 data->codec_clk = devm_clk_get(&codec_dev->dev, NULL);131 data->codec_clk = clk_get(&codec_dev->dev, NULL);
132 if (IS_ERR(data->codec_clk)) {132 if (IS_ERR(data->codec_clk)) {
133 ret = PTR_ERR(data->codec_clk);133 ret = PTR_ERR(data->codec_clk);
134 goto fail;134 goto fail;
@@ -172,6 +172,8 @@ static int imx_sgtl5000_probe(struct platform_device *pdev) · 37 unmodified lines
172 return 0;172 return 0;
173 173
174fail:174fail:
175 if (data && !IS_ERR(data->codec_clk))
176 clk_put(data->codec_clk);
175 if (ssi_np)177 if (ssi_np)
176 of_node_put(ssi_np);178 of_node_put(ssi_np);
177 if (codec_np)179 if (codec_np)
@@ -185,6 +187,7 @@ static int imx_sgtl5000_remove(struct platform_device *pdev) · 7 unmodified lines
185 struct imx_sgtl5000_data *data = platform_get_drvdata(pdev);187 struct imx_sgtl5000_data *data = platform_get_drvdata(pdev);
186 188
187 snd_soc_unregister_card(&data->card);189 snd_soc_unregister_card(&data->card);
190 clk_put(data->codec_clk);
188 191
189 return 0;192 return 0;
190}193}
sound/soc/fsl/imx-ssi.c+12−11
@@ -600,19 +600,17 @@ static int imx_ssi_probe(struct platform_device *pdev) · 599 unmodified lines
600 ssi->fiq_params.dma_params_rx = &ssi->dma_params_rx;600 ssi->fiq_params.dma_params_rx = &ssi->dma_params_rx;
601 ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;601 ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
602 602
603 ret = imx_pcm_fiq_init(pdev, &ssi->fiq_params);603 ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
604 if (ret)604 ssi->dma_init = imx_pcm_dma_init(pdev);
605 goto failed_pcm_fiq;
606 605
607 ret = imx_pcm_dma_init(pdev);606 if (ssi->fiq_init && ssi->dma_init) {
608 if (ret)607 ret = ssi->fiq_init;
609 goto failed_pcm_dma;608 goto failed_pcm;
609 }
610 610
611 return 0;611 return 0;
612 612
613failed_pcm_dma:613failed_pcm:
614 imx_pcm_fiq_exit(pdev);
615failed_pcm_fiq:
616 snd_soc_unregister_component(&pdev->dev);614 snd_soc_unregister_component(&pdev->dev);
617failed_register:615failed_register:
618 release_mem_region(res->start, resource_size(res));616 release_mem_region(res->start, resource_size(res));
@@ -628,8 +626,11 @@ static int imx_ssi_remove(struct platform_device *pdev) · 9 unmodified lines
628 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);626 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
629 struct imx_ssi *ssi = platform_get_drvdata(pdev);627 struct imx_ssi *ssi = platform_get_drvdata(pdev);
630 628
631 imx_pcm_dma_exit(pdev);629 if (!ssi->dma_init)
632 imx_pcm_fiq_exit(pdev);630 imx_pcm_dma_exit(pdev);
631
632 if (!ssi->fiq_init)
633 imx_pcm_fiq_exit(pdev);
633 634
634 snd_soc_unregister_component(&pdev->dev);635 snd_soc_unregister_component(&pdev->dev);
635 636
sound/soc/fsl/imx-ssi.h+2−0
@@ -211,6 +211,8 @@ struct imx_ssi { · 210 unmodified lines
211 struct imx_dma_data filter_data_rx;211 struct imx_dma_data filter_data_rx;
212 struct imx_pcm_fiq_params fiq_params;212 struct imx_pcm_fiq_params fiq_params;
213 213
214 int fiq_init;
215 int dma_init;
214 int enabled;216 int enabled;
215};217};
216 218
sound/soc/omap/Kconfig+2−2
@@ -1,6 +1,6 @@
1config SND_OMAP_SOC1config SND_OMAP_SOC
2 tristate "SoC Audio for the Texas Instruments OMAP chips"2 tristate "SoC Audio for the Texas Instruments OMAP chips"
3 depends on (ARCH_OMAP && DMA_OMAP) || (ARCH_ARM && COMPILE_TEST)3 depends on (ARCH_OMAP && DMA_OMAP) || (ARM && COMPILE_TEST)
4 select SND_DMAENGINE_PCM4 select SND_DMAENGINE_PCM
5 5
6config SND_OMAP_SOC_DMIC6config SND_OMAP_SOC_DMIC
@@ -26,7 +26,7 @@ config SND_OMAP_SOC_N810 · 19 unmodified lines
26 26
27config SND_OMAP_SOC_RX5127config SND_OMAP_SOC_RX51
28 tristate "SoC Audio support for Nokia RX-51"28 tristate "SoC Audio support for Nokia RX-51"
29 depends on SND_OMAP_SOC && ARCH_ARM && (MACH_NOKIA_RX51 || COMPILE_TEST)29 depends on SND_OMAP_SOC && ARM && (MACH_NOKIA_RX51 || COMPILE_TEST)
30 select SND_OMAP_SOC_MCBSP30 select SND_OMAP_SOC_MCBSP
31 select SND_SOC_TLV320AIC3X31 select SND_SOC_TLV320AIC3X
32 select SND_SOC_TPA6130A232 select SND_SOC_TPA6130A2
sound/soc/sh/rcar/rsnd.h+2−2
@@ -220,8 +220,8 @@ int rsnd_gen_path_exit(struct rsnd_priv *priv, · 219 unmodified lines
220void __iomem *rsnd_gen_reg_get(struct rsnd_priv *priv,220void __iomem *rsnd_gen_reg_get(struct rsnd_priv *priv,
221 struct rsnd_mod *mod,221 struct rsnd_mod *mod,
222 enum rsnd_reg reg);222 enum rsnd_reg reg);
223#define rsnd_is_gen1(s) ((s)->info->flags & RSND_GEN1)223#define rsnd_is_gen1(s) (((s)->info->flags & RSND_GEN_MASK) == RSND_GEN1)
224#define rsnd_is_gen2(s) ((s)->info->flags & RSND_GEN2)224#define rsnd_is_gen2(s) (((s)->info->flags & RSND_GEN_MASK) == RSND_GEN2)
225 225
226/*226/*
227 * R-Car ADG227 * R-Car ADG
sound/soc/soc-core.c+0−1
@@ -1380,7 +1380,6 @@ static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order) · 1379 unmodified lines
1380 return -ENODEV;1380 return -ENODEV;
1381 1381
1382 list_add(&cpu_dai->dapm.list, &card->dapm_list);1382 list_add(&cpu_dai->dapm.list, &card->dapm_list);
1383 snd_soc_dapm_new_dai_widgets(&cpu_dai->dapm, cpu_dai);
1384 }1383 }
1385 1384
1386 if (cpu_dai->driver->probe) {1385 if (cpu_dai->driver->probe) {
sound/usb/usx2y/us122l.c+3−1
@@ -262,7 +262,9 @@ static int usb_stream_hwdep_mmap(struct snd_hwdep *hw, · 261 unmodified lines
262 }262 }
263 263
264 area->vm_ops = &usb_stream_hwdep_vm_ops;264 area->vm_ops = &usb_stream_hwdep_vm_ops;
265 area->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;265 area->vm_flags |= VM_DONTDUMP;
266 if (!read)
267 area->vm_flags |= VM_DONTEXPAND;
266 area->vm_private_data = us122l;268 area->vm_private_data = us122l;
267 atomic_inc(&us122l->mmap_count);269 atomic_inc(&us122l->mmap_count);
268out:270out:
sound/usb/usx2y/usbusx2yaudio.c+3−19
@@ -299,19 +299,6 @@ static void usX2Y_error_urb_status(struct usX2Ydev *usX2Y, · 298 unmodified lines
299 usX2Y_clients_stop(usX2Y);299 usX2Y_clients_stop(usX2Y);
300}300}
301 301
302static void usX2Y_error_sequence(struct usX2Ydev *usX2Y,
303 struct snd_usX2Y_substream *subs, struct urb *urb)
304{
305 snd_printk(KERN_ERR
306"Sequence Error!(hcd_frame=%i ep=%i%s;wait=%i,frame=%i).\n"
307"Most probably some urb of usb-frame %i is still missing.\n"
308"Cause could be too long delays in usb-hcd interrupt handling.\n",
309 usb_get_current_frame_number(usX2Y->dev),
310 subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out",
311 usX2Y->wait_iso_frame, urb->start_frame, usX2Y->wait_iso_frame);
312 usX2Y_clients_stop(usX2Y);
313}
314
315static void i_usX2Y_urb_complete(struct urb *urb)302static void i_usX2Y_urb_complete(struct urb *urb)
316{303{
317 struct snd_usX2Y_substream *subs = urb->context;304 struct snd_usX2Y_substream *subs = urb->context;
@@ -328,12 +315,9 @@ static void i_usX2Y_urb_complete(struct urb *urb) · 10 unmodified lines
328 usX2Y_error_urb_status(usX2Y, subs, urb);315 usX2Y_error_urb_status(usX2Y, subs, urb);
329 return;316 return;
330 }317 }
331 if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF)))318
332 subs->completed_urb = urb;319 subs->completed_urb = urb;
333 else {320
334 usX2Y_error_sequence(usX2Y, subs, urb);
335 return;
336 }
337 {321 {
338 struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE],322 struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE],
339 *playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];323 *playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];
sound/usb/usx2y/usx2yhwdeppcm.c+1−6
@@ -244,13 +244,8 @@ static void i_usX2Y_usbpcm_urb_complete(struct urb *urb) · 243 unmodified lines
244 usX2Y_error_urb_status(usX2Y, subs, urb);244 usX2Y_error_urb_status(usX2Y, subs, urb);
245 return;245 return;
246 }246 }
247 if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF)))
248 subs->completed_urb = urb;
249 else {
250 usX2Y_error_sequence(usX2Y, subs, urb);
251 return;
252 }
253 247
248 subs->completed_urb = urb;
254 capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE];249 capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE];
255 capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];250 capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
256 playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];251 playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];
tools/perf/Makefile+1−0
@@ -770,6 +770,7 @@ check: $(OUTPUT)common-cmds.h · 769 unmodified lines
770install-bin: all770install-bin: all
771 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'771 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
772 $(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'772 $(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'
773 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
773 $(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'774 $(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
774ifndef NO_LIBPERL775ifndef NO_LIBPERL
775 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'776 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'
tools/perf/builtin-stat.c+1−0
@@ -457,6 +457,7 @@ static int __run_perf_stat(int argc, const char **argv) · 456 unmodified lines
457 perror("failed to prepare workload");457 perror("failed to prepare workload");
458 return -1;458 return -1;
459 }459 }
460 child_pid = evsel_list->workload.pid;
460 }461 }
461 462
462 if (group)463 if (group)
tools/perf/config/feature-tests.mak+1−1
@@ -219,7 +219,7 @@ define SOURCE_LIBAUDIT · 218 unmodified lines
219 219
220int main(void)220int main(void)
221{221{
222 printf(\"error message: %s\n\", audit_errno_to_name(0));222 printf(\"error message: %s\", audit_errno_to_name(0));
223 return audit_open();223 return audit_open();
224}224}
225endef225endef
tools/perf/util/dwarf-aux.c+21−4
@@ -426,7 +426,7 @@ static int __die_search_func_cb(Dwarf_Die *fn_die, void *data) · 425 unmodified lines
426 * @die_mem: a buffer for result DIE426 * @die_mem: a buffer for result DIE
427 *427 *
428 * Search a non-inlined function DIE which includes @addr. Stores the428 * Search a non-inlined function DIE which includes @addr. Stores the
429 * DIE to @die_mem and returns it if found. Returns NULl if failed.429 * DIE to @die_mem and returns it if found. Returns NULL if failed.
430 */430 */
431Dwarf_Die *die_find_realfunc(Dwarf_Die *cu_die, Dwarf_Addr addr,431Dwarf_Die *die_find_realfunc(Dwarf_Die *cu_die, Dwarf_Addr addr,
432 Dwarf_Die *die_mem)432 Dwarf_Die *die_mem)
@@ -453,16 +453,33 @@ static int __die_find_inline_cb(Dwarf_Die *die_mem, void *data) · 20 unmodified lines
453 return DIE_FIND_CB_CONTINUE;453 return DIE_FIND_CB_CONTINUE;
454}454}
455 455
456/**
457 * die_find_top_inlinefunc - Search the top inlined function at given address
458 * @sp_die: a subprogram DIE which including @addr
459 * @addr: target address
460 * @die_mem: a buffer for result DIE
461 *
462 * Search an inlined function DIE which includes @addr. Stores the
463 * DIE to @die_mem and returns it if found. Returns NULL if failed.
464 * Even if several inlined functions are expanded recursively, this
465 * doesn't trace it down, and returns the topmost one.
466 */
467Dwarf_Die *die_find_top_inlinefunc(Dwarf_Die *sp_die, Dwarf_Addr addr,
468 Dwarf_Die *die_mem)
469{
470 return die_find_child(sp_die, __die_find_inline_cb, &addr, die_mem);
471}
472
456/**473/**
457 * die_find_inlinefunc - Search an inlined function at given address474 * die_find_inlinefunc - Search an inlined function at given address
458 * @cu_die: a CU DIE which including @addr475 * @sp_die: a subprogram DIE which including @addr
459 * @addr: target address476 * @addr: target address
460 * @die_mem: a buffer for result DIE477 * @die_mem: a buffer for result DIE
461 *478 *
462 * Search an inlined function DIE which includes @addr. Stores the479 * Search an inlined function DIE which includes @addr. Stores the
463 * DIE to @die_mem and returns it if found. Returns NULl if failed.480 * DIE to @die_mem and returns it if found. Returns NULL if failed.
464 * If several inlined functions are expanded recursively, this trace481 * If several inlined functions are expanded recursively, this trace
465 * it and returns deepest one.482 * it down and returns deepest one.
466 */483 */
467Dwarf_Die *die_find_inlinefunc(Dwarf_Die *sp_die, Dwarf_Addr addr,484Dwarf_Die *die_find_inlinefunc(Dwarf_Die *sp_die, Dwarf_Addr addr,
468 Dwarf_Die *die_mem)485 Dwarf_Die *die_mem)
tools/perf/util/dwarf-aux.h+5−1
@@ -79,7 +79,11 @@ extern Dwarf_Die *die_find_child(Dwarf_Die *rt_die, · 78 unmodified lines
79extern Dwarf_Die *die_find_realfunc(Dwarf_Die *cu_die, Dwarf_Addr addr,79extern Dwarf_Die *die_find_realfunc(Dwarf_Die *cu_die, Dwarf_Addr addr,
80 Dwarf_Die *die_mem);80 Dwarf_Die *die_mem);
81 81
82/* Search an inlined function including given address */82/* Search the top inlined function including given address */
83extern Dwarf_Die *die_find_top_inlinefunc(Dwarf_Die *sp_die, Dwarf_Addr addr,
84 Dwarf_Die *die_mem);
85
86/* Search the deepest inlined function including given address */
83extern Dwarf_Die *die_find_inlinefunc(Dwarf_Die *sp_die, Dwarf_Addr addr,87extern Dwarf_Die *die_find_inlinefunc(Dwarf_Die *sp_die, Dwarf_Addr addr,
84 Dwarf_Die *die_mem);88 Dwarf_Die *die_mem);
85 89
tools/perf/util/header.c+12−0
@@ -2768,6 +2768,18 @@ int perf_session__read_header(struct perf_session *session) · 2767 unmodified lines
2768 if (perf_file_header__read(&f_header, header, fd) < 0)2768 if (perf_file_header__read(&f_header, header, fd) < 0)
2769 return -EINVAL;2769 return -EINVAL;
2770 2770
2771 /*
2772 * Sanity check that perf.data was written cleanly; data size is
2773 * initialized to 0 and updated only if the on_exit function is run.
2774 * If data size is still 0 then the file contains only partial
2775 * information. Just warn user and process it as much as it can.
2776 */
2777 if (f_header.data.size == 0) {
2778 pr_warning("WARNING: The %s file's data size field is 0 which is unexpected.\n"
2779 "Was the 'perf record' command properly terminated?\n",
2780 session->filename);
2781 }
2782
2771 nr_attrs = f_header.attrs.size / f_header.attr_size;2783 nr_attrs = f_header.attrs.size / f_header.attr_size;
2772 lseek(fd, f_header.attrs.offset, SEEK_SET);2784 lseek(fd, f_header.attrs.offset, SEEK_SET);
2773 2785
tools/perf/util/probe-finder.c+33−16
@@ -1327,8 +1327,8 @@ int debuginfo__find_probe_point(struct debuginfo *self, unsigned long addr, · 1326 unmodified lines
1327 struct perf_probe_point *ppt)1327 struct perf_probe_point *ppt)
1328{1328{
1329 Dwarf_Die cudie, spdie, indie;1329 Dwarf_Die cudie, spdie, indie;
1330 Dwarf_Addr _addr, baseaddr;1330 Dwarf_Addr _addr = 0, baseaddr = 0;
1331 const char *fname = NULL, *func = NULL, *tmp;1331 const char *fname = NULL, *func = NULL, *basefunc = NULL, *tmp;
1332 int baseline = 0, lineno = 0, ret = 0;1332 int baseline = 0, lineno = 0, ret = 0;
1333 1333
1334 /* Adjust address with bias */1334 /* Adjust address with bias */
@@ -1349,27 +1349,36 @@ int debuginfo__find_probe_point(struct debuginfo *self, unsigned long addr, · 14 unmodified lines
1349 /* Find a corresponding function (name, baseline and baseaddr) */1349 /* Find a corresponding function (name, baseline and baseaddr) */
1350 if (die_find_realfunc(&cudie, (Dwarf_Addr)addr, &spdie)) {1350 if (die_find_realfunc(&cudie, (Dwarf_Addr)addr, &spdie)) {
1351 /* Get function entry information */1351 /* Get function entry information */
1352 tmp = dwarf_diename(&spdie);1352 func = basefunc = dwarf_diename(&spdie);
1353 if (!tmp ||1353 if (!func ||
1354 dwarf_entrypc(&spdie, &baseaddr) != 0 ||1354 dwarf_entrypc(&spdie, &baseaddr) != 0 ||
1355 dwarf_decl_line(&spdie, &baseline) != 0)1355 dwarf_decl_line(&spdie, &baseline) != 0) {
1356 lineno = 0;
1356 goto post;1357 goto post;
1357 func = tmp;1358 }
1358 1359
1359 if (addr == (unsigned long)baseaddr)1360 if (addr == (unsigned long)baseaddr) {
1360 /* Function entry - Relative line number is 0 */1361 /* Function entry - Relative line number is 0 */
1361 lineno = baseline;1362 lineno = baseline;
1362 else if (die_find_inlinefunc(&spdie, (Dwarf_Addr)addr,1363 fname = dwarf_decl_file(&spdie);
1363 &indie)) {1364 goto post;
1365 }
1366
1367 /* Track down the inline functions step by step */
1368 while (die_find_top_inlinefunc(&spdie, (Dwarf_Addr)addr,
1369 &indie)) {
1370 /* There is an inline function */
1364 if (dwarf_entrypc(&indie, &_addr) == 0 &&1371 if (dwarf_entrypc(&indie, &_addr) == 0 &&
1365 _addr == addr)1372 _addr == addr) {
1366 /*1373 /*
1367 * addr is at an inline function entry.1374 * addr is at an inline function entry.
1368 * In this case, lineno should be the call-site1375 * In this case, lineno should be the call-site
1369 * line number.1376 * line number. (overwrite lineinfo)
1370 */1377 */
1371 lineno = die_get_call_lineno(&indie);1378 lineno = die_get_call_lineno(&indie);
1372 else {1379 fname = die_get_call_file(&indie);
1380 break;
1381 } else {
1373 /*1382 /*
1374 * addr is in an inline function body.1383 * addr is in an inline function body.
1375 * Since lineno points one of the lines1384 * Since lineno points one of the lines
@@ -1377,19 +1386,27 @@ int debuginfo__find_probe_point(struct debuginfo *self, unsigned long addr, · 1 unmodified line
1377 * be the entry line of the inline function.1386 * be the entry line of the inline function.
1378 */1387 */
1379 tmp = dwarf_diename(&indie);1388 tmp = dwarf_diename(&indie);
1380 if (tmp &&1389 if (!tmp ||
1381 dwarf_decl_line(&spdie, &baseline) == 0)1390 dwarf_decl_line(&indie, &baseline) != 0)
1382 func = tmp;1391 break;
1392 func = tmp;
1393 spdie = indie;
1383 }1394 }
1384 }1395 }
1396 /* Verify the lineno and baseline are in a same file */
1397 tmp = dwarf_decl_file(&spdie);
1398 if (!tmp || strcmp(tmp, fname) != 0)
1399 lineno = 0;
1385 }1400 }
1386 1401
1387post:1402post:
1388 /* Make a relative line number or an offset */1403 /* Make a relative line number or an offset */
1389 if (lineno)1404 if (lineno)
1390 ppt->line = lineno - baseline;1405 ppt->line = lineno - baseline;
1391 else if (func)1406 else if (basefunc) {
1392 ppt->offset = addr - (unsigned long)baseaddr;1407 ppt->offset = addr - (unsigned long)baseaddr;
1408 func = basefunc;
1409 }
1393 1410
1394 /* Duplicate strings */1411 /* Duplicate strings */
1395 if (func) {1412 if (func) {
tools/perf/util/session.c+3−1
@@ -256,6 +256,8 @@ void perf_tool__fill_defaults(struct perf_tool *tool) · 255 unmodified lines
256 tool->sample = process_event_sample_stub;256 tool->sample = process_event_sample_stub;
257 if (tool->mmap == NULL)257 if (tool->mmap == NULL)
258 tool->mmap = process_event_stub;258 tool->mmap = process_event_stub;
259 if (tool->mmap2 == NULL)
260 tool->mmap2 = process_event_stub;
259 if (tool->comm == NULL)261 if (tool->comm == NULL)
260 tool->comm = process_event_stub;262 tool->comm = process_event_stub;
261 if (tool->fork == NULL)263 if (tool->fork == NULL)
@@ -1310,7 +1312,7 @@ int __perf_session__process_events(struct perf_session *session, · 1048 unmodified lines
1310 file_offset = page_offset;1312 file_offset = page_offset;
1311 head = data_offset - page_offset;1313 head = data_offset - page_offset;
1312 1314
1313 if (data_offset + data_size < file_size)1315 if (data_size && (data_offset + data_size < file_size))
1314 file_size = data_offset + data_size;1316 file_size = data_offset + data_size;
1315 1317
1316 progress_next = file_size / 16;1318 progress_next = file_size / 16;
tools/testing/selftests/timers/posix_timers.c+1−1
@@ -151,7 +151,7 @@ static int check_timer_create(int which) · 150 unmodified lines
151 fflush(stdout);151 fflush(stdout);
152 152
153 done = 0;153 done = 0;
154 timer_create(which, NULL, &id);154 err = timer_create(which, NULL, &id);
155 if (err < 0) {155 if (err < 0) {
156 perror("Can't create timer\n");156 perror("Can't create timer\n");
157 return -1;157 return -1;
virt/kvm/kvm_main.c+4−2
@@ -1064,10 +1064,12 @@ EXPORT_SYMBOL_GPL(gfn_to_hva); · 1063 unmodified lines
1064unsigned long gfn_to_hva_prot(struct kvm *kvm, gfn_t gfn, bool *writable)1064unsigned long gfn_to_hva_prot(struct kvm *kvm, gfn_t gfn, bool *writable)
1065{1065{
1066 struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);1066 struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);
1067 if (writable)1067 unsigned long hva = __gfn_to_hva_many(slot, gfn, NULL, false);
1068
1069 if (!kvm_is_error_hva(hva) && writable)
1068 *writable = !memslot_is_readonly(slot);1070 *writable = !memslot_is_readonly(slot);
1069 1071
1070 return __gfn_to_hva_many(gfn_to_memslot(kvm, gfn), gfn, NULL, false);1072 return hva;
1071}1073}
1072 1074
1073static int kvm_read_hva(void *data, void __user *hva, int len)1075static int kvm_read_hva(void *data, void __user *hva, int len)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t