History

Merge tags 'omap-devel-gpmc-fixed-for-v3.7' and 'cleanup-omap-tags-for-v3.7' into cleanup-sparseirq

Changes for GPMC (General Purpose Memory Controller) that take it closer for being just a regular device driver. Remove the ancient omap specific atags that are no longer needed. At some point we were planning to pass the bootloader information with custom atags that did not work out too well. There's no need for these any longer as the kernel has been booting fine without them for quite some time. And Now we have device tree support that can be used instead.

Tony Lindgren committed 14 years ago

Commit a1e01703 parents cdd86b2 5c46845 cf3a6ec434 files · +3308 −2198Browse files

Unified · Split

434 files
  1. Documentation/ABI/testing/sysfs-bus-pci +12 −0
  2. Documentation/block/00-INDEX +8 −2
  3. Documentation/block/cfq-iosched.txt +77 −0
  4. Documentation/block/queue-sysfs.txt +64 −0
  5. Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt +4 −4
  6. Documentation/feature-removal-schedule.txt +1 −1
  7. Documentation/watchdog/src/watchdog-test.c +1 −1
  8. Makefile +1 −1
  9. arch/arm/Kconfig +2 −1
  10. arch/arm/boot/dts/am33xx.dtsi +5 −0
  11. arch/arm/boot/dts/at91sam9g25ek.dts +1 −1
  12. arch/arm/boot/dts/imx51-babbage.dts +2 −2
  13. arch/arm/boot/dts/kirkwood-iconnect.dts +5 −1
  14. arch/arm/boot/dts/twl6030.dtsi +3 −0
  15. arch/arm/configs/armadillo800eva_defconfig +1 −1
  16. arch/arm/configs/u8500_defconfig +1 −0
  17. arch/arm/include/asm/dma-mapping.h +7 −0
  18. arch/arm/mach-at91/at91rm9200_time.c +1 −1
  19. arch/arm/mach-at91/at91sam9260_devices.c +5 −1
  20. arch/arm/mach-at91/at91sam9261_devices.c +5 −1
  21. arch/arm/mach-at91/at91sam9263_devices.c +8 −2
  22. arch/arm/mach-at91/at91sam9g45_devices.c +5 −1
  23. arch/arm/mach-at91/at91sam9rl_devices.c +5 −1
  24. arch/arm/mach-at91/clock.c +12 −0
  25. arch/arm/mach-dove/common.c +2 −1
  26. arch/arm/mach-exynos/mach-origen.c +7 −0
  27. arch/arm/mach-exynos/mach-smdkv310.c +7 −0
  28. arch/arm/mach-gemini/irq.c +1 −0
  29. arch/arm/mach-imx/Makefile +5 −5
  30. arch/arm/mach-imx/clk-imx6q.c +5 −3
  31. arch/arm/mach-imx/headsmp.S +0 −0
  32. arch/arm/mach-imx/hotplug.c +3 −20
  33. arch/arm/mach-imx/mach-imx6q.c +2 −2
  34. arch/arm/mach-kirkwood/Makefile.boot +2 −1
  35. arch/arm/mach-kirkwood/common.c +9 −2
  36. arch/arm/mach-kirkwood/db88f6281-bp-setup.c +1 −0
  37. arch/arm/mach-mmp/sram.c +1 −1
  38. arch/arm/mach-mv78xx0/addr-map.c +1 −1
  39. arch/arm/mach-mv78xx0/common.c +4 −2
  40. arch/arm/mach-omap1/board-ams-delta.c +0 −1
  41. arch/arm/mach-omap1/board-fsample.c +0 −1
  42. arch/arm/mach-omap1/board-generic.c +0 −6
  43. arch/arm/mach-omap1/board-htcherald.c +0 −1
  44. arch/arm/mach-omap1/board-nokia770.c +0 −1
  45. arch/arm/mach-omap1/board-osk.c +1 −0
  46. arch/arm/mach-omap1/board-palmte.c +1 −1
  47. arch/arm/mach-omap1/board-palmtt.c +1 −1
  48. arch/arm/mach-omap1/board-palmz71.c +1 −1
  49. arch/arm/mach-omap1/board-perseus2.c +0 −1
  50. arch/arm/mach-omap1/board-sx1.c +0 −1
  51. arch/arm/mach-omap1/board-voiceblue.c +0 −6
  52. arch/arm/mach-omap1/clock_data.c +0 −8
  53. arch/arm/mach-omap1/devices.c +0 −1
  54. arch/arm/mach-omap1/serial.c +0 −1
  55. arch/arm/mach-omap2/Kconfig +2 −1
  56. arch/arm/mach-omap2/board-2430sdp.c +0 −1
  57. arch/arm/mach-omap2/board-3430sdp.c +0 −6
  58. arch/arm/mach-omap2/board-3630sdp.c +0 −6
  59. arch/arm/mach-omap2/board-4430sdp.c +0 −1
  60. arch/arm/mach-omap2/board-am3517crane.c +0 −9
  61. arch/arm/mach-omap2/board-am3517evm.c +0 −6
  62. arch/arm/mach-omap2/board-apollon.c +0 −1
  63. arch/arm/mach-omap2/board-cm-t35.c +0 −6
  64. arch/arm/mach-omap2/board-cm-t3517.c +0 −6
  65. arch/arm/mach-omap2/board-devkit8000.c +0 −1
  66. arch/arm/mach-omap2/board-generic.c +0 −1
  67. arch/arm/mach-omap2/board-h4.c +1 −1
  68. arch/arm/mach-omap2/board-igep0020.c +2 −1
  69. arch/arm/mach-omap2/board-ldp.c +0 −1
  70. arch/arm/mach-omap2/board-n8x0.c +0 −1
  71. arch/arm/mach-omap2/board-omap3beagle.c +0 −1
  72. arch/arm/mach-omap2/board-omap3evm.c +13 −7
  73. arch/arm/mach-omap2/board-omap3logic.c +0 −1
  74. arch/arm/mach-omap2/board-omap3pandora.c +0 −1
  75. arch/arm/mach-omap2/board-omap3stalker.c +0 −6
  76. arch/arm/mach-omap2/board-omap3touchbook.c +0 −1
  77. arch/arm/mach-omap2/board-omap4panda.c +0 −1
  78. arch/arm/mach-omap2/board-overo.c +0 −1
  79. arch/arm/mach-omap2/board-rx51-peripherals.c +0 −1
  80. arch/arm/mach-omap2/board-rx51.c +0 −1
  81. arch/arm/mach-omap2/board-ti8168evm.c +0 −6
  82. arch/arm/mach-omap2/board-zoom.c +0 −1
  83. arch/arm/mach-omap2/common-board-devices.c +0 −11
  84. arch/arm/mach-omap2/common-board-devices.h +0 −1
  85. arch/arm/mach-omap2/common.c +0 −1
  86. arch/arm/mach-omap2/cpuidle44xx.c +2 −1
  87. arch/arm/mach-omap2/devices.c +0 −1
  88. arch/arm/mach-omap2/gpmc-nand.c +23 −6
  89. arch/arm/mach-omap2/gpmc-onenand.c +22 −2
  90. arch/arm/mach-omap2/gpmc-smc91x.c +0 −1
  91. arch/arm/mach-omap2/gpmc-smsc911x.c +0 −1
  92. arch/arm/mach-omap2/gpmc.c +139 −17
  93. arch/arm/mach-omap2/mux.h +0 −1
  94. arch/arm/mach-omap2/opp4xxx_data.c +1 −1
  95. arch/arm/mach-omap2/pm-debug.c +0 −1
  96. arch/arm/mach-omap2/pm24xx.c +0 −11
  97. arch/arm/mach-omap2/pm34xx.c +4 −15
  98. arch/arm/mach-omap2/serial.c +0 −1
  99. arch/arm/mach-omap2/sleep44xx.S +6 −2
  100. arch/arm/mach-omap2/twl-common.c +1 −0
  101. arch/arm/mach-orion5x/common.c +2 −1
  102. arch/arm/mach-s3c24xx/include/mach/dma.h +2 −1
  103. arch/arm/mach-shmobile/board-armadillo800eva.c +7 −6
  104. arch/arm/mach-shmobile/board-mackerel.c +2 −1
  105. arch/arm/mach-shmobile/board-marzen.c +1 −1
  106. arch/arm/mach-shmobile/intc-sh73a0.c +2 −2
  107. arch/arm/mach-ux500/Kconfig +0 −1
  108. arch/arm/mach-ux500/board-mop500-msp.c +5 −5
  109. arch/arm/mach-ux500/board-mop500.c +4 −0
  110. arch/arm/mm/dma-mapping.c +104 −10
  111. arch/arm/plat-omap/common.c +0 −40
  112. arch/arm/plat-omap/counter_32k.c +0 −1
  113. arch/arm/plat-omap/debug-devices.c +0 −3
  114. arch/arm/plat-omap/devices.c +0 −1
  115. arch/arm/plat-omap/dmtimer.c +3 −3
  116. arch/arm/plat-omap/fb.c +0 −2
  117. arch/arm/plat-omap/include/plat/board.h +0 −138
  118. arch/arm/plat-omap/include/plat/cpu.h +2 −1
  119. arch/arm/plat-omap/include/plat/debug-devices.h +9 −0
  120. arch/arm/plat-omap/include/plat/gpmc.h +19 −0
  121. arch/arm/plat-omap/include/plat/mmc.h +0 −1
  122. arch/arm/plat-omap/include/plat/multi.h +9 −0
  123. arch/arm/plat-omap/include/plat/nand.h +1 −1
  124. arch/arm/plat-omap/include/plat/uncompress.h +1 −3
  125. arch/arm/plat-omap/include/plat/usb.h +0 −1
  126. arch/arm/plat-omap/sram.c +0 −1
  127. arch/arm/plat-orion/common.c +6 −2
  128. arch/arm/plat-orion/include/plat/common.h +4 −2
  129. arch/arm/plat-s3c24xx/dma.c +1 −1
  130. arch/arm/plat-samsung/devs.c +28 −1
  131. arch/arm/plat-samsung/include/plat/hdmi.h +16 −0
  132. arch/arm/plat-samsung/pm.c +1 −1
  133. arch/mips/Kconfig +1 −0
  134. arch/mips/alchemy/board-mtx1.c +2 −0
  135. arch/mips/ath79/dev-usb.c +2 −0
  136. arch/mips/ath79/gpio.c +4 −2
  137. arch/mips/bcm63xx/dev-spi.c +4 −0
  138. arch/mips/cavium-octeon/octeon-irq.c +43 −46
  139. arch/mips/include/asm/mach-ath79/ar71xx_regs.h +2 −1
  140. arch/mips/include/asm/mach-ath79/cpu-feature-overrides.h +0 −1
  141. arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_spi.h +2 −0
  142. arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h +10 −3
  143. arch/mips/include/asm/mach-cavium-octeon/irq.h +1 −9
  144. arch/mips/include/asm/module.h +1 −0
  145. arch/mips/include/asm/r4k-timer.h +4 −4
  146. arch/mips/kernel/module.c +34 −9
  147. arch/mips/kernel/smp.c +2 −2
  148. arch/mips/kernel/sync-r4k.c +11 −15
  149. arch/mips/mti-malta/malta-pci.c +0 −13
  150. arch/mips/pci/pci-ar724x.c +22 −0
  151. arch/parisc/include/asm/atomic.h +2 −2
  152. arch/parisc/kernel/process.c +1 −1
  153. arch/parisc/kernel/sys_parisc.c +4 −4
  154. arch/powerpc/boot/dts/fsl/p4080si-post.dtsi +7 −0
  155. arch/powerpc/configs/85xx/p1023rds_defconfig +10 −21
  156. arch/powerpc/configs/corenet32_smp_defconfig +9 −20
  157. arch/powerpc/configs/corenet64_smp_defconfig +1 −0
  158. arch/powerpc/configs/g5_defconfig +73 −30
  159. arch/powerpc/configs/mpc83xx_defconfig +5 −13
  160. arch/powerpc/configs/mpc85xx_defconfig +9 −24
  161. arch/powerpc/configs/mpc85xx_smp_defconfig +8 −24
  162. arch/powerpc/include/asm/cputable.h +0 −2
  163. arch/powerpc/include/asm/kvm_host.h +1 −0
  164. arch/powerpc/include/asm/kvm_ppc.h +12 −0
  165. arch/powerpc/include/asm/mpic_msgr.h +1 −0
  166. arch/powerpc/include/asm/processor.h +1 −0
  167. arch/powerpc/kernel/asm-offsets.c +1 −0
  168. arch/powerpc/kernel/dbell.c +2 −0
  169. arch/powerpc/kernel/dma-iommu.c +4 −5
  170. arch/powerpc/kernel/entry_64.S +17 −6
  171. arch/powerpc/kernel/exceptions-64s.S +2 −1
  172. arch/powerpc/kernel/hw_breakpoint.c +1 −1
  173. arch/powerpc/kernel/idle_power7.S +2 −0
  174. arch/powerpc/kernel/kgdb.c +24 −3
  175. arch/powerpc/kernel/process.c +2 −10
  176. arch/powerpc/kernel/smp.c +9 −2
  177. arch/powerpc/kernel/syscalls.c +4 −4
  178. arch/powerpc/kernel/sysfs.c +10 −0
  179. arch/powerpc/kernel/time.c +9 −0
  180. arch/powerpc/kernel/traps.c +2 −1
  181. arch/powerpc/kvm/book3s_32_mmu_host.c +3 −0
  182. arch/powerpc/kvm/book3s_64_mmu_host.c +2 −0
  183. arch/powerpc/kvm/book3s_hv_rmhandlers.S +7 −5
  184. arch/powerpc/kvm/e500_tlb.c +7 −4
  185. arch/powerpc/lib/code-patching.c +1 −1
  186. arch/powerpc/lib/copyuser_power7.S +2 −33
  187. arch/powerpc/lib/memcpy_power7.S +2 −2
  188. arch/powerpc/mm/mem.c +1 −0
  189. arch/powerpc/mm/numa.c +4 −3
  190. arch/powerpc/perf/core-book3s.c +1 −1
  191. arch/powerpc/platforms/powernv/smp.c +1 −9
  192. arch/powerpc/sysdev/fsl_pci.c +8 −5
  193. arch/powerpc/sysdev/mpic_msgr.c +3 −0
  194. arch/powerpc/sysdev/xics/icp-hv.c +5 −1
  195. arch/powerpc/xmon/xmon.c +34 −50
  196. arch/s390/include/asm/elf.h +2 −1
  197. arch/s390/include/asm/posix_types.h +1 −2
  198. arch/s390/include/asm/smp.h +1 −0
  199. arch/um/os-Linux/time.c +1 −1
  200. arch/x86/include/asm/spinlock.h +1 −2
  201. arch/x86/kernel/alternative.c +1 −1
  202. arch/x86/kernel/irq.c +1 −1
  203. arch/x86/kernel/microcode_amd.c +4 −3
  204. arch/x86/kvm/emulate.c +21 −9
  205. arch/x86/kvm/mmu.c +9 −4
  206. arch/x86/kvm/x86.c +4 −1
  207. arch/x86/xen/enlighten.c +11 −107
  208. arch/x86/xen/mmu.c +1 −1
  209. arch/x86/xen/p2m.c +92 −3
  210. arch/x86/xen/setup.c +8 −1
  211. arch/x86/xen/suspend.c +1 −1
  212. arch/x86/xen/xen-ops.h +1 −1
  213. block/blk-lib.c +28 −13
  214. block/blk-merge.c +82 −35
  215. block/genhd.c +1 −1
  216. drivers/ata/Kconfig +1 −1
  217. drivers/ata/ahci.c +8 −0
  218. drivers/ata/ahci.h +1 −0
  219. drivers/ata/ata_piix.c +8 −0
  220. drivers/ata/libahci.c +2 −1
  221. drivers/ata/libata-acpi.c +4 −11
  222. drivers/ata/libata-core.c +2 −1
  223. drivers/ata/pata_atiixp.c +16 −0
  224. drivers/base/dma-contiguous.c +1 −1
  225. drivers/block/drbd/drbd_bitmap.c +14 −1
  226. drivers/block/drbd/drbd_int.h +1 −0
  227. drivers/block/drbd/drbd_main.c +12 −16
  228. drivers/block/drbd/drbd_nl.c +2 −2
  229. drivers/block/drbd/drbd_req.c +32 −4
  230. drivers/cpufreq/omap-cpufreq.c +3 −1
  231. drivers/crypto/caam/jr.c +5 −5
  232. drivers/crypto/hifn_795x.c +2 −2
  233. drivers/gpio/Kconfig +1 −1
  234. drivers/gpio/gpio-em.c +2 −2
  235. drivers/gpio/gpio-rdc321x.c +1 −0
  236. drivers/gpio/gpiolib-of.c +1 −1
  237. drivers/gpu/drm/drm_crtc.c +1 −1
  238. drivers/gpu/drm/drm_edid.c +3 −0
  239. drivers/gpu/drm/gma500/psb_intel_display.c +3 −0
  240. drivers/gpu/drm/i915/i915_gem_gtt.c +1 −1
  241. drivers/gpu/drm/i915/intel_display.c +6 −6
  242. drivers/gpu/drm/i915/intel_lvds.c +8 −0
  243. drivers/gpu/drm/i915/intel_sprite.c +2 −2
  244. drivers/gpu/drm/nouveau/nouveau_state.c +4 −2
  245. drivers/gpu/drm/radeon/atombios_crtc.c +16 −20
  246. drivers/gpu/drm/radeon/atombios_dp.c +12 −17
  247. drivers/gpu/drm/radeon/atombios_encoders.c +73 −67
  248. drivers/gpu/drm/radeon/r600_cs.c +26 −4
  249. drivers/gpu/drm/radeon/r600d.h +8 −0
  250. drivers/gpu/drm/radeon/radeon_device.c +4 −1
  251. drivers/gpu/drm/radeon/radeon_drv.c +2 −1
  252. drivers/gpu/drm/radeon/reg_srcs/r600 +0 −1
  253. drivers/hid/hid-core.c +5 −3
  254. drivers/hid/hid-logitech-dj.c +2 −2
  255. drivers/hid/usbhid/hid-quirks.c +1 −0
  256. drivers/hwmon/asus_atk0110.c +6 −0
  257. drivers/ide/ide-pm.c +2 −2
  258. drivers/input/keyboard/imx_keypad.c +3 −0
  259. drivers/input/serio/i8042-x86ia64io.h +14 −0
  260. drivers/input/tablet/wacom_wac.c +5 −1
  261. drivers/input/touchscreen/edt-ft5x06.c +1 −1
  262. drivers/mmc/card/block.c +25 −1
  263. drivers/mmc/host/atmel-mci.c +5 −1
  264. drivers/mmc/host/bfin_sdh.c +0 −7
  265. drivers/mmc/host/dw_mmc.c +46 −39
  266. drivers/mmc/host/mxs-mmc.c +7 −7
  267. drivers/mmc/host/omap.c +11 −4
  268. drivers/mmc/host/omap_hsmmc.c +0 −1
  269. drivers/mmc/host/sdhci-esdhc.h +3 −3
  270. drivers/mtd/nand/omap2.c +225 −76
  271. drivers/mtd/onenand/omap2.c +16 −15
  272. drivers/mtd/ubi/vtbl.c +2 −2
  273. drivers/net/can/sja1000/sja1000_platform.c +3 −1
  274. drivers/net/can/softing/softing_fw.c +4 −3
  275. drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +0 −3
  276. drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +4 −0
  277. drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h +2 −2
  278. drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c +0 −2
  279. drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +9 −9
  280. drivers/net/ethernet/cirrus/cs89x0.c +5 −5
  281. drivers/net/ethernet/emulex/benet/be_cmds.c +4 −2
  282. drivers/net/ethernet/emulex/benet/be_main.c +2 −0
  283. drivers/net/ethernet/freescale/gianfar.c +1 −1
  284. drivers/net/ethernet/intel/e1000e/e1000.h +1 −0
  285. drivers/net/ethernet/intel/e1000e/netdev.c +23 −25
  286. drivers/net/ethernet/sfc/ethtool.c +2 −2
  287. drivers/net/ethernet/stmicro/stmmac/common.h +5 −0
  288. drivers/net/ethernet/stmicro/stmmac/descs.h +6 −0
  289. drivers/net/ethernet/stmicro/stmmac/descs_com.h +5 −0
  290. drivers/net/ethernet/stmicro/stmmac/dwmac100.h +5 −0
  291. drivers/net/ethernet/stmicro/stmmac/dwmac1000.h +4 −1
  292. drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h +5 −0
  293. drivers/net/ethernet/stmicro/stmmac/mmc.h +5 −0
  294. drivers/net/ethernet/stmicro/stmmac/mmc_core.c +3 −3
  295. drivers/net/ethernet/stmicro/stmmac/stmmac.h +5 −0
  296. drivers/net/ethernet/stmicro/stmmac/stmmac_timer.h +4 −0
  297. drivers/net/ethernet/ti/davinci_mdio.c +3 −1
  298. drivers/net/fddi/skfp/pmf.c +1 −1
  299. drivers/net/usb/qmi_wwan.c +4 −0
  300. drivers/net/usb/usbnet.c +1 −1
  301. drivers/net/wireless/ath/ath5k/eeprom.c +1 −1
  302. drivers/net/wireless/ath/ath5k/eeprom.h +1 −0
  303. drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +3 −0
  304. drivers/net/wireless/ipw2x00/ipw2100.c +2 −1
  305. drivers/net/wireless/iwlwifi/dvm/debugfs.c +3 −0
  306. drivers/net/wireless/iwlwifi/pcie/internal.h +1 −1
  307. drivers/net/wireless/iwlwifi/pcie/rx.c +1 −1
  308. drivers/net/wireless/iwlwifi/pcie/trans.c +16 −14
  309. drivers/net/xen-netfront.c +10 −29
  310. drivers/pci/pci-driver.c +6 −0
  311. drivers/pci/pci-sysfs.c +42 −0
  312. drivers/pci/pci.c +1 −0
  313. drivers/pci/pcie/portdrv_pci.c +14 −0
  314. drivers/pci/probe.c +17 −14
  315. drivers/rtc/rtc-at91sam9.c +15 −7
  316. drivers/s390/block/dasd_eckd.c +1 −1
  317. drivers/s390/block/dasd_ioctl.c +2 −5
  318. drivers/spi/spi-bcm63xx.c +26 −5
  319. drivers/video/auo_k190x.c +0 −2
  320. drivers/video/backlight/omap1_bl.c +1 −1
  321. drivers/video/console/bitblit.c +1 −1
  322. drivers/video/console/fbcon.c +1 −1
  323. drivers/video/mb862xx/mb862xxfbdrv.c +2 −0
  324. drivers/video/omap2/dss/sdi.c +14 −0
  325. drivers/video/omap2/omapfb/omapfb-main.c +1 −1
  326. drivers/watchdog/booke_wdt.c +3 −4
  327. drivers/watchdog/da9052_wdt.c +0 −1
  328. drivers/xen/platform-pci.c +0 −15
  329. drivers/xen/swiotlb-xen.c +1 −1
  330. drivers/xen/xen-pciback/pci_stub.c +4 −4
  331. fs/bio.c +6 −5
  332. fs/block_dev.c +3 −0
  333. fs/btrfs/backref.c +2 −2
  334. fs/btrfs/compression.c +1 −0
  335. fs/btrfs/ctree.c +3 −6
  336. fs/btrfs/ctree.h +1 −2
  337. fs/btrfs/delayed-inode.c +6 −6
  338. fs/btrfs/delayed-ref.c +128 −35
  339. fs/btrfs/delayed-ref.h +4 −0
  340. fs/btrfs/disk-io.c +14 −39
  341. fs/btrfs/disk-io.h +1 −1
  342. fs/btrfs/extent-tree.c +58 −65
  343. fs/btrfs/extent_io.c +2 −15
  344. fs/btrfs/file-item.c +2 −2
  345. fs/btrfs/inode.c +164 −162
  346. fs/btrfs/ioctl.c +1 −1
  347. fs/btrfs/locking.c +1 −1
  348. fs/btrfs/qgroup.c +9 −3
  349. fs/btrfs/root-tree.c +2 −2
  350. fs/btrfs/super.c +11 −4
  351. fs/btrfs/transaction.c +2 −1
  352. fs/btrfs/volumes.c +6 −27
  353. fs/btrfs/volumes.h +0 −2
  354. fs/buffer.c +30 −36
  355. fs/cifs/cifssmb.c +8 −3
  356. fs/cifs/dir.c +1 −8
  357. fs/cifs/inode.c +16 −8
  358. fs/cifs/link.c +2 −0
  359. fs/cifs/smb2misc.c +9 −7
  360. fs/cifs/smb2pdu.h +6 −4
  361. fs/cifs/transport.c +6 −3
  362. fs/direct-io.c +5 −0
  363. fs/jbd/journal.c +5 −0
  364. fs/logfs/dev_bdev.c +7 −8
  365. fs/logfs/inode.c +17 −1
  366. fs/logfs/journal.c +1 −1
  367. fs/logfs/readwrite.c +0 −1
  368. fs/logfs/segment.c +1 −1
  369. fs/nfsd/nfs4callback.c +2 −2
  370. fs/nfsd/state.h +0 −1
  371. fs/quota/dquot.c +1 −1
  372. fs/reiserfs/bitmap.c +0 −2
  373. fs/reiserfs/inode.c +1 −1
  374. fs/ubifs/debug.h +1 −1
  375. fs/ubifs/lpt.c +4 −1
  376. fs/ubifs/recovery.c +1 −1
  377. fs/ubifs/replay.c +1 −2
  378. fs/ubifs/super.c +0 −3
  379. fs/udf/inode.c +4 −1
  380. fs/udf/super.c +6 −1
  381. fs/xfs/xfs_discard.c +4 −2
  382. fs/xfs/xfs_ialloc.c +9 −8
  383. fs/xfs/xfs_rtalloc.c +1 −1
  384. include/drm/drm_crtc.h +2 −1
  385. include/drm/drm_mode.h +3 −2
  386. include/linux/blkdev.h +13 −1
  387. include/linux/cpuidle.h +4 −0
  388. include/linux/kernel.h +10 −2
  389. include/linux/ktime.h +0 −7
  390. include/linux/mmc/card.h +1 −0
  391. include/linux/mv643xx_eth.h +2 −0
  392. include/linux/omapfb.h +6 −1
  393. include/linux/pci_ids.h +1 −1
  394. include/linux/platform_data/omap1_bl.h +11 −0
  395. include/linux/time.h +27 −2
  396. include/net/netfilter/nf_conntrack_ecache.h +1 −0
  397. include/xen/events.h +0 −2
  398. kernel/fork.c +2 −2
  399. kernel/time/timekeeping.c +33 −6
  400. kernel/trace/trace_syscalls.c +4 −0
  401. mm/filemap.c +0 −7
  402. mm/mempolicy.c +1 −1
  403. mm/mmap.c +2 −3
  404. mm/slab.c +1 −0
  405. net/core/netpoll.c +1 −9
  406. net/ipv4/ipmr.c +12 −2
  407. net/ipv4/netfilter/nf_nat_sip.c +4 −1
  408. net/ipv4/route.c +4 −2
  409. net/ipv4/tcp_input.c +7 −8
  410. net/ipv6/esp6.c +3 −3
  411. net/l2tp/l2tp_core.c +1 −2
  412. net/l2tp/l2tp_core.h +1 −0
  413. net/mac80211/tx.c +16 −22
  414. net/netfilter/ipvs/ip_vs_ctl.c +3 −1
  415. net/netfilter/nf_conntrack_core.c +11 −5
  416. net/netfilter/nf_conntrack_netlink.c +2 −1
  417. net/netfilter/nfnetlink_log.c +4 −2
  418. net/netlink/af_netlink.c +3 −1
  419. net/packet/af_packet.c +1 −1
  420. net/socket.c +2 −2
  421. net/sunrpc/svc_xprt.c +4 −6
  422. net/sunrpc/svcsock.c +1 −1
  423. net/xfrm/xfrm_state.c +3 −1
  424. scripts/Makefile.fwinst +1 −1
  425. scripts/link-vmlinux.sh +1 −1
  426. sound/pci/hda/hda_codec.c +8 −2
  427. sound/pci/hda/hda_codec.h +1 −0
  428. sound/pci/hda/patch_sigmatel.c +4 −0
  429. sound/usb/card.c +2 −2
  430. sound/usb/endpoint.c +10 −14
  431. sound/usb/endpoint.h +2 −1
  432. sound/usb/pcm.c +52 −12
  433. tools/perf/util/python-ext-sources +2 −0
  434. virt/kvm/kvm_main.c +4 −3
Documentation/ABI/testing/sysfs-bus-pci+12−0
@@ -210,3 +210,15 @@ Users: · 209 unmodified lines
210 firmware assigned instance number of the PCI210 firmware assigned instance number of the PCI
211 device that can help in understanding the firmware211 device that can help in understanding the firmware
212 intended order of the PCI device.212 intended order of the PCI device.
213
214What: /sys/bus/pci/devices/.../d3cold_allowed
215Date: July 2012
216Contact: Huang Ying <ying.huang@intel.com>
217Description:
218 d3cold_allowed is bit to control whether the corresponding PCI
219 device can be put into D3Cold state. If it is cleared, the
220 device will never be put into D3Cold state. If it is set, the
221 device may be put into D3Cold state if other requirements are
222 satisfied too. Reading this attribute will show the current
223 value of d3cold_allowed bit. Writing this attribute will set
224 the value of d3cold_allowed bit.
Documentation/block/00-INDEX+8−2
@@ -3,15 +3,21 @@ · 2 unmodified lines
3biodoc.txt3biodoc.txt
4 - Notes on the Generic Block Layer Rewrite in Linux 2.54 - Notes on the Generic Block Layer Rewrite in Linux 2.5
5capability.txt5capability.txt
6 - Generic Block Device Capability (/sys/block/<disk>/capability)6 - Generic Block Device Capability (/sys/block/<device>/capability)
7cfq-iosched.txt
8 - CFQ IO scheduler tunables
9data-integrity.txt
10 - Block data integrity
7deadline-iosched.txt11deadline-iosched.txt
8 - Deadline IO scheduler tunables12 - Deadline IO scheduler tunables
9ioprio.txt13ioprio.txt
10 - Block io priorities (in CFQ scheduler)14 - Block io priorities (in CFQ scheduler)
15queue-sysfs.txt
16 - Queue's sysfs entries
11request.txt17request.txt
12 - The members of struct request (in include/linux/blkdev.h)18 - The members of struct request (in include/linux/blkdev.h)
13stat.txt19stat.txt
14 - Block layer statistics in /sys/block/<dev>/stat20 - Block layer statistics in /sys/block/<device>/stat
15switching-sched.txt21switching-sched.txt
16 - Switching I/O schedulers at runtime22 - Switching I/O schedulers at runtime
17writeback_cache_control.txt23writeback_cache_control.txt
Documentation/block/cfq-iosched.txt+77−0
@@ -1,3 +1,14 @@
1CFQ (Complete Fairness Queueing)
2===============================
3
4The main aim of CFQ scheduler is to provide a fair allocation of the disk
5I/O bandwidth for all the processes which requests an I/O operation.
6
7CFQ maintains the per process queue for the processes which request I/O
8operation(syncronous requests). In case of asynchronous requests, all the
9requests from all the processes are batched together according to their
10process's I/O priority.
11
1CFQ ioscheduler tunables12CFQ ioscheduler tunables
2========================13========================
3 14
@@ -25,6 +36,72 @@ there are multiple spindles behind single LUN (Host based hardware RAID · 21 unmodified lines
25controller or for storage arrays), setting slice_idle=0 might end up in better36controller or for storage arrays), setting slice_idle=0 might end up in better
26throughput and acceptable latencies.37throughput and acceptable latencies.
27 38
39back_seek_max
40-------------
41This specifies, given in Kbytes, the maximum "distance" for backward seeking.
42The distance is the amount of space from the current head location to the
43sectors that are backward in terms of distance.
44
45This parameter allows the scheduler to anticipate requests in the "backward"
46direction and consider them as being the "next" if they are within this
47distance from the current head location.
48
49back_seek_penalty
50-----------------
51This parameter is used to compute the cost of backward seeking. If the
52backward distance of request is just 1/back_seek_penalty from a "front"
53request, then the seeking cost of two requests is considered equivalent.
54
55So scheduler will not bias toward one or the other request (otherwise scheduler
56will bias toward front request). Default value of back_seek_penalty is 2.
57
58fifo_expire_async
59-----------------
60This parameter is used to set the timeout of asynchronous requests. Default
61value of this is 248ms.
62
63fifo_expire_sync
64----------------
65This parameter is used to set the timeout of synchronous requests. Default
66value of this is 124ms. In case to favor synchronous requests over asynchronous
67one, this value should be decreased relative to fifo_expire_async.
68
69slice_async
70-----------
71This parameter is same as of slice_sync but for asynchronous queue. The
72default value is 40ms.
73
74slice_async_rq
75--------------
76This parameter is used to limit the dispatching of asynchronous request to
77device request queue in queue's slice time. The maximum number of request that
78are allowed to be dispatched also depends upon the io priority. Default value
79for this is 2.
80
81slice_sync
82----------
83When a queue is selected for execution, the queues IO requests are only
84executed for a certain amount of time(time_slice) before switching to another
85queue. This parameter is used to calculate the time slice of synchronous
86queue.
87
88time_slice is computed using the below equation:-
89time_slice = slice_sync + (slice_sync/5 * (4 - prio)). To increase the
90time_slice of synchronous queue, increase the value of slice_sync. Default
91value is 100ms.
92
93quantum
94-------
95This specifies the number of request dispatched to the device queue. In a
96queue's time slice, a request will not be dispatched if the number of request
97in the device exceeds this parameter. This parameter is used for synchronous
98request.
99
100In case of storage with several disk, this setting can limit the parallel
101processing of request. Therefore, increasing the value can imporve the
102performace although this can cause the latency of some I/O to increase due
103to more number of requests.
104
28CFQ IOPS Mode for group scheduling105CFQ IOPS Mode for group scheduling
29===================================106===================================
30Basic CFQ design is to provide priority based time slices. Higher priority107Basic CFQ design is to provide priority based time slices. Higher priority
Documentation/block/queue-sysfs.txt+64−0
@@ -9,20 +9,71 @@ These files are the ones found in the /sys/block/xxx/queue/ directory. · 8 unmodified lines
9Files denoted with a RO postfix are readonly and the RW postfix means9Files denoted with a RO postfix are readonly and the RW postfix means
10read-write.10read-write.
11 11
12add_random (RW)
13----------------
14This file allows to trun off the disk entropy contribution. Default
15value of this file is '1'(on).
16
17discard_granularity (RO)
18-----------------------
19This shows the size of internal allocation of the device in bytes, if
20reported by the device. A value of '0' means device does not support
21the discard functionality.
22
23discard_max_bytes (RO)
24----------------------
25Devices that support discard functionality may have internal limits on
26the number of bytes that can be trimmed or unmapped in a single operation.
27The discard_max_bytes parameter is set by the device driver to the maximum
28number of bytes that can be discarded in a single operation. Discard
29requests issued to the device must not exceed this limit. A discard_max_bytes
30value of 0 means that the device does not support discard functionality.
31
32discard_zeroes_data (RO)
33------------------------
34When read, this file will show if the discarded block are zeroed by the
35device or not. If its value is '1' the blocks are zeroed otherwise not.
36
12hw_sector_size (RO)37hw_sector_size (RO)
13-------------------38-------------------
14This is the hardware sector size of the device, in bytes.39This is the hardware sector size of the device, in bytes.
15 40
41iostats (RW)
42-------------
43This file is used to control (on/off) the iostats accounting of the
44disk.
45
46logical_block_size (RO)
47-----------------------
48This is the logcal block size of the device, in bytes.
49
16max_hw_sectors_kb (RO)50max_hw_sectors_kb (RO)
17----------------------51----------------------
18This is the maximum number of kilobytes supported in a single data transfer.52This is the maximum number of kilobytes supported in a single data transfer.
19 53
54max_integrity_segments (RO)
55---------------------------
56When read, this file shows the max limit of integrity segments as
57set by block layer which a hardware controller can handle.
58
20max_sectors_kb (RW)59max_sectors_kb (RW)
21-------------------60-------------------
22This is the maximum number of kilobytes that the block layer will allow61This is the maximum number of kilobytes that the block layer will allow
23for a filesystem request. Must be smaller than or equal to the maximum62for a filesystem request. Must be smaller than or equal to the maximum
24size allowed by the hardware.63size allowed by the hardware.
25 64
65max_segments (RO)
66-----------------
67Maximum number of segments of the device.
68
69max_segment_size (RO)
70---------------------
71Maximum segment size of the device.
72
73minimum_io_size (RO)
74--------------------
75This is the smallest preferred io size reported by the device.
76
26nomerges (RW)77nomerges (RW)
27-------------78-------------
28This enables the user to disable the lookup logic involved with IO79This enables the user to disable the lookup logic involved with IO
@@ -45,11 +96,24 @@ per-block-cgroup request pool. IOW, if there are N block cgroups, · 16 unmodified lines
45each request queue may have upto N request pools, each independently96each request queue may have upto N request pools, each independently
46regulated by nr_requests.97regulated by nr_requests.
47 98
99optimal_io_size (RO)
100--------------------
101This is the optimal io size reported by the device.
102
103physical_block_size (RO)
104------------------------
105This is the physical block size of device, in bytes.
106
48read_ahead_kb (RW)107read_ahead_kb (RW)
49------------------108------------------
50Maximum number of kilobytes to read-ahead for filesystems on this block109Maximum number of kilobytes to read-ahead for filesystems on this block
51device.110device.
52 111
112rotational (RW)
113---------------
114This file is used to stat if the device is of rotational type or
115non-rotational type.
116
53rq_affinity (RW)117rq_affinity (RW)
54----------------118----------------
55If this option is '1', the block layer will migrate request completions to the119If this option is '1', the block layer will migrate request completions to the
Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt+4−4
@@ -10,8 +10,8 @@ Required properties: · 9 unmodified lines
10- compatible : Should be "fsl,<chip>-esdhc"10- compatible : Should be "fsl,<chip>-esdhc"
11 11
12Optional properties:12Optional properties:
13- fsl,cd-internal : Indicate to use controller internal card detection13- fsl,cd-controller : Indicate to use controller internal card detection
14- fsl,wp-internal : Indicate to use controller internal write protection14- fsl,wp-controller : Indicate to use controller internal write protection
15 15
16Examples:16Examples:
17 17
@@ -19,8 +19,8 @@ esdhc@70004000 { · 1 unmodified line
19 compatible = "fsl,imx51-esdhc";19 compatible = "fsl,imx51-esdhc";
20 reg = <0x70004000 0x4000>;20 reg = <0x70004000 0x4000>;
21 interrupts = <1>;21 interrupts = <1>;
22 fsl,cd-internal;22 fsl,cd-controller;
23 fsl,wp-internal;23 fsl,wp-controller;
24};24};
25 25
26esdhc@70008000 {26esdhc@70008000 {
Documentation/feature-removal-schedule.txt+1−1
@@ -579,7 +579,7 @@ Why: KVM tracepoints provide mostly equivalent information in a much more · 578 unmodified lines
579----------------------------579----------------------------
580 580
581What: at91-mci driver ("CONFIG_MMC_AT91")581What: at91-mci driver ("CONFIG_MMC_AT91")
582When: 3.7582When: 3.8
583Why: There are two mci drivers: at91-mci and atmel-mci. The PDC support583Why: There are two mci drivers: at91-mci and atmel-mci. The PDC support
584 was added to atmel-mci as a first step to support more chips.584 was added to atmel-mci as a first step to support more chips.
585 Then at91-mci was kept only for old IP versions (on at91rm9200 and585 Then at91-mci was kept only for old IP versions (on at91rm9200 and
Documentation/watchdog/src/watchdog-test.c+1−1
@@ -31,7 +31,7 @@ static void keep_alive(void) · 30 unmodified lines
31 * or "-e" to enable the card.31 * or "-e" to enable the card.
32 */32 */
33 33
34void term(int sig)34static void term(int sig)
35{35{
36 close(fd);36 close(fd);
37 fprintf(stderr, "Stopping watchdog ticks...\n");37 fprintf(stderr, "Stopping watchdog ticks...\n");
Makefile+1−1
@@ -1,7 +1,7 @@
1VERSION = 31VERSION = 3
2PATCHLEVEL = 62PATCHLEVEL = 6
3SUBLEVEL = 03SUBLEVEL = 0
4EXTRAVERSION = -rc34EXTRAVERSION = -rc5
5NAME = Saber-toothed Squirrel5NAME = Saber-toothed Squirrel
6 6
7# *DOCUMENTATION*7# *DOCUMENTATION*
arch/arm/Kconfig+2−1
@@ -6,7 +6,7 @@ config ARM · 5 unmodified lines
6 select HAVE_DMA_API_DEBUG6 select HAVE_DMA_API_DEBUG
7 select HAVE_IDE if PCI || ISA || PCMCIA7 select HAVE_IDE if PCI || ISA || PCMCIA
8 select HAVE_DMA_ATTRS8 select HAVE_DMA_ATTRS
9 select HAVE_DMA_CONTIGUOUS if (CPU_V6 || CPU_V6K || CPU_V7)9 select HAVE_DMA_CONTIGUOUS if MMU
10 select HAVE_MEMBLOCK10 select HAVE_MEMBLOCK
11 select RTC_LIB11 select RTC_LIB
12 select SYS_SUPPORTS_APM_EMULATION12 select SYS_SUPPORTS_APM_EMULATION
@@ -2144,6 +2144,7 @@ source "drivers/cpufreq/Kconfig" · 2131 unmodified lines
2144config CPU_FREQ_IMX2144config CPU_FREQ_IMX
2145 tristate "CPUfreq driver for i.MX CPUs"2145 tristate "CPUfreq driver for i.MX CPUs"
2146 depends on ARCH_MXC && CPU_FREQ2146 depends on ARCH_MXC && CPU_FREQ
2147 select CPU_FREQ_TABLE
2147 help2148 help
2148 This enables the CPUfreq driver for i.MX CPUs.2149 This enables the CPUfreq driver for i.MX CPUs.
2149 2150
arch/arm/boot/dts/am33xx.dtsi+5−0
@@ -154,5 +154,10 @@ · 153 unmodified lines
154 #size-cells = <0>;154 #size-cells = <0>;
155 ti,hwmods = "i2c3";155 ti,hwmods = "i2c3";
156 };156 };
157
158 wdt2: wdt@44e35000 {
159 compatible = "ti,omap3-wdt";
160 ti,hwmods = "wd_timer2";
161 };
157 };162 };
158};163};
arch/arm/boot/dts/at91sam9g25ek.dts+1−1
@@ -15,7 +15,7 @@ · 14 unmodified lines
15 compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9";15 compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9";
16 16
17 chosen {17 chosen {
18 bootargs = "128M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs";18 bootargs = "console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs";
19 };19 };
20 20
21 ahb {21 ahb {
arch/arm/boot/dts/imx51-babbage.dts+2−2
@@ -25,8 +25,8 @@ · 24 unmodified lines
25 aips@70000000 { /* aips-1 */25 aips@70000000 { /* aips-1 */
26 spba@70000000 {26 spba@70000000 {
27 esdhc@70004000 { /* ESDHC1 */27 esdhc@70004000 { /* ESDHC1 */
28 fsl,cd-internal;28 fsl,cd-controller;
29 fsl,wp-internal;29 fsl,wp-controller;
30 status = "okay";30 status = "okay";
31 };31 };
32 32
arch/arm/boot/dts/kirkwood-iconnect.dts+5−1
@@ -41,9 +41,13 @@ · 40 unmodified lines
41 };41 };
42 power-blue {42 power-blue {
43 label = "power:blue";43 label = "power:blue";
44 gpios = <&gpio1 11 0>;44 gpios = <&gpio1 10 0>;
45 linux,default-trigger = "timer";45 linux,default-trigger = "timer";
46 };46 };
47 power-red {
48 label = "power:red";
49 gpios = <&gpio1 11 0>;
50 };
47 usb1 {51 usb1 {
48 label = "usb1:blue";52 label = "usb1:blue";
49 gpios = <&gpio1 12 0>;53 gpios = <&gpio1 12 0>;
arch/arm/boot/dts/twl6030.dtsi+3−0
@@ -66,6 +66,7 @@ · 65 unmodified lines
66 66
67 vcxio: regulator@8 {67 vcxio: regulator@8 {
68 compatible = "ti,twl6030-vcxio";68 compatible = "ti,twl6030-vcxio";
69 regulator-always-on;
69 };70 };
70 71
71 vusb: regulator@9 {72 vusb: regulator@9 {
@@ -74,10 +75,12 @@ · 2 unmodified lines
74 75
75 v1v8: regulator@10 {76 v1v8: regulator@10 {
76 compatible = "ti,twl6030-v1v8";77 compatible = "ti,twl6030-v1v8";
78 regulator-always-on;
77 };79 };
78 80
79 v2v1: regulator@11 {81 v2v1: regulator@11 {
80 compatible = "ti,twl6030-v2v1";82 compatible = "ti,twl6030-v2v1";
83 regulator-always-on;
81 };84 };
82 85
83 clk32kg: regulator@12 {86 clk32kg: regulator@12 {
arch/arm/configs/armadillo800eva_defconfig+1−1
@@ -33,7 +33,7 @@ CONFIG_AEABI=y · 32 unmodified lines
33CONFIG_FORCE_MAX_ZONEORDER=1333CONFIG_FORCE_MAX_ZONEORDER=13
34CONFIG_ZBOOT_ROM_TEXT=0x034CONFIG_ZBOOT_ROM_TEXT=0x0
35CONFIG_ZBOOT_ROM_BSS=0x035CONFIG_ZBOOT_ROM_BSS=0x0
36CONFIG_CMDLINE="console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096"36CONFIG_CMDLINE="console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096 rw"
37CONFIG_CMDLINE_FORCE=y37CONFIG_CMDLINE_FORCE=y
38CONFIG_KEXEC=y38CONFIG_KEXEC=y
39CONFIG_VFP=y39CONFIG_VFP=y
arch/arm/configs/u8500_defconfig+1−0
@@ -86,6 +86,7 @@ CONFIG_NEW_LEDS=y · 85 unmodified lines
86CONFIG_LEDS_CLASS=y86CONFIG_LEDS_CLASS=y
87CONFIG_LEDS_LM3530=y87CONFIG_LEDS_LM3530=y
88CONFIG_LEDS_LP5521=y88CONFIG_LEDS_LP5521=y
89CONFIG_LEDS_GPIO=y
89CONFIG_RTC_CLASS=y90CONFIG_RTC_CLASS=y
90CONFIG_RTC_DRV_AB8500=y91CONFIG_RTC_DRV_AB8500=y
91CONFIG_RTC_DRV_PL031=y92CONFIG_RTC_DRV_PL031=y
arch/arm/include/asm/dma-mapping.h+7−0
@@ -202,6 +202,13 @@ static inline void dma_free_writecombine(struct device *dev, size_t size, · 201 unmodified lines
202 return dma_free_attrs(dev, size, cpu_addr, dma_handle, &attrs);202 return dma_free_attrs(dev, size, cpu_addr, dma_handle, &attrs);
203}203}
204 204
205/*
206 * This can be called during early boot to increase the size of the atomic
207 * coherent DMA pool above the default value of 256KiB. It must be called
208 * before postcore_initcall.
209 */
210extern void __init init_dma_coherent_pool_size(unsigned long size);
211
205/*212/*
206 * This can be called during boot to increase the size of the consistent213 * This can be called during boot to increase the size of the consistent
207 * DMA region above it's default value of 2MB. It must be called before the214 * DMA region above it's default value of 2MB. It must be called before the
arch/arm/mach-at91/at91rm9200_time.c+1−1
@@ -197,7 +197,7 @@ void __init at91rm9200_timer_init(void) · 196 unmodified lines
197 at91_st_read(AT91_ST_SR);197 at91_st_read(AT91_ST_SR);
198 198
199 /* Make IRQs happen for the system timer */199 /* Make IRQs happen for the system timer */
200 setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq);200 setup_irq(NR_IRQS_LEGACY + AT91_ID_SYS, &at91rm9200_timer_irq);
201 201
202 /* The 32KiHz "Slow Clock" (tick every 30517.58 nanoseconds) is used202 /* The 32KiHz "Slow Clock" (tick every 30517.58 nanoseconds) is used
203 * directly for the clocksource and all clockevents, after adjusting203 * directly for the clocksource and all clockevents, after adjusting
arch/arm/mach-at91/at91sam9260_devices.c+5−1
@@ -726,6 +726,8 @@ static struct resource rtt_resources[] = { · 725 unmodified lines
726 .flags = IORESOURCE_MEM,726 .flags = IORESOURCE_MEM,
727 }, {727 }, {
728 .flags = IORESOURCE_MEM,728 .flags = IORESOURCE_MEM,
729 }, {
730 .flags = IORESOURCE_IRQ,
729 },731 },
730};732};
731 733
@@ -744,10 +746,12 @@ static void __init at91_add_device_rtt_rtc(void) · 12 unmodified lines
744 * The second resource is needed:746 * The second resource is needed:
745 * GPBR will serve as the storage for RTC time offset747 * GPBR will serve as the storage for RTC time offset
746 */748 */
747 at91sam9260_rtt_device.num_resources = 2;749 at91sam9260_rtt_device.num_resources = 3;
748 rtt_resources[1].start = AT91SAM9260_BASE_GPBR +750 rtt_resources[1].start = AT91SAM9260_BASE_GPBR +
749 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;751 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;
750 rtt_resources[1].end = rtt_resources[1].start + 3;752 rtt_resources[1].end = rtt_resources[1].start + 3;
753 rtt_resources[2].start = NR_IRQS_LEGACY + AT91_ID_SYS;
754 rtt_resources[2].end = NR_IRQS_LEGACY + AT91_ID_SYS;
751}755}
752#else756#else
753static void __init at91_add_device_rtt_rtc(void)757static void __init at91_add_device_rtt_rtc(void)
arch/arm/mach-at91/at91sam9261_devices.c+5−1
@@ -609,6 +609,8 @@ static struct resource rtt_resources[] = { · 608 unmodified lines
609 .flags = IORESOURCE_MEM,609 .flags = IORESOURCE_MEM,
610 }, {610 }, {
611 .flags = IORESOURCE_MEM,611 .flags = IORESOURCE_MEM,
612 }, {
613 .flags = IORESOURCE_IRQ,
612 }614 }
613};615};
614 616
@@ -626,10 +628,12 @@ static void __init at91_add_device_rtt_rtc(void) · 11 unmodified lines
626 * The second resource is needed:628 * The second resource is needed:
627 * GPBR will serve as the storage for RTC time offset629 * GPBR will serve as the storage for RTC time offset
628 */630 */
629 at91sam9261_rtt_device.num_resources = 2;631 at91sam9261_rtt_device.num_resources = 3;
630 rtt_resources[1].start = AT91SAM9261_BASE_GPBR +632 rtt_resources[1].start = AT91SAM9261_BASE_GPBR +
631 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;633 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;
632 rtt_resources[1].end = rtt_resources[1].start + 3;634 rtt_resources[1].end = rtt_resources[1].start + 3;
635 rtt_resources[2].start = NR_IRQS_LEGACY + AT91_ID_SYS;
636 rtt_resources[2].end = NR_IRQS_LEGACY + AT91_ID_SYS;
633}637}
634#else638#else
635static void __init at91_add_device_rtt_rtc(void)639static void __init at91_add_device_rtt_rtc(void)
arch/arm/mach-at91/at91sam9263_devices.c+8−2
@@ -990,6 +990,8 @@ static struct resource rtt0_resources[] = { · 989 unmodified lines
990 .flags = IORESOURCE_MEM,990 .flags = IORESOURCE_MEM,
991 }, {991 }, {
992 .flags = IORESOURCE_MEM,992 .flags = IORESOURCE_MEM,
993 }, {
994 .flags = IORESOURCE_IRQ,
993 }995 }
994};996};
995 997
@@ -1006,6 +1008,8 @@ static struct resource rtt1_resources[] = { · 10 unmodified lines
1006 .flags = IORESOURCE_MEM,1008 .flags = IORESOURCE_MEM,
1007 }, {1009 }, {
1008 .flags = IORESOURCE_MEM,1010 .flags = IORESOURCE_MEM,
1011 }, {
1012 .flags = IORESOURCE_IRQ,
1009 }1013 }
1010};1014};
1011 1015
@@ -1027,14 +1031,14 @@ static void __init at91_add_device_rtt_rtc(void) · 15 unmodified lines
1027 * The second resource is needed only for the chosen RTT:1031 * The second resource is needed only for the chosen RTT:
1028 * GPBR will serve as the storage for RTC time offset1032 * GPBR will serve as the storage for RTC time offset
1029 */1033 */
1030 at91sam9263_rtt0_device.num_resources = 2;1034 at91sam9263_rtt0_device.num_resources = 3;
1031 at91sam9263_rtt1_device.num_resources = 1;1035 at91sam9263_rtt1_device.num_resources = 1;
1032 pdev = &at91sam9263_rtt0_device;1036 pdev = &at91sam9263_rtt0_device;
1033 r = rtt0_resources;1037 r = rtt0_resources;
1034 break;1038 break;
1035 case 1:1039 case 1:
1036 at91sam9263_rtt0_device.num_resources = 1;1040 at91sam9263_rtt0_device.num_resources = 1;
1037 at91sam9263_rtt1_device.num_resources = 2;1041 at91sam9263_rtt1_device.num_resources = 3;
1038 pdev = &at91sam9263_rtt1_device;1042 pdev = &at91sam9263_rtt1_device;
1039 r = rtt1_resources;1043 r = rtt1_resources;
1040 break;1044 break;
@@ -1047,6 +1051,8 @@ static void __init at91_add_device_rtt_rtc(void) · 6 unmodified lines
1047 pdev->name = "rtc-at91sam9";1051 pdev->name = "rtc-at91sam9";
1048 r[1].start = AT91SAM9263_BASE_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;1052 r[1].start = AT91SAM9263_BASE_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;
1049 r[1].end = r[1].start + 3;1053 r[1].end = r[1].start + 3;
1054 r[2].start = NR_IRQS_LEGACY + AT91_ID_SYS;
1055 r[2].end = NR_IRQS_LEGACY + AT91_ID_SYS;
1050}1056}
1051#else1057#else
1052static void __init at91_add_device_rtt_rtc(void)1058static void __init at91_add_device_rtt_rtc(void)
arch/arm/mach-at91/at91sam9g45_devices.c+5−1
@@ -1293,6 +1293,8 @@ static struct resource rtt_resources[] = { · 1292 unmodified lines
1293 .flags = IORESOURCE_MEM,1293 .flags = IORESOURCE_MEM,
1294 }, {1294 }, {
1295 .flags = IORESOURCE_MEM,1295 .flags = IORESOURCE_MEM,
1296 }, {
1297 .flags = IORESOURCE_IRQ,
1296 }1298 }
1297};1299};
1298 1300
@@ -1310,10 +1312,12 @@ static void __init at91_add_device_rtt_rtc(void) · 11 unmodified lines
1310 * The second resource is needed:1312 * The second resource is needed:
1311 * GPBR will serve as the storage for RTC time offset1313 * GPBR will serve as the storage for RTC time offset
1312 */1314 */
1313 at91sam9g45_rtt_device.num_resources = 2;1315 at91sam9g45_rtt_device.num_resources = 3;
1314 rtt_resources[1].start = AT91SAM9G45_BASE_GPBR +1316 rtt_resources[1].start = AT91SAM9G45_BASE_GPBR +
1315 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;1317 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;
1316 rtt_resources[1].end = rtt_resources[1].start + 3;1318 rtt_resources[1].end = rtt_resources[1].start + 3;
1319 rtt_resources[2].start = NR_IRQS_LEGACY + AT91_ID_SYS;
1320 rtt_resources[2].end = NR_IRQS_LEGACY + AT91_ID_SYS;
1317}1321}
1318#else1322#else
1319static void __init at91_add_device_rtt_rtc(void)1323static void __init at91_add_device_rtt_rtc(void)
arch/arm/mach-at91/at91sam9rl_devices.c+5−1
@@ -688,6 +688,8 @@ static struct resource rtt_resources[] = { · 687 unmodified lines
688 .flags = IORESOURCE_MEM,688 .flags = IORESOURCE_MEM,
689 }, {689 }, {
690 .flags = IORESOURCE_MEM,690 .flags = IORESOURCE_MEM,
691 }, {
692 .flags = IORESOURCE_IRQ,
691 }693 }
692};694};
693 695
@@ -705,10 +707,12 @@ static void __init at91_add_device_rtt_rtc(void) · 11 unmodified lines
705 * The second resource is needed:707 * The second resource is needed:
706 * GPBR will serve as the storage for RTC time offset708 * GPBR will serve as the storage for RTC time offset
707 */709 */
708 at91sam9rl_rtt_device.num_resources = 2;710 at91sam9rl_rtt_device.num_resources = 3;
709 rtt_resources[1].start = AT91SAM9RL_BASE_GPBR +711 rtt_resources[1].start = AT91SAM9RL_BASE_GPBR +
710 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;712 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR;
711 rtt_resources[1].end = rtt_resources[1].start + 3;713 rtt_resources[1].end = rtt_resources[1].start + 3;
714 rtt_resources[2].start = NR_IRQS_LEGACY + AT91_ID_SYS;
715 rtt_resources[2].end = NR_IRQS_LEGACY + AT91_ID_SYS;
712}716}
713#else717#else
714static void __init at91_add_device_rtt_rtc(void)718static void __init at91_add_device_rtt_rtc(void)
arch/arm/mach-at91/clock.c+12−0
@@ -63,6 +63,12 @@ EXPORT_SYMBOL_GPL(at91_pmc_base); · 62 unmodified lines
63 63
64#define cpu_has_300M_plla() (cpu_is_at91sam9g10())64#define cpu_has_300M_plla() (cpu_is_at91sam9g10())
65 65
66#define cpu_has_240M_plla() (cpu_is_at91sam9261() \
67 || cpu_is_at91sam9263() \
68 || cpu_is_at91sam9rl())
69
70#define cpu_has_210M_plla() (cpu_is_at91sam9260())
71
66#define cpu_has_pllb() (!(cpu_is_at91sam9rl() \72#define cpu_has_pllb() (!(cpu_is_at91sam9rl() \
67 || cpu_is_at91sam9g45() \73 || cpu_is_at91sam9g45() \
68 || cpu_is_at91sam9x5() \74 || cpu_is_at91sam9x5() \
@@ -706,6 +712,12 @@ static int __init at91_pmc_init(unsigned long main_clock) · 637 unmodified lines
706 } else if (cpu_has_800M_plla()) {712 } else if (cpu_has_800M_plla()) {
707 if (plla.rate_hz > 800000000)713 if (plla.rate_hz > 800000000)
708 pll_overclock = true;714 pll_overclock = true;
715 } else if (cpu_has_240M_plla()) {
716 if (plla.rate_hz > 240000000)
717 pll_overclock = true;
718 } else if (cpu_has_210M_plla()) {
719 if (plla.rate_hz > 210000000)
720 pll_overclock = true;
709 } else {721 } else {
710 if (plla.rate_hz > 209000000)722 if (plla.rate_hz > 209000000)
711 pll_overclock = true;723 pll_overclock = true;
arch/arm/mach-dove/common.c+2−1
@@ -102,7 +102,8 @@ void __init dove_ehci1_init(void) · 101 unmodified lines
102void __init dove_ge00_init(struct mv643xx_eth_platform_data *eth_data)102void __init dove_ge00_init(struct mv643xx_eth_platform_data *eth_data)
103{103{
104 orion_ge00_init(eth_data, DOVE_GE00_PHYS_BASE,104 orion_ge00_init(eth_data, DOVE_GE00_PHYS_BASE,
105 IRQ_DOVE_GE00_SUM, IRQ_DOVE_GE00_ERR);105 IRQ_DOVE_GE00_SUM, IRQ_DOVE_GE00_ERR,
106 1600);
106}107}
107 108
108/*****************************************************************************109/*****************************************************************************
arch/arm/mach-exynos/mach-origen.c+7−0
@@ -42,6 +42,7 @@ · 41 unmodified lines
42#include <plat/backlight.h>42#include <plat/backlight.h>
43#include <plat/fb.h>43#include <plat/fb.h>
44#include <plat/mfc.h>44#include <plat/mfc.h>
45#include <plat/hdmi.h>
45 46
46#include <mach/ohci.h>47#include <mach/ohci.h>
47#include <mach/map.h>48#include <mach/map.h>
@@ -734,6 +735,11 @@ static void __init origen_bt_setup(void) · 686 unmodified lines
734 s3c_gpio_setpull(EXYNOS4_GPX2(2), S3C_GPIO_PULL_NONE);735 s3c_gpio_setpull(EXYNOS4_GPX2(2), S3C_GPIO_PULL_NONE);
735}736}
736 737
738/* I2C module and id for HDMIPHY */
739static struct i2c_board_info hdmiphy_info = {
740 I2C_BOARD_INFO("hdmiphy-exynos4210", 0x38),
741};
742
737static void s5p_tv_setup(void)743static void s5p_tv_setup(void)
738{744{
739 /* Direct HPD to HDMI chip */745 /* Direct HPD to HDMI chip */
@@ -781,6 +787,7 @@ static void __init origen_machine_init(void) · 41 unmodified lines
781 787
782 s5p_tv_setup();788 s5p_tv_setup();
783 s5p_i2c_hdmiphy_set_platdata(NULL);789 s5p_i2c_hdmiphy_set_platdata(NULL);
790 s5p_hdmi_set_platdata(&hdmiphy_info, NULL, 0);
784 791
785#ifdef CONFIG_DRM_EXYNOS792#ifdef CONFIG_DRM_EXYNOS
786 s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata;793 s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata;
arch/arm/mach-exynos/mach-smdkv310.c+7−0
@@ -40,6 +40,7 @@ · 39 unmodified lines
40#include <plat/mfc.h>40#include <plat/mfc.h>
41#include <plat/ehci.h>41#include <plat/ehci.h>
42#include <plat/clock.h>42#include <plat/clock.h>
43#include <plat/hdmi.h>
43 44
44#include <mach/map.h>45#include <mach/map.h>
45#include <mach/ohci.h>46#include <mach/ohci.h>
@@ -354,6 +355,11 @@ static struct platform_pwm_backlight_data smdkv310_bl_data = { · 308 unmodified lines
354 .pwm_period_ns = 1000,355 .pwm_period_ns = 1000,
355};356};
356 357
358/* I2C module and id for HDMIPHY */
359static struct i2c_board_info hdmiphy_info = {
360 I2C_BOARD_INFO("hdmiphy-exynos4210", 0x38),
361};
362
357static void s5p_tv_setup(void)363static void s5p_tv_setup(void)
358{364{
359 /* direct HPD to HDMI chip */365 /* direct HPD to HDMI chip */
@@ -388,6 +394,7 @@ static void __init smdkv310_machine_init(void) · 28 unmodified lines
388 394
389 s5p_tv_setup();395 s5p_tv_setup();
390 s5p_i2c_hdmiphy_set_platdata(NULL);396 s5p_i2c_hdmiphy_set_platdata(NULL);
397 s5p_hdmi_set_platdata(&hdmiphy_info, NULL, 0);
391 398
392 samsung_keypad_set_platdata(&smdkv310_keypad_data);399 samsung_keypad_set_platdata(&smdkv310_keypad_data);
393 400
arch/arm/mach-gemini/irq.c+1−0
@@ -17,6 +17,7 @@ · 16 unmodified lines
17#include <linux/sched.h>17#include <linux/sched.h>
18#include <asm/irq.h>18#include <asm/irq.h>
19#include <asm/mach/irq.h>19#include <asm/mach/irq.h>
20#include <asm/system_misc.h>
20#include <mach/hardware.h>21#include <mach/hardware.h>
21 22
22#define IRQ_SOURCE(base_addr) (base_addr + 0x00)23#define IRQ_SOURCE(base_addr) (base_addr + 0x00)
arch/arm/mach-imx/Makefile+5−5
@@ -9,7 +9,8 @@ obj-$(CONFIG_SOC_IMX27) += clk-imx27.o mm-imx27.o ehci-imx27.o · 8 unmodified lines
9obj-$(CONFIG_SOC_IMX31) += mm-imx3.o cpu-imx31.o clk-imx31.o iomux-imx31.o ehci-imx31.o pm-imx3.o9obj-$(CONFIG_SOC_IMX31) += mm-imx3.o cpu-imx31.o clk-imx31.o iomux-imx31.o ehci-imx31.o pm-imx3.o
10obj-$(CONFIG_SOC_IMX35) += mm-imx3.o cpu-imx35.o clk-imx35.o ehci-imx35.o pm-imx3.o10obj-$(CONFIG_SOC_IMX35) += mm-imx3.o cpu-imx35.o clk-imx35.o ehci-imx35.o pm-imx3.o
11 11
12obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clk-imx51-imx53.o ehci-imx5.o pm-imx5.o cpu_op-mx51.o12imx5-pm-$(CONFIG_PM) += pm-imx5.o
13obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clk-imx51-imx53.o ehci-imx5.o $(imx5-pm-y) cpu_op-mx51.o
13 14
14obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \15obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \
15 clk-pfd.o clk-busy.o16 clk-pfd.o clk-busy.o
@@ -70,14 +71,13 @@ obj-$(CONFIG_DEBUG_LL) += lluart.o · 54 unmodified lines
70obj-$(CONFIG_HAVE_IMX_GPC) += gpc.o71obj-$(CONFIG_HAVE_IMX_GPC) += gpc.o
71obj-$(CONFIG_HAVE_IMX_MMDC) += mmdc.o72obj-$(CONFIG_HAVE_IMX_MMDC) += mmdc.o
72obj-$(CONFIG_HAVE_IMX_SRC) += src.o73obj-$(CONFIG_HAVE_IMX_SRC) += src.o
73obj-$(CONFIG_CPU_V7) += head-v7.o74AFLAGS_headsmp.o :=-Wa,-march=armv7-a
74AFLAGS_head-v7.o :=-Wa,-march=armv7-a75obj-$(CONFIG_SMP) += headsmp.o platsmp.o
75obj-$(CONFIG_SMP) += platsmp.o
76obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o76obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
77obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o mach-imx6q.o77obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o mach-imx6q.o
78 78
79ifeq ($(CONFIG_PM),y)79ifeq ($(CONFIG_PM),y)
80obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o80obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o headsmp.o
81endif81endif
82 82
83# i.MX5 based machines83# i.MX5 based machines
arch/arm/mach-imx/clk-imx6q.c+5−3
@@ -152,7 +152,7 @@ enum mx6q_clks { · 151 unmodified lines
152 ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3,152 ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3,
153 usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg,153 usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg,
154 pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, ssi1_ipg,154 pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, ssi1_ipg,
155 ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2,155 ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, ldb_di0_div_3_5, ldb_di1_div_3_5,
156 clk_max156 clk_max
157};157};
158 158
@@ -288,8 +288,10 @@ int __init mx6q_clocks_init(void) · 129 unmodified lines
288 clk[gpu3d_shader] = imx_clk_divider("gpu3d_shader", "gpu3d_shader_sel", base + 0x18, 29, 3);288 clk[gpu3d_shader] = imx_clk_divider("gpu3d_shader", "gpu3d_shader_sel", base + 0x18, 29, 3);
289 clk[ipu1_podf] = imx_clk_divider("ipu1_podf", "ipu1_sel", base + 0x3c, 11, 3);289 clk[ipu1_podf] = imx_clk_divider("ipu1_podf", "ipu1_sel", base + 0x3c, 11, 3);
290 clk[ipu2_podf] = imx_clk_divider("ipu2_podf", "ipu2_sel", base + 0x3c, 16, 3);290 clk[ipu2_podf] = imx_clk_divider("ipu2_podf", "ipu2_sel", base + 0x3c, 16, 3);
291 clk[ldb_di0_podf] = imx_clk_divider("ldb_di0_podf", "ldb_di0_sel", base + 0x20, 10, 1);291 clk[ldb_di0_div_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7);
292 clk[ldb_di1_podf] = imx_clk_divider("ldb_di1_podf", "ldb_di1_sel", base + 0x20, 11, 1);292 clk[ldb_di0_podf] = imx_clk_divider("ldb_di0_podf", "ldb_di0_div_3_5", base + 0x20, 10, 1);
293 clk[ldb_di1_div_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1_sel", 2, 7);
294 clk[ldb_di1_podf] = imx_clk_divider("ldb_di1_podf", "ldb_di1_div_3_5", base + 0x20, 11, 1);
293 clk[ipu1_di0_pre] = imx_clk_divider("ipu1_di0_pre", "ipu1_di0_pre_sel", base + 0x34, 3, 3);295 clk[ipu1_di0_pre] = imx_clk_divider("ipu1_di0_pre", "ipu1_di0_pre_sel", base + 0x34, 3, 3);
294 clk[ipu1_di1_pre] = imx_clk_divider("ipu1_di1_pre", "ipu1_di1_pre_sel", base + 0x34, 12, 3);296 clk[ipu1_di1_pre] = imx_clk_divider("ipu1_di1_pre", "ipu1_di1_pre_sel", base + 0x34, 12, 3);
295 clk[ipu2_di0_pre] = imx_clk_divider("ipu2_di0_pre", "ipu2_di0_pre_sel", base + 0x38, 3, 3);297 clk[ipu2_di0_pre] = imx_clk_divider("ipu2_di0_pre", "ipu2_di0_pre_sel", base + 0x38, 3, 3);
arch/arm/mach-imx/headsmp.Srenamed from arch/arm/mach-imx/head-v7.S+0−0

File renamed without changes.

arch/arm/mach-imx/hotplug.c+3−20
@@ -42,22 +42,6 @@ static inline void cpu_enter_lowpower(void) · 41 unmodified lines
42 : "cc");42 : "cc");
43}43}
44 44
45static inline void cpu_leave_lowpower(void)
46{
47 unsigned int v;
48
49 asm volatile(
50 "mrc p15, 0, %0, c1, c0, 0\n"
51 " orr %0, %0, %1\n"
52 " mcr p15, 0, %0, c1, c0, 0\n"
53 " mrc p15, 0, %0, c1, c0, 1\n"
54 " orr %0, %0, %2\n"
55 " mcr p15, 0, %0, c1, c0, 1\n"
56 : "=&r" (v)
57 : "Ir" (CR_C), "Ir" (0x40)
58 : "cc");
59}
60
61/*45/*
62 * platform-specific code to shutdown a CPU46 * platform-specific code to shutdown a CPU
63 *47 *
@@ -67,11 +51,10 @@ void platform_cpu_die(unsigned int cpu) · 3 unmodified lines
67{51{
68 cpu_enter_lowpower();52 cpu_enter_lowpower();
69 imx_enable_cpu(cpu, false);53 imx_enable_cpu(cpu, false);
70 cpu_do_idle();
71 cpu_leave_lowpower();
72 54
73 /* We should never return from idle */55 /* spin here until hardware takes it down */
74 panic("cpu %d unexpectedly exit from shutdown\n", cpu);56 while (1)
57 ;
75}58}
76 59
77int platform_cpu_disable(unsigned int cpu)60int platform_cpu_disable(unsigned int cpu)
arch/arm/mach-imx/mach-imx6q.c+2−2
@@ -71,7 +71,7 @@ soft: · 70 unmodified lines
71/* For imx6q sabrelite board: set KSZ9021RN RGMII pad skew */71/* For imx6q sabrelite board: set KSZ9021RN RGMII pad skew */
72static int ksz9021rn_phy_fixup(struct phy_device *phydev)72static int ksz9021rn_phy_fixup(struct phy_device *phydev)
73{73{
74 if (IS_ENABLED(CONFIG_PHYLIB)) {74 if (IS_BUILTIN(CONFIG_PHYLIB)) {
75 /* min rx data delay */75 /* min rx data delay */
76 phy_write(phydev, 0x0b, 0x8105);76 phy_write(phydev, 0x0b, 0x8105);
77 phy_write(phydev, 0x0c, 0x0000);77 phy_write(phydev, 0x0c, 0x0000);
@@ -112,7 +112,7 @@ put_clk: · 34 unmodified lines
112 112
113static void __init imx6q_sabrelite_init(void)113static void __init imx6q_sabrelite_init(void)
114{114{
115 if (IS_ENABLED(CONFIG_PHYLIB))115 if (IS_BUILTIN(CONFIG_PHYLIB))
116 phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK,116 phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK,
117 ksz9021rn_phy_fixup);117 ksz9021rn_phy_fixup);
118 imx6q_sabrelite_cko1_setup();118 imx6q_sabrelite_cko1_setup();
arch/arm/mach-kirkwood/Makefile.boot+2−1
@@ -7,7 +7,8 @@ dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns320.dtb · 6 unmodified lines
7dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns325.dtb7dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns325.dtb
8dtb-$(CONFIG_MACH_ICONNECT_DT) += kirkwood-iconnect.dtb8dtb-$(CONFIG_MACH_ICONNECT_DT) += kirkwood-iconnect.dtb
9dtb-$(CONFIG_MACH_IB62X0_DT) += kirkwood-ib62x0.dtb9dtb-$(CONFIG_MACH_IB62X0_DT) += kirkwood-ib62x0.dtb
10dtb-$(CONFIG_MACH_TS219_DT) += kirkwood-qnap-ts219.dtb10dtb-$(CONFIG_MACH_TS219_DT) += kirkwood-ts219-6281.dtb
11dtb-$(CONFIG_MACH_TS219_DT) += kirkwood-ts219-6282.dtb
11dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb12dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb
12dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lschlv2.dtb13dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lschlv2.dtb
13dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lsxhl.dtb14dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lsxhl.dtb
arch/arm/mach-kirkwood/common.c+9−2
@@ -301,7 +301,7 @@ void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) · 300 unmodified lines
301{301{
302 orion_ge00_init(eth_data,302 orion_ge00_init(eth_data,
303 GE00_PHYS_BASE, IRQ_KIRKWOOD_GE00_SUM,303 GE00_PHYS_BASE, IRQ_KIRKWOOD_GE00_SUM,
304 IRQ_KIRKWOOD_GE00_ERR);304 IRQ_KIRKWOOD_GE00_ERR, 1600);
305 /* The interface forgets the MAC address assigned by u-boot if305 /* The interface forgets the MAC address assigned by u-boot if
306 the clock is turned off, so claim the clk now. */306 the clock is turned off, so claim the clk now. */
307 clk_prepare_enable(ge0);307 clk_prepare_enable(ge0);
@@ -315,7 +315,7 @@ void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data) · 7 unmodified lines
315{315{
316 orion_ge01_init(eth_data,316 orion_ge01_init(eth_data,
317 GE01_PHYS_BASE, IRQ_KIRKWOOD_GE01_SUM,317 GE01_PHYS_BASE, IRQ_KIRKWOOD_GE01_SUM,
318 IRQ_KIRKWOOD_GE01_ERR);318 IRQ_KIRKWOOD_GE01_ERR, 1600);
319 clk_prepare_enable(ge1);319 clk_prepare_enable(ge1);
320}320}
321 321
@@ -517,6 +517,13 @@ void __init kirkwood_wdt_init(void) · 195 unmodified lines
517void __init kirkwood_init_early(void)517void __init kirkwood_init_early(void)
518{518{
519 orion_time_set_base(TIMER_VIRT_BASE);519 orion_time_set_base(TIMER_VIRT_BASE);
520
521 /*
522 * Some Kirkwood devices allocate their coherent buffers from atomic
523 * context. Increase size of atomic coherent pool to make sure such
524 * the allocations won't fail.
525 */
526 init_dma_coherent_pool_size(SZ_1M);
520}527}
521 528
522int kirkwood_tclk;529int kirkwood_tclk;
arch/arm/mach-kirkwood/db88f6281-bp-setup.c+1−0
@@ -10,6 +10,7 @@ · 9 unmodified lines
10 10
11#include <linux/kernel.h>11#include <linux/kernel.h>
12#include <linux/init.h>12#include <linux/init.h>
13#include <linux/sizes.h>
13#include <linux/platform_device.h>14#include <linux/platform_device.h>
14#include <linux/mtd/partitions.h>15#include <linux/mtd/partitions.h>
15#include <linux/ata_platform.h>16#include <linux/ata_platform.h>
arch/arm/mach-mmp/sram.c+1−1
@@ -68,7 +68,7 @@ static int __devinit sram_probe(struct platform_device *pdev) · 67 unmodified lines
68 struct resource *res;68 struct resource *res;
69 int ret = 0;69 int ret = 0;
70 70
71 if (!pdata && !pdata->pool_name)71 if (!pdata || !pdata->pool_name)
72 return -ENODEV;72 return -ENODEV;
73 73
74 info = kzalloc(sizeof(*info), GFP_KERNEL);74 info = kzalloc(sizeof(*info), GFP_KERNEL);
arch/arm/mach-mv78xx0/addr-map.c+1−1
@@ -37,7 +37,7 @@ · 36 unmodified lines
37#define WIN0_OFF(n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4))37#define WIN0_OFF(n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4))
38#define WIN8_OFF(n) (BRIDGE_VIRT_BASE + 0x0900 + (((n) - 8) << 4))38#define WIN8_OFF(n) (BRIDGE_VIRT_BASE + 0x0900 + (((n) - 8) << 4))
39 39
40static void __init __iomem *win_cfg_base(int win)40static void __init __iomem *win_cfg_base(const struct orion_addr_map_cfg *cfg, int win)
41{41{
42 /*42 /*
43 * Find the control register base address for this window.43 * Find the control register base address for this window.
arch/arm/mach-mv78xx0/common.c+4−2
@@ -213,7 +213,8 @@ void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data) · 212 unmodified lines
213{213{
214 orion_ge00_init(eth_data,214 orion_ge00_init(eth_data,
215 GE00_PHYS_BASE, IRQ_MV78XX0_GE00_SUM,215 GE00_PHYS_BASE, IRQ_MV78XX0_GE00_SUM,
216 IRQ_MV78XX0_GE_ERR);216 IRQ_MV78XX0_GE_ERR,
217 MV643XX_TX_CSUM_DEFAULT_LIMIT);
217}218}
218 219
219 220
@@ -224,7 +225,8 @@ void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data) · 4 unmodified lines
224{225{
225 orion_ge01_init(eth_data,226 orion_ge01_init(eth_data,
226 GE01_PHYS_BASE, IRQ_MV78XX0_GE01_SUM,227 GE01_PHYS_BASE, IRQ_MV78XX0_GE01_SUM,
227 NO_IRQ);228 NO_IRQ,
229 MV643XX_TX_CSUM_DEFAULT_LIMIT);
228}230}
229 231
230 232
arch/arm/mach-omap1/board-ams-delta.c+0−1
@@ -37,7 +37,6 @@ · 36 unmodified lines
37#include <plat/board-ams-delta.h>37#include <plat/board-ams-delta.h>
38#include <plat/keypad.h>38#include <plat/keypad.h>
39#include <plat/mux.h>39#include <plat/mux.h>
40#include <plat/board.h>
41 40
42#include <mach/hardware.h>41#include <mach/hardware.h>
43#include <mach/ams-delta-fiq.h>42#include <mach/ams-delta-fiq.h>
arch/arm/mach-omap1/board-fsample.c+0−1
@@ -32,7 +32,6 @@ · 31 unmodified lines
32#include <plat/flash.h>32#include <plat/flash.h>
33#include <plat/fpga.h>33#include <plat/fpga.h>
34#include <plat/keypad.h>34#include <plat/keypad.h>
35#include <plat/board.h>
36 35
37#include <mach/hardware.h>36#include <mach/hardware.h>
38 37
arch/arm/mach-omap1/board-generic.c+0−6
@@ -23,7 +23,6 @@ · 22 unmodified lines
23#include <asm/mach/map.h>23#include <asm/mach/map.h>
24 24
25#include <plat/mux.h>25#include <plat/mux.h>
26#include <plat/board.h>
27 26
28#include <mach/usb.h>27#include <mach/usb.h>
29 28
@@ -52,9 +51,6 @@ static struct omap_usb_config generic1610_usb_config __initdata = { · 22 unmodified lines
52};51};
53#endif52#endif
54 53
55static struct omap_board_config_kernel generic_config[] __initdata = {
56};
57
58static void __init omap_generic_init(void)54static void __init omap_generic_init(void)
59{55{
60#ifdef CONFIG_ARCH_OMAP15XX56#ifdef CONFIG_ARCH_OMAP15XX
@@ -76,8 +72,6 @@ static void __init omap_generic_init(void) · 15 unmodified lines
76 }72 }
77#endif73#endif
78 74
79 omap_board_config = generic_config;
80 omap_board_config_size = ARRAY_SIZE(generic_config);
81 omap_serial_init();75 omap_serial_init();
82 omap_register_i2c_bus(1, 100, NULL, 0);76 omap_register_i2c_bus(1, 100, NULL, 0);
83}77}
arch/arm/mach-omap1/board-htcherald.c+0−1
@@ -42,7 +42,6 @@ · 41 unmodified lines
42#include <asm/mach/arch.h>42#include <asm/mach/arch.h>
43 43
44#include <plat/omap7xx.h>44#include <plat/omap7xx.h>
45#include <plat/board.h>
46#include <plat/keypad.h>45#include <plat/keypad.h>
47#include <plat/mmc.h>46#include <plat/mmc.h>
48 47
arch/arm/mach-omap1/board-nokia770.c+0−1
@@ -26,7 +26,6 @@ · 25 unmodified lines
26#include <asm/mach/map.h>26#include <asm/mach/map.h>
27 27
28#include <plat/mux.h>28#include <plat/mux.h>
29#include <plat/board.h>
30#include <plat/keypad.h>29#include <plat/keypad.h>
31#include <plat/lcd_mipid.h>30#include <plat/lcd_mipid.h>
32#include <plat/mmc.h>31#include <plat/mmc.h>
arch/arm/mach-omap1/board-osk.c+1−0
@@ -39,6 +39,7 @@ · 38 unmodified lines
39#include <linux/mtd/partitions.h>39#include <linux/mtd/partitions.h>
40#include <linux/mtd/physmap.h>40#include <linux/mtd/physmap.h>
41#include <linux/i2c/tps65010.h>41#include <linux/i2c/tps65010.h>
42#include <linux/platform_data/omap1_bl.h>
42 43
43#include <asm/mach-types.h>44#include <asm/mach-types.h>
44#include <asm/mach/arch.h>45#include <asm/mach/arch.h>
arch/arm/mach-omap1/board-palmte.c+1−1
@@ -28,6 +28,7 @@ · 27 unmodified lines
28#include <linux/interrupt.h>28#include <linux/interrupt.h>
29#include <linux/apm-emulation.h>29#include <linux/apm-emulation.h>
30#include <linux/omapfb.h>30#include <linux/omapfb.h>
31#include <linux/platform_data/omap1_bl.h>
31 32
32#include <asm/mach-types.h>33#include <asm/mach-types.h>
33#include <asm/mach/arch.h>34#include <asm/mach/arch.h>
@@ -37,7 +38,6 @@ · 3 unmodified lines
37#include <plat/mux.h>38#include <plat/mux.h>
38#include <plat/tc.h>39#include <plat/tc.h>
39#include <plat/dma.h>40#include <plat/dma.h>
40#include <plat/board.h>
41#include <plat/irda.h>41#include <plat/irda.h>
42#include <plat/keypad.h>42#include <plat/keypad.h>
43 43
arch/arm/mach-omap1/board-palmtt.c+1−1
@@ -27,6 +27,7 @@ · 26 unmodified lines
27#include <linux/omapfb.h>27#include <linux/omapfb.h>
28#include <linux/spi/spi.h>28#include <linux/spi/spi.h>
29#include <linux/spi/ads7846.h>29#include <linux/spi/ads7846.h>
30#include <linux/platform_data/omap1_bl.h>
30 31
31#include <asm/mach-types.h>32#include <asm/mach-types.h>
32#include <asm/mach/arch.h>33#include <asm/mach/arch.h>
@@ -37,7 +38,6 @@ · 4 unmodified lines
37#include <plat/mux.h>38#include <plat/mux.h>
38#include <plat/dma.h>39#include <plat/dma.h>
39#include <plat/tc.h>40#include <plat/tc.h>
40#include <plat/board.h>
41#include <plat/irda.h>41#include <plat/irda.h>
42#include <plat/keypad.h>42#include <plat/keypad.h>
43 43
arch/arm/mach-omap1/board-palmz71.c+1−1
@@ -30,6 +30,7 @@ · 29 unmodified lines
30#include <linux/omapfb.h>30#include <linux/omapfb.h>
31#include <linux/spi/spi.h>31#include <linux/spi/spi.h>
32#include <linux/spi/ads7846.h>32#include <linux/spi/ads7846.h>
33#include <linux/platform_data/omap1_bl.h>
33 34
34#include <asm/mach-types.h>35#include <asm/mach-types.h>
35#include <asm/mach/arch.h>36#include <asm/mach/arch.h>
@@ -39,7 +40,6 @@ · 3 unmodified lines
39#include <plat/mux.h>40#include <plat/mux.h>
40#include <plat/dma.h>41#include <plat/dma.h>
41#include <plat/tc.h>42#include <plat/tc.h>
42#include <plat/board.h>
43#include <plat/irda.h>43#include <plat/irda.h>
44#include <plat/keypad.h>44#include <plat/keypad.h>
45 45
arch/arm/mach-omap1/board-perseus2.c+0−1
@@ -32,7 +32,6 @@ · 31 unmodified lines
32#include <plat/fpga.h>32#include <plat/fpga.h>
33#include <plat/flash.h>33#include <plat/flash.h>
34#include <plat/keypad.h>34#include <plat/keypad.h>
35#include <plat/board.h>
36 35
37#include <mach/hardware.h>36#include <mach/hardware.h>
38 37
arch/arm/mach-omap1/board-sx1.c+0−1
@@ -38,7 +38,6 @@ · 37 unmodified lines
38#include <plat/dma.h>38#include <plat/dma.h>
39#include <plat/irda.h>39#include <plat/irda.h>
40#include <plat/tc.h>40#include <plat/tc.h>
41#include <plat/board.h>
42#include <plat/keypad.h>41#include <plat/keypad.h>
43#include <plat/board-sx1.h>42#include <plat/board-sx1.h>
44 43
arch/arm/mach-omap1/board-voiceblue.c+0−6
@@ -35,7 +35,6 @@ · 34 unmodified lines
35#include <plat/flash.h>35#include <plat/flash.h>
36#include <plat/mux.h>36#include <plat/mux.h>
37#include <plat/tc.h>37#include <plat/tc.h>
38#include <plat/board.h>
39 38
40#include <mach/hardware.h>39#include <mach/hardware.h>
41#include <mach/usb.h>40#include <mach/usb.h>
@@ -155,9 +154,6 @@ static struct omap_usb_config voiceblue_usb_config __initdata = { · 113 unmodified lines
155 .pins[2] = 6,154 .pins[2] = 6,
156};155};
157 156
158static struct omap_board_config_kernel voiceblue_config[] = {
159};
160
161#define MACHINE_PANICED 1157#define MACHINE_PANICED 1
162#define MACHINE_REBOOTING 2158#define MACHINE_REBOOTING 2
163#define MACHINE_REBOOT 4159#define MACHINE_REBOOT 4
@@ -275,8 +271,6 @@ static void __init voiceblue_init(void) · 111 unmodified lines
275 voiceblue_smc91x_resources[1].start = gpio_to_irq(8);271 voiceblue_smc91x_resources[1].start = gpio_to_irq(8);
276 voiceblue_smc91x_resources[1].end = gpio_to_irq(8);272 voiceblue_smc91x_resources[1].end = gpio_to_irq(8);
277 platform_add_devices(voiceblue_devices, ARRAY_SIZE(voiceblue_devices));273 platform_add_devices(voiceblue_devices, ARRAY_SIZE(voiceblue_devices));
278 omap_board_config = voiceblue_config;
279 omap_board_config_size = ARRAY_SIZE(voiceblue_config);
280 omap_serial_init();274 omap_serial_init();
281 omap1_usb_init(&voiceblue_usb_config);275 omap1_usb_init(&voiceblue_usb_config);
282 omap_register_i2c_bus(1, 100, NULL, 0);276 omap_register_i2c_bus(1, 100, NULL, 0);
arch/arm/mach-omap1/clock_data.c+0−8
@@ -25,7 +25,6 @@ · 24 unmodified lines
25#include <plat/clock.h>25#include <plat/clock.h>
26#include <plat/cpu.h>26#include <plat/cpu.h>
27#include <plat/clkdev_omap.h>27#include <plat/clkdev_omap.h>
28#include <plat/board.h>
29#include <plat/sram.h> /* for omap_sram_reprogram_clock() */28#include <plat/sram.h> /* for omap_sram_reprogram_clock() */
30 29
31#include <mach/hardware.h>30#include <mach/hardware.h>
@@ -788,7 +787,6 @@ u32 cpu_mask; · 756 unmodified lines
788int __init omap1_clk_init(void)787int __init omap1_clk_init(void)
789{788{
790 struct omap_clk *c;789 struct omap_clk *c;
791 const struct omap_clock_config *info;
792 int crystal_type = 0; /* Default 12 MHz */790 int crystal_type = 0; /* Default 12 MHz */
793 u32 reg;791 u32 reg;
794 792
@@ -837,12 +835,6 @@ int __init omap1_clk_init(void) · 42 unmodified lines
837 ck_dpll1_p = clk_get(NULL, "ck_dpll1");835 ck_dpll1_p = clk_get(NULL, "ck_dpll1");
838 ck_ref_p = clk_get(NULL, "ck_ref");836 ck_ref_p = clk_get(NULL, "ck_ref");
839 837
840 info = omap_get_config(OMAP_TAG_CLOCK, struct omap_clock_config);
841 if (info != NULL) {
842 if (!cpu_is_omap15xx())
843 crystal_type = info->system_clock_type;
844 }
845
846 if (cpu_is_omap7xx())838 if (cpu_is_omap7xx())
847 ck_ref.rate = 13000000;839 ck_ref.rate = 13000000;
848 if (cpu_is_omap16xx() && crystal_type == 2)840 if (cpu_is_omap16xx() && crystal_type == 2)
arch/arm/mach-omap1/devices.c+0−1
@@ -20,7 +20,6 @@ · 19 unmodified lines
20#include <asm/mach/map.h>20#include <asm/mach/map.h>
21 21
22#include <plat/tc.h>22#include <plat/tc.h>
23#include <plat/board.h>
24#include <plat/mux.h>23#include <plat/mux.h>
25#include <plat/dma.h>24#include <plat/dma.h>
26#include <plat/mmc.h>25#include <plat/mmc.h>
arch/arm/mach-omap1/serial.c+0−1
@@ -22,7 +22,6 @@ · 21 unmodified lines
22 22
23#include <asm/mach-types.h>23#include <asm/mach-types.h>
24 24
25#include <plat/board.h>
26#include <plat/mux.h>25#include <plat/mux.h>
27#include <plat/fpga.h>26#include <plat/fpga.h>
28 27
arch/arm/mach-omap2/Kconfig+2−1
@@ -62,13 +62,14 @@ config ARCH_OMAP4 · 61 unmodified lines
62 select PM_OPP if PM62 select PM_OPP if PM
63 select USB_ARCH_HAS_EHCI if USB_SUPPORT63 select USB_ARCH_HAS_EHCI if USB_SUPPORT
64 select ARM_CPU_SUSPEND if PM64 select ARM_CPU_SUSPEND if PM
65 select ARCH_NEEDS_CPU_IDLE_COUPLED65 select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
66 66
67config SOC_OMAP567config SOC_OMAP5
68 bool "TI OMAP5"68 bool "TI OMAP5"
69 select CPU_V769 select CPU_V7
70 select ARM_GIC70 select ARM_GIC
71 select HAVE_SMP71 select HAVE_SMP
72 select ARM_CPU_SUSPEND if PM
72 73
73comment "OMAP Core Type"74comment "OMAP Core Type"
74 depends on ARCH_OMAP275 depends on ARCH_OMAP2
arch/arm/mach-omap2/board-2430sdp.c+0−1
@@ -33,7 +33,6 @@ · 32 unmodified lines
33#include <asm/mach/arch.h>33#include <asm/mach/arch.h>
34#include <asm/mach/map.h>34#include <asm/mach/map.h>
35 35
36#include <plat/board.h>
37#include "common.h"36#include "common.h"
38#include <plat/gpmc.h>37#include <plat/gpmc.h>
39#include <plat/usb.h>38#include <plat/usb.h>
arch/arm/mach-omap2/board-3430sdp.c+0−6
@@ -31,7 +31,6 @@ · 30 unmodified lines
31#include <asm/mach/map.h>31#include <asm/mach/map.h>
32 32
33#include <plat/mcspi.h>33#include <plat/mcspi.h>
34#include <plat/board.h>
35#include <plat/usb.h>34#include <plat/usb.h>
36#include "common.h"35#include "common.h"
37#include <plat/dma.h>36#include <plat/dma.h>
@@ -191,9 +190,6 @@ static struct omap_dss_board_info sdp3430_dss_data = { · 153 unmodified lines
191 .default_device = &sdp3430_lcd_device,190 .default_device = &sdp3430_lcd_device,
192};191};
193 192
194static struct omap_board_config_kernel sdp3430_config[] __initdata = {
195};
196
197static struct omap2_hsmmc_info mmc[] = {193static struct omap2_hsmmc_info mmc[] = {
198 {194 {
199 .mmc = 1,195 .mmc = 1,
@@ -576,8 +572,6 @@ static void __init omap_3430sdp_init(void) · 376 unmodified lines
576 int gpio_pendown;572 int gpio_pendown;
577 573
578 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);574 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
579 omap_board_config = sdp3430_config;
580 omap_board_config_size = ARRAY_SIZE(sdp3430_config);
581 omap_hsmmc_init(mmc);575 omap_hsmmc_init(mmc);
582 omap3430_i2c_init();576 omap3430_i2c_init();
583 omap_display_init(&sdp3430_dss_data);577 omap_display_init(&sdp3430_dss_data);
arch/arm/mach-omap2/board-3630sdp.c+0−6
@@ -17,7 +17,6 @@ · 16 unmodified lines
17#include <asm/mach/arch.h>17#include <asm/mach/arch.h>
18 18
19#include "common.h"19#include "common.h"
20#include <plat/board.h>
21#include <plat/gpmc-smc91x.h>20#include <plat/gpmc-smc91x.h>
22#include <plat/usb.h>21#include <plat/usb.h>
23 22
@@ -67,9 +66,6 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = { · 43 unmodified lines
67 .reset_gpio_port[2] = -EINVAL66 .reset_gpio_port[2] = -EINVAL
68};67};
69 68
70static struct omap_board_config_kernel sdp_config[] __initdata = {
71};
72
73#ifdef CONFIG_OMAP_MUX69#ifdef CONFIG_OMAP_MUX
74static struct omap_board_mux board_mux[] __initdata = {70static struct omap_board_mux board_mux[] __initdata = {
75 { .reg_offset = OMAP_MUX_TERMINATOR },71 { .reg_offset = OMAP_MUX_TERMINATOR },
@@ -197,8 +193,6 @@ static struct flash_partitions sdp_flash_partitions[] = { · 121 unmodified lines
197static void __init omap_sdp_init(void)193static void __init omap_sdp_init(void)
198{194{
199 omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);195 omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
200 omap_board_config = sdp_config;
201 omap_board_config_size = ARRAY_SIZE(sdp_config);
202 zoom_peripherals_init();196 zoom_peripherals_init();
203 omap_sdrc_init(h8mbx00u0mer0em_sdrc_params,197 omap_sdrc_init(h8mbx00u0mer0em_sdrc_params,
204 h8mbx00u0mer0em_sdrc_params);198 h8mbx00u0mer0em_sdrc_params);
arch/arm/mach-omap2/board-4430sdp.c+0−1
@@ -34,7 +34,6 @@ · 33 unmodified lines
34#include <asm/mach/arch.h>34#include <asm/mach/arch.h>
35#include <asm/mach/map.h>35#include <asm/mach/map.h>
36 36
37#include <plat/board.h>
38#include "common.h"37#include "common.h"
39#include <plat/usb.h>38#include <plat/usb.h>
40#include <plat/mmc.h>39#include <plat/mmc.h>
arch/arm/mach-omap2/board-am3517crane.c+0−9
@@ -26,7 +26,6 @@ · 25 unmodified lines
26#include <asm/mach/arch.h>26#include <asm/mach/arch.h>
27#include <asm/mach/map.h>27#include <asm/mach/map.h>
28 28
29#include <plat/board.h>
30#include "common.h"29#include "common.h"
31#include <plat/usb.h>30#include <plat/usb.h>
32 31
@@ -37,11 +36,6 @@ · 4 unmodified lines
37#define GPIO_USB_POWER 3536#define GPIO_USB_POWER 35
38#define GPIO_USB_NRESET 3837#define GPIO_USB_NRESET 38
39 38
40
41/* Board initialization */
42static struct omap_board_config_kernel am3517_crane_config[] __initdata = {
43};
44
45#ifdef CONFIG_OMAP_MUX39#ifdef CONFIG_OMAP_MUX
46static struct omap_board_mux board_mux[] __initdata = {40static struct omap_board_mux board_mux[] __initdata = {
47 { .reg_offset = OMAP_MUX_TERMINATOR },41 { .reg_offset = OMAP_MUX_TERMINATOR },
@@ -67,9 +61,6 @@ static void __init am3517_crane_init(void) · 19 unmodified lines
67 omap_serial_init();61 omap_serial_init();
68 omap_sdrc_init(NULL, NULL);62 omap_sdrc_init(NULL, NULL);
69 63
70 omap_board_config = am3517_crane_config;
71 omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
72
73 /* Configure GPIO for EHCI port */64 /* Configure GPIO for EHCI port */
74 if (omap_mux_init_gpio(GPIO_USB_NRESET, OMAP_PIN_OUTPUT)) {65 if (omap_mux_init_gpio(GPIO_USB_NRESET, OMAP_PIN_OUTPUT)) {
75 pr_err("Can not configure mux for GPIO_USB_NRESET %d\n",66 pr_err("Can not configure mux for GPIO_USB_NRESET %d\n",
arch/arm/mach-omap2/board-am3517evm.c+0−6
@@ -32,7 +32,6 @@ · 31 unmodified lines
32#include <asm/mach/arch.h>32#include <asm/mach/arch.h>
33#include <asm/mach/map.h>33#include <asm/mach/map.h>
34 34
35#include <plat/board.h>
36#include "common.h"35#include "common.h"
37#include <plat/usb.h>36#include <plat/usb.h>
38#include <video/omapdss.h>37#include <video/omapdss.h>
@@ -324,9 +323,6 @@ static void am3517_evm_hecc_init(struct ti_hecc_platform_data *pdata) · 285 unmodified lines
324 platform_device_register(&am3517_hecc_device);323 platform_device_register(&am3517_hecc_device);
325}324}
326 325
327static struct omap_board_config_kernel am3517_evm_config[] __initdata = {
328};
329
330static struct omap2_hsmmc_info mmc[] = {326static struct omap2_hsmmc_info mmc[] = {
331 {327 {
332 .mmc = 1,328 .mmc = 1,
@@ -346,8 +342,6 @@ static struct omap2_hsmmc_info mmc[] = { · 13 unmodified lines
346 342
347static void __init am3517_evm_init(void)343static void __init am3517_evm_init(void)
348{344{
349 omap_board_config = am3517_evm_config;
350 omap_board_config_size = ARRAY_SIZE(am3517_evm_config);
351 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);345 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
352 346
353 am3517_evm_i2c_init();347 am3517_evm_i2c_init();
arch/arm/mach-omap2/board-apollon.c+0−1
@@ -35,7 +35,6 @@ · 34 unmodified lines
35#include <asm/mach/flash.h>35#include <asm/mach/flash.h>
36 36
37#include <plat/led.h>37#include <plat/led.h>
38#include <plat/board.h>
39#include "common.h"38#include "common.h"
40#include <plat/gpmc.h>39#include <plat/gpmc.h>
41 40
arch/arm/mach-omap2/board-cm-t35.c+0−6
@@ -37,7 +37,6 @@ · 36 unmodified lines
37#include <asm/mach/arch.h>37#include <asm/mach/arch.h>
38#include <asm/mach/map.h>38#include <asm/mach/map.h>
39 39
40#include <plat/board.h>
41#include "common.h"40#include "common.h"
42#include <plat/nand.h>41#include <plat/nand.h>
43#include <plat/gpmc.h>42#include <plat/gpmc.h>
@@ -714,13 +713,8 @@ static inline void cm_t35_init_mux(void) {} · 670 unmodified lines
714static inline void cm_t3730_init_mux(void) {}713static inline void cm_t3730_init_mux(void) {}
715#endif714#endif
716 715
717static struct omap_board_config_kernel cm_t35_config[] __initdata = {
718};
719
720static void __init cm_t3x_common_init(void)716static void __init cm_t3x_common_init(void)
721{717{
722 omap_board_config = cm_t35_config;
723 omap_board_config_size = ARRAY_SIZE(cm_t35_config);
724 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);718 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
725 omap_serial_init();719 omap_serial_init();
726 omap_sdrc_init(mt46h32m32lf6_sdrc_params,720 omap_sdrc_init(mt46h32m32lf6_sdrc_params,
arch/arm/mach-omap2/board-cm-t3517.c+0−6
@@ -38,7 +38,6 @@ · 37 unmodified lines
38#include <asm/mach/arch.h>38#include <asm/mach/arch.h>
39#include <asm/mach/map.h>39#include <asm/mach/map.h>
40 40
41#include <plat/board.h>
42#include "common.h"41#include "common.h"
43#include <plat/usb.h>42#include <plat/usb.h>
44#include <plat/nand.h>43#include <plat/nand.h>
@@ -249,9 +248,6 @@ static void __init cm_t3517_init_nand(void) · 204 unmodified lines
249static inline void cm_t3517_init_nand(void) {}248static inline void cm_t3517_init_nand(void) {}
250#endif249#endif
251 250
252static struct omap_board_config_kernel cm_t3517_config[] __initdata = {
253};
254
255#ifdef CONFIG_OMAP_MUX251#ifdef CONFIG_OMAP_MUX
256static struct omap_board_mux board_mux[] __initdata = {252static struct omap_board_mux board_mux[] __initdata = {
257 /* GPIO186 - Green LED */253 /* GPIO186 - Green LED */
@@ -285,8 +281,6 @@ static void __init cm_t3517_init(void) · 27 unmodified lines
285 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);281 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
286 omap_serial_init();282 omap_serial_init();
287 omap_sdrc_init(NULL, NULL);283 omap_sdrc_init(NULL, NULL);
288 omap_board_config = cm_t3517_config;
289 omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
290 cm_t3517_init_leds();284 cm_t3517_init_leds();
291 cm_t3517_init_nand();285 cm_t3517_init_nand();
292 cm_t3517_init_rtc();286 cm_t3517_init_rtc();
arch/arm/mach-omap2/board-devkit8000.c+0−1
@@ -40,7 +40,6 @@ · 39 unmodified lines
40#include <asm/mach/map.h>40#include <asm/mach/map.h>
41#include <asm/mach/flash.h>41#include <asm/mach/flash.h>
42 42
43#include <plat/board.h>
44#include "common.h"43#include "common.h"
45#include <plat/gpmc.h>44#include <plat/gpmc.h>
46#include <plat/nand.h>45#include <plat/nand.h>
arch/arm/mach-omap2/board-generic.c+0−1
@@ -20,7 +20,6 @@ · 19 unmodified lines
20#include <asm/hardware/gic.h>20#include <asm/hardware/gic.h>
21#include <asm/mach/arch.h>21#include <asm/mach/arch.h>
22 22
23#include <plat/board.h>
24#include "common.h"23#include "common.h"
25#include "common-board-devices.h"24#include "common-board-devices.h"
26 25
arch/arm/mach-omap2/board-h4.c+1−1
@@ -32,11 +32,11 @@ · 31 unmodified lines
32#include <asm/mach/arch.h>32#include <asm/mach/arch.h>
33#include <asm/mach/map.h>33#include <asm/mach/map.h>
34 34
35#include <plat/board.h>
36#include "common.h"35#include "common.h"
37#include <plat/menelaus.h>36#include <plat/menelaus.h>
38#include <plat/dma.h>37#include <plat/dma.h>
39#include <plat/gpmc.h>38#include <plat/gpmc.h>
39#include <plat/debug-devices.h>
40 40
41#include <video/omapdss.h>41#include <video/omapdss.h>
42#include <video/omap-panel-generic-dpi.h>42#include <video/omap-panel-generic-dpi.h>
arch/arm/mach-omap2/board-igep0020.c+2−1
@@ -29,7 +29,6 @@ · 28 unmodified lines
29#include <asm/mach-types.h>29#include <asm/mach-types.h>
30#include <asm/mach/arch.h>30#include <asm/mach/arch.h>
31 31
32#include <plat/board.h>
33#include "common.h"32#include "common.h"
34#include <plat/gpmc.h>33#include <plat/gpmc.h>
35#include <plat/usb.h>34#include <plat/usb.h>
@@ -554,6 +553,8 @@ static const struct usbhs_omap_board_data igep3_usbhs_bdata __initconst = { · 518 unmodified lines
554 553
555#ifdef CONFIG_OMAP_MUX554#ifdef CONFIG_OMAP_MUX
556static struct omap_board_mux board_mux[] __initdata = {555static struct omap_board_mux board_mux[] __initdata = {
556 /* SMSC9221 LAN Controller ETH IRQ (GPIO_176) */
557 OMAP3_MUX(MCSPI1_CS2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
557 { .reg_offset = OMAP_MUX_TERMINATOR },558 { .reg_offset = OMAP_MUX_TERMINATOR },
558};559};
559#endif560#endif
arch/arm/mach-omap2/board-ldp.c+0−1
@@ -35,7 +35,6 @@ · 34 unmodified lines
35#include <asm/mach/map.h>35#include <asm/mach/map.h>
36 36
37#include <plat/mcspi.h>37#include <plat/mcspi.h>
38#include <plat/board.h>
39#include "common.h"38#include "common.h"
40#include <plat/gpmc.h>39#include <plat/gpmc.h>
41#include <mach/board-zoom.h>40#include <mach/board-zoom.h>
arch/arm/mach-omap2/board-n8x0.c+0−1
@@ -25,7 +25,6 @@ · 24 unmodified lines
25#include <asm/mach/arch.h>25#include <asm/mach/arch.h>
26#include <asm/mach-types.h>26#include <asm/mach-types.h>
27 27
28#include <plat/board.h>
29#include "common.h"28#include "common.h"
30#include <plat/menelaus.h>29#include <plat/menelaus.h>
31#include <mach/irqs.h>30#include <mach/irqs.h>
arch/arm/mach-omap2/board-omap3beagle.c+0−1
@@ -39,7 +39,6 @@ · 38 unmodified lines
39#include <asm/mach/map.h>39#include <asm/mach/map.h>
40#include <asm/mach/flash.h>40#include <asm/mach/flash.h>
41 41
42#include <plat/board.h>
43#include "common.h"42#include "common.h"
44#include <video/omapdss.h>43#include <video/omapdss.h>
45#include <video/omap-panel-tfp410.h>44#include <video/omap-panel-tfp410.h>
arch/arm/mach-omap2/board-omap3evm.c+13−7
@@ -45,7 +45,6 @@ · 44 unmodified lines
45#include <asm/mach/arch.h>45#include <asm/mach/arch.h>
46#include <asm/mach/map.h>46#include <asm/mach/map.h>
47 47
48#include <plat/board.h>
49#include <plat/usb.h>48#include <plat/usb.h>
50#include <plat/nand.h>49#include <plat/nand.h>
51#include "common.h"50#include "common.h"
@@ -58,6 +57,7 @@ · 6 unmodified lines
58#include "hsmmc.h"57#include "hsmmc.h"
59#include "common-board-devices.h"58#include "common-board-devices.h"
60 59
60#define OMAP3_EVM_TS_GPIO 175
61#define OMAP3_EVM_EHCI_VBUS 2261#define OMAP3_EVM_EHCI_VBUS 22
62#define OMAP3_EVM_EHCI_SELECT 6162#define OMAP3_EVM_EHCI_SELECT 61
63 63
@@ -74,6 +74,18 @@ · 10 unmodified lines
74#define OMAP3EVM_GEN1_ETHR_GPIO_RST 6474#define OMAP3EVM_GEN1_ETHR_GPIO_RST 64
75#define OMAP3EVM_GEN2_ETHR_GPIO_RST 775#define OMAP3EVM_GEN2_ETHR_GPIO_RST 7
76 76
77/*
78 * OMAP35x EVM revision
79 * Run time detection of EVM revision is done by reading Ethernet
80 * PHY ID -
81 * GEN_1 = 0x01150000
82 * GEN_2 = 0x92200000
83 */
84enum {
85 OMAP3EVM_BOARD_GEN_1 = 0, /* EVM Rev between A - D */
86 OMAP3EVM_BOARD_GEN_2, /* EVM Rev >= Rev E */
87};
88
77static u8 omap3_evm_version;89static u8 omap3_evm_version;
78 90
79u8 get_omap3_evm_rev(void)91u8 get_omap3_evm_rev(void)
@@ -525,9 +537,6 @@ static int __init omap3_evm_i2c_init(void) · 445 unmodified lines
525 return 0;537 return 0;
526}538}
527 539
528static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
529};
530
531static struct usbhs_omap_board_data usbhs_bdata __initdata = {540static struct usbhs_omap_board_data usbhs_bdata __initdata = {
532 541
533 .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,542 .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
@@ -687,9 +696,6 @@ static void __init omap3_evm_init(void) · 153 unmodified lines
687 obm = (cpu_is_omap3630()) ? omap36x_board_mux : omap35x_board_mux;696 obm = (cpu_is_omap3630()) ? omap36x_board_mux : omap35x_board_mux;
688 omap3_mux_init(obm, OMAP_PACKAGE_CBB);697 omap3_mux_init(obm, OMAP_PACKAGE_CBB);
689 698
690 omap_board_config = omap3_evm_config;
691 omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
692
693 omap_mux_init_gpio(63, OMAP_PIN_INPUT);699 omap_mux_init_gpio(63, OMAP_PIN_INPUT);
694 omap_hsmmc_init(mmc);700 omap_hsmmc_init(mmc);
695 701
arch/arm/mach-omap2/board-omap3logic.c+0−1
@@ -41,7 +41,6 @@ · 40 unmodified lines
41#include "common-board-devices.h"41#include "common-board-devices.h"
42 42
43#include <plat/mux.h>43#include <plat/mux.h>
44#include <plat/board.h>
45#include "common.h"44#include "common.h"
46#include <plat/gpmc-smsc911x.h>45#include <plat/gpmc-smsc911x.h>
47#include <plat/gpmc.h>46#include <plat/gpmc.h>
arch/arm/mach-omap2/board-omap3pandora.c+0−1
@@ -40,7 +40,6 @@ · 39 unmodified lines
40#include <asm/mach/arch.h>40#include <asm/mach/arch.h>
41#include <asm/mach/map.h>41#include <asm/mach/map.h>
42 42
43#include <plat/board.h>
44#include "common.h"43#include "common.h"
45#include <mach/hardware.h>44#include <mach/hardware.h>
46#include <plat/mcspi.h>45#include <plat/mcspi.h>
arch/arm/mach-omap2/board-omap3stalker.c+0−6
@@ -35,7 +35,6 @@ · 34 unmodified lines
35#include <asm/mach/map.h>35#include <asm/mach/map.h>
36#include <asm/mach/flash.h>36#include <asm/mach/flash.h>
37 37
38#include <plat/board.h>
39#include "common.h"38#include "common.h"
40#include <plat/gpmc.h>39#include <plat/gpmc.h>
41#include <plat/nand.h>40#include <plat/nand.h>
@@ -362,9 +361,6 @@ static int __init omap3_stalker_i2c_init(void) · 320 unmodified lines
362 361
363#define OMAP3_STALKER_TS_GPIO 175362#define OMAP3_STALKER_TS_GPIO 175
364 363
365static struct omap_board_config_kernel omap3_stalker_config[] __initdata = {
366};
367
368static struct platform_device *omap3_stalker_devices[] __initdata = {364static struct platform_device *omap3_stalker_devices[] __initdata = {
369 &keys_gpio,365 &keys_gpio,
370};366};
@@ -399,8 +395,6 @@ static void __init omap3_stalker_init(void) · 28 unmodified lines
399{395{
400 regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));396 regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
401 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);397 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
402 omap_board_config = omap3_stalker_config;
403 omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
404 398
405 omap_mux_init_gpio(23, OMAP_PIN_INPUT);399 omap_mux_init_gpio(23, OMAP_PIN_INPUT);
406 omap_hsmmc_init(mmc);400 omap_hsmmc_init(mmc);
arch/arm/mach-omap2/board-omap3touchbook.c+0−1
@@ -44,7 +44,6 @@ · 43 unmodified lines
44#include <asm/mach/flash.h>44#include <asm/mach/flash.h>
45#include <asm/system_info.h>45#include <asm/system_info.h>
46 46
47#include <plat/board.h>
48#include "common.h"47#include "common.h"
49#include <plat/gpmc.h>48#include <plat/gpmc.h>
50#include <plat/nand.h>49#include <plat/nand.h>
arch/arm/mach-omap2/board-omap4panda.c+0−1
@@ -39,7 +39,6 @@ · 38 unmodified lines
39#include <asm/mach/map.h>39#include <asm/mach/map.h>
40#include <video/omapdss.h>40#include <video/omapdss.h>
41 41
42#include <plat/board.h>
43#include "common.h"42#include "common.h"
44#include <plat/usb.h>43#include <plat/usb.h>
45#include <plat/mmc.h>44#include <plat/mmc.h>
arch/arm/mach-omap2/board-overo.c+0−1
@@ -42,7 +42,6 @@ · 41 unmodified lines
42#include <asm/mach/flash.h>42#include <asm/mach/flash.h>
43#include <asm/mach/map.h>43#include <asm/mach/map.h>
44 44
45#include <plat/board.h>
46#include "common.h"45#include "common.h"
47#include <video/omapdss.h>46#include <video/omapdss.h>
48#include <video/omap-panel-generic-dpi.h>47#include <video/omap-panel-generic-dpi.h>
arch/arm/mach-omap2/board-rx51-peripherals.c+0−1
@@ -28,7 +28,6 @@ · 27 unmodified lines
28#include <asm/system_info.h>28#include <asm/system_info.h>
29 29
30#include <plat/mcspi.h>30#include <plat/mcspi.h>
31#include <plat/board.h>
32#include "common.h"31#include "common.h"
33#include <plat/dma.h>32#include <plat/dma.h>
34#include <plat/gpmc.h>33#include <plat/gpmc.h>
arch/arm/mach-omap2/board-rx51.c+0−1
@@ -24,7 +24,6 @@ · 23 unmodified lines
24#include <asm/mach/map.h>24#include <asm/mach/map.h>
25 25
26#include <plat/mcspi.h>26#include <plat/mcspi.h>
27#include <plat/board.h>
28#include "common.h"27#include "common.h"
29#include <plat/dma.h>28#include <plat/dma.h>
30#include <plat/gpmc.h>29#include <plat/gpmc.h>
arch/arm/mach-omap2/board-ti8168evm.c+0−6
@@ -21,7 +21,6 @@ · 20 unmodified lines
21#include <asm/mach/map.h>21#include <asm/mach/map.h>
22 22
23#include <plat/irqs.h>23#include <plat/irqs.h>
24#include <plat/board.h>
25#include "common.h"24#include "common.h"
26#include <plat/usb.h>25#include <plat/usb.h>
27 26
@@ -32,15 +31,10 @@ static struct omap_musb_board_data musb_board_data = { · 4 unmodified lines
32 .power = 500,31 .power = 500,
33};32};
34 33
35static struct omap_board_config_kernel ti81xx_evm_config[] __initdata = {
36};
37
38static void __init ti81xx_evm_init(void)34static void __init ti81xx_evm_init(void)
39{35{
40 omap_serial_init();36 omap_serial_init();
41 omap_sdrc_init(NULL, NULL);37 omap_sdrc_init(NULL, NULL);
42 omap_board_config = ti81xx_evm_config;
43 omap_board_config_size = ARRAY_SIZE(ti81xx_evm_config);
44 usb_musb_init(&musb_board_data);38 usb_musb_init(&musb_board_data);
45}39}
46 40
arch/arm/mach-omap2/board-zoom.c+0−1
@@ -22,7 +22,6 @@ · 21 unmodified lines
22#include <asm/mach/arch.h>22#include <asm/mach/arch.h>
23 23
24#include "common.h"24#include "common.h"
25#include <plat/board.h>
26#include <plat/usb.h>25#include <plat/usb.h>
27 26
28#include <mach/board-zoom.h>27#include <mach/board-zoom.h>
arch/arm/mach-omap2/common-board-devices.c+0−11
@@ -35,16 +35,6 @@ static struct omap2_mcspi_device_config ads7846_mcspi_config = { · 34 unmodified lines
35 .turbo_mode = 0,35 .turbo_mode = 0,
36};36};
37 37
38/*
39 * ADS7846 driver maybe request a gpio according to the value
40 * of pdata->get_pendown_state, but we have done this. So set
41 * get_pendown_state to avoid twice gpio requesting.
42 */
43static int omap3_get_pendown_state(void)
44{
45 return !gpio_get_value(OMAP3_EVM_TS_GPIO);
46}
47
48static struct ads7846_platform_data ads7846_config = {38static struct ads7846_platform_data ads7846_config = {
49 .x_max = 0x0fff,39 .x_max = 0x0fff,
50 .y_max = 0x0fff,40 .y_max = 0x0fff,
@@ -55,7 +45,6 @@ static struct ads7846_platform_data ads7846_config = { · 4 unmodified lines
55 .debounce_rep = 1,45 .debounce_rep = 1,
56 .gpio_pendown = -EINVAL,46 .gpio_pendown = -EINVAL,
57 .keep_vref_on = 1,47 .keep_vref_on = 1,
58 .get_pendown_state = &omap3_get_pendown_state,
59};48};
60 49
61static struct spi_board_info ads7846_spi_board_info __initdata = {50static struct spi_board_info ads7846_spi_board_info __initdata = {
arch/arm/mach-omap2/common-board-devices.h+0−1
@@ -4,7 +4,6 @@ · 3 unmodified lines
4#include "twl-common.h"4#include "twl-common.h"
5 5
6#define NAND_BLOCK_SIZE SZ_128K6#define NAND_BLOCK_SIZE SZ_128K
7#define OMAP3_EVM_TS_GPIO 175
8 7
9struct mtd_partition;8struct mtd_partition;
10struct ads7846_platform_data;9struct ads7846_platform_data;
arch/arm/mach-omap2/common.c+0−1
@@ -18,7 +18,6 @@ · 17 unmodified lines
18#include <linux/io.h>18#include <linux/io.h>
19 19
20#include <plat/hardware.h>20#include <plat/hardware.h>
21#include <plat/board.h>
22#include <plat/mux.h>21#include <plat/mux.h>
23#include <plat/clock.h>22#include <plat/clock.h>
24 23
arch/arm/mach-omap2/cpuidle44xx.c+2−1
@@ -238,8 +238,9 @@ int __init omap4_idle_init(void) · 237 unmodified lines
238 for_each_cpu(cpu_id, cpu_online_mask) {238 for_each_cpu(cpu_id, cpu_online_mask) {
239 dev = &per_cpu(omap4_idle_dev, cpu_id);239 dev = &per_cpu(omap4_idle_dev, cpu_id);
240 dev->cpu = cpu_id;240 dev->cpu = cpu_id;
241#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED
241 dev->coupled_cpus = *cpu_online_mask;242 dev->coupled_cpus = *cpu_online_mask;
242 243#endif
243 cpuidle_register_driver(&omap4_idle_driver);244 cpuidle_register_driver(&omap4_idle_driver);
244 245
245 if (cpuidle_register_device(dev)) {246 if (cpuidle_register_device(dev)) {
arch/arm/mach-omap2/devices.c+0−1
@@ -26,7 +26,6 @@ · 25 unmodified lines
26#include <asm/pmu.h>26#include <asm/pmu.h>
27 27
28#include "iomap.h"28#include "iomap.h"
29#include <plat/board.h>
30#include <plat/dma.h>29#include <plat/dma.h>
31#include <plat/omap_hwmod.h>30#include <plat/omap_hwmod.h>
32#include <plat/omap_device.h>31#include <plat/omap_device.h>
arch/arm/mach-omap2/gpmc-nand.c+23−6
@@ -18,18 +18,25 @@ · 17 unmodified lines
18 18
19#include <plat/cpu.h>19#include <plat/cpu.h>
20#include <plat/nand.h>20#include <plat/nand.h>
21#include <plat/board.h>
22#include <plat/gpmc.h>21#include <plat/gpmc.h>
23 22
24static struct resource gpmc_nand_resource = {23static struct resource gpmc_nand_resource[] = {
25 .flags = IORESOURCE_MEM,24 {
25 .flags = IORESOURCE_MEM,
26 },
27 {
28 .flags = IORESOURCE_IRQ,
29 },
30 {
31 .flags = IORESOURCE_IRQ,
32 },
26};33};
27 34
28static struct platform_device gpmc_nand_device = {35static struct platform_device gpmc_nand_device = {
29 .name = "omap2-nand",36 .name = "omap2-nand",
30 .id = 0,37 .id = 0,
31 .num_resources = 1,38 .num_resources = ARRAY_SIZE(gpmc_nand_resource),
32 .resource = &gpmc_nand_resource,39 .resource = gpmc_nand_resource,
33};40};
34 41
35static int omap2_nand_gpmc_retime(struct omap_nand_platform_data *gpmc_nand_data)42static int omap2_nand_gpmc_retime(struct omap_nand_platform_data *gpmc_nand_data)
@@ -75,6 +82,7 @@ static int omap2_nand_gpmc_retime(struct omap_nand_platform_data *gpmc_nand_data · 39 unmodified lines
75 gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_DEV_SIZE, 0);82 gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_DEV_SIZE, 0);
76 gpmc_cs_configure(gpmc_nand_data->cs,83 gpmc_cs_configure(gpmc_nand_data->cs,
77 GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NAND);84 GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NAND);
85 gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_WP, 0);
78 err = gpmc_cs_set_timings(gpmc_nand_data->cs, &t);86 err = gpmc_cs_set_timings(gpmc_nand_data->cs, &t);
79 if (err)87 if (err)
80 return err;88 return err;
@@ -90,12 +98,19 @@ int __init gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data) · 9 unmodified lines
90 gpmc_nand_device.dev.platform_data = gpmc_nand_data;98 gpmc_nand_device.dev.platform_data = gpmc_nand_data;
91 99
92 err = gpmc_cs_request(gpmc_nand_data->cs, NAND_IO_SIZE,100 err = gpmc_cs_request(gpmc_nand_data->cs, NAND_IO_SIZE,
93 &gpmc_nand_data->phys_base);101 (unsigned long *)&gpmc_nand_resource[0].start);
94 if (err < 0) {102 if (err < 0) {
95 dev_err(dev, "Cannot request GPMC CS\n");103 dev_err(dev, "Cannot request GPMC CS\n");
96 return err;104 return err;
97 }105 }
98 106
107 gpmc_nand_resource[0].end = gpmc_nand_resource[0].start +
108 NAND_IO_SIZE - 1;
109
110 gpmc_nand_resource[1].start =
111 gpmc_get_client_irq(GPMC_IRQ_FIFOEVENTENABLE);
112 gpmc_nand_resource[2].start =
113 gpmc_get_client_irq(GPMC_IRQ_COUNT_EVENT);
99 /* Set timings in GPMC */114 /* Set timings in GPMC */
100 err = omap2_nand_gpmc_retime(gpmc_nand_data);115 err = omap2_nand_gpmc_retime(gpmc_nand_data);
101 if (err < 0) {116 if (err < 0) {
@@ -108,6 +123,8 @@ int __init gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data) · 6 unmodified lines
108 gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_RDY_BSY, 1);123 gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_RDY_BSY, 1);
109 }124 }
110 125
126 gpmc_update_nand_reg(&gpmc_nand_data->reg, gpmc_nand_data->cs);
127
111 err = platform_device_register(&gpmc_nand_device);128 err = platform_device_register(&gpmc_nand_device);
112 if (err < 0) {129 if (err < 0) {
113 dev_err(dev, "Unable to register NAND device\n");130 dev_err(dev, "Unable to register NAND device\n");
arch/arm/mach-omap2/gpmc-onenand.c+22−2
@@ -20,14 +20,21 @@ · 19 unmodified lines
20 20
21#include <plat/cpu.h>21#include <plat/cpu.h>
22#include <plat/onenand.h>22#include <plat/onenand.h>
23#include <plat/board.h>
24#include <plat/gpmc.h>23#include <plat/gpmc.h>
25 24
25#define ONENAND_IO_SIZE SZ_128K
26
26static struct omap_onenand_platform_data *gpmc_onenand_data;27static struct omap_onenand_platform_data *gpmc_onenand_data;
27 28
29static struct resource gpmc_onenand_resource = {
30 .flags = IORESOURCE_MEM,
31};
32
28static struct platform_device gpmc_onenand_device = {33static struct platform_device gpmc_onenand_device = {
29 .name = "omap2-onenand",34 .name = "omap2-onenand",
30 .id = -1,35 .id = -1,
36 .num_resources = 1,
37 .resource = &gpmc_onenand_resource,
31};38};
32 39
33static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base)40static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base)
@@ -390,6 +397,8 @@ static int gpmc_onenand_setup(void __iomem *onenand_base, int *freq_ptr) · 356 unmodified lines
390 397
391void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data)398void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data)
392{399{
400 int err;
401
393 gpmc_onenand_data = _onenand_data;402 gpmc_onenand_data = _onenand_data;
394 gpmc_onenand_data->onenand_setup = gpmc_onenand_setup;403 gpmc_onenand_data->onenand_setup = gpmc_onenand_setup;
395 gpmc_onenand_device.dev.platform_data = gpmc_onenand_data;404 gpmc_onenand_device.dev.platform_data = gpmc_onenand_data;
@@ -401,8 +410,19 @@ void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data) · 5 unmodified lines
401 gpmc_onenand_data->flags |= ONENAND_SYNC_READ;410 gpmc_onenand_data->flags |= ONENAND_SYNC_READ;
402 }411 }
403 412
413 err = gpmc_cs_request(gpmc_onenand_data->cs, ONENAND_IO_SIZE,
414 (unsigned long *)&gpmc_onenand_resource.start);
415 if (err < 0) {
416 pr_err("%s: Cannot request GPMC CS\n", __func__);
417 return;
418 }
419
420 gpmc_onenand_resource.end = gpmc_onenand_resource.start +
421 ONENAND_IO_SIZE - 1;
422
404 if (platform_device_register(&gpmc_onenand_device) < 0) {423 if (platform_device_register(&gpmc_onenand_device) < 0) {
405 printk(KERN_ERR "Unable to register OneNAND device\n");424 pr_err("%s: Unable to register OneNAND device\n", __func__);
425 gpmc_cs_free(gpmc_onenand_data->cs);
406 return;426 return;
407 }427 }
408}428}
arch/arm/mach-omap2/gpmc-smc91x.c+0−1
@@ -17,7 +17,6 @@ · 16 unmodified lines
17#include <linux/io.h>17#include <linux/io.h>
18#include <linux/smc91x.h>18#include <linux/smc91x.h>
19 19
20#include <plat/board.h>
21#include <plat/gpmc.h>20#include <plat/gpmc.h>
22#include <plat/gpmc-smc91x.h>21#include <plat/gpmc-smc91x.h>
23 22
arch/arm/mach-omap2/gpmc-smsc911x.c+0−1
@@ -20,7 +20,6 @@ · 19 unmodified lines
20#include <linux/io.h>20#include <linux/io.h>
21#include <linux/smsc911x.h>21#include <linux/smsc911x.h>
22 22
23#include <plat/board.h>
24#include <plat/gpmc.h>23#include <plat/gpmc.h>
25#include <plat/gpmc-smsc911x.h>24#include <plat/gpmc-smsc911x.h>
26 25
arch/arm/mach-omap2/gpmc.c+139−17
@@ -78,6 +78,15 @@ · 77 unmodified lines
78#define ENABLE_PREFETCH (0x1 << 7)78#define ENABLE_PREFETCH (0x1 << 7)
79#define DMA_MPU_MODE 279#define DMA_MPU_MODE 2
80 80
81/* XXX: Only NAND irq has been considered,currently these are the only ones used
82 */
83#define GPMC_NR_IRQ 2
84
85struct gpmc_client_irq {
86 unsigned irq;
87 u32 bitmask;
88};
89
81/* Structure to save gpmc cs context */90/* Structure to save gpmc cs context */
82struct gpmc_cs_config {91struct gpmc_cs_config {
83 u32 config1;92 u32 config1;
@@ -105,6 +114,10 @@ struct omap3_gpmc_regs { · 21 unmodified lines
105 struct gpmc_cs_config cs_context[GPMC_CS_NUM];114 struct gpmc_cs_config cs_context[GPMC_CS_NUM];
106};115};
107 116
117static struct gpmc_client_irq gpmc_client_irq[GPMC_NR_IRQ];
118static struct irq_chip gpmc_irq_chip;
119static unsigned gpmc_irq_start;
120
108static struct resource gpmc_mem_root;121static struct resource gpmc_mem_root;
109static struct resource gpmc_cs_mem[GPMC_CS_NUM];122static struct resource gpmc_cs_mem[GPMC_CS_NUM];
110static DEFINE_SPINLOCK(gpmc_mem_lock);123static DEFINE_SPINLOCK(gpmc_mem_lock);
@@ -682,6 +695,117 @@ int gpmc_prefetch_reset(int cs) · 571 unmodified lines
682}695}
683EXPORT_SYMBOL(gpmc_prefetch_reset);696EXPORT_SYMBOL(gpmc_prefetch_reset);
684 697
698void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs)
699{
700 reg->gpmc_status = gpmc_base + GPMC_STATUS;
701 reg->gpmc_nand_command = gpmc_base + GPMC_CS0_OFFSET +
702 GPMC_CS_NAND_COMMAND + GPMC_CS_SIZE * cs;
703 reg->gpmc_nand_address = gpmc_base + GPMC_CS0_OFFSET +
704 GPMC_CS_NAND_ADDRESS + GPMC_CS_SIZE * cs;
705 reg->gpmc_nand_data = gpmc_base + GPMC_CS0_OFFSET +
706 GPMC_CS_NAND_DATA + GPMC_CS_SIZE * cs;
707 reg->gpmc_prefetch_config1 = gpmc_base + GPMC_PREFETCH_CONFIG1;
708 reg->gpmc_prefetch_config2 = gpmc_base + GPMC_PREFETCH_CONFIG2;
709 reg->gpmc_prefetch_control = gpmc_base + GPMC_PREFETCH_CONTROL;
710 reg->gpmc_prefetch_status = gpmc_base + GPMC_PREFETCH_STATUS;
711 reg->gpmc_ecc_config = gpmc_base + GPMC_ECC_CONFIG;
712 reg->gpmc_ecc_control = gpmc_base + GPMC_ECC_CONTROL;
713 reg->gpmc_ecc_size_config = gpmc_base + GPMC_ECC_SIZE_CONFIG;
714 reg->gpmc_ecc1_result = gpmc_base + GPMC_ECC1_RESULT;
715 reg->gpmc_bch_result0 = gpmc_base + GPMC_ECC_BCH_RESULT_0;
716}
717
718int gpmc_get_client_irq(unsigned irq_config)
719{
720 int i;
721
722 if (hweight32(irq_config) > 1)
723 return 0;
724
725 for (i = 0; i < GPMC_NR_IRQ; i++)
726 if (gpmc_client_irq[i].bitmask & irq_config)
727 return gpmc_client_irq[i].irq;
728
729 return 0;
730}
731
732static int gpmc_irq_endis(unsigned irq, bool endis)
733{
734 int i;
735 u32 regval;
736
737 for (i = 0; i < GPMC_NR_IRQ; i++)
738 if (irq == gpmc_client_irq[i].irq) {
739 regval = gpmc_read_reg(GPMC_IRQENABLE);
740 if (endis)
741 regval |= gpmc_client_irq[i].bitmask;
742 else
743 regval &= ~gpmc_client_irq[i].bitmask;
744 gpmc_write_reg(GPMC_IRQENABLE, regval);
745 break;
746 }
747
748 return 0;
749}
750
751static void gpmc_irq_disable(struct irq_data *p)
752{
753 gpmc_irq_endis(p->irq, false);
754}
755
756static void gpmc_irq_enable(struct irq_data *p)
757{
758 gpmc_irq_endis(p->irq, true);
759}
760
761static void gpmc_irq_noop(struct irq_data *data) { }
762
763static unsigned int gpmc_irq_noop_ret(struct irq_data *data) { return 0; }
764
765static int gpmc_setup_irq(int gpmc_irq)
766{
767 int i;
768 u32 regval;
769
770 if (!gpmc_irq)
771 return -EINVAL;
772
773 gpmc_irq_start = irq_alloc_descs(-1, 0, GPMC_NR_IRQ, 0);
774 if (IS_ERR_VALUE(gpmc_irq_start)) {
775 pr_err("irq_alloc_descs failed\n");
776 return gpmc_irq_start;
777 }
778
779 gpmc_irq_chip.name = "gpmc";
780 gpmc_irq_chip.irq_startup = gpmc_irq_noop_ret;
781 gpmc_irq_chip.irq_enable = gpmc_irq_enable;
782 gpmc_irq_chip.irq_disable = gpmc_irq_disable;
783 gpmc_irq_chip.irq_shutdown = gpmc_irq_noop;
784 gpmc_irq_chip.irq_ack = gpmc_irq_noop;
785 gpmc_irq_chip.irq_mask = gpmc_irq_noop;
786 gpmc_irq_chip.irq_unmask = gpmc_irq_noop;
787
788 gpmc_client_irq[0].bitmask = GPMC_IRQ_FIFOEVENTENABLE;
789 gpmc_client_irq[1].bitmask = GPMC_IRQ_COUNT_EVENT;
790
791 for (i = 0; i < GPMC_NR_IRQ; i++) {
792 gpmc_client_irq[i].irq = gpmc_irq_start + i;
793 irq_set_chip_and_handler(gpmc_client_irq[i].irq,
794 &gpmc_irq_chip, handle_simple_irq);
795 set_irq_flags(gpmc_client_irq[i].irq,
796 IRQF_VALID | IRQF_NOAUTOEN);
797 }
798
799 /* Disable interrupts */
800 gpmc_write_reg(GPMC_IRQENABLE, 0);
801
802 /* clear interrupts */
803 regval = gpmc_read_reg(GPMC_IRQSTATUS);
804 gpmc_write_reg(GPMC_IRQSTATUS, regval);
805
806 return request_irq(gpmc_irq, gpmc_handle_irq, 0, "gpmc", NULL);
807}
808
685static void __init gpmc_mem_init(void)809static void __init gpmc_mem_init(void)
686{810{
687 int cs;811 int cs;
@@ -711,8 +835,8 @@ static void __init gpmc_mem_init(void) · 23 unmodified lines
711 835
712static int __init gpmc_init(void)836static int __init gpmc_init(void)
713{837{
714 u32 l, irq;838 u32 l;
715 int cs, ret = -EINVAL;839 int ret = -EINVAL;
716 int gpmc_irq;840 int gpmc_irq;
717 char *ck = NULL;841 char *ck = NULL;
718 842
@@ -761,16 +885,7 @@ static int __init gpmc_init(void) · 42 unmodified lines
761 gpmc_write_reg(GPMC_SYSCONFIG, l);885 gpmc_write_reg(GPMC_SYSCONFIG, l);
762 gpmc_mem_init();886 gpmc_mem_init();
763 887
764 /* initalize the irq_chained */888 ret = gpmc_setup_irq(gpmc_irq);
765 irq = OMAP_GPMC_IRQ_BASE;
766 for (cs = 0; cs < GPMC_CS_NUM; cs++) {
767 irq_set_chip_and_handler(irq, &dummy_irq_chip,
768 handle_simple_irq);
769 set_irq_flags(irq, IRQF_VALID);
770 irq++;
771 }
772
773 ret = request_irq(gpmc_irq, gpmc_handle_irq, IRQF_SHARED, "gpmc", NULL);
774 if (ret)889 if (ret)
775 pr_err("gpmc: irq-%d could not claim: err %d\n",890 pr_err("gpmc: irq-%d could not claim: err %d\n",
776 gpmc_irq, ret);891 gpmc_irq, ret);
@@ -780,12 +895,19 @@ postcore_initcall(gpmc_init); · 3 unmodified lines
780 895
781static irqreturn_t gpmc_handle_irq(int irq, void *dev)896static irqreturn_t gpmc_handle_irq(int irq, void *dev)
782{897{
783 u8 cs;898 int i;
899 u32 regval;
900
901 regval = gpmc_read_reg(GPMC_IRQSTATUS);
902
903 if (!regval)
904 return IRQ_NONE;
905
906 for (i = 0; i < GPMC_NR_IRQ; i++)
907 if (regval & gpmc_client_irq[i].bitmask)
908 generic_handle_irq(gpmc_client_irq[i].irq);
784 909
785 /* check cs to invoke the irq */910 gpmc_write_reg(GPMC_IRQSTATUS, regval);
786 cs = ((gpmc_read_reg(GPMC_PREFETCH_CONFIG1)) >> CS_NUM_SHIFT) & 0x7;
787 if (OMAP_GPMC_IRQ_BASE+cs <= OMAP_GPMC_IRQ_END)
788 generic_handle_irq(OMAP_GPMC_IRQ_BASE+cs);
789 911
790 return IRQ_HANDLED;912 return IRQ_HANDLED;
791}913}
arch/arm/mach-omap2/mux.h+0−1
@@ -127,7 +127,6 @@ struct omap_mux_partition { · 126 unmodified lines
127 * @gpio: GPIO number127 * @gpio: GPIO number
128 * @muxnames: available signal modes for a ball128 * @muxnames: available signal modes for a ball
129 * @balls: available balls on the package129 * @balls: available balls on the package
130 * @partition: mux partition
131 */130 */
132struct omap_mux {131struct omap_mux {
133 u16 reg_offset;132 u16 reg_offset;
arch/arm/mach-omap2/opp4xxx_data.c+1−1
@@ -94,7 +94,7 @@ int __init omap4_opp_init(void) · 93 unmodified lines
94{94{
95 int r = -ENODEV;95 int r = -ENODEV;
96 96
97 if (!cpu_is_omap44xx())97 if (!cpu_is_omap443x())
98 return r;98 return r;
99 99
100 r = omap_init_opp_table(omap44xx_opp_def_list,100 r = omap_init_opp_table(omap44xx_opp_def_list,
arch/arm/mach-omap2/pm-debug.c+0−1
@@ -28,7 +28,6 @@ · 27 unmodified lines
28#include <linux/slab.h>28#include <linux/slab.h>
29 29
30#include <plat/clock.h>30#include <plat/clock.h>
31#include <plat/board.h>
32#include "powerdomain.h"31#include "powerdomain.h"
33#include "clockdomain.h"32#include "clockdomain.h"
34#include <plat/dmtimer.h>33#include <plat/dmtimer.h>
arch/arm/mach-omap2/pm24xx.c+0−11
@@ -38,7 +38,6 @@ · 37 unmodified lines
38#include <plat/clock.h>38#include <plat/clock.h>
39#include <plat/sram.h>39#include <plat/sram.h>
40#include <plat/dma.h>40#include <plat/dma.h>
41#include <plat/board.h>
42 41
43#include <mach/irqs.h>42#include <mach/irqs.h>
44 43
@@ -352,16 +351,6 @@ int __init omap2_pm_init(void) · 307 unmodified lines
352 351
353 prcm_setup_regs();352 prcm_setup_regs();
354 353
355 /* Hack to prevent MPU retention when STI console is enabled. */
356 {
357 const struct omap_sti_console_config *sti;
358
359 sti = omap_get_config(OMAP_TAG_STI_CONSOLE,
360 struct omap_sti_console_config);
361 if (sti != NULL && sti->enable)
362 sti_console_enabled = 1;
363 }
364
365 /*354 /*
366 * We copy the assembler sleep/wakeup routines to SRAM.355 * We copy the assembler sleep/wakeup routines to SRAM.
367 * These routines need to be in SRAM as that's the only356 * These routines need to be in SRAM as that's the only
arch/arm/mach-omap2/pm34xx.c+4−15
@@ -272,21 +272,16 @@ void omap_sram_idle(void) · 271 unmodified lines
272 per_next_state = pwrdm_read_next_pwrst(per_pwrdm);272 per_next_state = pwrdm_read_next_pwrst(per_pwrdm);
273 core_next_state = pwrdm_read_next_pwrst(core_pwrdm);273 core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
274 274
275 if (mpu_next_state < PWRDM_POWER_ON) {275 pwrdm_pre_transition(NULL);
276 pwrdm_pre_transition(mpu_pwrdm);
277 pwrdm_pre_transition(neon_pwrdm);
278 }
279 276
280 /* PER */277 /* PER */
281 if (per_next_state < PWRDM_POWER_ON) {278 if (per_next_state < PWRDM_POWER_ON) {
282 pwrdm_pre_transition(per_pwrdm);
283 per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0;279 per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0;
284 omap2_gpio_prepare_for_idle(per_going_off);280 omap2_gpio_prepare_for_idle(per_going_off);
285 }281 }
286 282
287 /* CORE */283 /* CORE */
288 if (core_next_state < PWRDM_POWER_ON) {284 if (core_next_state < PWRDM_POWER_ON) {
289 pwrdm_pre_transition(core_pwrdm);
290 if (core_next_state == PWRDM_POWER_OFF) {285 if (core_next_state == PWRDM_POWER_OFF) {
291 omap3_core_save_context();286 omap3_core_save_context();
292 omap3_cm_save_context();287 omap3_cm_save_context();
@@ -339,20 +334,14 @@ void omap_sram_idle(void) · 46 unmodified lines
339 omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK,334 omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK,
340 OMAP3430_GR_MOD,335 OMAP3430_GR_MOD,
341 OMAP3_PRM_VOLTCTRL_OFFSET);336 OMAP3_PRM_VOLTCTRL_OFFSET);
342 pwrdm_post_transition(core_pwrdm);
343 }337 }
344 omap3_intc_resume_idle();338 omap3_intc_resume_idle();
345 339
340 pwrdm_post_transition(NULL);
341
346 /* PER */342 /* PER */
347 if (per_next_state < PWRDM_POWER_ON) {343 if (per_next_state < PWRDM_POWER_ON)
348 omap2_gpio_resume_after_idle();344 omap2_gpio_resume_after_idle();
349 pwrdm_post_transition(per_pwrdm);
350 }
351
352 if (mpu_next_state < PWRDM_POWER_ON) {
353 pwrdm_post_transition(mpu_pwrdm);
354 pwrdm_post_transition(neon_pwrdm);
355 }
356}345}
357 346
358static void omap3_pm_idle(void)347static void omap3_pm_idle(void)
arch/arm/mach-omap2/serial.c+0−1
@@ -29,7 +29,6 @@ · 28 unmodified lines
29 29
30#include <plat/omap-serial.h>30#include <plat/omap-serial.h>
31#include "common.h"31#include "common.h"
32#include <plat/board.h>
33#include <plat/dma.h>32#include <plat/dma.h>
34#include <plat/omap_hwmod.h>33#include <plat/omap_hwmod.h>
35#include <plat/omap_device.h>34#include <plat/omap_device.h>
arch/arm/mach-omap2/sleep44xx.S+6−2
@@ -56,9 +56,13 @@ ppa_por_params: · 55 unmodified lines
56 * The restore function pointer is stored at CPUx_WAKEUP_NS_PA_ADDR_OFFSET.56 * The restore function pointer is stored at CPUx_WAKEUP_NS_PA_ADDR_OFFSET.
57 * It returns to the caller for CPU INACTIVE and ON power states or in case57 * It returns to the caller for CPU INACTIVE and ON power states or in case
58 * CPU failed to transition to targeted OFF/DORMANT state.58 * CPU failed to transition to targeted OFF/DORMANT state.
59 *
60 * omap4_finish_suspend() calls v7_flush_dcache_all() which doesn't save
61 * stack frame and it expects the caller to take care of it. Hence the entire
62 * stack frame is saved to avoid possible stack corruption.
59 */63 */
60ENTRY(omap4_finish_suspend)64ENTRY(omap4_finish_suspend)
61 stmfd sp!, {lr}65 stmfd sp!, {r4-r12, lr}
62 cmp r0, #0x066 cmp r0, #0x0
63 beq do_WFI @ No lowpower state, jump to WFI67 beq do_WFI @ No lowpower state, jump to WFI
64 68
@@ -226,7 +230,7 @@ scu_gp_clear: · 161 unmodified lines
226skip_scu_gp_clear:230skip_scu_gp_clear:
227 isb231 isb
228 dsb232 dsb
229 ldmfd sp!, {pc}233 ldmfd sp!, {r4-r12, pc}
230ENDPROC(omap4_finish_suspend)234ENDPROC(omap4_finish_suspend)
231 235
232/*236/*
arch/arm/mach-omap2/twl-common.c+1−0
@@ -67,6 +67,7 @@ void __init omap_pmic_init(int bus, u32 clkrate, · 66 unmodified lines
67 const char *pmic_type, int pmic_irq,67 const char *pmic_type, int pmic_irq,
68 struct twl4030_platform_data *pmic_data)68 struct twl4030_platform_data *pmic_data)
69{69{
70 omap_mux_init_signal("sys_nirq", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE);
70 strncpy(pmic_i2c_board_info.type, pmic_type,71 strncpy(pmic_i2c_board_info.type, pmic_type,
71 sizeof(pmic_i2c_board_info.type));72 sizeof(pmic_i2c_board_info.type));
72 pmic_i2c_board_info.irq = pmic_irq;73 pmic_i2c_board_info.irq = pmic_irq;
arch/arm/mach-orion5x/common.c+2−1
@@ -109,7 +109,8 @@ void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data) · 108 unmodified lines
109{109{
110 orion_ge00_init(eth_data,110 orion_ge00_init(eth_data,
111 ORION5X_ETH_PHYS_BASE, IRQ_ORION5X_ETH_SUM,111 ORION5X_ETH_PHYS_BASE, IRQ_ORION5X_ETH_SUM,
112 IRQ_ORION5X_ETH_ERR);112 IRQ_ORION5X_ETH_ERR,
113 MV643XX_TX_CSUM_DEFAULT_LIMIT);
113}114}
114 115
115 116
arch/arm/mach-s3c24xx/include/mach/dma.h+2−1
@@ -24,7 +24,8 @@ · 23 unmodified lines
24*/24*/
25 25
26enum dma_ch {26enum dma_ch {
27 DMACH_XD0,27 DMACH_DT_PROP = -1, /* not yet supported, do not use */
28 DMACH_XD0 = 0,
28 DMACH_XD1,29 DMACH_XD1,
29 DMACH_SDI,30 DMACH_SDI,
30 DMACH_SPI0,31 DMACH_SPI0,
arch/arm/mach-shmobile/board-armadillo800eva.c+7−6
@@ -520,13 +520,14 @@ static struct platform_device hdmi_lcdc_device = { · 519 unmodified lines
520};520};
521 521
522/* GPIO KEY */522/* GPIO KEY */
523#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 }523#define GPIO_KEY(c, g, d, ...) \
524 { .code = c, .gpio = g, .desc = d, .active_low = 1, __VA_ARGS__ }
524 525
525static struct gpio_keys_button gpio_buttons[] = {526static struct gpio_keys_button gpio_buttons[] = {
526 GPIO_KEY(KEY_POWER, GPIO_PORT99, "SW1"),527 GPIO_KEY(KEY_POWER, GPIO_PORT99, "SW3", .wakeup = 1),
527 GPIO_KEY(KEY_BACK, GPIO_PORT100, "SW2"),528 GPIO_KEY(KEY_BACK, GPIO_PORT100, "SW4"),
528 GPIO_KEY(KEY_MENU, GPIO_PORT97, "SW3"),529 GPIO_KEY(KEY_MENU, GPIO_PORT97, "SW5"),
529 GPIO_KEY(KEY_HOME, GPIO_PORT98, "SW4"),530 GPIO_KEY(KEY_HOME, GPIO_PORT98, "SW6"),
530};531};
531 532
532static struct gpio_keys_platform_data gpio_key_info = {533static struct gpio_keys_platform_data gpio_key_info = {
@@ -901,8 +902,8 @@ static struct platform_device *eva_devices[] __initdata = { · 368 unmodified lines
901 &camera_device,902 &camera_device,
902 &ceu0_device,903 &ceu0_device,
903 &fsi_device,904 &fsi_device,
904 &fsi_hdmi_device,
905 &fsi_wm8978_device,905 &fsi_wm8978_device,
906 &fsi_hdmi_device,
906};907};
907 908
908static void __init eva_clock_init(void)909static void __init eva_clock_init(void)
arch/arm/mach-shmobile/board-mackerel.c+2−1
@@ -695,6 +695,7 @@ static struct platform_device usbhs0_device = { · 694 unmodified lines
695 * - J30 "open"695 * - J30 "open"
696 * - modify usbhs1_get_id() USBHS_HOST -> USBHS_GADGET696 * - modify usbhs1_get_id() USBHS_HOST -> USBHS_GADGET
697 * - add .get_vbus = usbhs_get_vbus in usbhs1_private697 * - add .get_vbus = usbhs_get_vbus in usbhs1_private
698 * - check usbhs0_device(pio)/usbhs1_device(irq) order in mackerel_devices.
698 */699 */
699#define IRQ8 evt2irq(0x0300)700#define IRQ8 evt2irq(0x0300)
700#define USB_PHY_MODE (1 << 4)701#define USB_PHY_MODE (1 << 4)
@@ -1325,8 +1326,8 @@ static struct platform_device *mackerel_devices[] __initdata = { · 624 unmodified lines
1325 &nor_flash_device,1326 &nor_flash_device,
1326 &smc911x_device,1327 &smc911x_device,
1327 &lcdc_device,1328 &lcdc_device,
1328 &usbhs1_device,
1329 &usbhs0_device,1329 &usbhs0_device,
1330 &usbhs1_device,
1330 &leds_device,1331 &leds_device,
1331 &fsi_device,1332 &fsi_device,
1332 &fsi_ak4643_device,1333 &fsi_ak4643_device,
arch/arm/mach-shmobile/board-marzen.c+1−1
@@ -67,7 +67,7 @@ static struct smsc911x_platform_config smsc911x_platdata = { · 66 unmodified lines
67 67
68static struct platform_device eth_device = {68static struct platform_device eth_device = {
69 .name = "smsc911x",69 .name = "smsc911x",
70 .id = 0,70 .id = -1,
71 .dev = {71 .dev = {
72 .platform_data = &smsc911x_platdata,72 .platform_data = &smsc911x_platdata,
73 },73 },
arch/arm/mach-shmobile/intc-sh73a0.c+2−2
@@ -259,9 +259,9 @@ static int sh73a0_set_wake(struct irq_data *data, unsigned int on) · 258 unmodified lines
259 return 0; /* always allow wakeup */259 return 0; /* always allow wakeup */
260}260}
261 261
262#define RELOC_BASE 0x1000262#define RELOC_BASE 0x1200
263 263
264/* INTCA IRQ pins at INTCS + 0x1000 to make space for GIC+INTC handling */264/* INTCA IRQ pins at INTCS + RELOC_BASE to make space for GIC+INTC handling */
265#define INTCS_VECT_RELOC(n, vect) INTCS_VECT((n), (vect) + RELOC_BASE)265#define INTCS_VECT_RELOC(n, vect) INTCS_VECT((n), (vect) + RELOC_BASE)
266 266
267INTC_IRQ_PINS_32(intca_irq_pins, 0xe6900000,267INTC_IRQ_PINS_32(intca_irq_pins, 0xe6900000,
arch/arm/mach-ux500/Kconfig+0−1
@@ -41,7 +41,6 @@ config MACH_HREFV60 · 40 unmodified lines
41config MACH_SNOWBALL41config MACH_SNOWBALL
42 bool "U8500 Snowball platform"42 bool "U8500 Snowball platform"
43 select MACH_MOP50043 select MACH_MOP500
44 select LEDS_GPIO
45 help44 help
46 Include support for the snowball development platform.45 Include support for the snowball development platform.
47 46
arch/arm/mach-ux500/board-mop500-msp.c+5−5
@@ -191,9 +191,9 @@ static struct platform_device *db8500_add_msp_i2s(struct device *parent, · 190 unmodified lines
191 return pdev;191 return pdev;
192}192}
193 193
194/* Platform device for ASoC U8500 machine */194/* Platform device for ASoC MOP500 machine */
195static struct platform_device snd_soc_u8500 = {195static struct platform_device snd_soc_mop500 = {
196 .name = "snd-soc-u8500",196 .name = "snd-soc-mop500",
197 .id = 0,197 .id = 0,
198 .dev = {198 .dev = {
199 .platform_data = NULL,199 .platform_data = NULL,
@@ -227,8 +227,8 @@ int mop500_msp_init(struct device *parent) · 27 unmodified lines
227{227{
228 struct platform_device *msp1;228 struct platform_device *msp1;
229 229
230 pr_info("%s: Register platform-device 'snd-soc-u8500'.\n", __func__);230 pr_info("%s: Register platform-device 'snd-soc-mop500'.\n", __func__);
231 platform_device_register(&snd_soc_u8500);231 platform_device_register(&snd_soc_mop500);
232 232
233 pr_info("Initialize MSP I2S-devices.\n");233 pr_info("Initialize MSP I2S-devices.\n");
234 db8500_add_msp_i2s(parent, 0, U8500_MSP0_BASE, IRQ_DB8500_MSP0,234 db8500_add_msp_i2s(parent, 0, U8500_MSP0_BASE, IRQ_DB8500_MSP0,
arch/arm/mach-ux500/board-mop500.c+4−0
@@ -776,6 +776,7 @@ static void __init u8500_init_machine(void) · 775 unmodified lines
776 ARRAY_SIZE(mop500_platform_devs));776 ARRAY_SIZE(mop500_platform_devs));
777 777
778 mop500_sdi_init(parent);778 mop500_sdi_init(parent);
779 mop500_msp_init(parent);
779 i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices);780 i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices);
780 i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs);781 i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs);
781 i2c_register_board_info(2, mop500_i2c2_devices,782 i2c_register_board_info(2, mop500_i2c2_devices,
@@ -783,6 +784,8 @@ static void __init u8500_init_machine(void) · 1 unmodified line
783 784
784 mop500_uib_init();785 mop500_uib_init();
785 786
787 } else if (of_machine_is_compatible("calaosystems,snowball-a9500")) {
788 mop500_msp_init(parent);
786 } else if (of_machine_is_compatible("st-ericsson,hrefv60+")) {789 } else if (of_machine_is_compatible("st-ericsson,hrefv60+")) {
787 /*790 /*
788 * The HREFv60 board removed a GPIO expander and routed791 * The HREFv60 board removed a GPIO expander and routed
@@ -794,6 +797,7 @@ static void __init u8500_init_machine(void) · 5 unmodified lines
794 ARRAY_SIZE(mop500_platform_devs));797 ARRAY_SIZE(mop500_platform_devs));
795 798
796 hrefv60_sdi_init(parent);799 hrefv60_sdi_init(parent);
800 mop500_msp_init(parent);
797 801
798 i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices);802 i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices);
799 i2c0_devs -= NUM_PRE_V60_I2C0_DEVICES;803 i2c0_devs -= NUM_PRE_V60_I2C0_DEVICES;
arch/arm/mm/dma-mapping.c+104−10
@@ -267,17 +267,19 @@ static void __dma_free_remap(void *cpu_addr, size_t size) · 266 unmodified lines
267 vunmap(cpu_addr);267 vunmap(cpu_addr);
268}268}
269 269
270#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_256K
271
270struct dma_pool {272struct dma_pool {
271 size_t size;273 size_t size;
272 spinlock_t lock;274 spinlock_t lock;
273 unsigned long *bitmap;275 unsigned long *bitmap;
274 unsigned long nr_pages;276 unsigned long nr_pages;
275 void *vaddr;277 void *vaddr;
276 struct page *page;278 struct page **pages;
277};279};
278 280
279static struct dma_pool atomic_pool = {281static struct dma_pool atomic_pool = {
280 .size = SZ_256K,282 .size = DEFAULT_DMA_COHERENT_POOL_SIZE,
281};283};
282 284
283static int __init early_coherent_pool(char *p)285static int __init early_coherent_pool(char *p)
@@ -287,6 +289,21 @@ static int __init early_coherent_pool(char *p) · 3 unmodified lines
287}289}
288early_param("coherent_pool", early_coherent_pool);290early_param("coherent_pool", early_coherent_pool);
289 291
292void __init init_dma_coherent_pool_size(unsigned long size)
293{
294 /*
295 * Catch any attempt to set the pool size too late.
296 */
297 BUG_ON(atomic_pool.vaddr);
298
299 /*
300 * Set architecture specific coherent pool size only if
301 * it has not been changed by kernel command line parameter.
302 */
303 if (atomic_pool.size == DEFAULT_DMA_COHERENT_POOL_SIZE)
304 atomic_pool.size = size;
305}
306
290/*307/*
291 * Initialise the coherent pool for atomic allocations.308 * Initialise the coherent pool for atomic allocations.
292 */309 */
@@ -297,6 +314,7 @@ static int __init atomic_pool_init(void) · 4 unmodified lines
297 unsigned long nr_pages = pool->size >> PAGE_SHIFT;314 unsigned long nr_pages = pool->size >> PAGE_SHIFT;
298 unsigned long *bitmap;315 unsigned long *bitmap;
299 struct page *page;316 struct page *page;
317 struct page **pages;
300 void *ptr;318 void *ptr;
301 int bitmap_size = BITS_TO_LONGS(nr_pages) * sizeof(long);319 int bitmap_size = BITS_TO_LONGS(nr_pages) * sizeof(long);
302 320
@@ -304,21 +322,31 @@ static int __init atomic_pool_init(void) · 1 unmodified line
304 if (!bitmap)322 if (!bitmap)
305 goto no_bitmap;323 goto no_bitmap;
306 324
325 pages = kzalloc(nr_pages * sizeof(struct page *), GFP_KERNEL);
326 if (!pages)
327 goto no_pages;
328
307 if (IS_ENABLED(CONFIG_CMA))329 if (IS_ENABLED(CONFIG_CMA))
308 ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page);330 ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page);
309 else331 else
310 ptr = __alloc_remap_buffer(NULL, pool->size, GFP_KERNEL, prot,332 ptr = __alloc_remap_buffer(NULL, pool->size, GFP_KERNEL, prot,
311 &page, NULL);333 &page, NULL);
312 if (ptr) {334 if (ptr) {
335 int i;
336
337 for (i = 0; i < nr_pages; i++)
338 pages[i] = page + i;
339
313 spin_lock_init(&pool->lock);340 spin_lock_init(&pool->lock);
314 pool->vaddr = ptr;341 pool->vaddr = ptr;
315 pool->page = page;342 pool->pages = pages;
316 pool->bitmap = bitmap;343 pool->bitmap = bitmap;
317 pool->nr_pages = nr_pages;344 pool->nr_pages = nr_pages;
318 pr_info("DMA: preallocated %u KiB pool for atomic coherent allocations\n",345 pr_info("DMA: preallocated %u KiB pool for atomic coherent allocations\n",
319 (unsigned)pool->size / 1024);346 (unsigned)pool->size / 1024);
320 return 0;347 return 0;
321 }348 }
349no_pages:
322 kfree(bitmap);350 kfree(bitmap);
323no_bitmap:351no_bitmap:
324 pr_err("DMA: failed to allocate %u KiB pool for atomic coherent allocation\n",352 pr_err("DMA: failed to allocate %u KiB pool for atomic coherent allocation\n",
@@ -443,27 +471,45 @@ static void *__alloc_from_pool(size_t size, struct page **ret_page) · 118 unmodified lines
443 if (pageno < pool->nr_pages) {471 if (pageno < pool->nr_pages) {
444 bitmap_set(pool->bitmap, pageno, count);472 bitmap_set(pool->bitmap, pageno, count);
445 ptr = pool->vaddr + PAGE_SIZE * pageno;473 ptr = pool->vaddr + PAGE_SIZE * pageno;
446 *ret_page = pool->page + pageno;474 *ret_page = pool->pages[pageno];
475 } else {
476 pr_err_once("ERROR: %u KiB atomic DMA coherent pool is too small!\n"
477 "Please increase it with coherent_pool= kernel parameter!\n",
478 (unsigned)pool->size / 1024);
447 }479 }
448 spin_unlock_irqrestore(&pool->lock, flags);480 spin_unlock_irqrestore(&pool->lock, flags);
449 481
450 return ptr;482 return ptr;
451}483}
452 484
485static bool __in_atomic_pool(void *start, size_t size)
486{
487 struct dma_pool *pool = &atomic_pool;
488 void *end = start + size;
489 void *pool_start = pool->vaddr;
490 void *pool_end = pool->vaddr + pool->size;
491
492 if (start < pool_start || start > pool_end)
493 return false;
494
495 if (end <= pool_end)
496 return true;
497
498 WARN(1, "Wrong coherent size(%p-%p) from atomic pool(%p-%p)\n",
499 start, end - 1, pool_start, pool_end - 1);
500
501 return false;
502}
503
453static int __free_from_pool(void *start, size_t size)504static int __free_from_pool(void *start, size_t size)
454{505{
455 struct dma_pool *pool = &atomic_pool;506 struct dma_pool *pool = &atomic_pool;
456 unsigned long pageno, count;507 unsigned long pageno, count;
457 unsigned long flags;508 unsigned long flags;
458 509
459 if (start < pool->vaddr || start > pool->vaddr + pool->size)510 if (!__in_atomic_pool(start, size))
460 return 0;511 return 0;
461 512
462 if (start + size > pool->vaddr + pool->size) {
463 WARN(1, "freeing wrong coherent size from pool\n");
464 return 0;
465 }
466
467 pageno = (start - pool->vaddr) >> PAGE_SHIFT;513 pageno = (start - pool->vaddr) >> PAGE_SHIFT;
468 count = size >> PAGE_SHIFT;514 count = size >> PAGE_SHIFT;
469 515
@@ -1090,10 +1136,22 @@ static int __iommu_remove_mapping(struct device *dev, dma_addr_t iova, size_t si · 620 unmodified lines
1090 return 0;1136 return 0;
1091}1137}
1092 1138
1139static struct page **__atomic_get_pages(void *addr)
1140{
1141 struct dma_pool *pool = &atomic_pool;
1142 struct page **pages = pool->pages;
1143 int offs = (addr - pool->vaddr) >> PAGE_SHIFT;
1144
1145 return pages + offs;
1146}
1147
1093static struct page **__iommu_get_pages(void *cpu_addr, struct dma_attrs *attrs)1148static struct page **__iommu_get_pages(void *cpu_addr, struct dma_attrs *attrs)
1094{1149{
1095 struct vm_struct *area;1150 struct vm_struct *area;
1096 1151
1152 if (__in_atomic_pool(cpu_addr, PAGE_SIZE))
1153 return __atomic_get_pages(cpu_addr);
1154
1097 if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs))1155 if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs))
1098 return cpu_addr;1156 return cpu_addr;
1099 1157
@@ -1103,6 +1161,34 @@ static struct page **__iommu_get_pages(void *cpu_addr, struct dma_attrs *attrs) · 3 unmodified lines
1103 return NULL;1161 return NULL;
1104}1162}
1105 1163
1164static void *__iommu_alloc_atomic(struct device *dev, size_t size,
1165 dma_addr_t *handle)
1166{
1167 struct page *page;
1168 void *addr;
1169
1170 addr = __alloc_from_pool(size, &page);
1171 if (!addr)
1172 return NULL;
1173
1174 *handle = __iommu_create_mapping(dev, &page, size);
1175 if (*handle == DMA_ERROR_CODE)
1176 goto err_mapping;
1177
1178 return addr;
1179
1180err_mapping:
1181 __free_from_pool(addr, size);
1182 return NULL;
1183}
1184
1185static void __iommu_free_atomic(struct device *dev, struct page **pages,
1186 dma_addr_t handle, size_t size)
1187{
1188 __iommu_remove_mapping(dev, handle, size);
1189 __free_from_pool(page_address(pages[0]), size);
1190}
1191
1106static void *arm_iommu_alloc_attrs(struct device *dev, size_t size,1192static void *arm_iommu_alloc_attrs(struct device *dev, size_t size,
1107 dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs)1193 dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs)
1108{1194{
@@ -1113,6 +1199,9 @@ static void *arm_iommu_alloc_attrs(struct device *dev, size_t size, · 4 unmodified lines
1113 *handle = DMA_ERROR_CODE;1199 *handle = DMA_ERROR_CODE;
1114 size = PAGE_ALIGN(size);1200 size = PAGE_ALIGN(size);
1115 1201
1202 if (gfp & GFP_ATOMIC)
1203 return __iommu_alloc_atomic(dev, size, handle);
1204
1116 pages = __iommu_alloc_buffer(dev, size, gfp);1205 pages = __iommu_alloc_buffer(dev, size, gfp);
1117 if (!pages)1206 if (!pages)
1118 return NULL;1207 return NULL;
@@ -1179,6 +1268,11 @@ void arm_iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr, · 60 unmodified lines
1179 return;1268 return;
1180 }1269 }
1181 1270
1271 if (__in_atomic_pool(cpu_addr, size)) {
1272 __iommu_free_atomic(dev, pages, handle, size);
1273 return;
1274 }
1275
1182 if (!dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs)) {1276 if (!dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs)) {
1183 unmap_kernel_range((unsigned long)cpu_addr, size);1277 unmap_kernel_range((unsigned long)cpu_addr, size);
1184 vunmap(cpu_addr);1278 vunmap(cpu_addr);
arch/arm/plat-omap/common.c+0−40
@@ -17,52 +17,12 @@ · 16 unmodified lines
17#include <linux/dma-mapping.h>17#include <linux/dma-mapping.h>
18 18
19#include <plat/common.h>19#include <plat/common.h>
20#include <plat/board.h>
21#include <plat/vram.h>20#include <plat/vram.h>
22#include <plat/dsp.h>21#include <plat/dsp.h>
23#include <plat/dma.h>22#include <plat/dma.h>
24 23
25#include <plat/omap-secure.h>24#include <plat/omap-secure.h>
26 25
27
28#define NO_LENGTH_CHECK 0xffffffff
29
30struct omap_board_config_kernel *omap_board_config __initdata;
31int omap_board_config_size;
32
33static const void *__init get_config(u16 tag, size_t len,
34 int skip, size_t *len_out)
35{
36 struct omap_board_config_kernel *kinfo = NULL;
37 int i;
38
39 /* Try to find the config from the board-specific structures
40 * in the kernel. */
41 for (i = 0; i < omap_board_config_size; i++) {
42 if (omap_board_config[i].tag == tag) {
43 if (skip == 0) {
44 kinfo = &omap_board_config[i];
45 break;
46 } else {
47 skip--;
48 }
49 }
50 }
51 if (kinfo == NULL)
52 return NULL;
53 return kinfo->data;
54}
55
56const void *__init __omap_get_config(u16 tag, size_t len, int nr)
57{
58 return get_config(tag, len, nr, NULL);
59}
60
61const void *__init omap_get_var_config(u16 tag, size_t *len)
62{
63 return get_config(tag, NO_LENGTH_CHECK, 0, len);
64}
65
66void __init omap_reserve(void)26void __init omap_reserve(void)
67{27{
68 omap_vram_reserve_sdram_memblock();28 omap_vram_reserve_sdram_memblock();
arch/arm/plat-omap/counter_32k.c+0−1
@@ -24,7 +24,6 @@ · 23 unmodified lines
24 24
25#include <plat/hardware.h>25#include <plat/hardware.h>
26#include <plat/common.h>26#include <plat/common.h>
27#include <plat/board.h>
28 27
29#include <plat/clock.h>28#include <plat/clock.h>
30 29
arch/arm/plat-omap/debug-devices.c+0−3
@@ -17,9 +17,6 @@ · 16 unmodified lines
17 17
18#include <mach/hardware.h>18#include <mach/hardware.h>
19 19
20#include <plat/board.h>
21
22
23/* Many OMAP development platforms reuse the same "debug board"; these20/* Many OMAP development platforms reuse the same "debug board"; these
24 * platforms include H2, H3, H4, and Perseus2.21 * platforms include H2, H3, H4, and Perseus2.
25 */22 */
arch/arm/plat-omap/devices.c+0−1
@@ -23,7 +23,6 @@ · 22 unmodified lines
23#include <asm/memblock.h>23#include <asm/memblock.h>
24 24
25#include <plat/tc.h>25#include <plat/tc.h>
26#include <plat/board.h>
27#include <plat/mmc.h>26#include <plat/mmc.h>
28#include <plat/menelaus.h>27#include <plat/menelaus.h>
29#include <plat/omap44xx.h>28#include <plat/omap44xx.h>
arch/arm/plat-omap/dmtimer.c+3−3
@@ -189,6 +189,7 @@ struct omap_dm_timer *omap_dm_timer_request(void) · 188 unmodified lines
189 timer->reserved = 1;189 timer->reserved = 1;
190 break;190 break;
191 }191 }
192 spin_unlock_irqrestore(&dm_timer_lock, flags);
192 193
193 if (timer) {194 if (timer) {
194 ret = omap_dm_timer_prepare(timer);195 ret = omap_dm_timer_prepare(timer);
@@ -197,7 +198,6 @@ struct omap_dm_timer *omap_dm_timer_request(void) · 2 unmodified lines
197 timer = NULL;198 timer = NULL;
198 }199 }
199 }200 }
200 spin_unlock_irqrestore(&dm_timer_lock, flags);
201 201
202 if (!timer)202 if (!timer)
203 pr_debug("%s: timer request failed!\n", __func__);203 pr_debug("%s: timer request failed!\n", __func__);
@@ -220,6 +220,7 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id) · 16 unmodified lines
220 break;220 break;
221 }221 }
222 }222 }
223 spin_unlock_irqrestore(&dm_timer_lock, flags);
223 224
224 if (timer) {225 if (timer) {
225 ret = omap_dm_timer_prepare(timer);226 ret = omap_dm_timer_prepare(timer);
@@ -228,7 +229,6 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id) · 2 unmodified lines
228 timer = NULL;229 timer = NULL;
229 }230 }
230 }231 }
231 spin_unlock_irqrestore(&dm_timer_lock, flags);
232 232
233 if (!timer)233 if (!timer)
234 pr_debug("%s: timer%d request failed!\n", __func__, id);234 pr_debug("%s: timer%d request failed!\n", __func__, id);
@@ -258,7 +258,7 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_enable); · 23 unmodified lines
258 258
259void omap_dm_timer_disable(struct omap_dm_timer *timer)259void omap_dm_timer_disable(struct omap_dm_timer *timer)
260{260{
261 pm_runtime_put(&timer->pdev->dev);261 pm_runtime_put_sync(&timer->pdev->dev);
262}262}
263EXPORT_SYMBOL_GPL(omap_dm_timer_disable);263EXPORT_SYMBOL_GPL(omap_dm_timer_disable);
264 264
arch/arm/plat-omap/fb.c+0−2
@@ -33,8 +33,6 @@ · 32 unmodified lines
33#include <mach/hardware.h>33#include <mach/hardware.h>
34#include <asm/mach/map.h>34#include <asm/mach/map.h>
35 35
36#include <plat/board.h>
37
38#if defined(CONFIG_FB_OMAP) || defined(CONFIG_FB_OMAP_MODULE)36#if defined(CONFIG_FB_OMAP) || defined(CONFIG_FB_OMAP_MODULE)
39 37
40static bool omapfb_lcd_configured;38static bool omapfb_lcd_configured;
arch/arm/plat-omap/include/plat/board.h+0−138
@@ -1,138 +0,0 @@
1/*
2 * arch/arm/plat-omap/include/mach/board.h
3 *
4 * Information structures for board-specific data
5 *
6 * Copyright (C) 2004 Nokia Corporation
7 * Written by Juha Yrjölä <juha.yrjola@nokia.com>
8 */
9
10#ifndef _OMAP_BOARD_H
11#define _OMAP_BOARD_H
12
13#include <linux/types.h>
14
15#include <plat/gpio-switch.h>
16
17/*
18 * OMAP35x EVM revision
19 * Run time detection of EVM revision is done by reading Ethernet
20 * PHY ID -
21 * GEN_1 = 0x01150000
22 * GEN_2 = 0x92200000
23 */
24enum {
25 OMAP3EVM_BOARD_GEN_1 = 0, /* EVM Rev between A - D */
26 OMAP3EVM_BOARD_GEN_2, /* EVM Rev >= Rev E */
27};
28
29/* Different peripheral ids */
30#define OMAP_TAG_CLOCK 0x4f01
31#define OMAP_TAG_GPIO_SWITCH 0x4f06
32#define OMAP_TAG_STI_CONSOLE 0x4f09
33#define OMAP_TAG_CAMERA_SENSOR 0x4f0a
34
35#define OMAP_TAG_BOOT_REASON 0x4f80
36#define OMAP_TAG_FLASH_PART 0x4f81
37#define OMAP_TAG_VERSION_STR 0x4f82
38
39struct omap_clock_config {
40 /* 0 for 12 MHz, 1 for 13 MHz and 2 for 19.2 MHz */
41 u8 system_clock_type;
42};
43
44struct omap_serial_console_config {
45 u8 console_uart;
46 u32 console_speed;
47};
48
49struct omap_sti_console_config {
50 unsigned enable:1;
51 u8 channel;
52};
53
54struct omap_camera_sensor_config {
55 u16 reset_gpio;
56 int (*power_on)(void * data);
57 int (*power_off)(void * data);
58};
59
60struct omap_lcd_config {
61 char panel_name[16];
62 char ctrl_name[16];
63 s16 nreset_gpio;
64 u8 data_lines;
65};
66
67struct device;
68struct fb_info;
69struct omap_backlight_config {
70 int default_intensity;
71 int (*set_power)(struct device *dev, int state);
72};
73
74struct omap_fbmem_config {
75 u32 start;
76 u32 size;
77};
78
79struct omap_pwm_led_platform_data {
80 const char *name;
81 int intensity_timer;
82 int blink_timer;
83 void (*set_power)(struct omap_pwm_led_platform_data *self, int on_off);
84};
85
86struct omap_uart_config {
87 /* Bit field of UARTs present; bit 0 --> UART1 */
88 unsigned int enabled_uarts;
89};
90
91
92struct omap_flash_part_config {
93 char part_table[0];
94};
95
96struct omap_boot_reason_config {
97 char reason_str[12];
98};
99
100struct omap_version_config {
101 char component[12];
102 char version[12];
103};
104
105struct omap_board_config_entry {
106 u16 tag;
107 u16 len;
108 u8 data[0];
109};
110
111struct omap_board_config_kernel {
112 u16 tag;
113 const void *data;
114};
115
116extern const void *__init __omap_get_config(u16 tag, size_t len, int nr);
117
118#define omap_get_config(tag, type) \
119 ((const type *) __omap_get_config((tag), sizeof(type), 0))
120#define omap_get_nr_config(tag, type, nr) \
121 ((const type *) __omap_get_config((tag), sizeof(type), (nr)))
122
123extern const void *__init omap_get_var_config(u16 tag, size_t *len);
124
125extern struct omap_board_config_kernel *omap_board_config;
126extern int omap_board_config_size;
127
128
129/* for TI reference platforms sharing the same debug card */
130extern int debug_card_init(u32 addr, unsigned gpio);
131
132/* OMAP3EVM revision */
133#if defined(CONFIG_MACH_OMAP3EVM)
134u8 get_omap3_evm_rev(void);
135#else
136#define get_omap3_evm_rev() (-EINVAL)
137#endif
138#endif
arch/arm/plat-omap/include/plat/cpu.h+2−1
@@ -372,7 +372,8 @@ IS_OMAP_TYPE(3430, 0x3430) · 371 unmodified lines
372#define cpu_class_is_omap1() (cpu_is_omap7xx() || cpu_is_omap15xx() || \372#define cpu_class_is_omap1() (cpu_is_omap7xx() || cpu_is_omap15xx() || \
373 cpu_is_omap16xx())373 cpu_is_omap16xx())
374#define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \374#define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \
375 cpu_is_omap44xx() || soc_is_omap54xx())375 cpu_is_omap44xx() || soc_is_omap54xx() || \
376 soc_is_am33xx())
376 377
377/* Various silicon revisions for omap2 */378/* Various silicon revisions for omap2 */
378#define OMAP242X_CLASS 0x24200024379#define OMAP242X_CLASS 0x24200024
arch/arm/plat-omap/include/plat/debug-devices.h+9−0
@@ -0,0 +1,9 @@
1#ifndef _OMAP_DEBUG_DEVICES_H
2#define _OMAP_DEBUG_DEVICES_H
3
4#include <linux/types.h>
5
6/* for TI reference platforms sharing the same debug card */
7extern int debug_card_init(u32 addr, unsigned gpio);
8
9#endif
arch/arm/plat-omap/include/plat/gpmc.h+19−0
@@ -133,6 +133,25 @@ struct gpmc_timings { · 132 unmodified lines
133 u16 wr_data_mux_bus; /* WRDATAONADMUXBUS */133 u16 wr_data_mux_bus; /* WRDATAONADMUXBUS */
134};134};
135 135
136struct gpmc_nand_regs {
137 void __iomem *gpmc_status;
138 void __iomem *gpmc_nand_command;
139 void __iomem *gpmc_nand_address;
140 void __iomem *gpmc_nand_data;
141 void __iomem *gpmc_prefetch_config1;
142 void __iomem *gpmc_prefetch_config2;
143 void __iomem *gpmc_prefetch_control;
144 void __iomem *gpmc_prefetch_status;
145 void __iomem *gpmc_ecc_config;
146 void __iomem *gpmc_ecc_control;
147 void __iomem *gpmc_ecc_size_config;
148 void __iomem *gpmc_ecc1_result;
149 void __iomem *gpmc_bch_result0;
150};
151
152extern void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs);
153extern int gpmc_get_client_irq(unsigned irq_config);
154
136extern unsigned int gpmc_ns_to_ticks(unsigned int time_ns);155extern unsigned int gpmc_ns_to_ticks(unsigned int time_ns);
137extern unsigned int gpmc_ps_to_ticks(unsigned int time_ps);156extern unsigned int gpmc_ps_to_ticks(unsigned int time_ps);
138extern unsigned int gpmc_ticks_to_ns(unsigned int ticks);157extern unsigned int gpmc_ticks_to_ns(unsigned int ticks);
arch/arm/plat-omap/include/plat/mmc.h+0−1
@@ -15,7 +15,6 @@ · 14 unmodified lines
15#include <linux/device.h>15#include <linux/device.h>
16#include <linux/mmc/host.h>16#include <linux/mmc/host.h>
17 17
18#include <plat/board.h>
19#include <plat/omap_hwmod.h>18#include <plat/omap_hwmod.h>
20 19
21#define OMAP15XX_NR_MMC 120#define OMAP15XX_NR_MMC 1
arch/arm/plat-omap/include/plat/multi.h+9−0
@@ -108,4 +108,13 @@ · 107 unmodified lines
108# endif108# endif
109#endif109#endif
110 110
111#ifdef CONFIG_SOC_AM33XX
112# ifdef OMAP_NAME
113# undef MULTI_OMAP2
114# define MULTI_OMAP2
115# else
116# define OMAP_NAME am33xx
117# endif
118#endif
119
111#endif /* __PLAT_OMAP_MULTI_H */120#endif /* __PLAT_OMAP_MULTI_H */
arch/arm/plat-omap/include/plat/nand.h+1−1
@@ -26,9 +26,9 @@ struct omap_nand_platform_data { · 25 unmodified lines
26 bool dev_ready;26 bool dev_ready;
27 int gpmc_irq;27 int gpmc_irq;
28 enum nand_io xfer_type;28 enum nand_io xfer_type;
29 unsigned long phys_base;
30 int devsize;29 int devsize;
31 enum omap_ecc ecc_opt;30 enum omap_ecc ecc_opt;
31 struct gpmc_nand_regs reg;
32};32};
33 33
34/* minimum size for IO mapping */34/* minimum size for IO mapping */
arch/arm/plat-omap/include/plat/uncompress.h+1−3
@@ -110,7 +110,7 @@ static inline void flush(void) · 109 unmodified lines
110 _DEBUG_LL_ENTRY(mach, AM33XX_UART##p##_BASE, OMAP_PORT_SHIFT, \110 _DEBUG_LL_ENTRY(mach, AM33XX_UART##p##_BASE, OMAP_PORT_SHIFT, \
111 AM33XXUART##p)111 AM33XXUART##p)
112 112
113static inline void __arch_decomp_setup(unsigned long arch_id)113static inline void arch_decomp_setup(void)
114{114{
115 int port = 0;115 int port = 0;
116 116
@@ -198,8 +198,6 @@ static inline void __arch_decomp_setup(unsigned long arch_id) · 81 unmodified lines
198 } while (0);198 } while (0);
199}199}
200 200
201#define arch_decomp_setup() __arch_decomp_setup(arch_id)
202
203/*201/*
204 * nothing to do202 * nothing to do
205 */203 */
arch/arm/plat-omap/include/plat/usb.h+0−1
@@ -5,7 +5,6 @@ · 4 unmodified lines
5 5
6#include <linux/io.h>6#include <linux/io.h>
7#include <linux/usb/musb.h>7#include <linux/usb/musb.h>
8#include <plat/board.h>
9 8
10#define OMAP3_HS_USB_PORTS 39#define OMAP3_HS_USB_PORTS 3
11 10
arch/arm/plat-omap/sram.c+0−1
@@ -26,7 +26,6 @@ · 25 unmodified lines
26#include <asm/mach/map.h>26#include <asm/mach/map.h>
27 27
28#include <plat/sram.h>28#include <plat/sram.h>
29#include <plat/board.h>
30#include <plat/cpu.h>29#include <plat/cpu.h>
31 30
32#include "sram.h"31#include "sram.h"
arch/arm/plat-orion/common.c+6−2
@@ -291,10 +291,12 @@ static struct platform_device orion_ge00 = { · 290 unmodified lines
291void __init orion_ge00_init(struct mv643xx_eth_platform_data *eth_data,291void __init orion_ge00_init(struct mv643xx_eth_platform_data *eth_data,
292 unsigned long mapbase,292 unsigned long mapbase,
293 unsigned long irq,293 unsigned long irq,
294 unsigned long irq_err)294 unsigned long irq_err,
295 unsigned int tx_csum_limit)
295{296{
296 fill_resources(&orion_ge00_shared, orion_ge00_shared_resources,297 fill_resources(&orion_ge00_shared, orion_ge00_shared_resources,
297 mapbase + 0x2000, SZ_16K - 1, irq_err);298 mapbase + 0x2000, SZ_16K - 1, irq_err);
299 orion_ge00_shared_data.tx_csum_limit = tx_csum_limit;
298 ge_complete(&orion_ge00_shared_data,300 ge_complete(&orion_ge00_shared_data,
299 orion_ge00_resources, irq, &orion_ge00_shared,301 orion_ge00_resources, irq, &orion_ge00_shared,
300 eth_data, &orion_ge00);302 eth_data, &orion_ge00);
@@ -343,10 +345,12 @@ static struct platform_device orion_ge01 = { · 42 unmodified lines
343void __init orion_ge01_init(struct mv643xx_eth_platform_data *eth_data,345void __init orion_ge01_init(struct mv643xx_eth_platform_data *eth_data,
344 unsigned long mapbase,346 unsigned long mapbase,
345 unsigned long irq,347 unsigned long irq,
346 unsigned long irq_err)348 unsigned long irq_err,
349 unsigned int tx_csum_limit)
347{350{
348 fill_resources(&orion_ge01_shared, orion_ge01_shared_resources,351 fill_resources(&orion_ge01_shared, orion_ge01_shared_resources,
349 mapbase + 0x2000, SZ_16K - 1, irq_err);352 mapbase + 0x2000, SZ_16K - 1, irq_err);
353 orion_ge01_shared_data.tx_csum_limit = tx_csum_limit;
350 ge_complete(&orion_ge01_shared_data,354 ge_complete(&orion_ge01_shared_data,
351 orion_ge01_resources, irq, &orion_ge01_shared,355 orion_ge01_resources, irq, &orion_ge01_shared,
352 eth_data, &orion_ge01);356 eth_data, &orion_ge01);
arch/arm/plat-orion/include/plat/common.h+4−2
@@ -39,12 +39,14 @@ void __init orion_rtc_init(unsigned long mapbase, · 38 unmodified lines
39void __init orion_ge00_init(struct mv643xx_eth_platform_data *eth_data,39void __init orion_ge00_init(struct mv643xx_eth_platform_data *eth_data,
40 unsigned long mapbase,40 unsigned long mapbase,
41 unsigned long irq,41 unsigned long irq,
42 unsigned long irq_err);42 unsigned long irq_err,
43 unsigned int tx_csum_limit);
43 44
44void __init orion_ge01_init(struct mv643xx_eth_platform_data *eth_data,45void __init orion_ge01_init(struct mv643xx_eth_platform_data *eth_data,
45 unsigned long mapbase,46 unsigned long mapbase,
46 unsigned long irq,47 unsigned long irq,
47 unsigned long irq_err);48 unsigned long irq_err,
49 unsigned int tx_csum_limit);
48 50
49void __init orion_ge10_init(struct mv643xx_eth_platform_data *eth_data,51void __init orion_ge10_init(struct mv643xx_eth_platform_data *eth_data,
50 unsigned long mapbase,52 unsigned long mapbase,
arch/arm/plat-s3c24xx/dma.c+1−1
@@ -430,7 +430,7 @@ s3c2410_dma_canload(struct s3c2410_dma_chan *chan) · 429 unmodified lines
430 * when necessary.430 * when necessary.
431*/431*/
432 432
433int s3c2410_dma_enqueue(unsigned int channel, void *id,433int s3c2410_dma_enqueue(enum dma_ch channel, void *id,
434 dma_addr_t data, int size)434 dma_addr_t data, int size)
435{435{
436 struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel);436 struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel);
arch/arm/plat-samsung/devs.c+28−1
@@ -32,6 +32,8 @@ · 31 unmodified lines
32#include <linux/platform_data/s3c-hsudc.h>32#include <linux/platform_data/s3c-hsudc.h>
33#include <linux/platform_data/s3c-hsotg.h>33#include <linux/platform_data/s3c-hsotg.h>
34 34
35#include <media/s5p_hdmi.h>
36
35#include <asm/irq.h>37#include <asm/irq.h>
36#include <asm/pmu.h>38#include <asm/pmu.h>
37#include <asm/mach/arch.h>39#include <asm/mach/arch.h>
@@ -748,7 +750,8 @@ void __init s5p_i2c_hdmiphy_set_platdata(struct s3c2410_platform_i2c *pd) · 710 unmodified lines
748 if (!pd) {750 if (!pd) {
749 pd = &default_i2c_data;751 pd = &default_i2c_data;
750 752
751 if (soc_is_exynos4210())753 if (soc_is_exynos4210() ||
754 soc_is_exynos4212() || soc_is_exynos4412())
752 pd->bus_num = 8;755 pd->bus_num = 8;
753 else if (soc_is_s5pv210())756 else if (soc_is_s5pv210())
754 pd->bus_num = 3;757 pd->bus_num = 3;
@@ -759,6 +762,30 @@ void __init s5p_i2c_hdmiphy_set_platdata(struct s3c2410_platform_i2c *pd) · 4 unmodified lines
759 npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c),762 npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c),
760 &s5p_device_i2c_hdmiphy);763 &s5p_device_i2c_hdmiphy);
761}764}
765
766struct s5p_hdmi_platform_data s5p_hdmi_def_platdata;
767
768void __init s5p_hdmi_set_platdata(struct i2c_board_info *hdmiphy_info,
769 struct i2c_board_info *mhl_info, int mhl_bus)
770{
771 struct s5p_hdmi_platform_data *pd = &s5p_hdmi_def_platdata;
772
773 if (soc_is_exynos4210() ||
774 soc_is_exynos4212() || soc_is_exynos4412())
775 pd->hdmiphy_bus = 8;
776 else if (soc_is_s5pv210())
777 pd->hdmiphy_bus = 3;
778 else
779 pd->hdmiphy_bus = 0;
780
781 pd->hdmiphy_info = hdmiphy_info;
782 pd->mhl_info = mhl_info;
783 pd->mhl_bus = mhl_bus;
784
785 s3c_set_platdata(pd, sizeof(struct s5p_hdmi_platform_data),
786 &s5p_device_hdmi);
787}
788
762#endif /* CONFIG_S5P_DEV_I2C_HDMIPHY */789#endif /* CONFIG_S5P_DEV_I2C_HDMIPHY */
763 790
764/* I2S */791/* I2S */
arch/arm/plat-samsung/include/plat/hdmi.h+16−0
@@ -0,0 +1,16 @@
1/*
2 * Copyright (C) 2012 Samsung Electronics Co.Ltd
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 */
9
10#ifndef __PLAT_SAMSUNG_HDMI_H
11#define __PLAT_SAMSUNG_HDMI_H __FILE__
12
13extern void s5p_hdmi_set_platdata(struct i2c_board_info *hdmiphy_info,
14 struct i2c_board_info *mhl_info, int mhl_bus);
15
16#endif /* __PLAT_SAMSUNG_HDMI_H */
arch/arm/plat-samsung/pm.c+1−1
@@ -74,7 +74,7 @@ unsigned char pm_uart_udivslot; · 73 unmodified lines
74 74
75#ifdef CONFIG_SAMSUNG_PM_DEBUG75#ifdef CONFIG_SAMSUNG_PM_DEBUG
76 76
77struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS];77static struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS];
78 78
79static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save)79static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save)
80{80{
arch/mips/Kconfig+1−0
@@ -89,6 +89,7 @@ config ATH79 · 88 unmodified lines
89 select CEVT_R4K89 select CEVT_R4K
90 select CSRC_R4K90 select CSRC_R4K
91 select DMA_NONCOHERENT91 select DMA_NONCOHERENT
92 select HAVE_CLK
92 select IRQ_CPU93 select IRQ_CPU
93 select MIPS_MACHINE94 select MIPS_MACHINE
94 select SYS_HAS_CPU_MIPS32_R295 select SYS_HAS_CPU_MIPS32_R2
arch/mips/alchemy/board-mtx1.c+2−0
@@ -228,6 +228,8 @@ static int mtx1_pci_idsel(unsigned int devsel, int assert) · 227 unmodified lines
228 * adapter on the mtx-1 "singleboard" variant. It triggers a custom228 * adapter on the mtx-1 "singleboard" variant. It triggers a custom
229 * logic chip connected to EXT_IO3 (GPIO1) to suppress IDSEL signals.229 * logic chip connected to EXT_IO3 (GPIO1) to suppress IDSEL signals.
230 */230 */
231 udelay(1);
232
231 if (assert && devsel != 0)233 if (assert && devsel != 0)
232 /* Suppress signal to Cardbus */234 /* Suppress signal to Cardbus */
233 alchemy_gpio_set_value(1, 0); /* set EXT_IO3 OFF */235 alchemy_gpio_set_value(1, 0); /* set EXT_IO3 OFF */
arch/mips/ath79/dev-usb.c+2−0
@@ -145,6 +145,8 @@ static void __init ar7240_usb_setup(void) · 144 unmodified lines
145 145
146 ath79_ohci_resources[0].start = AR7240_OHCI_BASE;146 ath79_ohci_resources[0].start = AR7240_OHCI_BASE;
147 ath79_ohci_resources[0].end = AR7240_OHCI_BASE + AR7240_OHCI_SIZE - 1;147 ath79_ohci_resources[0].end = AR7240_OHCI_BASE + AR7240_OHCI_SIZE - 1;
148 ath79_ohci_resources[1].start = ATH79_CPU_IRQ_USB;
149 ath79_ohci_resources[1].end = ATH79_CPU_IRQ_USB;
148 platform_device_register(&ath79_ohci_device);150 platform_device_register(&ath79_ohci_device);
149}151}
150 152
arch/mips/ath79/gpio.c+4−2
@@ -188,8 +188,10 @@ void __init ath79_gpio_init(void) · 187 unmodified lines
188 188
189 if (soc_is_ar71xx())189 if (soc_is_ar71xx())
190 ath79_gpio_count = AR71XX_GPIO_COUNT;190 ath79_gpio_count = AR71XX_GPIO_COUNT;
191 else if (soc_is_ar724x())191 else if (soc_is_ar7240())
192 ath79_gpio_count = AR724X_GPIO_COUNT;192 ath79_gpio_count = AR7240_GPIO_COUNT;
193 else if (soc_is_ar7241() || soc_is_ar7242())
194 ath79_gpio_count = AR7241_GPIO_COUNT;
193 else if (soc_is_ar913x())195 else if (soc_is_ar913x())
194 ath79_gpio_count = AR913X_GPIO_COUNT;196 ath79_gpio_count = AR913X_GPIO_COUNT;
195 else if (soc_is_ar933x())197 else if (soc_is_ar933x())
arch/mips/bcm63xx/dev-spi.c+4−0
@@ -106,11 +106,15 @@ int __init bcm63xx_spi_register(void) · 105 unmodified lines
106 if (BCMCPU_IS_6338() || BCMCPU_IS_6348()) {106 if (BCMCPU_IS_6338() || BCMCPU_IS_6348()) {
107 spi_resources[0].end += BCM_6338_RSET_SPI_SIZE - 1;107 spi_resources[0].end += BCM_6338_RSET_SPI_SIZE - 1;
108 spi_pdata.fifo_size = SPI_6338_MSG_DATA_SIZE;108 spi_pdata.fifo_size = SPI_6338_MSG_DATA_SIZE;
109 spi_pdata.msg_type_shift = SPI_6338_MSG_TYPE_SHIFT;
110 spi_pdata.msg_ctl_width = SPI_6338_MSG_CTL_WIDTH;
109 }111 }
110 112
111 if (BCMCPU_IS_6358() || BCMCPU_IS_6368()) {113 if (BCMCPU_IS_6358() || BCMCPU_IS_6368()) {
112 spi_resources[0].end += BCM_6358_RSET_SPI_SIZE - 1;114 spi_resources[0].end += BCM_6358_RSET_SPI_SIZE - 1;
113 spi_pdata.fifo_size = SPI_6358_MSG_DATA_SIZE;115 spi_pdata.fifo_size = SPI_6358_MSG_DATA_SIZE;
116 spi_pdata.msg_type_shift = SPI_6358_MSG_TYPE_SHIFT;
117 spi_pdata.msg_ctl_width = SPI_6358_MSG_CTL_WIDTH;
114 }118 }
115 119
116 bcm63xx_spi_regs_init();120 bcm63xx_spi_regs_init();
arch/mips/cavium-octeon/octeon-irq.c+43−46
@@ -61,6 +61,12 @@ static void octeon_irq_set_ciu_mapping(int irq, int line, int bit, · 60 unmodified lines
61 octeon_irq_ciu_to_irq[line][bit] = irq;61 octeon_irq_ciu_to_irq[line][bit] = irq;
62}62}
63 63
64static void octeon_irq_force_ciu_mapping(struct irq_domain *domain,
65 int irq, int line, int bit)
66{
67 irq_domain_associate(domain, irq, line << 6 | bit);
68}
69
64static int octeon_coreid_for_cpu(int cpu)70static int octeon_coreid_for_cpu(int cpu)
65{71{
66#ifdef CONFIG_SMP72#ifdef CONFIG_SMP
@@ -183,19 +189,9 @@ static void __init octeon_irq_init_core(void) · 116 unmodified lines
183 mutex_init(&cd->core_irq_mutex);189 mutex_init(&cd->core_irq_mutex);
184 190
185 irq = OCTEON_IRQ_SW0 + i;191 irq = OCTEON_IRQ_SW0 + i;
186 switch (irq) {192 irq_set_chip_data(irq, cd);
187 case OCTEON_IRQ_TIMER:193 irq_set_chip_and_handler(irq, &octeon_irq_chip_core,
188 case OCTEON_IRQ_SW0:194 handle_percpu_irq);
189 case OCTEON_IRQ_SW1:
190 case OCTEON_IRQ_5:
191 case OCTEON_IRQ_PERF:
192 irq_set_chip_data(irq, cd);
193 irq_set_chip_and_handler(irq, &octeon_irq_chip_core,
194 handle_percpu_irq);
195 break;
196 default:
197 break;
198 }
199 }195 }
200}196}
201 197
@@ -890,7 +886,6 @@ static int octeon_irq_gpio_xlat(struct irq_domain *d, · 688 unmodified lines
890 unsigned int type;886 unsigned int type;
891 unsigned int pin;887 unsigned int pin;
892 unsigned int trigger;888 unsigned int trigger;
893 struct octeon_irq_gpio_domain_data *gpiod;
894 889
895 if (d->of_node != node)890 if (d->of_node != node)
896 return -EINVAL;891 return -EINVAL;
@@ -925,8 +920,7 @@ static int octeon_irq_gpio_xlat(struct irq_domain *d, · 28 unmodified lines
925 break;920 break;
926 }921 }
927 *out_type = type;922 *out_type = type;
928 gpiod = d->host_data;923 *out_hwirq = pin;
929 *out_hwirq = gpiod->base_hwirq + pin;
930 924
931 return 0;925 return 0;
932}926}
@@ -996,19 +990,21 @@ static int octeon_irq_ciu_map(struct irq_domain *d, · 63 unmodified lines
996static int octeon_irq_gpio_map(struct irq_domain *d,990static int octeon_irq_gpio_map(struct irq_domain *d,
997 unsigned int virq, irq_hw_number_t hw)991 unsigned int virq, irq_hw_number_t hw)
998{992{
999 unsigned int line = hw >> 6;993 struct octeon_irq_gpio_domain_data *gpiod = d->host_data;
1000 unsigned int bit = hw & 63;994 unsigned int line, bit;
1001 995
1002 if (!octeon_irq_virq_in_range(virq))996 if (!octeon_irq_virq_in_range(virq))
1003 return -EINVAL;997 return -EINVAL;
1004 998
999 hw += gpiod->base_hwirq;
1000 line = hw >> 6;
1001 bit = hw & 63;
1005 if (line > 1 || octeon_irq_ciu_to_irq[line][bit] != 0)1002 if (line > 1 || octeon_irq_ciu_to_irq[line][bit] != 0)
1006 return -EINVAL;1003 return -EINVAL;
1007 1004
1008 octeon_irq_set_ciu_mapping(virq, line, bit,1005 octeon_irq_set_ciu_mapping(virq, line, bit,
1009 octeon_irq_gpio_chip,1006 octeon_irq_gpio_chip,
1010 octeon_irq_handle_gpio);1007 octeon_irq_handle_gpio);
1011
1012 return 0;1008 return 0;
1013}1009}
1014 1010
@@ -1149,6 +1145,7 @@ static void __init octeon_irq_init_ciu(void) · 134 unmodified lines
1149 struct irq_chip *chip_wd;1145 struct irq_chip *chip_wd;
1150 struct device_node *gpio_node;1146 struct device_node *gpio_node;
1151 struct device_node *ciu_node;1147 struct device_node *ciu_node;
1148 struct irq_domain *ciu_domain = NULL;
1152 1149
1153 octeon_irq_init_ciu_percpu();1150 octeon_irq_init_ciu_percpu();
1154 octeon_irq_setup_secondary = octeon_irq_setup_secondary_ciu;1151 octeon_irq_setup_secondary = octeon_irq_setup_secondary_ciu;
@@ -1177,31 +1174,6 @@ static void __init octeon_irq_init_ciu(void) · 22 unmodified lines
1177 /* Mips internal */1174 /* Mips internal */
1178 octeon_irq_init_core();1175 octeon_irq_init_core();
1179 1176
1180 /* CIU_0 */
1181 for (i = 0; i < 16; i++)
1182 octeon_irq_set_ciu_mapping(i + OCTEON_IRQ_WORKQ0, 0, i + 0, chip, handle_level_irq);
1183
1184 octeon_irq_set_ciu_mapping(OCTEON_IRQ_MBOX0, 0, 32, chip_mbox, handle_percpu_irq);
1185 octeon_irq_set_ciu_mapping(OCTEON_IRQ_MBOX1, 0, 33, chip_mbox, handle_percpu_irq);
1186
1187 for (i = 0; i < 4; i++)
1188 octeon_irq_set_ciu_mapping(i + OCTEON_IRQ_PCI_INT0, 0, i + 36, chip, handle_level_irq);
1189 for (i = 0; i < 4; i++)
1190 octeon_irq_set_ciu_mapping(i + OCTEON_IRQ_PCI_MSI0, 0, i + 40, chip, handle_level_irq);
1191
1192 octeon_irq_set_ciu_mapping(OCTEON_IRQ_RML, 0, 46, chip, handle_level_irq);
1193 for (i = 0; i < 4; i++)
1194 octeon_irq_set_ciu_mapping(i + OCTEON_IRQ_TIMER0, 0, i + 52, chip, handle_edge_irq);
1195
1196 octeon_irq_set_ciu_mapping(OCTEON_IRQ_USB0, 0, 56, chip, handle_level_irq);
1197 octeon_irq_set_ciu_mapping(OCTEON_IRQ_BOOTDMA, 0, 63, chip, handle_level_irq);
1198
1199 /* CIU_1 */
1200 for (i = 0; i < 16; i++)
1201 octeon_irq_set_ciu_mapping(i + OCTEON_IRQ_WDOG0, 1, i + 0, chip_wd, handle_level_irq);
1202
1203 octeon_irq_set_ciu_mapping(OCTEON_IRQ_USB1, 1, 17, chip, handle_level_irq);
1204
1205 gpio_node = of_find_compatible_node(NULL, NULL, "cavium,octeon-3860-gpio");1177 gpio_node = of_find_compatible_node(NULL, NULL, "cavium,octeon-3860-gpio");
1206 if (gpio_node) {1178 if (gpio_node) {
1207 struct octeon_irq_gpio_domain_data *gpiod;1179 struct octeon_irq_gpio_domain_data *gpiod;
@@ -1219,10 +1191,35 @@ static void __init octeon_irq_init_ciu(void) · 11 unmodified lines
1219 1191
1220 ciu_node = of_find_compatible_node(NULL, NULL, "cavium,octeon-3860-ciu");1192 ciu_node = of_find_compatible_node(NULL, NULL, "cavium,octeon-3860-ciu");
1221 if (ciu_node) {1193 if (ciu_node) {
1222 irq_domain_add_tree(ciu_node, &octeon_irq_domain_ciu_ops, NULL);1194 ciu_domain = irq_domain_add_tree(ciu_node, &octeon_irq_domain_ciu_ops, NULL);
1223 of_node_put(ciu_node);1195 of_node_put(ciu_node);
1224 } else1196 } else
1225 pr_warn("Cannot find device node for cavium,octeon-3860-ciu.\n");1197 panic("Cannot find device node for cavium,octeon-3860-ciu.");
1198
1199 /* CIU_0 */
1200 for (i = 0; i < 16; i++)
1201 octeon_irq_force_ciu_mapping(ciu_domain, i + OCTEON_IRQ_WORKQ0, 0, i + 0);
1202
1203 octeon_irq_set_ciu_mapping(OCTEON_IRQ_MBOX0, 0, 32, chip_mbox, handle_percpu_irq);
1204 octeon_irq_set_ciu_mapping(OCTEON_IRQ_MBOX1, 0, 33, chip_mbox, handle_percpu_irq);
1205
1206 for (i = 0; i < 4; i++)
1207 octeon_irq_force_ciu_mapping(ciu_domain, i + OCTEON_IRQ_PCI_INT0, 0, i + 36);
1208 for (i = 0; i < 4; i++)
1209 octeon_irq_force_ciu_mapping(ciu_domain, i + OCTEON_IRQ_PCI_MSI0, 0, i + 40);
1210
1211 octeon_irq_force_ciu_mapping(ciu_domain, OCTEON_IRQ_RML, 0, 46);
1212 for (i = 0; i < 4; i++)
1213 octeon_irq_force_ciu_mapping(ciu_domain, i + OCTEON_IRQ_TIMER0, 0, i + 52);
1214
1215 octeon_irq_force_ciu_mapping(ciu_domain, OCTEON_IRQ_USB0, 0, 56);
1216 octeon_irq_force_ciu_mapping(ciu_domain, OCTEON_IRQ_BOOTDMA, 0, 63);
1217
1218 /* CIU_1 */
1219 for (i = 0; i < 16; i++)
1220 octeon_irq_set_ciu_mapping(i + OCTEON_IRQ_WDOG0, 1, i + 0, chip_wd, handle_level_irq);
1221
1222 octeon_irq_force_ciu_mapping(ciu_domain, OCTEON_IRQ_USB1, 1, 17);
1226 1223
1227 /* Enable the CIU lines */1224 /* Enable the CIU lines */
1228 set_c0_status(STATUSF_IP3 | STATUSF_IP2);1225 set_c0_status(STATUSF_IP3 | STATUSF_IP2);
arch/mips/include/asm/mach-ath79/ar71xx_regs.h+2−1
@@ -393,7 +393,8 @@ · 392 unmodified lines
393#define AR71XX_GPIO_REG_FUNC 0x28393#define AR71XX_GPIO_REG_FUNC 0x28
394 394
395#define AR71XX_GPIO_COUNT 16395#define AR71XX_GPIO_COUNT 16
396#define AR724X_GPIO_COUNT 18396#define AR7240_GPIO_COUNT 18
397#define AR7241_GPIO_COUNT 20
397#define AR913X_GPIO_COUNT 22398#define AR913X_GPIO_COUNT 22
398#define AR933X_GPIO_COUNT 30399#define AR933X_GPIO_COUNT 30
399#define AR934X_GPIO_COUNT 23400#define AR934X_GPIO_COUNT 23
arch/mips/include/asm/mach-ath79/cpu-feature-overrides.h+0−1
@@ -42,7 +42,6 @@ · 41 unmodified lines
42#define cpu_has_mips64r1 042#define cpu_has_mips64r1 0
43#define cpu_has_mips64r2 043#define cpu_has_mips64r2 0
44 44
45#define cpu_has_dsp 0
46#define cpu_has_mipsmt 045#define cpu_has_mipsmt 0
47 46
48#define cpu_has_64bits 047#define cpu_has_64bits 0
arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_spi.h+2−0
@@ -9,6 +9,8 @@ int __init bcm63xx_spi_register(void); · 8 unmodified lines
9 9
10struct bcm63xx_spi_pdata {10struct bcm63xx_spi_pdata {
11 unsigned int fifo_size;11 unsigned int fifo_size;
12 unsigned int msg_type_shift;
13 unsigned int msg_ctl_width;
12 int bus_num;14 int bus_num;
13 int num_chipselect;15 int num_chipselect;
14 u32 speed_hz;16 u32 speed_hz;
arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h+10−3
@@ -1054,7 +1054,8 @@ · 1053 unmodified lines
1054#define SPI_6338_FILL_BYTE 0x071054#define SPI_6338_FILL_BYTE 0x07
1055#define SPI_6338_MSG_TAIL 0x091055#define SPI_6338_MSG_TAIL 0x09
1056#define SPI_6338_RX_TAIL 0x0b1056#define SPI_6338_RX_TAIL 0x0b
1057#define SPI_6338_MSG_CTL 0x401057#define SPI_6338_MSG_CTL 0x40 /* 8-bits register */
1058#define SPI_6338_MSG_CTL_WIDTH 8
1058#define SPI_6338_MSG_DATA 0x411059#define SPI_6338_MSG_DATA 0x41
1059#define SPI_6338_MSG_DATA_SIZE 0x3f1060#define SPI_6338_MSG_DATA_SIZE 0x3f
1060#define SPI_6338_RX_DATA 0x801061#define SPI_6338_RX_DATA 0x80
@@ -1070,7 +1071,8 @@ · 9 unmodified lines
1070#define SPI_6348_FILL_BYTE 0x071071#define SPI_6348_FILL_BYTE 0x07
1071#define SPI_6348_MSG_TAIL 0x091072#define SPI_6348_MSG_TAIL 0x09
1072#define SPI_6348_RX_TAIL 0x0b1073#define SPI_6348_RX_TAIL 0x0b
1073#define SPI_6348_MSG_CTL 0x401074#define SPI_6348_MSG_CTL 0x40 /* 8-bits register */
1075#define SPI_6348_MSG_CTL_WIDTH 8
1074#define SPI_6348_MSG_DATA 0x411076#define SPI_6348_MSG_DATA 0x41
1075#define SPI_6348_MSG_DATA_SIZE 0x3f1077#define SPI_6348_MSG_DATA_SIZE 0x3f
1076#define SPI_6348_RX_DATA 0x801078#define SPI_6348_RX_DATA 0x80
@@ -1078,6 +1080,7 @@ · 1 unmodified line
1078 1080
1079/* BCM 6358 SPI core */1081/* BCM 6358 SPI core */
1080#define SPI_6358_MSG_CTL 0x00 /* 16-bits register */1082#define SPI_6358_MSG_CTL 0x00 /* 16-bits register */
1083#define SPI_6358_MSG_CTL_WIDTH 16
1081#define SPI_6358_MSG_DATA 0x021084#define SPI_6358_MSG_DATA 0x02
1082#define SPI_6358_MSG_DATA_SIZE 0x21e1085#define SPI_6358_MSG_DATA_SIZE 0x21e
1083#define SPI_6358_RX_DATA 0x4001086#define SPI_6358_RX_DATA 0x400
@@ -1094,6 +1097,7 @@ · 10 unmodified lines
1094 1097
1095/* BCM 6358 SPI core */1098/* BCM 6358 SPI core */
1096#define SPI_6368_MSG_CTL 0x00 /* 16-bits register */1099#define SPI_6368_MSG_CTL 0x00 /* 16-bits register */
1100#define SPI_6368_MSG_CTL_WIDTH 16
1097#define SPI_6368_MSG_DATA 0x021101#define SPI_6368_MSG_DATA 0x02
1098#define SPI_6368_MSG_DATA_SIZE 0x21e1102#define SPI_6368_MSG_DATA_SIZE 0x21e
1099#define SPI_6368_RX_DATA 0x4001103#define SPI_6368_RX_DATA 0x400
@@ -1115,7 +1119,10 @@ · 15 unmodified lines
1115#define SPI_HD_W 0x011119#define SPI_HD_W 0x01
1116#define SPI_HD_R 0x021120#define SPI_HD_R 0x02
1117#define SPI_BYTE_CNT_SHIFT 01121#define SPI_BYTE_CNT_SHIFT 0
1118#define SPI_MSG_TYPE_SHIFT 141122#define SPI_6338_MSG_TYPE_SHIFT 6
1123#define SPI_6348_MSG_TYPE_SHIFT 6
1124#define SPI_6358_MSG_TYPE_SHIFT 14
1125#define SPI_6368_MSG_TYPE_SHIFT 14
1119 1126
1120/* Command */1127/* Command */
1121#define SPI_CMD_NOOP 0x001128#define SPI_CMD_NOOP 0x00
arch/mips/include/asm/mach-cavium-octeon/irq.h+1−9
@@ -21,14 +21,10 @@ enum octeon_irq { · 20 unmodified lines
21 OCTEON_IRQ_TIMER,21 OCTEON_IRQ_TIMER,
22/* sources in CIU_INTX_EN0 */22/* sources in CIU_INTX_EN0 */
23 OCTEON_IRQ_WORKQ0,23 OCTEON_IRQ_WORKQ0,
24 OCTEON_IRQ_GPIO0 = OCTEON_IRQ_WORKQ0 + 16,24 OCTEON_IRQ_WDOG0 = OCTEON_IRQ_WORKQ0 + 16,
25 OCTEON_IRQ_WDOG0 = OCTEON_IRQ_GPIO0 + 16,
26 OCTEON_IRQ_WDOG15 = OCTEON_IRQ_WDOG0 + 15,25 OCTEON_IRQ_WDOG15 = OCTEON_IRQ_WDOG0 + 15,
27 OCTEON_IRQ_MBOX0 = OCTEON_IRQ_WDOG0 + 16,26 OCTEON_IRQ_MBOX0 = OCTEON_IRQ_WDOG0 + 16,
28 OCTEON_IRQ_MBOX1,27 OCTEON_IRQ_MBOX1,
29 OCTEON_IRQ_UART0,
30 OCTEON_IRQ_UART1,
31 OCTEON_IRQ_UART2,
32 OCTEON_IRQ_PCI_INT0,28 OCTEON_IRQ_PCI_INT0,
33 OCTEON_IRQ_PCI_INT1,29 OCTEON_IRQ_PCI_INT1,
34 OCTEON_IRQ_PCI_INT2,30 OCTEON_IRQ_PCI_INT2,
@@ -38,8 +34,6 @@ enum octeon_irq { · 3 unmodified lines
38 OCTEON_IRQ_PCI_MSI2,34 OCTEON_IRQ_PCI_MSI2,
39 OCTEON_IRQ_PCI_MSI3,35 OCTEON_IRQ_PCI_MSI3,
40 36
41 OCTEON_IRQ_TWSI,
42 OCTEON_IRQ_TWSI2,
43 OCTEON_IRQ_RML,37 OCTEON_IRQ_RML,
44 OCTEON_IRQ_TIMER0,38 OCTEON_IRQ_TIMER0,
45 OCTEON_IRQ_TIMER1,39 OCTEON_IRQ_TIMER1,
@@ -47,8 +41,6 @@ enum octeon_irq { · 1 unmodified line
47 OCTEON_IRQ_TIMER3,41 OCTEON_IRQ_TIMER3,
48 OCTEON_IRQ_USB0,42 OCTEON_IRQ_USB0,
49 OCTEON_IRQ_USB1,43 OCTEON_IRQ_USB1,
50 OCTEON_IRQ_MII0,
51 OCTEON_IRQ_MII1,
52 OCTEON_IRQ_BOOTDMA,44 OCTEON_IRQ_BOOTDMA,
53#ifndef CONFIG_PCI_MSI45#ifndef CONFIG_PCI_MSI
54 OCTEON_IRQ_LAST = 12746 OCTEON_IRQ_LAST = 127
arch/mips/include/asm/module.h+1−0
@@ -10,6 +10,7 @@ struct mod_arch_specific { · 9 unmodified lines
10 struct list_head dbe_list;10 struct list_head dbe_list;
11 const struct exception_table_entry *dbe_start;11 const struct exception_table_entry *dbe_start;
12 const struct exception_table_entry *dbe_end;12 const struct exception_table_entry *dbe_end;
13 struct mips_hi16 *r_mips_hi16_list;
13};14};
14 15
15typedef uint8_t Elf64_Byte; /* Type for a 8-bit quantity. */16typedef uint8_t Elf64_Byte; /* Type for a 8-bit quantity. */
arch/mips/include/asm/r4k-timer.h+4−4
@@ -12,16 +12,16 @@ · 11 unmodified lines
12 12
13#ifdef CONFIG_SYNC_R4K13#ifdef CONFIG_SYNC_R4K
14 14
15extern void synchronise_count_master(void);15extern void synchronise_count_master(int cpu);
16extern void synchronise_count_slave(void);16extern void synchronise_count_slave(int cpu);
17 17
18#else18#else
19 19
20static inline void synchronise_count_master(void)20static inline void synchronise_count_master(int cpu)
21{21{
22}22}
23 23
24static inline void synchronise_count_slave(void)24static inline void synchronise_count_slave(int cpu)
25{25{
26}26}
27 27
arch/mips/kernel/module.c+34−9
@@ -39,8 +39,6 @@ struct mips_hi16 { · 38 unmodified lines
39 Elf_Addr value;39 Elf_Addr value;
40};40};
41 41
42static struct mips_hi16 *mips_hi16_list;
43
44static LIST_HEAD(dbe_list);42static LIST_HEAD(dbe_list);
45static DEFINE_SPINLOCK(dbe_lock);43static DEFINE_SPINLOCK(dbe_lock);
46 44
@@ -128,8 +126,8 @@ static int apply_r_mips_hi16_rel(struct module *me, u32 *location, Elf_Addr v) · 81 unmodified lines
128 126
129 n->addr = (Elf_Addr *)location;127 n->addr = (Elf_Addr *)location;
130 n->value = v;128 n->value = v;
131 n->next = mips_hi16_list;129 n->next = me->arch.r_mips_hi16_list;
132 mips_hi16_list = n;130 me->arch.r_mips_hi16_list = n;
133 131
134 return 0;132 return 0;
135}133}
@@ -142,18 +140,28 @@ static int apply_r_mips_hi16_rela(struct module *me, u32 *location, Elf_Addr v) · 6 unmodified lines
142 return 0;140 return 0;
143}141}
144 142
143static void free_relocation_chain(struct mips_hi16 *l)
144{
145 struct mips_hi16 *next;
146
147 while (l) {
148 next = l->next;
149 kfree(l);
150 l = next;
151 }
152}
153
145static int apply_r_mips_lo16_rel(struct module *me, u32 *location, Elf_Addr v)154static int apply_r_mips_lo16_rel(struct module *me, u32 *location, Elf_Addr v)
146{155{
147 unsigned long insnlo = *location;156 unsigned long insnlo = *location;
157 struct mips_hi16 *l;
148 Elf_Addr val, vallo;158 Elf_Addr val, vallo;
149 159
150 /* Sign extend the addend we extract from the lo insn. */160 /* Sign extend the addend we extract from the lo insn. */
151 vallo = ((insnlo & 0xffff) ^ 0x8000) - 0x8000;161 vallo = ((insnlo & 0xffff) ^ 0x8000) - 0x8000;
152 162
153 if (mips_hi16_list != NULL) {163 if (me->arch.r_mips_hi16_list != NULL) {
154 struct mips_hi16 *l;164 l = me->arch.r_mips_hi16_list;
155
156 l = mips_hi16_list;
157 while (l != NULL) {165 while (l != NULL) {
158 struct mips_hi16 *next;166 struct mips_hi16 *next;
159 unsigned long insn;167 unsigned long insn;
@@ -188,7 +196,7 @@ static int apply_r_mips_lo16_rel(struct module *me, u32 *location, Elf_Addr v) · 28 unmodified lines
188 l = next;196 l = next;
189 }197 }
190 198
191 mips_hi16_list = NULL;199 me->arch.r_mips_hi16_list = NULL;
192 }200 }
193 201
194 /*202 /*
@@ -201,6 +209,9 @@ static int apply_r_mips_lo16_rel(struct module *me, u32 *location, Elf_Addr v) · 6 unmodified lines
201 return 0;209 return 0;
202 210
203out_danger:211out_danger:
212 free_relocation_chain(l);
213 me->arch.r_mips_hi16_list = NULL;
214
204 pr_err("module %s: dangerous R_MIPS_LO16 REL relocation\n", me->name);215 pr_err("module %s: dangerous R_MIPS_LO16 REL relocation\n", me->name);
205 216
206 return -ENOEXEC;217 return -ENOEXEC;
@@ -273,6 +284,7 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab, · 66 unmodified lines
273 pr_debug("Applying relocate section %u to %u\n", relsec,284 pr_debug("Applying relocate section %u to %u\n", relsec,
274 sechdrs[relsec].sh_info);285 sechdrs[relsec].sh_info);
275 286
287 me->arch.r_mips_hi16_list = NULL;
276 for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {288 for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {
277 /* This is where to make the change */289 /* This is where to make the change */
278 location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr290 location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr
@@ -296,6 +308,19 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab, · 17 unmodified lines
296 return res;308 return res;
297 }309 }
298 310
311 /*
312 * Normally the hi16 list should be deallocated at this point. A
313 * malformed binary however could contain a series of R_MIPS_HI16
314 * relocations not followed by a R_MIPS_LO16 relocation. In that
315 * case, free up the list and return an error.
316 */
317 if (me->arch.r_mips_hi16_list) {
318 free_relocation_chain(me->arch.r_mips_hi16_list);
319 me->arch.r_mips_hi16_list = NULL;
320
321 return -ENOEXEC;
322 }
323
299 return 0;324 return 0;
300}325}
301 326
arch/mips/kernel/smp.c+2−2
@@ -130,7 +130,7 @@ asmlinkage __cpuinit void start_secondary(void) · 129 unmodified lines
130 130
131 cpu_set(cpu, cpu_callin_map);131 cpu_set(cpu, cpu_callin_map);
132 132
133 synchronise_count_slave();133 synchronise_count_slave(cpu);
134 134
135 /*135 /*
136 * irq will be enabled in ->smp_finish(), enabling it too early136 * irq will be enabled in ->smp_finish(), enabling it too early
@@ -173,7 +173,6 @@ void smp_send_stop(void) · 36 unmodified lines
173void __init smp_cpus_done(unsigned int max_cpus)173void __init smp_cpus_done(unsigned int max_cpus)
174{174{
175 mp_ops->cpus_done();175 mp_ops->cpus_done();
176 synchronise_count_master();
177}176}
178 177
179/* called from main before smp_init() */178/* called from main before smp_init() */
@@ -206,6 +205,7 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle) · 26 unmodified lines
206 while (!cpu_isset(cpu, cpu_callin_map))205 while (!cpu_isset(cpu, cpu_callin_map))
207 udelay(100);206 udelay(100);
208 207
208 synchronise_count_master(cpu);
209 return 0;209 return 0;
210}210}
211 211
arch/mips/kernel/sync-r4k.c+11−15
@@ -28,12 +28,11 @@ static atomic_t __cpuinitdata count_reference = ATOMIC_INIT(0); · 27 unmodified lines
28#define COUNTON 10028#define COUNTON 100
29#define NR_LOOPS 529#define NR_LOOPS 5
30 30
31void __cpuinit synchronise_count_master(void)31void __cpuinit synchronise_count_master(int cpu)
32{32{
33 int i;33 int i;
34 unsigned long flags;34 unsigned long flags;
35 unsigned int initcount;35 unsigned int initcount;
36 int nslaves;
37 36
38#ifdef CONFIG_MIPS_MT_SMTC37#ifdef CONFIG_MIPS_MT_SMTC
39 /*38 /*
@@ -43,8 +42,7 @@ void __cpuinit synchronise_count_master(void) · 3 unmodified lines
43 return;42 return;
44#endif43#endif
45 44
46 printk(KERN_INFO "Synchronize counters across %u CPUs: ",45 printk(KERN_INFO "Synchronize counters for CPU %u: ", cpu);
47 num_online_cpus());
48 46
49 local_irq_save(flags);47 local_irq_save(flags);
50 48
@@ -52,7 +50,7 @@ void __cpuinit synchronise_count_master(void) · 1 unmodified line
52 * Notify the slaves that it's time to start50 * Notify the slaves that it's time to start
53 */51 */
54 atomic_set(&count_reference, read_c0_count());52 atomic_set(&count_reference, read_c0_count());
55 atomic_set(&count_start_flag, 1);53 atomic_set(&count_start_flag, cpu);
56 smp_wmb();54 smp_wmb();
57 55
58 /* Count will be initialised to current timer for all CPU's */56 /* Count will be initialised to current timer for all CPU's */
@@ -69,10 +67,9 @@ void __cpuinit synchronise_count_master(void) · 10 unmodified lines
69 * two CPUs.67 * two CPUs.
70 */68 */
71 69
72 nslaves = num_online_cpus()-1;
73 for (i = 0; i < NR_LOOPS; i++) {70 for (i = 0; i < NR_LOOPS; i++) {
74 /* slaves loop on '!= ncpus' */71 /* slaves loop on '!= 2' */
75 while (atomic_read(&count_count_start) != nslaves)72 while (atomic_read(&count_count_start) != 1)
76 mb();73 mb();
77 atomic_set(&count_count_stop, 0);74 atomic_set(&count_count_stop, 0);
78 smp_wmb();75 smp_wmb();
@@ -89,7 +86,7 @@ void __cpuinit synchronise_count_master(void) · 10 unmodified lines
89 /*86 /*
90 * Wait for all slaves to leave the synchronization point:87 * Wait for all slaves to leave the synchronization point:
91 */88 */
92 while (atomic_read(&count_count_stop) != nslaves)89 while (atomic_read(&count_count_stop) != 1)
93 mb();90 mb();
94 atomic_set(&count_count_start, 0);91 atomic_set(&count_count_start, 0);
95 smp_wmb();92 smp_wmb();
@@ -97,6 +94,7 @@ void __cpuinit synchronise_count_master(void) · 1 unmodified line
97 }94 }
98 /* Arrange for an interrupt in a short while */95 /* Arrange for an interrupt in a short while */
99 write_c0_compare(read_c0_count() + COUNTON);96 write_c0_compare(read_c0_count() + COUNTON);
97 atomic_set(&count_start_flag, 0);
100 98
101 local_irq_restore(flags);99 local_irq_restore(flags);
102 100
@@ -108,11 +106,10 @@ void __cpuinit synchronise_count_master(void) · 5 unmodified lines
108 printk("done.\n");106 printk("done.\n");
109}107}
110 108
111void __cpuinit synchronise_count_slave(void)109void __cpuinit synchronise_count_slave(int cpu)
112{110{
113 int i;111 int i;
114 unsigned int initcount;112 unsigned int initcount;
115 int ncpus;
116 113
117#ifdef CONFIG_MIPS_MT_SMTC114#ifdef CONFIG_MIPS_MT_SMTC
118 /*115 /*
@@ -127,16 +124,15 @@ void __cpuinit synchronise_count_slave(void) · 8 unmodified lines
127 * so we first wait for the master to say everyone is ready124 * so we first wait for the master to say everyone is ready
128 */125 */
129 126
130 while (!atomic_read(&count_start_flag))127 while (atomic_read(&count_start_flag) != cpu)
131 mb();128 mb();
132 129
133 /* Count will be initialised to next expire for all CPU's */130 /* Count will be initialised to next expire for all CPU's */
134 initcount = atomic_read(&count_reference);131 initcount = atomic_read(&count_reference);
135 132
136 ncpus = num_online_cpus();
137 for (i = 0; i < NR_LOOPS; i++) {133 for (i = 0; i < NR_LOOPS; i++) {
138 atomic_inc(&count_count_start);134 atomic_inc(&count_count_start);
139 while (atomic_read(&count_count_start) != ncpus)135 while (atomic_read(&count_count_start) != 2)
140 mb();136 mb();
141 137
142 /*138 /*
@@ -146,7 +142,7 @@ void __cpuinit synchronise_count_slave(void) · 3 unmodified lines
146 write_c0_count(initcount);142 write_c0_count(initcount);
147 143
148 atomic_inc(&count_count_stop);144 atomic_inc(&count_count_stop);
149 while (atomic_read(&count_count_stop) != ncpus)145 while (atomic_read(&count_count_stop) != 2)
150 mb();146 mb();
151 }147 }
152 /* Arrange for an interrupt in a short while */148 /* Arrange for an interrupt in a short while */
arch/mips/mti-malta/malta-pci.c+0−13
@@ -252,16 +252,3 @@ void __init mips_pcibios_init(void) · 251 unmodified lines
252 252
253 register_pci_controller(controller);253 register_pci_controller(controller);
254}254}
255
256/* Enable PCI 2.1 compatibility in PIIX4 */
257static void __devinit quirk_dlcsetup(struct pci_dev *dev)
258{
259 u8 odlc, ndlc;
260 (void) pci_read_config_byte(dev, 0x82, &odlc);
261 /* Enable passive releases and delayed transaction */
262 ndlc = odlc | 7;
263 (void) pci_write_config_byte(dev, 0x82, ndlc);
264}
265
266DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0,
267 quirk_dlcsetup);
arch/mips/pci/pci-ar724x.c+22−0
@@ -23,9 +23,12 @@ · 22 unmodified lines
23#define AR724X_PCI_MEM_BASE 0x1000000023#define AR724X_PCI_MEM_BASE 0x10000000
24#define AR724X_PCI_MEM_SIZE 0x0800000024#define AR724X_PCI_MEM_SIZE 0x08000000
25 25
26#define AR724X_PCI_REG_RESET 0x18
26#define AR724X_PCI_REG_INT_STATUS 0x4c27#define AR724X_PCI_REG_INT_STATUS 0x4c
27#define AR724X_PCI_REG_INT_MASK 0x5028#define AR724X_PCI_REG_INT_MASK 0x50
28 29
30#define AR724X_PCI_RESET_LINK_UP BIT(0)
31
29#define AR724X_PCI_INT_DEV0 BIT(14)32#define AR724X_PCI_INT_DEV0 BIT(14)
30 33
31#define AR724X_PCI_IRQ_COUNT 134#define AR724X_PCI_IRQ_COUNT 1
@@ -38,6 +41,15 @@ static void __iomem *ar724x_pci_ctrl_base; · 6 unmodified lines
38 41
39static u32 ar724x_pci_bar0_value;42static u32 ar724x_pci_bar0_value;
40static bool ar724x_pci_bar0_is_cached;43static bool ar724x_pci_bar0_is_cached;
44static bool ar724x_pci_link_up;
45
46static inline bool ar724x_pci_check_link(void)
47{
48 u32 reset;
49
50 reset = __raw_readl(ar724x_pci_ctrl_base + AR724X_PCI_REG_RESET);
51 return reset & AR724X_PCI_RESET_LINK_UP;
52}
41 53
42static int ar724x_pci_read(struct pci_bus *bus, unsigned int devfn, int where,54static int ar724x_pci_read(struct pci_bus *bus, unsigned int devfn, int where,
43 int size, uint32_t *value)55 int size, uint32_t *value)
@@ -46,6 +58,9 @@ static int ar724x_pci_read(struct pci_bus *bus, unsigned int devfn, int where, · 2 unmodified lines
46 void __iomem *base;58 void __iomem *base;
47 u32 data;59 u32 data;
48 60
61 if (!ar724x_pci_link_up)
62 return PCIBIOS_DEVICE_NOT_FOUND;
63
49 if (devfn)64 if (devfn)
50 return PCIBIOS_DEVICE_NOT_FOUND;65 return PCIBIOS_DEVICE_NOT_FOUND;
51 66
@@ -96,6 +111,9 @@ static int ar724x_pci_write(struct pci_bus *bus, unsigned int devfn, int where, · 44 unmodified lines
96 u32 data;111 u32 data;
97 int s;112 int s;
98 113
114 if (!ar724x_pci_link_up)
115 return PCIBIOS_DEVICE_NOT_FOUND;
116
99 if (devfn)117 if (devfn)
100 return PCIBIOS_DEVICE_NOT_FOUND;118 return PCIBIOS_DEVICE_NOT_FOUND;
101 119
@@ -280,6 +298,10 @@ int __init ar724x_pcibios_init(int irq) · 178 unmodified lines
280 if (ar724x_pci_ctrl_base == NULL)298 if (ar724x_pci_ctrl_base == NULL)
281 goto err_unmap_devcfg;299 goto err_unmap_devcfg;
282 300
301 ar724x_pci_link_up = ar724x_pci_check_link();
302 if (!ar724x_pci_link_up)
303 pr_warn("ar724x: PCIe link is down\n");
304
283 ar724x_pci_irq_init(irq);305 ar724x_pci_irq_init(irq);
284 register_pci_controller(&ar724x_pci_controller);306 register_pci_controller(&ar724x_pci_controller);
285 307
arch/parisc/include/asm/atomic.h+2−2
@@ -141,7 +141,7 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) · 140 unmodified lines
141 141
142#define atomic_sub_and_test(i,v) (atomic_sub_return((i),(v)) == 0)142#define atomic_sub_and_test(i,v) (atomic_sub_return((i),(v)) == 0)
143 143
144#define ATOMIC_INIT(i) ((atomic_t) { (i) })144#define ATOMIC_INIT(i) { (i) }
145 145
146#define smp_mb__before_atomic_dec() smp_mb()146#define smp_mb__before_atomic_dec() smp_mb()
147#define smp_mb__after_atomic_dec() smp_mb()147#define smp_mb__after_atomic_dec() smp_mb()
@@ -150,7 +150,7 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) · 2 unmodified lines
150 150
151#ifdef CONFIG_64BIT151#ifdef CONFIG_64BIT
152 152
153#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })153#define ATOMIC64_INIT(i) { (i) }
154 154
155static __inline__ s64155static __inline__ s64
156__atomic64_add_return(s64 i, atomic64_t *v)156__atomic64_add_return(s64 i, atomic64_t *v)
arch/parisc/kernel/process.c+1−1
@@ -309,7 +309,7 @@ copy_thread(unsigned long clone_flags, unsigned long usp, · 308 unmodified lines
309 cregs->ksp = (unsigned long)stack309 cregs->ksp = (unsigned long)stack
310 + (pregs->gr[21] & (THREAD_SIZE - 1));310 + (pregs->gr[21] & (THREAD_SIZE - 1));
311 cregs->gr[30] = usp;311 cregs->gr[30] = usp;
312 if (p->personality == PER_HPUX) {312 if (personality(p->personality) == PER_HPUX) {
313#ifdef CONFIG_HPUX313#ifdef CONFIG_HPUX
314 cregs->kpc = (unsigned long) &hpux_child_return;314 cregs->kpc = (unsigned long) &hpux_child_return;
315#else315#else
arch/parisc/kernel/sys_parisc.c+4−4
@@ -225,12 +225,12 @@ long parisc_personality(unsigned long personality) · 224 unmodified lines
225 long err;225 long err;
226 226
227 if (personality(current->personality) == PER_LINUX32227 if (personality(current->personality) == PER_LINUX32
228 && personality == PER_LINUX)228 && personality(personality) == PER_LINUX)
229 personality = PER_LINUX32;229 personality = (personality & ~PER_MASK) | PER_LINUX32;
230 230
231 err = sys_personality(personality);231 err = sys_personality(personality);
232 if (err == PER_LINUX32)232 if (personality(err) == PER_LINUX32)
233 err = PER_LINUX;233 err = (err & ~PER_MASK) | PER_LINUX;
234 234
235 return err;235 return err;
236}236}
arch/powerpc/boot/dts/fsl/p4080si-post.dtsi+7−0
@@ -345,6 +345,13 @@ · 344 unmodified lines
345/include/ "qoriq-duart-1.dtsi"345/include/ "qoriq-duart-1.dtsi"
346/include/ "qoriq-gpio-0.dtsi"346/include/ "qoriq-gpio-0.dtsi"
347/include/ "qoriq-usb2-mph-0.dtsi"347/include/ "qoriq-usb2-mph-0.dtsi"
348 usb@210000 {
349 compatible = "fsl-usb2-mph-v1.6", "fsl,mpc85xx-usb2-mph", "fsl-usb2-mph";
350 port0;
351 };
348/include/ "qoriq-usb2-dr-0.dtsi"352/include/ "qoriq-usb2-dr-0.dtsi"
353 usb@211000 {
354 compatible = "fsl-usb2-dr-v1.6", "fsl,mpc85xx-usb2-dr", "fsl-usb2-dr";
355 };
349/include/ "qoriq-sec4.0-0.dtsi"356/include/ "qoriq-sec4.0-0.dtsi"
350};357};
arch/powerpc/configs/85xx/p1023rds_defconfig+10−21
@@ -6,28 +6,27 @@ CONFIG_SYSVIPC=y · 5 unmodified lines
6CONFIG_POSIX_MQUEUE=y6CONFIG_POSIX_MQUEUE=y
7CONFIG_BSD_PROCESS_ACCT=y7CONFIG_BSD_PROCESS_ACCT=y
8CONFIG_AUDIT=y8CONFIG_AUDIT=y
9CONFIG_SPARSE_IRQ=y9CONFIG_IRQ_DOMAIN_DEBUG=y
10CONFIG_NO_HZ=y
11CONFIG_HIGH_RES_TIMERS=y
10CONFIG_IKCONFIG=y12CONFIG_IKCONFIG=y
11CONFIG_IKCONFIG_PROC=y13CONFIG_IKCONFIG_PROC=y
12CONFIG_LOG_BUF_SHIFT=1414CONFIG_LOG_BUF_SHIFT=14
13CONFIG_BLK_DEV_INITRD=y15CONFIG_BLK_DEV_INITRD=y
14# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
15CONFIG_KALLSYMS_ALL=y16CONFIG_KALLSYMS_ALL=y
16CONFIG_KALLSYMS_EXTRA_PASS=y
17CONFIG_EMBEDDED=y17CONFIG_EMBEDDED=y
18CONFIG_MODULES=y18CONFIG_MODULES=y
19CONFIG_MODULE_UNLOAD=y19CONFIG_MODULE_UNLOAD=y
20CONFIG_MODULE_FORCE_UNLOAD=y20CONFIG_MODULE_FORCE_UNLOAD=y
21CONFIG_MODVERSIONS=y21CONFIG_MODVERSIONS=y
22# CONFIG_BLK_DEV_BSG is not set22# CONFIG_BLK_DEV_BSG is not set
23CONFIG_PARTITION_ADVANCED=y
24CONFIG_MAC_PARTITION=y
23CONFIG_P1023_RDS=y25CONFIG_P1023_RDS=y
24CONFIG_QUICC_ENGINE=y26CONFIG_QUICC_ENGINE=y
25CONFIG_QE_GPIO=y27CONFIG_QE_GPIO=y
26CONFIG_CPM2=y28CONFIG_CPM2=y
27CONFIG_GPIO_MPC8XXX=y
28CONFIG_HIGHMEM=y29CONFIG_HIGHMEM=y
29CONFIG_NO_HZ=y
30CONFIG_HIGH_RES_TIMERS=y
31# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set30# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
32CONFIG_BINFMT_MISC=m31CONFIG_BINFMT_MISC=m
33CONFIG_MATH_EMULATION=y32CONFIG_MATH_EMULATION=y
@@ -63,11 +62,11 @@ CONFIG_INET_ESP=y · 29 unmodified lines
63CONFIG_IPV6=y62CONFIG_IPV6=y
64CONFIG_IP_SCTP=m63CONFIG_IP_SCTP=m
65CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"64CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
65CONFIG_DEVTMPFS=y
66CONFIG_PROC_DEVICETREE=y66CONFIG_PROC_DEVICETREE=y
67CONFIG_BLK_DEV_LOOP=y67CONFIG_BLK_DEV_LOOP=y
68CONFIG_BLK_DEV_RAM=y68CONFIG_BLK_DEV_RAM=y
69CONFIG_BLK_DEV_RAM_SIZE=13107269CONFIG_BLK_DEV_RAM_SIZE=131072
70CONFIG_MISC_DEVICES=y
71CONFIG_EEPROM_LEGACY=y70CONFIG_EEPROM_LEGACY=y
72CONFIG_BLK_DEV_SD=y71CONFIG_BLK_DEV_SD=y
73CONFIG_CHR_DEV_ST=y72CONFIG_CHR_DEV_ST=y
@@ -80,15 +79,14 @@ CONFIG_SATA_FSL=y · 6 unmodified lines
80CONFIG_SATA_SIL24=y79CONFIG_SATA_SIL24=y
81CONFIG_NETDEVICES=y80CONFIG_NETDEVICES=y
82CONFIG_DUMMY=y81CONFIG_DUMMY=y
82CONFIG_FS_ENET=y
83CONFIG_FSL_PQ_MDIO=y
84CONFIG_E1000E=y
83CONFIG_MARVELL_PHY=y85CONFIG_MARVELL_PHY=y
84CONFIG_DAVICOM_PHY=y86CONFIG_DAVICOM_PHY=y
85CONFIG_CICADA_PHY=y87CONFIG_CICADA_PHY=y
86CONFIG_VITESSE_PHY=y88CONFIG_VITESSE_PHY=y
87CONFIG_FIXED_PHY=y89CONFIG_FIXED_PHY=y
88CONFIG_NET_ETHERNET=y
89CONFIG_FS_ENET=y
90CONFIG_E1000E=y
91CONFIG_FSL_PQ_MDIO=y
92CONFIG_INPUT_FF_MEMLESS=m90CONFIG_INPUT_FF_MEMLESS=m
93# CONFIG_INPUT_MOUSEDEV is not set91# CONFIG_INPUT_MOUSEDEV is not set
94# CONFIG_INPUT_KEYBOARD is not set92# CONFIG_INPUT_KEYBOARD is not set
@@ -98,16 +96,15 @@ CONFIG_SERIAL_8250=y · 3 unmodified lines
98CONFIG_SERIAL_8250_CONSOLE=y96CONFIG_SERIAL_8250_CONSOLE=y
99CONFIG_SERIAL_8250_NR_UARTS=297CONFIG_SERIAL_8250_NR_UARTS=2
100CONFIG_SERIAL_8250_RUNTIME_UARTS=298CONFIG_SERIAL_8250_RUNTIME_UARTS=2
101CONFIG_SERIAL_8250_EXTENDED=y
102CONFIG_SERIAL_8250_MANY_PORTS=y99CONFIG_SERIAL_8250_MANY_PORTS=y
103CONFIG_SERIAL_8250_DETECT_IRQ=y100CONFIG_SERIAL_8250_DETECT_IRQ=y
104CONFIG_SERIAL_8250_RSA=y101CONFIG_SERIAL_8250_RSA=y
105CONFIG_SERIAL_QE=m102CONFIG_SERIAL_QE=m
106CONFIG_HW_RANDOM=y
107CONFIG_NVRAM=y103CONFIG_NVRAM=y
108CONFIG_I2C=y104CONFIG_I2C=y
109CONFIG_I2C_CPM=m105CONFIG_I2C_CPM=m
110CONFIG_I2C_MPC=y106CONFIG_I2C_MPC=y
107CONFIG_GPIO_MPC8XXX=y
111# CONFIG_HWMON is not set108# CONFIG_HWMON is not set
112CONFIG_VIDEO_OUTPUT_CONTROL=y109CONFIG_VIDEO_OUTPUT_CONTROL=y
113CONFIG_SOUND=y110CONFIG_SOUND=y
@@ -123,7 +120,6 @@ CONFIG_DMADEVICES=y · 9 unmodified lines
123CONFIG_FSL_DMA=y120CONFIG_FSL_DMA=y
124# CONFIG_NET_DMA is not set121# CONFIG_NET_DMA is not set
125CONFIG_STAGING=y122CONFIG_STAGING=y
126# CONFIG_STAGING_EXCLUDE_BUILD is not set
127CONFIG_EXT2_FS=y123CONFIG_EXT2_FS=y
128CONFIG_EXT3_FS=y124CONFIG_EXT3_FS=y
129# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set125# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
@@ -150,22 +146,15 @@ CONFIG_QNX4FS_FS=m · 20 unmodified lines
150CONFIG_SYSV_FS=m146CONFIG_SYSV_FS=m
151CONFIG_UFS_FS=m147CONFIG_UFS_FS=m
152CONFIG_NFS_FS=y148CONFIG_NFS_FS=y
153CONFIG_NFS_V3=y
154CONFIG_NFS_V4=y149CONFIG_NFS_V4=y
155CONFIG_ROOT_NFS=y150CONFIG_ROOT_NFS=y
156CONFIG_NFSD=y151CONFIG_NFSD=y
157CONFIG_PARTITION_ADVANCED=y
158CONFIG_MAC_PARTITION=y
159CONFIG_CRC_T10DIF=y152CONFIG_CRC_T10DIF=y
160CONFIG_FRAME_WARN=8092153CONFIG_FRAME_WARN=8092
161CONFIG_DEBUG_FS=y154CONFIG_DEBUG_FS=y
162CONFIG_DEBUG_KERNEL=y
163CONFIG_DETECT_HUNG_TASK=y155CONFIG_DETECT_HUNG_TASK=y
164# CONFIG_DEBUG_BUGVERBOSE is not set156# CONFIG_DEBUG_BUGVERBOSE is not set
165CONFIG_DEBUG_INFO=y157CONFIG_DEBUG_INFO=y
166# CONFIG_RCU_CPU_STALL_DETECTOR is not set
167CONFIG_SYSCTL_SYSCALL_CHECK=y
168CONFIG_IRQ_DOMAIN_DEBUG=y
169CONFIG_CRYPTO_PCBC=m158CONFIG_CRYPTO_PCBC=m
170CONFIG_CRYPTO_SHA256=y159CONFIG_CRYPTO_SHA256=y
171CONFIG_CRYPTO_SHA512=y160CONFIG_CRYPTO_SHA512=y
arch/powerpc/configs/corenet32_smp_defconfig+9−20
@@ -6,8 +6,8 @@ CONFIG_SYSVIPC=y · 5 unmodified lines
6CONFIG_POSIX_MQUEUE=y6CONFIG_POSIX_MQUEUE=y
7CONFIG_BSD_PROCESS_ACCT=y7CONFIG_BSD_PROCESS_ACCT=y
8CONFIG_AUDIT=y8CONFIG_AUDIT=y
9CONFIG_SPARSE_IRQ=y9CONFIG_NO_HZ=y
10CONFIG_RCU_TRACE=y10CONFIG_HIGH_RES_TIMERS=y
11CONFIG_IKCONFIG=y11CONFIG_IKCONFIG=y
12CONFIG_IKCONFIG_PROC=y12CONFIG_IKCONFIG_PROC=y
13CONFIG_LOG_BUF_SHIFT=1413CONFIG_LOG_BUF_SHIFT=14
@@ -21,23 +21,22 @@ CONFIG_MODULE_UNLOAD=y · 7 unmodified lines
21CONFIG_MODULE_FORCE_UNLOAD=y21CONFIG_MODULE_FORCE_UNLOAD=y
22CONFIG_MODVERSIONS=y22CONFIG_MODVERSIONS=y
23# CONFIG_BLK_DEV_BSG is not set23# CONFIG_BLK_DEV_BSG is not set
24CONFIG_PARTITION_ADVANCED=y
25CONFIG_MAC_PARTITION=y
24CONFIG_P2041_RDB=y26CONFIG_P2041_RDB=y
25CONFIG_P3041_DS=y27CONFIG_P3041_DS=y
26CONFIG_P4080_DS=y28CONFIG_P4080_DS=y
27CONFIG_P5020_DS=y29CONFIG_P5020_DS=y
28CONFIG_HIGHMEM=y30CONFIG_HIGHMEM=y
29CONFIG_NO_HZ=y
30CONFIG_HIGH_RES_TIMERS=y
31# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set31# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
32CONFIG_BINFMT_MISC=m32CONFIG_BINFMT_MISC=m
33CONFIG_KEXEC=y33CONFIG_KEXEC=y
34CONFIG_IRQ_ALL_CPUS=y34CONFIG_IRQ_ALL_CPUS=y
35CONFIG_FORCE_MAX_ZONEORDER=1335CONFIG_FORCE_MAX_ZONEORDER=13
36CONFIG_FSL_LBC=y
37CONFIG_PCI=y36CONFIG_PCI=y
38CONFIG_PCIEPORTBUS=y37CONFIG_PCIEPORTBUS=y
39CONFIG_PCI_MSI=y
40# CONFIG_PCIEASPM is not set38# CONFIG_PCIEASPM is not set
39CONFIG_PCI_MSI=y
41CONFIG_RAPIDIO=y40CONFIG_RAPIDIO=y
42CONFIG_FSL_RIO=y41CONFIG_FSL_RIO=y
43CONFIG_NET=y42CONFIG_NET=y
@@ -70,6 +69,7 @@ CONFIG_INET_IPCOMP=y · 26 unmodified lines
70CONFIG_IPV6=y69CONFIG_IPV6=y
71CONFIG_IP_SCTP=m70CONFIG_IP_SCTP=m
72CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"71CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
72CONFIG_DEVTMPFS=y
73CONFIG_MTD=y73CONFIG_MTD=y
74CONFIG_MTD_CMDLINE_PARTS=y74CONFIG_MTD_CMDLINE_PARTS=y
75CONFIG_MTD_CHAR=y75CONFIG_MTD_CHAR=y
@@ -77,17 +77,14 @@ CONFIG_MTD_BLOCK=y · 1 unmodified line
77CONFIG_MTD_CFI=y77CONFIG_MTD_CFI=y
78CONFIG_MTD_CFI_AMDSTD=y78CONFIG_MTD_CFI_AMDSTD=y
79CONFIG_MTD_PHYSMAP_OF=y79CONFIG_MTD_PHYSMAP_OF=y
80CONFIG_MTD_M25P80=y
80CONFIG_MTD_NAND=y81CONFIG_MTD_NAND=y
81CONFIG_MTD_NAND_ECC=y
82CONFIG_MTD_NAND_IDS=y
83CONFIG_MTD_NAND_FSL_IFC=y
84CONFIG_MTD_NAND_FSL_ELBC=y82CONFIG_MTD_NAND_FSL_ELBC=y
85CONFIG_MTD_M25P80=y83CONFIG_MTD_NAND_FSL_IFC=y
86CONFIG_PROC_DEVICETREE=y84CONFIG_PROC_DEVICETREE=y
87CONFIG_BLK_DEV_LOOP=y85CONFIG_BLK_DEV_LOOP=y
88CONFIG_BLK_DEV_RAM=y86CONFIG_BLK_DEV_RAM=y
89CONFIG_BLK_DEV_RAM_SIZE=13107287CONFIG_BLK_DEV_RAM_SIZE=131072
90CONFIG_MISC_DEVICES=y
91CONFIG_BLK_DEV_SD=y88CONFIG_BLK_DEV_SD=y
92CONFIG_CHR_DEV_ST=y89CONFIG_CHR_DEV_ST=y
93CONFIG_BLK_DEV_SR=y90CONFIG_BLK_DEV_SR=y
@@ -115,11 +112,9 @@ CONFIG_SERIO_LIBPS2=y · 21 unmodified lines
115CONFIG_PPC_EPAPR_HV_BYTECHAN=y112CONFIG_PPC_EPAPR_HV_BYTECHAN=y
116CONFIG_SERIAL_8250=y113CONFIG_SERIAL_8250=y
117CONFIG_SERIAL_8250_CONSOLE=y114CONFIG_SERIAL_8250_CONSOLE=y
118CONFIG_SERIAL_8250_EXTENDED=y
119CONFIG_SERIAL_8250_MANY_PORTS=y115CONFIG_SERIAL_8250_MANY_PORTS=y
120CONFIG_SERIAL_8250_DETECT_IRQ=y116CONFIG_SERIAL_8250_DETECT_IRQ=y
121CONFIG_SERIAL_8250_RSA=y117CONFIG_SERIAL_8250_RSA=y
122CONFIG_HW_RANDOM=y
123CONFIG_NVRAM=y118CONFIG_NVRAM=y
124CONFIG_I2C=y119CONFIG_I2C=y
125CONFIG_I2C_CHARDEV=y120CONFIG_I2C_CHARDEV=y
@@ -132,7 +127,6 @@ CONFIG_SPI_FSL_ESPI=y · 6 unmodified lines
132CONFIG_VIDEO_OUTPUT_CONTROL=y127CONFIG_VIDEO_OUTPUT_CONTROL=y
133CONFIG_USB_HID=m128CONFIG_USB_HID=m
134CONFIG_USB=y129CONFIG_USB=y
135CONFIG_USB_DEVICEFS=y
136CONFIG_USB_MON=y130CONFIG_USB_MON=y
137CONFIG_USB_EHCI_HCD=y131CONFIG_USB_EHCI_HCD=y
138CONFIG_USB_EHCI_FSL=y132CONFIG_USB_EHCI_FSL=y
@@ -142,8 +136,6 @@ CONFIG_USB_OHCI_HCD_PPC_OF_LE=y · 3 unmodified lines
142CONFIG_USB_STORAGE=y136CONFIG_USB_STORAGE=y
143CONFIG_MMC=y137CONFIG_MMC=y
144CONFIG_MMC_SDHCI=y138CONFIG_MMC_SDHCI=y
145CONFIG_MMC_SDHCI_OF=y
146CONFIG_MMC_SDHCI_OF_ESDHC=y
147CONFIG_EDAC=y139CONFIG_EDAC=y
148CONFIG_EDAC_MM_EDAC=y140CONFIG_EDAC_MM_EDAC=y
149CONFIG_EDAC_MPC85XX=y141CONFIG_EDAC_MPC85XX=y
@@ -170,19 +162,16 @@ CONFIG_HUGETLBFS=y · 20 unmodified lines
170CONFIG_JFFS2_FS=y162CONFIG_JFFS2_FS=y
171CONFIG_CRAMFS=y163CONFIG_CRAMFS=y
172CONFIG_NFS_FS=y164CONFIG_NFS_FS=y
173CONFIG_NFS_V3=y
174CONFIG_NFS_V4=y165CONFIG_NFS_V4=y
175CONFIG_ROOT_NFS=y166CONFIG_ROOT_NFS=y
176CONFIG_NFSD=m167CONFIG_NFSD=m
177CONFIG_PARTITION_ADVANCED=y
178CONFIG_MAC_PARTITION=y
179CONFIG_NLS_ISO8859_1=y168CONFIG_NLS_ISO8859_1=y
180CONFIG_NLS_UTF8=m169CONFIG_NLS_UTF8=m
181CONFIG_MAGIC_SYSRQ=y170CONFIG_MAGIC_SYSRQ=y
182CONFIG_DEBUG_SHIRQ=y171CONFIG_DEBUG_SHIRQ=y
183CONFIG_DETECT_HUNG_TASK=y172CONFIG_DETECT_HUNG_TASK=y
184CONFIG_DEBUG_INFO=y173CONFIG_DEBUG_INFO=y
185CONFIG_SYSCTL_SYSCALL_CHECK=y174CONFIG_RCU_TRACE=y
186CONFIG_CRYPTO_NULL=y175CONFIG_CRYPTO_NULL=y
187CONFIG_CRYPTO_PCBC=m176CONFIG_CRYPTO_PCBC=m
188CONFIG_CRYPTO_MD4=y177CONFIG_CRYPTO_MD4=y
arch/powerpc/configs/corenet64_smp_defconfig+1−0
@@ -56,6 +56,7 @@ CONFIG_INET_ESP=y · 55 unmodified lines
56CONFIG_IPV6=y56CONFIG_IPV6=y
57CONFIG_IP_SCTP=m57CONFIG_IP_SCTP=m
58CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"58CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
59CONFIG_DEVTMPFS=y
59CONFIG_MTD=y60CONFIG_MTD=y
60CONFIG_MTD_CMDLINE_PARTS=y61CONFIG_MTD_CMDLINE_PARTS=y
61CONFIG_MTD_CHAR=y62CONFIG_MTD_CHAR=y
arch/powerpc/configs/g5_defconfig+73−30
@@ -1,8 +1,10 @@
1CONFIG_PPC64=y
2CONFIG_ALTIVEC=y
3CONFIG_SMP=y
4CONFIG_NR_CPUS=4
1CONFIG_EXPERIMENTAL=y5CONFIG_EXPERIMENTAL=y
2CONFIG_SYSVIPC=y6CONFIG_SYSVIPC=y
3CONFIG_POSIX_MQUEUE=y7CONFIG_POSIX_MQUEUE=y
4CONFIG_NO_HZ=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_IKCONFIG=y8CONFIG_IKCONFIG=y
7CONFIG_IKCONFIG_PROC=y9CONFIG_IKCONFIG_PROC=y
8CONFIG_BLK_DEV_INITRD=y10CONFIG_BLK_DEV_INITRD=y
@@ -13,15 +15,16 @@ CONFIG_MODULES=y · 4 unmodified lines
13CONFIG_MODULE_UNLOAD=y15CONFIG_MODULE_UNLOAD=y
14CONFIG_MODVERSIONS=y16CONFIG_MODVERSIONS=y
15CONFIG_MODULE_SRCVERSION_ALL=y17CONFIG_MODULE_SRCVERSION_ALL=y
16CONFIG_PARTITION_ADVANCED=y18# CONFIG_PPC_PSERIES is not set
17CONFIG_MAC_PARTITION=y
18CONFIG_SMP=y
19CONFIG_NR_CPUS=4
20CONFIG_KEXEC=y
21# CONFIG_RELOCATABLE is not set
22CONFIG_CPU_FREQ=y19CONFIG_CPU_FREQ=y
23CONFIG_CPU_FREQ_GOV_POWERSAVE=y20CONFIG_CPU_FREQ_GOV_POWERSAVE=y
24CONFIG_CPU_FREQ_GOV_USERSPACE=y21CONFIG_CPU_FREQ_GOV_USERSPACE=y
22CONFIG_CPU_FREQ_PMAC64=y
23CONFIG_NO_HZ=y
24CONFIG_HIGH_RES_TIMERS=y
25CONFIG_KEXEC=y
26CONFIG_IRQ_ALL_CPUS=y
27# CONFIG_MIGRATION is not set
25CONFIG_PCI_MSI=y28CONFIG_PCI_MSI=y
26CONFIG_NET=y29CONFIG_NET=y
27CONFIG_PACKET=y30CONFIG_PACKET=y
@@ -49,6 +52,7 @@ CONFIG_NF_CT_NETLINK=m · 21 unmodified lines
49CONFIG_NF_CONNTRACK_IPV4=m52CONFIG_NF_CONNTRACK_IPV4=m
50CONFIG_IP_NF_QUEUE=m53CONFIG_IP_NF_QUEUE=m
51CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"54CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
55CONFIG_PROC_DEVICETREE=y
52CONFIG_BLK_DEV_LOOP=y56CONFIG_BLK_DEV_LOOP=y
53CONFIG_BLK_DEV_NBD=m57CONFIG_BLK_DEV_NBD=m
54CONFIG_BLK_DEV_RAM=y58CONFIG_BLK_DEV_RAM=y
@@ -56,6 +60,8 @@ CONFIG_BLK_DEV_RAM_SIZE=65536 · 1 unmodified line
56CONFIG_CDROM_PKTCDVD=m60CONFIG_CDROM_PKTCDVD=m
57CONFIG_IDE=y61CONFIG_IDE=y
58CONFIG_BLK_DEV_IDECD=y62CONFIG_BLK_DEV_IDECD=y
63CONFIG_BLK_DEV_IDE_PMAC=y
64CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
59CONFIG_BLK_DEV_SD=y65CONFIG_BLK_DEV_SD=y
60CONFIG_CHR_DEV_ST=y66CONFIG_CHR_DEV_ST=y
61CONFIG_BLK_DEV_SR=y67CONFIG_BLK_DEV_SR=y
@@ -79,24 +85,33 @@ CONFIG_DM_CRYPT=m · 17 unmodified lines
79CONFIG_DM_SNAPSHOT=m85CONFIG_DM_SNAPSHOT=m
80CONFIG_DM_MIRROR=m86CONFIG_DM_MIRROR=m
81CONFIG_DM_ZERO=m87CONFIG_DM_ZERO=m
82CONFIG_MACINTOSH_DRIVERS=y88CONFIG_IEEE1394=y
89CONFIG_IEEE1394_OHCI1394=y
90CONFIG_IEEE1394_SBP2=m
91CONFIG_IEEE1394_ETH1394=m
92CONFIG_IEEE1394_RAWIO=y
93CONFIG_IEEE1394_VIDEO1394=m
94CONFIG_IEEE1394_DV1394=m
95CONFIG_ADB_PMU=y
96CONFIG_PMAC_SMU=y
83CONFIG_MAC_EMUMOUSEBTN=y97CONFIG_MAC_EMUMOUSEBTN=y
98CONFIG_THERM_PM72=y
99CONFIG_WINDFARM=y
100CONFIG_WINDFARM_PM81=y
101CONFIG_WINDFARM_PM91=y
102CONFIG_WINDFARM_PM112=y
103CONFIG_WINDFARM_PM121=y
84CONFIG_NETDEVICES=y104CONFIG_NETDEVICES=y
85CONFIG_BONDING=m
86CONFIG_DUMMY=m105CONFIG_DUMMY=m
87CONFIG_MII=y106CONFIG_BONDING=m
88CONFIG_TUN=m107CONFIG_TUN=m
108CONFIG_NET_ETHERNET=y
109CONFIG_MII=y
110CONFIG_SUNGEM=y
89CONFIG_ACENIC=m111CONFIG_ACENIC=m
90CONFIG_ACENIC_OMIT_TIGON_I=y112CONFIG_ACENIC_OMIT_TIGON_I=y
91CONFIG_TIGON3=y
92CONFIG_E1000=y113CONFIG_E1000=y
93CONFIG_SUNGEM=y114CONFIG_TIGON3=y
94CONFIG_PPP=m
95CONFIG_PPP_BSDCOMP=m
96CONFIG_PPP_DEFLATE=m
97CONFIG_PPPOE=m
98CONFIG_PPP_ASYNC=m
99CONFIG_PPP_SYNC_TTY=m
100CONFIG_USB_CATC=m115CONFIG_USB_CATC=m
101CONFIG_USB_KAWETH=m116CONFIG_USB_KAWETH=m
102CONFIG_USB_PEGASUS=m117CONFIG_USB_PEGASUS=m
@@ -106,24 +121,36 @@ CONFIG_USB_USBNET=m · 3 unmodified lines
106# CONFIG_USB_NET_NET1080 is not set121# CONFIG_USB_NET_NET1080 is not set
107# CONFIG_USB_NET_CDC_SUBSET is not set122# CONFIG_USB_NET_CDC_SUBSET is not set
108# CONFIG_USB_NET_ZAURUS is not set123# CONFIG_USB_NET_ZAURUS is not set
124CONFIG_PPP=m
125CONFIG_PPP_ASYNC=m
126CONFIG_PPP_SYNC_TTY=m
127CONFIG_PPP_DEFLATE=m
128CONFIG_PPP_BSDCOMP=m
129CONFIG_PPPOE=m
109# CONFIG_INPUT_MOUSEDEV_PSAUX is not set130# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
110CONFIG_INPUT_JOYDEV=m131CONFIG_INPUT_JOYDEV=m
111CONFIG_INPUT_EVDEV=y132CONFIG_INPUT_EVDEV=y
133# CONFIG_KEYBOARD_ATKBD is not set
112# CONFIG_MOUSE_PS2 is not set134# CONFIG_MOUSE_PS2 is not set
135# CONFIG_SERIO_I8042 is not set
113# CONFIG_SERIO_SERPORT is not set136# CONFIG_SERIO_SERPORT is not set
114CONFIG_VT_HW_CONSOLE_BINDING=y
115# CONFIG_HW_RANDOM is not set137# CONFIG_HW_RANDOM is not set
116CONFIG_GEN_RTC=y138CONFIG_GEN_RTC=y
117CONFIG_RAW_DRIVER=y139CONFIG_RAW_DRIVER=y
118CONFIG_I2C_CHARDEV=y140CONFIG_I2C_CHARDEV=y
119# CONFIG_HWMON is not set141# CONFIG_HWMON is not set
120CONFIG_AGP=y142CONFIG_AGP=m
121CONFIG_DRM=y143CONFIG_AGP_UNINORTH=m
122CONFIG_DRM_NOUVEAU=y
123CONFIG_VIDEO_OUTPUT_CONTROL=m144CONFIG_VIDEO_OUTPUT_CONTROL=m
145CONFIG_FB=y
124CONFIG_FIRMWARE_EDID=y146CONFIG_FIRMWARE_EDID=y
125CONFIG_FB_TILEBLITTING=y147CONFIG_FB_TILEBLITTING=y
148CONFIG_FB_OF=y
149CONFIG_FB_NVIDIA=y
150CONFIG_FB_NVIDIA_I2C=y
126CONFIG_FB_RADEON=y151CONFIG_FB_RADEON=y
152# CONFIG_VGA_CONSOLE is not set
153CONFIG_FRAMEBUFFER_CONSOLE=y
127CONFIG_LOGO=y154CONFIG_LOGO=y
128CONFIG_SOUND=m155CONFIG_SOUND=m
129CONFIG_SND=m156CONFIG_SND=m
@@ -131,7 +158,15 @@ CONFIG_SND_SEQUENCER=m · 1 unmodified line
131CONFIG_SND_MIXER_OSS=m158CONFIG_SND_MIXER_OSS=m
132CONFIG_SND_PCM_OSS=m159CONFIG_SND_PCM_OSS=m
133CONFIG_SND_SEQUENCER_OSS=y160CONFIG_SND_SEQUENCER_OSS=y
161CONFIG_SND_POWERMAC=m
162CONFIG_SND_AOA=m
163CONFIG_SND_AOA_FABRIC_LAYOUT=m
164CONFIG_SND_AOA_ONYX=m
165CONFIG_SND_AOA_TAS=m
166CONFIG_SND_AOA_TOONIE=m
134CONFIG_SND_USB_AUDIO=m167CONFIG_SND_USB_AUDIO=m
168CONFIG_HID_PID=y
169CONFIG_USB_HIDDEV=y
135CONFIG_HID_GYRATION=y170CONFIG_HID_GYRATION=y
136CONFIG_LOGITECH_FF=y171CONFIG_LOGITECH_FF=y
137CONFIG_HID_PANTHERLORD=y172CONFIG_HID_PANTHERLORD=y
@@ -139,12 +174,13 @@ CONFIG_HID_PETALYNX=y · 1 unmodified line
139CONFIG_HID_SAMSUNG=y174CONFIG_HID_SAMSUNG=y
140CONFIG_HID_SONY=y175CONFIG_HID_SONY=y
141CONFIG_HID_SUNPLUS=y176CONFIG_HID_SUNPLUS=y
142CONFIG_HID_PID=y
143CONFIG_USB_HIDDEV=y
144CONFIG_USB=y177CONFIG_USB=y
178CONFIG_USB_DEVICEFS=y
145CONFIG_USB_MON=y179CONFIG_USB_MON=y
146CONFIG_USB_EHCI_HCD=y180CONFIG_USB_EHCI_HCD=y
181# CONFIG_USB_EHCI_HCD_PPC_OF is not set
147CONFIG_USB_OHCI_HCD=y182CONFIG_USB_OHCI_HCD=y
183CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
148CONFIG_USB_ACM=m184CONFIG_USB_ACM=m
149CONFIG_USB_PRINTER=y185CONFIG_USB_PRINTER=y
150CONFIG_USB_STORAGE=y186CONFIG_USB_STORAGE=y
@@ -208,6 +244,8 @@ CONFIG_REISERFS_FS_POSIX_ACL=y · 57 unmodified lines
208CONFIG_REISERFS_FS_SECURITY=y244CONFIG_REISERFS_FS_SECURITY=y
209CONFIG_XFS_FS=m245CONFIG_XFS_FS=m
210CONFIG_XFS_POSIX_ACL=y246CONFIG_XFS_POSIX_ACL=y
247CONFIG_INOTIFY=y
248CONFIG_AUTOFS_FS=m
211CONFIG_ISO9660_FS=y249CONFIG_ISO9660_FS=y
212CONFIG_JOLIET=y250CONFIG_JOLIET=y
213CONFIG_ZISOFS=y251CONFIG_ZISOFS=y
@@ -221,12 +259,14 @@ CONFIG_HFS_FS=m · 7 unmodified lines
221CONFIG_HFSPLUS_FS=m259CONFIG_HFSPLUS_FS=m
222CONFIG_CRAMFS=y260CONFIG_CRAMFS=y
223CONFIG_NFS_FS=y261CONFIG_NFS_FS=y
262CONFIG_NFS_V3=y
224CONFIG_NFS_V3_ACL=y263CONFIG_NFS_V3_ACL=y
225CONFIG_NFS_V4=y264CONFIG_NFS_V4=y
226CONFIG_NFSD=y265CONFIG_NFSD=y
227CONFIG_NFSD_V3_ACL=y266CONFIG_NFSD_V3_ACL=y
228CONFIG_NFSD_V4=y267CONFIG_NFSD_V4=y
229CONFIG_CIFS=m268CONFIG_CIFS=m
269CONFIG_PARTITION_ADVANCED=y
230CONFIG_NLS_CODEPAGE_437=y270CONFIG_NLS_CODEPAGE_437=y
231CONFIG_NLS_CODEPAGE_1250=y271CONFIG_NLS_CODEPAGE_1250=y
232CONFIG_NLS_CODEPAGE_1251=y272CONFIG_NLS_CODEPAGE_1251=y
@@ -234,23 +274,29 @@ CONFIG_NLS_ASCII=y · 1 unmodified line
234CONFIG_NLS_ISO8859_1=y274CONFIG_NLS_ISO8859_1=y
235CONFIG_NLS_ISO8859_15=y275CONFIG_NLS_ISO8859_15=y
236CONFIG_NLS_UTF8=y276CONFIG_NLS_UTF8=y
277CONFIG_CRC_T10DIF=y
278CONFIG_LIBCRC32C=m
237CONFIG_MAGIC_SYSRQ=y279CONFIG_MAGIC_SYSRQ=y
238# CONFIG_UNUSED_SYMBOLS is not set
239CONFIG_DEBUG_FS=y280CONFIG_DEBUG_FS=y
240CONFIG_DEBUG_KERNEL=y281CONFIG_DEBUG_KERNEL=y
241CONFIG_DEBUG_MUTEXES=y282CONFIG_DEBUG_MUTEXES=y
283# CONFIG_RCU_CPU_STALL_DETECTOR is not set
242CONFIG_LATENCYTOP=y284CONFIG_LATENCYTOP=y
243CONFIG_STRICT_DEVMEM=y285CONFIG_SYSCTL_SYSCALL_CHECK=y
286CONFIG_BOOTX_TEXT=y
244CONFIG_CRYPTO_NULL=m287CONFIG_CRYPTO_NULL=m
245CONFIG_CRYPTO_TEST=m288CONFIG_CRYPTO_TEST=m
289CONFIG_CRYPTO_ECB=m
246CONFIG_CRYPTO_PCBC=m290CONFIG_CRYPTO_PCBC=m
247CONFIG_CRYPTO_HMAC=y291CONFIG_CRYPTO_HMAC=y
292CONFIG_CRYPTO_MD4=m
248CONFIG_CRYPTO_MICHAEL_MIC=m293CONFIG_CRYPTO_MICHAEL_MIC=m
249CONFIG_CRYPTO_SHA256=m294CONFIG_CRYPTO_SHA256=m
250CONFIG_CRYPTO_SHA512=m295CONFIG_CRYPTO_SHA512=m
251CONFIG_CRYPTO_WP512=m296CONFIG_CRYPTO_WP512=m
252CONFIG_CRYPTO_AES=m297CONFIG_CRYPTO_AES=m
253CONFIG_CRYPTO_ANUBIS=m298CONFIG_CRYPTO_ANUBIS=m
299CONFIG_CRYPTO_ARC4=m
254CONFIG_CRYPTO_BLOWFISH=m300CONFIG_CRYPTO_BLOWFISH=m
255CONFIG_CRYPTO_CAST5=m301CONFIG_CRYPTO_CAST5=m
256CONFIG_CRYPTO_CAST6=m302CONFIG_CRYPTO_CAST6=m
@@ -260,6 +306,3 @@ CONFIG_CRYPTO_TEA=m · 3 unmodified lines
260CONFIG_CRYPTO_TWOFISH=m306CONFIG_CRYPTO_TWOFISH=m
261# CONFIG_CRYPTO_ANSI_CPRNG is not set307# CONFIG_CRYPTO_ANSI_CPRNG is not set
262# CONFIG_CRYPTO_HW is not set308# CONFIG_CRYPTO_HW is not set
263# CONFIG_VIRTUALIZATION is not set
264CONFIG_CRC_T10DIF=y
265CONFIG_LIBCRC32C=m
arch/powerpc/configs/mpc83xx_defconfig+5−13
@@ -2,12 +2,12 @@ CONFIG_EXPERIMENTAL=y · 1 unmodified line
2CONFIG_SYSVIPC=y2CONFIG_SYSVIPC=y
3CONFIG_LOG_BUF_SHIFT=143CONFIG_LOG_BUF_SHIFT=14
4CONFIG_BLK_DEV_INITRD=y4CONFIG_BLK_DEV_INITRD=y
5# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
6CONFIG_EXPERT=y5CONFIG_EXPERT=y
7CONFIG_SLAB=y6CONFIG_SLAB=y
8CONFIG_MODULES=y7CONFIG_MODULES=y
9CONFIG_MODULE_UNLOAD=y8CONFIG_MODULE_UNLOAD=y
10# CONFIG_BLK_DEV_BSG is not set9# CONFIG_BLK_DEV_BSG is not set
10CONFIG_PARTITION_ADVANCED=y
11# CONFIG_PPC_CHRP is not set11# CONFIG_PPC_CHRP is not set
12# CONFIG_PPC_PMAC is not set12# CONFIG_PPC_PMAC is not set
13CONFIG_PPC_83xx=y13CONFIG_PPC_83xx=y
@@ -25,7 +25,6 @@ CONFIG_ASP834x=y · 11 unmodified lines
25CONFIG_QUICC_ENGINE=y25CONFIG_QUICC_ENGINE=y
26CONFIG_QE_GPIO=y26CONFIG_QE_GPIO=y
27CONFIG_MATH_EMULATION=y27CONFIG_MATH_EMULATION=y
28CONFIG_SPARSE_IRQ=y
29CONFIG_PCI=y28CONFIG_PCI=y
30CONFIG_NET=y29CONFIG_NET=y
31CONFIG_PACKET=y30CONFIG_PACKET=y
@@ -42,10 +41,9 @@ CONFIG_INET_ESP=y · 10 unmodified lines
42# CONFIG_INET_LRO is not set41# CONFIG_INET_LRO is not set
43# CONFIG_IPV6 is not set42# CONFIG_IPV6 is not set
44CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"43CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
44CONFIG_DEVTMPFS=y
45# CONFIG_FW_LOADER is not set45# CONFIG_FW_LOADER is not set
46CONFIG_MTD=y46CONFIG_MTD=y
47CONFIG_MTD_PARTITIONS=y
48CONFIG_MTD_OF_PARTS=y
49CONFIG_MTD_CHAR=y47CONFIG_MTD_CHAR=y
50CONFIG_MTD_BLOCK=y48CONFIG_MTD_BLOCK=y
51CONFIG_MTD_CFI=y49CONFIG_MTD_CFI=y
@@ -64,15 +62,14 @@ CONFIG_ATA=y · 12 unmodified lines
64CONFIG_SATA_FSL=y62CONFIG_SATA_FSL=y
65CONFIG_SATA_SIL=y63CONFIG_SATA_SIL=y
66CONFIG_NETDEVICES=y64CONFIG_NETDEVICES=y
65CONFIG_MII=y
66CONFIG_UCC_GETH=y
67CONFIG_GIANFAR=y
67CONFIG_MARVELL_PHY=y68CONFIG_MARVELL_PHY=y
68CONFIG_DAVICOM_PHY=y69CONFIG_DAVICOM_PHY=y
69CONFIG_VITESSE_PHY=y70CONFIG_VITESSE_PHY=y
70CONFIG_ICPLUS_PHY=y71CONFIG_ICPLUS_PHY=y
71CONFIG_FIXED_PHY=y72CONFIG_FIXED_PHY=y
72CONFIG_NET_ETHERNET=y
73CONFIG_MII=y
74CONFIG_GIANFAR=y
75CONFIG_UCC_GETH=y
76CONFIG_INPUT_FF_MEMLESS=m73CONFIG_INPUT_FF_MEMLESS=m
77# CONFIG_INPUT_MOUSEDEV is not set74# CONFIG_INPUT_MOUSEDEV is not set
78# CONFIG_INPUT_KEYBOARD is not set75# CONFIG_INPUT_KEYBOARD is not set
@@ -112,17 +109,12 @@ CONFIG_RTC_DRV_DS1374=y · 33 unmodified lines
112CONFIG_EXT2_FS=y109CONFIG_EXT2_FS=y
113CONFIG_EXT3_FS=y110CONFIG_EXT3_FS=y
114# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set111# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
115CONFIG_INOTIFY=y
116CONFIG_PROC_KCORE=y112CONFIG_PROC_KCORE=y
117CONFIG_TMPFS=y113CONFIG_TMPFS=y
118CONFIG_NFS_FS=y114CONFIG_NFS_FS=y
119CONFIG_NFS_V3=y
120CONFIG_NFS_V4=y115CONFIG_NFS_V4=y
121CONFIG_ROOT_NFS=y116CONFIG_ROOT_NFS=y
122CONFIG_PARTITION_ADVANCED=y
123CONFIG_CRC_T10DIF=y117CONFIG_CRC_T10DIF=y
124# CONFIG_RCU_CPU_STALL_DETECTOR is not set
125CONFIG_SYSCTL_SYSCALL_CHECK=y
126CONFIG_CRYPTO_ECB=m118CONFIG_CRYPTO_ECB=m
127CONFIG_CRYPTO_PCBC=m119CONFIG_CRYPTO_PCBC=m
128CONFIG_CRYPTO_SHA256=y120CONFIG_CRYPTO_SHA256=y
arch/powerpc/configs/mpc85xx_defconfig+9−24
@@ -5,7 +5,9 @@ CONFIG_SYSVIPC=y · 4 unmodified lines
5CONFIG_POSIX_MQUEUE=y5CONFIG_POSIX_MQUEUE=y
6CONFIG_BSD_PROCESS_ACCT=y6CONFIG_BSD_PROCESS_ACCT=y
7CONFIG_AUDIT=y7CONFIG_AUDIT=y
8CONFIG_SPARSE_IRQ=y8CONFIG_IRQ_DOMAIN_DEBUG=y
9CONFIG_NO_HZ=y
10CONFIG_HIGH_RES_TIMERS=y
9CONFIG_IKCONFIG=y11CONFIG_IKCONFIG=y
10CONFIG_IKCONFIG_PROC=y12CONFIG_IKCONFIG_PROC=y
11CONFIG_LOG_BUF_SHIFT=1413CONFIG_LOG_BUF_SHIFT=14
@@ -17,6 +19,8 @@ CONFIG_MODULE_UNLOAD=y · 5 unmodified lines
17CONFIG_MODULE_FORCE_UNLOAD=y19CONFIG_MODULE_FORCE_UNLOAD=y
18CONFIG_MODVERSIONS=y20CONFIG_MODVERSIONS=y
19# CONFIG_BLK_DEV_BSG is not set21# CONFIG_BLK_DEV_BSG is not set
22CONFIG_PARTITION_ADVANCED=y
23CONFIG_MAC_PARTITION=y
20CONFIG_MPC8540_ADS=y24CONFIG_MPC8540_ADS=y
21CONFIG_MPC8560_ADS=y25CONFIG_MPC8560_ADS=y
22CONFIG_MPC85xx_CDS=y26CONFIG_MPC85xx_CDS=y
@@ -40,8 +44,6 @@ CONFIG_SBC8548=y · 17 unmodified lines
40CONFIG_QUICC_ENGINE=y44CONFIG_QUICC_ENGINE=y
41CONFIG_QE_GPIO=y45CONFIG_QE_GPIO=y
42CONFIG_HIGHMEM=y46CONFIG_HIGHMEM=y
43CONFIG_NO_HZ=y
44CONFIG_HIGH_RES_TIMERS=y
45CONFIG_BINFMT_MISC=m47CONFIG_BINFMT_MISC=m
46CONFIG_MATH_EMULATION=y48CONFIG_MATH_EMULATION=y
47CONFIG_FORCE_MAX_ZONEORDER=1249CONFIG_FORCE_MAX_ZONEORDER=12
@@ -74,36 +76,25 @@ CONFIG_INET_ESP=y · 26 unmodified lines
74CONFIG_IPV6=y76CONFIG_IPV6=y
75CONFIG_IP_SCTP=m77CONFIG_IP_SCTP=m
76CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"78CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
79CONFIG_DEVTMPFS=y
77CONFIG_MTD=y80CONFIG_MTD=y
78CONFIG_MTD_CMDLINE_PARTS=y81CONFIG_MTD_CMDLINE_PARTS=y
79CONFIG_MTD_CHAR=y82CONFIG_MTD_CHAR=y
80CONFIG_MTD_BLOCK=y83CONFIG_MTD_BLOCK=y
81CONFIG_MTD_CFI=y
82CONFIG_FTL=y84CONFIG_FTL=y
83CONFIG_MTD_GEN_PROBE=y85CONFIG_MTD_CFI=y
84CONFIG_MTD_MAP_BANK_WIDTH_1=y
85CONFIG_MTD_MAP_BANK_WIDTH_2=y
86CONFIG_MTD_MAP_BANK_WIDTH_4=y
87CONFIG_MTD_CFI_I1=y
88CONFIG_MTD_CFI_I2=y
89CONFIG_MTD_CFI_INTELEXT=y86CONFIG_MTD_CFI_INTELEXT=y
90CONFIG_MTD_CFI_AMDSTD=y87CONFIG_MTD_CFI_AMDSTD=y
91CONFIG_MTD_CFI_UTIL=y
92CONFIG_MTD_PHYSMAP_OF=y88CONFIG_MTD_PHYSMAP_OF=y
93CONFIG_MTD_PARTITIONS=y89CONFIG_MTD_M25P80=y
94CONFIG_MTD_OF_PARTS=y
95CONFIG_MTD_NAND=y90CONFIG_MTD_NAND=y
96CONFIG_MTD_NAND_FSL_ELBC=y91CONFIG_MTD_NAND_FSL_ELBC=y
97CONFIG_MTD_NAND_FSL_IFC=y92CONFIG_MTD_NAND_FSL_IFC=y
98CONFIG_MTD_NAND_IDS=y
99CONFIG_MTD_NAND_ECC=y
100CONFIG_MTD_M25P80=y
101CONFIG_PROC_DEVICETREE=y93CONFIG_PROC_DEVICETREE=y
102CONFIG_BLK_DEV_LOOP=y94CONFIG_BLK_DEV_LOOP=y
103CONFIG_BLK_DEV_NBD=y95CONFIG_BLK_DEV_NBD=y
104CONFIG_BLK_DEV_RAM=y96CONFIG_BLK_DEV_RAM=y
105CONFIG_BLK_DEV_RAM_SIZE=13107297CONFIG_BLK_DEV_RAM_SIZE=131072
106CONFIG_MISC_DEVICES=y
107CONFIG_EEPROM_LEGACY=y98CONFIG_EEPROM_LEGACY=y
108CONFIG_BLK_DEV_SD=y99CONFIG_BLK_DEV_SD=y
109CONFIG_CHR_DEV_ST=y100CONFIG_CHR_DEV_ST=y
@@ -115,6 +106,7 @@ CONFIG_ATA=y · 5 unmodified lines
115CONFIG_SATA_AHCI=y106CONFIG_SATA_AHCI=y
116CONFIG_SATA_FSL=y107CONFIG_SATA_FSL=y
117CONFIG_PATA_ALI=y108CONFIG_PATA_ALI=y
109CONFIG_PATA_VIA=y
118CONFIG_NETDEVICES=y110CONFIG_NETDEVICES=y
119CONFIG_DUMMY=y111CONFIG_DUMMY=y
120CONFIG_FS_ENET=y112CONFIG_FS_ENET=y
@@ -134,7 +126,6 @@ CONFIG_SERIAL_8250=y · 13 unmodified lines
134CONFIG_SERIAL_8250_CONSOLE=y126CONFIG_SERIAL_8250_CONSOLE=y
135CONFIG_SERIAL_8250_NR_UARTS=2127CONFIG_SERIAL_8250_NR_UARTS=2
136CONFIG_SERIAL_8250_RUNTIME_UARTS=2128CONFIG_SERIAL_8250_RUNTIME_UARTS=2
137CONFIG_SERIAL_8250_EXTENDED=y
138CONFIG_SERIAL_8250_MANY_PORTS=y129CONFIG_SERIAL_8250_MANY_PORTS=y
139CONFIG_SERIAL_8250_DETECT_IRQ=y130CONFIG_SERIAL_8250_DETECT_IRQ=y
140CONFIG_SERIAL_8250_RSA=y131CONFIG_SERIAL_8250_RSA=y
@@ -183,7 +174,6 @@ CONFIG_HID_SAMSUNG=y · 42 unmodified lines
183CONFIG_HID_SONY=y174CONFIG_HID_SONY=y
184CONFIG_HID_SUNPLUS=y175CONFIG_HID_SUNPLUS=y
185CONFIG_USB=y176CONFIG_USB=y
186CONFIG_USB_DEVICEFS=y
187CONFIG_USB_MON=y177CONFIG_USB_MON=y
188CONFIG_USB_EHCI_HCD=y178CONFIG_USB_EHCI_HCD=y
189CONFIG_USB_EHCI_FSL=y179CONFIG_USB_EHCI_FSL=y
@@ -229,18 +219,13 @@ CONFIG_QNX4FS_FS=m · 39 unmodified lines
229CONFIG_SYSV_FS=m219CONFIG_SYSV_FS=m
230CONFIG_UFS_FS=m220CONFIG_UFS_FS=m
231CONFIG_NFS_FS=y221CONFIG_NFS_FS=y
232CONFIG_NFS_V3=y
233CONFIG_NFS_V4=y222CONFIG_NFS_V4=y
234CONFIG_ROOT_NFS=y223CONFIG_ROOT_NFS=y
235CONFIG_NFSD=y224CONFIG_NFSD=y
236CONFIG_PARTITION_ADVANCED=y
237CONFIG_MAC_PARTITION=y
238CONFIG_CRC_T10DIF=y225CONFIG_CRC_T10DIF=y
239CONFIG_DEBUG_FS=y226CONFIG_DEBUG_FS=y
240CONFIG_DETECT_HUNG_TASK=y227CONFIG_DETECT_HUNG_TASK=y
241CONFIG_DEBUG_INFO=y228CONFIG_DEBUG_INFO=y
242CONFIG_SYSCTL_SYSCALL_CHECK=y
243CONFIG_IRQ_DOMAIN_DEBUG=y
244CONFIG_CRYPTO_PCBC=m229CONFIG_CRYPTO_PCBC=m
245CONFIG_CRYPTO_SHA256=y230CONFIG_CRYPTO_SHA256=y
246CONFIG_CRYPTO_SHA512=y231CONFIG_CRYPTO_SHA512=y
arch/powerpc/configs/mpc85xx_smp_defconfig+8−24
@@ -7,7 +7,9 @@ CONFIG_SYSVIPC=y · 6 unmodified lines
7CONFIG_POSIX_MQUEUE=y7CONFIG_POSIX_MQUEUE=y
8CONFIG_BSD_PROCESS_ACCT=y8CONFIG_BSD_PROCESS_ACCT=y
9CONFIG_AUDIT=y9CONFIG_AUDIT=y
10CONFIG_SPARSE_IRQ=y10CONFIG_IRQ_DOMAIN_DEBUG=y
11CONFIG_NO_HZ=y
12CONFIG_HIGH_RES_TIMERS=y
11CONFIG_IKCONFIG=y13CONFIG_IKCONFIG=y
12CONFIG_IKCONFIG_PROC=y14CONFIG_IKCONFIG_PROC=y
13CONFIG_LOG_BUF_SHIFT=1415CONFIG_LOG_BUF_SHIFT=14
@@ -19,6 +21,8 @@ CONFIG_MODULE_UNLOAD=y · 5 unmodified lines
19CONFIG_MODULE_FORCE_UNLOAD=y21CONFIG_MODULE_FORCE_UNLOAD=y
20CONFIG_MODVERSIONS=y22CONFIG_MODVERSIONS=y
21# CONFIG_BLK_DEV_BSG is not set23# CONFIG_BLK_DEV_BSG is not set
24CONFIG_PARTITION_ADVANCED=y
25CONFIG_MAC_PARTITION=y
22CONFIG_MPC8540_ADS=y26CONFIG_MPC8540_ADS=y
23CONFIG_MPC8560_ADS=y27CONFIG_MPC8560_ADS=y
24CONFIG_MPC85xx_CDS=y28CONFIG_MPC85xx_CDS=y
@@ -42,8 +46,6 @@ CONFIG_SBC8548=y · 17 unmodified lines
42CONFIG_QUICC_ENGINE=y46CONFIG_QUICC_ENGINE=y
43CONFIG_QE_GPIO=y47CONFIG_QE_GPIO=y
44CONFIG_HIGHMEM=y48CONFIG_HIGHMEM=y
45CONFIG_NO_HZ=y
46CONFIG_HIGH_RES_TIMERS=y
47CONFIG_BINFMT_MISC=m49CONFIG_BINFMT_MISC=m
48CONFIG_MATH_EMULATION=y50CONFIG_MATH_EMULATION=y
49CONFIG_IRQ_ALL_CPUS=y51CONFIG_IRQ_ALL_CPUS=y
@@ -77,36 +79,25 @@ CONFIG_INET_ESP=y · 27 unmodified lines
77CONFIG_IPV6=y79CONFIG_IPV6=y
78CONFIG_IP_SCTP=m80CONFIG_IP_SCTP=m
79CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"81CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
82CONFIG_DEVTMPFS=y
80CONFIG_MTD=y83CONFIG_MTD=y
81CONFIG_MTD_CMDLINE_PARTS=y84CONFIG_MTD_CMDLINE_PARTS=y
82CONFIG_MTD_CHAR=y85CONFIG_MTD_CHAR=y
83CONFIG_MTD_BLOCK=y86CONFIG_MTD_BLOCK=y
84CONFIG_MTD_CFI=y
85CONFIG_FTL=y87CONFIG_FTL=y
86CONFIG_MTD_GEN_PROBE=y88CONFIG_MTD_CFI=y
87CONFIG_MTD_MAP_BANK_WIDTH_1=y
88CONFIG_MTD_MAP_BANK_WIDTH_2=y
89CONFIG_MTD_MAP_BANK_WIDTH_4=y
90CONFIG_MTD_CFI_I1=y
91CONFIG_MTD_CFI_I2=y
92CONFIG_MTD_CFI_INTELEXT=y89CONFIG_MTD_CFI_INTELEXT=y
93CONFIG_MTD_CFI_AMDSTD=y90CONFIG_MTD_CFI_AMDSTD=y
94CONFIG_MTD_CFI_UTIL=y
95CONFIG_MTD_PHYSMAP_OF=y91CONFIG_MTD_PHYSMAP_OF=y
96CONFIG_MTD_PARTITIONS=y92CONFIG_MTD_M25P80=y
97CONFIG_MTD_OF_PARTS=y
98CONFIG_MTD_NAND=y93CONFIG_MTD_NAND=y
99CONFIG_MTD_NAND_FSL_ELBC=y94CONFIG_MTD_NAND_FSL_ELBC=y
100CONFIG_MTD_NAND_FSL_IFC=y95CONFIG_MTD_NAND_FSL_IFC=y
101CONFIG_MTD_NAND_IDS=y
102CONFIG_MTD_NAND_ECC=y
103CONFIG_MTD_M25P80=y
104CONFIG_PROC_DEVICETREE=y96CONFIG_PROC_DEVICETREE=y
105CONFIG_BLK_DEV_LOOP=y97CONFIG_BLK_DEV_LOOP=y
106CONFIG_BLK_DEV_NBD=y98CONFIG_BLK_DEV_NBD=y
107CONFIG_BLK_DEV_RAM=y99CONFIG_BLK_DEV_RAM=y
108CONFIG_BLK_DEV_RAM_SIZE=131072100CONFIG_BLK_DEV_RAM_SIZE=131072
109CONFIG_MISC_DEVICES=y
110CONFIG_EEPROM_LEGACY=y101CONFIG_EEPROM_LEGACY=y
111CONFIG_BLK_DEV_SD=y102CONFIG_BLK_DEV_SD=y
112CONFIG_CHR_DEV_ST=y103CONFIG_CHR_DEV_ST=y
@@ -137,7 +128,6 @@ CONFIG_SERIAL_8250=y · 24 unmodified lines
137CONFIG_SERIAL_8250_CONSOLE=y128CONFIG_SERIAL_8250_CONSOLE=y
138CONFIG_SERIAL_8250_NR_UARTS=2129CONFIG_SERIAL_8250_NR_UARTS=2
139CONFIG_SERIAL_8250_RUNTIME_UARTS=2130CONFIG_SERIAL_8250_RUNTIME_UARTS=2
140CONFIG_SERIAL_8250_EXTENDED=y
141CONFIG_SERIAL_8250_MANY_PORTS=y131CONFIG_SERIAL_8250_MANY_PORTS=y
142CONFIG_SERIAL_8250_DETECT_IRQ=y132CONFIG_SERIAL_8250_DETECT_IRQ=y
143CONFIG_SERIAL_8250_RSA=y133CONFIG_SERIAL_8250_RSA=y
@@ -186,7 +176,6 @@ CONFIG_HID_SAMSUNG=y · 42 unmodified lines
186CONFIG_HID_SONY=y176CONFIG_HID_SONY=y
187CONFIG_HID_SUNPLUS=y177CONFIG_HID_SUNPLUS=y
188CONFIG_USB=y178CONFIG_USB=y
189CONFIG_USB_DEVICEFS=y
190CONFIG_USB_MON=y179CONFIG_USB_MON=y
191CONFIG_USB_EHCI_HCD=y180CONFIG_USB_EHCI_HCD=y
192CONFIG_USB_EHCI_FSL=y181CONFIG_USB_EHCI_FSL=y
@@ -232,18 +221,13 @@ CONFIG_QNX4FS_FS=m · 39 unmodified lines
232CONFIG_SYSV_FS=m221CONFIG_SYSV_FS=m
233CONFIG_UFS_FS=m222CONFIG_UFS_FS=m
234CONFIG_NFS_FS=y223CONFIG_NFS_FS=y
235CONFIG_NFS_V3=y
236CONFIG_NFS_V4=y224CONFIG_NFS_V4=y
237CONFIG_ROOT_NFS=y225CONFIG_ROOT_NFS=y
238CONFIG_NFSD=y226CONFIG_NFSD=y
239CONFIG_PARTITION_ADVANCED=y
240CONFIG_MAC_PARTITION=y
241CONFIG_CRC_T10DIF=y227CONFIG_CRC_T10DIF=y
242CONFIG_DEBUG_FS=y228CONFIG_DEBUG_FS=y
243CONFIG_DETECT_HUNG_TASK=y229CONFIG_DETECT_HUNG_TASK=y
244CONFIG_DEBUG_INFO=y230CONFIG_DEBUG_INFO=y
245CONFIG_SYSCTL_SYSCALL_CHECK=y
246CONFIG_IRQ_DOMAIN_DEBUG=y
247CONFIG_CRYPTO_PCBC=m231CONFIG_CRYPTO_PCBC=m
248CONFIG_CRYPTO_SHA256=y232CONFIG_CRYPTO_SHA256=y
249CONFIG_CRYPTO_SHA512=y233CONFIG_CRYPTO_SHA512=y
arch/powerpc/include/asm/cputable.h+0−2
@@ -553,9 +553,7 @@ static inline int cpu_has_feature(unsigned long feature) · 552 unmodified lines
553 & feature);553 & feature);
554}554}
555 555
556#ifdef CONFIG_HAVE_HW_BREAKPOINT
557#define HBP_NUM 1556#define HBP_NUM 1
558#endif /* CONFIG_HAVE_HW_BREAKPOINT */
559 557
560#endif /* !__ASSEMBLY__ */558#endif /* !__ASSEMBLY__ */
561 559
arch/powerpc/include/asm/kvm_host.h+1−0
@@ -33,6 +33,7 @@ · 32 unmodified lines
33#include <asm/kvm_asm.h>33#include <asm/kvm_asm.h>
34#include <asm/processor.h>34#include <asm/processor.h>
35#include <asm/page.h>35#include <asm/page.h>
36#include <asm/cacheflush.h>
36 37
37#define KVM_MAX_VCPUS NR_CPUS38#define KVM_MAX_VCPUS NR_CPUS
38#define KVM_MAX_VCORES NR_CPUS39#define KVM_MAX_VCORES NR_CPUS
arch/powerpc/include/asm/kvm_ppc.h+12−0
@@ -219,4 +219,16 @@ void kvmppc_claim_lpid(long lpid); · 218 unmodified lines
219void kvmppc_free_lpid(long lpid);219void kvmppc_free_lpid(long lpid);
220void kvmppc_init_lpid(unsigned long nr_lpids);220void kvmppc_init_lpid(unsigned long nr_lpids);
221 221
222static inline void kvmppc_mmu_flush_icache(pfn_t pfn)
223{
224 /* Clear i-cache for new pages */
225 struct page *page;
226 page = pfn_to_page(pfn);
227 if (!test_bit(PG_arch_1, &page->flags)) {
228 flush_dcache_icache_page(page);
229 set_bit(PG_arch_1, &page->flags);
230 }
231}
232
233
222#endif /* __POWERPC_KVM_PPC_H__ */234#endif /* __POWERPC_KVM_PPC_H__ */
arch/powerpc/include/asm/mpic_msgr.h+1−0
@@ -14,6 +14,7 @@ · 13 unmodified lines
14#include <linux/types.h>14#include <linux/types.h>
15#include <linux/spinlock.h>15#include <linux/spinlock.h>
16#include <asm/smp.h>16#include <asm/smp.h>
17#include <asm/io.h>
17 18
18struct mpic_msgr {19struct mpic_msgr {
19 u32 __iomem *base;20 u32 __iomem *base;
arch/powerpc/include/asm/processor.h+1−0
@@ -386,6 +386,7 @@ extern unsigned long cpuidle_disable; · 385 unmodified lines
386enum idle_boot_override {IDLE_NO_OVERRIDE = 0, IDLE_POWERSAVE_OFF};386enum idle_boot_override {IDLE_NO_OVERRIDE = 0, IDLE_POWERSAVE_OFF};
387 387
388extern int powersave_nap; /* set if nap mode can be used in idle loop */388extern int powersave_nap; /* set if nap mode can be used in idle loop */
389extern void power7_nap(void);
389 390
390#ifdef CONFIG_PSERIES_IDLE391#ifdef CONFIG_PSERIES_IDLE
391extern void update_smt_snooze_delay(int snooze);392extern void update_smt_snooze_delay(int snooze);
arch/powerpc/kernel/asm-offsets.c+1−0
@@ -76,6 +76,7 @@ int main(void) · 75 unmodified lines
76 DEFINE(SIGSEGV, SIGSEGV);76 DEFINE(SIGSEGV, SIGSEGV);
77 DEFINE(NMI_MASK, NMI_MASK);77 DEFINE(NMI_MASK, NMI_MASK);
78 DEFINE(THREAD_DSCR, offsetof(struct thread_struct, dscr));78 DEFINE(THREAD_DSCR, offsetof(struct thread_struct, dscr));
79 DEFINE(THREAD_DSCR_INHERIT, offsetof(struct thread_struct, dscr_inherit));
79#else80#else
80 DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));81 DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
81#endif /* CONFIG_PPC64 */82#endif /* CONFIG_PPC64 */
arch/powerpc/kernel/dbell.c+2−0
@@ -28,6 +28,8 @@ void doorbell_setup_this_cpu(void) · 27 unmodified lines
28 28
29void doorbell_cause_ipi(int cpu, unsigned long data)29void doorbell_cause_ipi(int cpu, unsigned long data)
30{30{
31 /* Order previous accesses vs. msgsnd, which is treated as a store */
32 mb();
31 ppc_msgsnd(PPC_DBELL, 0, data);33 ppc_msgsnd(PPC_DBELL, 0, data);
32}34}
33 35
arch/powerpc/kernel/dma-iommu.c+4−5
@@ -83,11 +83,10 @@ static int dma_iommu_dma_supported(struct device *dev, u64 mask) · 82 unmodified lines
83 return 0;83 return 0;
84 }84 }
85 85
86 if ((tbl->it_offset + tbl->it_size) > (mask >> IOMMU_PAGE_SHIFT)) {86 if (tbl->it_offset > (mask >> IOMMU_PAGE_SHIFT)) {
87 dev_info(dev, "Warning: IOMMU window too big for device mask\n");87 dev_info(dev, "Warning: IOMMU offset too big for device mask\n");
88 dev_info(dev, "mask: 0x%08llx, table end: 0x%08lx\n",88 dev_info(dev, "mask: 0x%08llx, table offset: 0x%08lx\n",
89 mask, (tbl->it_offset + tbl->it_size) <<89 mask, tbl->it_offset << IOMMU_PAGE_SHIFT);
90 IOMMU_PAGE_SHIFT);
91 return 0;90 return 0;
92 } else91 } else
93 return 1;92 return 1;
arch/powerpc/kernel/entry_64.S+17−6
@@ -370,6 +370,12 @@ _GLOBAL(ret_from_fork) · 369 unmodified lines
370 li r3,0370 li r3,0
371 b syscall_exit371 b syscall_exit
372 372
373 .section ".toc","aw"
374DSCR_DEFAULT:
375 .tc dscr_default[TC],dscr_default
376
377 .section ".text"
378
373/*379/*
374 * This routine switches between two different tasks. The process380 * This routine switches between two different tasks. The process
375 * state of one is saved on its kernel stack. Then the state381 * state of one is saved on its kernel stack. Then the state
@@ -509,9 +515,6 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT) · 133 unmodified lines
509 mr r1,r8 /* start using new stack pointer */515 mr r1,r8 /* start using new stack pointer */
510 std r7,PACAKSAVE(r13)516 std r7,PACAKSAVE(r13)
511 517
512 ld r6,_CCR(r1)
513 mtcrf 0xFF,r6
514
515#ifdef CONFIG_ALTIVEC518#ifdef CONFIG_ALTIVEC
516BEGIN_FTR_SECTION519BEGIN_FTR_SECTION
517 ld r0,THREAD_VRSAVE(r4)520 ld r0,THREAD_VRSAVE(r4)
@@ -520,14 +523,22 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) · 2 unmodified lines
520#endif /* CONFIG_ALTIVEC */523#endif /* CONFIG_ALTIVEC */
521#ifdef CONFIG_PPC64524#ifdef CONFIG_PPC64
522BEGIN_FTR_SECTION525BEGIN_FTR_SECTION
526 lwz r6,THREAD_DSCR_INHERIT(r4)
527 ld r7,DSCR_DEFAULT@toc(2)
523 ld r0,THREAD_DSCR(r4)528 ld r0,THREAD_DSCR(r4)
524 cmpd r0,r25529 cmpwi r6,0
525 beq 1f530 bne 1f
531 ld r0,0(r7)
5321: cmpd r0,r25
533 beq 2f
526 mtspr SPRN_DSCR,r0534 mtspr SPRN_DSCR,r0
5271: 5352:
528END_FTR_SECTION_IFSET(CPU_FTR_DSCR)536END_FTR_SECTION_IFSET(CPU_FTR_DSCR)
529#endif537#endif
530 538
539 ld r6,_CCR(r1)
540 mtcrf 0xFF,r6
541
531 /* r3-r13 are destroyed -- Cort */542 /* r3-r13 are destroyed -- Cort */
532 REST_8GPRS(14, r1)543 REST_8GPRS(14, r1)
533 REST_10GPRS(22, r1)544 REST_10GPRS(22, r1)
arch/powerpc/kernel/exceptions-64s.S+2−1
@@ -186,7 +186,7 @@ hardware_interrupt_hv: · 185 unmodified lines
186 KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x800)186 KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x800)
187 187
188 MASKABLE_EXCEPTION_PSERIES(0x900, 0x900, decrementer)188 MASKABLE_EXCEPTION_PSERIES(0x900, 0x900, decrementer)
189 MASKABLE_EXCEPTION_HV(0x980, 0x982, decrementer)189 STD_EXCEPTION_HV(0x980, 0x982, hdecrementer)
190 190
191 STD_EXCEPTION_PSERIES(0xa00, 0xa00, trap_0a)191 STD_EXCEPTION_PSERIES(0xa00, 0xa00, trap_0a)
192 KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xa00)192 KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xa00)
@@ -486,6 +486,7 @@ machine_check_common: · 293 unmodified lines
486 486
487 STD_EXCEPTION_COMMON_ASYNC(0x500, hardware_interrupt, do_IRQ)487 STD_EXCEPTION_COMMON_ASYNC(0x500, hardware_interrupt, do_IRQ)
488 STD_EXCEPTION_COMMON_ASYNC(0x900, decrementer, .timer_interrupt)488 STD_EXCEPTION_COMMON_ASYNC(0x900, decrementer, .timer_interrupt)
489 STD_EXCEPTION_COMMON(0x980, hdecrementer, .hdec_interrupt)
489 STD_EXCEPTION_COMMON(0xa00, trap_0a, .unknown_exception)490 STD_EXCEPTION_COMMON(0xa00, trap_0a, .unknown_exception)
490 STD_EXCEPTION_COMMON(0xb00, trap_0b, .unknown_exception)491 STD_EXCEPTION_COMMON(0xb00, trap_0b, .unknown_exception)
491 STD_EXCEPTION_COMMON(0xd00, single_step, .single_step_exception)492 STD_EXCEPTION_COMMON(0xd00, single_step, .single_step_exception)
arch/powerpc/kernel/hw_breakpoint.c+1−1
@@ -253,7 +253,7 @@ int __kprobes hw_breakpoint_handler(struct die_args *args) · 252 unmodified lines
253 253
254 /* Do not emulate user-space instructions, instead single-step them */254 /* Do not emulate user-space instructions, instead single-step them */
255 if (user_mode(regs)) {255 if (user_mode(regs)) {
256 bp->ctx->task->thread.last_hit_ubp = bp;256 current->thread.last_hit_ubp = bp;
257 regs->msr |= MSR_SE;257 regs->msr |= MSR_SE;
258 goto out;258 goto out;
259 }259 }
arch/powerpc/kernel/idle_power7.S+2−0
@@ -28,7 +28,9 @@ _GLOBAL(power7_idle) · 27 unmodified lines
28 lwz r4,ADDROFF(powersave_nap)(r3)28 lwz r4,ADDROFF(powersave_nap)(r3)
29 cmpwi 0,r4,029 cmpwi 0,r4,0
30 beqlr30 beqlr
31 /* fall through */
31 32
33_GLOBAL(power7_nap)
32 /* NAP is a state loss, we create a regs frame on the34 /* NAP is a state loss, we create a regs frame on the
33 * stack, fill it up with the state we care about and35 * stack, fill it up with the state we care about and
34 * stick a pointer to it in PACAR1. We really only36 * stick a pointer to it in PACAR1. We really only
arch/powerpc/kernel/kgdb.c+24−3
@@ -25,6 +25,7 @@ · 24 unmodified lines
25#include <asm/processor.h>25#include <asm/processor.h>
26#include <asm/machdep.h>26#include <asm/machdep.h>
27#include <asm/debug.h>27#include <asm/debug.h>
28#include <linux/slab.h>
28 29
29/*30/*
30 * This table contains the mapping between PowerPC hardware trap types, and31 * This table contains the mapping between PowerPC hardware trap types, and
@@ -101,6 +102,21 @@ static int computeSignal(unsigned int tt) · 70 unmodified lines
101 return SIGHUP; /* default for things we don't know about */102 return SIGHUP; /* default for things we don't know about */
102}103}
103 104
105/**
106 *
107 * kgdb_skipexception - Bail out of KGDB when we've been triggered.
108 * @exception: Exception vector number
109 * @regs: Current &struct pt_regs.
110 *
111 * On some architectures we need to skip a breakpoint exception when
112 * it occurs after a breakpoint has been removed.
113 *
114 */
115int kgdb_skipexception(int exception, struct pt_regs *regs)
116{
117 return kgdb_isremovedbreak(regs->nip);
118}
119
104static int kgdb_call_nmi_hook(struct pt_regs *regs)120static int kgdb_call_nmi_hook(struct pt_regs *regs)
105{121{
106 kgdb_nmicallback(raw_smp_processor_id(), regs);122 kgdb_nmicallback(raw_smp_processor_id(), regs);
@@ -138,6 +154,8 @@ static int kgdb_handle_breakpoint(struct pt_regs *regs) · 31 unmodified lines
138static int kgdb_singlestep(struct pt_regs *regs)154static int kgdb_singlestep(struct pt_regs *regs)
139{155{
140 struct thread_info *thread_info, *exception_thread_info;156 struct thread_info *thread_info, *exception_thread_info;
157 struct thread_info *backup_current_thread_info = \
158 (struct thread_info *)kmalloc(sizeof(struct thread_info), GFP_KERNEL);
141 159
142 if (user_mode(regs))160 if (user_mode(regs))
143 return 0;161 return 0;
@@ -155,13 +173,17 @@ static int kgdb_singlestep(struct pt_regs *regs) · 11 unmodified lines
155 thread_info = (struct thread_info *)(regs->gpr[1] & ~(THREAD_SIZE-1));173 thread_info = (struct thread_info *)(regs->gpr[1] & ~(THREAD_SIZE-1));
156 exception_thread_info = current_thread_info();174 exception_thread_info = current_thread_info();
157 175
158 if (thread_info != exception_thread_info)176 if (thread_info != exception_thread_info) {
177 /* Save the original current_thread_info. */
178 memcpy(backup_current_thread_info, exception_thread_info, sizeof *thread_info);
159 memcpy(exception_thread_info, thread_info, sizeof *thread_info);179 memcpy(exception_thread_info, thread_info, sizeof *thread_info);
180 }
160 181
161 kgdb_handle_exception(0, SIGTRAP, 0, regs);182 kgdb_handle_exception(0, SIGTRAP, 0, regs);
162 183
163 if (thread_info != exception_thread_info)184 if (thread_info != exception_thread_info)
164 memcpy(thread_info, exception_thread_info, sizeof *thread_info);185 /* Restore current_thread_info lastly. */
186 memcpy(exception_thread_info, backup_current_thread_info, sizeof *thread_info);
165 187
166 return 1;188 return 1;
167}189}
@@ -410,7 +432,6 @@ int kgdb_arch_handle_exception(int vector, int signo, int err_code, · 242 unmodified lines
410#else432#else
411 linux_regs->msr |= MSR_SE;433 linux_regs->msr |= MSR_SE;
412#endif434#endif
413 kgdb_single_step = 1;
414 atomic_set(&kgdb_cpu_doing_single_step,435 atomic_set(&kgdb_cpu_doing_single_step,
415 raw_smp_processor_id());436 raw_smp_processor_id());
416 }437 }
arch/powerpc/kernel/process.c+2−10
@@ -802,16 +802,8 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, · 801 unmodified lines
802#endif /* CONFIG_PPC_STD_MMU_64 */802#endif /* CONFIG_PPC_STD_MMU_64 */
803#ifdef CONFIG_PPC64 803#ifdef CONFIG_PPC64
804 if (cpu_has_feature(CPU_FTR_DSCR)) {804 if (cpu_has_feature(CPU_FTR_DSCR)) {
805 if (current->thread.dscr_inherit) {805 p->thread.dscr_inherit = current->thread.dscr_inherit;
806 p->thread.dscr_inherit = 1;806 p->thread.dscr = current->thread.dscr;
807 p->thread.dscr = current->thread.dscr;
808 } else if (0 != dscr_default) {
809 p->thread.dscr_inherit = 1;
810 p->thread.dscr = dscr_default;
811 } else {
812 p->thread.dscr_inherit = 0;
813 p->thread.dscr = 0;
814 }
815 }807 }
816#endif808#endif
817 809
arch/powerpc/kernel/smp.c+9−2
@@ -198,8 +198,15 @@ void smp_muxed_ipi_message_pass(int cpu, int msg) · 197 unmodified lines
198 struct cpu_messages *info = &per_cpu(ipi_message, cpu);198 struct cpu_messages *info = &per_cpu(ipi_message, cpu);
199 char *message = (char *)&info->messages;199 char *message = (char *)&info->messages;
200 200
201 /*
202 * Order previous accesses before accesses in the IPI handler.
203 */
204 smp_mb();
201 message[msg] = 1;205 message[msg] = 1;
202 mb();206 /*
207 * cause_ipi functions are required to include a full barrier
208 * before doing whatever causes the IPI.
209 */
203 smp_ops->cause_ipi(cpu, info->data);210 smp_ops->cause_ipi(cpu, info->data);
204}211}
205 212
@@ -211,7 +218,7 @@ irqreturn_t smp_ipi_demux(void) · 5 unmodified lines
211 mb(); /* order any irq clear */218 mb(); /* order any irq clear */
212 219
213 do {220 do {
214 all = xchg_local(&info->messages, 0);221 all = xchg(&info->messages, 0);
215 222
216#ifdef __BIG_ENDIAN223#ifdef __BIG_ENDIAN
217 if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNCTION)))224 if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNCTION)))
arch/powerpc/kernel/syscalls.c+4−4
@@ -107,11 +107,11 @@ long ppc64_personality(unsigned long personality) · 106 unmodified lines
107 long ret;107 long ret;
108 108
109 if (personality(current->personality) == PER_LINUX32109 if (personality(current->personality) == PER_LINUX32
110 && personality == PER_LINUX)110 && personality(personality) == PER_LINUX)
111 personality = PER_LINUX32;111 personality = (personality & ~PER_MASK) | PER_LINUX32;
112 ret = sys_personality(personality);112 ret = sys_personality(personality);
113 if (ret == PER_LINUX32)113 if (personality(ret) == PER_LINUX32)
114 ret = PER_LINUX;114 ret = (ret & ~PER_MASK) | PER_LINUX;
115 return ret;115 return ret;
116}116}
117#endif117#endif
arch/powerpc/kernel/sysfs.c+10−0
@@ -194,6 +194,14 @@ static ssize_t show_dscr_default(struct device *dev, · 193 unmodified lines
194 return sprintf(buf, "%lx\n", dscr_default);194 return sprintf(buf, "%lx\n", dscr_default);
195}195}
196 196
197static void update_dscr(void *dummy)
198{
199 if (!current->thread.dscr_inherit) {
200 current->thread.dscr = dscr_default;
201 mtspr(SPRN_DSCR, dscr_default);
202 }
203}
204
197static ssize_t __used store_dscr_default(struct device *dev,205static ssize_t __used store_dscr_default(struct device *dev,
198 struct device_attribute *attr, const char *buf,206 struct device_attribute *attr, const char *buf,
199 size_t count)207 size_t count)
@@ -206,6 +214,8 @@ static ssize_t __used store_dscr_default(struct device *dev, · 6 unmodified lines
206 return -EINVAL;214 return -EINVAL;
207 dscr_default = val;215 dscr_default = val;
208 216
217 on_each_cpu(update_dscr, NULL, 1);
218
209 return count;219 return count;
210}220}
211 221
arch/powerpc/kernel/time.c+9−0
@@ -535,6 +535,15 @@ void timer_interrupt(struct pt_regs * regs) · 534 unmodified lines
535 trace_timer_interrupt_exit(regs);535 trace_timer_interrupt_exit(regs);
536}536}
537 537
538/*
539 * Hypervisor decrementer interrupts shouldn't occur but are sometimes
540 * left pending on exit from a KVM guest. We don't need to do anything
541 * to clear them, as they are edge-triggered.
542 */
543void hdec_interrupt(struct pt_regs *regs)
544{
545}
546
538#ifdef CONFIG_SUSPEND547#ifdef CONFIG_SUSPEND
539static void generic_suspend_disable_irqs(void)548static void generic_suspend_disable_irqs(void)
540{549{
arch/powerpc/kernel/traps.c+2−1
@@ -972,8 +972,9 @@ static int emulate_instruction(struct pt_regs *regs) · 971 unmodified lines
972 cpu_has_feature(CPU_FTR_DSCR)) {972 cpu_has_feature(CPU_FTR_DSCR)) {
973 PPC_WARN_EMULATED(mtdscr, regs);973 PPC_WARN_EMULATED(mtdscr, regs);
974 rd = (instword >> 21) & 0x1f;974 rd = (instword >> 21) & 0x1f;
975 mtspr(SPRN_DSCR, regs->gpr[rd]);975 current->thread.dscr = regs->gpr[rd];
976 current->thread.dscr_inherit = 1;976 current->thread.dscr_inherit = 1;
977 mtspr(SPRN_DSCR, current->thread.dscr);
977 return 0;978 return 0;
978 }979 }
979#endif980#endif
arch/powerpc/kvm/book3s_32_mmu_host.c+3−0
@@ -211,6 +211,9 @@ next_pteg: · 210 unmodified lines
211 pteg1 |= PP_RWRX;211 pteg1 |= PP_RWRX;
212 }212 }
213 213
214 if (orig_pte->may_execute)
215 kvmppc_mmu_flush_icache(hpaddr >> PAGE_SHIFT);
216
214 local_irq_disable();217 local_irq_disable();
215 218
216 if (pteg[rr]) {219 if (pteg[rr]) {
arch/powerpc/kvm/book3s_64_mmu_host.c+2−0
@@ -126,6 +126,8 @@ int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte) · 125 unmodified lines
126 126
127 if (!orig_pte->may_execute)127 if (!orig_pte->may_execute)
128 rflags |= HPTE_R_N;128 rflags |= HPTE_R_N;
129 else
130 kvmppc_mmu_flush_icache(hpaddr >> PAGE_SHIFT);
129 131
130 hash = hpt_hash(va, PTE_SIZE, MMU_SEGSIZE_256M);132 hash = hpt_hash(va, PTE_SIZE, MMU_SEGSIZE_256M);
131 133
arch/powerpc/kvm/book3s_hv_rmhandlers.S+7−5
@@ -1421,13 +1421,13 @@ _GLOBAL(kvmppc_h_cede) · 1420 unmodified lines
1421 sync /* order setting ceded vs. testing prodded */1421 sync /* order setting ceded vs. testing prodded */
1422 lbz r5,VCPU_PRODDED(r3)1422 lbz r5,VCPU_PRODDED(r3)
1423 cmpwi r5,01423 cmpwi r5,0
1424 bne 1f1424 bne kvm_cede_prodded
1425 li r0,0 /* set trap to 0 to say hcall is handled */1425 li r0,0 /* set trap to 0 to say hcall is handled */
1426 stw r0,VCPU_TRAP(r3)1426 stw r0,VCPU_TRAP(r3)
1427 li r0,H_SUCCESS1427 li r0,H_SUCCESS
1428 std r0,VCPU_GPR(R3)(r3)1428 std r0,VCPU_GPR(R3)(r3)
1429BEGIN_FTR_SECTION1429BEGIN_FTR_SECTION
1430 b 2f /* just send it up to host on 970 */1430 b kvm_cede_exit /* just send it up to host on 970 */
1431END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_206)1431END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_206)
1432 1432
1433 /*1433 /*
@@ -1446,7 +1446,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_206) · 12 unmodified lines
1446 or r4,r4,r01446 or r4,r4,r0
1447 PPC_POPCNTW(R7,R4)1447 PPC_POPCNTW(R7,R4)
1448 cmpw r7,r81448 cmpw r7,r8
1449 bge 2f1449 bge kvm_cede_exit
1450 stwcx. r4,0,r61450 stwcx. r4,0,r6
1451 bne 31b1451 bne 31b
1452 li r0,11452 li r0,1
@@ -1555,7 +1555,8 @@ kvm_end_cede: · 102 unmodified lines
1555 b hcall_real_fallback1555 b hcall_real_fallback
1556 1556
1557 /* cede when already previously prodded case */1557 /* cede when already previously prodded case */
15581: li r0,01558kvm_cede_prodded:
1559 li r0,0
1559 stb r0,VCPU_PRODDED(r3)1560 stb r0,VCPU_PRODDED(r3)
1560 sync /* order testing prodded vs. clearing ceded */1561 sync /* order testing prodded vs. clearing ceded */
1561 stb r0,VCPU_CEDED(r3)1562 stb r0,VCPU_CEDED(r3)
@@ -1563,7 +1564,8 @@ kvm_end_cede: · 1 unmodified line
1563 blr1564 blr
1564 1565
1565 /* we've ceded but we want to give control to the host */1566 /* we've ceded but we want to give control to the host */
15662: li r3,H_TOO_HARD1567kvm_cede_exit:
1568 li r3,H_TOO_HARD
1567 blr1569 blr
1568 1570
1569secondary_too_late:1571secondary_too_late:
arch/powerpc/kvm/e500_tlb.c+7−4
@@ -322,11 +322,11 @@ static inline void kvmppc_e500_ref_release(struct tlbe_ref *ref) · 321 unmodified lines
322static void clear_tlb1_bitmap(struct kvmppc_vcpu_e500 *vcpu_e500)322static void clear_tlb1_bitmap(struct kvmppc_vcpu_e500 *vcpu_e500)
323{323{
324 if (vcpu_e500->g2h_tlb1_map)324 if (vcpu_e500->g2h_tlb1_map)
325 memset(vcpu_e500->g2h_tlb1_map,325 memset(vcpu_e500->g2h_tlb1_map, 0,
326 sizeof(u64) * vcpu_e500->gtlb_params[1].entries, 0);326 sizeof(u64) * vcpu_e500->gtlb_params[1].entries);
327 if (vcpu_e500->h2g_tlb1_rmap)327 if (vcpu_e500->h2g_tlb1_rmap)
328 memset(vcpu_e500->h2g_tlb1_rmap,328 memset(vcpu_e500->h2g_tlb1_rmap, 0,
329 sizeof(unsigned int) * host_tlb_params[1].entries, 0);329 sizeof(unsigned int) * host_tlb_params[1].entries);
330}330}
331 331
332static void clear_tlb_privs(struct kvmppc_vcpu_e500 *vcpu_e500)332static void clear_tlb_privs(struct kvmppc_vcpu_e500 *vcpu_e500)
@@ -539,6 +539,9 @@ static inline void kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, · 206 unmodified lines
539 539
540 kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,540 kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
541 ref, gvaddr, stlbe);541 ref, gvaddr, stlbe);
542
543 /* Clear i-cache for new pages */
544 kvmppc_mmu_flush_icache(pfn);
542}545}
543 546
544/* XXX only map the one-one case, for now use TLB0 */547/* XXX only map the one-one case, for now use TLB0 */
arch/powerpc/lib/code-patching.c+1−1
@@ -20,7 +20,7 @@ int patch_instruction(unsigned int *addr, unsigned int instr) · 19 unmodified lines
20{20{
21 int err;21 int err;
22 22
23 err = __put_user(instr, addr);23 __put_user_size(instr, addr, 4, err);
24 if (err)24 if (err)
25 return err;25 return err;
26 asm ("dcbst 0, %0; sync; icbi 0,%0; sync; isync" : : "r" (addr));26 asm ("dcbst 0, %0; sync; icbi 0,%0; sync; isync" : : "r" (addr));
arch/powerpc/lib/copyuser_power7.S+2−33
@@ -288,7 +288,7 @@ err1; stb r0,0(r3) · 287 unmodified lines
288 std r0,16(r1)288 std r0,16(r1)
289 stdu r1,-STACKFRAMESIZE(r1)289 stdu r1,-STACKFRAMESIZE(r1)
290 bl .enter_vmx_usercopy290 bl .enter_vmx_usercopy
291 cmpwi r3,0291 cmpwi cr1,r3,0
292 ld r0,STACKFRAMESIZE+16(r1)292 ld r0,STACKFRAMESIZE+16(r1)
293 ld r3,STACKFRAMESIZE+48(r1)293 ld r3,STACKFRAMESIZE+48(r1)
294 ld r4,STACKFRAMESIZE+56(r1)294 ld r4,STACKFRAMESIZE+56(r1)
@@ -326,38 +326,7 @@ err1; stb r0,0(r3) · 31 unmodified lines
326 dcbt r0,r8,0b01010 /* GO */326 dcbt r0,r8,0b01010 /* GO */
327.machine pop327.machine pop
328 328
329 /*329 beq cr1,.Lunwind_stack_nonvmx_copy
330 * We prefetch both the source and destination using enhanced touch
331 * instructions. We use a stream ID of 0 for the load side and
332 * 1 for the store side.
333 */
334 clrrdi r6,r4,7
335 clrrdi r9,r3,7
336 ori r9,r9,1 /* stream=1 */
337
338 srdi r7,r5,7 /* length in cachelines, capped at 0x3FF */
339 cmpldi cr1,r7,0x3FF
340 ble cr1,1f
341 li r7,0x3FF
3421: lis r0,0x0E00 /* depth=7 */
343 sldi r7,r7,7
344 or r7,r7,r0
345 ori r10,r7,1 /* stream=1 */
346
347 lis r8,0x8000 /* GO=1 */
348 clrldi r8,r8,32
349
350.machine push
351.machine "power4"
352 dcbt r0,r6,0b01000
353 dcbt r0,r7,0b01010
354 dcbtst r0,r9,0b01000
355 dcbtst r0,r10,0b01010
356 eieio
357 dcbt r0,r8,0b01010 /* GO */
358.machine pop
359
360 beq .Lunwind_stack_nonvmx_copy
361 330
362 /*331 /*
363 * If source and destination are not relatively aligned we use a332 * If source and destination are not relatively aligned we use a
arch/powerpc/lib/memcpy_power7.S+2−2
@@ -222,7 +222,7 @@ _GLOBAL(memcpy_power7) · 221 unmodified lines
222 std r0,16(r1)222 std r0,16(r1)
223 stdu r1,-STACKFRAMESIZE(r1)223 stdu r1,-STACKFRAMESIZE(r1)
224 bl .enter_vmx_copy224 bl .enter_vmx_copy
225 cmpwi r3,0225 cmpwi cr1,r3,0
226 ld r0,STACKFRAMESIZE+16(r1)226 ld r0,STACKFRAMESIZE+16(r1)
227 ld r3,STACKFRAMESIZE+48(r1)227 ld r3,STACKFRAMESIZE+48(r1)
228 ld r4,STACKFRAMESIZE+56(r1)228 ld r4,STACKFRAMESIZE+56(r1)
@@ -260,7 +260,7 @@ _GLOBAL(memcpy_power7) · 31 unmodified lines
260 dcbt r0,r8,0b01010 /* GO */260 dcbt r0,r8,0b01010 /* GO */
261.machine pop261.machine pop
262 262
263 beq .Lunwind_stack_nonvmx_copy263 beq cr1,.Lunwind_stack_nonvmx_copy
264 264
265 /*265 /*
266 * If source and destination are not relatively aligned we use a266 * If source and destination are not relatively aligned we use a
arch/powerpc/mm/mem.c+1−0
@@ -469,6 +469,7 @@ void flush_dcache_icache_page(struct page *page) · 468 unmodified lines
469 __flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);469 __flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
470#endif470#endif
471}471}
472EXPORT_SYMBOL(flush_dcache_icache_page);
472 473
473void clear_user_page(void *page, unsigned long vaddr, struct page *pg)474void clear_user_page(void *page, unsigned long vaddr, struct page *pg)
474{475{
arch/powerpc/mm/numa.c+4−3
@@ -1436,11 +1436,11 @@ static long vphn_get_associativity(unsigned long cpu, · 1435 unmodified lines
1436 1436
1437/*1437/*
1438 * Update the node maps and sysfs entries for each cpu whose home node1438 * Update the node maps and sysfs entries for each cpu whose home node
1439 * has changed.1439 * has changed. Returns 1 when the topology has changed, and 0 otherwise.
1440 */1440 */
1441int arch_update_cpu_topology(void)1441int arch_update_cpu_topology(void)
1442{1442{
1443 int cpu, nid, old_nid;1443 int cpu, nid, old_nid, changed = 0;
1444 unsigned int associativity[VPHN_ASSOC_BUFSIZE] = {0};1444 unsigned int associativity[VPHN_ASSOC_BUFSIZE] = {0};
1445 struct device *dev;1445 struct device *dev;
1446 1446
@@ -1466,9 +1466,10 @@ int arch_update_cpu_topology(void) · 19 unmodified lines
1466 dev = get_cpu_device(cpu);1466 dev = get_cpu_device(cpu);
1467 if (dev)1467 if (dev)
1468 kobject_uevent(&dev->kobj, KOBJ_CHANGE);1468 kobject_uevent(&dev->kobj, KOBJ_CHANGE);
1469 changed = 1;
1469 }1470 }
1470 1471
1471 return 1;1472 return changed;
1472}1473}
1473 1474
1474static void topology_work_fn(struct work_struct *work)1475static void topology_work_fn(struct work_struct *work)
arch/powerpc/perf/core-book3s.c+1−1
@@ -1431,7 +1431,7 @@ static void perf_event_interrupt(struct pt_regs *regs) · 1430 unmodified lines
1431 if (!event->hw.idx || is_limited_pmc(event->hw.idx))1431 if (!event->hw.idx || is_limited_pmc(event->hw.idx))
1432 continue;1432 continue;
1433 val = read_pmc(event->hw.idx);1433 val = read_pmc(event->hw.idx);
1434 if ((int)val < 0) {1434 if (pmc_overflow(val)) {
1435 /* event has overflowed */1435 /* event has overflowed */
1436 found = 1;1436 found = 1;
1437 record_and_restart(event, val, regs);1437 record_and_restart(event, val, regs);
arch/powerpc/platforms/powernv/smp.c+1−9
@@ -106,14 +106,6 @@ static void pnv_smp_cpu_kill_self(void) · 105 unmodified lines
106{106{
107 unsigned int cpu;107 unsigned int cpu;
108 108
109 /* If powersave_nap is enabled, use NAP mode, else just
110 * spin aimlessly
111 */
112 if (!powersave_nap) {
113 generic_mach_cpu_die();
114 return;
115 }
116
117 /* Standard hot unplug procedure */109 /* Standard hot unplug procedure */
118 local_irq_disable();110 local_irq_disable();
119 idle_task_exit();111 idle_task_exit();
@@ -128,7 +120,7 @@ static void pnv_smp_cpu_kill_self(void) · 8 unmodified lines
128 */120 */
129 mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) & ~(u64)LPCR_PECE1);121 mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) & ~(u64)LPCR_PECE1);
130 while (!generic_check_cpu_restart(cpu)) {122 while (!generic_check_cpu_restart(cpu)) {
131 power7_idle();123 power7_nap();
132 if (!generic_check_cpu_restart(cpu)) {124 if (!generic_check_cpu_restart(cpu)) {
133 DBG("CPU%d Unexpected exit while offline !\n", cpu);125 DBG("CPU%d Unexpected exit while offline !\n", cpu);
134 /* We may be getting an IPI, so we re-enable126 /* We may be getting an IPI, so we re-enable
arch/powerpc/sysdev/fsl_pci.c+8−5
@@ -465,7 +465,7 @@ int __init fsl_add_bridge(struct device_node *dev, int is_primary) · 464 unmodified lines
465 iounmap(hose->cfg_data);465 iounmap(hose->cfg_data);
466 iounmap(hose->cfg_addr);466 iounmap(hose->cfg_addr);
467 pcibios_free_controller(hose);467 pcibios_free_controller(hose);
468 return 0;468 return -ENODEV;
469 }469 }
470 470
471 setup_pci_cmd(hose);471 setup_pci_cmd(hose);
@@ -827,6 +827,7 @@ struct device_node *fsl_pci_primary; · 355 unmodified lines
827 827
828void __devinit fsl_pci_init(void)828void __devinit fsl_pci_init(void)
829{829{
830 int ret;
830 struct device_node *node;831 struct device_node *node;
831 struct pci_controller *hose;832 struct pci_controller *hose;
832 dma_addr_t max = 0xffffffff;833 dma_addr_t max = 0xffffffff;
@@ -855,10 +856,12 @@ void __devinit fsl_pci_init(void) · 22 unmodified lines
855 if (!fsl_pci_primary)856 if (!fsl_pci_primary)
856 fsl_pci_primary = node;857 fsl_pci_primary = node;
857 858
858 fsl_add_bridge(node, fsl_pci_primary == node);859 ret = fsl_add_bridge(node, fsl_pci_primary == node);
859 hose = pci_find_hose_for_OF_device(node);860 if (ret == 0) {
860 max = min(max, hose->dma_window_base_cur +861 hose = pci_find_hose_for_OF_device(node);
861 hose->dma_window_size);862 max = min(max, hose->dma_window_base_cur +
863 hose->dma_window_size);
864 }
862 }865 }
863 }866 }
864 867
arch/powerpc/sysdev/mpic_msgr.c+3−0
@@ -14,6 +14,9 @@ · 13 unmodified lines
14#include <linux/list.h>14#include <linux/list.h>
15#include <linux/of_platform.h>15#include <linux/of_platform.h>
16#include <linux/errno.h>16#include <linux/errno.h>
17#include <linux/err.h>
18#include <linux/export.h>
19#include <linux/slab.h>
17#include <asm/prom.h>20#include <asm/prom.h>
18#include <asm/hw_irq.h>21#include <asm/hw_irq.h>
19#include <asm/ppc-pci.h>22#include <asm/ppc-pci.h>
arch/powerpc/sysdev/xics/icp-hv.c+5−1
@@ -65,7 +65,11 @@ static inline void icp_hv_set_xirr(unsigned int value) · 64 unmodified lines
65static inline void icp_hv_set_qirr(int n_cpu , u8 value)65static inline void icp_hv_set_qirr(int n_cpu , u8 value)
66{66{
67 int hw_cpu = get_hard_smp_processor_id(n_cpu);67 int hw_cpu = get_hard_smp_processor_id(n_cpu);
68 long rc = plpar_hcall_norets(H_IPI, hw_cpu, value);68 long rc;
69
70 /* Make sure all previous accesses are ordered before IPI sending */
71 mb();
72 rc = plpar_hcall_norets(H_IPI, hw_cpu, value);
69 if (rc != H_SUCCESS) {73 if (rc != H_SUCCESS) {
70 pr_err("%s: bad return code qirr cpu=%d hw_cpu=%d mfrr=0x%x "74 pr_err("%s: bad return code qirr cpu=%d hw_cpu=%d mfrr=0x%x "
71 "returned %ld\n", __func__, n_cpu, hw_cpu, value, rc);75 "returned %ld\n", __func__, n_cpu, hw_cpu, value, rc);
arch/powerpc/xmon/xmon.c+34−50
@@ -17,6 +17,7 @@ · 16 unmodified lines
17#include <linux/reboot.h>17#include <linux/reboot.h>
18#include <linux/delay.h>18#include <linux/delay.h>
19#include <linux/kallsyms.h>19#include <linux/kallsyms.h>
20#include <linux/kmsg_dump.h>
20#include <linux/cpumask.h>21#include <linux/cpumask.h>
21#include <linux/export.h>22#include <linux/export.h>
22#include <linux/sysrq.h>23#include <linux/sysrq.h>
@@ -894,13 +895,13 @@ cmds(struct pt_regs *excp) · 871 unmodified lines
894#endif895#endif
895 default:896 default:
896 printf("Unrecognized command: ");897 printf("Unrecognized command: ");
897 do {898 do {
898 if (' ' < cmd && cmd <= '~')899 if (' ' < cmd && cmd <= '~')
899 putchar(cmd);900 putchar(cmd);
900 else901 else
901 printf("\\x%x", cmd);902 printf("\\x%x", cmd);
902 cmd = inchar();903 cmd = inchar();
903 } while (cmd != '\n'); 904 } while (cmd != '\n');
904 printf(" (type ? for help)\n");905 printf(" (type ? for help)\n");
905 break;906 break;
906 }907 }
@@ -1097,7 +1098,7 @@ static long check_bp_loc(unsigned long addr) · 190 unmodified lines
1097 return 1;1098 return 1;
1098}1099}
1099 1100
1100static char *breakpoint_help_string = 1101static char *breakpoint_help_string =
1101 "Breakpoint command usage:\n"1102 "Breakpoint command usage:\n"
1102 "b show breakpoints\n"1103 "b show breakpoints\n"
1103 "b <addr> [cnt] set breakpoint at given instr addr\n"1104 "b <addr> [cnt] set breakpoint at given instr addr\n"
@@ -1193,7 +1194,7 @@ bpt_cmds(void) · 89 unmodified lines
1193 1194
1194 default:1195 default:
1195 termch = cmd;1196 termch = cmd;
1196 cmd = skipbl();1197 cmd = skipbl();
1197 if (cmd == '?') {1198 if (cmd == '?') {
1198 printf(breakpoint_help_string);1199 printf(breakpoint_help_string);
1199 break;1200 break;
@@ -1359,7 +1360,7 @@ static void xmon_show_stack(unsigned long sp, unsigned long lr, · 159 unmodified lines
1359 sp + REGS_OFFSET);1360 sp + REGS_OFFSET);
1360 break;1361 break;
1361 }1362 }
1362 printf("--- Exception: %lx %s at ", regs.trap,1363 printf("--- Exception: %lx %s at ", regs.trap,
1363 getvecname(TRAP(&regs)));1364 getvecname(TRAP(&regs)));
1364 pc = regs.nip;1365 pc = regs.nip;
1365 lr = regs.link;1366 lr = regs.link;
@@ -1623,14 +1624,14 @@ static void super_regs(void) · 257 unmodified lines
1623 1624
1624 cmd = skipbl();1625 cmd = skipbl();
1625 if (cmd == '\n') {1626 if (cmd == '\n') {
1626 unsigned long sp, toc;1627 unsigned long sp, toc;
1627 asm("mr %0,1" : "=r" (sp) :);1628 asm("mr %0,1" : "=r" (sp) :);
1628 asm("mr %0,2" : "=r" (toc) :);1629 asm("mr %0,2" : "=r" (toc) :);
1629 1630
1630 printf("msr = "REG" sprg0= "REG"\n",1631 printf("msr = "REG" sprg0= "REG"\n",
1631 mfmsr(), mfspr(SPRN_SPRG0));1632 mfmsr(), mfspr(SPRN_SPRG0));
1632 printf("pvr = "REG" sprg1= "REG"\n",1633 printf("pvr = "REG" sprg1= "REG"\n",
1633 mfspr(SPRN_PVR), mfspr(SPRN_SPRG1)); 1634 mfspr(SPRN_PVR), mfspr(SPRN_SPRG1));
1634 printf("dec = "REG" sprg2= "REG"\n",1635 printf("dec = "REG" sprg2= "REG"\n",
1635 mfspr(SPRN_DEC), mfspr(SPRN_SPRG2));1636 mfspr(SPRN_DEC), mfspr(SPRN_SPRG2));
1636 printf("sp = "REG" sprg3= "REG"\n", sp, mfspr(SPRN_SPRG3));1637 printf("sp = "REG" sprg3= "REG"\n", sp, mfspr(SPRN_SPRG3));
@@ -1783,7 +1784,7 @@ byterev(unsigned char *val, int size) · 146 unmodified lines
1783static int brev;1784static int brev;
1784static int mnoread;1785static int mnoread;
1785 1786
1786static char *memex_help_string = 1787static char *memex_help_string =
1787 "Memory examine command usage:\n"1788 "Memory examine command usage:\n"
1788 "m [addr] [flags] examine/change memory\n"1789 "m [addr] [flags] examine/change memory\n"
1789 " addr is optional. will start where left off.\n"1790 " addr is optional. will start where left off.\n"
@@ -1798,7 +1799,7 @@ static char *memex_help_string = · 8 unmodified lines
1798 "NOTE: flags are saved as defaults\n"1799 "NOTE: flags are saved as defaults\n"
1799 "";1800 "";
1800 1801
1801static char *memex_subcmd_help_string = 1802static char *memex_subcmd_help_string =
1802 "Memory examine subcommands:\n"1803 "Memory examine subcommands:\n"
1803 " hexval write this val to current location\n"1804 " hexval write this val to current location\n"
1804 " 'string' write chars from string to this location\n"1805 " 'string' write chars from string to this location\n"
@@ -2064,7 +2065,7 @@ prdump(unsigned long adrs, long ndump) · 259 unmodified lines
2064 nr = mread(adrs, temp, r);2065 nr = mread(adrs, temp, r);
2065 adrs += nr;2066 adrs += nr;
2066 for (m = 0; m < r; ++m) {2067 for (m = 0; m < r; ++m) {
2067 if ((m & (sizeof(long) - 1)) == 0 && m > 0)2068 if ((m & (sizeof(long) - 1)) == 0 && m > 0)
2068 putchar(' ');2069 putchar(' ');
2069 if (m < nr)2070 if (m < nr)
2070 printf("%.2x", temp[m]);2071 printf("%.2x", temp[m]);
@@ -2072,7 +2073,7 @@ prdump(unsigned long adrs, long ndump) · 1 unmodified line
2072 printf("%s", fault_chars[fault_type]);2073 printf("%s", fault_chars[fault_type]);
2073 }2074 }
2074 for (; m < 16; ++m) {2075 for (; m < 16; ++m) {
2075 if ((m & (sizeof(long) - 1)) == 0)2076 if ((m & (sizeof(long) - 1)) == 0)
2076 putchar(' ');2077 putchar(' ');
2077 printf(" ");2078 printf(" ");
2078 }2079 }
@@ -2148,45 +2149,28 @@ print_address(unsigned long addr) · 69 unmodified lines
2148void2149void
2149dump_log_buf(void)2150dump_log_buf(void)
2150{2151{
2151 const unsigned long size = 128;2152 struct kmsg_dumper dumper = { .active = 1 };
2152 unsigned long end, addr;2153 unsigned char buf[128];
2153 unsigned char buf[size + 1];2154 size_t len;
2154 2155
2155 addr = 0;2156 if (setjmp(bus_error_jmp) != 0) {
2156 buf[size] = '\0';2157 printf("Error dumping printk buffer!\n");
2157 2158 return;
2158 if (setjmp(bus_error_jmp) != 0) {2159 }
2159 printf("Unable to lookup symbol __log_buf!\n");2160
2160 return;2161 catch_memory_errors = 1;
2161 }2162 sync();
2162 2163
2163 catch_memory_errors = 1;2164 kmsg_dump_rewind_nolock(&dumper);
2164 sync();2165 while (kmsg_dump_get_line_nolock(&dumper, false, buf, sizeof(buf), &len)) {
2165 addr = kallsyms_lookup_name("__log_buf");2166 buf[len] = '\0';
2166 2167 printf("%s", buf);
2167 if (! addr)2168 }
2168 printf("Symbol __log_buf not found!\n");2169
2169 else {2170 sync();
2170 end = addr + (1 << CONFIG_LOG_BUF_SHIFT);2171 /* wait a little while to see if we get a machine check */
2171 while (addr < end) {2172 __delay(200);
2172 if (! mread(addr, buf, size)) {2173 catch_memory_errors = 0;
2173 printf("Can't read memory at address 0x%lx\n", addr);
2174 break;
2175 }
2176
2177 printf("%s", buf);
2178
2179 if (strlen(buf) < size)
2180 break;
2181
2182 addr += size;
2183 }
2184 }
2185
2186 sync();
2187 /* wait a little while to see if we get a machine check */
2188 __delay(200);
2189 catch_memory_errors = 0;
2190}2174}
2191 2175
2192/*2176/*
arch/s390/include/asm/elf.h+2−1
@@ -180,7 +180,8 @@ extern char elf_platform[]; · 179 unmodified lines
180#define ELF_PLATFORM (elf_platform)180#define ELF_PLATFORM (elf_platform)
181 181
182#ifndef CONFIG_64BIT182#ifndef CONFIG_64BIT
183#define SET_PERSONALITY(ex) set_personality(PER_LINUX)183#define SET_PERSONALITY(ex) \
184 set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
184#else /* CONFIG_64BIT */185#else /* CONFIG_64BIT */
185#define SET_PERSONALITY(ex) \186#define SET_PERSONALITY(ex) \
186do { \187do { \
arch/s390/include/asm/posix_types.h+1−2
@@ -13,6 +13,7 @@ · 12 unmodified lines
13 */13 */
14 14
15typedef unsigned long __kernel_size_t;15typedef unsigned long __kernel_size_t;
16typedef long __kernel_ssize_t;
16#define __kernel_size_t __kernel_size_t17#define __kernel_size_t __kernel_size_t
17 18
18typedef unsigned short __kernel_old_dev_t;19typedef unsigned short __kernel_old_dev_t;
@@ -25,7 +26,6 @@ typedef unsigned short __kernel_mode_t; · 6 unmodified lines
25typedef unsigned short __kernel_ipc_pid_t;26typedef unsigned short __kernel_ipc_pid_t;
26typedef unsigned short __kernel_uid_t;27typedef unsigned short __kernel_uid_t;
27typedef unsigned short __kernel_gid_t;28typedef unsigned short __kernel_gid_t;
28typedef int __kernel_ssize_t;
29typedef int __kernel_ptrdiff_t;29typedef int __kernel_ptrdiff_t;
30 30
31#else /* __s390x__ */31#else /* __s390x__ */
@@ -35,7 +35,6 @@ typedef unsigned int __kernel_mode_t; · 3 unmodified lines
35typedef int __kernel_ipc_pid_t;35typedef int __kernel_ipc_pid_t;
36typedef unsigned int __kernel_uid_t;36typedef unsigned int __kernel_uid_t;
37typedef unsigned int __kernel_gid_t;37typedef unsigned int __kernel_gid_t;
38typedef long __kernel_ssize_t;
39typedef long __kernel_ptrdiff_t;38typedef long __kernel_ptrdiff_t;
40typedef unsigned long __kernel_sigset_t; /* at least 32 bits */39typedef unsigned long __kernel_sigset_t; /* at least 32 bits */
41 40
arch/s390/include/asm/smp.h+1−0
@@ -44,6 +44,7 @@ static inline void smp_call_online_cpu(void (*func)(void *), void *data) · 43 unmodified lines
44}44}
45 45
46static inline int smp_find_processor_id(int address) { return 0; }46static inline int smp_find_processor_id(int address) { return 0; }
47static inline int smp_store_status(int cpu) { return 0; }
47static inline int smp_vcpu_scheduled(int cpu) { return 1; }48static inline int smp_vcpu_scheduled(int cpu) { return 1; }
48static inline void smp_yield_cpu(int cpu) { }49static inline void smp_yield_cpu(int cpu) { }
49static inline void smp_yield(void) { }50static inline void smp_yield(void) { }
arch/um/os-Linux/time.c+1−1
@@ -114,7 +114,7 @@ static void deliver_alarm(void) · 113 unmodified lines
114 skew += this_tick - last_tick;114 skew += this_tick - last_tick;
115 115
116 while (skew >= one_tick) {116 while (skew >= one_tick) {
117 alarm_handler(SIGVTALRM, NULL);117 alarm_handler(SIGVTALRM, NULL, NULL);
118 skew -= one_tick;118 skew -= one_tick;
119 }119 }
120 120
arch/x86/include/asm/spinlock.h+1−2
@@ -12,8 +12,7 @@ · 11 unmodified lines
12 * Simple spin lock operations. There are two variants, one clears IRQ's12 * Simple spin lock operations. There are two variants, one clears IRQ's
13 * on the local processor, one does not.13 * on the local processor, one does not.
14 *14 *
15 * These are fair FIFO ticket locks, which are currently limited to 25615 * These are fair FIFO ticket locks, which support up to 2^16 CPUs.
16 * CPUs.
17 *16 *
18 * (the type definitions are in asm/spinlock_types.h)17 * (the type definitions are in asm/spinlock_types.h)
19 */18 */
arch/x86/kernel/alternative.c+1−1
@@ -165,7 +165,7 @@ static const unsigned char * const k7_nops[ASM_NOP_MAX+2] = · 164 unmodified lines
165#endif165#endif
166 166
167#ifdef P6_NOP1167#ifdef P6_NOP1
168static const unsigned char __initconst_or_module p6nops[] =168static const unsigned char p6nops[] =
169{169{
170 P6_NOP1,170 P6_NOP1,
171 P6_NOP2,171 P6_NOP2,
arch/x86/kernel/irq.c+1−1
@@ -270,7 +270,7 @@ void fixup_irqs(void) · 269 unmodified lines
270 270
271 if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {271 if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
272 break_affinity = 1;272 break_affinity = 1;
273 affinity = cpu_all_mask;273 affinity = cpu_online_mask;
274 }274 }
275 275
276 chip = irq_data_get_irq_chip(data);276 chip = irq_data_get_irq_chip(data);
arch/x86/kernel/microcode_amd.c+4−3
@@ -143,11 +143,12 @@ static int get_matching_microcode(int cpu, const u8 *ucode_ptr, · 142 unmodified lines
143 unsigned int *current_size)143 unsigned int *current_size)
144{144{
145 struct microcode_header_amd *mc_hdr;145 struct microcode_header_amd *mc_hdr;
146 unsigned int actual_size;146 unsigned int actual_size, patch_size;
147 u16 equiv_cpu_id;147 u16 equiv_cpu_id;
148 148
149 /* size of the current patch we're staring at */149 /* size of the current patch we're staring at */
150 *current_size = *(u32 *)(ucode_ptr + 4) + SECTION_HDR_SIZE;150 patch_size = *(u32 *)(ucode_ptr + 4);
151 *current_size = patch_size + SECTION_HDR_SIZE;
151 152
152 equiv_cpu_id = find_equiv_id();153 equiv_cpu_id = find_equiv_id();
153 if (!equiv_cpu_id)154 if (!equiv_cpu_id)
@@ -174,7 +175,7 @@ static int get_matching_microcode(int cpu, const u8 *ucode_ptr, · 20 unmodified lines
174 /*175 /*
175 * now that the header looks sane, verify its size176 * now that the header looks sane, verify its size
176 */177 */
177 actual_size = verify_ucode_size(cpu, *current_size, leftover_size);178 actual_size = verify_ucode_size(cpu, patch_size, leftover_size);
178 if (!actual_size)179 if (!actual_size)
179 return 0;180 return 0;
180 181
arch/x86/kvm/emulate.c+21−9
@@ -475,13 +475,26 @@ register_address(struct x86_emulate_ctxt *ctxt, unsigned long reg) · 474 unmodified lines
475 return address_mask(ctxt, reg);475 return address_mask(ctxt, reg);
476}476}
477 477
478static void masked_increment(ulong *reg, ulong mask, int inc)
479{
480 assign_masked(reg, *reg + inc, mask);
481}
482
478static inline void483static inline void
479register_address_increment(struct x86_emulate_ctxt *ctxt, unsigned long *reg, int inc)484register_address_increment(struct x86_emulate_ctxt *ctxt, unsigned long *reg, int inc)
480{485{
486 ulong mask;
487
481 if (ctxt->ad_bytes == sizeof(unsigned long))488 if (ctxt->ad_bytes == sizeof(unsigned long))
482 *reg += inc;489 mask = ~0UL;
483 else490 else
484 *reg = (*reg & ~ad_mask(ctxt)) | ((*reg + inc) & ad_mask(ctxt));491 mask = ad_mask(ctxt);
492 masked_increment(reg, mask, inc);
493}
494
495static void rsp_increment(struct x86_emulate_ctxt *ctxt, int inc)
496{
497 masked_increment(&ctxt->regs[VCPU_REGS_RSP], stack_mask(ctxt), inc);
485}498}
486 499
487static inline void jmp_rel(struct x86_emulate_ctxt *ctxt, int rel)500static inline void jmp_rel(struct x86_emulate_ctxt *ctxt, int rel)
@@ -1522,8 +1535,8 @@ static int push(struct x86_emulate_ctxt *ctxt, void *data, int bytes) · 1034 unmodified lines
1522{1535{
1523 struct segmented_address addr;1536 struct segmented_address addr;
1524 1537
1525 register_address_increment(ctxt, &ctxt->regs[VCPU_REGS_RSP], -bytes);1538 rsp_increment(ctxt, -bytes);
1526 addr.ea = register_address(ctxt, ctxt->regs[VCPU_REGS_RSP]);1539 addr.ea = ctxt->regs[VCPU_REGS_RSP] & stack_mask(ctxt);
1527 addr.seg = VCPU_SREG_SS;1540 addr.seg = VCPU_SREG_SS;
1528 1541
1529 return segmented_write(ctxt, addr, data, bytes);1542 return segmented_write(ctxt, addr, data, bytes);
@@ -1542,13 +1555,13 @@ static int emulate_pop(struct x86_emulate_ctxt *ctxt, · 12 unmodified lines
1542 int rc;1555 int rc;
1543 struct segmented_address addr;1556 struct segmented_address addr;
1544 1557
1545 addr.ea = register_address(ctxt, ctxt->regs[VCPU_REGS_RSP]);1558 addr.ea = ctxt->regs[VCPU_REGS_RSP] & stack_mask(ctxt);
1546 addr.seg = VCPU_SREG_SS;1559 addr.seg = VCPU_SREG_SS;
1547 rc = segmented_read(ctxt, addr, dest, len);1560 rc = segmented_read(ctxt, addr, dest, len);
1548 if (rc != X86EMUL_CONTINUE)1561 if (rc != X86EMUL_CONTINUE)
1549 return rc;1562 return rc;
1550 1563
1551 register_address_increment(ctxt, &ctxt->regs[VCPU_REGS_RSP], len);1564 rsp_increment(ctxt, len);
1552 return rc;1565 return rc;
1553}1566}
1554 1567
@@ -1688,8 +1701,7 @@ static int em_popa(struct x86_emulate_ctxt *ctxt) · 133 unmodified lines
1688 1701
1689 while (reg >= VCPU_REGS_RAX) {1702 while (reg >= VCPU_REGS_RAX) {
1690 if (reg == VCPU_REGS_RSP) {1703 if (reg == VCPU_REGS_RSP) {
1691 register_address_increment(ctxt, &ctxt->regs[VCPU_REGS_RSP],1704 rsp_increment(ctxt, ctxt->op_bytes);
1692 ctxt->op_bytes);
1693 --reg;1705 --reg;
1694 }1706 }
1695 1707
@@ -2825,7 +2837,7 @@ static int em_ret_near_imm(struct x86_emulate_ctxt *ctxt) · 1129 unmodified lines
2825 rc = emulate_pop(ctxt, &ctxt->dst.val, ctxt->op_bytes);2837 rc = emulate_pop(ctxt, &ctxt->dst.val, ctxt->op_bytes);
2826 if (rc != X86EMUL_CONTINUE)2838 if (rc != X86EMUL_CONTINUE)
2827 return rc;2839 return rc;
2828 register_address_increment(ctxt, &ctxt->regs[VCPU_REGS_RSP], ctxt->src.val);2840 rsp_increment(ctxt, ctxt->src.val);
2829 return X86EMUL_CONTINUE;2841 return X86EMUL_CONTINUE;
2830}2842}
2831 2843
arch/x86/kvm/mmu.c+9−4
@@ -4112,17 +4112,22 @@ static int mmu_shrink(struct shrinker *shrink, struct shrink_control *sc) · 4111 unmodified lines
4112 int idx;4112 int idx;
4113 LIST_HEAD(invalid_list);4113 LIST_HEAD(invalid_list);
4114 4114
4115 /*
4116 * Never scan more than sc->nr_to_scan VM instances.
4117 * Will not hit this condition practically since we do not try
4118 * to shrink more than one VM and it is very unlikely to see
4119 * !n_used_mmu_pages so many times.
4120 */
4121 if (!nr_to_scan--)
4122 break;
4115 /*4123 /*
4116 * n_used_mmu_pages is accessed without holding kvm->mmu_lock4124 * n_used_mmu_pages is accessed without holding kvm->mmu_lock
4117 * here. We may skip a VM instance errorneosly, but we do not4125 * here. We may skip a VM instance errorneosly, but we do not
4118 * want to shrink a VM that only started to populate its MMU4126 * want to shrink a VM that only started to populate its MMU
4119 * anyway.4127 * anyway.
4120 */4128 */
4121 if (kvm->arch.n_used_mmu_pages > 0) {4129 if (!kvm->arch.n_used_mmu_pages)
4122 if (!nr_to_scan--)
4123 break;
4124 continue;4130 continue;
4125 }
4126 4131
4127 idx = srcu_read_lock(&kvm->srcu);4132 idx = srcu_read_lock(&kvm->srcu);
4128 spin_lock(&kvm->mmu_lock);4133 spin_lock(&kvm->mmu_lock);
arch/x86/kvm/x86.c+4−1
@@ -806,7 +806,7 @@ EXPORT_SYMBOL_GPL(kvm_rdpmc); · 805 unmodified lines
806 * kvm-specific. Those are put in the beginning of the list.806 * kvm-specific. Those are put in the beginning of the list.
807 */807 */
808 808
809#define KVM_SAVE_MSRS_BEGIN 9809#define KVM_SAVE_MSRS_BEGIN 10
810static u32 msrs_to_save[] = {810static u32 msrs_to_save[] = {
811 MSR_KVM_SYSTEM_TIME, MSR_KVM_WALL_CLOCK,811 MSR_KVM_SYSTEM_TIME, MSR_KVM_WALL_CLOCK,
812 MSR_KVM_SYSTEM_TIME_NEW, MSR_KVM_WALL_CLOCK_NEW,812 MSR_KVM_SYSTEM_TIME_NEW, MSR_KVM_WALL_CLOCK_NEW,
@@ -2000,6 +2000,9 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) · 1187 unmodified lines
2000 case MSR_KVM_STEAL_TIME:2000 case MSR_KVM_STEAL_TIME:
2001 data = vcpu->arch.st.msr_val;2001 data = vcpu->arch.st.msr_val;
2002 break;2002 break;
2003 case MSR_KVM_PV_EOI_EN:
2004 data = vcpu->arch.pv_eoi.msr_val;
2005 break;
2003 case MSR_IA32_P5_MC_ADDR:2006 case MSR_IA32_P5_MC_ADDR:
2004 case MSR_IA32_P5_MC_TYPE:2007 case MSR_IA32_P5_MC_TYPE:
2005 case MSR_IA32_MCG_CAP:2008 case MSR_IA32_MCG_CAP:
arch/x86/xen/enlighten.c+11−107
@@ -31,7 +31,6 @@ · 30 unmodified lines
31#include <linux/pci.h>31#include <linux/pci.h>
32#include <linux/gfp.h>32#include <linux/gfp.h>
33#include <linux/memblock.h>33#include <linux/memblock.h>
34#include <linux/syscore_ops.h>
35 34
36#include <xen/xen.h>35#include <xen/xen.h>
37#include <xen/interface/xen.h>36#include <xen/interface/xen.h>
@@ -1470,130 +1469,38 @@ asmlinkage void __init xen_start_kernel(void) · 1432 unmodified lines
1470#endif1469#endif
1471}1470}
1472 1471
1473#ifdef CONFIG_XEN_PVHVM1472void __ref xen_hvm_init_shared_info(void)
1474/*
1475 * The pfn containing the shared_info is located somewhere in RAM. This
1476 * will cause trouble if the current kernel is doing a kexec boot into a
1477 * new kernel. The new kernel (and its startup code) can not know where
1478 * the pfn is, so it can not reserve the page. The hypervisor will
1479 * continue to update the pfn, and as a result memory corruption occours
1480 * in the new kernel.
1481 *
1482 * One way to work around this issue is to allocate a page in the
1483 * xen-platform pci device's BAR memory range. But pci init is done very
1484 * late and the shared_info page is already in use very early to read
1485 * the pvclock. So moving the pfn from RAM to MMIO is racy because some
1486 * code paths on other vcpus could access the pfn during the small
1487 * window when the old pfn is moved to the new pfn. There is even a
1488 * small window were the old pfn is not backed by a mfn, and during that
1489 * time all reads return -1.
1490 *
1491 * Because it is not known upfront where the MMIO region is located it
1492 * can not be used right from the start in xen_hvm_init_shared_info.
1493 *
1494 * To minimise trouble the move of the pfn is done shortly before kexec.
1495 * This does not eliminate the race because all vcpus are still online
1496 * when the syscore_ops will be called. But hopefully there is no work
1497 * pending at this point in time. Also the syscore_op is run last which
1498 * reduces the risk further.
1499 */
1500
1501static struct shared_info *xen_hvm_shared_info;
1502
1503static void xen_hvm_connect_shared_info(unsigned long pfn)
1504{1473{
1474 int cpu;
1505 struct xen_add_to_physmap xatp;1475 struct xen_add_to_physmap xatp;
1476 static struct shared_info *shared_info_page = 0;
1506 1477
1478 if (!shared_info_page)
1479 shared_info_page = (struct shared_info *)
1480 extend_brk(PAGE_SIZE, PAGE_SIZE);
1507 xatp.domid = DOMID_SELF;1481 xatp.domid = DOMID_SELF;
1508 xatp.idx = 0;1482 xatp.idx = 0;
1509 xatp.space = XENMAPSPACE_shared_info;1483 xatp.space = XENMAPSPACE_shared_info;
1510 xatp.gpfn = pfn;1484 xatp.gpfn = __pa(shared_info_page) >> PAGE_SHIFT;
1511 if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))1485 if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))
1512 BUG();1486 BUG();
1513 1487
1514}1488 HYPERVISOR_shared_info = (struct shared_info *)shared_info_page;
1515static void xen_hvm_set_shared_info(struct shared_info *sip)
1516{
1517 int cpu;
1518
1519 HYPERVISOR_shared_info = sip;
1520 1489
1521 /* xen_vcpu is a pointer to the vcpu_info struct in the shared_info1490 /* xen_vcpu is a pointer to the vcpu_info struct in the shared_info
1522 * page, we use it in the event channel upcall and in some pvclock1491 * page, we use it in the event channel upcall and in some pvclock
1523 * related functions. We don't need the vcpu_info placement1492 * related functions. We don't need the vcpu_info placement
1524 * optimizations because we don't use any pv_mmu or pv_irq op on1493 * optimizations because we don't use any pv_mmu or pv_irq op on
1525 * HVM.1494 * HVM.
1526 * When xen_hvm_set_shared_info is run at boot time only vcpu 0 is1495 * When xen_hvm_init_shared_info is run at boot time only vcpu 0 is
1527 * online but xen_hvm_set_shared_info is run at resume time too and1496 * online but xen_hvm_init_shared_info is run at resume time too and
1528 * in that case multiple vcpus might be online. */1497 * in that case multiple vcpus might be online. */
1529 for_each_online_cpu(cpu) {1498 for_each_online_cpu(cpu) {
1530 per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu];1499 per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu];
1531 }1500 }
1532}1501}
1533 1502
1534/* Reconnect the shared_info pfn to a mfn */1503#ifdef CONFIG_XEN_PVHVM
1535void xen_hvm_resume_shared_info(void)
1536{
1537 xen_hvm_connect_shared_info(__pa(xen_hvm_shared_info) >> PAGE_SHIFT);
1538}
1539
1540#ifdef CONFIG_KEXEC
1541static struct shared_info *xen_hvm_shared_info_kexec;
1542static unsigned long xen_hvm_shared_info_pfn_kexec;
1543
1544/* Remember a pfn in MMIO space for kexec reboot */
1545void __devinit xen_hvm_prepare_kexec(struct shared_info *sip, unsigned long pfn)
1546{
1547 xen_hvm_shared_info_kexec = sip;
1548 xen_hvm_shared_info_pfn_kexec = pfn;
1549}
1550
1551static void xen_hvm_syscore_shutdown(void)
1552{
1553 struct xen_memory_reservation reservation = {
1554 .domid = DOMID_SELF,
1555 .nr_extents = 1,
1556 };
1557 unsigned long prev_pfn;
1558 int rc;
1559
1560 if (!xen_hvm_shared_info_kexec)
1561 return;
1562
1563 prev_pfn = __pa(xen_hvm_shared_info) >> PAGE_SHIFT;
1564 set_xen_guest_handle(reservation.extent_start, &prev_pfn);
1565
1566 /* Move pfn to MMIO, disconnects previous pfn from mfn */
1567 xen_hvm_connect_shared_info(xen_hvm_shared_info_pfn_kexec);
1568
1569 /* Update pointers, following hypercall is also a memory barrier */
1570 xen_hvm_set_shared_info(xen_hvm_shared_info_kexec);
1571
1572 /* Allocate new mfn for previous pfn */
1573 do {
1574 rc = HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation);
1575 if (rc == 0)
1576 msleep(123);
1577 } while (rc == 0);
1578
1579 /* Make sure the previous pfn is really connected to a (new) mfn */
1580 BUG_ON(rc != 1);
1581}
1582
1583static struct syscore_ops xen_hvm_syscore_ops = {
1584 .shutdown = xen_hvm_syscore_shutdown,
1585};
1586#endif
1587
1588/* Use a pfn in RAM, may move to MMIO before kexec. */
1589static void __init xen_hvm_init_shared_info(void)
1590{
1591 /* Remember pointer for resume */
1592 xen_hvm_shared_info = extend_brk(PAGE_SIZE, PAGE_SIZE);
1593 xen_hvm_connect_shared_info(__pa(xen_hvm_shared_info) >> PAGE_SHIFT);
1594 xen_hvm_set_shared_info(xen_hvm_shared_info);
1595}
1596
1597static void __init init_hvm_pv_info(void)1504static void __init init_hvm_pv_info(void)
1598{1505{
1599 int major, minor;1506 int major, minor;
@@ -1644,9 +1551,6 @@ static void __init xen_hvm_guest_init(void) · 44 unmodified lines
1644 init_hvm_pv_info();1551 init_hvm_pv_info();
1645 1552
1646 xen_hvm_init_shared_info();1553 xen_hvm_init_shared_info();
1647#ifdef CONFIG_KEXEC
1648 register_syscore_ops(&xen_hvm_syscore_ops);
1649#endif
1650 1554
1651 if (xen_feature(XENFEAT_hvm_callback_vector))1555 if (xen_feature(XENFEAT_hvm_callback_vector))
1652 xen_have_vector_callback = 1;1556 xen_have_vector_callback = 1;
arch/x86/xen/mmu.c+1−1
@@ -1283,7 +1283,7 @@ static void xen_flush_tlb_others(const struct cpumask *cpus, · 1282 unmodified lines
1283 cpumask_clear_cpu(smp_processor_id(), to_cpumask(args->mask));1283 cpumask_clear_cpu(smp_processor_id(), to_cpumask(args->mask));
1284 1284
1285 args->op.cmd = MMUEXT_TLB_FLUSH_MULTI;1285 args->op.cmd = MMUEXT_TLB_FLUSH_MULTI;
1286 if (start != TLB_FLUSH_ALL && (end - start) <= PAGE_SIZE) {1286 if (end != TLB_FLUSH_ALL && (end - start) <= PAGE_SIZE) {
1287 args->op.cmd = MMUEXT_INVLPG_MULTI;1287 args->op.cmd = MMUEXT_INVLPG_MULTI;
1288 args->op.arg1.linear_addr = start;1288 args->op.arg1.linear_addr = start;
1289 }1289 }
arch/x86/xen/p2m.c+92−3
@@ -196,9 +196,11 @@ RESERVE_BRK(p2m_mid_identity, PAGE_SIZE * 2 * 3); · 195 unmodified lines
196 196
197/* When we populate back during bootup, the amount of pages can vary. The197/* When we populate back during bootup, the amount of pages can vary. The
198 * max we have is seen is 395979, but that does not mean it can't be more.198 * max we have is seen is 395979, but that does not mean it can't be more.
199 * But some machines can have 3GB I/O holes even. So lets reserve enough199 * Some machines can have 3GB I/O holes even. With early_can_reuse_p2m_middle
200 * for 4GB of I/O and E820 holes. */200 * it can re-use Xen provided mfn_list array, so we only need to allocate at
201RESERVE_BRK(p2m_populated, PMD_SIZE * 4);201 * most three P2M top nodes. */
202RESERVE_BRK(p2m_populated, PAGE_SIZE * 3);
203
202static inline unsigned p2m_top_index(unsigned long pfn)204static inline unsigned p2m_top_index(unsigned long pfn)
203{205{
204 BUG_ON(pfn >= MAX_P2M_PFN);206 BUG_ON(pfn >= MAX_P2M_PFN);
@@ -575,12 +577,99 @@ static bool __init early_alloc_p2m(unsigned long pfn) · 370 unmodified lines
575 }577 }
576 return true;578 return true;
577}579}
580
581/*
582 * Skim over the P2M tree looking at pages that are either filled with
583 * INVALID_P2M_ENTRY or with 1:1 PFNs. If found, re-use that page and
584 * replace the P2M leaf with a p2m_missing or p2m_identity.
585 * Stick the old page in the new P2M tree location.
586 */
587bool __init early_can_reuse_p2m_middle(unsigned long set_pfn, unsigned long set_mfn)
588{
589 unsigned topidx;
590 unsigned mididx;
591 unsigned ident_pfns;
592 unsigned inv_pfns;
593 unsigned long *p2m;
594 unsigned long *mid_mfn_p;
595 unsigned idx;
596 unsigned long pfn;
597
598 /* We only look when this entails a P2M middle layer */
599 if (p2m_index(set_pfn))
600 return false;
601
602 for (pfn = 0; pfn < MAX_DOMAIN_PAGES; pfn += P2M_PER_PAGE) {
603 topidx = p2m_top_index(pfn);
604
605 if (!p2m_top[topidx])
606 continue;
607
608 if (p2m_top[topidx] == p2m_mid_missing)
609 continue;
610
611 mididx = p2m_mid_index(pfn);
612 p2m = p2m_top[topidx][mididx];
613 if (!p2m)
614 continue;
615
616 if ((p2m == p2m_missing) || (p2m == p2m_identity))
617 continue;
618
619 if ((unsigned long)p2m == INVALID_P2M_ENTRY)
620 continue;
621
622 ident_pfns = 0;
623 inv_pfns = 0;
624 for (idx = 0; idx < P2M_PER_PAGE; idx++) {
625 /* IDENTITY_PFNs are 1:1 */
626 if (p2m[idx] == IDENTITY_FRAME(pfn + idx))
627 ident_pfns++;
628 else if (p2m[idx] == INVALID_P2M_ENTRY)
629 inv_pfns++;
630 else
631 break;
632 }
633 if ((ident_pfns == P2M_PER_PAGE) || (inv_pfns == P2M_PER_PAGE))
634 goto found;
635 }
636 return false;
637found:
638 /* Found one, replace old with p2m_identity or p2m_missing */
639 p2m_top[topidx][mididx] = (ident_pfns ? p2m_identity : p2m_missing);
640 /* And the other for save/restore.. */
641 mid_mfn_p = p2m_top_mfn_p[topidx];
642 /* NOTE: Even if it is a p2m_identity it should still be point to
643 * a page filled with INVALID_P2M_ENTRY entries. */
644 mid_mfn_p[mididx] = virt_to_mfn(p2m_missing);
645
646 /* Reset where we want to stick the old page in. */
647 topidx = p2m_top_index(set_pfn);
648 mididx = p2m_mid_index(set_pfn);
649
650 /* This shouldn't happen */
651 if (WARN_ON(p2m_top[topidx] == p2m_mid_missing))
652 early_alloc_p2m(set_pfn);
653
654 if (WARN_ON(p2m_top[topidx][mididx] != p2m_missing))
655 return false;
656
657 p2m_init(p2m);
658 p2m_top[topidx][mididx] = p2m;
659 mid_mfn_p = p2m_top_mfn_p[topidx];
660 mid_mfn_p[mididx] = virt_to_mfn(p2m);
661
662 return true;
663}
578bool __init early_set_phys_to_machine(unsigned long pfn, unsigned long mfn)664bool __init early_set_phys_to_machine(unsigned long pfn, unsigned long mfn)
579{665{
580 if (unlikely(!__set_phys_to_machine(pfn, mfn))) {666 if (unlikely(!__set_phys_to_machine(pfn, mfn))) {
581 if (!early_alloc_p2m(pfn))667 if (!early_alloc_p2m(pfn))
582 return false;668 return false;
583 669
670 if (early_can_reuse_p2m_middle(pfn, mfn))
671 return __set_phys_to_machine(pfn, mfn);
672
584 if (!early_alloc_p2m_middle(pfn, false /* boundary crossover OK!*/))673 if (!early_alloc_p2m_middle(pfn, false /* boundary crossover OK!*/))
585 return false;674 return false;
586 675
arch/x86/xen/setup.c+8−1
@@ -78,9 +78,16 @@ static void __init xen_add_extra_mem(u64 start, u64 size) · 77 unmodified lines
78 memblock_reserve(start, size);78 memblock_reserve(start, size);
79 79
80 xen_max_p2m_pfn = PFN_DOWN(start + size);80 xen_max_p2m_pfn = PFN_DOWN(start + size);
81 for (pfn = PFN_DOWN(start); pfn < xen_max_p2m_pfn; pfn++) {
82 unsigned long mfn = pfn_to_mfn(pfn);
83
84 if (WARN(mfn == pfn, "Trying to over-write 1-1 mapping (pfn: %lx)\n", pfn))
85 continue;
86 WARN(mfn != INVALID_P2M_ENTRY, "Trying to remove %lx which has %lx mfn!\n",
87 pfn, mfn);
81 88
82 for (pfn = PFN_DOWN(start); pfn <= xen_max_p2m_pfn; pfn++)
83 __set_phys_to_machine(pfn, INVALID_P2M_ENTRY);89 __set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
90 }
84}91}
85 92
86static unsigned long __init xen_do_chunk(unsigned long start,93static unsigned long __init xen_do_chunk(unsigned long start,
arch/x86/xen/suspend.c+1−1
@@ -30,7 +30,7 @@ void xen_arch_hvm_post_suspend(int suspend_cancelled) · 29 unmodified lines
30{30{
31#ifdef CONFIG_XEN_PVHVM31#ifdef CONFIG_XEN_PVHVM
32 int cpu;32 int cpu;
33 xen_hvm_resume_shared_info();33 xen_hvm_init_shared_info();
34 xen_callback_vector();34 xen_callback_vector();
35 xen_unplug_emulated_devices();35 xen_unplug_emulated_devices();
36 if (xen_feature(XENFEAT_hvm_safe_pvclock)) {36 if (xen_feature(XENFEAT_hvm_safe_pvclock)) {
arch/x86/xen/xen-ops.h+1−1
@@ -41,7 +41,7 @@ void xen_enable_syscall(void); · 40 unmodified lines
41void xen_vcpu_restore(void);41void xen_vcpu_restore(void);
42 42
43void xen_callback_vector(void);43void xen_callback_vector(void);
44void xen_hvm_resume_shared_info(void);44void xen_hvm_init_shared_info(void);
45void xen_unplug_emulated_devices(void);45void xen_unplug_emulated_devices(void);
46 46
47void __init xen_build_dynamic_phys_to_machine(void);47void __init xen_build_dynamic_phys_to_machine(void);
block/blk-lib.c+28−13
@@ -44,6 +44,7 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector, · 43 unmodified lines
44 struct request_queue *q = bdev_get_queue(bdev);44 struct request_queue *q = bdev_get_queue(bdev);
45 int type = REQ_WRITE | REQ_DISCARD;45 int type = REQ_WRITE | REQ_DISCARD;
46 unsigned int max_discard_sectors;46 unsigned int max_discard_sectors;
47 unsigned int granularity, alignment, mask;
47 struct bio_batch bb;48 struct bio_batch bb;
48 struct bio *bio;49 struct bio *bio;
49 int ret = 0;50 int ret = 0;
@@ -54,18 +55,20 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector, · 4 unmodified lines
54 if (!blk_queue_discard(q))55 if (!blk_queue_discard(q))
55 return -EOPNOTSUPP;56 return -EOPNOTSUPP;
56 57
58 /* Zero-sector (unknown) and one-sector granularities are the same. */
59 granularity = max(q->limits.discard_granularity >> 9, 1U);
60 mask = granularity - 1;
61 alignment = (bdev_discard_alignment(bdev) >> 9) & mask;
62
57 /*63 /*
58 * Ensure that max_discard_sectors is of the proper64 * Ensure that max_discard_sectors is of the proper
59 * granularity65 * granularity, so that requests stay aligned after a split.
60 */66 */
61 max_discard_sectors = min(q->limits.max_discard_sectors, UINT_MAX >> 9);67 max_discard_sectors = min(q->limits.max_discard_sectors, UINT_MAX >> 9);
68 max_discard_sectors = round_down(max_discard_sectors, granularity);
62 if (unlikely(!max_discard_sectors)) {69 if (unlikely(!max_discard_sectors)) {
63 /* Avoid infinite loop below. Being cautious never hurts. */70 /* Avoid infinite loop below. Being cautious never hurts. */
64 return -EOPNOTSUPP;71 return -EOPNOTSUPP;
65 } else if (q->limits.discard_granularity) {
66 unsigned int disc_sects = q->limits.discard_granularity >> 9;
67
68 max_discard_sectors &= ~(disc_sects - 1);
69 }72 }
70 73
71 if (flags & BLKDEV_DISCARD_SECURE) {74 if (flags & BLKDEV_DISCARD_SECURE) {
@@ -79,25 +82,37 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector, · 7 unmodified lines
79 bb.wait = &wait;82 bb.wait = &wait;
80 83
81 while (nr_sects) {84 while (nr_sects) {
85 unsigned int req_sects;
86 sector_t end_sect;
87
82 bio = bio_alloc(gfp_mask, 1);88 bio = bio_alloc(gfp_mask, 1);
83 if (!bio) {89 if (!bio) {
84 ret = -ENOMEM;90 ret = -ENOMEM;
85 break;91 break;
86 }92 }
87 93
94 req_sects = min_t(sector_t, nr_sects, max_discard_sectors);
95
96 /*
97 * If splitting a request, and the next starting sector would be
98 * misaligned, stop the discard at the previous aligned sector.
99 */
100 end_sect = sector + req_sects;
101 if (req_sects < nr_sects && (end_sect & mask) != alignment) {
102 end_sect =
103 round_down(end_sect - alignment, granularity)
104 + alignment;
105 req_sects = end_sect - sector;
106 }
107
88 bio->bi_sector = sector;108 bio->bi_sector = sector;
89 bio->bi_end_io = bio_batch_end_io;109 bio->bi_end_io = bio_batch_end_io;
90 bio->bi_bdev = bdev;110 bio->bi_bdev = bdev;
91 bio->bi_private = &bb;111 bio->bi_private = &bb;
92 112
93 if (nr_sects > max_discard_sectors) {113 bio->bi_size = req_sects << 9;
94 bio->bi_size = max_discard_sectors << 9;114 nr_sects -= req_sects;
95 nr_sects -= max_discard_sectors;115 sector = end_sect;
96 sector += max_discard_sectors;
97 } else {
98 bio->bi_size = nr_sects << 9;
99 nr_sects = 0;
100 }
101 116
102 atomic_inc(&bb.done);117 atomic_inc(&bb.done);
103 submit_bio(type, bio);118 submit_bio(type, bio);
block/blk-merge.c+82−35
@@ -110,6 +110,49 @@ static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio, · 109 unmodified lines
110 return 0;110 return 0;
111}111}
112 112
113static void
114__blk_segment_map_sg(struct request_queue *q, struct bio_vec *bvec,
115 struct scatterlist *sglist, struct bio_vec **bvprv,
116 struct scatterlist **sg, int *nsegs, int *cluster)
117{
118
119 int nbytes = bvec->bv_len;
120
121 if (*bvprv && *cluster) {
122 if ((*sg)->length + nbytes > queue_max_segment_size(q))
123 goto new_segment;
124
125 if (!BIOVEC_PHYS_MERGEABLE(*bvprv, bvec))
126 goto new_segment;
127 if (!BIOVEC_SEG_BOUNDARY(q, *bvprv, bvec))
128 goto new_segment;
129
130 (*sg)->length += nbytes;
131 } else {
132new_segment:
133 if (!*sg)
134 *sg = sglist;
135 else {
136 /*
137 * If the driver previously mapped a shorter
138 * list, we could see a termination bit
139 * prematurely unless it fully inits the sg
140 * table on each mapping. We KNOW that there
141 * must be more entries here or the driver
142 * would be buggy, so force clear the
143 * termination bit to avoid doing a full
144 * sg_init_table() in drivers for each command.
145 */
146 (*sg)->page_link &= ~0x02;
147 *sg = sg_next(*sg);
148 }
149
150 sg_set_page(*sg, bvec->bv_page, nbytes, bvec->bv_offset);
151 (*nsegs)++;
152 }
153 *bvprv = bvec;
154}
155
113/*156/*
114 * map a request to scatterlist, return number of sg entries setup. Caller157 * map a request to scatterlist, return number of sg entries setup. Caller
115 * must make sure sg can hold rq->nr_phys_segments entries158 * must make sure sg can hold rq->nr_phys_segments entries
@@ -131,41 +174,8 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq, · 15 unmodified lines
131 bvprv = NULL;174 bvprv = NULL;
132 sg = NULL;175 sg = NULL;
133 rq_for_each_segment(bvec, rq, iter) {176 rq_for_each_segment(bvec, rq, iter) {
134 int nbytes = bvec->bv_len;177 __blk_segment_map_sg(q, bvec, sglist, &bvprv, &sg,
135 178 &nsegs, &cluster);
136 if (bvprv && cluster) {
137 if (sg->length + nbytes > queue_max_segment_size(q))
138 goto new_segment;
139
140 if (!BIOVEC_PHYS_MERGEABLE(bvprv, bvec))
141 goto new_segment;
142 if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bvec))
143 goto new_segment;
144
145 sg->length += nbytes;
146 } else {
147new_segment:
148 if (!sg)
149 sg = sglist;
150 else {
151 /*
152 * If the driver previously mapped a shorter
153 * list, we could see a termination bit
154 * prematurely unless it fully inits the sg
155 * table on each mapping. We KNOW that there
156 * must be more entries here or the driver
157 * would be buggy, so force clear the
158 * termination bit to avoid doing a full
159 * sg_init_table() in drivers for each command.
160 */
161 sg->page_link &= ~0x02;
162 sg = sg_next(sg);
163 }
164
165 sg_set_page(sg, bvec->bv_page, nbytes, bvec->bv_offset);
166 nsegs++;
167 }
168 bvprv = bvec;
169 } /* segments in rq */179 } /* segments in rq */
170 180
171 181
@@ -199,6 +209,43 @@ new_segment: · 27 unmodified lines
199}209}
200EXPORT_SYMBOL(blk_rq_map_sg);210EXPORT_SYMBOL(blk_rq_map_sg);
201 211
212/**
213 * blk_bio_map_sg - map a bio to a scatterlist
214 * @q: request_queue in question
215 * @bio: bio being mapped
216 * @sglist: scatterlist being mapped
217 *
218 * Note:
219 * Caller must make sure sg can hold bio->bi_phys_segments entries
220 *
221 * Will return the number of sg entries setup
222 */
223int blk_bio_map_sg(struct request_queue *q, struct bio *bio,
224 struct scatterlist *sglist)
225{
226 struct bio_vec *bvec, *bvprv;
227 struct scatterlist *sg;
228 int nsegs, cluster;
229 unsigned long i;
230
231 nsegs = 0;
232 cluster = blk_queue_cluster(q);
233
234 bvprv = NULL;
235 sg = NULL;
236 bio_for_each_segment(bvec, bio, i) {
237 __blk_segment_map_sg(q, bvec, sglist, &bvprv, &sg,
238 &nsegs, &cluster);
239 } /* segments in bio */
240
241 if (sg)
242 sg_mark_end(sg);
243
244 BUG_ON(bio->bi_phys_segments && nsegs > bio->bi_phys_segments);
245 return nsegs;
246}
247EXPORT_SYMBOL(blk_bio_map_sg);
248
202static inline int ll_new_hw_segment(struct request_queue *q,249static inline int ll_new_hw_segment(struct request_queue *q,
203 struct request *req,250 struct request *req,
204 struct bio *bio)251 struct bio *bio)
block/genhd.c+1−1
@@ -835,7 +835,7 @@ static void disk_seqf_stop(struct seq_file *seqf, void *v) · 834 unmodified lines
835 835
836static void *show_partition_start(struct seq_file *seqf, loff_t *pos)836static void *show_partition_start(struct seq_file *seqf, loff_t *pos)
837{837{
838 static void *p;838 void *p;
839 839
840 p = disk_seqf_start(seqf, pos);840 p = disk_seqf_start(seqf, pos);
841 if (!IS_ERR_OR_NULL(p) && !*pos)841 if (!IS_ERR_OR_NULL(p) && !*pos)
drivers/ata/Kconfig+1−1
@@ -115,7 +115,7 @@ config SATA_SIL24 · 114 unmodified lines
115 If unsure, say N.115 If unsure, say N.
116 116
117config ATA_SFF117config ATA_SFF
118 bool "ATA SFF support"118 bool "ATA SFF support (for legacy IDE and PATA)"
119 default y119 default y
120 help120 help
121 This option adds support for ATA controllers with SFF121 This option adds support for ATA controllers with SFF
drivers/ata/ahci.c+8−0
@@ -256,6 +256,14 @@ static const struct pci_device_id ahci_pci_tbl[] = { · 255 unmodified lines
256 { PCI_VDEVICE(INTEL, 0x8c07), board_ahci }, /* Lynx Point RAID */256 { PCI_VDEVICE(INTEL, 0x8c07), board_ahci }, /* Lynx Point RAID */
257 { PCI_VDEVICE(INTEL, 0x8c0e), board_ahci }, /* Lynx Point RAID */257 { PCI_VDEVICE(INTEL, 0x8c0e), board_ahci }, /* Lynx Point RAID */
258 { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci }, /* Lynx Point RAID */258 { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci }, /* Lynx Point RAID */
259 { PCI_VDEVICE(INTEL, 0x9c02), board_ahci }, /* Lynx Point-LP AHCI */
260 { PCI_VDEVICE(INTEL, 0x9c03), board_ahci }, /* Lynx Point-LP AHCI */
261 { PCI_VDEVICE(INTEL, 0x9c04), board_ahci }, /* Lynx Point-LP RAID */
262 { PCI_VDEVICE(INTEL, 0x9c05), board_ahci }, /* Lynx Point-LP RAID */
263 { PCI_VDEVICE(INTEL, 0x9c06), board_ahci }, /* Lynx Point-LP RAID */
264 { PCI_VDEVICE(INTEL, 0x9c07), board_ahci }, /* Lynx Point-LP RAID */
265 { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci }, /* Lynx Point-LP RAID */
266 { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci }, /* Lynx Point-LP RAID */
259 267
260 /* JMicron 360/1/3/5/6, match class to avoid IDE function */268 /* JMicron 360/1/3/5/6, match class to avoid IDE function */
261 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,269 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
drivers/ata/ahci.h+1−0
@@ -320,6 +320,7 @@ extern struct device_attribute *ahci_sdev_attrs[]; · 319 unmodified lines
320extern struct ata_port_operations ahci_ops;320extern struct ata_port_operations ahci_ops;
321extern struct ata_port_operations ahci_pmp_retry_srst_ops;321extern struct ata_port_operations ahci_pmp_retry_srst_ops;
322 322
323unsigned int ahci_dev_classify(struct ata_port *ap);
323void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,324void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
324 u32 opts);325 u32 opts);
325void ahci_save_initial_config(struct device *dev,326void ahci_save_initial_config(struct device *dev,
drivers/ata/ata_piix.c+8−0
@@ -329,6 +329,14 @@ static const struct pci_device_id piix_pci_tbl[] = { · 328 unmodified lines
329 { 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },329 { 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
330 /* SATA Controller IDE (Lynx Point) */330 /* SATA Controller IDE (Lynx Point) */
331 { 0x8086, 0x8c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },331 { 0x8086, 0x8c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
332 /* SATA Controller IDE (Lynx Point-LP) */
333 { 0x8086, 0x9c00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
334 /* SATA Controller IDE (Lynx Point-LP) */
335 { 0x8086, 0x9c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
336 /* SATA Controller IDE (Lynx Point-LP) */
337 { 0x8086, 0x9c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
338 /* SATA Controller IDE (Lynx Point-LP) */
339 { 0x8086, 0x9c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
332 /* SATA Controller IDE (DH89xxCC) */340 /* SATA Controller IDE (DH89xxCC) */
333 { 0x8086, 0x2326, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },341 { 0x8086, 0x2326, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
334 { } /* terminate list */342 { } /* terminate list */
drivers/ata/libahci.c+2−1
@@ -1139,7 +1139,7 @@ static void ahci_dev_config(struct ata_device *dev) · 1138 unmodified lines
1139 }1139 }
1140}1140}
1141 1141
1142static unsigned int ahci_dev_classify(struct ata_port *ap)1142unsigned int ahci_dev_classify(struct ata_port *ap)
1143{1143{
1144 void __iomem *port_mmio = ahci_port_base(ap);1144 void __iomem *port_mmio = ahci_port_base(ap);
1145 struct ata_taskfile tf;1145 struct ata_taskfile tf;
@@ -1153,6 +1153,7 @@ static unsigned int ahci_dev_classify(struct ata_port *ap) · 7 unmodified lines
1153 1153
1154 return ata_dev_classify(&tf);1154 return ata_dev_classify(&tf);
1155}1155}
1156EXPORT_SYMBOL_GPL(ahci_dev_classify);
1156 1157
1157void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,1158void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
1158 u32 opts)1159 u32 opts)
drivers/ata/libata-acpi.c+4−11
@@ -60,17 +60,7 @@ acpi_handle ata_ap_acpi_handle(struct ata_port *ap) · 59 unmodified lines
60 if (ap->flags & ATA_FLAG_ACPI_SATA)60 if (ap->flags & ATA_FLAG_ACPI_SATA)
61 return NULL;61 return NULL;
62 62
63 /*63 return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev), ap->port_no);
64 * If acpi bind operation has already happened, we can get the handle
65 * for the port by checking the corresponding scsi_host device's
66 * firmware node, otherwise we will need to find out the handle from
67 * its parent's acpi node.
68 */
69 if (ap->scsi_host)
70 return DEVICE_ACPI_HANDLE(&ap->scsi_host->shost_gendev);
71 else
72 return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev),
73 ap->port_no);
74}64}
75EXPORT_SYMBOL(ata_ap_acpi_handle);65EXPORT_SYMBOL(ata_ap_acpi_handle);
76 66
@@ -1101,6 +1091,9 @@ static int ata_acpi_bind_host(struct ata_port *ap, acpi_handle *handle) · 1024 unmodified lines
1101 if (!*handle)1091 if (!*handle)
1102 return -ENODEV;1092 return -ENODEV;
1103 1093
1094 if (ata_acpi_gtm(ap, &ap->__acpi_init_gtm) == 0)
1095 ap->pflags |= ATA_PFLAG_INIT_GTM_VALID;
1096
1104 return 0;1097 return 0;
1105}1098}
1106 1099
drivers/ata/libata-core.c+2−1
@@ -4062,7 +4062,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { · 4061 unmodified lines
4062 { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA },4062 { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA },
4063 { "SAMSUNG CD-ROM SN-124", "N001", ATA_HORKAGE_NODMA },4063 { "SAMSUNG CD-ROM SN-124", "N001", ATA_HORKAGE_NODMA },
4064 { "Seagate STT20000A", NULL, ATA_HORKAGE_NODMA },4064 { "Seagate STT20000A", NULL, ATA_HORKAGE_NODMA },
4065 { "2GB ATA Flash Disk", "ADMA428M", ATA_HORKAGE_NODMA },4065 { " 2GB ATA Flash Disk", "ADMA428M", ATA_HORKAGE_NODMA },
4066 /* Odd clown on sil3726/4726 PMPs */4066 /* Odd clown on sil3726/4726 PMPs */
4067 { "Config Disk", NULL, ATA_HORKAGE_DISABLE },4067 { "Config Disk", NULL, ATA_HORKAGE_DISABLE },
4068 4068
@@ -4128,6 +4128,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { · 59 unmodified lines
4128 4128
4129 /* Devices that do not need bridging limits applied */4129 /* Devices that do not need bridging limits applied */
4130 { "MTRON MSP-SATA*", NULL, ATA_HORKAGE_BRIDGE_OK, },4130 { "MTRON MSP-SATA*", NULL, ATA_HORKAGE_BRIDGE_OK, },
4131 { "BUFFALO HD-QSU2/R5", NULL, ATA_HORKAGE_BRIDGE_OK, },
4131 4132
4132 /* Devices which aren't very happy with higher link speeds */4133 /* Devices which aren't very happy with higher link speeds */
4133 { "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, },4134 { "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, },
drivers/ata/pata_atiixp.c+16−0
@@ -20,6 +20,7 @@ · 19 unmodified lines
20#include <linux/delay.h>20#include <linux/delay.h>
21#include <scsi/scsi_host.h>21#include <scsi/scsi_host.h>
22#include <linux/libata.h>22#include <linux/libata.h>
23#include <linux/dmi.h>
23 24
24#define DRV_NAME "pata_atiixp"25#define DRV_NAME "pata_atiixp"
25#define DRV_VERSION "0.4.6"26#define DRV_VERSION "0.4.6"
@@ -33,11 +34,26 @@ enum { · 7 unmodified lines
33 ATIIXP_IDE_UDMA_MODE = 0x5634 ATIIXP_IDE_UDMA_MODE = 0x56
34};35};
35 36
37static const struct dmi_system_id attixp_cable_override_dmi_table[] = {
38 {
39 /* Board has onboard PATA<->SATA converters */
40 .ident = "MSI E350DM-E33",
41 .matches = {
42 DMI_MATCH(DMI_BOARD_VENDOR, "MSI"),
43 DMI_MATCH(DMI_BOARD_NAME, "E350DM-E33(MS-7720)"),
44 },
45 },
46 { }
47};
48
36static int atiixp_cable_detect(struct ata_port *ap)49static int atiixp_cable_detect(struct ata_port *ap)
37{50{
38 struct pci_dev *pdev = to_pci_dev(ap->host->dev);51 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
39 u8 udma;52 u8 udma;
40 53
54 if (dmi_check_system(attixp_cable_override_dmi_table))
55 return ATA_CBL_PATA40_SHORT;
56
41 /* Hack from drivers/ide/pci. Really we want to know how to do the57 /* Hack from drivers/ide/pci. Really we want to know how to do the
42 raw detection not play follow the bios mode guess */58 raw detection not play follow the bios mode guess */
43 pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ap->port_no, &udma);59 pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ap->port_no, &udma);
drivers/base/dma-contiguous.c+1−1
@@ -250,7 +250,7 @@ int __init dma_declare_contiguous(struct device *dev, unsigned long size, · 249 unmodified lines
250 return -EINVAL;250 return -EINVAL;
251 251
252 /* Sanitise input arguments */252 /* Sanitise input arguments */
253 alignment = PAGE_SIZE << max(MAX_ORDER, pageblock_order);253 alignment = PAGE_SIZE << max(MAX_ORDER - 1, pageblock_order);
254 base = ALIGN(base, alignment);254 base = ALIGN(base, alignment);
255 size = ALIGN(size, alignment);255 size = ALIGN(size, alignment);
256 limit &= ~(alignment - 1);256 limit &= ~(alignment - 1);
drivers/block/drbd/drbd_bitmap.c+14−1
@@ -889,6 +889,7 @@ struct bm_aio_ctx { · 888 unmodified lines
889 unsigned int done;889 unsigned int done;
890 unsigned flags;890 unsigned flags;
891#define BM_AIO_COPY_PAGES 1891#define BM_AIO_COPY_PAGES 1
892#define BM_WRITE_ALL_PAGES 2
892 int error;893 int error;
893 struct kref kref;894 struct kref kref;
894};895};
@@ -1059,7 +1060,8 @@ static int bm_rw(struct drbd_conf *mdev, int rw, unsigned flags, unsigned lazy_w · 164 unmodified lines
1059 if (lazy_writeout_upper_idx && i == lazy_writeout_upper_idx)1060 if (lazy_writeout_upper_idx && i == lazy_writeout_upper_idx)
1060 break;1061 break;
1061 if (rw & WRITE) {1062 if (rw & WRITE) {
1062 if (bm_test_page_unchanged(b->bm_pages[i])) {1063 if (!(flags & BM_WRITE_ALL_PAGES) &&
1064 bm_test_page_unchanged(b->bm_pages[i])) {
1063 dynamic_dev_dbg(DEV, "skipped bm write for idx %u\n", i);1065 dynamic_dev_dbg(DEV, "skipped bm write for idx %u\n", i);
1064 continue;1066 continue;
1065 }1067 }
@@ -1140,6 +1142,17 @@ int drbd_bm_write(struct drbd_conf *mdev) __must_hold(local) · 74 unmodified lines
1140 return bm_rw(mdev, WRITE, 0, 0);1142 return bm_rw(mdev, WRITE, 0, 0);
1141}1143}
1142 1144
1145/**
1146 * drbd_bm_write_all() - Write the whole bitmap to its on disk location.
1147 * @mdev: DRBD device.
1148 *
1149 * Will write all pages.
1150 */
1151int drbd_bm_write_all(struct drbd_conf *mdev) __must_hold(local)
1152{
1153 return bm_rw(mdev, WRITE, BM_WRITE_ALL_PAGES, 0);
1154}
1155
1143/**1156/**
1144 * drbd_bm_lazy_write_out() - Write bitmap pages 0 to @upper_idx-1, if they have changed.1157 * drbd_bm_lazy_write_out() - Write bitmap pages 0 to @upper_idx-1, if they have changed.
1145 * @mdev: DRBD device.1158 * @mdev: DRBD device.
drivers/block/drbd/drbd_int.h+1−0
@@ -1469,6 +1469,7 @@ extern int drbd_bm_e_weight(struct drbd_conf *mdev, unsigned long enr); · 1468 unmodified lines
1469extern int drbd_bm_write_page(struct drbd_conf *mdev, unsigned int idx) __must_hold(local);1469extern int drbd_bm_write_page(struct drbd_conf *mdev, unsigned int idx) __must_hold(local);
1470extern int drbd_bm_read(struct drbd_conf *mdev) __must_hold(local);1470extern int drbd_bm_read(struct drbd_conf *mdev) __must_hold(local);
1471extern int drbd_bm_write(struct drbd_conf *mdev) __must_hold(local);1471extern int drbd_bm_write(struct drbd_conf *mdev) __must_hold(local);
1472extern int drbd_bm_write_all(struct drbd_conf *mdev) __must_hold(local);
1472extern int drbd_bm_write_copy_pages(struct drbd_conf *mdev) __must_hold(local);1473extern int drbd_bm_write_copy_pages(struct drbd_conf *mdev) __must_hold(local);
1473extern unsigned long drbd_bm_ALe_set_all(struct drbd_conf *mdev,1474extern unsigned long drbd_bm_ALe_set_all(struct drbd_conf *mdev,
1474 unsigned long al_enr);1475 unsigned long al_enr);
drivers/block/drbd/drbd_main.c+12−16
@@ -79,6 +79,7 @@ static int w_md_sync(struct drbd_conf *mdev, struct drbd_work *w, int unused); · 78 unmodified lines
79static void md_sync_timer_fn(unsigned long data);79static void md_sync_timer_fn(unsigned long data);
80static int w_bitmap_io(struct drbd_conf *mdev, struct drbd_work *w, int unused);80static int w_bitmap_io(struct drbd_conf *mdev, struct drbd_work *w, int unused);
81static int w_go_diskless(struct drbd_conf *mdev, struct drbd_work *w, int unused);81static int w_go_diskless(struct drbd_conf *mdev, struct drbd_work *w, int unused);
82static void _tl_clear(struct drbd_conf *mdev);
82 83
83MODULE_AUTHOR("Philipp Reisner <phil@linbit.com>, "84MODULE_AUTHOR("Philipp Reisner <phil@linbit.com>, "
84 "Lars Ellenberg <lars@linbit.com>");85 "Lars Ellenberg <lars@linbit.com>");
@@ -432,19 +433,10 @@ static void _tl_restart(struct drbd_conf *mdev, enum drbd_req_event what) · 347 unmodified lines
432 433
433 /* Actions operating on the disk state, also want to work on434 /* Actions operating on the disk state, also want to work on
434 requests that got barrier acked. */435 requests that got barrier acked. */
435 switch (what) {
436 case fail_frozen_disk_io:
437 case restart_frozen_disk_io:
438 list_for_each_safe(le, tle, &mdev->barrier_acked_requests) {
439 req = list_entry(le, struct drbd_request, tl_requests);
440 _req_mod(req, what);
441 }
442 436
443 case connection_lost_while_pending:437 list_for_each_safe(le, tle, &mdev->barrier_acked_requests) {
444 case resend:438 req = list_entry(le, struct drbd_request, tl_requests);
445 break;439 _req_mod(req, what);
446 default:
447 dev_err(DEV, "what = %d in _tl_restart()\n", what);
448 }440 }
449}441}
450 442
@@ -458,12 +450,17 @@ static void _tl_restart(struct drbd_conf *mdev, enum drbd_req_event what) · 7 unmodified lines
458 * receiver thread and the worker thread.450 * receiver thread and the worker thread.
459 */451 */
460void tl_clear(struct drbd_conf *mdev)452void tl_clear(struct drbd_conf *mdev)
453{
454 spin_lock_irq(&mdev->req_lock);
455 _tl_clear(mdev);
456 spin_unlock_irq(&mdev->req_lock);
457}
458
459static void _tl_clear(struct drbd_conf *mdev)
461{460{
462 struct list_head *le, *tle;461 struct list_head *le, *tle;
463 struct drbd_request *r;462 struct drbd_request *r;
464 463
465 spin_lock_irq(&mdev->req_lock);
466
467 _tl_restart(mdev, connection_lost_while_pending);464 _tl_restart(mdev, connection_lost_while_pending);
468 465
469 /* we expect this list to be empty. */466 /* we expect this list to be empty. */
@@ -482,7 +479,6 @@ void tl_clear(struct drbd_conf *mdev) · 12 unmodified lines
482 479
483 memset(mdev->app_reads_hash, 0, APP_R_HSIZE*sizeof(void *));480 memset(mdev->app_reads_hash, 0, APP_R_HSIZE*sizeof(void *));
484 481
485 spin_unlock_irq(&mdev->req_lock);
486}482}
487 483
488void tl_restart(struct drbd_conf *mdev, enum drbd_req_event what)484void tl_restart(struct drbd_conf *mdev, enum drbd_req_event what)
@@ -1476,12 +1472,12 @@ static void after_state_ch(struct drbd_conf *mdev, union drbd_state os, · 987 unmodified lines
1476 if (ns.susp_fen) {1472 if (ns.susp_fen) {
1477 /* case1: The outdate peer handler is successful: */1473 /* case1: The outdate peer handler is successful: */
1478 if (os.pdsk > D_OUTDATED && ns.pdsk <= D_OUTDATED) {1474 if (os.pdsk > D_OUTDATED && ns.pdsk <= D_OUTDATED) {
1479 tl_clear(mdev);
1480 if (test_bit(NEW_CUR_UUID, &mdev->flags)) {1475 if (test_bit(NEW_CUR_UUID, &mdev->flags)) {
1481 drbd_uuid_new_current(mdev);1476 drbd_uuid_new_current(mdev);
1482 clear_bit(NEW_CUR_UUID, &mdev->flags);1477 clear_bit(NEW_CUR_UUID, &mdev->flags);
1483 }1478 }
1484 spin_lock_irq(&mdev->req_lock);1479 spin_lock_irq(&mdev->req_lock);
1480 _tl_clear(mdev);
1485 _drbd_set_state(_NS(mdev, susp_fen, 0), CS_VERBOSE, NULL);1481 _drbd_set_state(_NS(mdev, susp_fen, 0), CS_VERBOSE, NULL);
1486 spin_unlock_irq(&mdev->req_lock);1482 spin_unlock_irq(&mdev->req_lock);
1487 }1483 }
drivers/block/drbd/drbd_nl.c+2−2
@@ -674,8 +674,8 @@ enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *mdev, enum dds · 673 unmodified lines
674 la_size_changed && md_moved ? "size changed and md moved" :674 la_size_changed && md_moved ? "size changed and md moved" :
675 la_size_changed ? "size changed" : "md moved");675 la_size_changed ? "size changed" : "md moved");
676 /* next line implicitly does drbd_suspend_io()+drbd_resume_io() */676 /* next line implicitly does drbd_suspend_io()+drbd_resume_io() */
677 err = drbd_bitmap_io(mdev, &drbd_bm_write,677 err = drbd_bitmap_io(mdev, md_moved ? &drbd_bm_write_all : &drbd_bm_write,
678 "size changed", BM_LOCKED_MASK);678 "size changed", BM_LOCKED_MASK);
679 if (err) {679 if (err) {
680 rv = dev_size_error;680 rv = dev_size_error;
681 goto out;681 goto out;
drivers/block/drbd/drbd_req.c+32−4
@@ -695,6 +695,12 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, · 694 unmodified lines
695 break;695 break;
696 696
697 case resend:697 case resend:
698 /* Simply complete (local only) READs. */
699 if (!(req->rq_state & RQ_WRITE) && !req->w.cb) {
700 _req_may_be_done(req, m);
701 break;
702 }
703
698 /* If RQ_NET_OK is already set, we got a P_WRITE_ACK or P_RECV_ACK704 /* If RQ_NET_OK is already set, we got a P_WRITE_ACK or P_RECV_ACK
699 before the connection loss (B&C only); only P_BARRIER_ACK was missing.705 before the connection loss (B&C only); only P_BARRIER_ACK was missing.
700 Trowing them out of the TL here by pretending we got a BARRIER_ACK706 Trowing them out of the TL here by pretending we got a BARRIER_ACK
@@ -834,7 +840,15 @@ static int drbd_make_request_common(struct drbd_conf *mdev, struct bio *bio, uns · 133 unmodified lines
834 req->private_bio = NULL;840 req->private_bio = NULL;
835 }841 }
836 if (rw == WRITE) {842 if (rw == WRITE) {
837 remote = 1;843 /* Need to replicate writes. Unless it is an empty flush,
844 * which is better mapped to a DRBD P_BARRIER packet,
845 * also for drbd wire protocol compatibility reasons. */
846 if (unlikely(size == 0)) {
847 /* The only size==0 bios we expect are empty flushes. */
848 D_ASSERT(bio->bi_rw & REQ_FLUSH);
849 remote = 0;
850 } else
851 remote = 1;
838 } else {852 } else {
839 /* READ || READA */853 /* READ || READA */
840 if (local) {854 if (local) {
@@ -870,8 +884,11 @@ static int drbd_make_request_common(struct drbd_conf *mdev, struct bio *bio, uns · 29 unmodified lines
870 * extent. This waits for any resync activity in the corresponding884 * extent. This waits for any resync activity in the corresponding
871 * resync extent to finish, and, if necessary, pulls in the target885 * resync extent to finish, and, if necessary, pulls in the target
872 * extent into the activity log, which involves further disk io because886 * extent into the activity log, which involves further disk io because
873 * of transactional on-disk meta data updates. */887 * of transactional on-disk meta data updates.
874 if (rw == WRITE && local && !test_bit(AL_SUSPENDED, &mdev->flags)) {888 * Empty flushes don't need to go into the activity log, they can only
889 * flush data for pending writes which are already in there. */
890 if (rw == WRITE && local && size
891 && !test_bit(AL_SUSPENDED, &mdev->flags)) {
875 req->rq_state |= RQ_IN_ACT_LOG;892 req->rq_state |= RQ_IN_ACT_LOG;
876 drbd_al_begin_io(mdev, sector);893 drbd_al_begin_io(mdev, sector);
877 }894 }
@@ -994,7 +1011,10 @@ allocate_barrier: · 116 unmodified lines
994 if (rw == WRITE && _req_conflicts(req))1011 if (rw == WRITE && _req_conflicts(req))
995 goto fail_conflicting;1012 goto fail_conflicting;
996 1013
997 list_add_tail(&req->tl_requests, &mdev->newest_tle->requests);1014 /* no point in adding empty flushes to the transfer log,
1015 * they are mapped to drbd barriers already. */
1016 if (likely(size!=0))
1017 list_add_tail(&req->tl_requests, &mdev->newest_tle->requests);
998 1018
999 /* NOTE remote first: to get the concurrent write detection right,1019 /* NOTE remote first: to get the concurrent write detection right,
1000 * we must register the request before start of local IO. */1020 * we must register the request before start of local IO. */
@@ -1014,6 +1034,14 @@ allocate_barrier: · 13 unmodified lines
1014 mdev->net_conf->on_congestion != OC_BLOCK && mdev->agreed_pro_version >= 96)1034 mdev->net_conf->on_congestion != OC_BLOCK && mdev->agreed_pro_version >= 96)
1015 maybe_pull_ahead(mdev);1035 maybe_pull_ahead(mdev);
1016 1036
1037 /* If this was a flush, queue a drbd barrier/start a new epoch.
1038 * Unless the current epoch was empty anyways, or we are not currently
1039 * replicating, in which case there is no point. */
1040 if (unlikely(bio->bi_rw & REQ_FLUSH)
1041 && mdev->newest_tle->n_writes
1042 && drbd_should_do_remote(mdev->state))
1043 queue_barrier(mdev);
1044
1017 spin_unlock_irq(&mdev->req_lock);1045 spin_unlock_irq(&mdev->req_lock);
1018 kfree(b); /* if someone else has beaten us to it... */1046 kfree(b); /* if someone else has beaten us to it... */
1019 1047
drivers/cpufreq/omap-cpufreq.c+3−1
@@ -218,7 +218,7 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) · 217 unmodified lines
218 218
219 policy->cur = policy->min = policy->max = omap_getspeed(policy->cpu);219 policy->cur = policy->min = policy->max = omap_getspeed(policy->cpu);
220 220
221 if (atomic_inc_return(&freq_table_users) == 1)221 if (!freq_table)
222 result = opp_init_cpufreq_table(mpu_dev, &freq_table);222 result = opp_init_cpufreq_table(mpu_dev, &freq_table);
223 223
224 if (result) {224 if (result) {
@@ -227,6 +227,8 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) · 2 unmodified lines
227 goto fail_ck;227 goto fail_ck;
228 }228 }
229 229
230 atomic_inc_return(&freq_table_users);
231
230 result = cpufreq_frequency_table_cpuinfo(policy, freq_table);232 result = cpufreq_frequency_table_cpuinfo(policy, freq_table);
231 if (result)233 if (result)
232 goto fail_table;234 goto fail_table;
drivers/crypto/caam/jr.c+5−5
@@ -63,7 +63,7 @@ static void caam_jr_dequeue(unsigned long devarg) · 62 unmodified lines
63 63
64 head = ACCESS_ONCE(jrp->head);64 head = ACCESS_ONCE(jrp->head);
65 65
66 spin_lock_bh(&jrp->outlock);66 spin_lock(&jrp->outlock);
67 67
68 sw_idx = tail = jrp->tail;68 sw_idx = tail = jrp->tail;
69 hw_idx = jrp->out_ring_read_index;69 hw_idx = jrp->out_ring_read_index;
@@ -115,7 +115,7 @@ static void caam_jr_dequeue(unsigned long devarg) · 45 unmodified lines
115 jrp->tail = tail;115 jrp->tail = tail;
116 }116 }
117 117
118 spin_unlock_bh(&jrp->outlock);118 spin_unlock(&jrp->outlock);
119 119
120 /* Finally, execute user's callback */120 /* Finally, execute user's callback */
121 usercall(dev, userdesc, userstatus, userarg);121 usercall(dev, userdesc, userstatus, userarg);
@@ -236,14 +236,14 @@ int caam_jr_enqueue(struct device *dev, u32 *desc, · 114 unmodified lines
236 return -EIO;236 return -EIO;
237 }237 }
238 238
239 spin_lock(&jrp->inplock);239 spin_lock_bh(&jrp->inplock);
240 240
241 head = jrp->head;241 head = jrp->head;
242 tail = ACCESS_ONCE(jrp->tail);242 tail = ACCESS_ONCE(jrp->tail);
243 243
244 if (!rd_reg32(&jrp->rregs->inpring_avail) ||244 if (!rd_reg32(&jrp->rregs->inpring_avail) ||
245 CIRC_SPACE(head, tail, JOBR_DEPTH) <= 0) {245 CIRC_SPACE(head, tail, JOBR_DEPTH) <= 0) {
246 spin_unlock(&jrp->inplock);246 spin_unlock_bh(&jrp->inplock);
247 dma_unmap_single(dev, desc_dma, desc_size, DMA_TO_DEVICE);247 dma_unmap_single(dev, desc_dma, desc_size, DMA_TO_DEVICE);
248 return -EBUSY;248 return -EBUSY;
249 }249 }
@@ -265,7 +265,7 @@ int caam_jr_enqueue(struct device *dev, u32 *desc, · 15 unmodified lines
265 265
266 wr_reg32(&jrp->rregs->inpring_jobadd, 1);266 wr_reg32(&jrp->rregs->inpring_jobadd, 1);
267 267
268 spin_unlock(&jrp->inplock);268 spin_unlock_bh(&jrp->inplock);
269 269
270 return 0;270 return 0;
271}271}
drivers/crypto/hifn_795x.c+2−2
@@ -821,8 +821,8 @@ static int hifn_register_rng(struct hifn_device *dev) · 820 unmodified lines
821 /*821 /*
822 * We must wait at least 256 Pk_clk cycles between two reads of the rng.822 * We must wait at least 256 Pk_clk cycles between two reads of the rng.
823 */823 */
824 dev->rng_wait_time = DIV_ROUND_UP(NSEC_PER_SEC, dev->pk_clk_freq) *824 dev->rng_wait_time = DIV_ROUND_UP_ULL(NSEC_PER_SEC,
825 256;825 dev->pk_clk_freq) * 256;
826 826
827 dev->rng.name = dev->name;827 dev->rng.name = dev->name;
828 dev->rng.data_present = hifn_rng_data_present,828 dev->rng.data_present = hifn_rng_data_present,
drivers/gpio/Kconfig+1−1
@@ -294,7 +294,7 @@ config GPIO_MAX732X_IRQ · 293 unmodified lines
294 294
295config GPIO_MC9S08DZ60295config GPIO_MC9S08DZ60
296 bool "MX35 3DS BOARD MC9S08DZ60 GPIO functions"296 bool "MX35 3DS BOARD MC9S08DZ60 GPIO functions"
297 depends on I2C && MACH_MX35_3DS297 depends on I2C=y && MACH_MX35_3DS
298 help298 help
299 Select this to enable the MC9S08DZ60 GPIO driver299 Select this to enable the MC9S08DZ60 GPIO driver
300 300
drivers/gpio/gpio-em.c+2−2
@@ -247,9 +247,9 @@ static int __devinit em_gio_irq_domain_init(struct em_gio_priv *p) · 246 unmodified lines
247 247
248 p->irq_base = irq_alloc_descs(pdata->irq_base, 0,248 p->irq_base = irq_alloc_descs(pdata->irq_base, 0,
249 pdata->number_of_pins, numa_node_id());249 pdata->number_of_pins, numa_node_id());
250 if (IS_ERR_VALUE(p->irq_base)) {250 if (p->irq_base < 0) {
251 dev_err(&pdev->dev, "cannot get irq_desc\n");251 dev_err(&pdev->dev, "cannot get irq_desc\n");
252 return -ENXIO;252 return p->irq_base;
253 }253 }
254 pr_debug("gio: hw base = %d, nr = %d, sw base = %d\n",254 pr_debug("gio: hw base = %d, nr = %d, sw base = %d\n",
255 pdata->gpio_base, pdata->number_of_pins, p->irq_base);255 pdata->gpio_base, pdata->number_of_pins, p->irq_base);
drivers/gpio/gpio-rdc321x.c+1−0
@@ -170,6 +170,7 @@ static int __devinit rdc321x_gpio_probe(struct platform_device *pdev) · 169 unmodified lines
170 rdc321x_gpio_dev->reg2_data_base = r->start + 0x4;170 rdc321x_gpio_dev->reg2_data_base = r->start + 0x4;
171 171
172 rdc321x_gpio_dev->chip.label = "rdc321x-gpio";172 rdc321x_gpio_dev->chip.label = "rdc321x-gpio";
173 rdc321x_gpio_dev->chip.owner = THIS_MODULE;
173 rdc321x_gpio_dev->chip.direction_input = rdc_gpio_direction_input;174 rdc321x_gpio_dev->chip.direction_input = rdc_gpio_direction_input;
174 rdc321x_gpio_dev->chip.direction_output = rdc_gpio_config;175 rdc321x_gpio_dev->chip.direction_output = rdc_gpio_config;
175 rdc321x_gpio_dev->chip.get = rdc_gpio_get_value;176 rdc321x_gpio_dev->chip.get = rdc_gpio_get_value;
drivers/gpio/gpiolib-of.c+1−1
@@ -82,7 +82,7 @@ int of_get_named_gpio_flags(struct device_node *np, const char *propname, · 81 unmodified lines
82 gpiochip_find(&gg_data, of_gpiochip_find_and_xlate);82 gpiochip_find(&gg_data, of_gpiochip_find_and_xlate);
83 83
84 of_node_put(gg_data.gpiospec.np);84 of_node_put(gg_data.gpiospec.np);
85 pr_debug("%s exited with status %d\n", __func__, ret);85 pr_debug("%s exited with status %d\n", __func__, gg_data.out_gpio);
86 return gg_data.out_gpio;86 return gg_data.out_gpio;
87}87}
88EXPORT_SYMBOL(of_get_named_gpio_flags);88EXPORT_SYMBOL(of_get_named_gpio_flags);
drivers/gpu/drm/drm_crtc.c+1−1
@@ -1981,7 +1981,7 @@ int drm_mode_cursor_ioctl(struct drm_device *dev, · 1980 unmodified lines
1981 if (!drm_core_check_feature(dev, DRIVER_MODESET))1981 if (!drm_core_check_feature(dev, DRIVER_MODESET))
1982 return -EINVAL;1982 return -EINVAL;
1983 1983
1984 if (!req->flags)1984 if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags))
1985 return -EINVAL;1985 return -EINVAL;
1986 1986
1987 mutex_lock(&dev->mode_config.mutex);1987 mutex_lock(&dev->mode_config.mutex);
drivers/gpu/drm/drm_edid.c+3−0
@@ -87,6 +87,9 @@ static struct edid_quirk { · 86 unmodified lines
87 int product_id;87 int product_id;
88 u32 quirks;88 u32 quirks;
89} edid_quirk_list[] = {89} edid_quirk_list[] = {
90 /* ASUS VW222S */
91 { "ACI", 0x22a2, EDID_QUIRK_FORCE_REDUCED_BLANKING },
92
90 /* Acer AL1706 */93 /* Acer AL1706 */
91 { "ACR", 44358, EDID_QUIRK_PREFER_LARGE_60 },94 { "ACR", 44358, EDID_QUIRK_PREFER_LARGE_60 },
92 /* Acer F51 */95 /* Acer F51 */
drivers/gpu/drm/gma500/psb_intel_display.c+3−0
@@ -1362,6 +1362,9 @@ void psb_intel_crtc_init(struct drm_device *dev, int pipe, · 1361 unmodified lines
1362 (struct drm_connector **) (psb_intel_crtc + 1);1362 (struct drm_connector **) (psb_intel_crtc + 1);
1363 psb_intel_crtc->mode_set.num_connectors = 0;1363 psb_intel_crtc->mode_set.num_connectors = 0;
1364 psb_intel_cursor_init(dev, psb_intel_crtc);1364 psb_intel_cursor_init(dev, psb_intel_crtc);
1365
1366 /* Set to true so that the pipe is forced off on initial config. */
1367 psb_intel_crtc->active = true;
1365}1368}
1366 1369
1367int psb_intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,1370int psb_intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
drivers/gpu/drm/i915/i915_gem_gtt.c+1−1
@@ -72,7 +72,7 @@ int i915_gem_init_aliasing_ppgtt(struct drm_device *dev) · 71 unmodified lines
72 /* ppgtt PDEs reside in the global gtt pagetable, which has 512*102472 /* ppgtt PDEs reside in the global gtt pagetable, which has 512*1024
73 * entries. For aliasing ppgtt support we just steal them at the end for73 * entries. For aliasing ppgtt support we just steal them at the end for
74 * now. */74 * now. */
75 first_pd_entry_in_global_pt = 512*1024 - I915_PPGTT_PD_ENTRIES;75 first_pd_entry_in_global_pt = dev_priv->mm.gtt->gtt_total_entries - I915_PPGTT_PD_ENTRIES;
76 76
77 ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);77 ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
78 if (!ppgtt)78 if (!ppgtt)
drivers/gpu/drm/i915/intel_display.c+6−6
@@ -1384,7 +1384,7 @@ static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv, · 1383 unmodified lines
1384 enum pipe pipe, int reg)1384 enum pipe pipe, int reg)
1385{1385{
1386 u32 val = I915_READ(reg);1386 u32 val = I915_READ(reg);
1387 WARN(hdmi_pipe_enabled(dev_priv, val, pipe),1387 WARN(hdmi_pipe_enabled(dev_priv, pipe, val),
1388 "PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n",1388 "PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n",
1389 reg, pipe_name(pipe));1389 reg, pipe_name(pipe));
1390 1390
@@ -1404,13 +1404,13 @@ static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv, · 13 unmodified lines
1404 1404
1405 reg = PCH_ADPA;1405 reg = PCH_ADPA;
1406 val = I915_READ(reg);1406 val = I915_READ(reg);
1407 WARN(adpa_pipe_enabled(dev_priv, val, pipe),1407 WARN(adpa_pipe_enabled(dev_priv, pipe, val),
1408 "PCH VGA enabled on transcoder %c, should be disabled\n",1408 "PCH VGA enabled on transcoder %c, should be disabled\n",
1409 pipe_name(pipe));1409 pipe_name(pipe));
1410 1410
1411 reg = PCH_LVDS;1411 reg = PCH_LVDS;
1412 val = I915_READ(reg);1412 val = I915_READ(reg);
1413 WARN(lvds_pipe_enabled(dev_priv, val, pipe),1413 WARN(lvds_pipe_enabled(dev_priv, pipe, val),
1414 "PCH LVDS enabled on transcoder %c, should be disabled\n",1414 "PCH LVDS enabled on transcoder %c, should be disabled\n",
1415 pipe_name(pipe));1415 pipe_name(pipe));
1416 1416
@@ -1872,7 +1872,7 @@ static void disable_pch_hdmi(struct drm_i915_private *dev_priv, · 455 unmodified lines
1872 enum pipe pipe, int reg)1872 enum pipe pipe, int reg)
1873{1873{
1874 u32 val = I915_READ(reg);1874 u32 val = I915_READ(reg);
1875 if (hdmi_pipe_enabled(dev_priv, val, pipe)) {1875 if (hdmi_pipe_enabled(dev_priv, pipe, val)) {
1876 DRM_DEBUG_KMS("Disabling pch HDMI %x on pipe %d\n",1876 DRM_DEBUG_KMS("Disabling pch HDMI %x on pipe %d\n",
1877 reg, pipe);1877 reg, pipe);
1878 I915_WRITE(reg, val & ~PORT_ENABLE);1878 I915_WRITE(reg, val & ~PORT_ENABLE);
@@ -1894,12 +1894,12 @@ static void intel_disable_pch_ports(struct drm_i915_private *dev_priv, · 15 unmodified lines
1894 1894
1895 reg = PCH_ADPA;1895 reg = PCH_ADPA;
1896 val = I915_READ(reg);1896 val = I915_READ(reg);
1897 if (adpa_pipe_enabled(dev_priv, val, pipe))1897 if (adpa_pipe_enabled(dev_priv, pipe, val))
1898 I915_WRITE(reg, val & ~ADPA_DAC_ENABLE);1898 I915_WRITE(reg, val & ~ADPA_DAC_ENABLE);
1899 1899
1900 reg = PCH_LVDS;1900 reg = PCH_LVDS;
1901 val = I915_READ(reg);1901 val = I915_READ(reg);
1902 if (lvds_pipe_enabled(dev_priv, val, pipe)) {1902 if (lvds_pipe_enabled(dev_priv, pipe, val)) {
1903 DRM_DEBUG_KMS("disable lvds on pipe %d val 0x%08x\n", pipe, val);1903 DRM_DEBUG_KMS("disable lvds on pipe %d val 0x%08x\n", pipe, val);
1904 I915_WRITE(reg, val & ~LVDS_PORT_EN);1904 I915_WRITE(reg, val & ~LVDS_PORT_EN);
1905 POSTING_READ(reg);1905 POSTING_READ(reg);
drivers/gpu/drm/i915/intel_lvds.c+8−0
@@ -780,6 +780,14 @@ static const struct dmi_system_id intel_no_lvds[] = { · 779 unmodified lines
780 DMI_MATCH(DMI_BOARD_NAME, "ZBOXSD-ID12/ID13"),780 DMI_MATCH(DMI_BOARD_NAME, "ZBOXSD-ID12/ID13"),
781 },781 },
782 },782 },
783 {
784 .callback = intel_no_lvds_dmi_callback,
785 .ident = "Gigabyte GA-D525TUD",
786 .matches = {
787 DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co., Ltd."),
788 DMI_MATCH(DMI_BOARD_NAME, "D525TUD"),
789 },
790 },
783 791
784 { } /* terminating entry */792 { } /* terminating entry */
785};793};
drivers/gpu/drm/i915/intel_sprite.c+2−2
@@ -60,11 +60,11 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb, · 59 unmodified lines
60 60
61 switch (fb->pixel_format) {61 switch (fb->pixel_format) {
62 case DRM_FORMAT_XBGR8888:62 case DRM_FORMAT_XBGR8888:
63 sprctl |= SPRITE_FORMAT_RGBX888;63 sprctl |= SPRITE_FORMAT_RGBX888 | SPRITE_RGB_ORDER_RGBX;
64 pixel_size = 4;64 pixel_size = 4;
65 break;65 break;
66 case DRM_FORMAT_XRGB8888:66 case DRM_FORMAT_XRGB8888:
67 sprctl |= SPRITE_FORMAT_RGBX888 | SPRITE_RGB_ORDER_RGBX;67 sprctl |= SPRITE_FORMAT_RGBX888;
68 pixel_size = 4;68 pixel_size = 4;
69 break;69 break;
70 case DRM_FORMAT_YUYV:70 case DRM_FORMAT_YUYV:
drivers/gpu/drm/nouveau/nouveau_state.c+4−2
@@ -736,9 +736,11 @@ nouveau_card_init(struct drm_device *dev) · 735 unmodified lines
736 }736 }
737 break;737 break;
738 case NV_C0:738 case NV_C0:
739 nvc0_copy_create(dev, 1);739 if (!(nv_rd32(dev, 0x022500) & 0x00000200))
740 nvc0_copy_create(dev, 1);
740 case NV_D0:741 case NV_D0:
741 nvc0_copy_create(dev, 0);742 if (!(nv_rd32(dev, 0x022500) & 0x00000100))
743 nvc0_copy_create(dev, 0);
742 break;744 break;
743 default:745 default:
744 break;746 break;
drivers/gpu/drm/radeon/atombios_crtc.c+16−20
@@ -258,7 +258,6 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode) · 257 unmodified lines
258 radeon_crtc->enabled = true;258 radeon_crtc->enabled = true;
259 /* adjust pm to dpms changes BEFORE enabling crtcs */259 /* adjust pm to dpms changes BEFORE enabling crtcs */
260 radeon_pm_compute_clocks(rdev);260 radeon_pm_compute_clocks(rdev);
261 /* disable crtc pair power gating before programming */
262 if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set)261 if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set)
263 atombios_powergate_crtc(crtc, ATOM_DISABLE);262 atombios_powergate_crtc(crtc, ATOM_DISABLE);
264 atombios_enable_crtc(crtc, ATOM_ENABLE);263 atombios_enable_crtc(crtc, ATOM_ENABLE);
@@ -278,25 +277,8 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode) · 13 unmodified lines
278 atombios_enable_crtc_memreq(crtc, ATOM_DISABLE);277 atombios_enable_crtc_memreq(crtc, ATOM_DISABLE);
279 atombios_enable_crtc(crtc, ATOM_DISABLE);278 atombios_enable_crtc(crtc, ATOM_DISABLE);
280 radeon_crtc->enabled = false;279 radeon_crtc->enabled = false;
281 /* power gating is per-pair */280 if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set)
282 if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set) {281 atombios_powergate_crtc(crtc, ATOM_ENABLE);
283 struct drm_crtc *other_crtc;
284 struct radeon_crtc *other_radeon_crtc;
285 list_for_each_entry(other_crtc, &rdev->ddev->mode_config.crtc_list, head) {
286 other_radeon_crtc = to_radeon_crtc(other_crtc);
287 if (((radeon_crtc->crtc_id == 0) && (other_radeon_crtc->crtc_id == 1)) ||
288 ((radeon_crtc->crtc_id == 1) && (other_radeon_crtc->crtc_id == 0)) ||
289 ((radeon_crtc->crtc_id == 2) && (other_radeon_crtc->crtc_id == 3)) ||
290 ((radeon_crtc->crtc_id == 3) && (other_radeon_crtc->crtc_id == 2)) ||
291 ((radeon_crtc->crtc_id == 4) && (other_radeon_crtc->crtc_id == 5)) ||
292 ((radeon_crtc->crtc_id == 5) && (other_radeon_crtc->crtc_id == 4))) {
293 /* if both crtcs in the pair are off, enable power gating */
294 if (other_radeon_crtc->enabled == false)
295 atombios_powergate_crtc(crtc, ATOM_ENABLE);
296 break;
297 }
298 }
299 }
300 /* adjust pm to dpms changes AFTER disabling crtcs */282 /* adjust pm to dpms changes AFTER disabling crtcs */
301 radeon_pm_compute_clocks(rdev);283 radeon_pm_compute_clocks(rdev);
302 break;284 break;
@@ -1682,9 +1664,22 @@ static void atombios_crtc_disable(struct drm_crtc *crtc) · 1379 unmodified lines
1682 struct drm_device *dev = crtc->dev;1664 struct drm_device *dev = crtc->dev;
1683 struct radeon_device *rdev = dev->dev_private;1665 struct radeon_device *rdev = dev->dev_private;
1684 struct radeon_atom_ss ss;1666 struct radeon_atom_ss ss;
1667 int i;
1685 1668
1686 atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);1669 atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
1687 1670
1671 for (i = 0; i < rdev->num_crtc; i++) {
1672 if (rdev->mode_info.crtcs[i] &&
1673 rdev->mode_info.crtcs[i]->enabled &&
1674 i != radeon_crtc->crtc_id &&
1675 radeon_crtc->pll_id == rdev->mode_info.crtcs[i]->pll_id) {
1676 /* one other crtc is using this pll don't turn
1677 * off the pll
1678 */
1679 goto done;
1680 }
1681 }
1682
1688 switch (radeon_crtc->pll_id) {1683 switch (radeon_crtc->pll_id) {
1689 case ATOM_PPLL1:1684 case ATOM_PPLL1:
1690 case ATOM_PPLL2:1685 case ATOM_PPLL2:
@@ -1701,6 +1696,7 @@ static void atombios_crtc_disable(struct drm_crtc *crtc) · 10 unmodified lines
1701 default:1696 default:
1702 break;1697 break;
1703 }1698 }
1699done:
1704 radeon_crtc->pll_id = -1;1700 radeon_crtc->pll_id = -1;
1705}1701}
1706 1702
drivers/gpu/drm/radeon/atombios_dp.c+12−17
@@ -577,30 +577,25 @@ int radeon_dp_get_panel_mode(struct drm_encoder *encoder, · 576 unmodified lines
577 struct radeon_device *rdev = dev->dev_private;577 struct radeon_device *rdev = dev->dev_private;
578 struct radeon_connector *radeon_connector = to_radeon_connector(connector);578 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
579 int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;579 int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
580 u16 dp_bridge = radeon_connector_encoder_get_dp_bridge_encoder_id(connector);
581 u8 tmp;
580 582
581 if (!ASIC_IS_DCE4(rdev))583 if (!ASIC_IS_DCE4(rdev))
582 return panel_mode;584 return panel_mode;
583 585
584 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) ==586 if (dp_bridge != ENCODER_OBJECT_ID_NONE) {
585 ENCODER_OBJECT_ID_NUTMEG)587 /* DP bridge chips */
586 panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE;588 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP);
587 else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) ==589 if (tmp & 1)
588 ENCODER_OBJECT_ID_TRAVIS) {590 panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE;
589 u8 id[6];591 else if ((dp_bridge == ENCODER_OBJECT_ID_NUTMEG) ||
590 int i;592 (dp_bridge == ENCODER_OBJECT_ID_TRAVIS))
591 for (i = 0; i < 6; i++)
592 id[i] = radeon_read_dpcd_reg(radeon_connector, 0x503 + i);
593 if (id[0] == 0x73 &&
594 id[1] == 0x69 &&
595 id[2] == 0x76 &&
596 id[3] == 0x61 &&
597 id[4] == 0x72 &&
598 id[5] == 0x54)
599 panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE;593 panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE;
600 else594 else
601 panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE;595 panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
602 } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {596 } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
603 u8 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP);597 /* eDP */
598 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP);
604 if (tmp & 1)599 if (tmp & 1)
605 panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE;600 panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE;
606 }601 }
drivers/gpu/drm/radeon/atombios_encoders.c+73−67
@@ -1379,6 +1379,8 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) · 1378 unmodified lines
1379 struct drm_device *dev = encoder->dev;1379 struct drm_device *dev = encoder->dev;
1380 struct radeon_device *rdev = dev->dev_private;1380 struct radeon_device *rdev = dev->dev_private;
1381 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);1381 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1382 struct drm_encoder *ext_encoder = radeon_get_external_encoder(encoder);
1383 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
1382 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);1384 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
1383 struct radeon_connector *radeon_connector = NULL;1385 struct radeon_connector *radeon_connector = NULL;
1384 struct radeon_connector_atom_dig *radeon_dig_connector = NULL;1386 struct radeon_connector_atom_dig *radeon_dig_connector = NULL;
@@ -1390,19 +1392,37 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) · 5 unmodified lines
1390 1392
1391 switch (mode) {1393 switch (mode) {
1392 case DRM_MODE_DPMS_ON:1394 case DRM_MODE_DPMS_ON:
1393 /* some early dce3.2 boards have a bug in their transmitter control table */1395 if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
1394 if ((rdev->family == CHIP_RV710) || (rdev->family == CHIP_RV730) ||1396 if (!connector)
1395 ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {1397 dig->panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
1396 if (ASIC_IS_DCE6(rdev)) {1398 else
1397 /* It seems we need to call ATOM_ENCODER_CMD_SETUP again1399 dig->panel_mode = radeon_dp_get_panel_mode(encoder, connector);
1398 * before reenabling encoder on DPMS ON, otherwise we never1400
1399 * get picture1401 /* setup and enable the encoder */
1400 */1402 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0);
1401 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0);1403 atombios_dig_encoder_setup(encoder,
1404 ATOM_ENCODER_CMD_SETUP_PANEL_MODE,
1405 dig->panel_mode);
1406 if (ext_encoder) {
1407 if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE61(rdev))
1408 atombios_external_encoder_setup(encoder, ext_encoder,
1409 EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP);
1402 }1410 }
1403 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);1411 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
1404 } else {1412 } else if (ASIC_IS_DCE4(rdev)) {
1413 /* setup and enable the encoder */
1414 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0);
1415 /* enable the transmitter */
1416 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
1405 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);1417 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
1418 } else {
1419 /* setup and enable the encoder and transmitter */
1420 atombios_dig_encoder_setup(encoder, ATOM_ENABLE, 0);
1421 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0);
1422 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
1423 /* some early dce3.2 boards have a bug in their transmitter control table */
1424 if ((rdev->family != CHIP_RV710) || (rdev->family != CHIP_RV730))
1425 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
1406 }1426 }
1407 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {1427 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
1408 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {1428 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
@@ -1420,10 +1440,19 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) · 11 unmodified lines
1420 case DRM_MODE_DPMS_STANDBY:1440 case DRM_MODE_DPMS_STANDBY:
1421 case DRM_MODE_DPMS_SUSPEND:1441 case DRM_MODE_DPMS_SUSPEND:
1422 case DRM_MODE_DPMS_OFF:1442 case DRM_MODE_DPMS_OFF:
1423 if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev))1443 if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
1444 /* disable the transmitter */
1424 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);1445 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
1425 else1446 } else if (ASIC_IS_DCE4(rdev)) {
1447 /* disable the transmitter */
1448 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT, 0, 0);
1449 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
1450 } else {
1451 /* disable the encoder and transmitter */
1426 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT, 0, 0);1452 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT, 0, 0);
1453 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
1454 atombios_dig_encoder_setup(encoder, ATOM_DISABLE, 0);
1455 }
1427 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {1456 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
1428 if (ASIC_IS_DCE4(rdev))1457 if (ASIC_IS_DCE4(rdev))
1429 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_OFF, 0);1458 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_OFF, 0);
@@ -1740,13 +1769,34 @@ static int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder) · 310 unmodified lines
1740 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc);1769 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc);
1741 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);1770 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1742 struct drm_encoder *test_encoder;1771 struct drm_encoder *test_encoder;
1743 struct radeon_encoder_atom_dig *dig;1772 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
1744 uint32_t dig_enc_in_use = 0;1773 uint32_t dig_enc_in_use = 0;
1745 1774
1746 /* DCE4/5 */1775 if (ASIC_IS_DCE6(rdev)) {
1747 if (ASIC_IS_DCE4(rdev)) {1776 /* DCE6 */
1748 dig = radeon_encoder->enc_priv;1777 switch (radeon_encoder->encoder_id) {
1749 if (ASIC_IS_DCE41(rdev)) {1778 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
1779 if (dig->linkb)
1780 return 1;
1781 else
1782 return 0;
1783 break;
1784 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
1785 if (dig->linkb)
1786 return 3;
1787 else
1788 return 2;
1789 break;
1790 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
1791 if (dig->linkb)
1792 return 5;
1793 else
1794 return 4;
1795 break;
1796 }
1797 } else if (ASIC_IS_DCE4(rdev)) {
1798 /* DCE4/5 */
1799 if (ASIC_IS_DCE41(rdev) && !ASIC_IS_DCE61(rdev)) {
1750 /* ontario follows DCE4 */1800 /* ontario follows DCE4 */
1751 if (rdev->family == CHIP_PALM) {1801 if (rdev->family == CHIP_PALM) {
1752 if (dig->linkb)1802 if (dig->linkb)
@@ -1848,10 +1898,12 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder, · 95 unmodified lines
1848 struct drm_device *dev = encoder->dev;1898 struct drm_device *dev = encoder->dev;
1849 struct radeon_device *rdev = dev->dev_private;1899 struct radeon_device *rdev = dev->dev_private;
1850 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);1900 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1851 struct drm_encoder *ext_encoder = radeon_get_external_encoder(encoder);
1852 1901
1853 radeon_encoder->pixel_clock = adjusted_mode->clock;1902 radeon_encoder->pixel_clock = adjusted_mode->clock;
1854 1903
1904 /* need to call this here rather than in prepare() since we need some crtc info */
1905 radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
1906
1855 if (ASIC_IS_AVIVO(rdev) && !ASIC_IS_DCE4(rdev)) {1907 if (ASIC_IS_AVIVO(rdev) && !ASIC_IS_DCE4(rdev)) {
1856 if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT | ATOM_DEVICE_TV_SUPPORT))1908 if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT | ATOM_DEVICE_TV_SUPPORT))
1857 atombios_yuv_setup(encoder, true);1909 atombios_yuv_setup(encoder, true);
@@ -1870,38 +1922,7 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder, · 12 unmodified lines
1870 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:1922 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
1871 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:1923 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
1872 case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:1924 case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
1873 if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {1925 /* handled in dpms */
1874 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
1875 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
1876
1877 if (!connector)
1878 dig->panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
1879 else
1880 dig->panel_mode = radeon_dp_get_panel_mode(encoder, connector);
1881
1882 /* setup and enable the encoder */
1883 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0);
1884 atombios_dig_encoder_setup(encoder,
1885 ATOM_ENCODER_CMD_SETUP_PANEL_MODE,
1886 dig->panel_mode);
1887 } else if (ASIC_IS_DCE4(rdev)) {
1888 /* disable the transmitter */
1889 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
1890 /* setup and enable the encoder */
1891 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0);
1892
1893 /* enable the transmitter */
1894 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
1895 } else {
1896 /* disable the encoder and transmitter */
1897 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
1898 atombios_dig_encoder_setup(encoder, ATOM_DISABLE, 0);
1899
1900 /* setup and enable the encoder and transmitter */
1901 atombios_dig_encoder_setup(encoder, ATOM_ENABLE, 0);
1902 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0);
1903 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
1904 }
1905 break;1926 break;
1906 case ENCODER_OBJECT_ID_INTERNAL_DDI:1927 case ENCODER_OBJECT_ID_INTERNAL_DDI:
1907 case ENCODER_OBJECT_ID_INTERNAL_DVO1:1928 case ENCODER_OBJECT_ID_INTERNAL_DVO1:
@@ -1922,14 +1943,6 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder, · 14 unmodified lines
1922 break;1943 break;
1923 }1944 }
1924 1945
1925 if (ext_encoder) {
1926 if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE61(rdev))
1927 atombios_external_encoder_setup(encoder, ext_encoder,
1928 EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP);
1929 else
1930 atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE);
1931 }
1932
1933 atombios_apply_encoder_quirks(encoder, adjusted_mode);1946 atombios_apply_encoder_quirks(encoder, adjusted_mode);
1934 1947
1935 if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) {1948 if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) {
@@ -2116,7 +2129,6 @@ static void radeon_atom_encoder_prepare(struct drm_encoder *encoder) · 180 unmodified lines
2116 }2129 }
2117 2130
2118 radeon_atom_output_lock(encoder, true);2131 radeon_atom_output_lock(encoder, true);
2119 radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
2120 2132
2121 if (connector) {2133 if (connector) {
2122 struct radeon_connector *radeon_connector = to_radeon_connector(connector);2134 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
@@ -2137,6 +2149,7 @@ static void radeon_atom_encoder_prepare(struct drm_encoder *encoder) · 14 unmodified lines
2137 2149
2138static void radeon_atom_encoder_commit(struct drm_encoder *encoder)2150static void radeon_atom_encoder_commit(struct drm_encoder *encoder)
2139{2151{
2152 /* need to call this here as we need the crtc set up */
2140 radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_ON);2153 radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_ON);
2141 radeon_atom_output_lock(encoder, false);2154 radeon_atom_output_lock(encoder, false);
2142}2155}
@@ -2177,14 +2190,7 @@ static void radeon_atom_encoder_disable(struct drm_encoder *encoder) · 34 unmodified lines
2177 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:2190 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
2178 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:2191 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
2179 case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:2192 case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
2180 if (ASIC_IS_DCE4(rdev))2193 /* handled in dpms */
2181 /* disable the transmitter */
2182 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
2183 else {
2184 /* disable the encoder and transmitter */
2185 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
2186 atombios_dig_encoder_setup(encoder, ATOM_DISABLE, 0);
2187 }
2188 break;2194 break;
2189 case ENCODER_OBJECT_ID_INTERNAL_DDI:2195 case ENCODER_OBJECT_ID_INTERNAL_DDI:
2190 case ENCODER_OBJECT_ID_INTERNAL_DVO1:2196 case ENCODER_OBJECT_ID_INTERNAL_DVO1:
drivers/gpu/drm/radeon/r600_cs.c+26−4
@@ -63,6 +63,7 @@ struct r600_cs_track { · 62 unmodified lines
63 u32 cb_color_size_idx[8]; /* unused */63 u32 cb_color_size_idx[8]; /* unused */
64 u32 cb_target_mask;64 u32 cb_target_mask;
65 u32 cb_shader_mask; /* unused */65 u32 cb_shader_mask; /* unused */
66 bool is_resolve;
66 u32 cb_color_size[8];67 u32 cb_color_size[8];
67 u32 vgt_strmout_en;68 u32 vgt_strmout_en;
68 u32 vgt_strmout_buffer_en;69 u32 vgt_strmout_buffer_en;
@@ -315,7 +316,15 @@ static void r600_cs_track_init(struct r600_cs_track *track) · 246 unmodified lines
315 track->cb_color_bo[i] = NULL;316 track->cb_color_bo[i] = NULL;
316 track->cb_color_bo_offset[i] = 0xFFFFFFFF;317 track->cb_color_bo_offset[i] = 0xFFFFFFFF;
317 track->cb_color_bo_mc[i] = 0xFFFFFFFF;318 track->cb_color_bo_mc[i] = 0xFFFFFFFF;
318 }319 track->cb_color_frag_bo[i] = NULL;
320 track->cb_color_frag_offset[i] = 0xFFFFFFFF;
321 track->cb_color_tile_bo[i] = NULL;
322 track->cb_color_tile_offset[i] = 0xFFFFFFFF;
323 track->cb_color_mask[i] = 0xFFFFFFFF;
324 }
325 track->is_resolve = false;
326 track->nsamples = 16;
327 track->log_nsamples = 4;
319 track->cb_target_mask = 0xFFFFFFFF;328 track->cb_target_mask = 0xFFFFFFFF;
320 track->cb_shader_mask = 0xFFFFFFFF;329 track->cb_shader_mask = 0xFFFFFFFF;
321 track->cb_dirty = true;330 track->cb_dirty = true;
@@ -352,6 +361,8 @@ static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i) · 30 unmodified lines
352 volatile u32 *ib = p->ib.ptr;361 volatile u32 *ib = p->ib.ptr;
353 unsigned array_mode;362 unsigned array_mode;
354 u32 format;363 u32 format;
364 /* When resolve is used, the second colorbuffer has always 1 sample. */
365 unsigned nsamples = track->is_resolve && i == 1 ? 1 : track->nsamples;
355 366
356 size = radeon_bo_size(track->cb_color_bo[i]) - track->cb_color_bo_offset[i];367 size = radeon_bo_size(track->cb_color_bo[i]) - track->cb_color_bo_offset[i];
357 format = G_0280A0_FORMAT(track->cb_color_info[i]);368 format = G_0280A0_FORMAT(track->cb_color_info[i]);
@@ -375,7 +386,7 @@ static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i) · 17 unmodified lines
375 array_check.group_size = track->group_size;386 array_check.group_size = track->group_size;
376 array_check.nbanks = track->nbanks;387 array_check.nbanks = track->nbanks;
377 array_check.npipes = track->npipes;388 array_check.npipes = track->npipes;
378 array_check.nsamples = track->nsamples;389 array_check.nsamples = nsamples;
379 array_check.blocksize = r600_fmt_get_blocksize(format);390 array_check.blocksize = r600_fmt_get_blocksize(format);
380 if (r600_get_array_mode_alignment(&array_check,391 if (r600_get_array_mode_alignment(&array_check,
381 &pitch_align, &height_align, &depth_align, &base_align)) {392 &pitch_align, &height_align, &depth_align, &base_align)) {
@@ -421,7 +432,7 @@ static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i) · 39 unmodified lines
421 432
422 /* check offset */433 /* check offset */
423 tmp = r600_fmt_get_nblocksy(format, height) * r600_fmt_get_nblocksx(format, pitch) *434 tmp = r600_fmt_get_nblocksy(format, height) * r600_fmt_get_nblocksx(format, pitch) *
424 r600_fmt_get_blocksize(format) * track->nsamples;435 r600_fmt_get_blocksize(format) * nsamples;
425 switch (array_mode) {436 switch (array_mode) {
426 default:437 default:
427 case V_0280A0_ARRAY_LINEAR_GENERAL:438 case V_0280A0_ARRAY_LINEAR_GENERAL:
@@ -792,6 +803,12 @@ static int r600_cs_track_check(struct radeon_cs_parser *p) · 364 unmodified lines
792 */803 */
793 if (track->cb_dirty) {804 if (track->cb_dirty) {
794 tmp = track->cb_target_mask;805 tmp = track->cb_target_mask;
806
807 /* We must check both colorbuffers for RESOLVE. */
808 if (track->is_resolve) {
809 tmp |= 0xff;
810 }
811
795 for (i = 0; i < 8; i++) {812 for (i = 0; i < 8; i++) {
796 if ((tmp >> (i * 4)) & 0xF) {813 if ((tmp >> (i * 4)) & 0xF) {
797 /* at least one component is enabled */814 /* at least one component is enabled */
@@ -1281,6 +1298,11 @@ static int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx) · 483 unmodified lines
1281 track->nsamples = 1 << tmp;1298 track->nsamples = 1 << tmp;
1282 track->cb_dirty = true;1299 track->cb_dirty = true;
1283 break;1300 break;
1301 case R_028808_CB_COLOR_CONTROL:
1302 tmp = G_028808_SPECIAL_OP(radeon_get_ib_value(p, idx));
1303 track->is_resolve = tmp == V_028808_SPECIAL_RESOLVE_BOX;
1304 track->cb_dirty = true;
1305 break;
1284 case R_0280A0_CB_COLOR0_INFO:1306 case R_0280A0_CB_COLOR0_INFO:
1285 case R_0280A4_CB_COLOR1_INFO:1307 case R_0280A4_CB_COLOR1_INFO:
1286 case R_0280A8_CB_COLOR2_INFO:1308 case R_0280A8_CB_COLOR2_INFO:
@@ -1416,7 +1438,7 @@ static int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx) · 129 unmodified lines
1416 case R_028118_CB_COLOR6_MASK:1438 case R_028118_CB_COLOR6_MASK:
1417 case R_02811C_CB_COLOR7_MASK:1439 case R_02811C_CB_COLOR7_MASK:
1418 tmp = (reg - R_028100_CB_COLOR0_MASK) / 4;1440 tmp = (reg - R_028100_CB_COLOR0_MASK) / 4;
1419 track->cb_color_mask[tmp] = ib[idx];1441 track->cb_color_mask[tmp] = radeon_get_ib_value(p, idx);
1420 if (G_0280A0_TILE_MODE(track->cb_color_info[tmp])) {1442 if (G_0280A0_TILE_MODE(track->cb_color_info[tmp])) {
1421 track->cb_dirty = true;1443 track->cb_dirty = true;
1422 }1444 }
drivers/gpu/drm/radeon/r600d.h+8−0
@@ -66,6 +66,14 @@ · 65 unmodified lines
66#define CC_RB_BACKEND_DISABLE 0x98F466#define CC_RB_BACKEND_DISABLE 0x98F4
67#define BACKEND_DISABLE(x) ((x) << 16)67#define BACKEND_DISABLE(x) ((x) << 16)
68 68
69#define R_028808_CB_COLOR_CONTROL 0x28808
70#define S_028808_SPECIAL_OP(x) (((x) & 0x7) << 4)
71#define G_028808_SPECIAL_OP(x) (((x) >> 4) & 0x7)
72#define C_028808_SPECIAL_OP 0xFFFFFF8F
73#define V_028808_SPECIAL_NORMAL 0x00
74#define V_028808_SPECIAL_DISABLE 0x01
75#define V_028808_SPECIAL_RESOLVE_BOX 0x07
76
69#define CB_COLOR0_BASE 0x2804077#define CB_COLOR0_BASE 0x28040
70#define CB_COLOR1_BASE 0x2804478#define CB_COLOR1_BASE 0x28044
71#define CB_COLOR2_BASE 0x2804879#define CB_COLOR2_BASE 0x28048
drivers/gpu/drm/radeon/radeon_device.c+4−1
@@ -1051,7 +1051,7 @@ int radeon_device_init(struct radeon_device *rdev, · 1050 unmodified lines
1051 if (rdev->flags & RADEON_IS_AGP)1051 if (rdev->flags & RADEON_IS_AGP)
1052 rdev->need_dma32 = true;1052 rdev->need_dma32 = true;
1053 if ((rdev->flags & RADEON_IS_PCI) &&1053 if ((rdev->flags & RADEON_IS_PCI) &&
1054 (rdev->family < CHIP_RS400))1054 (rdev->family <= CHIP_RS740))
1055 rdev->need_dma32 = true;1055 rdev->need_dma32 = true;
1056 1056
1057 dma_bits = rdev->need_dma32 ? 32 : 40;1057 dma_bits = rdev->need_dma32 ? 32 : 40;
@@ -1346,12 +1346,15 @@ retry: · 288 unmodified lines
1346 for (i = 0; i < RADEON_NUM_RINGS; ++i) {1346 for (i = 0; i < RADEON_NUM_RINGS; ++i) {
1347 radeon_ring_restore(rdev, &rdev->ring[i],1347 radeon_ring_restore(rdev, &rdev->ring[i],
1348 ring_sizes[i], ring_data[i]);1348 ring_sizes[i], ring_data[i]);
1349 ring_sizes[i] = 0;
1350 ring_data[i] = NULL;
1349 }1351 }
1350 1352
1351 r = radeon_ib_ring_tests(rdev);1353 r = radeon_ib_ring_tests(rdev);
1352 if (r) {1354 if (r) {
1353 dev_err(rdev->dev, "ib ring test failed (%d).\n", r);1355 dev_err(rdev->dev, "ib ring test failed (%d).\n", r);
1354 if (saved) {1356 if (saved) {
1357 saved = false;
1355 radeon_suspend(rdev);1358 radeon_suspend(rdev);
1356 goto retry;1359 goto retry;
1357 }1360 }
drivers/gpu/drm/radeon/radeon_drv.c+2−1
@@ -63,9 +63,10 @@ · 62 unmodified lines
63 * 2.19.0 - r600-eg: MSAA textures63 * 2.19.0 - r600-eg: MSAA textures
64 * 2.20.0 - r600-si: RADEON_INFO_TIMESTAMP query64 * 2.20.0 - r600-si: RADEON_INFO_TIMESTAMP query
65 * 2.21.0 - r600-r700: FMASK and CMASK65 * 2.21.0 - r600-r700: FMASK and CMASK
66 * 2.22.0 - r600 only: RESOLVE_BOX allowed
66 */67 */
67#define KMS_DRIVER_MAJOR 268#define KMS_DRIVER_MAJOR 2
68#define KMS_DRIVER_MINOR 2169#define KMS_DRIVER_MINOR 22
69#define KMS_DRIVER_PATCHLEVEL 070#define KMS_DRIVER_PATCHLEVEL 0
70int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);71int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
71int radeon_driver_unload_kms(struct drm_device *dev);72int radeon_driver_unload_kms(struct drm_device *dev);
drivers/gpu/drm/radeon/reg_srcs/r600+0−1
@@ -744,7 +744,6 @@ r600 0x9400 · 743 unmodified lines
7440x00028C38 CB_CLRCMP_DST7440x00028C38 CB_CLRCMP_DST
7450x00028C3C CB_CLRCMP_MSK7450x00028C3C CB_CLRCMP_MSK
7460x00028C34 CB_CLRCMP_SRC7460x00028C34 CB_CLRCMP_SRC
7470x00028808 CB_COLOR_CONTROL
7480x0002842C CB_FOG_BLUE7470x0002842C CB_FOG_BLUE
7490x00028428 CB_FOG_GREEN7480x00028428 CB_FOG_GREEN
7500x00028424 CB_FOG_RED7490x00028424 CB_FOG_RED
drivers/hid/hid-core.c+5−3
@@ -996,7 +996,8 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, · 995 unmodified lines
996 struct hid_driver *hdrv = hid->driver;996 struct hid_driver *hdrv = hid->driver;
997 int ret;997 int ret;
998 998
999 hid_dump_input(hid, usage, value);999 if (!list_empty(&hid->debug_list))
1000 hid_dump_input(hid, usage, value);
1000 1001
1001 if (hdrv && hdrv->event && hid_match_usage(hid, usage)) {1002 if (hdrv && hdrv->event && hid_match_usage(hid, usage)) {
1002 ret = hdrv->event(hid, field, usage, value);1003 ret = hdrv->event(hid, field, usage, value);
@@ -1558,7 +1559,9 @@ static const struct hid_device_id hid_have_special_driver[] = { · 555 unmodified lines
1558 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },1559 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },
1559 { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },1560 { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
1560 { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },1561 { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },
1561 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },1562#if IS_ENABLED(CONFIG_HID_LENOVO_TPKBD)
1563 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
1564#endif
1562 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },1565 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
1563 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },1566 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
1564 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },1567 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
@@ -1624,7 +1627,6 @@ static const struct hid_device_id hid_have_special_driver[] = { · 59 unmodified lines
1624 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },1627 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
1625 { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },1628 { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
1626 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },1629 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
1627 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
1628 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },1630 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
1629 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },1631 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
1630 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },1632 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },
drivers/hid/hid-logitech-dj.c+2−2
@@ -439,7 +439,7 @@ static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev) · 438 unmodified lines
439 struct dj_report *dj_report;439 struct dj_report *dj_report;
440 int retval;440 int retval;
441 441
442 dj_report = kzalloc(sizeof(dj_report), GFP_KERNEL);442 dj_report = kzalloc(sizeof(struct dj_report), GFP_KERNEL);
443 if (!dj_report)443 if (!dj_report)
444 return -ENOMEM;444 return -ENOMEM;
445 dj_report->report_id = REPORT_ID_DJ_SHORT;445 dj_report->report_id = REPORT_ID_DJ_SHORT;
@@ -456,7 +456,7 @@ static int logi_dj_recv_switch_to_dj_mode(struct dj_receiver_dev *djrcv_dev, · 10 unmodified lines
456 struct dj_report *dj_report;456 struct dj_report *dj_report;
457 int retval;457 int retval;
458 458
459 dj_report = kzalloc(sizeof(dj_report), GFP_KERNEL);459 dj_report = kzalloc(sizeof(struct dj_report), GFP_KERNEL);
460 if (!dj_report)460 if (!dj_report)
461 return -ENOMEM;461 return -ENOMEM;
462 dj_report->report_id = REPORT_ID_DJ_SHORT;462 dj_report->report_id = REPORT_ID_DJ_SHORT;
drivers/hid/usbhid/hid-quirks.c+1−0
@@ -70,6 +70,7 @@ static const struct hid_blacklist { · 69 unmodified lines
70 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },70 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
71 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },71 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
72 { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },72 { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
73 { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
73 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },74 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
74 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },75 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },
75 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },76 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },
drivers/hwmon/asus_atk0110.c+6−0
@@ -34,6 +34,12 @@ static const struct dmi_system_id __initconst atk_force_new_if[] = { · 33 unmodified lines
34 .matches = {34 .matches = {
35 DMI_MATCH(DMI_BOARD_NAME, "SABERTOOTH X58")35 DMI_MATCH(DMI_BOARD_NAME, "SABERTOOTH X58")
36 }36 }
37 }, {
38 /* Old interface reads the same sensor for fan0 and fan1 */
39 .ident = "Asus M5A78L",
40 .matches = {
41 DMI_MATCH(DMI_BOARD_NAME, "M5A78L")
42 }
37 },43 },
38 { }44 { }
39};45};
drivers/ide/ide-pm.c+2−2
@@ -4,7 +4,7 @@ · 3 unmodified lines
4 4
5int generic_ide_suspend(struct device *dev, pm_message_t mesg)5int generic_ide_suspend(struct device *dev, pm_message_t mesg)
6{6{
7 ide_drive_t *drive = dev_get_drvdata(dev);7 ide_drive_t *drive = to_ide_device(dev);
8 ide_drive_t *pair = ide_get_pair_dev(drive);8 ide_drive_t *pair = ide_get_pair_dev(drive);
9 ide_hwif_t *hwif = drive->hwif;9 ide_hwif_t *hwif = drive->hwif;
10 struct request *rq;10 struct request *rq;
@@ -40,7 +40,7 @@ int generic_ide_suspend(struct device *dev, pm_message_t mesg) · 29 unmodified lines
40 40
41int generic_ide_resume(struct device *dev)41int generic_ide_resume(struct device *dev)
42{42{
43 ide_drive_t *drive = dev_get_drvdata(dev);43 ide_drive_t *drive = to_ide_device(dev);
44 ide_drive_t *pair = ide_get_pair_dev(drive);44 ide_drive_t *pair = ide_get_pair_dev(drive);
45 ide_hwif_t *hwif = drive->hwif;45 ide_hwif_t *hwif = drive->hwif;
46 struct request *rq;46 struct request *rq;
drivers/input/keyboard/imx_keypad.c+3−0
@@ -358,6 +358,7 @@ static void imx_keypad_inhibit(struct imx_keypad *keypad) · 357 unmodified lines
358 /* Inhibit KDI and KRI interrupts. */358 /* Inhibit KDI and KRI interrupts. */
359 reg_val = readw(keypad->mmio_base + KPSR);359 reg_val = readw(keypad->mmio_base + KPSR);
360 reg_val &= ~(KBD_STAT_KRIE | KBD_STAT_KDIE);360 reg_val &= ~(KBD_STAT_KRIE | KBD_STAT_KDIE);
361 reg_val |= KBD_STAT_KPKR | KBD_STAT_KPKD;
361 writew(reg_val, keypad->mmio_base + KPSR);362 writew(reg_val, keypad->mmio_base + KPSR);
362 363
363 /* Colums as open drain and disable all rows */364 /* Colums as open drain and disable all rows */
@@ -515,7 +516,9 @@ static int __devinit imx_keypad_probe(struct platform_device *pdev) · 151 unmodified lines
515 input_set_drvdata(input_dev, keypad);516 input_set_drvdata(input_dev, keypad);
516 517
517 /* Ensure that the keypad will stay dormant until opened */518 /* Ensure that the keypad will stay dormant until opened */
519 clk_enable(keypad->clk);
518 imx_keypad_inhibit(keypad);520 imx_keypad_inhibit(keypad);
521 clk_disable(keypad->clk);
519 522
520 error = request_irq(irq, imx_keypad_irq_handler, 0,523 error = request_irq(irq, imx_keypad_irq_handler, 0,
521 pdev->name, keypad);524 pdev->name, keypad);
drivers/input/serio/i8042-x86ia64io.h+14−0
@@ -176,6 +176,20 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = { · 175 unmodified lines
176 DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"),176 DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"),
177 },177 },
178 },178 },
179 {
180 /* Gigabyte T1005 - defines wrong chassis type ("Other") */
181 .matches = {
182 DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
183 DMI_MATCH(DMI_PRODUCT_NAME, "T1005"),
184 },
185 },
186 {
187 /* Gigabyte T1005M/P - defines wrong chassis type ("Other") */
188 .matches = {
189 DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
190 DMI_MATCH(DMI_PRODUCT_NAME, "T1005M/P"),
191 },
192 },
179 {193 {
180 .matches = {194 .matches = {
181 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),195 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
drivers/input/tablet/wacom_wac.c+5−1
@@ -1848,7 +1848,10 @@ static const struct wacom_features wacom_features_0x2A = · 1847 unmodified lines
1848 { "Wacom Intuos5 M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047,1848 { "Wacom Intuos5 M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047,
1849 63, INTUOS5, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };1849 63, INTUOS5, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1850static const struct wacom_features wacom_features_0xF4 =1850static const struct wacom_features wacom_features_0xF4 =
1851 { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047,1851 { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047,
1852 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1853static const struct wacom_features wacom_features_0xF8 =
1854 { "Wacom Cintiq 24HD touch", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047,
1852 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };1855 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1853static const struct wacom_features wacom_features_0x3F =1856static const struct wacom_features wacom_features_0x3F =
1854 { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023,1857 { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023,
@@ -2091,6 +2094,7 @@ const struct usb_device_id wacom_ids[] = { · 236 unmodified lines
2091 { USB_DEVICE_WACOM(0xEF) },2094 { USB_DEVICE_WACOM(0xEF) },
2092 { USB_DEVICE_WACOM(0x47) },2095 { USB_DEVICE_WACOM(0x47) },
2093 { USB_DEVICE_WACOM(0xF4) },2096 { USB_DEVICE_WACOM(0xF4) },
2097 { USB_DEVICE_WACOM(0xF8) },
2094 { USB_DEVICE_WACOM(0xFA) },2098 { USB_DEVICE_WACOM(0xFA) },
2095 { USB_DEVICE_LENOVO(0x6004) },2099 { USB_DEVICE_LENOVO(0x6004) },
2096 { }2100 { }
drivers/input/touchscreen/edt-ft5x06.c+1−1
@@ -602,6 +602,7 @@ edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata) · 601 unmodified lines
602{602{
603 if (tsdata->debug_dir)603 if (tsdata->debug_dir)
604 debugfs_remove_recursive(tsdata->debug_dir);604 debugfs_remove_recursive(tsdata->debug_dir);
605 kfree(tsdata->raw_buffer);
605}606}
606 607
607#else608#else
@@ -843,7 +844,6 @@ static int __devexit edt_ft5x06_ts_remove(struct i2c_client *client) · 235 unmodified lines
843 if (gpio_is_valid(pdata->reset_pin))844 if (gpio_is_valid(pdata->reset_pin))
844 gpio_free(pdata->reset_pin);845 gpio_free(pdata->reset_pin);
845 846
846 kfree(tsdata->raw_buffer);
847 kfree(tsdata);847 kfree(tsdata);
848 848
849 return 0;849 return 0;
drivers/mmc/card/block.c+25−1
@@ -1411,7 +1411,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) · 1410 unmodified lines
1411 /* complete ongoing async transfer before issuing discard */1411 /* complete ongoing async transfer before issuing discard */
1412 if (card->host->areq)1412 if (card->host->areq)
1413 mmc_blk_issue_rw_rq(mq, NULL);1413 mmc_blk_issue_rw_rq(mq, NULL);
1414 if (req->cmd_flags & REQ_SECURE)1414 if (req->cmd_flags & REQ_SECURE &&
1415 !(card->quirks & MMC_QUIRK_SEC_ERASE_TRIM_BROKEN))
1415 ret = mmc_blk_issue_secdiscard_rq(mq, req);1416 ret = mmc_blk_issue_secdiscard_rq(mq, req);
1416 else1417 else
1417 ret = mmc_blk_issue_discard_rq(mq, req);1418 ret = mmc_blk_issue_discard_rq(mq, req);
@@ -1716,6 +1717,7 @@ force_ro_fail: · 298 unmodified lines
1716#define CID_MANFID_SANDISK 0x21717#define CID_MANFID_SANDISK 0x2
1717#define CID_MANFID_TOSHIBA 0x111718#define CID_MANFID_TOSHIBA 0x11
1718#define CID_MANFID_MICRON 0x131719#define CID_MANFID_MICRON 0x13
1720#define CID_MANFID_SAMSUNG 0x15
1719 1721
1720static const struct mmc_fixup blk_fixups[] =1722static const struct mmc_fixup blk_fixups[] =
1721{1723{
@@ -1752,6 +1754,28 @@ static const struct mmc_fixup blk_fixups[] = · 30 unmodified lines
1752 MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc,1754 MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc,
1753 MMC_QUIRK_LONG_READ_TIME),1755 MMC_QUIRK_LONG_READ_TIME),
1754 1756
1757 /*
1758 * On these Samsung MoviNAND parts, performing secure erase or
1759 * secure trim can result in unrecoverable corruption due to a
1760 * firmware bug.
1761 */
1762 MMC_FIXUP("M8G2FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
1763 MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
1764 MMC_FIXUP("MAG4FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
1765 MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
1766 MMC_FIXUP("MBG8FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
1767 MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
1768 MMC_FIXUP("MCGAFA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
1769 MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
1770 MMC_FIXUP("VAL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
1771 MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
1772 MMC_FIXUP("VYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
1773 MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
1774 MMC_FIXUP("KYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
1775 MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
1776 MMC_FIXUP("VZL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
1777 MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
1778
1755 END_FIXUP1779 END_FIXUP
1756};1780};
1757 1781
drivers/mmc/host/atmel-mci.c+5−1
@@ -81,6 +81,7 @@ struct atmel_mci_caps { · 80 unmodified lines
81 bool has_bad_data_ordering;81 bool has_bad_data_ordering;
82 bool need_reset_after_xfer;82 bool need_reset_after_xfer;
83 bool need_blksz_mul_4;83 bool need_blksz_mul_4;
84 bool need_notbusy_for_read_ops;
84};85};
85 86
86struct atmel_mci_dma {87struct atmel_mci_dma {
@@ -1625,7 +1626,8 @@ static void atmci_tasklet_func(unsigned long priv) · 1538 unmodified lines
1625 __func__);1626 __func__);
1626 atmci_set_completed(host, EVENT_XFER_COMPLETE);1627 atmci_set_completed(host, EVENT_XFER_COMPLETE);
1627 1628
1628 if (host->data->flags & MMC_DATA_WRITE) {1629 if (host->caps.need_notbusy_for_read_ops ||
1630 (host->data->flags & MMC_DATA_WRITE)) {
1629 atmci_writel(host, ATMCI_IER, ATMCI_NOTBUSY);1631 atmci_writel(host, ATMCI_IER, ATMCI_NOTBUSY);
1630 state = STATE_WAITING_NOTBUSY;1632 state = STATE_WAITING_NOTBUSY;
1631 } else if (host->mrq->stop) {1633 } else if (host->mrq->stop) {
@@ -2218,6 +2220,7 @@ static void __init atmci_get_cap(struct atmel_mci *host) · 586 unmodified lines
2218 host->caps.has_bad_data_ordering = 1;2220 host->caps.has_bad_data_ordering = 1;
2219 host->caps.need_reset_after_xfer = 1;2221 host->caps.need_reset_after_xfer = 1;
2220 host->caps.need_blksz_mul_4 = 1;2222 host->caps.need_blksz_mul_4 = 1;
2223 host->caps.need_notbusy_for_read_ops = 0;
2221 2224
2222 /* keep only major version number */2225 /* keep only major version number */
2223 switch (version & 0xf00) {2226 switch (version & 0xf00) {
@@ -2238,6 +2241,7 @@ static void __init atmci_get_cap(struct atmel_mci *host) · 14 unmodified lines
2238 case 0x200:2241 case 0x200:
2239 host->caps.has_rwproof = 1;2242 host->caps.has_rwproof = 1;
2240 host->caps.need_blksz_mul_4 = 0;2243 host->caps.need_blksz_mul_4 = 0;
2244 host->caps.need_notbusy_for_read_ops = 1;
2241 case 0x100:2245 case 0x100:
2242 host->caps.has_bad_data_ordering = 0;2246 host->caps.has_bad_data_ordering = 0;
2243 host->caps.need_reset_after_xfer = 0;2247 host->caps.need_reset_after_xfer = 0;
drivers/mmc/host/bfin_sdh.c+0−7
@@ -49,13 +49,6 @@ · 48 unmodified lines
49#define bfin_write_SDH_CFG bfin_write_RSI_CFG49#define bfin_write_SDH_CFG bfin_write_RSI_CFG
50#endif50#endif
51 51
52struct dma_desc_array {
53 unsigned long start_addr;
54 unsigned short cfg;
55 unsigned short x_count;
56 short x_modify;
57} __packed;
58
59struct sdh_host {52struct sdh_host {
60 struct mmc_host *mmc;53 struct mmc_host *mmc;
61 spinlock_t lock;54 spinlock_t lock;
drivers/mmc/host/dw_mmc.c+46−39
@@ -627,6 +627,7 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot) · 626 unmodified lines
627{627{
628 struct dw_mci *host = slot->host;628 struct dw_mci *host = slot->host;
629 u32 div;629 u32 div;
630 u32 clk_en_a;
630 631
631 if (slot->clock != host->current_speed) {632 if (slot->clock != host->current_speed) {
632 div = host->bus_hz / slot->clock;633 div = host->bus_hz / slot->clock;
@@ -659,9 +660,11 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot) · 26 unmodified lines
659 mci_send_cmd(slot,660 mci_send_cmd(slot,
660 SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);661 SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);
661 662
662 /* enable clock */663 /* enable clock; only low power if no SDIO */
663 mci_writel(host, CLKENA, ((SDMMC_CLKEN_ENABLE |664 clk_en_a = SDMMC_CLKEN_ENABLE << slot->id;
664 SDMMC_CLKEN_LOW_PWR) << slot->id));665 if (!(mci_readl(host, INTMASK) & SDMMC_INT_SDIO(slot->id)))
666 clk_en_a |= SDMMC_CLKEN_LOW_PWR << slot->id;
667 mci_writel(host, CLKENA, clk_en_a);
665 668
666 /* inform CIU */669 /* inform CIU */
667 mci_send_cmd(slot,670 mci_send_cmd(slot,
@@ -862,6 +865,30 @@ static int dw_mci_get_cd(struct mmc_host *mmc) · 194 unmodified lines
862 return present;865 return present;
863}866}
864 867
868/*
869 * Disable lower power mode.
870 *
871 * Low power mode will stop the card clock when idle. According to the
872 * description of the CLKENA register we should disable low power mode
873 * for SDIO cards if we need SDIO interrupts to work.
874 *
875 * This function is fast if low power mode is already disabled.
876 */
877static void dw_mci_disable_low_power(struct dw_mci_slot *slot)
878{
879 struct dw_mci *host = slot->host;
880 u32 clk_en_a;
881 const u32 clken_low_pwr = SDMMC_CLKEN_LOW_PWR << slot->id;
882
883 clk_en_a = mci_readl(host, CLKENA);
884
885 if (clk_en_a & clken_low_pwr) {
886 mci_writel(host, CLKENA, clk_en_a & ~clken_low_pwr);
887 mci_send_cmd(slot, SDMMC_CMD_UPD_CLK |
888 SDMMC_CMD_PRV_DAT_WAIT, 0);
889 }
890}
891
865static void dw_mci_enable_sdio_irq(struct mmc_host *mmc, int enb)892static void dw_mci_enable_sdio_irq(struct mmc_host *mmc, int enb)
866{893{
867 struct dw_mci_slot *slot = mmc_priv(mmc);894 struct dw_mci_slot *slot = mmc_priv(mmc);
@@ -871,6 +898,14 @@ static void dw_mci_enable_sdio_irq(struct mmc_host *mmc, int enb) · 3 unmodified lines
871 /* Enable/disable Slot Specific SDIO interrupt */898 /* Enable/disable Slot Specific SDIO interrupt */
872 int_mask = mci_readl(host, INTMASK);899 int_mask = mci_readl(host, INTMASK);
873 if (enb) {900 if (enb) {
901 /*
902 * Turn off low power mode if it was enabled. This is a bit of
903 * a heavy operation and we disable / enable IRQs a lot, so
904 * we'll leave low power mode disabled and it will get
905 * re-enabled again in dw_mci_setup_bus().
906 */
907 dw_mci_disable_low_power(slot);
908
874 mci_writel(host, INTMASK,909 mci_writel(host, INTMASK,
875 (int_mask | SDMMC_INT_SDIO(slot->id)));910 (int_mask | SDMMC_INT_SDIO(slot->id)));
876 } else {911 } else {
@@ -1429,22 +1464,10 @@ static void dw_mci_read_data_pio(struct dw_mci *host) · 552 unmodified lines
1429 nbytes += len;1464 nbytes += len;
1430 remain -= len;1465 remain -= len;
1431 } while (remain);1466 } while (remain);
1432 sg_miter->consumed = offset;
1433 1467
1468 sg_miter->consumed = offset;
1434 status = mci_readl(host, MINTSTS);1469 status = mci_readl(host, MINTSTS);
1435 mci_writel(host, RINTSTS, SDMMC_INT_RXDR);1470 mci_writel(host, RINTSTS, SDMMC_INT_RXDR);
1436 if (status & DW_MCI_DATA_ERROR_FLAGS) {
1437 host->data_status = status;
1438 data->bytes_xfered += nbytes;
1439 sg_miter_stop(sg_miter);
1440 host->sg = NULL;
1441 smp_wmb();
1442
1443 set_bit(EVENT_DATA_ERROR, &host->pending_events);
1444
1445 tasklet_schedule(&host->tasklet);
1446 return;
1447 }
1448 } while (status & SDMMC_INT_RXDR); /*if the RXDR is ready read again*/1471 } while (status & SDMMC_INT_RXDR); /*if the RXDR is ready read again*/
1449 data->bytes_xfered += nbytes;1472 data->bytes_xfered += nbytes;
1450 1473
@@ -1497,23 +1520,10 @@ static void dw_mci_write_data_pio(struct dw_mci *host) · 46 unmodified lines
1497 nbytes += len;1520 nbytes += len;
1498 remain -= len;1521 remain -= len;
1499 } while (remain);1522 } while (remain);
1500 sg_miter->consumed = offset;
1501 1523
1524 sg_miter->consumed = offset;
1502 status = mci_readl(host, MINTSTS);1525 status = mci_readl(host, MINTSTS);
1503 mci_writel(host, RINTSTS, SDMMC_INT_TXDR);1526 mci_writel(host, RINTSTS, SDMMC_INT_TXDR);
1504 if (status & DW_MCI_DATA_ERROR_FLAGS) {
1505 host->data_status = status;
1506 data->bytes_xfered += nbytes;
1507 sg_miter_stop(sg_miter);
1508 host->sg = NULL;
1509
1510 smp_wmb();
1511
1512 set_bit(EVENT_DATA_ERROR, &host->pending_events);
1513
1514 tasklet_schedule(&host->tasklet);
1515 return;
1516 }
1517 } while (status & SDMMC_INT_TXDR); /* if TXDR write again */1527 } while (status & SDMMC_INT_TXDR); /* if TXDR write again */
1518 data->bytes_xfered += nbytes;1528 data->bytes_xfered += nbytes;
1519 1529
@@ -1547,12 +1557,11 @@ static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status) · 27 unmodified lines
1547static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)1557static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
1548{1558{
1549 struct dw_mci *host = dev_id;1559 struct dw_mci *host = dev_id;
1550 u32 status, pending;1560 u32 pending;
1551 unsigned int pass_count = 0;1561 unsigned int pass_count = 0;
1552 int i;1562 int i;
1553 1563
1554 do {1564 do {
1555 status = mci_readl(host, RINTSTS);
1556 pending = mci_readl(host, MINTSTS); /* read-only mask reg */1565 pending = mci_readl(host, MINTSTS); /* read-only mask reg */
1557 1566
1558 /*1567 /*
@@ -1570,7 +1579,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) · 11 unmodified lines
1570 1579
1571 if (pending & DW_MCI_CMD_ERROR_FLAGS) {1580 if (pending & DW_MCI_CMD_ERROR_FLAGS) {
1572 mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);1581 mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);
1573 host->cmd_status = status;1582 host->cmd_status = pending;
1574 smp_wmb();1583 smp_wmb();
1575 set_bit(EVENT_CMD_COMPLETE, &host->pending_events);1584 set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
1576 }1585 }
@@ -1578,18 +1587,16 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) · 1 unmodified line
1578 if (pending & DW_MCI_DATA_ERROR_FLAGS) {1587 if (pending & DW_MCI_DATA_ERROR_FLAGS) {
1579 /* if there is an error report DATA_ERROR */1588 /* if there is an error report DATA_ERROR */
1580 mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS);1589 mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS);
1581 host->data_status = status;1590 host->data_status = pending;
1582 smp_wmb();1591 smp_wmb();
1583 set_bit(EVENT_DATA_ERROR, &host->pending_events);1592 set_bit(EVENT_DATA_ERROR, &host->pending_events);
1584 if (!(pending & (SDMMC_INT_DTO | SDMMC_INT_DCRC |1593 tasklet_schedule(&host->tasklet);
1585 SDMMC_INT_SBE | SDMMC_INT_EBE)))
1586 tasklet_schedule(&host->tasklet);
1587 }1594 }
1588 1595
1589 if (pending & SDMMC_INT_DATA_OVER) {1596 if (pending & SDMMC_INT_DATA_OVER) {
1590 mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER);1597 mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER);
1591 if (!host->data_status)1598 if (!host->data_status)
1592 host->data_status = status;1599 host->data_status = pending;
1593 smp_wmb();1600 smp_wmb();
1594 if (host->dir_status == DW_MCI_RECV_STATUS) {1601 if (host->dir_status == DW_MCI_RECV_STATUS) {
1595 if (host->sg != NULL)1602 if (host->sg != NULL)
@@ -1613,7 +1620,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) · 17 unmodified lines
1613 1620
1614 if (pending & SDMMC_INT_CMD_DONE) {1621 if (pending & SDMMC_INT_CMD_DONE) {
1615 mci_writel(host, RINTSTS, SDMMC_INT_CMD_DONE);1622 mci_writel(host, RINTSTS, SDMMC_INT_CMD_DONE);
1616 dw_mci_cmd_interrupt(host, status);1623 dw_mci_cmd_interrupt(host, pending);
1617 }1624 }
1618 1625
1619 if (pending & SDMMC_INT_CD) {1626 if (pending & SDMMC_INT_CD) {
drivers/mmc/host/mxs-mmc.c+7−7
@@ -285,11 +285,11 @@ static irqreturn_t mxs_mmc_irq_handler(int irq, void *dev_id) · 284 unmodified lines
285 writel(stat & MXS_MMC_IRQ_BITS,285 writel(stat & MXS_MMC_IRQ_BITS,
286 host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_CLR);286 host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_CLR);
287 287
288 spin_unlock(&host->lock);
289
288 if ((stat & BM_SSP_CTRL1_SDIO_IRQ) && (stat & BM_SSP_CTRL1_SDIO_IRQ_EN))290 if ((stat & BM_SSP_CTRL1_SDIO_IRQ) && (stat & BM_SSP_CTRL1_SDIO_IRQ_EN))
289 mmc_signal_sdio_irq(host->mmc);291 mmc_signal_sdio_irq(host->mmc);
290 292
291 spin_unlock(&host->lock);
292
293 if (stat & BM_SSP_CTRL1_RESP_TIMEOUT_IRQ)293 if (stat & BM_SSP_CTRL1_RESP_TIMEOUT_IRQ)
294 cmd->error = -ETIMEDOUT;294 cmd->error = -ETIMEDOUT;
295 else if (stat & BM_SSP_CTRL1_RESP_ERR_IRQ)295 else if (stat & BM_SSP_CTRL1_RESP_ERR_IRQ)
@@ -644,11 +644,6 @@ static void mxs_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable) · 348 unmodified lines
644 host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET);644 host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET);
645 writel(BM_SSP_CTRL1_SDIO_IRQ_EN,645 writel(BM_SSP_CTRL1_SDIO_IRQ_EN,
646 host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_SET);646 host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_SET);
647
648 if (readl(host->base + HW_SSP_STATUS(host)) &
649 BM_SSP_STATUS_SDIO_IRQ)
650 mmc_signal_sdio_irq(host->mmc);
651
652 } else {647 } else {
653 writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK,648 writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK,
654 host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR);649 host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR);
@@ -657,6 +652,11 @@ static void mxs_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable) · 2 unmodified lines
657 }652 }
658 653
659 spin_unlock_irqrestore(&host->lock, flags);654 spin_unlock_irqrestore(&host->lock, flags);
655
656 if (enable && readl(host->base + HW_SSP_STATUS(host)) &
657 BM_SSP_STATUS_SDIO_IRQ)
658 mmc_signal_sdio_irq(host->mmc);
659
660}660}
661 661
662static const struct mmc_host_ops mxs_mmc_ops = {662static const struct mmc_host_ops mxs_mmc_ops = {
drivers/mmc/host/omap.c+11−4
@@ -33,7 +33,6 @@ · 32 unmodified lines
33#include <asm/io.h>33#include <asm/io.h>
34#include <asm/irq.h>34#include <asm/irq.h>
35 35
36#include <plat/board.h>
37#include <plat/mmc.h>36#include <plat/mmc.h>
38#include <asm/gpio.h>37#include <asm/gpio.h>
39#include <plat/dma.h>38#include <plat/dma.h>
@@ -668,7 +667,7 @@ mmc_omap_clk_timer(unsigned long data) · 628 unmodified lines
668static void667static void
669mmc_omap_xfer_data(struct mmc_omap_host *host, int write)668mmc_omap_xfer_data(struct mmc_omap_host *host, int write)
670{669{
671 int n;670 int n, nwords;
672 671
673 if (host->buffer_bytes_left == 0) {672 if (host->buffer_bytes_left == 0) {
674 host->sg_idx++;673 host->sg_idx++;
@@ -678,15 +677,23 @@ mmc_omap_xfer_data(struct mmc_omap_host *host, int write) · 3 unmodified lines
678 n = 64;677 n = 64;
679 if (n > host->buffer_bytes_left)678 if (n > host->buffer_bytes_left)
680 n = host->buffer_bytes_left;679 n = host->buffer_bytes_left;
680
681 nwords = n / 2;
682 nwords += n & 1; /* handle odd number of bytes to transfer */
683
681 host->buffer_bytes_left -= n;684 host->buffer_bytes_left -= n;
682 host->total_bytes_left -= n;685 host->total_bytes_left -= n;
683 host->data->bytes_xfered += n;686 host->data->bytes_xfered += n;
684 687
685 if (write) {688 if (write) {
686 __raw_writesw(host->virt_base + OMAP_MMC_REG(host, DATA), host->buffer, n);689 __raw_writesw(host->virt_base + OMAP_MMC_REG(host, DATA),
690 host->buffer, nwords);
687 } else {691 } else {
688 __raw_readsw(host->virt_base + OMAP_MMC_REG(host, DATA), host->buffer, n);692 __raw_readsw(host->virt_base + OMAP_MMC_REG(host, DATA),
693 host->buffer, nwords);
689 }694 }
695
696 host->buffer += nwords;
690}697}
691 698
692static inline void mmc_omap_report_irq(u16 status)699static inline void mmc_omap_report_irq(u16 status)
drivers/mmc/host/omap_hsmmc.c+0−1
@@ -40,7 +40,6 @@ · 39 unmodified lines
40#include <linux/regulator/consumer.h>40#include <linux/regulator/consumer.h>
41#include <linux/pm_runtime.h>41#include <linux/pm_runtime.h>
42#include <mach/hardware.h>42#include <mach/hardware.h>
43#include <plat/board.h>
44#include <plat/mmc.h>43#include <plat/mmc.h>
45#include <plat/cpu.h>44#include <plat/cpu.h>
46 45
drivers/mmc/host/sdhci-esdhc.h+3−3
@@ -48,14 +48,14 @@ static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock) · 47 unmodified lines
48 int div = 1;48 int div = 1;
49 u32 temp;49 u32 temp;
50 50
51 if (clock == 0)
52 goto out;
53
51 temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);54 temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
52 temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN55 temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN
53 | ESDHC_CLOCK_MASK);56 | ESDHC_CLOCK_MASK);
54 sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);57 sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
55 58
56 if (clock == 0)
57 goto out;
58
59 while (host->max_clk / pre_div / 16 > clock && pre_div < 256)59 while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
60 pre_div *= 2;60 pre_div *= 2;
61 61
drivers/mtd/nand/omap2.c+225−76
@@ -101,6 +101,16 @@ · 100 unmodified lines
101#define P4e_s(a) (TF(a & NAND_Ecc_P4e) << 0)101#define P4e_s(a) (TF(a & NAND_Ecc_P4e) << 0)
102#define P4o_s(a) (TF(a & NAND_Ecc_P4o) << 1)102#define P4o_s(a) (TF(a & NAND_Ecc_P4o) << 1)
103 103
104#define PREFETCH_CONFIG1_CS_SHIFT 24
105#define ECC_CONFIG_CS_SHIFT 1
106#define CS_MASK 0x7
107#define ENABLE_PREFETCH (0x1 << 7)
108#define DMA_MPU_MODE_SHIFT 2
109#define ECCSIZE1_SHIFT 22
110#define ECC1RESULTSIZE 0x1
111#define ECCCLEAR 0x100
112#define ECC1 0x1
113
104/* oob info generated runtime depending on ecc algorithm and layout selected */114/* oob info generated runtime depending on ecc algorithm and layout selected */
105static struct nand_ecclayout omap_oobinfo;115static struct nand_ecclayout omap_oobinfo;
106/* Define some generic bad / good block scan pattern which are used116/* Define some generic bad / good block scan pattern which are used
@@ -124,15 +134,18 @@ struct omap_nand_info { · 17 unmodified lines
124 134
125 int gpmc_cs;135 int gpmc_cs;
126 unsigned long phys_base;136 unsigned long phys_base;
137 unsigned long mem_size;
127 struct completion comp;138 struct completion comp;
128 struct dma_chan *dma;139 struct dma_chan *dma;
129 int gpmc_irq;140 int gpmc_irq_fifo;
141 int gpmc_irq_count;
130 enum {142 enum {
131 OMAP_NAND_IO_READ = 0, /* read */143 OMAP_NAND_IO_READ = 0, /* read */
132 OMAP_NAND_IO_WRITE, /* write */144 OMAP_NAND_IO_WRITE, /* write */
133 } iomode;145 } iomode;
134 u_char *buf;146 u_char *buf;
135 int buf_len;147 int buf_len;
148 struct gpmc_nand_regs reg;
136 149
137#ifdef CONFIG_MTD_NAND_OMAP_BCH150#ifdef CONFIG_MTD_NAND_OMAP_BCH
138 struct bch_control *bch;151 struct bch_control *bch;
@@ -140,6 +153,63 @@ struct omap_nand_info { · 1 unmodified line
140#endif153#endif
141};154};
142 155
156/**
157 * omap_prefetch_enable - configures and starts prefetch transfer
158 * @cs: cs (chip select) number
159 * @fifo_th: fifo threshold to be used for read/ write
160 * @dma_mode: dma mode enable (1) or disable (0)
161 * @u32_count: number of bytes to be transferred
162 * @is_write: prefetch read(0) or write post(1) mode
163 */
164static int omap_prefetch_enable(int cs, int fifo_th, int dma_mode,
165 unsigned int u32_count, int is_write, struct omap_nand_info *info)
166{
167 u32 val;
168
169 if (fifo_th > PREFETCH_FIFOTHRESHOLD_MAX)
170 return -1;
171
172 if (readl(info->reg.gpmc_prefetch_control))
173 return -EBUSY;
174
175 /* Set the amount of bytes to be prefetched */
176 writel(u32_count, info->reg.gpmc_prefetch_config2);
177
178 /* Set dma/mpu mode, the prefetch read / post write and
179 * enable the engine. Set which cs is has requested for.
180 */
181 val = ((cs << PREFETCH_CONFIG1_CS_SHIFT) |
182 PREFETCH_FIFOTHRESHOLD(fifo_th) | ENABLE_PREFETCH |
183 (dma_mode << DMA_MPU_MODE_SHIFT) | (0x1 & is_write));
184 writel(val, info->reg.gpmc_prefetch_config1);
185
186 /* Start the prefetch engine */
187 writel(0x1, info->reg.gpmc_prefetch_control);
188
189 return 0;
190}
191
192/**
193 * omap_prefetch_reset - disables and stops the prefetch engine
194 */
195static int omap_prefetch_reset(int cs, struct omap_nand_info *info)
196{
197 u32 config1;
198
199 /* check if the same module/cs is trying to reset */
200 config1 = readl(info->reg.gpmc_prefetch_config1);
201 if (((config1 >> PREFETCH_CONFIG1_CS_SHIFT) & CS_MASK) != cs)
202 return -EINVAL;
203
204 /* Stop the PFPW engine */
205 writel(0x0, info->reg.gpmc_prefetch_control);
206
207 /* Reset/disable the PFPW engine */
208 writel(0x0, info->reg.gpmc_prefetch_config1);
209
210 return 0;
211}
212
143/**213/**
144 * omap_hwcontrol - hardware specific access to control-lines214 * omap_hwcontrol - hardware specific access to control-lines
145 * @mtd: MTD device structure215 * @mtd: MTD device structure
@@ -158,13 +228,13 @@ static void omap_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) · 12 unmodified lines
158 228
159 if (cmd != NAND_CMD_NONE) {229 if (cmd != NAND_CMD_NONE) {
160 if (ctrl & NAND_CLE)230 if (ctrl & NAND_CLE)
161 gpmc_nand_write(info->gpmc_cs, GPMC_NAND_COMMAND, cmd);231 writeb(cmd, info->reg.gpmc_nand_command);
162 232
163 else if (ctrl & NAND_ALE)233 else if (ctrl & NAND_ALE)
164 gpmc_nand_write(info->gpmc_cs, GPMC_NAND_ADDRESS, cmd);234 writeb(cmd, info->reg.gpmc_nand_address);
165 235
166 else /* NAND_NCE */236 else /* NAND_NCE */
167 gpmc_nand_write(info->gpmc_cs, GPMC_NAND_DATA, cmd);237 writeb(cmd, info->reg.gpmc_nand_data);
168 }238 }
169}239}
170 240
@@ -198,7 +268,8 @@ static void omap_write_buf8(struct mtd_info *mtd, const u_char *buf, int len) · 27 unmodified lines
198 iowrite8(*p++, info->nand.IO_ADDR_W);268 iowrite8(*p++, info->nand.IO_ADDR_W);
199 /* wait until buffer is available for write */269 /* wait until buffer is available for write */
200 do {270 do {
201 status = gpmc_read_status(GPMC_STATUS_BUFFER);271 status = readl(info->reg.gpmc_status) &
272 GPMC_STATUS_BUFF_EMPTY;
202 } while (!status);273 } while (!status);
203 }274 }
204}275}
@@ -235,7 +306,8 @@ static void omap_write_buf16(struct mtd_info *mtd, const u_char * buf, int len) · 30 unmodified lines
235 iowrite16(*p++, info->nand.IO_ADDR_W);306 iowrite16(*p++, info->nand.IO_ADDR_W);
236 /* wait until buffer is available for write */307 /* wait until buffer is available for write */
237 do {308 do {
238 status = gpmc_read_status(GPMC_STATUS_BUFFER);309 status = readl(info->reg.gpmc_status) &
310 GPMC_STATUS_BUFF_EMPTY;
239 } while (!status);311 } while (!status);
240 }312 }
241}313}
@@ -265,8 +337,8 @@ static void omap_read_buf_pref(struct mtd_info *mtd, u_char *buf, int len) · 23 unmodified lines
265 }337 }
266 338
267 /* configure and start prefetch transfer */339 /* configure and start prefetch transfer */
268 ret = gpmc_prefetch_enable(info->gpmc_cs,340 ret = omap_prefetch_enable(info->gpmc_cs,
269 PREFETCH_FIFOTHRESHOLD_MAX, 0x0, len, 0x0);341 PREFETCH_FIFOTHRESHOLD_MAX, 0x0, len, 0x0, info);
270 if (ret) {342 if (ret) {
271 /* PFPW engine is busy, use cpu copy method */343 /* PFPW engine is busy, use cpu copy method */
272 if (info->nand.options & NAND_BUSWIDTH_16)344 if (info->nand.options & NAND_BUSWIDTH_16)
@@ -275,14 +347,15 @@ static void omap_read_buf_pref(struct mtd_info *mtd, u_char *buf, int len) · 2 unmodified lines
275 omap_read_buf8(mtd, (u_char *)p, len);347 omap_read_buf8(mtd, (u_char *)p, len);
276 } else {348 } else {
277 do {349 do {
278 r_count = gpmc_read_status(GPMC_PREFETCH_FIFO_CNT);350 r_count = readl(info->reg.gpmc_prefetch_status);
351 r_count = GPMC_PREFETCH_STATUS_FIFO_CNT(r_count);
279 r_count = r_count >> 2;352 r_count = r_count >> 2;
280 ioread32_rep(info->nand.IO_ADDR_R, p, r_count);353 ioread32_rep(info->nand.IO_ADDR_R, p, r_count);
281 p += r_count;354 p += r_count;
282 len -= r_count << 2;355 len -= r_count << 2;
283 } while (len);356 } while (len);
284 /* disable and stop the PFPW engine */357 /* disable and stop the PFPW engine */
285 gpmc_prefetch_reset(info->gpmc_cs);358 omap_prefetch_reset(info->gpmc_cs, info);
286 }359 }
287}360}
288 361
@@ -301,6 +374,7 @@ static void omap_write_buf_pref(struct mtd_info *mtd, · 12 unmodified lines
301 int i = 0, ret = 0;374 int i = 0, ret = 0;
302 u16 *p = (u16 *)buf;375 u16 *p = (u16 *)buf;
303 unsigned long tim, limit;376 unsigned long tim, limit;
377 u32 val;
304 378
305 /* take care of subpage writes */379 /* take care of subpage writes */
306 if (len % 2 != 0) {380 if (len % 2 != 0) {
@@ -310,8 +384,8 @@ static void omap_write_buf_pref(struct mtd_info *mtd, · 3 unmodified lines
310 }384 }
311 385
312 /* configure and start prefetch transfer */386 /* configure and start prefetch transfer */
313 ret = gpmc_prefetch_enable(info->gpmc_cs,387 ret = omap_prefetch_enable(info->gpmc_cs,
314 PREFETCH_FIFOTHRESHOLD_MAX, 0x0, len, 0x1);388 PREFETCH_FIFOTHRESHOLD_MAX, 0x0, len, 0x1, info);
315 if (ret) {389 if (ret) {
316 /* PFPW engine is busy, use cpu copy method */390 /* PFPW engine is busy, use cpu copy method */
317 if (info->nand.options & NAND_BUSWIDTH_16)391 if (info->nand.options & NAND_BUSWIDTH_16)
@@ -320,7 +394,8 @@ static void omap_write_buf_pref(struct mtd_info *mtd, · 2 unmodified lines
320 omap_write_buf8(mtd, (u_char *)p, len);394 omap_write_buf8(mtd, (u_char *)p, len);
321 } else {395 } else {
322 while (len) {396 while (len) {
323 w_count = gpmc_read_status(GPMC_PREFETCH_FIFO_CNT);397 w_count = readl(info->reg.gpmc_prefetch_status);
398 w_count = GPMC_PREFETCH_STATUS_FIFO_CNT(w_count);
324 w_count = w_count >> 1;399 w_count = w_count >> 1;
325 for (i = 0; (i < w_count) && len; i++, len -= 2)400 for (i = 0; (i < w_count) && len; i++, len -= 2)
326 iowrite16(*p++, info->nand.IO_ADDR_W);401 iowrite16(*p++, info->nand.IO_ADDR_W);
@@ -329,11 +404,14 @@ static void omap_write_buf_pref(struct mtd_info *mtd, · 2 unmodified lines
329 tim = 0;404 tim = 0;
330 limit = (loops_per_jiffy *405 limit = (loops_per_jiffy *
331 msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));406 msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));
332 while (gpmc_read_status(GPMC_PREFETCH_COUNT) && (tim++ < limit))407 do {
333 cpu_relax();408 cpu_relax();
409 val = readl(info->reg.gpmc_prefetch_status);
410 val = GPMC_PREFETCH_STATUS_COUNT(val);
411 } while (val && (tim++ < limit));
334 412
335 /* disable and stop the PFPW engine */413 /* disable and stop the PFPW engine */
336 gpmc_prefetch_reset(info->gpmc_cs);414 omap_prefetch_reset(info->gpmc_cs, info);
337 }415 }
338}416}
339 417
@@ -365,6 +443,7 @@ static inline int omap_nand_dma_transfer(struct mtd_info *mtd, void *addr, · 25 unmodified lines
365 unsigned long tim, limit;443 unsigned long tim, limit;
366 unsigned n;444 unsigned n;
367 int ret;445 int ret;
446 u32 val;
368 447
369 if (addr >= high_memory) {448 if (addr >= high_memory) {
370 struct page *p1;449 struct page *p1;
@@ -396,9 +475,9 @@ static inline int omap_nand_dma_transfer(struct mtd_info *mtd, void *addr, · 25 unmodified lines
396 tx->callback_param = &info->comp;475 tx->callback_param = &info->comp;
397 dmaengine_submit(tx);476 dmaengine_submit(tx);
398 477
399 /* configure and start prefetch transfer */478 /* configure and start prefetch transfer */
400 ret = gpmc_prefetch_enable(info->gpmc_cs,479 ret = omap_prefetch_enable(info->gpmc_cs,
401 PREFETCH_FIFOTHRESHOLD_MAX, 0x1, len, is_write);480 PREFETCH_FIFOTHRESHOLD_MAX, 0x1, len, is_write, info);
402 if (ret)481 if (ret)
403 /* PFPW engine is busy, use cpu copy method */482 /* PFPW engine is busy, use cpu copy method */
404 goto out_copy_unmap;483 goto out_copy_unmap;
@@ -410,11 +489,15 @@ static inline int omap_nand_dma_transfer(struct mtd_info *mtd, void *addr, · 5 unmodified lines
410 wait_for_completion(&info->comp);489 wait_for_completion(&info->comp);
411 tim = 0;490 tim = 0;
412 limit = (loops_per_jiffy * msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));491 limit = (loops_per_jiffy * msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));
413 while (gpmc_read_status(GPMC_PREFETCH_COUNT) && (tim++ < limit))492
493 do {
414 cpu_relax();494 cpu_relax();
495 val = readl(info->reg.gpmc_prefetch_status);
496 val = GPMC_PREFETCH_STATUS_COUNT(val);
497 } while (val && (tim++ < limit));
415 498
416 /* disable and stop the PFPW engine */499 /* disable and stop the PFPW engine */
417 gpmc_prefetch_reset(info->gpmc_cs);500 omap_prefetch_reset(info->gpmc_cs, info);
418 501
419 dma_unmap_sg(info->dma->device->dev, &sg, 1, dir);502 dma_unmap_sg(info->dma->device->dev, &sg, 1, dir);
420 return 0;503 return 0;
@@ -471,13 +554,12 @@ static irqreturn_t omap_nand_irq(int this_irq, void *dev) · 50 unmodified lines
471{554{
472 struct omap_nand_info *info = (struct omap_nand_info *) dev;555 struct omap_nand_info *info = (struct omap_nand_info *) dev;
473 u32 bytes;556 u32 bytes;
474 u32 irq_stat;
475 557
476 irq_stat = gpmc_read_status(GPMC_GET_IRQ_STATUS);558 bytes = readl(info->reg.gpmc_prefetch_status);
477 bytes = gpmc_read_status(GPMC_PREFETCH_FIFO_CNT);559 bytes = GPMC_PREFETCH_STATUS_FIFO_CNT(bytes);
478 bytes = bytes & 0xFFFC; /* io in multiple of 4 bytes */560 bytes = bytes & 0xFFFC; /* io in multiple of 4 bytes */
479 if (info->iomode == OMAP_NAND_IO_WRITE) { /* checks for write io */561 if (info->iomode == OMAP_NAND_IO_WRITE) { /* checks for write io */
480 if (irq_stat & 0x2)562 if (this_irq == info->gpmc_irq_count)
481 goto done;563 goto done;
482 564
483 if (info->buf_len && (info->buf_len < bytes))565 if (info->buf_len && (info->buf_len < bytes))
@@ -494,20 +576,17 @@ static irqreturn_t omap_nand_irq(int this_irq, void *dev) · 10 unmodified lines
494 (u32 *)info->buf, bytes >> 2);576 (u32 *)info->buf, bytes >> 2);
495 info->buf = info->buf + bytes;577 info->buf = info->buf + bytes;
496 578
497 if (irq_stat & 0x2)579 if (this_irq == info->gpmc_irq_count)
498 goto done;580 goto done;
499 }581 }
500 gpmc_cs_configure(info->gpmc_cs, GPMC_SET_IRQ_STATUS, irq_stat);
501 582
502 return IRQ_HANDLED;583 return IRQ_HANDLED;
503 584
504done:585done:
505 complete(&info->comp);586 complete(&info->comp);
506 /* disable irq */
507 gpmc_cs_configure(info->gpmc_cs, GPMC_ENABLE_IRQ, 0);
508 587
509 /* clear status */588 disable_irq_nosync(info->gpmc_irq_fifo);
510 gpmc_cs_configure(info->gpmc_cs, GPMC_SET_IRQ_STATUS, irq_stat);589 disable_irq_nosync(info->gpmc_irq_count);
511 590
512 return IRQ_HANDLED;591 return IRQ_HANDLED;
513}592}
@@ -534,22 +613,22 @@ static void omap_read_buf_irq_pref(struct mtd_info *mtd, u_char *buf, int len) · 20 unmodified lines
534 init_completion(&info->comp);613 init_completion(&info->comp);
535 614
536 /* configure and start prefetch transfer */615 /* configure and start prefetch transfer */
537 ret = gpmc_prefetch_enable(info->gpmc_cs,616 ret = omap_prefetch_enable(info->gpmc_cs,
538 PREFETCH_FIFOTHRESHOLD_MAX/2, 0x0, len, 0x0);617 PREFETCH_FIFOTHRESHOLD_MAX/2, 0x0, len, 0x0, info);
539 if (ret)618 if (ret)
540 /* PFPW engine is busy, use cpu copy method */619 /* PFPW engine is busy, use cpu copy method */
541 goto out_copy;620 goto out_copy;
542 621
543 info->buf_len = len;622 info->buf_len = len;
544 /* enable irq */623
545 gpmc_cs_configure(info->gpmc_cs, GPMC_ENABLE_IRQ,624 enable_irq(info->gpmc_irq_count);
546 (GPMC_IRQ_FIFOEVENTENABLE | GPMC_IRQ_COUNT_EVENT));625 enable_irq(info->gpmc_irq_fifo);
547 626
548 /* waiting for read to complete */627 /* waiting for read to complete */
549 wait_for_completion(&info->comp);628 wait_for_completion(&info->comp);
550 629
551 /* disable and stop the PFPW engine */630 /* disable and stop the PFPW engine */
552 gpmc_prefetch_reset(info->gpmc_cs);631 omap_prefetch_reset(info->gpmc_cs, info);
553 return;632 return;
554 633
555out_copy:634out_copy:
@@ -572,6 +651,7 @@ static void omap_write_buf_irq_pref(struct mtd_info *mtd, · 16 unmodified lines
572 struct omap_nand_info, mtd);651 struct omap_nand_info, mtd);
573 int ret = 0;652 int ret = 0;
574 unsigned long tim, limit;653 unsigned long tim, limit;
654 u32 val;
575 655
576 if (len <= mtd->oobsize) {656 if (len <= mtd->oobsize) {
577 omap_write_buf_pref(mtd, buf, len);657 omap_write_buf_pref(mtd, buf, len);
@@ -583,27 +663,31 @@ static void omap_write_buf_irq_pref(struct mtd_info *mtd, · 5 unmodified lines
583 init_completion(&info->comp);663 init_completion(&info->comp);
584 664
585 /* configure and start prefetch transfer : size=24 */665 /* configure and start prefetch transfer : size=24 */
586 ret = gpmc_prefetch_enable(info->gpmc_cs,666 ret = omap_prefetch_enable(info->gpmc_cs,
587 (PREFETCH_FIFOTHRESHOLD_MAX * 3) / 8, 0x0, len, 0x1);667 (PREFETCH_FIFOTHRESHOLD_MAX * 3) / 8, 0x0, len, 0x1, info);
588 if (ret)668 if (ret)
589 /* PFPW engine is busy, use cpu copy method */669 /* PFPW engine is busy, use cpu copy method */
590 goto out_copy;670 goto out_copy;
591 671
592 info->buf_len = len;672 info->buf_len = len;
593 /* enable irq */673
594 gpmc_cs_configure(info->gpmc_cs, GPMC_ENABLE_IRQ,674 enable_irq(info->gpmc_irq_count);
595 (GPMC_IRQ_FIFOEVENTENABLE | GPMC_IRQ_COUNT_EVENT));675 enable_irq(info->gpmc_irq_fifo);
596 676
597 /* waiting for write to complete */677 /* waiting for write to complete */
598 wait_for_completion(&info->comp);678 wait_for_completion(&info->comp);
679
599 /* wait for data to flushed-out before reset the prefetch */680 /* wait for data to flushed-out before reset the prefetch */
600 tim = 0;681 tim = 0;
601 limit = (loops_per_jiffy * msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));682 limit = (loops_per_jiffy * msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));
602 while (gpmc_read_status(GPMC_PREFETCH_COUNT) && (tim++ < limit))683 do {
684 val = readl(info->reg.gpmc_prefetch_status);
685 val = GPMC_PREFETCH_STATUS_COUNT(val);
603 cpu_relax();686 cpu_relax();
687 } while (val && (tim++ < limit));
604 688
605 /* disable and stop the PFPW engine */689 /* disable and stop the PFPW engine */
606 gpmc_prefetch_reset(info->gpmc_cs);690 omap_prefetch_reset(info->gpmc_cs, info);
607 return;691 return;
608 692
609out_copy:693out_copy:
@@ -843,7 +927,20 @@ static int omap_calculate_ecc(struct mtd_info *mtd, const u_char *dat, · 233 unmodified lines
843{927{
844 struct omap_nand_info *info = container_of(mtd, struct omap_nand_info,928 struct omap_nand_info *info = container_of(mtd, struct omap_nand_info,
845 mtd);929 mtd);
846 return gpmc_calculate_ecc(info->gpmc_cs, dat, ecc_code);930 u32 val;
931
932 val = readl(info->reg.gpmc_ecc_config);
933 if (((val >> ECC_CONFIG_CS_SHIFT) & ~CS_MASK) != info->gpmc_cs)
934 return -EINVAL;
935
936 /* read ecc result */
937 val = readl(info->reg.gpmc_ecc1_result);
938 *ecc_code++ = val; /* P128e, ..., P1e */
939 *ecc_code++ = val >> 16; /* P128o, ..., P1o */
940 /* P2048o, P1024o, P512o, P256o, P2048e, P1024e, P512e, P256e */
941 *ecc_code++ = ((val >> 8) & 0x0f) | ((val >> 20) & 0xf0);
942
943 return 0;
847}944}
848 945
849/**946/**
@@ -857,8 +954,34 @@ static void omap_enable_hwecc(struct mtd_info *mtd, int mode) · 7 unmodified lines
857 mtd);954 mtd);
858 struct nand_chip *chip = mtd->priv;955 struct nand_chip *chip = mtd->priv;
859 unsigned int dev_width = (chip->options & NAND_BUSWIDTH_16) ? 1 : 0;956 unsigned int dev_width = (chip->options & NAND_BUSWIDTH_16) ? 1 : 0;
957 u32 val;
958
959 /* clear ecc and enable bits */
960 val = ECCCLEAR | ECC1;
961 writel(val, info->reg.gpmc_ecc_control);
962
963 /* program ecc and result sizes */
964 val = ((((info->nand.ecc.size >> 1) - 1) << ECCSIZE1_SHIFT) |
965 ECC1RESULTSIZE);
966 writel(val, info->reg.gpmc_ecc_size_config);
860 967
861 gpmc_enable_hwecc(info->gpmc_cs, mode, dev_width, info->nand.ecc.size);968 switch (mode) {
969 case NAND_ECC_READ:
970 case NAND_ECC_WRITE:
971 writel(ECCCLEAR | ECC1, info->reg.gpmc_ecc_control);
972 break;
973 case NAND_ECC_READSYN:
974 writel(ECCCLEAR, info->reg.gpmc_ecc_control);
975 break;
976 default:
977 dev_info(&info->pdev->dev,
978 "error: unrecognized Mode[%d]!\n", mode);
979 break;
980 }
981
982 /* (ECC 16 or 8 bit col) | ( CS ) | ECC Enable */
983 val = (dev_width << 7) | (info->gpmc_cs << 1) | (0x1);
984 writel(val, info->reg.gpmc_ecc_config);
862}985}
863 986
864/**987/**
@@ -886,10 +1009,9 @@ static int omap_wait(struct mtd_info *mtd, struct nand_chip *chip) · 21 unmodified lines
886 else1009 else
887 timeo += (HZ * 20) / 1000;1010 timeo += (HZ * 20) / 1000;
888 1011
889 gpmc_nand_write(info->gpmc_cs,1012 writeb(NAND_CMD_STATUS & 0xFF, info->reg.gpmc_nand_command);
890 GPMC_NAND_COMMAND, (NAND_CMD_STATUS & 0xFF));
891 while (time_before(jiffies, timeo)) {1013 while (time_before(jiffies, timeo)) {
892 status = gpmc_nand_read(info->gpmc_cs, GPMC_NAND_DATA);1014 status = readb(info->reg.gpmc_nand_data);
893 if (status & NAND_STATUS_READY)1015 if (status & NAND_STATUS_READY)
894 break;1016 break;
895 cond_resched();1017 cond_resched();
@@ -909,22 +1031,13 @@ static int omap_dev_ready(struct mtd_info *mtd) · 13 unmodified lines
909 struct omap_nand_info *info = container_of(mtd, struct omap_nand_info,1031 struct omap_nand_info *info = container_of(mtd, struct omap_nand_info,
910 mtd);1032 mtd);
911 1033
912 val = gpmc_read_status(GPMC_GET_IRQ_STATUS);1034 val = readl(info->reg.gpmc_status);
1035
913 if ((val & 0x100) == 0x100) {1036 if ((val & 0x100) == 0x100) {
914 /* Clear IRQ Interrupt */1037 return 1;
915 val |= 0x100;
916 val &= ~(0x0);
917 gpmc_cs_configure(info->gpmc_cs, GPMC_SET_IRQ_STATUS, val);
918 } else {1038 } else {
919 unsigned int cnt = 0;1039 return 0;
920 while (cnt++ < 0x1FF) {
921 if ((val & 0x100) == 0x100)
922 return 0;
923 val = gpmc_read_status(GPMC_GET_IRQ_STATUS);
924 }
925 }1040 }
926
927 return 1;
928}1041}
929 1042
930#ifdef CONFIG_MTD_NAND_OMAP_BCH1043#ifdef CONFIG_MTD_NAND_OMAP_BCH
@@ -1155,6 +1268,7 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) · 224 unmodified lines
1155 int i, offset;1268 int i, offset;
1156 dma_cap_mask_t mask;1269 dma_cap_mask_t mask;
1157 unsigned sig;1270 unsigned sig;
1271 struct resource *res;
1158 1272
1159 pdata = pdev->dev.platform_data;1273 pdata = pdev->dev.platform_data;
1160 if (pdata == NULL) {1274 if (pdata == NULL) {
@@ -1174,7 +1288,7 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) · 13 unmodified lines
1174 info->pdev = pdev;1288 info->pdev = pdev;
1175 1289
1176 info->gpmc_cs = pdata->cs;1290 info->gpmc_cs = pdata->cs;
1177 info->phys_base = pdata->phys_base;1291 info->reg = pdata->reg;
1178 1292
1179 info->mtd.priv = &info->nand;1293 info->mtd.priv = &info->nand;
1180 info->mtd.name = dev_name(&pdev->dev);1294 info->mtd.name = dev_name(&pdev->dev);
@@ -1183,16 +1297,23 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) · 2 unmodified lines
1183 info->nand.options = pdata->devsize;1297 info->nand.options = pdata->devsize;
1184 info->nand.options |= NAND_SKIP_BBTSCAN;1298 info->nand.options |= NAND_SKIP_BBTSCAN;
1185 1299
1186 /* NAND write protect off */1300 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1187 gpmc_cs_configure(info->gpmc_cs, GPMC_CONFIG_WP, 0);1301 if (res == NULL) {
1302 err = -EINVAL;
1303 dev_err(&pdev->dev, "error getting memory resource\n");
1304 goto out_free_info;
1305 }
1306
1307 info->phys_base = res->start;
1308 info->mem_size = resource_size(res);
1188 1309
1189 if (!request_mem_region(info->phys_base, NAND_IO_SIZE,1310 if (!request_mem_region(info->phys_base, info->mem_size,
1190 pdev->dev.driver->name)) {1311 pdev->dev.driver->name)) {
1191 err = -EBUSY;1312 err = -EBUSY;
1192 goto out_free_info;1313 goto out_free_info;
1193 }1314 }
1194 1315
1195 info->nand.IO_ADDR_R = ioremap(info->phys_base, NAND_IO_SIZE);1316 info->nand.IO_ADDR_R = ioremap(info->phys_base, info->mem_size);
1196 if (!info->nand.IO_ADDR_R) {1317 if (!info->nand.IO_ADDR_R) {
1197 err = -ENOMEM;1318 err = -ENOMEM;
1198 goto out_release_mem_region;1319 goto out_release_mem_region;
@@ -1265,17 +1386,39 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) · 66 unmodified lines
1265 break;1386 break;
1266 1387
1267 case NAND_OMAP_PREFETCH_IRQ:1388 case NAND_OMAP_PREFETCH_IRQ:
1268 err = request_irq(pdata->gpmc_irq,1389 info->gpmc_irq_fifo = platform_get_irq(pdev, 0);
1269 omap_nand_irq, IRQF_SHARED, "gpmc-nand", info);1390 if (info->gpmc_irq_fifo <= 0) {
1391 dev_err(&pdev->dev, "error getting fifo irq\n");
1392 err = -ENODEV;
1393 goto out_release_mem_region;
1394 }
1395 err = request_irq(info->gpmc_irq_fifo, omap_nand_irq,
1396 IRQF_SHARED, "gpmc-nand-fifo", info);
1270 if (err) {1397 if (err) {
1271 dev_err(&pdev->dev, "requesting irq(%d) error:%d",1398 dev_err(&pdev->dev, "requesting irq(%d) error:%d",
1272 pdata->gpmc_irq, err);1399 info->gpmc_irq_fifo, err);
1400 info->gpmc_irq_fifo = 0;
1401 goto out_release_mem_region;
1402 }
1403
1404 info->gpmc_irq_count = platform_get_irq(pdev, 1);
1405 if (info->gpmc_irq_count <= 0) {
1406 dev_err(&pdev->dev, "error getting count irq\n");
1407 err = -ENODEV;
1408 goto out_release_mem_region;
1409 }
1410 err = request_irq(info->gpmc_irq_count, omap_nand_irq,
1411 IRQF_SHARED, "gpmc-nand-count", info);
1412 if (err) {
1413 dev_err(&pdev->dev, "requesting irq(%d) error:%d",
1414 info->gpmc_irq_count, err);
1415 info->gpmc_irq_count = 0;
1273 goto out_release_mem_region;1416 goto out_release_mem_region;
1274 } else {
1275 info->gpmc_irq = pdata->gpmc_irq;
1276 info->nand.read_buf = omap_read_buf_irq_pref;
1277 info->nand.write_buf = omap_write_buf_irq_pref;
1278 }1417 }
1418
1419 info->nand.read_buf = omap_read_buf_irq_pref;
1420 info->nand.write_buf = omap_write_buf_irq_pref;
1421
1279 break;1422 break;
1280 1423
1281 default:1424 default:
@@ -1363,7 +1506,11 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) · 81 unmodified lines
1363out_release_mem_region:1506out_release_mem_region:
1364 if (info->dma)1507 if (info->dma)
1365 dma_release_channel(info->dma);1508 dma_release_channel(info->dma);
1366 release_mem_region(info->phys_base, NAND_IO_SIZE);1509 if (info->gpmc_irq_count > 0)
1510 free_irq(info->gpmc_irq_count, info);
1511 if (info->gpmc_irq_fifo > 0)
1512 free_irq(info->gpmc_irq_fifo, info);
1513 release_mem_region(info->phys_base, info->mem_size);
1367out_free_info:1514out_free_info:
1368 kfree(info);1515 kfree(info);
1369 1516
@@ -1381,8 +1528,10 @@ static int omap_nand_remove(struct platform_device *pdev) · 11 unmodified lines
1381 if (info->dma)1528 if (info->dma)
1382 dma_release_channel(info->dma);1529 dma_release_channel(info->dma);
1383 1530
1384 if (info->gpmc_irq)1531 if (info->gpmc_irq_count > 0)
1385 free_irq(info->gpmc_irq, info);1532 free_irq(info->gpmc_irq_count, info);
1533 if (info->gpmc_irq_fifo > 0)
1534 free_irq(info->gpmc_irq_fifo, info);
1386 1535
1387 /* Release NAND device, its internal structures and partitions */1536 /* Release NAND device, its internal structures and partitions */
1388 nand_release(&info->mtd);1537 nand_release(&info->mtd);
drivers/mtd/onenand/omap2.c+16−15
@@ -44,17 +44,15 @@ · 43 unmodified lines
44 44
45#include <plat/dma.h>45#include <plat/dma.h>
46 46
47#include <plat/board.h>
48
49#define DRIVER_NAME "omap2-onenand"47#define DRIVER_NAME "omap2-onenand"
50 48
51#define ONENAND_IO_SIZE SZ_128K
52#define ONENAND_BUFRAM_SIZE (1024 * 5)49#define ONENAND_BUFRAM_SIZE (1024 * 5)
53 50
54struct omap2_onenand {51struct omap2_onenand {
55 struct platform_device *pdev;52 struct platform_device *pdev;
56 int gpmc_cs;53 int gpmc_cs;
57 unsigned long phys_base;54 unsigned long phys_base;
55 unsigned int mem_size;
58 int gpio_irq;56 int gpio_irq;
59 struct mtd_info mtd;57 struct mtd_info mtd;
60 struct onenand_chip onenand;58 struct onenand_chip onenand;
@@ -626,6 +624,7 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev) · 565 unmodified lines
626 struct omap2_onenand *c;624 struct omap2_onenand *c;
627 struct onenand_chip *this;625 struct onenand_chip *this;
628 int r;626 int r;
627 struct resource *res;
629 628
630 pdata = pdev->dev.platform_data;629 pdata = pdev->dev.platform_data;
631 if (pdata == NULL) {630 if (pdata == NULL) {
@@ -647,20 +646,24 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev) · 15 unmodified lines
647 c->gpio_irq = 0;646 c->gpio_irq = 0;
648 }647 }
649 648
650 r = gpmc_cs_request(c->gpmc_cs, ONENAND_IO_SIZE, &c->phys_base);649 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
651 if (r < 0) {650 if (res == NULL) {
652 dev_err(&pdev->dev, "Cannot request GPMC CS\n");651 r = -EINVAL;
652 dev_err(&pdev->dev, "error getting memory resource\n");
653 goto err_kfree;653 goto err_kfree;
654 }654 }
655 655
656 if (request_mem_region(c->phys_base, ONENAND_IO_SIZE,656 c->phys_base = res->start;
657 c->mem_size = resource_size(res);
658
659 if (request_mem_region(c->phys_base, c->mem_size,
657 pdev->dev.driver->name) == NULL) {660 pdev->dev.driver->name) == NULL) {
658 dev_err(&pdev->dev, "Cannot reserve memory region at 0x%08lx, "661 dev_err(&pdev->dev, "Cannot reserve memory region at 0x%08lx, size: 0x%x\n",
659 "size: 0x%x\n", c->phys_base, ONENAND_IO_SIZE);662 c->phys_base, c->mem_size);
660 r = -EBUSY;663 r = -EBUSY;
661 goto err_free_cs;664 goto err_kfree;
662 }665 }
663 c->onenand.base = ioremap(c->phys_base, ONENAND_IO_SIZE);666 c->onenand.base = ioremap(c->phys_base, c->mem_size);
664 if (c->onenand.base == NULL) {667 if (c->onenand.base == NULL) {
665 r = -ENOMEM;668 r = -ENOMEM;
666 goto err_release_mem_region;669 goto err_release_mem_region;
@@ -776,9 +779,7 @@ err_release_gpio: · 109 unmodified lines
776err_iounmap:779err_iounmap:
777 iounmap(c->onenand.base);780 iounmap(c->onenand.base);
778err_release_mem_region:781err_release_mem_region:
779 release_mem_region(c->phys_base, ONENAND_IO_SIZE);782 release_mem_region(c->phys_base, c->mem_size);
780err_free_cs:
781 gpmc_cs_free(c->gpmc_cs);
782err_kfree:783err_kfree:
783 kfree(c);784 kfree(c);
784 785
@@ -800,7 +801,7 @@ static int __devexit omap2_onenand_remove(struct platform_device *pdev) · 15 unmodified lines
800 gpio_free(c->gpio_irq);801 gpio_free(c->gpio_irq);
801 }802 }
802 iounmap(c->onenand.base);803 iounmap(c->onenand.base);
803 release_mem_region(c->phys_base, ONENAND_IO_SIZE);804 release_mem_region(c->phys_base, c->mem_size);
804 gpmc_cs_free(c->gpmc_cs);805 gpmc_cs_free(c->gpmc_cs);
805 kfree(c);806 kfree(c);
806 807
drivers/mtd/ubi/vtbl.c+2−2
@@ -340,7 +340,7 @@ retry: · 339 unmodified lines
340 * of this LEB as it will be deleted and freed in 'ubi_add_to_av()'.340 * of this LEB as it will be deleted and freed in 'ubi_add_to_av()'.
341 */341 */
342 err = ubi_add_to_av(ubi, ai, new_aeb->pnum, new_aeb->ec, vid_hdr, 0);342 err = ubi_add_to_av(ubi, ai, new_aeb->pnum, new_aeb->ec, vid_hdr, 0);
343 kfree(new_aeb);343 kmem_cache_free(ai->aeb_slab_cache, new_aeb);
344 ubi_free_vid_hdr(ubi, vid_hdr);344 ubi_free_vid_hdr(ubi, vid_hdr);
345 return err;345 return err;
346 346
@@ -353,7 +353,7 @@ write_error: · 6 unmodified lines
353 list_add(&new_aeb->u.list, &ai->erase);353 list_add(&new_aeb->u.list, &ai->erase);
354 goto retry;354 goto retry;
355 }355 }
356 kfree(new_aeb);356 kmem_cache_free(ai->aeb_slab_cache, new_aeb);
357out_free:357out_free:
358 ubi_free_vid_hdr(ubi, vid_hdr);358 ubi_free_vid_hdr(ubi, vid_hdr);
359 return err;359 return err;
drivers/net/can/sja1000/sja1000_platform.c+3−1
@@ -109,7 +109,9 @@ static int sp_probe(struct platform_device *pdev) · 108 unmodified lines
109 priv = netdev_priv(dev);109 priv = netdev_priv(dev);
110 110
111 dev->irq = res_irq->start;111 dev->irq = res_irq->start;
112 priv->irq_flags = res_irq->flags & (IRQF_TRIGGER_MASK | IRQF_SHARED);112 priv->irq_flags = res_irq->flags & IRQF_TRIGGER_MASK;
113 if (res_irq->flags & IORESOURCE_IRQ_SHAREABLE)
114 priv->irq_flags |= IRQF_SHARED;
113 priv->reg_base = addr;115 priv->reg_base = addr;
114 /* The CAN clock frequency is half the oscillator clock frequency */116 /* The CAN clock frequency is half the oscillator clock frequency */
115 priv->can.clock.freq = pdata->osc_freq / 2;117 priv->can.clock.freq = pdata->osc_freq / 2;
drivers/net/can/softing/softing_fw.c+4−3
@@ -150,7 +150,7 @@ int softing_load_fw(const char *file, struct softing *card, · 149 unmodified lines
150 const uint8_t *mem, *end, *dat;150 const uint8_t *mem, *end, *dat;
151 uint16_t type, len;151 uint16_t type, len;
152 uint32_t addr;152 uint32_t addr;
153 uint8_t *buf = NULL;153 uint8_t *buf = NULL, *new_buf;
154 int buflen = 0;154 int buflen = 0;
155 int8_t type_end = 0;155 int8_t type_end = 0;
156 156
@@ -199,11 +199,12 @@ int softing_load_fw(const char *file, struct softing *card, · 42 unmodified lines
199 if (len > buflen) {199 if (len > buflen) {
200 /* align buflen */200 /* align buflen */
201 buflen = (len + (1024-1)) & ~(1024-1);201 buflen = (len + (1024-1)) & ~(1024-1);
202 buf = krealloc(buf, buflen, GFP_KERNEL);202 new_buf = krealloc(buf, buflen, GFP_KERNEL);
203 if (!buf) {203 if (!new_buf) {
204 ret = -ENOMEM;204 ret = -ENOMEM;
205 goto failed;205 goto failed;
206 }206 }
207 buf = new_buf;
207 }208 }
208 /* verify record data */209 /* verify record data */
209 memcpy_fromio(buf, &dpram[addr + offset], len);210 memcpy_fromio(buf, &dpram[addr + offset], len);
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h+0−3
@@ -1708,9 +1708,6 @@ struct bnx2x_func_init_params { · 1707 unmodified lines
1708 continue; \1708 continue; \
1709 else1709 else
1710 1710
1711#define for_each_napi_rx_queue(bp, var) \
1712 for ((var) = 0; (var) < bp->num_napi_queues; (var)++)
1713
1714/* Skip OOO FP */1711/* Skip OOO FP */
1715#define for_each_tx_queue(bp, var) \1712#define for_each_tx_queue(bp, var) \
1716 for ((var) = 0; (var) < BNX2X_NUM_QUEUES(bp); (var)++) \1713 for ((var) = 0; (var) < BNX2X_NUM_QUEUES(bp); (var)++) \
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c+4−0
@@ -2046,6 +2046,8 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode) · 2045 unmodified lines
2046 */2046 */
2047 bnx2x_setup_tc(bp->dev, bp->max_cos);2047 bnx2x_setup_tc(bp->dev, bp->max_cos);
2048 2048
2049 /* Add all NAPI objects */
2050 bnx2x_add_all_napi(bp);
2049 bnx2x_napi_enable(bp);2051 bnx2x_napi_enable(bp);
2050 2052
2051 /* set pf load just before approaching the MCP */2053 /* set pf load just before approaching the MCP */
@@ -2408,6 +2410,8 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode) · 356 unmodified lines
2408 2410
2409 /* Disable HW interrupts, NAPI */2411 /* Disable HW interrupts, NAPI */
2410 bnx2x_netif_stop(bp, 1);2412 bnx2x_netif_stop(bp, 1);
2413 /* Delete all NAPI objects */
2414 bnx2x_del_all_napi(bp);
2411 2415
2412 /* Release IRQs */2416 /* Release IRQs */
2413 bnx2x_free_irq(bp);2417 bnx2x_free_irq(bp);
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h+2−2
@@ -792,7 +792,7 @@ static inline void bnx2x_add_all_napi(struct bnx2x *bp) · 791 unmodified lines
792 bp->num_napi_queues = bp->num_queues;792 bp->num_napi_queues = bp->num_queues;
793 793
794 /* Add NAPI objects */794 /* Add NAPI objects */
795 for_each_napi_rx_queue(bp, i)795 for_each_rx_queue(bp, i)
796 netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi),796 netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi),
797 bnx2x_poll, BNX2X_NAPI_WEIGHT);797 bnx2x_poll, BNX2X_NAPI_WEIGHT);
798}798}
@@ -801,7 +801,7 @@ static inline void bnx2x_del_all_napi(struct bnx2x *bp) · 2 unmodified lines
801{801{
802 int i;802 int i;
803 803
804 for_each_napi_rx_queue(bp, i)804 for_each_rx_queue(bp, i)
805 netif_napi_del(&bnx2x_fp(bp, i, napi));805 netif_napi_del(&bnx2x_fp(bp, i, napi));
806}806}
807 807
drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c+0−2
@@ -2888,11 +2888,9 @@ static void bnx2x_get_channels(struct net_device *dev, · 2887 unmodified lines
2888 */2888 */
2889static void bnx2x_change_num_queues(struct bnx2x *bp, int num_rss)2889static void bnx2x_change_num_queues(struct bnx2x *bp, int num_rss)
2890{2890{
2891 bnx2x_del_all_napi(bp);
2892 bnx2x_disable_msi(bp);2891 bnx2x_disable_msi(bp);
2893 BNX2X_NUM_QUEUES(bp) = num_rss + NON_ETH_CONTEXT_USE;2892 BNX2X_NUM_QUEUES(bp) = num_rss + NON_ETH_CONTEXT_USE;
2894 bnx2x_set_int_mode(bp);2893 bnx2x_set_int_mode(bp);
2895 bnx2x_add_all_napi(bp);
2896}2894}
2897 2895
2898/**2896/**
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c+9−9
@@ -8427,6 +8427,8 @@ unload_error: · 8426 unmodified lines
8427 8427
8428 /* Disable HW interrupts, NAPI */8428 /* Disable HW interrupts, NAPI */
8429 bnx2x_netif_stop(bp, 1);8429 bnx2x_netif_stop(bp, 1);
8430 /* Delete all NAPI objects */
8431 bnx2x_del_all_napi(bp);
8430 8432
8431 /* Release IRQs */8433 /* Release IRQs */
8432 bnx2x_free_irq(bp);8434 bnx2x_free_irq(bp);
@@ -11229,10 +11231,12 @@ static int bnx2x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) · 2796 unmodified lines
11229static void poll_bnx2x(struct net_device *dev)11231static void poll_bnx2x(struct net_device *dev)
11230{11232{
11231 struct bnx2x *bp = netdev_priv(dev);11233 struct bnx2x *bp = netdev_priv(dev);
11234 int i;
11232 11235
11233 disable_irq(bp->pdev->irq);11236 for_each_eth_queue(bp, i) {
11234 bnx2x_interrupt(bp->pdev->irq, dev);11237 struct bnx2x_fastpath *fp = &bp->fp[i];
11235 enable_irq(bp->pdev->irq);11238 napi_schedule(&bnx2x_fp(bp, fp->index, napi));
11239 }
11236}11240}
11237#endif11241#endif
11238 11242
@@ -11899,9 +11903,6 @@ static int __devinit bnx2x_init_one(struct pci_dev *pdev, · 660 unmodified lines
11899 */11903 */
11900 bnx2x_set_int_mode(bp);11904 bnx2x_set_int_mode(bp);
11901 11905
11902 /* Add all NAPI objects */
11903 bnx2x_add_all_napi(bp);
11904
11905 rc = register_netdev(dev);11906 rc = register_netdev(dev);
11906 if (rc) {11907 if (rc) {
11907 dev_err(&pdev->dev, "Cannot register net device\n");11908 dev_err(&pdev->dev, "Cannot register net device\n");
@@ -11976,9 +11977,6 @@ static void __devexit bnx2x_remove_one(struct pci_dev *pdev) · 68 unmodified lines
11976 11977
11977 unregister_netdev(dev);11978 unregister_netdev(dev);
11978 11979
11979 /* Delete all NAPI objects */
11980 bnx2x_del_all_napi(bp);
11981
11982 /* Power on: we can't let PCI layer write to us while we are in D3 */11980 /* Power on: we can't let PCI layer write to us while we are in D3 */
11983 bnx2x_set_power_state(bp, PCI_D0);11981 bnx2x_set_power_state(bp, PCI_D0);
11984 11982
@@ -12025,6 +12023,8 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp) · 40 unmodified lines
12025 bnx2x_tx_disable(bp);12023 bnx2x_tx_disable(bp);
12026 12024
12027 bnx2x_netif_stop(bp, 0);12025 bnx2x_netif_stop(bp, 0);
12026 /* Delete all NAPI objects */
12027 bnx2x_del_all_napi(bp);
12028 12028
12029 del_timer_sync(&bp->timer);12029 del_timer_sync(&bp->timer);
12030 12030
drivers/net/ethernet/cirrus/cs89x0.c+5−5
@@ -1243,6 +1243,7 @@ static void set_multicast_list(struct net_device *dev) · 1242 unmodified lines
1243{1243{
1244 struct net_local *lp = netdev_priv(dev);1244 struct net_local *lp = netdev_priv(dev);
1245 unsigned long flags;1245 unsigned long flags;
1246 u16 cfg;
1246 1247
1247 spin_lock_irqsave(&lp->lock, flags);1248 spin_lock_irqsave(&lp->lock, flags);
1248 if (dev->flags & IFF_PROMISC)1249 if (dev->flags & IFF_PROMISC)
@@ -1260,11 +1261,10 @@ static void set_multicast_list(struct net_device *dev) · 11 unmodified lines
1260 /* in promiscuous mode, we accept errored packets,1261 /* in promiscuous mode, we accept errored packets,
1261 * so we have to enable interrupts on them also1262 * so we have to enable interrupts on them also
1262 */1263 */
1263 writereg(dev, PP_RxCFG,1264 cfg = lp->curr_rx_cfg;
1264 (lp->curr_rx_cfg |1265 if (lp->rx_mode == RX_ALL_ACCEPT)
1265 (lp->rx_mode == RX_ALL_ACCEPT)1266 cfg |= RX_CRC_ERROR_ENBL | RX_RUNT_ENBL | RX_EXTRA_DATA_ENBL;
1266 ? (RX_CRC_ERROR_ENBL | RX_RUNT_ENBL | RX_EXTRA_DATA_ENBL)1267 writereg(dev, PP_RxCFG, cfg);
1267 : 0));
1268 spin_unlock_irqrestore(&lp->lock, flags);1268 spin_unlock_irqrestore(&lp->lock, flags);
1269}1269}
1270 1270
drivers/net/ethernet/emulex/benet/be_cmds.c+4−2
@@ -259,7 +259,7 @@ int be_process_mcc(struct be_adapter *adapter) · 258 unmodified lines
259 int num = 0, status = 0;259 int num = 0, status = 0;
260 struct be_mcc_obj *mcc_obj = &adapter->mcc_obj;260 struct be_mcc_obj *mcc_obj = &adapter->mcc_obj;
261 261
262 spin_lock_bh(&adapter->mcc_cq_lock);262 spin_lock(&adapter->mcc_cq_lock);
263 while ((compl = be_mcc_compl_get(adapter))) {263 while ((compl = be_mcc_compl_get(adapter))) {
264 if (compl->flags & CQE_FLAGS_ASYNC_MASK) {264 if (compl->flags & CQE_FLAGS_ASYNC_MASK) {
265 /* Interpret flags as an async trailer */265 /* Interpret flags as an async trailer */
@@ -280,7 +280,7 @@ int be_process_mcc(struct be_adapter *adapter) · 14 unmodified lines
280 if (num)280 if (num)
281 be_cq_notify(adapter, mcc_obj->cq.id, mcc_obj->rearm_cq, num);281 be_cq_notify(adapter, mcc_obj->cq.id, mcc_obj->rearm_cq, num);
282 282
283 spin_unlock_bh(&adapter->mcc_cq_lock);283 spin_unlock(&adapter->mcc_cq_lock);
284 return status;284 return status;
285}285}
286 286
@@ -295,7 +295,9 @@ static int be_mcc_wait_compl(struct be_adapter *adapter) · 8 unmodified lines
295 if (be_error(adapter))295 if (be_error(adapter))
296 return -EIO;296 return -EIO;
297 297
298 local_bh_disable();
298 status = be_process_mcc(adapter);299 status = be_process_mcc(adapter);
300 local_bh_enable();
299 301
300 if (atomic_read(&mcc_obj->q.used) == 0)302 if (atomic_read(&mcc_obj->q.used) == 0)
301 break;303 break;
drivers/net/ethernet/emulex/benet/be_main.c+2−0
@@ -3763,7 +3763,9 @@ static void be_worker(struct work_struct *work) · 3762 unmodified lines
3763 /* when interrupts are not yet enabled, just reap any pending3763 /* when interrupts are not yet enabled, just reap any pending
3764 * mcc completions */3764 * mcc completions */
3765 if (!netif_running(adapter->netdev)) {3765 if (!netif_running(adapter->netdev)) {
3766 local_bh_disable();
3766 be_process_mcc(adapter);3767 be_process_mcc(adapter);
3768 local_bh_enable();
3767 goto reschedule;3769 goto reschedule;
3768 }3770 }
3769 3771
drivers/net/ethernet/freescale/gianfar.c+1−1
@@ -1041,7 +1041,7 @@ static int gfar_probe(struct platform_device *ofdev) · 1040 unmodified lines
1041 1041
1042 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) {1042 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) {
1043 dev->hw_features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;1043 dev->hw_features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
1044 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;1044 dev->features |= NETIF_F_HW_VLAN_RX;
1045 }1045 }
1046 1046
1047 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_EXTENDED_HASH) {1047 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_EXTENDED_HASH) {
drivers/net/ethernet/intel/e1000e/e1000.h+1−0
@@ -310,6 +310,7 @@ struct e1000_adapter { · 309 unmodified lines
310 */310 */
311 struct e1000_ring *tx_ring /* One per active queue */311 struct e1000_ring *tx_ring /* One per active queue */
312 ____cacheline_aligned_in_smp;312 ____cacheline_aligned_in_smp;
313 u32 tx_fifo_limit;
313 314
314 struct napi_struct napi;315 struct napi_struct napi;
315 316
drivers/net/ethernet/intel/e1000e/netdev.c+23−25
@@ -3516,6 +3516,15 @@ void e1000e_reset(struct e1000_adapter *adapter) · 3515 unmodified lines
3516 break;3516 break;
3517 }3517 }
3518 3518
3519 /*
3520 * Alignment of Tx data is on an arbitrary byte boundary with the
3521 * maximum size per Tx descriptor limited only to the transmit
3522 * allocation of the packet buffer minus 96 bytes with an upper
3523 * limit of 24KB due to receive synchronization limitations.
3524 */
3525 adapter->tx_fifo_limit = min_t(u32, ((er32(PBA) >> 16) << 10) - 96,
3526 24 << 10);
3527
3519 /*3528 /*
3520 * Disable Adaptive Interrupt Moderation if 2 full packets cannot3529 * Disable Adaptive Interrupt Moderation if 2 full packets cannot
3521 * fit in receive buffer.3530 * fit in receive buffer.
@@ -4785,12 +4794,9 @@ static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb) · 1263 unmodified lines
4785 return 1;4794 return 1;
4786}4795}
4787 4796
4788#define E1000_MAX_PER_TXD 8192
4789#define E1000_MAX_TXD_PWR 12
4790
4791static int e1000_tx_map(struct e1000_ring *tx_ring, struct sk_buff *skb,4797static int e1000_tx_map(struct e1000_ring *tx_ring, struct sk_buff *skb,
4792 unsigned int first, unsigned int max_per_txd,4798 unsigned int first, unsigned int max_per_txd,
4793 unsigned int nr_frags, unsigned int mss)4799 unsigned int nr_frags)
4794{4800{
4795 struct e1000_adapter *adapter = tx_ring->adapter;4801 struct e1000_adapter *adapter = tx_ring->adapter;
4796 struct pci_dev *pdev = adapter->pdev;4802 struct pci_dev *pdev = adapter->pdev;
@@ -5023,20 +5029,19 @@ static int __e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size) · 226 unmodified lines
5023 5029
5024static int e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size)5030static int e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size)
5025{5031{
5032 BUG_ON(size > tx_ring->count);
5033
5026 if (e1000_desc_unused(tx_ring) >= size)5034 if (e1000_desc_unused(tx_ring) >= size)
5027 return 0;5035 return 0;
5028 return __e1000_maybe_stop_tx(tx_ring, size);5036 return __e1000_maybe_stop_tx(tx_ring, size);
5029}5037}
5030 5038
5031#define TXD_USE_COUNT(S, X) (((S) >> (X)) + 1)
5032static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,5039static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
5033 struct net_device *netdev)5040 struct net_device *netdev)
5034{5041{
5035 struct e1000_adapter *adapter = netdev_priv(netdev);5042 struct e1000_adapter *adapter = netdev_priv(netdev);
5036 struct e1000_ring *tx_ring = adapter->tx_ring;5043 struct e1000_ring *tx_ring = adapter->tx_ring;
5037 unsigned int first;5044 unsigned int first;
5038 unsigned int max_per_txd = E1000_MAX_PER_TXD;
5039 unsigned int max_txd_pwr = E1000_MAX_TXD_PWR;
5040 unsigned int tx_flags = 0;5045 unsigned int tx_flags = 0;
5041 unsigned int len = skb_headlen(skb);5046 unsigned int len = skb_headlen(skb);
5042 unsigned int nr_frags;5047 unsigned int nr_frags;
@@ -5056,18 +5061,8 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, · 13 unmodified lines
5056 }5061 }
5057 5062
5058 mss = skb_shinfo(skb)->gso_size;5063 mss = skb_shinfo(skb)->gso_size;
5059 /*
5060 * The controller does a simple calculation to
5061 * make sure there is enough room in the FIFO before
5062 * initiating the DMA for each buffer. The calc is:
5063 * 4 = ceil(buffer len/mss). To make sure we don't
5064 * overrun the FIFO, adjust the max buffer len if mss
5065 * drops.
5066 */
5067 if (mss) {5064 if (mss) {
5068 u8 hdr_len;5065 u8 hdr_len;
5069 max_per_txd = min(mss << 2, max_per_txd);
5070 max_txd_pwr = fls(max_per_txd) - 1;
5071 5066
5072 /*5067 /*
5073 * TSO Workaround for 82571/2/3 Controllers -- if skb->data5068 * TSO Workaround for 82571/2/3 Controllers -- if skb->data
@@ -5097,12 +5092,12 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, · 23 unmodified lines
5097 count++;5092 count++;
5098 count++;5093 count++;
5099 5094
5100 count += TXD_USE_COUNT(len, max_txd_pwr);5095 count += DIV_ROUND_UP(len, adapter->tx_fifo_limit);
5101 5096
5102 nr_frags = skb_shinfo(skb)->nr_frags;5097 nr_frags = skb_shinfo(skb)->nr_frags;
5103 for (f = 0; f < nr_frags; f++)5098 for (f = 0; f < nr_frags; f++)
5104 count += TXD_USE_COUNT(skb_frag_size(&skb_shinfo(skb)->frags[f]),5099 count += DIV_ROUND_UP(skb_frag_size(&skb_shinfo(skb)->frags[f]),
5105 max_txd_pwr);5100 adapter->tx_fifo_limit);
5106 5101
5107 if (adapter->hw.mac.tx_pkt_filtering)5102 if (adapter->hw.mac.tx_pkt_filtering)
5108 e1000_transfer_dhcp_info(adapter, skb);5103 e1000_transfer_dhcp_info(adapter, skb);
@@ -5144,15 +5139,18 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, · 35 unmodified lines
5144 tx_flags |= E1000_TX_FLAGS_NO_FCS;5139 tx_flags |= E1000_TX_FLAGS_NO_FCS;
5145 5140
5146 /* if count is 0 then mapping error has occurred */5141 /* if count is 0 then mapping error has occurred */
5147 count = e1000_tx_map(tx_ring, skb, first, max_per_txd, nr_frags, mss);5142 count = e1000_tx_map(tx_ring, skb, first, adapter->tx_fifo_limit,
5143 nr_frags);
5148 if (count) {5144 if (count) {
5149 skb_tx_timestamp(skb);5145 skb_tx_timestamp(skb);
5150 5146
5151 netdev_sent_queue(netdev, skb->len);5147 netdev_sent_queue(netdev, skb->len);
5152 e1000_tx_queue(tx_ring, tx_flags, count);5148 e1000_tx_queue(tx_ring, tx_flags, count);
5153 /* Make sure there is space in the ring for the next send. */5149 /* Make sure there is space in the ring for the next send. */
5154 e1000_maybe_stop_tx(tx_ring, MAX_SKB_FRAGS + 2);5150 e1000_maybe_stop_tx(tx_ring,
5155 5151 (MAX_SKB_FRAGS *
5152 DIV_ROUND_UP(PAGE_SIZE,
5153 adapter->tx_fifo_limit) + 2));
5156 } else {5154 } else {
5157 dev_kfree_skb_any(skb);5155 dev_kfree_skb_any(skb);
5158 tx_ring->buffer_info[first].time_stamp = 0;5156 tx_ring->buffer_info[first].time_stamp = 0;
@@ -6327,8 +6325,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev, · 1168 unmodified lines
6327 adapter->hw.phy.autoneg_advertised = 0x2f;6325 adapter->hw.phy.autoneg_advertised = 0x2f;
6328 6326
6329 /* ring size defaults */6327 /* ring size defaults */
6330 adapter->rx_ring->count = 256;6328 adapter->rx_ring->count = E1000_DEFAULT_RXD;
6331 adapter->tx_ring->count = 256;6329 adapter->tx_ring->count = E1000_DEFAULT_TXD;
6332 6330
6333 /*6331 /*
6334 * Initial Wake on LAN setting - If APM wake is enabled in6332 * Initial Wake on LAN setting - If APM wake is enabled in
drivers/net/ethernet/sfc/ethtool.c+2−2
@@ -863,8 +863,8 @@ static int efx_ethtool_get_class_rule(struct efx_nic *efx, · 862 unmodified lines
863 &ip_entry->ip4dst, &ip_entry->pdst);863 &ip_entry->ip4dst, &ip_entry->pdst);
864 if (rc != 0) {864 if (rc != 0) {
865 rc = efx_filter_get_ipv4_full(865 rc = efx_filter_get_ipv4_full(
866 &spec, &proto, &ip_entry->ip4src, &ip_entry->psrc,866 &spec, &proto, &ip_entry->ip4dst, &ip_entry->pdst,
867 &ip_entry->ip4dst, &ip_entry->pdst);867 &ip_entry->ip4src, &ip_entry->psrc);
868 EFX_WARN_ON_PARANOID(rc);868 EFX_WARN_ON_PARANOID(rc);
869 ip_mask->ip4src = ~0;869 ip_mask->ip4src = ~0;
870 ip_mask->psrc = ~0;870 ip_mask->psrc = ~0;
drivers/net/ethernet/stmicro/stmmac/common.h+5−0
@@ -22,6 +22,9 @@ · 21 unmodified lines
22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
23*******************************************************************************/23*******************************************************************************/
24 24
25#ifndef __COMMON_H__
26#define __COMMON_H__
27
25#include <linux/etherdevice.h>28#include <linux/etherdevice.h>
26#include <linux/netdevice.h>29#include <linux/netdevice.h>
27#include <linux/phy.h>30#include <linux/phy.h>
@@ -366,3 +369,5 @@ extern void stmmac_set_mac(void __iomem *ioaddr, bool enable); · 338 unmodified lines
366 369
367extern void dwmac_dma_flush_tx_fifo(void __iomem *ioaddr);370extern void dwmac_dma_flush_tx_fifo(void __iomem *ioaddr);
368extern const struct stmmac_ring_mode_ops ring_mode_ops;371extern const struct stmmac_ring_mode_ops ring_mode_ops;
372
373#endif /* __COMMON_H__ */
drivers/net/ethernet/stmicro/stmmac/descs.h+6−0
@@ -20,6 +20,10 @@ · 19 unmodified lines
20 20
21 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>21 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
22*******************************************************************************/22*******************************************************************************/
23
24#ifndef __DESCS_H__
25#define __DESCS_H__
26
23struct dma_desc {27struct dma_desc {
24 /* Receive descriptor */28 /* Receive descriptor */
25 union {29 union {
@@ -166,3 +170,5 @@ enum tdes_csum_insertion { · 140 unmodified lines
166 * is not calculated */170 * is not calculated */
167 cic_full = 3, /* IP header and pseudoheader */171 cic_full = 3, /* IP header and pseudoheader */
168};172};
173
174#endif /* __DESCS_H__ */
drivers/net/ethernet/stmicro/stmmac/descs_com.h+5−0
@@ -27,6 +27,9 @@ · 26 unmodified lines
27 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>27 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
28*******************************************************************************/28*******************************************************************************/
29 29
30#ifndef __DESC_COM_H__
31#define __DESC_COM_H__
32
30#if defined(CONFIG_STMMAC_RING)33#if defined(CONFIG_STMMAC_RING)
31static inline void ehn_desc_rx_set_on_ring_chain(struct dma_desc *p, int end)34static inline void ehn_desc_rx_set_on_ring_chain(struct dma_desc *p, int end)
32{35{
@@ -124,3 +127,5 @@ static inline void norm_set_tx_desc_len(struct dma_desc *p, int len) · 91 unmodified lines
124 p->des01.tx.buffer1_size = len;127 p->des01.tx.buffer1_size = len;
125}128}
126#endif129#endif
130
131#endif /* __DESC_COM_H__ */
drivers/net/ethernet/stmicro/stmmac/dwmac100.h+5−0
@@ -22,6 +22,9 @@ · 21 unmodified lines
22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
23*******************************************************************************/23*******************************************************************************/
24 24
25#ifndef __DWMAC100_H__
26#define __DWMAC100_H__
27
25#include <linux/phy.h>28#include <linux/phy.h>
26#include "common.h"29#include "common.h"
27 30
@@ -119,3 +122,5 @@ enum ttc_control { · 91 unmodified lines
119#define DMA_MISSED_FRAME_M_CNTR 0x0000ffff /* Missed Frame Couinter */122#define DMA_MISSED_FRAME_M_CNTR 0x0000ffff /* Missed Frame Couinter */
120 123
121extern const struct stmmac_dma_ops dwmac100_dma_ops;124extern const struct stmmac_dma_ops dwmac100_dma_ops;
125
126#endif /* __DWMAC100_H__ */
drivers/net/ethernet/stmicro/stmmac/dwmac1000.h+4−1
@@ -19,6 +19,8 @@ · 18 unmodified lines
19 19
20 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>20 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
21*******************************************************************************/21*******************************************************************************/
22#ifndef __DWMAC1000_H__
23#define __DWMAC1000_H__
22 24
23#include <linux/phy.h>25#include <linux/phy.h>
24#include "common.h"26#include "common.h"
@@ -229,6 +231,7 @@ enum rtc_control { · 204 unmodified lines
229#define GMAC_MMC_RX_CSUM_OFFLOAD 0x208231#define GMAC_MMC_RX_CSUM_OFFLOAD 0x208
230 232
231/* Synopsys Core versions */233/* Synopsys Core versions */
232#define DWMAC_CORE_3_40 34234#define DWMAC_CORE_3_40 0x34
233 235
234extern const struct stmmac_dma_ops dwmac1000_dma_ops;236extern const struct stmmac_dma_ops dwmac1000_dma_ops;
237#endif /* __DWMAC1000_H__ */
drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h+5−0
@@ -22,6 +22,9 @@ · 21 unmodified lines
22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
23*******************************************************************************/23*******************************************************************************/
24 24
25#ifndef __DWMAC_DMA_H__
26#define __DWMAC_DMA_H__
27
25/* DMA CRS Control and Status Register Mapping */28/* DMA CRS Control and Status Register Mapping */
26#define DMA_BUS_MODE 0x00001000 /* Bus Mode */29#define DMA_BUS_MODE 0x00001000 /* Bus Mode */
27#define DMA_XMT_POLL_DEMAND 0x00001004 /* Transmit Poll Demand */30#define DMA_XMT_POLL_DEMAND 0x00001004 /* Transmit Poll Demand */
@@ -109,3 +112,5 @@ extern void dwmac_dma_start_rx(void __iomem *ioaddr); · 81 unmodified lines
109extern void dwmac_dma_stop_rx(void __iomem *ioaddr);112extern void dwmac_dma_stop_rx(void __iomem *ioaddr);
110extern int dwmac_dma_interrupt(void __iomem *ioaddr,113extern int dwmac_dma_interrupt(void __iomem *ioaddr,
111 struct stmmac_extra_stats *x);114 struct stmmac_extra_stats *x);
115
116#endif /* __DWMAC_DMA_H__ */
drivers/net/ethernet/stmicro/stmmac/mmc.h+5−0
@@ -22,6 +22,9 @@ · 21 unmodified lines
22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
23*******************************************************************************/23*******************************************************************************/
24 24
25#ifndef __MMC_H__
26#define __MMC_H__
27
25/* MMC control register */28/* MMC control register */
26/* When set, all counter are reset */29/* When set, all counter are reset */
27#define MMC_CNTRL_COUNTER_RESET 0x130#define MMC_CNTRL_COUNTER_RESET 0x1
@@ -129,3 +132,5 @@ struct stmmac_counters { · 101 unmodified lines
129extern void dwmac_mmc_ctrl(void __iomem *ioaddr, unsigned int mode);132extern void dwmac_mmc_ctrl(void __iomem *ioaddr, unsigned int mode);
130extern void dwmac_mmc_intr_all_mask(void __iomem *ioaddr);133extern void dwmac_mmc_intr_all_mask(void __iomem *ioaddr);
131extern void dwmac_mmc_read(void __iomem *ioaddr, struct stmmac_counters *mmc);134extern void dwmac_mmc_read(void __iomem *ioaddr, struct stmmac_counters *mmc);
135
136#endif /* __MMC_H__ */
drivers/net/ethernet/stmicro/stmmac/mmc_core.c+3−3
@@ -33,7 +33,7 @@ · 32 unmodified lines
33#define MMC_TX_INTR 0x00000108 /* MMC TX Interrupt */33#define MMC_TX_INTR 0x00000108 /* MMC TX Interrupt */
34#define MMC_RX_INTR_MASK 0x0000010c /* MMC Interrupt Mask */34#define MMC_RX_INTR_MASK 0x0000010c /* MMC Interrupt Mask */
35#define MMC_TX_INTR_MASK 0x00000110 /* MMC Interrupt Mask */35#define MMC_TX_INTR_MASK 0x00000110 /* MMC Interrupt Mask */
36#define MMC_DEFAUL_MASK 0xffffffff36#define MMC_DEFAULT_MASK 0xffffffff
37 37
38/* MMC TX counter registers */38/* MMC TX counter registers */
39 39
@@ -147,8 +147,8 @@ void dwmac_mmc_ctrl(void __iomem *ioaddr, unsigned int mode) · 107 unmodified lines
147/* To mask all all interrupts.*/147/* To mask all all interrupts.*/
148void dwmac_mmc_intr_all_mask(void __iomem *ioaddr)148void dwmac_mmc_intr_all_mask(void __iomem *ioaddr)
149{149{
150 writel(MMC_DEFAUL_MASK, ioaddr + MMC_RX_INTR_MASK);150 writel(MMC_DEFAULT_MASK, ioaddr + MMC_RX_INTR_MASK);
151 writel(MMC_DEFAUL_MASK, ioaddr + MMC_TX_INTR_MASK);151 writel(MMC_DEFAULT_MASK, ioaddr + MMC_TX_INTR_MASK);
152}152}
153 153
154/* This reads the MAC core counters (if actaully supported).154/* This reads the MAC core counters (if actaully supported).
drivers/net/ethernet/stmicro/stmmac/stmmac.h+5−0
@@ -20,6 +20,9 @@ · 19 unmodified lines
20 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>20 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
21*******************************************************************************/21*******************************************************************************/
22 22
23#ifndef __STMMAC_H__
24#define __STMMAC_H__
25
23#define STMMAC_RESOURCE_NAME "stmmaceth"26#define STMMAC_RESOURCE_NAME "stmmaceth"
24#define DRV_MODULE_VERSION "March_2012"27#define DRV_MODULE_VERSION "March_2012"
25 28
@@ -166,3 +169,5 @@ static inline void stmmac_unregister_pci(void) · 140 unmodified lines
166{169{
167}170}
168#endif /* CONFIG_STMMAC_PCI */171#endif /* CONFIG_STMMAC_PCI */
172
173#endif /* __STMMAC_H__ */
drivers/net/ethernet/stmicro/stmmac/stmmac_timer.h+4−0
@@ -21,6 +21,8 @@ · 20 unmodified lines
21 21
22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>22 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
23*******************************************************************************/23*******************************************************************************/
24#ifndef __STMMAC_TIMER_H__
25#define __STMMAC_TIMER_H__
24 26
25struct stmmac_timer {27struct stmmac_timer {
26 void (*timer_start) (unsigned int new_freq);28 void (*timer_start) (unsigned int new_freq);
@@ -40,3 +42,5 @@ void stmmac_schedule(struct net_device *dev); · 13 unmodified lines
40extern int tmu2_register_user(void *fnt, void *data);42extern int tmu2_register_user(void *fnt, void *data);
41extern void tmu2_unregister_user(void);43extern void tmu2_unregister_user(void);
42#endif44#endif
45
46#endif /* __STMMAC_TIMER_H__ */
drivers/net/ethernet/ti/davinci_mdio.c+3−1
@@ -394,8 +394,10 @@ static int __devexit davinci_mdio_remove(struct platform_device *pdev) · 393 unmodified lines
394 struct device *dev = &pdev->dev;394 struct device *dev = &pdev->dev;
395 struct davinci_mdio_data *data = dev_get_drvdata(dev);395 struct davinci_mdio_data *data = dev_get_drvdata(dev);
396 396
397 if (data->bus)397 if (data->bus) {
398 mdiobus_unregister(data->bus);
398 mdiobus_free(data->bus);399 mdiobus_free(data->bus);
400 }
399 401
400 if (data->clk)402 if (data->clk)
401 clk_put(data->clk);403 clk_put(data->clk);
drivers/net/fddi/skfp/pmf.c+1−1
@@ -673,7 +673,7 @@ void smt_add_para(struct s_smc *smc, struct s_pcon *pcon, u_short para, · 672 unmodified lines
673 sm_pm_get_ls(smc,port_to_mib(smc,port))) ;673 sm_pm_get_ls(smc,port_to_mib(smc,port))) ;
674 break ;674 break ;
675 case SMT_P_REASON :675 case SMT_P_REASON :
676 * (u_long *) to = 0 ;676 *(u32 *)to = 0 ;
677 sp_len = 4 ;677 sp_len = 4 ;
678 goto sp_done ;678 goto sp_done ;
679 case SMT_P1033 : /* time stamp */679 case SMT_P1033 : /* time stamp */
drivers/net/usb/qmi_wwan.c+4−0
@@ -413,7 +413,9 @@ static const struct usb_device_id products[] = { · 412 unmodified lines
413 413
414 /* 5. Gobi 2000 and 3000 devices */414 /* 5. Gobi 2000 and 3000 devices */
415 {QMI_GOBI_DEVICE(0x413c, 0x8186)}, /* Dell Gobi 2000 Modem device (N0218, VU936) */415 {QMI_GOBI_DEVICE(0x413c, 0x8186)}, /* Dell Gobi 2000 Modem device (N0218, VU936) */
416 {QMI_GOBI_DEVICE(0x413c, 0x8194)}, /* Dell Gobi 3000 Composite */
416 {QMI_GOBI_DEVICE(0x05c6, 0x920b)}, /* Generic Gobi 2000 Modem device */417 {QMI_GOBI_DEVICE(0x05c6, 0x920b)}, /* Generic Gobi 2000 Modem device */
418 {QMI_GOBI_DEVICE(0x05c6, 0x920d)}, /* Gobi 3000 Composite */
417 {QMI_GOBI_DEVICE(0x05c6, 0x9225)}, /* Sony Gobi 2000 Modem device (N0279, VU730) */419 {QMI_GOBI_DEVICE(0x05c6, 0x9225)}, /* Sony Gobi 2000 Modem device (N0279, VU730) */
418 {QMI_GOBI_DEVICE(0x05c6, 0x9245)}, /* Samsung Gobi 2000 Modem device (VL176) */420 {QMI_GOBI_DEVICE(0x05c6, 0x9245)}, /* Samsung Gobi 2000 Modem device (VL176) */
419 {QMI_GOBI_DEVICE(0x03f0, 0x251d)}, /* HP Gobi 2000 Modem device (VP412) */421 {QMI_GOBI_DEVICE(0x03f0, 0x251d)}, /* HP Gobi 2000 Modem device (VP412) */
@@ -441,6 +443,8 @@ static const struct usb_device_id products[] = { · 21 unmodified lines
441 {QMI_GOBI_DEVICE(0x1199, 0x9015)}, /* Sierra Wireless Gobi 3000 Modem device */443 {QMI_GOBI_DEVICE(0x1199, 0x9015)}, /* Sierra Wireless Gobi 3000 Modem device */
442 {QMI_GOBI_DEVICE(0x1199, 0x9019)}, /* Sierra Wireless Gobi 3000 Modem device */444 {QMI_GOBI_DEVICE(0x1199, 0x9019)}, /* Sierra Wireless Gobi 3000 Modem device */
443 {QMI_GOBI_DEVICE(0x1199, 0x901b)}, /* Sierra Wireless MC7770 */445 {QMI_GOBI_DEVICE(0x1199, 0x901b)}, /* Sierra Wireless MC7770 */
446 {QMI_GOBI_DEVICE(0x12d1, 0x14f1)}, /* Sony Gobi 3000 Composite */
447 {QMI_GOBI_DEVICE(0x1410, 0xa021)}, /* Foxconn Gobi 3000 Modem device (Novatel E396) */
444 448
445 { } /* END */449 { } /* END */
446};450};
drivers/net/usb/usbnet.c+1−1
@@ -1573,7 +1573,7 @@ int usbnet_resume (struct usb_interface *intf) · 1572 unmodified lines
1573 netif_device_present(dev->net) &&1573 netif_device_present(dev->net) &&
1574 !timer_pending(&dev->delay) &&1574 !timer_pending(&dev->delay) &&
1575 !test_bit(EVENT_RX_HALT, &dev->flags))1575 !test_bit(EVENT_RX_HALT, &dev->flags))
1576 rx_alloc_submit(dev, GFP_KERNEL);1576 rx_alloc_submit(dev, GFP_NOIO);
1577 1577
1578 if (!(dev->txq.qlen >= TX_QLEN(dev)))1578 if (!(dev->txq.qlen >= TX_QLEN(dev)))
1579 netif_tx_wake_all_queues(dev->net);1579 netif_tx_wake_all_queues(dev->net);
drivers/net/wireless/ath/ath5k/eeprom.c+1−1
@@ -1482,7 +1482,7 @@ ath5k_eeprom_read_target_rate_pwr_info(struct ath5k_hw *ah, unsigned int mode) · 1481 unmodified lines
1482 case AR5K_EEPROM_MODE_11A:1482 case AR5K_EEPROM_MODE_11A:
1483 offset += AR5K_EEPROM_TARGET_PWR_OFF_11A(ee->ee_version);1483 offset += AR5K_EEPROM_TARGET_PWR_OFF_11A(ee->ee_version);
1484 rate_pcal_info = ee->ee_rate_tpwr_a;1484 rate_pcal_info = ee->ee_rate_tpwr_a;
1485 ee->ee_rate_target_pwr_num[mode] = AR5K_EEPROM_N_5GHZ_CHAN;1485 ee->ee_rate_target_pwr_num[mode] = AR5K_EEPROM_N_5GHZ_RATE_CHAN;
1486 break;1486 break;
1487 case AR5K_EEPROM_MODE_11B:1487 case AR5K_EEPROM_MODE_11B:
1488 offset += AR5K_EEPROM_TARGET_PWR_OFF_11B(ee->ee_version);1488 offset += AR5K_EEPROM_TARGET_PWR_OFF_11B(ee->ee_version);
drivers/net/wireless/ath/ath5k/eeprom.h+1−0
@@ -182,6 +182,7 @@ · 181 unmodified lines
182#define AR5K_EEPROM_EEP_DELTA 10182#define AR5K_EEPROM_EEP_DELTA 10
183#define AR5K_EEPROM_N_MODES 3183#define AR5K_EEPROM_N_MODES 3
184#define AR5K_EEPROM_N_5GHZ_CHAN 10184#define AR5K_EEPROM_N_5GHZ_CHAN 10
185#define AR5K_EEPROM_N_5GHZ_RATE_CHAN 8
185#define AR5K_EEPROM_N_2GHZ_CHAN 3186#define AR5K_EEPROM_N_2GHZ_CHAN 3
186#define AR5K_EEPROM_N_2GHZ_CHAN_2413 4187#define AR5K_EEPROM_N_2GHZ_CHAN_2413 4
187#define AR5K_EEPROM_N_2GHZ_CHAN_MAX 4188#define AR5K_EEPROM_N_2GHZ_CHAN_MAX 4
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c+3−0
@@ -1233,6 +1233,9 @@ uint brcms_reset(struct brcms_info *wl) · 1232 unmodified lines
1233 /* dpc will not be rescheduled */1233 /* dpc will not be rescheduled */
1234 wl->resched = false;1234 wl->resched = false;
1235 1235
1236 /* inform publicly that interface is down */
1237 wl->pub->up = false;
1238
1236 return 0;1239 return 0;
1237}1240}
1238 1241
drivers/net/wireless/ipw2x00/ipw2100.c+2−1
@@ -2042,7 +2042,8 @@ static void isr_indicate_associated(struct ipw2100_priv *priv, u32 status) · 2041 unmodified lines
2042 return;2042 return;
2043 }2043 }
2044 len = ETH_ALEN;2044 len = ETH_ALEN;
2045 ipw2100_get_ordinal(priv, IPW_ORD_STAT_ASSN_AP_BSSID, &bssid, &len);2045 ret = ipw2100_get_ordinal(priv, IPW_ORD_STAT_ASSN_AP_BSSID, bssid,
2046 &len);
2046 if (ret) {2047 if (ret) {
2047 IPW_DEBUG_INFO("failed querying ordinals at line %d\n",2048 IPW_DEBUG_INFO("failed querying ordinals at line %d\n",
2048 __LINE__);2049 __LINE__);
drivers/net/wireless/iwlwifi/dvm/debugfs.c+3−0
@@ -124,6 +124,9 @@ static ssize_t iwl_dbgfs_sram_read(struct file *file, · 123 unmodified lines
124 const struct fw_img *img;124 const struct fw_img *img;
125 size_t bufsz;125 size_t bufsz;
126 126
127 if (!iwl_is_ready_rf(priv))
128 return -EAGAIN;
129
127 /* default is to dump the entire data segment */130 /* default is to dump the entire data segment */
128 if (!priv->dbgfs_sram_offset && !priv->dbgfs_sram_len) {131 if (!priv->dbgfs_sram_offset && !priv->dbgfs_sram_len) {
129 priv->dbgfs_sram_offset = 0x800000;132 priv->dbgfs_sram_offset = 0x800000;
drivers/net/wireless/iwlwifi/pcie/internal.h+1−1
@@ -350,7 +350,7 @@ int iwl_queue_space(const struct iwl_queue *q); · 349 unmodified lines
350/*****************************************************350/*****************************************************
351* Error handling351* Error handling
352******************************************************/352******************************************************/
353int iwl_dump_fh(struct iwl_trans *trans, char **buf, bool display);353int iwl_dump_fh(struct iwl_trans *trans, char **buf);
354void iwl_dump_csr(struct iwl_trans *trans);354void iwl_dump_csr(struct iwl_trans *trans);
355 355
356/*****************************************************356/*****************************************************
drivers/net/wireless/iwlwifi/pcie/rx.c+1−1
@@ -555,7 +555,7 @@ static void iwl_irq_handle_error(struct iwl_trans *trans) · 554 unmodified lines
555 }555 }
556 556
557 iwl_dump_csr(trans);557 iwl_dump_csr(trans);
558 iwl_dump_fh(trans, NULL, false);558 iwl_dump_fh(trans, NULL);
559 559
560 iwl_op_mode_nic_error(trans->op_mode);560 iwl_op_mode_nic_error(trans->op_mode);
561}561}
drivers/net/wireless/iwlwifi/pcie/trans.c+16−14
@@ -1649,13 +1649,9 @@ static const char *get_fh_string(int cmd) · 1648 unmodified lines
1649#undef IWL_CMD1649#undef IWL_CMD
1650}1650}
1651 1651
1652int iwl_dump_fh(struct iwl_trans *trans, char **buf, bool display)1652int iwl_dump_fh(struct iwl_trans *trans, char **buf)
1653{1653{
1654 int i;1654 int i;
1655#ifdef CONFIG_IWLWIFI_DEBUG
1656 int pos = 0;
1657 size_t bufsz = 0;
1658#endif
1659 static const u32 fh_tbl[] = {1655 static const u32 fh_tbl[] = {
1660 FH_RSCSR_CHNL0_STTS_WPTR_REG,1656 FH_RSCSR_CHNL0_STTS_WPTR_REG,
1661 FH_RSCSR_CHNL0_RBDCB_BASE_REG,1657 FH_RSCSR_CHNL0_RBDCB_BASE_REG,
@@ -1667,29 +1663,35 @@ int iwl_dump_fh(struct iwl_trans *trans, char **buf, bool display) · 5 unmodified lines
1667 FH_TSSR_TX_STATUS_REG,1663 FH_TSSR_TX_STATUS_REG,
1668 FH_TSSR_TX_ERROR_REG1664 FH_TSSR_TX_ERROR_REG
1669 };1665 };
1670#ifdef CONFIG_IWLWIFI_DEBUG1666
1671 if (display) {1667#ifdef CONFIG_IWLWIFI_DEBUGFS
1672 bufsz = ARRAY_SIZE(fh_tbl) * 48 + 40;1668 if (buf) {
1669 int pos = 0;
1670 size_t bufsz = ARRAY_SIZE(fh_tbl) * 48 + 40;
1671
1673 *buf = kmalloc(bufsz, GFP_KERNEL);1672 *buf = kmalloc(bufsz, GFP_KERNEL);
1674 if (!*buf)1673 if (!*buf)
1675 return -ENOMEM;1674 return -ENOMEM;
1675
1676 pos += scnprintf(*buf + pos, bufsz - pos,1676 pos += scnprintf(*buf + pos, bufsz - pos,
1677 "FH register values:\n");1677 "FH register values:\n");
1678 for (i = 0; i < ARRAY_SIZE(fh_tbl); i++) {1678
1679 for (i = 0; i < ARRAY_SIZE(fh_tbl); i++)
1679 pos += scnprintf(*buf + pos, bufsz - pos,1680 pos += scnprintf(*buf + pos, bufsz - pos,
1680 " %34s: 0X%08x\n",1681 " %34s: 0X%08x\n",
1681 get_fh_string(fh_tbl[i]),1682 get_fh_string(fh_tbl[i]),
1682 iwl_read_direct32(trans, fh_tbl[i]));1683 iwl_read_direct32(trans, fh_tbl[i]));
1683 }1684
1684 return pos;1685 return pos;
1685 }1686 }
1686#endif1687#endif
1688
1687 IWL_ERR(trans, "FH register values:\n");1689 IWL_ERR(trans, "FH register values:\n");
1688 for (i = 0; i < ARRAY_SIZE(fh_tbl); i++) {1690 for (i = 0; i < ARRAY_SIZE(fh_tbl); i++)
1689 IWL_ERR(trans, " %34s: 0X%08x\n",1691 IWL_ERR(trans, " %34s: 0X%08x\n",
1690 get_fh_string(fh_tbl[i]),1692 get_fh_string(fh_tbl[i]),
1691 iwl_read_direct32(trans, fh_tbl[i]));1693 iwl_read_direct32(trans, fh_tbl[i]));
1692 }1694
1693 return 0;1695 return 0;
1694}1696}
1695 1697
@@ -1982,11 +1984,11 @@ static ssize_t iwl_dbgfs_fh_reg_read(struct file *file, · 286 unmodified lines
1982 size_t count, loff_t *ppos)1984 size_t count, loff_t *ppos)
1983{1985{
1984 struct iwl_trans *trans = file->private_data;1986 struct iwl_trans *trans = file->private_data;
1985 char *buf;1987 char *buf = NULL;
1986 int pos = 0;1988 int pos = 0;
1987 ssize_t ret = -EFAULT;1989 ssize_t ret = -EFAULT;
1988 1990
1989 ret = pos = iwl_dump_fh(trans, &buf, true);1991 ret = pos = iwl_dump_fh(trans, &buf);
1990 if (buf) {1992 if (buf) {
1991 ret = simple_read_from_buffer(user_buf,1993 ret = simple_read_from_buffer(user_buf,
1992 count, ppos, buf, pos);1994 count, ppos, buf, pos);
drivers/net/xen-netfront.c+10−29
@@ -57,8 +57,7 @@ · 56 unmodified lines
57static const struct ethtool_ops xennet_ethtool_ops;57static const struct ethtool_ops xennet_ethtool_ops;
58 58
59struct netfront_cb {59struct netfront_cb {
60 struct page *page;60 int pull_to;
61 unsigned offset;
62};61};
63 62
64#define NETFRONT_SKB_CB(skb) ((struct netfront_cb *)((skb)->cb))63#define NETFRONT_SKB_CB(skb) ((struct netfront_cb *)((skb)->cb))
@@ -867,15 +866,9 @@ static int handle_incoming_queue(struct net_device *dev, · 802 unmodified lines
867 struct sk_buff *skb;866 struct sk_buff *skb;
868 867
869 while ((skb = __skb_dequeue(rxq)) != NULL) {868 while ((skb = __skb_dequeue(rxq)) != NULL) {
870 struct page *page = NETFRONT_SKB_CB(skb)->page;869 int pull_to = NETFRONT_SKB_CB(skb)->pull_to;
871 void *vaddr = page_address(page);
872 unsigned offset = NETFRONT_SKB_CB(skb)->offset;
873
874 memcpy(skb->data, vaddr + offset,
875 skb_headlen(skb));
876 870
877 if (page != skb_frag_page(&skb_shinfo(skb)->frags[0]))871 __pskb_pull_tail(skb, pull_to - skb_headlen(skb));
878 __free_page(page);
879 872
880 /* Ethernet work: Delayed to here as it peeks the header. */873 /* Ethernet work: Delayed to here as it peeks the header. */
881 skb->protocol = eth_type_trans(skb, dev);874 skb->protocol = eth_type_trans(skb, dev);
@@ -913,7 +906,6 @@ static int xennet_poll(struct napi_struct *napi, int budget) · 31 unmodified lines
913 struct sk_buff_head errq;906 struct sk_buff_head errq;
914 struct sk_buff_head tmpq;907 struct sk_buff_head tmpq;
915 unsigned long flags;908 unsigned long flags;
916 unsigned int len;
917 int err;909 int err;
918 910
919 spin_lock(&np->rx_lock);911 spin_lock(&np->rx_lock);
@@ -955,24 +947,13 @@ err: · 35 unmodified lines
955 }947 }
956 }948 }
957 949
958 NETFRONT_SKB_CB(skb)->page =950 NETFRONT_SKB_CB(skb)->pull_to = rx->status;
959 skb_frag_page(&skb_shinfo(skb)->frags[0]);951 if (NETFRONT_SKB_CB(skb)->pull_to > RX_COPY_THRESHOLD)
960 NETFRONT_SKB_CB(skb)->offset = rx->offset;952 NETFRONT_SKB_CB(skb)->pull_to = RX_COPY_THRESHOLD;
961
962 len = rx->status;
963 if (len > RX_COPY_THRESHOLD)
964 len = RX_COPY_THRESHOLD;
965 skb_put(skb, len);
966 953
967 if (rx->status > len) {954 skb_shinfo(skb)->frags[0].page_offset = rx->offset;
968 skb_shinfo(skb)->frags[0].page_offset =955 skb_frag_size_set(&skb_shinfo(skb)->frags[0], rx->status);
969 rx->offset + len;956 skb->data_len = rx->status;
970 skb_frag_size_set(&skb_shinfo(skb)->frags[0], rx->status - len);
971 skb->data_len = rx->status - len;
972 } else {
973 __skb_fill_page_desc(skb, 0, NULL, 0, 0);
974 skb_shinfo(skb)->nr_frags = 0;
975 }
976 957
977 i = xennet_fill_frags(np, skb, &tmpq);958 i = xennet_fill_frags(np, skb, &tmpq);
978 959
@@ -999,7 +980,7 @@ err: · 20 unmodified lines
999 * receive throughout using the standard receive980 * receive throughout using the standard receive
1000 * buffer size was cut by 25%(!!!).981 * buffer size was cut by 25%(!!!).
1001 */982 */
1002 skb->truesize += skb->data_len - (RX_COPY_THRESHOLD - len);983 skb->truesize += skb->data_len - RX_COPY_THRESHOLD;
1003 skb->len += skb->data_len;984 skb->len += skb->data_len;
1004 985
1005 if (rx->flags & XEN_NETRXF_csum_blank)986 if (rx->flags & XEN_NETRXF_csum_blank)
drivers/pci/pci-driver.c+6−0
@@ -280,8 +280,12 @@ static long local_pci_probe(void *_ddi) · 279 unmodified lines
280{280{
281 struct drv_dev_and_id *ddi = _ddi;281 struct drv_dev_and_id *ddi = _ddi;
282 struct device *dev = &ddi->dev->dev;282 struct device *dev = &ddi->dev->dev;
283 struct device *parent = dev->parent;
283 int rc;284 int rc;
284 285
286 /* The parent bridge must be in active state when probing */
287 if (parent)
288 pm_runtime_get_sync(parent);
285 /* Unbound PCI devices are always set to disabled and suspended.289 /* Unbound PCI devices are always set to disabled and suspended.
286 * During probe, the device is set to enabled and active and the290 * During probe, the device is set to enabled and active and the
287 * usage count is incremented. If the driver supports runtime PM,291 * usage count is incremented. If the driver supports runtime PM,
@@ -298,6 +302,8 @@ static long local_pci_probe(void *_ddi) · 10 unmodified lines
298 pm_runtime_set_suspended(dev);302 pm_runtime_set_suspended(dev);
299 pm_runtime_put_noidle(dev);303 pm_runtime_put_noidle(dev);
300 }304 }
305 if (parent)
306 pm_runtime_put(parent);
301 return rc;307 return rc;
302}308}
303 309
drivers/pci/pci-sysfs.c+42−0
@@ -458,6 +458,40 @@ boot_vga_show(struct device *dev, struct device_attribute *attr, char *buf) · 457 unmodified lines
458}458}
459struct device_attribute vga_attr = __ATTR_RO(boot_vga);459struct device_attribute vga_attr = __ATTR_RO(boot_vga);
460 460
461static void
462pci_config_pm_runtime_get(struct pci_dev *pdev)
463{
464 struct device *dev = &pdev->dev;
465 struct device *parent = dev->parent;
466
467 if (parent)
468 pm_runtime_get_sync(parent);
469 pm_runtime_get_noresume(dev);
470 /*
471 * pdev->current_state is set to PCI_D3cold during suspending,
472 * so wait until suspending completes
473 */
474 pm_runtime_barrier(dev);
475 /*
476 * Only need to resume devices in D3cold, because config
477 * registers are still accessible for devices suspended but
478 * not in D3cold.
479 */
480 if (pdev->current_state == PCI_D3cold)
481 pm_runtime_resume(dev);
482}
483
484static void
485pci_config_pm_runtime_put(struct pci_dev *pdev)
486{
487 struct device *dev = &pdev->dev;
488 struct device *parent = dev->parent;
489
490 pm_runtime_put(dev);
491 if (parent)
492 pm_runtime_put_sync(parent);
493}
494
461static ssize_t495static ssize_t
462pci_read_config(struct file *filp, struct kobject *kobj,496pci_read_config(struct file *filp, struct kobject *kobj,
463 struct bin_attribute *bin_attr,497 struct bin_attribute *bin_attr,
@@ -484,6 +518,8 @@ pci_read_config(struct file *filp, struct kobject *kobj, · 20 unmodified lines
484 size = count;518 size = count;
485 }519 }
486 520
521 pci_config_pm_runtime_get(dev);
522
487 if ((off & 1) && size) {523 if ((off & 1) && size) {
488 u8 val;524 u8 val;
489 pci_user_read_config_byte(dev, off, &val);525 pci_user_read_config_byte(dev, off, &val);
@@ -529,6 +565,8 @@ pci_read_config(struct file *filp, struct kobject *kobj, · 39 unmodified lines
529 --size;565 --size;
530 }566 }
531 567
568 pci_config_pm_runtime_put(dev);
569
532 return count;570 return count;
533}571}
534 572
@@ -549,6 +587,8 @@ pci_write_config(struct file* filp, struct kobject *kobj, · 14 unmodified lines
549 count = size;587 count = size;
550 }588 }
551 589
590 pci_config_pm_runtime_get(dev);
591
552 if ((off & 1) && size) {592 if ((off & 1) && size) {
553 pci_user_write_config_byte(dev, off, data[off - init_off]);593 pci_user_write_config_byte(dev, off, data[off - init_off]);
554 off++;594 off++;
@@ -587,6 +627,8 @@ pci_write_config(struct file* filp, struct kobject *kobj, · 32 unmodified lines
587 --size;627 --size;
588 }628 }
589 629
630 pci_config_pm_runtime_put(dev);
631
590 return count;632 return count;
591}633}
592 634
drivers/pci/pci.c+1−0
@@ -1941,6 +1941,7 @@ void pci_pm_init(struct pci_dev *dev) · 1940 unmodified lines
1941 dev->pm_cap = pm;1941 dev->pm_cap = pm;
1942 dev->d3_delay = PCI_PM_D3_WAIT;1942 dev->d3_delay = PCI_PM_D3_WAIT;
1943 dev->d3cold_delay = PCI_PM_D3COLD_WAIT;1943 dev->d3cold_delay = PCI_PM_D3COLD_WAIT;
1944 dev->d3cold_allowed = true;
1944 1945
1945 dev->d1_support = false;1946 dev->d1_support = false;
1946 dev->d2_support = false;1947 dev->d2_support = false;
drivers/pci/pcie/portdrv_pci.c+14−0
@@ -140,9 +140,17 @@ static int pcie_port_runtime_resume(struct device *dev) · 139 unmodified lines
140{140{
141 return 0;141 return 0;
142}142}
143
144static int pcie_port_runtime_idle(struct device *dev)
145{
146 /* Delay for a short while to prevent too frequent suspend/resume */
147 pm_schedule_suspend(dev, 10);
148 return -EBUSY;
149}
143#else150#else
144#define pcie_port_runtime_suspend NULL151#define pcie_port_runtime_suspend NULL
145#define pcie_port_runtime_resume NULL152#define pcie_port_runtime_resume NULL
153#define pcie_port_runtime_idle NULL
146#endif154#endif
147 155
148static const struct dev_pm_ops pcie_portdrv_pm_ops = {156static const struct dev_pm_ops pcie_portdrv_pm_ops = {
@@ -155,6 +163,7 @@ static const struct dev_pm_ops pcie_portdrv_pm_ops = { · 6 unmodified lines
155 .resume_noirq = pcie_port_resume_noirq,163 .resume_noirq = pcie_port_resume_noirq,
156 .runtime_suspend = pcie_port_runtime_suspend,164 .runtime_suspend = pcie_port_runtime_suspend,
157 .runtime_resume = pcie_port_runtime_resume,165 .runtime_resume = pcie_port_runtime_resume,
166 .runtime_idle = pcie_port_runtime_idle,
158};167};
159 168
160#define PCIE_PORTDRV_PM_OPS (&pcie_portdrv_pm_ops)169#define PCIE_PORTDRV_PM_OPS (&pcie_portdrv_pm_ops)
@@ -200,6 +209,11 @@ static int __devinit pcie_portdrv_probe(struct pci_dev *dev, · 39 unmodified lines
200 return status;209 return status;
201 210
202 pci_save_state(dev);211 pci_save_state(dev);
212 /*
213 * D3cold may not work properly on some PCIe port, so disable
214 * it by default.
215 */
216 dev->d3cold_allowed = false;
203 if (!pci_match_id(port_runtime_pm_black_list, dev))217 if (!pci_match_id(port_runtime_pm_black_list, dev))
204 pm_runtime_put_noidle(&dev->dev);218 pm_runtime_put_noidle(&dev->dev);
205 219
drivers/pci/probe.c+17−14
@@ -144,15 +144,13 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar) · 143 unmodified lines
144 case PCI_BASE_ADDRESS_MEM_TYPE_32:144 case PCI_BASE_ADDRESS_MEM_TYPE_32:
145 break;145 break;
146 case PCI_BASE_ADDRESS_MEM_TYPE_1M:146 case PCI_BASE_ADDRESS_MEM_TYPE_1M:
147 dev_info(&dev->dev, "1M mem BAR treated as 32-bit BAR\n");147 /* 1M mem BAR treated as 32-bit BAR */
148 break;148 break;
149 case PCI_BASE_ADDRESS_MEM_TYPE_64:149 case PCI_BASE_ADDRESS_MEM_TYPE_64:
150 flags |= IORESOURCE_MEM_64;150 flags |= IORESOURCE_MEM_64;
151 break;151 break;
152 default:152 default:
153 dev_warn(&dev->dev,153 /* mem unknown type treated as 32-bit BAR */
154 "mem unknown type %x treated as 32-bit BAR\n",
155 mem_type);
156 break;154 break;
157 }155 }
158 return flags;156 return flags;
@@ -173,9 +171,11 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, · 14 unmodified lines
173 u32 l, sz, mask;171 u32 l, sz, mask;
174 u16 orig_cmd;172 u16 orig_cmd;
175 struct pci_bus_region region;173 struct pci_bus_region region;
174 bool bar_too_big = false, bar_disabled = false;
176 175
177 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;176 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
178 177
178 /* No printks while decoding is disabled! */
179 if (!dev->mmio_always_on) {179 if (!dev->mmio_always_on) {
180 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);180 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
181 pci_write_config_word(dev, PCI_COMMAND,181 pci_write_config_word(dev, PCI_COMMAND,
@@ -240,8 +240,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, · 58 unmodified lines
240 goto fail;240 goto fail;
241 241
242 if ((sizeof(resource_size_t) < 8) && (sz64 > 0x100000000ULL)) {242 if ((sizeof(resource_size_t) < 8) && (sz64 > 0x100000000ULL)) {
243 dev_err(&dev->dev, "reg %x: can't handle 64-bit BAR\n",243 bar_too_big = true;
244 pos);
245 goto fail;244 goto fail;
246 }245 }
247 246
@@ -252,12 +251,11 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, · 4 unmodified lines
252 region.start = 0;251 region.start = 0;
253 region.end = sz64;252 region.end = sz64;
254 pcibios_bus_to_resource(dev, res, &region);253 pcibios_bus_to_resource(dev, res, &region);
254 bar_disabled = true;
255 } else {255 } else {
256 region.start = l64;256 region.start = l64;
257 region.end = l64 + sz64;257 region.end = l64 + sz64;
258 pcibios_bus_to_resource(dev, res, &region);258 pcibios_bus_to_resource(dev, res, &region);
259 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n",
260 pos, res);
261 }259 }
262 } else {260 } else {
263 sz = pci_size(l, sz, mask);261 sz = pci_size(l, sz, mask);
@@ -268,18 +266,23 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, · 4 unmodified lines
268 region.start = l;266 region.start = l;
269 region.end = l + sz;267 region.end = l + sz;
270 pcibios_bus_to_resource(dev, res, &region);268 pcibios_bus_to_resource(dev, res, &region);
271
272 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
273 }269 }
274 270
275 out:271 goto out;
272
273
274fail:
275 res->flags = 0;
276out:
276 if (!dev->mmio_always_on)277 if (!dev->mmio_always_on)
277 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);278 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
278 279
280 if (bar_too_big)
281 dev_err(&dev->dev, "reg %x: can't handle 64-bit BAR\n", pos);
282 if (res->flags && !bar_disabled)
283 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
284
279 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;285 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
280 fail:
281 res->flags = 0;
282 goto out;
283}286}
284 287
285static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)288static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
drivers/rtc/rtc-at91sam9.c+15−7
@@ -58,6 +58,7 @@ struct sam9_rtc { · 57 unmodified lines
58 struct rtc_device *rtcdev;58 struct rtc_device *rtcdev;
59 u32 imr;59 u32 imr;
60 void __iomem *gpbr;60 void __iomem *gpbr;
61 int irq;
61};62};
62 63
63#define rtt_readl(rtc, field) \64#define rtt_readl(rtc, field) \
@@ -292,7 +293,7 @@ static int __devinit at91_rtc_probe(struct platform_device *pdev) · 228 unmodified lines
292{293{
293 struct resource *r, *r_gpbr;294 struct resource *r, *r_gpbr;
294 struct sam9_rtc *rtc;295 struct sam9_rtc *rtc;
295 int ret;296 int ret, irq;
296 u32 mr;297 u32 mr;
297 298
298 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);299 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -302,10 +303,18 @@ static int __devinit at91_rtc_probe(struct platform_device *pdev) · 3 unmodified lines
302 return -ENODEV;303 return -ENODEV;
303 }304 }
304 305
306 irq = platform_get_irq(pdev, 0);
307 if (irq < 0) {
308 dev_err(&pdev->dev, "failed to get interrupt resource\n");
309 return irq;
310 }
311
305 rtc = kzalloc(sizeof *rtc, GFP_KERNEL);312 rtc = kzalloc(sizeof *rtc, GFP_KERNEL);
306 if (!rtc)313 if (!rtc)
307 return -ENOMEM;314 return -ENOMEM;
308 315
316 rtc->irq = irq;
317
309 /* platform setup code should have handled this; sigh */318 /* platform setup code should have handled this; sigh */
310 if (!device_can_wakeup(&pdev->dev))319 if (!device_can_wakeup(&pdev->dev))
311 device_init_wakeup(&pdev->dev, 1);320 device_init_wakeup(&pdev->dev, 1);
@@ -345,11 +354,10 @@ static int __devinit at91_rtc_probe(struct platform_device *pdev) · 33 unmodified lines
345 }354 }
346 355
347 /* register irq handler after we know what name we'll use */356 /* register irq handler after we know what name we'll use */
348 ret = request_irq(AT91_ID_SYS, at91_rtc_interrupt,357 ret = request_irq(rtc->irq, at91_rtc_interrupt, IRQF_SHARED,
349 IRQF_SHARED,
350 dev_name(&rtc->rtcdev->dev), rtc);358 dev_name(&rtc->rtcdev->dev), rtc);
351 if (ret) {359 if (ret) {
352 dev_dbg(&pdev->dev, "can't share IRQ %d?\n", AT91_ID_SYS);360 dev_dbg(&pdev->dev, "can't share IRQ %d?\n", rtc->irq);
353 rtc_device_unregister(rtc->rtcdev);361 rtc_device_unregister(rtc->rtcdev);
354 goto fail_register;362 goto fail_register;
355 }363 }
@@ -386,7 +394,7 @@ static int __devexit at91_rtc_remove(struct platform_device *pdev) · 30 unmodified lines
386 394
387 /* disable all interrupts */395 /* disable all interrupts */
388 rtt_writel(rtc, MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));396 rtt_writel(rtc, MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));
389 free_irq(AT91_ID_SYS, rtc);397 free_irq(rtc->irq, rtc);
390 398
391 rtc_device_unregister(rtc->rtcdev);399 rtc_device_unregister(rtc->rtcdev);
392 400
@@ -423,7 +431,7 @@ static int at91_rtc_suspend(struct platform_device *pdev, · 30 unmodified lines
423 rtc->imr = mr & (AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN);431 rtc->imr = mr & (AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN);
424 if (rtc->imr) {432 if (rtc->imr) {
425 if (device_may_wakeup(&pdev->dev) && (mr & AT91_RTT_ALMIEN)) {433 if (device_may_wakeup(&pdev->dev) && (mr & AT91_RTT_ALMIEN)) {
426 enable_irq_wake(AT91_ID_SYS);434 enable_irq_wake(rtc->irq);
427 /* don't let RTTINC cause wakeups */435 /* don't let RTTINC cause wakeups */
428 if (mr & AT91_RTT_RTTINCIEN)436 if (mr & AT91_RTT_RTTINCIEN)
429 rtt_writel(rtc, MR, mr & ~AT91_RTT_RTTINCIEN);437 rtt_writel(rtc, MR, mr & ~AT91_RTT_RTTINCIEN);
@@ -441,7 +449,7 @@ static int at91_rtc_resume(struct platform_device *pdev) · 11 unmodified lines
441 449
442 if (rtc->imr) {450 if (rtc->imr) {
443 if (device_may_wakeup(&pdev->dev))451 if (device_may_wakeup(&pdev->dev))
444 disable_irq_wake(AT91_ID_SYS);452 disable_irq_wake(rtc->irq);
445 mr = rtt_readl(rtc, MR);453 mr = rtt_readl(rtc, MR);
446 rtt_writel(rtc, MR, mr | rtc->imr);454 rtt_writel(rtc, MR, mr | rtc->imr);
447 }455 }
drivers/s390/block/dasd_eckd.c+1−1
@@ -3804,7 +3804,7 @@ dasd_eckd_ioctl(struct dasd_block *block, unsigned int cmd, void __user *argp) · 3803 unmodified lines
3804 case BIODASDSYMMIO:3804 case BIODASDSYMMIO:
3805 return dasd_symm_io(device, argp);3805 return dasd_symm_io(device, argp);
3806 default:3806 default:
3807 return -ENOIOCTLCMD;3807 return -ENOTTY;
3808 }3808 }
3809}3809}
3810 3810
drivers/s390/block/dasd_ioctl.c+2−5
@@ -498,12 +498,9 @@ int dasd_ioctl(struct block_device *bdev, fmode_t mode, · 497 unmodified lines
498 break;498 break;
499 default:499 default:
500 /* if the discipline has an ioctl method try it. */500 /* if the discipline has an ioctl method try it. */
501 if (base->discipline->ioctl) {501 rc = -ENOTTY;
502 if (base->discipline->ioctl)
502 rc = base->discipline->ioctl(block, cmd, argp);503 rc = base->discipline->ioctl(block, cmd, argp);
503 if (rc == -ENOIOCTLCMD)
504 rc = -EINVAL;
505 } else
506 rc = -EINVAL;
507 }504 }
508 dasd_put_device(base);505 dasd_put_device(base);
509 return rc;506 return rc;
drivers/spi/spi-bcm63xx.c+26−5
@@ -47,6 +47,8 @@ struct bcm63xx_spi { · 46 unmodified lines
47 /* Platform data */47 /* Platform data */
48 u32 speed_hz;48 u32 speed_hz;
49 unsigned fifo_size;49 unsigned fifo_size;
50 unsigned int msg_type_shift;
51 unsigned int msg_ctl_width;
50 52
51 /* Data buffers */53 /* Data buffers */
52 const unsigned char *tx_ptr;54 const unsigned char *tx_ptr;
@@ -221,13 +223,20 @@ static unsigned int bcm63xx_txrx_bufs(struct spi_device *spi, · 168 unmodified lines
221 msg_ctl = (t->len << SPI_BYTE_CNT_SHIFT);223 msg_ctl = (t->len << SPI_BYTE_CNT_SHIFT);
222 224
223 if (t->rx_buf && t->tx_buf)225 if (t->rx_buf && t->tx_buf)
224 msg_ctl |= (SPI_FD_RW << SPI_MSG_TYPE_SHIFT);226 msg_ctl |= (SPI_FD_RW << bs->msg_type_shift);
225 else if (t->rx_buf)227 else if (t->rx_buf)
226 msg_ctl |= (SPI_HD_R << SPI_MSG_TYPE_SHIFT);228 msg_ctl |= (SPI_HD_R << bs->msg_type_shift);
227 else if (t->tx_buf)229 else if (t->tx_buf)
228 msg_ctl |= (SPI_HD_W << SPI_MSG_TYPE_SHIFT);230 msg_ctl |= (SPI_HD_W << bs->msg_type_shift);
229 231
230 bcm_spi_writew(bs, msg_ctl, SPI_MSG_CTL);232 switch (bs->msg_ctl_width) {
233 case 8:
234 bcm_spi_writeb(bs, msg_ctl, SPI_MSG_CTL);
235 break;
236 case 16:
237 bcm_spi_writew(bs, msg_ctl, SPI_MSG_CTL);
238 break;
239 }
231 240
232 /* Issue the transfer */241 /* Issue the transfer */
233 cmd = SPI_CMD_START_IMMEDIATE;242 cmd = SPI_CMD_START_IMMEDIATE;
@@ -406,9 +415,21 @@ static int __devinit bcm63xx_spi_probe(struct platform_device *pdev) · 172 unmodified lines
406 master->transfer_one_message = bcm63xx_spi_transfer_one;415 master->transfer_one_message = bcm63xx_spi_transfer_one;
407 master->mode_bits = MODEBITS;416 master->mode_bits = MODEBITS;
408 bs->speed_hz = pdata->speed_hz;417 bs->speed_hz = pdata->speed_hz;
418 bs->msg_type_shift = pdata->msg_type_shift;
419 bs->msg_ctl_width = pdata->msg_ctl_width;
409 bs->tx_io = (u8 *)(bs->regs + bcm63xx_spireg(SPI_MSG_DATA));420 bs->tx_io = (u8 *)(bs->regs + bcm63xx_spireg(SPI_MSG_DATA));
410 bs->rx_io = (const u8 *)(bs->regs + bcm63xx_spireg(SPI_RX_DATA));421 bs->rx_io = (const u8 *)(bs->regs + bcm63xx_spireg(SPI_RX_DATA));
411 422
423 switch (bs->msg_ctl_width) {
424 case 8:
425 case 16:
426 break;
427 default:
428 dev_err(dev, "unsupported MSG_CTL width: %d\n",
429 bs->msg_ctl_width);
430 goto out_clk_disable;
431 }
432
412 /* Initialize hardware */433 /* Initialize hardware */
413 clk_enable(bs->clk);434 clk_enable(bs->clk);
414 bcm_spi_writeb(bs, SPI_INTR_CLEAR_ALL, SPI_INT_STATUS);435 bcm_spi_writeb(bs, SPI_INTR_CLEAR_ALL, SPI_INT_STATUS);
drivers/video/auo_k190x.c+0−2
@@ -987,7 +987,6 @@ err_regfb: · 986 unmodified lines
987 fb_dealloc_cmap(&info->cmap);987 fb_dealloc_cmap(&info->cmap);
988err_cmap:988err_cmap:
989 fb_deferred_io_cleanup(info);989 fb_deferred_io_cleanup(info);
990 kfree(info->fbdefio);
991err_defio:990err_defio:
992 vfree((void *)info->screen_base);991 vfree((void *)info->screen_base);
993err_irq:992err_irq:
@@ -1022,7 +1021,6 @@ int __devexit auok190x_common_remove(struct platform_device *pdev) · 28 unmodified lines
1022 fb_dealloc_cmap(&info->cmap);1021 fb_dealloc_cmap(&info->cmap);
1023 1022
1024 fb_deferred_io_cleanup(info);1023 fb_deferred_io_cleanup(info);
1025 kfree(info->fbdefio);
1026 1024
1027 vfree((void *)info->screen_base);1025 vfree((void *)info->screen_base);
1028 1026
drivers/video/backlight/omap1_bl.c+1−1
@@ -27,9 +27,9 @@ · 26 unmodified lines
27#include <linux/fb.h>27#include <linux/fb.h>
28#include <linux/backlight.h>28#include <linux/backlight.h>
29#include <linux/slab.h>29#include <linux/slab.h>
30#include <linux/platform_data/omap1_bl.h>
30 31
31#include <mach/hardware.h>32#include <mach/hardware.h>
32#include <plat/board.h>
33#include <plat/mux.h>33#include <plat/mux.h>
34 34
35#define OMAPBL_MAX_INTENSITY 0xff35#define OMAPBL_MAX_INTENSITY 0xff
drivers/video/console/bitblit.c+1−1
@@ -162,7 +162,7 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info, · 161 unmodified lines
162 image.depth = 1;162 image.depth = 1;
163 163
164 if (attribute) {164 if (attribute) {
165 buf = kmalloc(cellsize, GFP_KERNEL);165 buf = kmalloc(cellsize, GFP_ATOMIC);
166 if (!buf)166 if (!buf)
167 return;167 return;
168 }168 }
drivers/video/console/fbcon.c+1−1
@@ -449,7 +449,7 @@ static int __init fb_console_setup(char *this_opt) · 448 unmodified lines
449 449
450 while ((options = strsep(&this_opt, ",")) != NULL) {450 while ((options = strsep(&this_opt, ",")) != NULL) {
451 if (!strncmp(options, "font:", 5))451 if (!strncmp(options, "font:", 5))
452 strcpy(fontname, options + 5);452 strlcpy(fontname, options + 5, sizeof(fontname));
453 453
454 if (!strncmp(options, "scrollback:", 11)) {454 if (!strncmp(options, "scrollback:", 11)) {
455 options += 11;455 options += 11;
drivers/video/mb862xx/mb862xxfbdrv.c+2−0
@@ -328,6 +328,8 @@ static int mb862xxfb_ioctl(struct fb_info *fbi, unsigned int cmd, · 327 unmodified lines
328 case MB862XX_L1_SET_CFG:328 case MB862XX_L1_SET_CFG:
329 if (copy_from_user(l1_cfg, argp, sizeof(*l1_cfg)))329 if (copy_from_user(l1_cfg, argp, sizeof(*l1_cfg)))
330 return -EFAULT;330 return -EFAULT;
331 if (l1_cfg->dh == 0 || l1_cfg->dw == 0)
332 return -EINVAL;
331 if ((l1_cfg->sw >= l1_cfg->dw) && (l1_cfg->sh >= l1_cfg->dh)) {333 if ((l1_cfg->sw >= l1_cfg->dw) && (l1_cfg->sh >= l1_cfg->dh)) {
332 /* downscaling */334 /* downscaling */
333 outreg(cap, GC_CAP_CSC,335 outreg(cap, GC_CAP_CSC,
drivers/video/omap2/dss/sdi.c+14−0
@@ -105,6 +105,20 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev) · 104 unmodified lines
105 105
106 sdi_config_lcd_manager(dssdev);106 sdi_config_lcd_manager(dssdev);
107 107
108 /*
109 * LCLK and PCLK divisors are located in shadow registers, and we
110 * normally write them to DISPC registers when enabling the output.
111 * However, SDI uses pck-free as source clock for its PLL, and pck-free
112 * is affected by the divisors. And as we need the PLL before enabling
113 * the output, we need to write the divisors early.
114 *
115 * It seems just writing to the DISPC register is enough, and we don't
116 * need to care about the shadow register mechanism for pck-free. The
117 * exact reason for this is unknown.
118 */
119 dispc_mgr_set_clock_div(dssdev->manager->id,
120 &sdi.mgr_config.clock_info);
121
108 dss_sdi_init(dssdev->phy.sdi.datapairs);122 dss_sdi_init(dssdev->phy.sdi.datapairs);
109 r = dss_sdi_enable();123 r = dss_sdi_enable();
110 if (r)124 if (r)
drivers/video/omap2/omapfb/omapfb-main.c+1−1
@@ -1192,7 +1192,7 @@ static int _setcolreg(struct fb_info *fbi, u_int regno, u_int red, u_int green, · 1191 unmodified lines
1192 break;1192 break;
1193 1193
1194 if (regno < 16) {1194 if (regno < 16) {
1195 u16 pal;1195 u32 pal;
1196 pal = ((red >> (16 - var->red.length)) <<1196 pal = ((red >> (16 - var->red.length)) <<
1197 var->red.offset) |1197 var->red.offset) |
1198 ((green >> (16 - var->green.length)) <<1198 ((green >> (16 - var->green.length)) <<
drivers/watchdog/booke_wdt.c+3−4
@@ -166,18 +166,17 @@ static long booke_wdt_ioctl(struct file *file, · 165 unmodified lines
166 166
167 switch (cmd) {167 switch (cmd) {
168 case WDIOC_GETSUPPORT:168 case WDIOC_GETSUPPORT:
169 if (copy_to_user((void *)arg, &ident, sizeof(ident)))169 return copy_to_user(p, &ident, sizeof(ident)) ? -EFAULT : 0;
170 return -EFAULT;
171 case WDIOC_GETSTATUS:170 case WDIOC_GETSTATUS:
172 return put_user(0, p);171 return put_user(0, p);
173 case WDIOC_GETBOOTSTATUS:172 case WDIOC_GETBOOTSTATUS:
174 /* XXX: something is clearing TSR */173 /* XXX: something is clearing TSR */
175 tmp = mfspr(SPRN_TSR) & TSR_WRS(3);174 tmp = mfspr(SPRN_TSR) & TSR_WRS(3);
176 /* returns CARDRESET if last reset was caused by the WDT */175 /* returns CARDRESET if last reset was caused by the WDT */
177 return (tmp ? WDIOF_CARDRESET : 0);176 return put_user((tmp ? WDIOF_CARDRESET : 0), p);
178 case WDIOC_SETOPTIONS:177 case WDIOC_SETOPTIONS:
179 if (get_user(tmp, p))178 if (get_user(tmp, p))
180 return -EINVAL;179 return -EFAULT;
181 if (tmp == WDIOS_ENABLECARD) {180 if (tmp == WDIOS_ENABLECARD) {
182 booke_wdt_ping();181 booke_wdt_ping();
183 break;182 break;
drivers/watchdog/da9052_wdt.c+0−1
@@ -21,7 +21,6 @@ · 20 unmodified lines
21#include <linux/types.h>21#include <linux/types.h>
22#include <linux/kernel.h>22#include <linux/kernel.h>
23#include <linux/jiffies.h>23#include <linux/jiffies.h>
24#include <linux/delay.h>
25 24
26#include <linux/mfd/da9052/reg.h>25#include <linux/mfd/da9052/reg.h>
27#include <linux/mfd/da9052/da9052.h>26#include <linux/mfd/da9052/da9052.h>
drivers/xen/platform-pci.c+0−15
@@ -101,19 +101,6 @@ static int platform_pci_resume(struct pci_dev *pdev) · 100 unmodified lines
101 return 0;101 return 0;
102}102}
103 103
104static void __devinit prepare_shared_info(void)
105{
106#ifdef CONFIG_KEXEC
107 unsigned long addr;
108 struct shared_info *hvm_shared_info;
109
110 addr = alloc_xen_mmio(PAGE_SIZE);
111 hvm_shared_info = ioremap(addr, PAGE_SIZE);
112 memset(hvm_shared_info, 0, PAGE_SIZE);
113 xen_hvm_prepare_kexec(hvm_shared_info, addr >> PAGE_SHIFT);
114#endif
115}
116
117static int __devinit platform_pci_init(struct pci_dev *pdev,104static int __devinit platform_pci_init(struct pci_dev *pdev,
118 const struct pci_device_id *ent)105 const struct pci_device_id *ent)
119{106{
@@ -151,8 +138,6 @@ static int __devinit platform_pci_init(struct pci_dev *pdev, · 31 unmodified lines
151 platform_mmio = mmio_addr;138 platform_mmio = mmio_addr;
152 platform_mmiolen = mmio_len;139 platform_mmiolen = mmio_len;
153 140
154 prepare_shared_info();
155
156 if (!xen_have_vector_callback) {141 if (!xen_have_vector_callback) {
157 ret = xen_allocate_irq(pdev);142 ret = xen_allocate_irq(pdev);
158 if (ret) {143 if (ret) {
drivers/xen/swiotlb-xen.c+1−1
@@ -232,7 +232,7 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size, · 231 unmodified lines
232 return ret;232 return ret;
233 233
234 if (hwdev && hwdev->coherent_dma_mask)234 if (hwdev && hwdev->coherent_dma_mask)
235 dma_mask = hwdev->coherent_dma_mask;235 dma_mask = dma_alloc_coherent_mask(hwdev, flags);
236 236
237 phys = virt_to_phys(ret);237 phys = virt_to_phys(ret);
238 dev_addr = xen_phys_to_bus(phys);238 dev_addr = xen_phys_to_bus(phys);
drivers/xen/xen-pciback/pci_stub.c+4−4
@@ -353,16 +353,16 @@ static int __devinit pcistub_init_device(struct pci_dev *dev) · 352 unmodified lines
353 if (err)353 if (err)
354 goto config_release;354 goto config_release;
355 355
356 dev_dbg(&dev->dev, "reseting (FLR, D3, etc) the device\n");
357 __pci_reset_function_locked(dev);
358
359 /* We need the device active to save the state. */356 /* We need the device active to save the state. */
360 dev_dbg(&dev->dev, "save state of device\n");357 dev_dbg(&dev->dev, "save state of device\n");
361 pci_save_state(dev);358 pci_save_state(dev);
362 dev_data->pci_saved_state = pci_store_saved_state(dev);359 dev_data->pci_saved_state = pci_store_saved_state(dev);
363 if (!dev_data->pci_saved_state)360 if (!dev_data->pci_saved_state)
364 dev_err(&dev->dev, "Could not store PCI conf saved state!\n");361 dev_err(&dev->dev, "Could not store PCI conf saved state!\n");
365 362 else {
363 dev_dbg(&dev->dev, "reseting (FLR, D3, etc) the device\n");
364 __pci_reset_function_locked(dev);
365 }
366 /* Now disable the device (this also ensures some private device366 /* Now disable the device (this also ensures some private device
367 * data is setup before we export)367 * data is setup before we export)
368 */368 */
fs/bio.c+6−5
@@ -73,7 +73,7 @@ static struct kmem_cache *bio_find_or_create_slab(unsigned int extra_size) · 72 unmodified lines
73{73{
74 unsigned int sz = sizeof(struct bio) + extra_size;74 unsigned int sz = sizeof(struct bio) + extra_size;
75 struct kmem_cache *slab = NULL;75 struct kmem_cache *slab = NULL;
76 struct bio_slab *bslab;76 struct bio_slab *bslab, *new_bio_slabs;
77 unsigned int i, entry = -1;77 unsigned int i, entry = -1;
78 78
79 mutex_lock(&bio_slab_lock);79 mutex_lock(&bio_slab_lock);
@@ -97,11 +97,12 @@ static struct kmem_cache *bio_find_or_create_slab(unsigned int extra_size) · 17 unmodified lines
97 97
98 if (bio_slab_nr == bio_slab_max && entry == -1) {98 if (bio_slab_nr == bio_slab_max && entry == -1) {
99 bio_slab_max <<= 1;99 bio_slab_max <<= 1;
100 bio_slabs = krealloc(bio_slabs,100 new_bio_slabs = krealloc(bio_slabs,
101 bio_slab_max * sizeof(struct bio_slab),101 bio_slab_max * sizeof(struct bio_slab),
102 GFP_KERNEL);102 GFP_KERNEL);
103 if (!bio_slabs)103 if (!new_bio_slabs)
104 goto out_unlock;104 goto out_unlock;
105 bio_slabs = new_bio_slabs;
105 }106 }
106 if (entry == -1)107 if (entry == -1)
107 entry = bio_slab_nr++;108 entry = bio_slab_nr++;
fs/block_dev.c+3−0
@@ -1578,10 +1578,12 @@ ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, · 1577 unmodified lines
1578 unsigned long nr_segs, loff_t pos)1578 unsigned long nr_segs, loff_t pos)
1579{1579{
1580 struct file *file = iocb->ki_filp;1580 struct file *file = iocb->ki_filp;
1581 struct blk_plug plug;
1581 ssize_t ret;1582 ssize_t ret;
1582 1583
1583 BUG_ON(iocb->ki_pos != pos);1584 BUG_ON(iocb->ki_pos != pos);
1584 1585
1586 blk_start_plug(&plug);
1585 ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);1587 ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
1586 if (ret > 0 || ret == -EIOCBQUEUED) {1588 if (ret > 0 || ret == -EIOCBQUEUED) {
1587 ssize_t err;1589 ssize_t err;
@@ -1590,6 +1592,7 @@ ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, · 2 unmodified lines
1590 if (err < 0 && ret > 0)1592 if (err < 0 && ret > 0)
1591 ret = err;1593 ret = err;
1592 }1594 }
1595 blk_finish_plug(&plug);
1593 return ret;1596 return ret;
1594}1597}
1595EXPORT_SYMBOL_GPL(blkdev_aio_write);1598EXPORT_SYMBOL_GPL(blkdev_aio_write);
fs/btrfs/backref.c+2−2
@@ -1438,10 +1438,10 @@ int iterate_inodes_from_logical(u64 logical, struct btrfs_fs_info *fs_info, · 1437 unmodified lines
1438 ret = extent_from_logical(fs_info, logical, path,1438 ret = extent_from_logical(fs_info, logical, path,
1439 &found_key);1439 &found_key);
1440 btrfs_release_path(path);1440 btrfs_release_path(path);
1441 if (ret & BTRFS_EXTENT_FLAG_TREE_BLOCK)
1442 ret = -EINVAL;
1443 if (ret < 0)1441 if (ret < 0)
1444 return ret;1442 return ret;
1443 if (ret & BTRFS_EXTENT_FLAG_TREE_BLOCK)
1444 return -EINVAL;
1445 1445
1446 extent_item_pos = logical - found_key.objectid;1446 extent_item_pos = logical - found_key.objectid;
1447 ret = iterate_extent_inodes(fs_info, found_key.objectid,1447 ret = iterate_extent_inodes(fs_info, found_key.objectid,
fs/btrfs/compression.c+1−0
@@ -818,6 +818,7 @@ static void free_workspace(int type, struct list_head *workspace) · 817 unmodified lines
818 btrfs_compress_op[idx]->free_workspace(workspace);818 btrfs_compress_op[idx]->free_workspace(workspace);
819 atomic_dec(alloc_workspace);819 atomic_dec(alloc_workspace);
820wake:820wake:
821 smp_mb();
821 if (waitqueue_active(workspace_wait))822 if (waitqueue_active(workspace_wait))
822 wake_up(workspace_wait);823 wake_up(workspace_wait);
823}824}
fs/btrfs/ctree.c+3−6
@@ -420,12 +420,6 @@ void btrfs_put_tree_mod_seq(struct btrfs_fs_info *fs_info, · 419 unmodified lines
420 }420 }
421 spin_unlock(&fs_info->tree_mod_seq_lock);421 spin_unlock(&fs_info->tree_mod_seq_lock);
422 422
423 /*
424 * we removed the lowest blocker from the blocker list, so there may be
425 * more processible delayed refs.
426 */
427 wake_up(&fs_info->tree_mod_seq_wait);
428
429 /*423 /*
430 * anything that's lower than the lowest existing (read: blocked)424 * anything that's lower than the lowest existing (read: blocked)
431 * sequence number can be removed from the tree.425 * sequence number can be removed from the tree.
@@ -631,6 +625,9 @@ __tree_mod_log_free_eb(struct btrfs_fs_info *fs_info, struct extent_buffer *eb) · 199 unmodified lines
631 u32 nritems;625 u32 nritems;
632 int ret;626 int ret;
633 627
628 if (btrfs_header_level(eb) == 0)
629 return;
630
634 nritems = btrfs_header_nritems(eb);631 nritems = btrfs_header_nritems(eb);
635 for (i = nritems - 1; i >= 0; i--) {632 for (i = nritems - 1; i >= 0; i--) {
636 ret = tree_mod_log_insert_key_locked(fs_info, eb, i,633 ret = tree_mod_log_insert_key_locked(fs_info, eb, i,
fs/btrfs/ctree.h+1−2
@@ -1252,7 +1252,6 @@ struct btrfs_fs_info { · 1251 unmodified lines
1252 atomic_t tree_mod_seq;1252 atomic_t tree_mod_seq;
1253 struct list_head tree_mod_seq_list;1253 struct list_head tree_mod_seq_list;
1254 struct seq_list tree_mod_seq_elem;1254 struct seq_list tree_mod_seq_elem;
1255 wait_queue_head_t tree_mod_seq_wait;
1256 1255
1257 /* this protects tree_mod_log */1256 /* this protects tree_mod_log */
1258 rwlock_t tree_mod_log_lock;1257 rwlock_t tree_mod_log_lock;
@@ -3192,7 +3191,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, · 1933 unmodified lines
3192int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode,3191int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode,
3193 struct bio *bio, u32 *dst);3192 struct bio *bio, u32 *dst);
3194int btrfs_lookup_bio_sums_dio(struct btrfs_root *root, struct inode *inode,3193int btrfs_lookup_bio_sums_dio(struct btrfs_root *root, struct inode *inode,
3195 struct bio *bio, u64 logical_offset, u32 *dst);3194 struct bio *bio, u64 logical_offset);
3196int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,3195int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,
3197 struct btrfs_root *root,3196 struct btrfs_root *root,
3198 u64 objectid, u64 pos,3197 u64 objectid, u64 pos,
fs/btrfs/delayed-inode.c+6−6
@@ -512,8 +512,8 @@ static void __btrfs_remove_delayed_item(struct btrfs_delayed_item *delayed_item) · 511 unmodified lines
512 512
513 rb_erase(&delayed_item->rb_node, root);513 rb_erase(&delayed_item->rb_node, root);
514 delayed_item->delayed_node->count--;514 delayed_item->delayed_node->count--;
515 atomic_dec(&delayed_root->items);515 if (atomic_dec_return(&delayed_root->items) <
516 if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND &&516 BTRFS_DELAYED_BACKGROUND &&
517 waitqueue_active(&delayed_root->wait))517 waitqueue_active(&delayed_root->wait))
518 wake_up(&delayed_root->wait);518 wake_up(&delayed_root->wait);
519}519}
@@ -1028,9 +1028,10 @@ do_again: · 508 unmodified lines
1028 btrfs_release_delayed_item(prev);1028 btrfs_release_delayed_item(prev);
1029 ret = 0;1029 ret = 0;
1030 btrfs_release_path(path);1030 btrfs_release_path(path);
1031 if (curr)1031 if (curr) {
1032 mutex_unlock(&node->mutex);
1032 goto do_again;1033 goto do_again;
1033 else1034 } else
1034 goto delete_fail;1035 goto delete_fail;
1035 }1036 }
1036 1037
@@ -1055,8 +1056,7 @@ static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node) · 18 unmodified lines
1055 delayed_node->count--;1056 delayed_node->count--;
1056 1057
1057 delayed_root = delayed_node->root->fs_info->delayed_root;1058 delayed_root = delayed_node->root->fs_info->delayed_root;
1058 atomic_dec(&delayed_root->items);1059 if (atomic_dec_return(&delayed_root->items) <
1059 if (atomic_read(&delayed_root->items) <
1060 BTRFS_DELAYED_BACKGROUND &&1060 BTRFS_DELAYED_BACKGROUND &&
1061 waitqueue_active(&delayed_root->wait))1061 waitqueue_active(&delayed_root->wait))
1062 wake_up(&delayed_root->wait);1062 wake_up(&delayed_root->wait);
fs/btrfs/delayed-ref.c+128−35
@@ -38,17 +38,14 @@ · 37 unmodified lines
38static int comp_tree_refs(struct btrfs_delayed_tree_ref *ref2,38static int comp_tree_refs(struct btrfs_delayed_tree_ref *ref2,
39 struct btrfs_delayed_tree_ref *ref1)39 struct btrfs_delayed_tree_ref *ref1)
40{40{
41 if (ref1->node.type == BTRFS_TREE_BLOCK_REF_KEY) {41 if (ref1->root < ref2->root)
42 if (ref1->root < ref2->root)42 return -1;
43 return -1;43 if (ref1->root > ref2->root)
44 if (ref1->root > ref2->root)44 return 1;
45 return 1;45 if (ref1->parent < ref2->parent)
46 } else {46 return -1;
47 if (ref1->parent < ref2->parent)47 if (ref1->parent > ref2->parent)
48 return -1;48 return 1;
49 if (ref1->parent > ref2->parent)
50 return 1;
51 }
52 return 0;49 return 0;
53}50}
54 51
@@ -85,7 +82,8 @@ static int comp_data_refs(struct btrfs_delayed_data_ref *ref2, · 30 unmodified lines
85 * type of the delayed backrefs and content of delayed backrefs.82 * type of the delayed backrefs and content of delayed backrefs.
86 */83 */
87static int comp_entry(struct btrfs_delayed_ref_node *ref2,84static int comp_entry(struct btrfs_delayed_ref_node *ref2,
88 struct btrfs_delayed_ref_node *ref1)85 struct btrfs_delayed_ref_node *ref1,
86 bool compare_seq)
89{87{
90 if (ref1->bytenr < ref2->bytenr)88 if (ref1->bytenr < ref2->bytenr)
91 return -1;89 return -1;
@@ -102,10 +100,12 @@ static int comp_entry(struct btrfs_delayed_ref_node *ref2, · 10 unmodified lines
102 if (ref1->type > ref2->type)100 if (ref1->type > ref2->type)
103 return 1;101 return 1;
104 /* merging of sequenced refs is not allowed */102 /* merging of sequenced refs is not allowed */
105 if (ref1->seq < ref2->seq)103 if (compare_seq) {
106 return -1;104 if (ref1->seq < ref2->seq)
107 if (ref1->seq > ref2->seq)105 return -1;
108 return 1;106 if (ref1->seq > ref2->seq)
107 return 1;
108 }
109 if (ref1->type == BTRFS_TREE_BLOCK_REF_KEY ||109 if (ref1->type == BTRFS_TREE_BLOCK_REF_KEY ||
110 ref1->type == BTRFS_SHARED_BLOCK_REF_KEY) {110 ref1->type == BTRFS_SHARED_BLOCK_REF_KEY) {
111 return comp_tree_refs(btrfs_delayed_node_to_tree_ref(ref2),111 return comp_tree_refs(btrfs_delayed_node_to_tree_ref(ref2),
@@ -139,7 +139,7 @@ static struct btrfs_delayed_ref_node *tree_insert(struct rb_root *root, · 27 unmodified lines
139 entry = rb_entry(parent_node, struct btrfs_delayed_ref_node,139 entry = rb_entry(parent_node, struct btrfs_delayed_ref_node,
140 rb_node);140 rb_node);
141 141
142 cmp = comp_entry(entry, ins);142 cmp = comp_entry(entry, ins, 1);
143 if (cmp < 0)143 if (cmp < 0)
144 p = &(*p)->rb_left;144 p = &(*p)->rb_left;
145 else if (cmp > 0)145 else if (cmp > 0)
@@ -233,6 +233,114 @@ int btrfs_delayed_ref_lock(struct btrfs_trans_handle *trans, · 87 unmodified lines
233 return 0;233 return 0;
234}234}
235 235
236static void inline drop_delayed_ref(struct btrfs_trans_handle *trans,
237 struct btrfs_delayed_ref_root *delayed_refs,
238 struct btrfs_delayed_ref_node *ref)
239{
240 rb_erase(&ref->rb_node, &delayed_refs->root);
241 ref->in_tree = 0;
242 btrfs_put_delayed_ref(ref);
243 delayed_refs->num_entries--;
244 if (trans->delayed_ref_updates)
245 trans->delayed_ref_updates--;
246}
247
248static int merge_ref(struct btrfs_trans_handle *trans,
249 struct btrfs_delayed_ref_root *delayed_refs,
250 struct btrfs_delayed_ref_node *ref, u64 seq)
251{
252 struct rb_node *node;
253 int merged = 0;
254 int mod = 0;
255 int done = 0;
256
257 node = rb_prev(&ref->rb_node);
258 while (node) {
259 struct btrfs_delayed_ref_node *next;
260
261 next = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
262 node = rb_prev(node);
263 if (next->bytenr != ref->bytenr)
264 break;
265 if (seq && next->seq >= seq)
266 break;
267 if (comp_entry(ref, next, 0))
268 continue;
269
270 if (ref->action == next->action) {
271 mod = next->ref_mod;
272 } else {
273 if (ref->ref_mod < next->ref_mod) {
274 struct btrfs_delayed_ref_node *tmp;
275
276 tmp = ref;
277 ref = next;
278 next = tmp;
279 done = 1;
280 }
281 mod = -next->ref_mod;
282 }
283
284 merged++;
285 drop_delayed_ref(trans, delayed_refs, next);
286 ref->ref_mod += mod;
287 if (ref->ref_mod == 0) {
288 drop_delayed_ref(trans, delayed_refs, ref);
289 break;
290 } else {
291 /*
292 * You can't have multiples of the same ref on a tree
293 * block.
294 */
295 WARN_ON(ref->type == BTRFS_TREE_BLOCK_REF_KEY ||
296 ref->type == BTRFS_SHARED_BLOCK_REF_KEY);
297 }
298
299 if (done)
300 break;
301 node = rb_prev(&ref->rb_node);
302 }
303
304 return merged;
305}
306
307void btrfs_merge_delayed_refs(struct btrfs_trans_handle *trans,
308 struct btrfs_fs_info *fs_info,
309 struct btrfs_delayed_ref_root *delayed_refs,
310 struct btrfs_delayed_ref_head *head)
311{
312 struct rb_node *node;
313 u64 seq = 0;
314
315 spin_lock(&fs_info->tree_mod_seq_lock);
316 if (!list_empty(&fs_info->tree_mod_seq_list)) {
317 struct seq_list *elem;
318
319 elem = list_first_entry(&fs_info->tree_mod_seq_list,
320 struct seq_list, list);
321 seq = elem->seq;
322 }
323 spin_unlock(&fs_info->tree_mod_seq_lock);
324
325 node = rb_prev(&head->node.rb_node);
326 while (node) {
327 struct btrfs_delayed_ref_node *ref;
328
329 ref = rb_entry(node, struct btrfs_delayed_ref_node,
330 rb_node);
331 if (ref->bytenr != head->node.bytenr)
332 break;
333
334 /* We can't merge refs that are outside of our seq count */
335 if (seq && ref->seq >= seq)
336 break;
337 if (merge_ref(trans, delayed_refs, ref, seq))
338 node = rb_prev(&head->node.rb_node);
339 else
340 node = rb_prev(node);
341 }
342}
343
236int btrfs_check_delayed_seq(struct btrfs_fs_info *fs_info,344int btrfs_check_delayed_seq(struct btrfs_fs_info *fs_info,
237 struct btrfs_delayed_ref_root *delayed_refs,345 struct btrfs_delayed_ref_root *delayed_refs,
238 u64 seq)346 u64 seq)
@@ -336,18 +444,11 @@ update_existing_ref(struct btrfs_trans_handle *trans, · 97 unmodified lines
336 * every changing the extent allocation tree.444 * every changing the extent allocation tree.
337 */445 */
338 existing->ref_mod--;446 existing->ref_mod--;
339 if (existing->ref_mod == 0) {447 if (existing->ref_mod == 0)
340 rb_erase(&existing->rb_node,448 drop_delayed_ref(trans, delayed_refs, existing);
341 &delayed_refs->root);449 else
342 existing->in_tree = 0;
343 btrfs_put_delayed_ref(existing);
344 delayed_refs->num_entries--;
345 if (trans->delayed_ref_updates)
346 trans->delayed_ref_updates--;
347 } else {
348 WARN_ON(existing->type == BTRFS_TREE_BLOCK_REF_KEY ||450 WARN_ON(existing->type == BTRFS_TREE_BLOCK_REF_KEY ||
349 existing->type == BTRFS_SHARED_BLOCK_REF_KEY);451 existing->type == BTRFS_SHARED_BLOCK_REF_KEY);
350 }
351 } else {452 } else {
352 WARN_ON(existing->type == BTRFS_TREE_BLOCK_REF_KEY ||453 WARN_ON(existing->type == BTRFS_TREE_BLOCK_REF_KEY ||
353 existing->type == BTRFS_SHARED_BLOCK_REF_KEY);454 existing->type == BTRFS_SHARED_BLOCK_REF_KEY);
@@ -662,9 +763,6 @@ int btrfs_add_delayed_tree_ref(struct btrfs_fs_info *fs_info, · 308 unmodified lines
662 add_delayed_tree_ref(fs_info, trans, &ref->node, bytenr,763 add_delayed_tree_ref(fs_info, trans, &ref->node, bytenr,
663 num_bytes, parent, ref_root, level, action,764 num_bytes, parent, ref_root, level, action,
664 for_cow);765 for_cow);
665 if (!need_ref_seq(for_cow, ref_root) &&
666 waitqueue_active(&fs_info->tree_mod_seq_wait))
667 wake_up(&fs_info->tree_mod_seq_wait);
668 spin_unlock(&delayed_refs->lock);766 spin_unlock(&delayed_refs->lock);
669 if (need_ref_seq(for_cow, ref_root))767 if (need_ref_seq(for_cow, ref_root))
670 btrfs_qgroup_record_ref(trans, &ref->node, extent_op);768 btrfs_qgroup_record_ref(trans, &ref->node, extent_op);
@@ -713,9 +811,6 @@ int btrfs_add_delayed_data_ref(struct btrfs_fs_info *fs_info, · 42 unmodified lines
713 add_delayed_data_ref(fs_info, trans, &ref->node, bytenr,811 add_delayed_data_ref(fs_info, trans, &ref->node, bytenr,
714 num_bytes, parent, ref_root, owner, offset,812 num_bytes, parent, ref_root, owner, offset,
715 action, for_cow);813 action, for_cow);
716 if (!need_ref_seq(for_cow, ref_root) &&
717 waitqueue_active(&fs_info->tree_mod_seq_wait))
718 wake_up(&fs_info->tree_mod_seq_wait);
719 spin_unlock(&delayed_refs->lock);814 spin_unlock(&delayed_refs->lock);
720 if (need_ref_seq(for_cow, ref_root))815 if (need_ref_seq(for_cow, ref_root))
721 btrfs_qgroup_record_ref(trans, &ref->node, extent_op);816 btrfs_qgroup_record_ref(trans, &ref->node, extent_op);
@@ -744,8 +839,6 @@ int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info, · 22 unmodified lines
744 num_bytes, BTRFS_UPDATE_DELAYED_HEAD,839 num_bytes, BTRFS_UPDATE_DELAYED_HEAD,
745 extent_op->is_data);840 extent_op->is_data);
746 841
747 if (waitqueue_active(&fs_info->tree_mod_seq_wait))
748 wake_up(&fs_info->tree_mod_seq_wait);
749 spin_unlock(&delayed_refs->lock);842 spin_unlock(&delayed_refs->lock);
750 return 0;843 return 0;
751}844}
fs/btrfs/delayed-ref.h+4−0
@@ -167,6 +167,10 @@ int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info, · 166 unmodified lines
167 struct btrfs_trans_handle *trans,167 struct btrfs_trans_handle *trans,
168 u64 bytenr, u64 num_bytes,168 u64 bytenr, u64 num_bytes,
169 struct btrfs_delayed_extent_op *extent_op);169 struct btrfs_delayed_extent_op *extent_op);
170void btrfs_merge_delayed_refs(struct btrfs_trans_handle *trans,
171 struct btrfs_fs_info *fs_info,
172 struct btrfs_delayed_ref_root *delayed_refs,
173 struct btrfs_delayed_ref_head *head);
170 174
171struct btrfs_delayed_ref_head *175struct btrfs_delayed_ref_head *
172btrfs_find_delayed_ref_head(struct btrfs_trans_handle *trans, u64 bytenr);176btrfs_find_delayed_ref_head(struct btrfs_trans_handle *trans, u64 bytenr);
fs/btrfs/disk-io.c+14−39
@@ -377,9 +377,13 @@ static int btree_read_extent_buffer_pages(struct btrfs_root *root, · 376 unmodified lines
377 ret = read_extent_buffer_pages(io_tree, eb, start,377 ret = read_extent_buffer_pages(io_tree, eb, start,
378 WAIT_COMPLETE,378 WAIT_COMPLETE,
379 btree_get_extent, mirror_num);379 btree_get_extent, mirror_num);
380 if (!ret && !verify_parent_transid(io_tree, eb,380 if (!ret) {
381 if (!verify_parent_transid(io_tree, eb,
381 parent_transid, 0))382 parent_transid, 0))
382 break;383 break;
384 else
385 ret = -EIO;
386 }
383 387
384 /*388 /*
385 * This buffer's crc is fine, but its contents are corrupted, so389 * This buffer's crc is fine, but its contents are corrupted, so
@@ -754,9 +758,7 @@ static void run_one_async_done(struct btrfs_work *work) · 368 unmodified lines
754 limit = btrfs_async_submit_limit(fs_info);758 limit = btrfs_async_submit_limit(fs_info);
755 limit = limit * 2 / 3;759 limit = limit * 2 / 3;
756 760
757 atomic_dec(&fs_info->nr_async_submits);761 if (atomic_dec_return(&fs_info->nr_async_submits) < limit &&
758
759 if (atomic_read(&fs_info->nr_async_submits) < limit &&
760 waitqueue_active(&fs_info->async_submit_wait))762 waitqueue_active(&fs_info->async_submit_wait))
761 wake_up(&fs_info->async_submit_wait);763 wake_up(&fs_info->async_submit_wait);
762 764
@@ -2032,8 +2034,6 @@ int open_ctree(struct super_block *sb, · 1269 unmodified lines
2032 fs_info->free_chunk_space = 0;2034 fs_info->free_chunk_space = 0;
2033 fs_info->tree_mod_log = RB_ROOT;2035 fs_info->tree_mod_log = RB_ROOT;
2034 2036
2035 init_waitqueue_head(&fs_info->tree_mod_seq_wait);
2036
2037 /* readahead state */2037 /* readahead state */
2038 INIT_RADIX_TREE(&fs_info->reada_tree, GFP_NOFS & ~__GFP_WAIT);2038 INIT_RADIX_TREE(&fs_info->reada_tree, GFP_NOFS & ~__GFP_WAIT);
2039 spin_lock_init(&fs_info->reada_lock);2039 spin_lock_init(&fs_info->reada_lock);
@@ -2528,8 +2528,7 @@ retry_root_backup: · 488 unmodified lines
2528 goto fail_trans_kthread;2528 goto fail_trans_kthread;
2529 2529
2530 /* do not make disk changes in broken FS */2530 /* do not make disk changes in broken FS */
2531 if (btrfs_super_log_root(disk_super) != 0 &&2531 if (btrfs_super_log_root(disk_super) != 0) {
2532 !(fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR)) {
2533 u64 bytenr = btrfs_super_log_root(disk_super);2532 u64 bytenr = btrfs_super_log_root(disk_super);
2534 2533
2535 if (fs_devices->rw_devices == 0) {2534 if (fs_devices->rw_devices == 0) {
@@ -3189,30 +3188,14 @@ int close_ctree(struct btrfs_root *root) · 653 unmodified lines
3189 /* clear out the rbtree of defraggable inodes */3188 /* clear out the rbtree of defraggable inodes */
3190 btrfs_run_defrag_inodes(fs_info);3189 btrfs_run_defrag_inodes(fs_info);
3191 3190
3192 /*
3193 * Here come 2 situations when btrfs is broken to flip readonly:
3194 *
3195 * 1. when btrfs flips readonly somewhere else before
3196 * btrfs_commit_super, sb->s_flags has MS_RDONLY flag,
3197 * and btrfs will skip to write sb directly to keep
3198 * ERROR state on disk.
3199 *
3200 * 2. when btrfs flips readonly just in btrfs_commit_super,
3201 * and in such case, btrfs cannot write sb via btrfs_commit_super,
3202 * and since fs_state has been set BTRFS_SUPER_FLAG_ERROR flag,
3203 * btrfs will cleanup all FS resources first and write sb then.
3204 */
3205 if (!(fs_info->sb->s_flags & MS_RDONLY)) {3191 if (!(fs_info->sb->s_flags & MS_RDONLY)) {
3206 ret = btrfs_commit_super(root);3192 ret = btrfs_commit_super(root);
3207 if (ret)3193 if (ret)
3208 printk(KERN_ERR "btrfs: commit super ret %d\n", ret);3194 printk(KERN_ERR "btrfs: commit super ret %d\n", ret);
3209 }3195 }
3210 3196
3211 if (fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) {3197 if (fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR)
3212 ret = btrfs_error_commit_super(root);3198 btrfs_error_commit_super(root);
3213 if (ret)
3214 printk(KERN_ERR "btrfs: commit super ret %d\n", ret);
3215 }
3216 3199
3217 btrfs_put_block_group_cache(fs_info);3200 btrfs_put_block_group_cache(fs_info);
3218 3201
@@ -3434,18 +3417,11 @@ static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info, · 215 unmodified lines
3434 if (read_only)3417 if (read_only)
3435 return 0;3418 return 0;
3436 3419
3437 if (fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) {
3438 printk(KERN_WARNING "warning: mount fs with errors, "
3439 "running btrfsck is recommended\n");
3440 }
3441
3442 return 0;3420 return 0;
3443}3421}
3444 3422
3445int btrfs_error_commit_super(struct btrfs_root *root)3423void btrfs_error_commit_super(struct btrfs_root *root)
3446{3424{
3447 int ret;
3448
3449 mutex_lock(&root->fs_info->cleaner_mutex);3425 mutex_lock(&root->fs_info->cleaner_mutex);
3450 btrfs_run_delayed_iputs(root);3426 btrfs_run_delayed_iputs(root);
3451 mutex_unlock(&root->fs_info->cleaner_mutex);3427 mutex_unlock(&root->fs_info->cleaner_mutex);
@@ -3455,10 +3431,6 @@ int btrfs_error_commit_super(struct btrfs_root *root) · 3 unmodified lines
3455 3431
3456 /* cleanup FS via transaction */3432 /* cleanup FS via transaction */
3457 btrfs_cleanup_transaction(root);3433 btrfs_cleanup_transaction(root);
3458
3459 ret = write_ctree_super(NULL, root, 0);
3460
3461 return ret;
3462}3434}
3463 3435
3464static void btrfs_destroy_ordered_operations(struct btrfs_root *root)3436static void btrfs_destroy_ordered_operations(struct btrfs_root *root)
@@ -3782,14 +3754,17 @@ int btrfs_cleanup_transaction(struct btrfs_root *root) · 317 unmodified lines
3782 /* FIXME: cleanup wait for commit */3754 /* FIXME: cleanup wait for commit */
3783 t->in_commit = 1;3755 t->in_commit = 1;
3784 t->blocked = 1;3756 t->blocked = 1;
3757 smp_mb();
3785 if (waitqueue_active(&root->fs_info->transaction_blocked_wait))3758 if (waitqueue_active(&root->fs_info->transaction_blocked_wait))
3786 wake_up(&root->fs_info->transaction_blocked_wait);3759 wake_up(&root->fs_info->transaction_blocked_wait);
3787 3760
3788 t->blocked = 0;3761 t->blocked = 0;
3762 smp_mb();
3789 if (waitqueue_active(&root->fs_info->transaction_wait))3763 if (waitqueue_active(&root->fs_info->transaction_wait))
3790 wake_up(&root->fs_info->transaction_wait);3764 wake_up(&root->fs_info->transaction_wait);
3791 3765
3792 t->commit_done = 1;3766 t->commit_done = 1;
3767 smp_mb();
3793 if (waitqueue_active(&t->commit_wait))3768 if (waitqueue_active(&t->commit_wait))
3794 wake_up(&t->commit_wait);3769 wake_up(&t->commit_wait);
3795 3770
fs/btrfs/disk-io.h+1−1
@@ -54,7 +54,7 @@ int write_ctree_super(struct btrfs_trans_handle *trans, · 53 unmodified lines
54 struct btrfs_root *root, int max_mirrors);54 struct btrfs_root *root, int max_mirrors);
55struct buffer_head *btrfs_read_dev_super(struct block_device *bdev);55struct buffer_head *btrfs_read_dev_super(struct block_device *bdev);
56int btrfs_commit_super(struct btrfs_root *root);56int btrfs_commit_super(struct btrfs_root *root);
57int btrfs_error_commit_super(struct btrfs_root *root);57void btrfs_error_commit_super(struct btrfs_root *root);
58struct extent_buffer *btrfs_find_tree_block(struct btrfs_root *root,58struct extent_buffer *btrfs_find_tree_block(struct btrfs_root *root,
59 u64 bytenr, u32 blocksize);59 u64 bytenr, u32 blocksize);
60struct btrfs_root *btrfs_read_fs_root_no_radix(struct btrfs_root *tree_root,60struct btrfs_root *btrfs_read_fs_root_no_radix(struct btrfs_root *tree_root,
fs/btrfs/extent-tree.c+58−65
@@ -2251,6 +2251,16 @@ static noinline int run_clustered_refs(struct btrfs_trans_handle *trans, · 2250 unmodified lines
2251 }2251 }
2252 }2252 }
2253 2253
2254 /*
2255 * We need to try and merge add/drops of the same ref since we
2256 * can run into issues with relocate dropping the implicit ref
2257 * and then it being added back again before the drop can
2258 * finish. If we merged anything we need to re-loop so we can
2259 * get a good ref.
2260 */
2261 btrfs_merge_delayed_refs(trans, fs_info, delayed_refs,
2262 locked_ref);
2263
2254 /*2264 /*
2255 * locked_ref is the head node, so we have to go one2265 * locked_ref is the head node, so we have to go one
2256 * node back for any delayed ref updates2266 * node back for any delayed ref updates
@@ -2318,12 +2328,23 @@ static noinline int run_clustered_refs(struct btrfs_trans_handle *trans, · 61 unmodified lines
2318 ref->in_tree = 0;2328 ref->in_tree = 0;
2319 rb_erase(&ref->rb_node, &delayed_refs->root);2329 rb_erase(&ref->rb_node, &delayed_refs->root);
2320 delayed_refs->num_entries--;2330 delayed_refs->num_entries--;
2321 /*2331 if (locked_ref) {
2322 * we modified num_entries, but as we're currently running2332 /*
2323 * delayed refs, skip2333 * when we play the delayed ref, also correct the
2324 * wake_up(&delayed_refs->seq_wait);2334 * ref_mod on head
2325 * here.2335 */
2326 */2336 switch (ref->action) {
2337 case BTRFS_ADD_DELAYED_REF:
2338 case BTRFS_ADD_DELAYED_EXTENT:
2339 locked_ref->node.ref_mod -= ref->ref_mod;
2340 break;
2341 case BTRFS_DROP_DELAYED_REF:
2342 locked_ref->node.ref_mod += ref->ref_mod;
2343 break;
2344 default:
2345 WARN_ON(1);
2346 }
2347 }
2327 spin_unlock(&delayed_refs->lock);2348 spin_unlock(&delayed_refs->lock);
2328 2349
2329 ret = run_one_delayed_ref(trans, root, ref, extent_op,2350 ret = run_one_delayed_ref(trans, root, ref, extent_op,
@@ -2350,22 +2371,6 @@ next: · 20 unmodified lines
2350 return count;2371 return count;
2351}2372}
2352 2373
2353static void wait_for_more_refs(struct btrfs_fs_info *fs_info,
2354 struct btrfs_delayed_ref_root *delayed_refs,
2355 unsigned long num_refs,
2356 struct list_head *first_seq)
2357{
2358 spin_unlock(&delayed_refs->lock);
2359 pr_debug("waiting for more refs (num %ld, first %p)\n",
2360 num_refs, first_seq);
2361 wait_event(fs_info->tree_mod_seq_wait,
2362 num_refs != delayed_refs->num_entries ||
2363 fs_info->tree_mod_seq_list.next != first_seq);
2364 pr_debug("done waiting for more refs (num %ld, first %p)\n",
2365 delayed_refs->num_entries, fs_info->tree_mod_seq_list.next);
2366 spin_lock(&delayed_refs->lock);
2367}
2368
2369#ifdef SCRAMBLE_DELAYED_REFS2374#ifdef SCRAMBLE_DELAYED_REFS
2370/*2375/*
2371 * Normally delayed refs get processed in ascending bytenr order. This2376 * Normally delayed refs get processed in ascending bytenr order. This
@@ -2460,13 +2465,11 @@ int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, · 88 unmodified lines
2460 struct btrfs_delayed_ref_root *delayed_refs;2465 struct btrfs_delayed_ref_root *delayed_refs;
2461 struct btrfs_delayed_ref_node *ref;2466 struct btrfs_delayed_ref_node *ref;
2462 struct list_head cluster;2467 struct list_head cluster;
2463 struct list_head *first_seq = NULL;
2464 int ret;2468 int ret;
2465 u64 delayed_start;2469 u64 delayed_start;
2466 int run_all = count == (unsigned long)-1;2470 int run_all = count == (unsigned long)-1;
2467 int run_most = 0;2471 int run_most = 0;
2468 unsigned long num_refs = 0;2472 int loops;
2469 int consider_waiting;
2470 2473
2471 /* We'll clean this up in btrfs_cleanup_transaction */2474 /* We'll clean this up in btrfs_cleanup_transaction */
2472 if (trans->aborted)2475 if (trans->aborted)
@@ -2484,7 +2487,7 @@ int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, · 11 unmodified lines
2484 delayed_refs = &trans->transaction->delayed_refs;2487 delayed_refs = &trans->transaction->delayed_refs;
2485 INIT_LIST_HEAD(&cluster);2488 INIT_LIST_HEAD(&cluster);
2486again:2489again:
2487 consider_waiting = 0;2490 loops = 0;
2488 spin_lock(&delayed_refs->lock);2491 spin_lock(&delayed_refs->lock);
2489 2492
2490#ifdef SCRAMBLE_DELAYED_REFS2493#ifdef SCRAMBLE_DELAYED_REFS
@@ -2512,31 +2515,6 @@ again: · 21 unmodified lines
2512 if (ret)2515 if (ret)
2513 break;2516 break;
2514 2517
2515 if (delayed_start >= delayed_refs->run_delayed_start) {
2516 if (consider_waiting == 0) {
2517 /*
2518 * btrfs_find_ref_cluster looped. let's do one
2519 * more cycle. if we don't run any delayed ref
2520 * during that cycle (because we can't because
2521 * all of them are blocked) and if the number of
2522 * refs doesn't change, we avoid busy waiting.
2523 */
2524 consider_waiting = 1;
2525 num_refs = delayed_refs->num_entries;
2526 first_seq = root->fs_info->tree_mod_seq_list.next;
2527 } else {
2528 wait_for_more_refs(root->fs_info, delayed_refs,
2529 num_refs, first_seq);
2530 /*
2531 * after waiting, things have changed. we
2532 * dropped the lock and someone else might have
2533 * run some refs, built new clusters and so on.
2534 * therefore, we restart staleness detection.
2535 */
2536 consider_waiting = 0;
2537 }
2538 }
2539
2540 ret = run_clustered_refs(trans, root, &cluster);2518 ret = run_clustered_refs(trans, root, &cluster);
2541 if (ret < 0) {2519 if (ret < 0) {
2542 spin_unlock(&delayed_refs->lock);2520 spin_unlock(&delayed_refs->lock);
@@ -2549,9 +2527,26 @@ again: · 6 unmodified lines
2549 if (count == 0)2527 if (count == 0)
2550 break;2528 break;
2551 2529
2552 if (ret || delayed_refs->run_delayed_start == 0) {2530 if (delayed_start >= delayed_refs->run_delayed_start) {
2531 if (loops == 0) {
2532 /*
2533 * btrfs_find_ref_cluster looped. let's do one
2534 * more cycle. if we don't run any delayed ref
2535 * during that cycle (because we can't because
2536 * all of them are blocked), bail out.
2537 */
2538 loops = 1;
2539 } else {
2540 /*
2541 * no runnable refs left, stop trying
2542 */
2543 BUG_ON(run_all);
2544 break;
2545 }
2546 }
2547 if (ret) {
2553 /* refs were run, let's reset staleness detection */2548 /* refs were run, let's reset staleness detection */
2554 consider_waiting = 0;2549 loops = 0;
2555 }2550 }
2556 }2551 }
2557 2552
@@ -3007,17 +3002,16 @@ again: · 449 unmodified lines
3007 }3002 }
3008 spin_unlock(&block_group->lock);3003 spin_unlock(&block_group->lock);
3009 3004
3010 num_pages = (int)div64_u64(block_group->key.offset, 1024 * 1024 * 1024);3005 /*
3006 * Try to preallocate enough space based on how big the block group is.
3007 * Keep in mind this has to include any pinned space which could end up
3008 * taking up quite a bit since it's not folded into the other space
3009 * cache.
3010 */
3011 num_pages = (int)div64_u64(block_group->key.offset, 256 * 1024 * 1024);
3011 if (!num_pages)3012 if (!num_pages)
3012 num_pages = 1;3013 num_pages = 1;
3013 3014
3014 /*
3015 * Just to make absolutely sure we have enough space, we're going to
3016 * preallocate 12 pages worth of space for each block group. In
3017 * practice we ought to use at most 8, but we need extra space so we can
3018 * add our header and have a terminator between the extents and the
3019 * bitmaps.
3020 */
3021 num_pages *= 16;3015 num_pages *= 16;
3022 num_pages *= PAGE_CACHE_SIZE;3016 num_pages *= PAGE_CACHE_SIZE;
3023 3017
@@ -4571,8 +4565,10 @@ int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes) · 1547 unmodified lines
4571 if (root->fs_info->quota_enabled) {4565 if (root->fs_info->quota_enabled) {
4572 ret = btrfs_qgroup_reserve(root, num_bytes +4566 ret = btrfs_qgroup_reserve(root, num_bytes +
4573 nr_extents * root->leafsize);4567 nr_extents * root->leafsize);
4574 if (ret)4568 if (ret) {
4569 mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
4575 return ret;4570 return ret;
4571 }
4576 }4572 }
4577 4573
4578 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush);4574 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush);
@@ -5294,9 +5290,6 @@ static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans, · 715 unmodified lines
5294 rb_erase(&head->node.rb_node, &delayed_refs->root);5290 rb_erase(&head->node.rb_node, &delayed_refs->root);
5295 5291
5296 delayed_refs->num_entries--;5292 delayed_refs->num_entries--;
5297 smp_mb();
5298 if (waitqueue_active(&root->fs_info->tree_mod_seq_wait))
5299 wake_up(&root->fs_info->tree_mod_seq_wait);
5300 5293
5301 /*5294 /*
5302 * we don't take a ref on the node because we're removing it from the5295 * we don't take a ref on the node because we're removing it from the
fs/btrfs/extent_io.c+2−15
@@ -2330,23 +2330,10 @@ static void end_bio_extent_readpage(struct bio *bio, int err) · 2329 unmodified lines
2330 if (uptodate && tree->ops && tree->ops->readpage_end_io_hook) {2330 if (uptodate && tree->ops && tree->ops->readpage_end_io_hook) {
2331 ret = tree->ops->readpage_end_io_hook(page, start, end,2331 ret = tree->ops->readpage_end_io_hook(page, start, end,
2332 state, mirror);2332 state, mirror);
2333 if (ret) {2333 if (ret)
2334 /* no IO indicated but software detected errors
2335 * in the block, either checksum errors or
2336 * issues with the contents */
2337 struct btrfs_root *root =
2338 BTRFS_I(page->mapping->host)->root;
2339 struct btrfs_device *device;
2340
2341 uptodate = 0;2334 uptodate = 0;
2342 device = btrfs_find_device_for_logical(2335 else
2343 root, start, mirror);
2344 if (device)
2345 btrfs_dev_stat_inc_and_print(device,
2346 BTRFS_DEV_STAT_CORRUPTION_ERRS);
2347 } else {
2348 clean_io_failure(start, page);2336 clean_io_failure(start, page);
2349 }
2350 }2337 }
2351 2338
2352 if (!uptodate && tree->ops && tree->ops->readpage_io_failed_hook) {2339 if (!uptodate && tree->ops && tree->ops->readpage_io_failed_hook) {
fs/btrfs/file-item.c+2−2
@@ -272,9 +272,9 @@ int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode, · 271 unmodified lines
272}272}
273 273
274int btrfs_lookup_bio_sums_dio(struct btrfs_root *root, struct inode *inode,274int btrfs_lookup_bio_sums_dio(struct btrfs_root *root, struct inode *inode,
275 struct bio *bio, u64 offset, u32 *dst)275 struct bio *bio, u64 offset)
276{276{
277 return __btrfs_lookup_bio_sums(root, inode, bio, offset, dst, 1);277 return __btrfs_lookup_bio_sums(root, inode, bio, offset, NULL, 1);
278}278}
279 279
280int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end,280int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end,
fs/btrfs/inode.c+164−162
@@ -1008,9 +1008,7 @@ static noinline void async_cow_submit(struct btrfs_work *work) · 1007 unmodified lines
1008 nr_pages = (async_cow->end - async_cow->start + PAGE_CACHE_SIZE) >>1008 nr_pages = (async_cow->end - async_cow->start + PAGE_CACHE_SIZE) >>
1009 PAGE_CACHE_SHIFT;1009 PAGE_CACHE_SHIFT;
1010 1010
1011 atomic_sub(nr_pages, &root->fs_info->async_delalloc_pages);1011 if (atomic_sub_return(nr_pages, &root->fs_info->async_delalloc_pages) <
1012
1013 if (atomic_read(&root->fs_info->async_delalloc_pages) <
1014 5 * 1024 * 1024 &&1012 5 * 1024 * 1024 &&
1015 waitqueue_active(&root->fs_info->async_submit_wait))1013 waitqueue_active(&root->fs_info->async_submit_wait))
1016 wake_up(&root->fs_info->async_submit_wait);1014 wake_up(&root->fs_info->async_submit_wait);
@@ -1885,8 +1883,11 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent) · 868 unmodified lines
1885 trans = btrfs_join_transaction_nolock(root);1883 trans = btrfs_join_transaction_nolock(root);
1886 else1884 else
1887 trans = btrfs_join_transaction(root);1885 trans = btrfs_join_transaction(root);
1888 if (IS_ERR(trans))1886 if (IS_ERR(trans)) {
1889 return PTR_ERR(trans);1887 ret = PTR_ERR(trans);
1888 trans = NULL;
1889 goto out;
1890 }
1890 trans->block_rsv = &root->fs_info->delalloc_block_rsv;1891 trans->block_rsv = &root->fs_info->delalloc_block_rsv;
1891 ret = btrfs_update_inode_fallback(trans, root, inode);1892 ret = btrfs_update_inode_fallback(trans, root, inode);
1892 if (ret) /* -ENOMEM or corruption */1893 if (ret) /* -ENOMEM or corruption */
@@ -3174,7 +3175,7 @@ int btrfs_unlink_subvol(struct btrfs_trans_handle *trans, · 1281 unmodified lines
3174 btrfs_i_size_write(dir, dir->i_size - name_len * 2);3175 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
3175 inode_inc_iversion(dir);3176 inode_inc_iversion(dir);
3176 dir->i_mtime = dir->i_ctime = CURRENT_TIME;3177 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
3177 ret = btrfs_update_inode(trans, root, dir);3178 ret = btrfs_update_inode_fallback(trans, root, dir);
3178 if (ret)3179 if (ret)
3179 btrfs_abort_transaction(trans, root, ret);3180 btrfs_abort_transaction(trans, root, ret);
3180out:3181out:
@@ -5774,18 +5775,112 @@ out: · 2593 unmodified lines
5774 return ret;5775 return ret;
5775}5776}
5776 5777
5778static int lock_extent_direct(struct inode *inode, u64 lockstart, u64 lockend,
5779 struct extent_state **cached_state, int writing)
5780{
5781 struct btrfs_ordered_extent *ordered;
5782 int ret = 0;
5783
5784 while (1) {
5785 lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend,
5786 0, cached_state);
5787 /*
5788 * We're concerned with the entire range that we're going to be
5789 * doing DIO to, so we need to make sure theres no ordered
5790 * extents in this range.
5791 */
5792 ordered = btrfs_lookup_ordered_range(inode, lockstart,
5793 lockend - lockstart + 1);
5794
5795 /*
5796 * We need to make sure there are no buffered pages in this
5797 * range either, we could have raced between the invalidate in
5798 * generic_file_direct_write and locking the extent. The
5799 * invalidate needs to happen so that reads after a write do not
5800 * get stale data.
5801 */
5802 if (!ordered && (!writing ||
5803 !test_range_bit(&BTRFS_I(inode)->io_tree,
5804 lockstart, lockend, EXTENT_UPTODATE, 0,
5805 *cached_state)))
5806 break;
5807
5808 unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart, lockend,
5809 cached_state, GFP_NOFS);
5810
5811 if (ordered) {
5812 btrfs_start_ordered_extent(inode, ordered, 1);
5813 btrfs_put_ordered_extent(ordered);
5814 } else {
5815 /* Screw you mmap */
5816 ret = filemap_write_and_wait_range(inode->i_mapping,
5817 lockstart,
5818 lockend);
5819 if (ret)
5820 break;
5821
5822 /*
5823 * If we found a page that couldn't be invalidated just
5824 * fall back to buffered.
5825 */
5826 ret = invalidate_inode_pages2_range(inode->i_mapping,
5827 lockstart >> PAGE_CACHE_SHIFT,
5828 lockend >> PAGE_CACHE_SHIFT);
5829 if (ret)
5830 break;
5831 }
5832
5833 cond_resched();
5834 }
5835
5836 return ret;
5837}
5838
5777static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,5839static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,
5778 struct buffer_head *bh_result, int create)5840 struct buffer_head *bh_result, int create)
5779{5841{
5780 struct extent_map *em;5842 struct extent_map *em;
5781 struct btrfs_root *root = BTRFS_I(inode)->root;5843 struct btrfs_root *root = BTRFS_I(inode)->root;
5844 struct extent_state *cached_state = NULL;
5782 u64 start = iblock << inode->i_blkbits;5845 u64 start = iblock << inode->i_blkbits;
5846 u64 lockstart, lockend;
5783 u64 len = bh_result->b_size;5847 u64 len = bh_result->b_size;
5784 struct btrfs_trans_handle *trans;5848 struct btrfs_trans_handle *trans;
5849 int unlock_bits = EXTENT_LOCKED;
5850 int ret;
5851
5852 if (create) {
5853 ret = btrfs_delalloc_reserve_space(inode, len);
5854 if (ret)
5855 return ret;
5856 unlock_bits |= EXTENT_DELALLOC | EXTENT_DIRTY;
5857 } else {
5858 len = min_t(u64, len, root->sectorsize);
5859 }
5860
5861 lockstart = start;
5862 lockend = start + len - 1;
5863
5864 /*
5865 * If this errors out it's because we couldn't invalidate pagecache for
5866 * this range and we need to fallback to buffered.
5867 */
5868 if (lock_extent_direct(inode, lockstart, lockend, &cached_state, create))
5869 return -ENOTBLK;
5870
5871 if (create) {
5872 ret = set_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
5873 lockend, EXTENT_DELALLOC, NULL,
5874 &cached_state, GFP_NOFS);
5875 if (ret)
5876 goto unlock_err;
5877 }
5785 5878
5786 em = btrfs_get_extent(inode, NULL, 0, start, len, 0);5879 em = btrfs_get_extent(inode, NULL, 0, start, len, 0);
5787 if (IS_ERR(em))5880 if (IS_ERR(em)) {
5788 return PTR_ERR(em);5881 ret = PTR_ERR(em);
5882 goto unlock_err;
5883 }
5789 5884
5790 /*5885 /*
5791 * Ok for INLINE and COMPRESSED extents we need to fallback on buffered5886 * Ok for INLINE and COMPRESSED extents we need to fallback on buffered
@@ -5804,17 +5899,16 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock, · 12 unmodified lines
5804 if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags) ||5899 if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags) ||
5805 em->block_start == EXTENT_MAP_INLINE) {5900 em->block_start == EXTENT_MAP_INLINE) {
5806 free_extent_map(em);5901 free_extent_map(em);
5807 return -ENOTBLK;5902 ret = -ENOTBLK;
5903 goto unlock_err;
5808 }5904 }
5809 5905
5810 /* Just a good old fashioned hole, return */5906 /* Just a good old fashioned hole, return */
5811 if (!create && (em->block_start == EXTENT_MAP_HOLE ||5907 if (!create && (em->block_start == EXTENT_MAP_HOLE ||
5812 test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) {5908 test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) {
5813 free_extent_map(em);5909 free_extent_map(em);
5814 /* DIO will do one hole at a time, so just unlock a sector */5910 ret = 0;
5815 unlock_extent(&BTRFS_I(inode)->io_tree, start,5911 goto unlock_err;
5816 start + root->sectorsize - 1);
5817 return 0;
5818 }5912 }
5819 5913
5820 /*5914 /*
@@ -5827,8 +5921,9 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock, · 6 unmodified lines
5827 *5921 *
5828 */5922 */
5829 if (!create) {5923 if (!create) {
5830 len = em->len - (start - em->start);5924 len = min(len, em->len - (start - em->start));
5831 goto map;5925 lockstart = start + len;
5926 goto unlock;
5832 }5927 }
5833 5928
5834 if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags) ||5929 if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags) ||
@@ -5860,7 +5955,7 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock, · 25 unmodified lines
5860 btrfs_end_transaction(trans, root);5955 btrfs_end_transaction(trans, root);
5861 if (ret) {5956 if (ret) {
5862 free_extent_map(em);5957 free_extent_map(em);
5863 return ret;5958 goto unlock_err;
5864 }5959 }
5865 goto unlock;5960 goto unlock;
5866 }5961 }
@@ -5873,14 +5968,12 @@ must_cow: · 6 unmodified lines
5873 */5968 */
5874 len = bh_result->b_size;5969 len = bh_result->b_size;
5875 em = btrfs_new_extent_direct(inode, em, start, len);5970 em = btrfs_new_extent_direct(inode, em, start, len);
5876 if (IS_ERR(em))5971 if (IS_ERR(em)) {
5877 return PTR_ERR(em);5972 ret = PTR_ERR(em);
5973 goto unlock_err;
5974 }
5878 len = min(len, em->len - (start - em->start));5975 len = min(len, em->len - (start - em->start));
5879unlock:5976unlock:
5880 clear_extent_bit(&BTRFS_I(inode)->io_tree, start, start + len - 1,
5881 EXTENT_LOCKED | EXTENT_DELALLOC | EXTENT_DIRTY, 1,
5882 0, NULL, GFP_NOFS);
5883map:
5884 bh_result->b_blocknr = (em->block_start + (start - em->start)) >>5977 bh_result->b_blocknr = (em->block_start + (start - em->start)) >>
5885 inode->i_blkbits;5978 inode->i_blkbits;
5886 bh_result->b_size = len;5979 bh_result->b_size = len;
@@ -5898,9 +5991,44 @@ map: · 11 unmodified lines
5898 i_size_write(inode, start + len);5991 i_size_write(inode, start + len);
5899 }5992 }
5900 5993
5994 /*
5995 * In the case of write we need to clear and unlock the entire range,
5996 * in the case of read we need to unlock only the end area that we
5997 * aren't using if there is any left over space.
5998 */
5999 if (lockstart < lockend) {
6000 if (create && len < lockend - lockstart) {
6001 clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
6002 lockstart + len - 1, unlock_bits, 1, 0,
6003 &cached_state, GFP_NOFS);
6004 /*
6005 * Beside unlock, we also need to cleanup reserved space
6006 * for the left range by attaching EXTENT_DO_ACCOUNTING.
6007 */
6008 clear_extent_bit(&BTRFS_I(inode)->io_tree,
6009 lockstart + len, lockend,
6010 unlock_bits | EXTENT_DO_ACCOUNTING,
6011 1, 0, NULL, GFP_NOFS);
6012 } else {
6013 clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
6014 lockend, unlock_bits, 1, 0,
6015 &cached_state, GFP_NOFS);
6016 }
6017 } else {
6018 free_extent_state(cached_state);
6019 }
6020
5901 free_extent_map(em);6021 free_extent_map(em);
5902 6022
5903 return 0;6023 return 0;
6024
6025unlock_err:
6026 if (create)
6027 unlock_bits |= EXTENT_DO_ACCOUNTING;
6028
6029 clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, lockend,
6030 unlock_bits, 1, 0, &cached_state, GFP_NOFS);
6031 return ret;
5904}6032}
5905 6033
5906struct btrfs_dio_private {6034struct btrfs_dio_private {
@@ -5908,7 +6036,6 @@ struct btrfs_dio_private { · 1 unmodified line
5908 u64 logical_offset;6036 u64 logical_offset;
5909 u64 disk_bytenr;6037 u64 disk_bytenr;
5910 u64 bytes;6038 u64 bytes;
5911 u32 *csums;
5912 void *private;6039 void *private;
5913 6040
5914 /* number of bios pending for this dio */6041 /* number of bios pending for this dio */
@@ -5928,7 +6055,6 @@ static void btrfs_endio_direct_read(struct bio *bio, int err) · 13 unmodified lines
5928 struct inode *inode = dip->inode;6055 struct inode *inode = dip->inode;
5929 struct btrfs_root *root = BTRFS_I(inode)->root;6056 struct btrfs_root *root = BTRFS_I(inode)->root;
5930 u64 start;6057 u64 start;
5931 u32 *private = dip->csums;
5932 6058
5933 start = dip->logical_offset;6059 start = dip->logical_offset;
5934 do {6060 do {
@@ -5936,8 +6062,12 @@ static void btrfs_endio_direct_read(struct bio *bio, int err) · 1 unmodified line
5936 struct page *page = bvec->bv_page;6062 struct page *page = bvec->bv_page;
5937 char *kaddr;6063 char *kaddr;
5938 u32 csum = ~(u32)0;6064 u32 csum = ~(u32)0;
6065 u64 private = ~(u32)0;
5939 unsigned long flags;6066 unsigned long flags;
5940 6067
6068 if (get_state_private(&BTRFS_I(inode)->io_tree,
6069 start, &private))
6070 goto failed;
5941 local_irq_save(flags);6071 local_irq_save(flags);
5942 kaddr = kmap_atomic(page);6072 kaddr = kmap_atomic(page);
5943 csum = btrfs_csum_data(root, kaddr + bvec->bv_offset,6073 csum = btrfs_csum_data(root, kaddr + bvec->bv_offset,
@@ -5947,18 +6077,18 @@ static void btrfs_endio_direct_read(struct bio *bio, int err) · 3 unmodified lines
5947 local_irq_restore(flags);6077 local_irq_restore(flags);
5948 6078
5949 flush_dcache_page(bvec->bv_page);6079 flush_dcache_page(bvec->bv_page);
5950 if (csum != *private) {6080 if (csum != private) {
6081failed:
5951 printk(KERN_ERR "btrfs csum failed ino %llu off"6082 printk(KERN_ERR "btrfs csum failed ino %llu off"
5952 " %llu csum %u private %u\n",6083 " %llu csum %u private %u\n",
5953 (unsigned long long)btrfs_ino(inode),6084 (unsigned long long)btrfs_ino(inode),
5954 (unsigned long long)start,6085 (unsigned long long)start,
5955 csum, *private);6086 csum, (unsigned)private);
5956 err = -EIO;6087 err = -EIO;
5957 }6088 }
5958 }6089 }
5959 6090
5960 start += bvec->bv_len;6091 start += bvec->bv_len;
5961 private++;
5962 bvec++;6092 bvec++;
5963 } while (bvec <= bvec_end);6093 } while (bvec <= bvec_end);
5964 6094
@@ -5966,7 +6096,6 @@ static void btrfs_endio_direct_read(struct bio *bio, int err) · 1 unmodified line
5966 dip->logical_offset + dip->bytes - 1);6096 dip->logical_offset + dip->bytes - 1);
5967 bio->bi_private = dip->private;6097 bio->bi_private = dip->private;
5968 6098
5969 kfree(dip->csums);
5970 kfree(dip);6099 kfree(dip);
5971 6100
5972 /* If we had a csum failure make sure to clear the uptodate flag */6101 /* If we had a csum failure make sure to clear the uptodate flag */
@@ -6072,7 +6201,7 @@ static struct bio *btrfs_dio_bio_alloc(struct block_device *bdev, · 99 unmodified lines
6072 6201
6073static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,6202static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,
6074 int rw, u64 file_offset, int skip_sum,6203 int rw, u64 file_offset, int skip_sum,
6075 u32 *csums, int async_submit)6204 int async_submit)
6076{6205{
6077 int write = rw & REQ_WRITE;6206 int write = rw & REQ_WRITE;
6078 struct btrfs_root *root = BTRFS_I(inode)->root;6207 struct btrfs_root *root = BTRFS_I(inode)->root;
@@ -6105,8 +6234,7 @@ static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode, · 26 unmodified lines
6105 if (ret)6234 if (ret)
6106 goto err;6235 goto err;
6107 } else if (!skip_sum) {6236 } else if (!skip_sum) {
6108 ret = btrfs_lookup_bio_sums_dio(root, inode, bio,6237 ret = btrfs_lookup_bio_sums_dio(root, inode, bio, file_offset);
6109 file_offset, csums);
6110 if (ret)6238 if (ret)
6111 goto err;6239 goto err;
6112 }6240 }
@@ -6132,10 +6260,8 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip, · 19 unmodified lines
6132 u64 submit_len = 0;6260 u64 submit_len = 0;
6133 u64 map_length;6261 u64 map_length;
6134 int nr_pages = 0;6262 int nr_pages = 0;
6135 u32 *csums = dip->csums;
6136 int ret = 0;6263 int ret = 0;
6137 int async_submit = 0;6264 int async_submit = 0;
6138 int write = rw & REQ_WRITE;
6139 6265
6140 map_length = orig_bio->bi_size;6266 map_length = orig_bio->bi_size;
6141 ret = btrfs_map_block(map_tree, READ, start_sector << 9,6267 ret = btrfs_map_block(map_tree, READ, start_sector << 9,
@@ -6171,16 +6297,13 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip, · 29 unmodified lines
6171 atomic_inc(&dip->pending_bios);6297 atomic_inc(&dip->pending_bios);
6172 ret = __btrfs_submit_dio_bio(bio, inode, rw,6298 ret = __btrfs_submit_dio_bio(bio, inode, rw,
6173 file_offset, skip_sum,6299 file_offset, skip_sum,
6174 csums, async_submit);6300 async_submit);
6175 if (ret) {6301 if (ret) {
6176 bio_put(bio);6302 bio_put(bio);
6177 atomic_dec(&dip->pending_bios);6303 atomic_dec(&dip->pending_bios);
6178 goto out_err;6304 goto out_err;
6179 }6305 }
6180 6306
6181 /* Write's use the ordered csums */
6182 if (!write && !skip_sum)
6183 csums = csums + nr_pages;
6184 start_sector += submit_len >> 9;6307 start_sector += submit_len >> 9;
6185 file_offset += submit_len;6308 file_offset += submit_len;
6186 6309
@@ -6210,7 +6333,7 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip, · 23 unmodified lines
6210 6333
6211submit:6334submit:
6212 ret = __btrfs_submit_dio_bio(bio, inode, rw, file_offset, skip_sum,6335 ret = __btrfs_submit_dio_bio(bio, inode, rw, file_offset, skip_sum,
6213 csums, async_submit);6336 async_submit);
6214 if (!ret)6337 if (!ret)
6215 return 0;6338 return 0;
6216 6339
@@ -6246,17 +6369,6 @@ static void btrfs_submit_direct(int rw, struct bio *bio, struct inode *inode, · 29 unmodified lines
6246 ret = -ENOMEM;6369 ret = -ENOMEM;
6247 goto free_ordered;6370 goto free_ordered;
6248 }6371 }
6249 dip->csums = NULL;
6250
6251 /* Write's use the ordered csum stuff, so we don't need dip->csums */
6252 if (!write && !skip_sum) {
6253 dip->csums = kmalloc(sizeof(u32) * bio->bi_vcnt, GFP_NOFS);
6254 if (!dip->csums) {
6255 kfree(dip);
6256 ret = -ENOMEM;
6257 goto free_ordered;
6258 }
6259 }
6260 6372
6261 dip->private = bio->bi_private;6373 dip->private = bio->bi_private;
6262 dip->inode = inode;6374 dip->inode = inode;
@@ -6341,132 +6453,22 @@ static ssize_t check_direct_IO(struct btrfs_root *root, int rw, struct kiocb *io · 78 unmodified lines
6341out:6453out:
6342 return retval;6454 return retval;
6343}6455}
6456
6344static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb,6457static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb,
6345 const struct iovec *iov, loff_t offset,6458 const struct iovec *iov, loff_t offset,
6346 unsigned long nr_segs)6459 unsigned long nr_segs)
6347{6460{
6348 struct file *file = iocb->ki_filp;6461 struct file *file = iocb->ki_filp;
6349 struct inode *inode = file->f_mapping->host;6462 struct inode *inode = file->f_mapping->host;
6350 struct btrfs_ordered_extent *ordered;
6351 struct extent_state *cached_state = NULL;
6352 u64 lockstart, lockend;
6353 ssize_t ret;
6354 int writing = rw & WRITE;
6355 int write_bits = 0;
6356 size_t count = iov_length(iov, nr_segs);
6357 6463
6358 if (check_direct_IO(BTRFS_I(inode)->root, rw, iocb, iov,6464 if (check_direct_IO(BTRFS_I(inode)->root, rw, iocb, iov,
6359 offset, nr_segs)) {6465 offset, nr_segs))
6360 return 0;6466 return 0;
6361 }
6362
6363 lockstart = offset;
6364 lockend = offset + count - 1;
6365
6366 if (writing) {
6367 ret = btrfs_delalloc_reserve_space(inode, count);
6368 if (ret)
6369 goto out;
6370 }
6371
6372 while (1) {
6373 lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend,
6374 0, &cached_state);
6375 /*
6376 * We're concerned with the entire range that we're going to be
6377 * doing DIO to, so we need to make sure theres no ordered
6378 * extents in this range.
6379 */
6380 ordered = btrfs_lookup_ordered_range(inode, lockstart,
6381 lockend - lockstart + 1);
6382
6383 /*
6384 * We need to make sure there are no buffered pages in this
6385 * range either, we could have raced between the invalidate in
6386 * generic_file_direct_write and locking the extent. The
6387 * invalidate needs to happen so that reads after a write do not
6388 * get stale data.
6389 */
6390 if (!ordered && (!writing ||
6391 !test_range_bit(&BTRFS_I(inode)->io_tree,
6392 lockstart, lockend, EXTENT_UPTODATE, 0,
6393 cached_state)))
6394 break;
6395
6396 unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart, lockend,
6397 &cached_state, GFP_NOFS);
6398
6399 if (ordered) {
6400 btrfs_start_ordered_extent(inode, ordered, 1);
6401 btrfs_put_ordered_extent(ordered);
6402 } else {
6403 /* Screw you mmap */
6404 ret = filemap_write_and_wait_range(file->f_mapping,
6405 lockstart,
6406 lockend);
6407 if (ret)
6408 goto out;
6409
6410 /*
6411 * If we found a page that couldn't be invalidated just
6412 * fall back to buffered.
6413 */
6414 ret = invalidate_inode_pages2_range(file->f_mapping,
6415 lockstart >> PAGE_CACHE_SHIFT,
6416 lockend >> PAGE_CACHE_SHIFT);
6417 if (ret) {
6418 if (ret == -EBUSY)
6419 ret = 0;
6420 goto out;
6421 }
6422 }
6423
6424 cond_resched();
6425 }
6426 6467
6427 /*6468 return __blockdev_direct_IO(rw, iocb, inode,
6428 * we don't use btrfs_set_extent_delalloc because we don't want
6429 * the dirty or uptodate bits
6430 */
6431 if (writing) {
6432 write_bits = EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING;
6433 ret = set_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, lockend,
6434 EXTENT_DELALLOC, NULL, &cached_state,
6435 GFP_NOFS);
6436 if (ret) {
6437 clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
6438 lockend, EXTENT_LOCKED | write_bits,
6439 1, 0, &cached_state, GFP_NOFS);
6440 goto out;
6441 }
6442 }
6443
6444 free_extent_state(cached_state);
6445 cached_state = NULL;
6446
6447 ret = __blockdev_direct_IO(rw, iocb, inode,
6448 BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev,6469 BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev,
6449 iov, offset, nr_segs, btrfs_get_blocks_direct, NULL,6470 iov, offset, nr_segs, btrfs_get_blocks_direct, NULL,
6450 btrfs_submit_direct, 0);6471 btrfs_submit_direct, 0);
6451
6452 if (ret < 0 && ret != -EIOCBQUEUED) {
6453 clear_extent_bit(&BTRFS_I(inode)->io_tree, offset,
6454 offset + iov_length(iov, nr_segs) - 1,
6455 EXTENT_LOCKED | write_bits, 1, 0,
6456 &cached_state, GFP_NOFS);
6457 } else if (ret >= 0 && ret < iov_length(iov, nr_segs)) {
6458 /*
6459 * We're falling back to buffered, unlock the section we didn't
6460 * do IO on.
6461 */
6462 clear_extent_bit(&BTRFS_I(inode)->io_tree, offset + ret,
6463 offset + iov_length(iov, nr_segs) - 1,
6464 EXTENT_LOCKED | write_bits, 1, 0,
6465 &cached_state, GFP_NOFS);
6466 }
6467out:
6468 free_extent_state(cached_state);
6469 return ret;
6470}6472}
6471 6473
6472static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,6474static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
fs/btrfs/ioctl.c+1−1
@@ -424,7 +424,7 @@ static noinline int create_subvol(struct btrfs_root *root, · 423 unmodified lines
424 uuid_le_gen(&new_uuid);424 uuid_le_gen(&new_uuid);
425 memcpy(root_item.uuid, new_uuid.b, BTRFS_UUID_SIZE);425 memcpy(root_item.uuid, new_uuid.b, BTRFS_UUID_SIZE);
426 root_item.otime.sec = cpu_to_le64(cur_time.tv_sec);426 root_item.otime.sec = cpu_to_le64(cur_time.tv_sec);
427 root_item.otime.nsec = cpu_to_le64(cur_time.tv_nsec);427 root_item.otime.nsec = cpu_to_le32(cur_time.tv_nsec);
428 root_item.ctime = root_item.otime;428 root_item.ctime = root_item.otime;
429 btrfs_set_root_ctransid(&root_item, trans->transid);429 btrfs_set_root_ctransid(&root_item, trans->transid);
430 btrfs_set_root_otransid(&root_item, trans->transid);430 btrfs_set_root_otransid(&root_item, trans->transid);
fs/btrfs/locking.c+1−1
@@ -67,7 +67,7 @@ void btrfs_clear_lock_blocking_rw(struct extent_buffer *eb, int rw) · 66 unmodified lines
67{67{
68 if (eb->lock_nested) {68 if (eb->lock_nested) {
69 read_lock(&eb->lock);69 read_lock(&eb->lock);
70 if (&eb->lock_nested && current->pid == eb->lock_owner) {70 if (eb->lock_nested && current->pid == eb->lock_owner) {
71 read_unlock(&eb->lock);71 read_unlock(&eb->lock);
72 return;72 return;
73 }73 }
fs/btrfs/qgroup.c+9−3
@@ -1364,13 +1364,17 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, · 1363 unmodified lines
1364 spin_lock(&fs_info->qgroup_lock);1364 spin_lock(&fs_info->qgroup_lock);
1365 1365
1366 dstgroup = add_qgroup_rb(fs_info, objectid);1366 dstgroup = add_qgroup_rb(fs_info, objectid);
1367 if (!dstgroup)1367 if (IS_ERR(dstgroup)) {
1368 ret = PTR_ERR(dstgroup);
1368 goto unlock;1369 goto unlock;
1370 }
1369 1371
1370 if (srcid) {1372 if (srcid) {
1371 srcgroup = find_qgroup_rb(fs_info, srcid);1373 srcgroup = find_qgroup_rb(fs_info, srcid);
1372 if (!srcgroup)1374 if (!srcgroup) {
1375 ret = -EINVAL;
1373 goto unlock;1376 goto unlock;
1377 }
1374 dstgroup->rfer = srcgroup->rfer - level_size;1378 dstgroup->rfer = srcgroup->rfer - level_size;
1375 dstgroup->rfer_cmpr = srcgroup->rfer_cmpr - level_size;1379 dstgroup->rfer_cmpr = srcgroup->rfer_cmpr - level_size;
1376 srcgroup->excl = level_size;1380 srcgroup->excl = level_size;
@@ -1379,8 +1383,10 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, · 2 unmodified lines
1379 qgroup_dirty(fs_info, srcgroup);1383 qgroup_dirty(fs_info, srcgroup);
1380 }1384 }
1381 1385
1382 if (!inherit)1386 if (!inherit) {
1387 ret = -EINVAL;
1383 goto unlock;1388 goto unlock;
1389 }
1384 1390
1385 i_qgroups = (u64 *)(inherit + 1);1391 i_qgroups = (u64 *)(inherit + 1);
1386 for (i = 0; i < inherit->num_qgroups; ++i) {1392 for (i = 0; i < inherit->num_qgroups; ++i) {
fs/btrfs/root-tree.c+2−2
@@ -544,8 +544,8 @@ void btrfs_update_root_times(struct btrfs_trans_handle *trans, · 543 unmodified lines
544 struct timespec ct = CURRENT_TIME;544 struct timespec ct = CURRENT_TIME;
545 545
546 spin_lock(&root->root_times_lock);546 spin_lock(&root->root_times_lock);
547 item->ctransid = trans->transid;547 item->ctransid = cpu_to_le64(trans->transid);
548 item->ctime.sec = cpu_to_le64(ct.tv_sec);548 item->ctime.sec = cpu_to_le64(ct.tv_sec);
549 item->ctime.nsec = cpu_to_le64(ct.tv_nsec);549 item->ctime.nsec = cpu_to_le32(ct.tv_nsec);
550 spin_unlock(&root->root_times_lock);550 spin_unlock(&root->root_times_lock);
551}551}
fs/btrfs/super.c+11−4
@@ -838,7 +838,6 @@ int btrfs_sync_fs(struct super_block *sb, int wait) · 837 unmodified lines
838 struct btrfs_trans_handle *trans;838 struct btrfs_trans_handle *trans;
839 struct btrfs_fs_info *fs_info = btrfs_sb(sb);839 struct btrfs_fs_info *fs_info = btrfs_sb(sb);
840 struct btrfs_root *root = fs_info->tree_root;840 struct btrfs_root *root = fs_info->tree_root;
841 int ret;
842 841
843 trace_btrfs_sync_fs(wait);842 trace_btrfs_sync_fs(wait);
844 843
@@ -849,11 +848,17 @@ int btrfs_sync_fs(struct super_block *sb, int wait) · 4 unmodified lines
849 848
850 btrfs_wait_ordered_extents(root, 0, 0);849 btrfs_wait_ordered_extents(root, 0, 0);
851 850
852 trans = btrfs_start_transaction(root, 0);851 spin_lock(&fs_info->trans_lock);
852 if (!fs_info->running_transaction) {
853 spin_unlock(&fs_info->trans_lock);
854 return 0;
855 }
856 spin_unlock(&fs_info->trans_lock);
857
858 trans = btrfs_join_transaction(root);
853 if (IS_ERR(trans))859 if (IS_ERR(trans))
854 return PTR_ERR(trans);860 return PTR_ERR(trans);
855 ret = btrfs_commit_transaction(trans, root);861 return btrfs_commit_transaction(trans, root);
856 return ret;
857}862}
858 863
859static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)864static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)
@@ -1530,6 +1535,8 @@ static int btrfs_show_devname(struct seq_file *m, struct dentry *root) · 670 unmodified lines
1530 while (cur_devices) {1535 while (cur_devices) {
1531 head = &cur_devices->devices;1536 head = &cur_devices->devices;
1532 list_for_each_entry(dev, head, dev_list) {1537 list_for_each_entry(dev, head, dev_list) {
1538 if (dev->missing)
1539 continue;
1533 if (!first_dev || dev->devid < first_dev->devid)1540 if (!first_dev || dev->devid < first_dev->devid)
1534 first_dev = dev;1541 first_dev = dev;
1535 }1542 }
fs/btrfs/transaction.c+2−1
@@ -1031,6 +1031,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, · 1030 unmodified lines
1031 1031
1032 btrfs_i_size_write(parent_inode, parent_inode->i_size +1032 btrfs_i_size_write(parent_inode, parent_inode->i_size +
1033 dentry->d_name.len * 2);1033 dentry->d_name.len * 2);
1034 parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME;
1034 ret = btrfs_update_inode(trans, parent_root, parent_inode);1035 ret = btrfs_update_inode(trans, parent_root, parent_inode);
1035 if (ret)1036 if (ret)
1036 goto abort_trans_dput;1037 goto abort_trans_dput;
@@ -1066,7 +1067,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, · 29 unmodified lines
1066 memcpy(new_root_item->parent_uuid, root->root_item.uuid,1067 memcpy(new_root_item->parent_uuid, root->root_item.uuid,
1067 BTRFS_UUID_SIZE);1068 BTRFS_UUID_SIZE);
1068 new_root_item->otime.sec = cpu_to_le64(cur_time.tv_sec);1069 new_root_item->otime.sec = cpu_to_le64(cur_time.tv_sec);
1069 new_root_item->otime.nsec = cpu_to_le64(cur_time.tv_nsec);1070 new_root_item->otime.nsec = cpu_to_le32(cur_time.tv_nsec);
1070 btrfs_set_root_otransid(new_root_item, trans->transid);1071 btrfs_set_root_otransid(new_root_item, trans->transid);
1071 memset(&new_root_item->stime, 0, sizeof(new_root_item->stime));1072 memset(&new_root_item->stime, 0, sizeof(new_root_item->stime));
1072 memset(&new_root_item->rtime, 0, sizeof(new_root_item->rtime));1073 memset(&new_root_item->rtime, 0, sizeof(new_root_item->rtime));
fs/btrfs/volumes.c+6−27
@@ -227,9 +227,8 @@ loop_lock: · 226 unmodified lines
227 cur = pending;227 cur = pending;
228 pending = pending->bi_next;228 pending = pending->bi_next;
229 cur->bi_next = NULL;229 cur->bi_next = NULL;
230 atomic_dec(&fs_info->nr_async_bios);
231 230
232 if (atomic_read(&fs_info->nr_async_bios) < limit &&231 if (atomic_dec_return(&fs_info->nr_async_bios) < limit &&
233 waitqueue_active(&fs_info->async_submit_wait))232 waitqueue_active(&fs_info->async_submit_wait))
234 wake_up(&fs_info->async_submit_wait);233 wake_up(&fs_info->async_submit_wait);
235 234
@@ -569,9 +568,11 @@ static int __btrfs_close_devices(struct btrfs_fs_devices *fs_devices) · 333 unmodified lines
569 memcpy(new_device, device, sizeof(*new_device));568 memcpy(new_device, device, sizeof(*new_device));
570 569
571 /* Safe because we are under uuid_mutex */570 /* Safe because we are under uuid_mutex */
572 name = rcu_string_strdup(device->name->str, GFP_NOFS);571 if (device->name) {
573 BUG_ON(device->name && !name); /* -ENOMEM */572 name = rcu_string_strdup(device->name->str, GFP_NOFS);
574 rcu_assign_pointer(new_device->name, name);573 BUG_ON(device->name && !name); /* -ENOMEM */
574 rcu_assign_pointer(new_device->name, name);
575 }
575 new_device->bdev = NULL;576 new_device->bdev = NULL;
576 new_device->writeable = 0;577 new_device->writeable = 0;
577 new_device->in_fs_metadata = 0;578 new_device->in_fs_metadata = 0;
@@ -4605,28 +4606,6 @@ int btrfs_read_sys_array(struct btrfs_root *root) · 4027 unmodified lines
4605 return ret;4606 return ret;
4606}4607}
4607 4608
4608struct btrfs_device *btrfs_find_device_for_logical(struct btrfs_root *root,
4609 u64 logical, int mirror_num)
4610{
4611 struct btrfs_mapping_tree *map_tree = &root->fs_info->mapping_tree;
4612 int ret;
4613 u64 map_length = 0;
4614 struct btrfs_bio *bbio = NULL;
4615 struct btrfs_device *device;
4616
4617 BUG_ON(mirror_num == 0);
4618 ret = btrfs_map_block(map_tree, WRITE, logical, &map_length, &bbio,
4619 mirror_num);
4620 if (ret) {
4621 BUG_ON(bbio != NULL);
4622 return NULL;
4623 }
4624 BUG_ON(mirror_num != bbio->mirror_num);
4625 device = bbio->stripes[mirror_num - 1].dev;
4626 kfree(bbio);
4627 return device;
4628}
4629
4630int btrfs_read_chunk_tree(struct btrfs_root *root)4609int btrfs_read_chunk_tree(struct btrfs_root *root)
4631{4610{
4632 struct btrfs_path *path;4611 struct btrfs_path *path;
fs/btrfs/volumes.h+0−2
@@ -289,8 +289,6 @@ int btrfs_cancel_balance(struct btrfs_fs_info *fs_info); · 288 unmodified lines
289int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset);289int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset);
290int find_free_dev_extent(struct btrfs_device *device, u64 num_bytes,290int find_free_dev_extent(struct btrfs_device *device, u64 num_bytes,
291 u64 *start, u64 *max_avail);291 u64 *start, u64 *max_avail);
292struct btrfs_device *btrfs_find_device_for_logical(struct btrfs_root *root,
293 u64 logical, int mirror_num);
294void btrfs_dev_stat_print_on_error(struct btrfs_device *device);292void btrfs_dev_stat_print_on_error(struct btrfs_device *device);
295void btrfs_dev_stat_inc_and_print(struct btrfs_device *dev, int index);293void btrfs_dev_stat_inc_and_print(struct btrfs_device *dev, int index);
296int btrfs_get_dev_stats(struct btrfs_root *root,294int btrfs_get_dev_stats(struct btrfs_root *root,
fs/buffer.c+30−36
@@ -914,7 +914,7 @@ link_dev_buffers(struct page *page, struct buffer_head *head) · 913 unmodified lines
914/*914/*
915 * Initialise the state of a blockdev page's buffers.915 * Initialise the state of a blockdev page's buffers.
916 */ 916 */
917static void917static sector_t
918init_page_buffers(struct page *page, struct block_device *bdev,918init_page_buffers(struct page *page, struct block_device *bdev,
919 sector_t block, int size)919 sector_t block, int size)
920{920{
@@ -936,33 +936,41 @@ init_page_buffers(struct page *page, struct block_device *bdev, · 15 unmodified lines
936 block++;936 block++;
937 bh = bh->b_this_page;937 bh = bh->b_this_page;
938 } while (bh != head);938 } while (bh != head);
939
940 /*
941 * Caller needs to validate requested block against end of device.
942 */
943 return end_block;
939}944}
940 945
941/*946/*
942 * Create the page-cache page that contains the requested block.947 * Create the page-cache page that contains the requested block.
943 *948 *
944 * This is user purely for blockdev mappings.949 * This is used purely for blockdev mappings.
945 */950 */
946static struct page *951static int
947grow_dev_page(struct block_device *bdev, sector_t block,952grow_dev_page(struct block_device *bdev, sector_t block,
948 pgoff_t index, int size)953 pgoff_t index, int size, int sizebits)
949{954{
950 struct inode *inode = bdev->bd_inode;955 struct inode *inode = bdev->bd_inode;
951 struct page *page;956 struct page *page;
952 struct buffer_head *bh;957 struct buffer_head *bh;
958 sector_t end_block;
959 int ret = 0; /* Will call free_more_memory() */
953 960
954 page = find_or_create_page(inode->i_mapping, index,961 page = find_or_create_page(inode->i_mapping, index,
955 (mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS)|__GFP_MOVABLE);962 (mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS)|__GFP_MOVABLE);
956 if (!page)963 if (!page)
957 return NULL;964 return ret;
958 965
959 BUG_ON(!PageLocked(page));966 BUG_ON(!PageLocked(page));
960 967
961 if (page_has_buffers(page)) {968 if (page_has_buffers(page)) {
962 bh = page_buffers(page);969 bh = page_buffers(page);
963 if (bh->b_size == size) {970 if (bh->b_size == size) {
964 init_page_buffers(page, bdev, block, size);971 end_block = init_page_buffers(page, bdev,
965 return page;972 index << sizebits, size);
973 goto done;
966 }974 }
967 if (!try_to_free_buffers(page))975 if (!try_to_free_buffers(page))
968 goto failed;976 goto failed;
@@ -982,14 +990,14 @@ grow_dev_page(struct block_device *bdev, sector_t block, · 13 unmodified lines
982 */990 */
983 spin_lock(&inode->i_mapping->private_lock);991 spin_lock(&inode->i_mapping->private_lock);
984 link_dev_buffers(page, bh);992 link_dev_buffers(page, bh);
985 init_page_buffers(page, bdev, block, size);993 end_block = init_page_buffers(page, bdev, index << sizebits, size);
986 spin_unlock(&inode->i_mapping->private_lock);994 spin_unlock(&inode->i_mapping->private_lock);
987 return page;995done:
988 996 ret = (block < end_block) ? 1 : -ENXIO;
989failed:997failed:
990 unlock_page(page);998 unlock_page(page);
991 page_cache_release(page);999 page_cache_release(page);
992 return NULL;1000 return ret;
993}1001}
994 1002
995/*1003/*
@@ -999,7 +1007,6 @@ failed: · 3 unmodified lines
999static int1007static int
1000grow_buffers(struct block_device *bdev, sector_t block, int size)1008grow_buffers(struct block_device *bdev, sector_t block, int size)
1001{1009{
1002 struct page *page;
1003 pgoff_t index;1010 pgoff_t index;
1004 int sizebits;1011 int sizebits;
1005 1012
@@ -1023,22 +1030,14 @@ grow_buffers(struct block_device *bdev, sector_t block, int size) · 17 unmodified lines
1023 bdevname(bdev, b));1030 bdevname(bdev, b));
1024 return -EIO;1031 return -EIO;
1025 }1032 }
1026 block = index << sizebits;1033
1027 /* Create a page with the proper size buffers.. */1034 /* Create a page with the proper size buffers.. */
1028 page = grow_dev_page(bdev, block, index, size);1035 return grow_dev_page(bdev, block, index, size, sizebits);
1029 if (!page)
1030 return 0;
1031 unlock_page(page);
1032 page_cache_release(page);
1033 return 1;
1034}1036}
1035 1037
1036static struct buffer_head *1038static struct buffer_head *
1037__getblk_slow(struct block_device *bdev, sector_t block, int size)1039__getblk_slow(struct block_device *bdev, sector_t block, int size)
1038{1040{
1039 int ret;
1040 struct buffer_head *bh;
1041
1042 /* Size must be multiple of hard sectorsize */1041 /* Size must be multiple of hard sectorsize */
1043 if (unlikely(size & (bdev_logical_block_size(bdev)-1) ||1042 if (unlikely(size & (bdev_logical_block_size(bdev)-1) ||
1044 (size < 512 || size > PAGE_SIZE))) {1043 (size < 512 || size > PAGE_SIZE))) {
@@ -1051,21 +1050,20 @@ __getblk_slow(struct block_device *bdev, sector_t block, int size) · 6 unmodified lines
1051 return NULL;1050 return NULL;
1052 }1051 }
1053 1052
1054retry:1053 for (;;) {
1055 bh = __find_get_block(bdev, block, size);1054 struct buffer_head *bh;
1056 if (bh)1055 int ret;
1057 return bh;
1058 1056
1059 ret = grow_buffers(bdev, block, size);
1060 if (ret == 0) {
1061 free_more_memory();
1062 goto retry;
1063 } else if (ret > 0) {
1064 bh = __find_get_block(bdev, block, size);1057 bh = __find_get_block(bdev, block, size);
1065 if (bh)1058 if (bh)
1066 return bh;1059 return bh;
1060
1061 ret = grow_buffers(bdev, block, size);
1062 if (ret < 0)
1063 return NULL;
1064 if (ret == 0)
1065 free_more_memory();
1067 }1066 }
1068 return NULL;
1069}1067}
1070 1068
1071/*1069/*
@@ -1321,10 +1319,6 @@ EXPORT_SYMBOL(__find_get_block); · 249 unmodified lines
1321 * which corresponds to the passed block_device, block and size. The1319 * which corresponds to the passed block_device, block and size. The
1322 * returned buffer has its reference count incremented.1320 * returned buffer has its reference count incremented.
1323 *1321 *
1324 * __getblk() cannot fail - it just keeps trying. If you pass it an
1325 * illegal block number, __getblk() will happily return a buffer_head
1326 * which represents the non-existent block. Very weird.
1327 *
1328 * __getblk() will lock up the machine if grow_dev_page's try_to_free_buffers()1322 * __getblk() will lock up the machine if grow_dev_page's try_to_free_buffers()
1329 * attempt is failing. FIXME, perhaps?1323 * attempt is failing. FIXME, perhaps?
1330 */1324 */
fs/cifs/cifssmb.c+8−3
@@ -1576,9 +1576,14 @@ cifs_readv_callback(struct mid_q_entry *mid) · 1575 unmodified lines
1576 /* result already set, check signature */1576 /* result already set, check signature */
1577 if (server->sec_mode &1577 if (server->sec_mode &
1578 (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) {1578 (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) {
1579 if (cifs_verify_signature(rdata->iov, rdata->nr_iov,1579 int rc = 0;
1580 server, mid->sequence_number + 1))1580
1581 cERROR(1, "Unexpected SMB signature");1581 rc = cifs_verify_signature(rdata->iov, rdata->nr_iov,
1582 server,
1583 mid->sequence_number + 1);
1584 if (rc)
1585 cERROR(1, "SMB signature verification returned "
1586 "error = %d", rc);
1582 }1587 }
1583 /* FIXME: should this be counted toward the initiating task? */1588 /* FIXME: should this be counted toward the initiating task? */
1584 task_io_account_read(rdata->bytes);1589 task_io_account_read(rdata->bytes);
fs/cifs/dir.c+1−8
@@ -356,19 +356,12 @@ cifs_create_get_file_info: · 355 unmodified lines
356cifs_create_set_dentry:356cifs_create_set_dentry:
357 if (rc != 0) {357 if (rc != 0) {
358 cFYI(1, "Create worked, get_inode_info failed rc = %d", rc);358 cFYI(1, "Create worked, get_inode_info failed rc = %d", rc);
359 CIFSSMBClose(xid, tcon, *fileHandle);
359 goto out;360 goto out;
360 }361 }
361 d_drop(direntry);362 d_drop(direntry);
362 d_add(direntry, newinode);363 d_add(direntry, newinode);
363 364
364 /* ENOENT for create? How weird... */
365 rc = -ENOENT;
366 if (!newinode) {
367 CIFSSMBClose(xid, tcon, *fileHandle);
368 goto out;
369 }
370 rc = 0;
371
372out:365out:
373 kfree(buf);366 kfree(buf);
374 kfree(full_path);367 kfree(full_path);
fs/cifs/inode.c+16−8
@@ -124,10 +124,10 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) · 123 unmodified lines
124{124{
125 struct cifsInodeInfo *cifs_i = CIFS_I(inode);125 struct cifsInodeInfo *cifs_i = CIFS_I(inode);
126 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);126 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
127 unsigned long oldtime = cifs_i->time;
128 127
129 cifs_revalidate_cache(inode, fattr);128 cifs_revalidate_cache(inode, fattr);
130 129
130 spin_lock(&inode->i_lock);
131 inode->i_atime = fattr->cf_atime;131 inode->i_atime = fattr->cf_atime;
132 inode->i_mtime = fattr->cf_mtime;132 inode->i_mtime = fattr->cf_mtime;
133 inode->i_ctime = fattr->cf_ctime;133 inode->i_ctime = fattr->cf_ctime;
@@ -148,9 +148,6 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) · 14 unmodified lines
148 else148 else
149 cifs_i->time = jiffies;149 cifs_i->time = jiffies;
150 150
151 cFYI(1, "inode 0x%p old_time=%ld new_time=%ld", inode,
152 oldtime, cifs_i->time);
153
154 cifs_i->delete_pending = fattr->cf_flags & CIFS_FATTR_DELETE_PENDING;151 cifs_i->delete_pending = fattr->cf_flags & CIFS_FATTR_DELETE_PENDING;
155 152
156 cifs_i->server_eof = fattr->cf_eof;153 cifs_i->server_eof = fattr->cf_eof;
@@ -158,7 +155,6 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) · 1 unmodified line
158 * Can't safely change the file size here if the client is writing to155 * Can't safely change the file size here if the client is writing to
159 * it due to potential races.156 * it due to potential races.
160 */157 */
161 spin_lock(&inode->i_lock);
162 if (is_size_safe_to_change(cifs_i, fattr->cf_eof)) {158 if (is_size_safe_to_change(cifs_i, fattr->cf_eof)) {
163 i_size_write(inode, fattr->cf_eof);159 i_size_write(inode, fattr->cf_eof);
164 160
@@ -859,12 +855,14 @@ struct inode *cifs_root_iget(struct super_block *sb) · 694 unmodified lines
859 855
860 if (rc && tcon->ipc) {856 if (rc && tcon->ipc) {
861 cFYI(1, "ipc connection - fake read inode");857 cFYI(1, "ipc connection - fake read inode");
858 spin_lock(&inode->i_lock);
862 inode->i_mode |= S_IFDIR;859 inode->i_mode |= S_IFDIR;
863 set_nlink(inode, 2);860 set_nlink(inode, 2);
864 inode->i_op = &cifs_ipc_inode_ops;861 inode->i_op = &cifs_ipc_inode_ops;
865 inode->i_fop = &simple_dir_operations;862 inode->i_fop = &simple_dir_operations;
866 inode->i_uid = cifs_sb->mnt_uid;863 inode->i_uid = cifs_sb->mnt_uid;
867 inode->i_gid = cifs_sb->mnt_gid;864 inode->i_gid = cifs_sb->mnt_gid;
865 spin_unlock(&inode->i_lock);
868 } else if (rc) {866 } else if (rc) {
869 iget_failed(inode);867 iget_failed(inode);
870 inode = ERR_PTR(rc);868 inode = ERR_PTR(rc);
@@ -1110,6 +1108,15 @@ undo_setattr: · 239 unmodified lines
1110 goto out_close;1108 goto out_close;
1111}1109}
1112 1110
1111/* copied from fs/nfs/dir.c with small changes */
1112static void
1113cifs_drop_nlink(struct inode *inode)
1114{
1115 spin_lock(&inode->i_lock);
1116 if (inode->i_nlink > 0)
1117 drop_nlink(inode);
1118 spin_unlock(&inode->i_lock);
1119}
1113 1120
1114/*1121/*
1115 * If dentry->d_inode is null (usually meaning the cached dentry1122 * If dentry->d_inode is null (usually meaning the cached dentry
@@ -1166,13 +1173,13 @@ retry_std_delete: · 50 unmodified lines
1166psx_del_no_retry:1173psx_del_no_retry:
1167 if (!rc) {1174 if (!rc) {
1168 if (inode)1175 if (inode)
1169 drop_nlink(inode);1176 cifs_drop_nlink(inode);
1170 } else if (rc == -ENOENT) {1177 } else if (rc == -ENOENT) {
1171 d_drop(dentry);1178 d_drop(dentry);
1172 } else if (rc == -ETXTBSY) {1179 } else if (rc == -ETXTBSY) {
1173 rc = cifs_rename_pending_delete(full_path, dentry, xid);1180 rc = cifs_rename_pending_delete(full_path, dentry, xid);
1174 if (rc == 0)1181 if (rc == 0)
1175 drop_nlink(inode);1182 cifs_drop_nlink(inode);
1176 } else if ((rc == -EACCES) && (dosattr == 0) && inode) {1183 } else if ((rc == -EACCES) && (dosattr == 0) && inode) {
1177 attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);1184 attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
1178 if (attrs == NULL) {1185 if (attrs == NULL) {
@@ -1241,9 +1248,10 @@ cifs_mkdir_qinfo(struct inode *inode, struct dentry *dentry, umode_t mode, · 62 unmodified lines
1241 * setting nlink not necessary except in cases where we failed to get it1248 * setting nlink not necessary except in cases where we failed to get it
1242 * from the server or was set bogus1249 * from the server or was set bogus
1243 */1250 */
1251 spin_lock(&dentry->d_inode->i_lock);
1244 if ((dentry->d_inode) && (dentry->d_inode->i_nlink < 2))1252 if ((dentry->d_inode) && (dentry->d_inode->i_nlink < 2))
1245 set_nlink(dentry->d_inode, 2);1253 set_nlink(dentry->d_inode, 2);
1246 1254 spin_unlock(&dentry->d_inode->i_lock);
1247 mode &= ~current_umask();1255 mode &= ~current_umask();
1248 /* must turn on setgid bit if parent dir has it */1256 /* must turn on setgid bit if parent dir has it */
1249 if (inode->i_mode & S_ISGID)1257 if (inode->i_mode & S_ISGID)
fs/cifs/link.c+2−0
@@ -433,7 +433,9 @@ cifs_hardlink(struct dentry *old_file, struct inode *inode, · 432 unmodified lines
433 if (old_file->d_inode) {433 if (old_file->d_inode) {
434 cifsInode = CIFS_I(old_file->d_inode);434 cifsInode = CIFS_I(old_file->d_inode);
435 if (rc == 0) {435 if (rc == 0) {
436 spin_lock(&old_file->d_inode->i_lock);
436 inc_nlink(old_file->d_inode);437 inc_nlink(old_file->d_inode);
438 spin_unlock(&old_file->d_inode->i_lock);
437/* BB should we make this contingent on superblock flag NOATIME? */439/* BB should we make this contingent on superblock flag NOATIME? */
438/* old_file->d_inode->i_ctime = CURRENT_TIME;*/440/* old_file->d_inode->i_ctime = CURRENT_TIME;*/
439 /* parent dir timestamps will update from srv441 /* parent dir timestamps will update from srv
fs/cifs/smb2misc.c+9−7
@@ -52,7 +52,8 @@ check_smb2_hdr(struct smb2_hdr *hdr, __u64 mid) · 51 unmodified lines
52 cERROR(1, "Bad protocol string signature header %x",52 cERROR(1, "Bad protocol string signature header %x",
53 *(unsigned int *) hdr->ProtocolId);53 *(unsigned int *) hdr->ProtocolId);
54 if (mid != hdr->MessageId)54 if (mid != hdr->MessageId)
55 cERROR(1, "Mids do not match");55 cERROR(1, "Mids do not match: %llu and %llu", mid,
56 hdr->MessageId);
56 }57 }
57 cERROR(1, "Bad SMB detected. The Mid=%llu", hdr->MessageId);58 cERROR(1, "Bad SMB detected. The Mid=%llu", hdr->MessageId);
58 return 1;59 return 1;
@@ -107,7 +108,7 @@ smb2_check_message(char *buf, unsigned int length) · 48 unmodified lines
107 * ie Validate the wct via smb2_struct_sizes table above108 * ie Validate the wct via smb2_struct_sizes table above
108 */109 */
109 110
110 if (length < 2 + sizeof(struct smb2_hdr)) {111 if (length < sizeof(struct smb2_pdu)) {
111 if ((length >= sizeof(struct smb2_hdr)) && (hdr->Status != 0)) {112 if ((length >= sizeof(struct smb2_hdr)) && (hdr->Status != 0)) {
112 pdu->StructureSize2 = 0;113 pdu->StructureSize2 = 0;
113 /*114 /*
@@ -121,15 +122,15 @@ smb2_check_message(char *buf, unsigned int length) · 7 unmodified lines
121 return 1;122 return 1;
122 }123 }
123 if (len > CIFSMaxBufSize + MAX_SMB2_HDR_SIZE - 4) {124 if (len > CIFSMaxBufSize + MAX_SMB2_HDR_SIZE - 4) {
124 cERROR(1, "SMB length greater than maximum, mid=%lld", mid);125 cERROR(1, "SMB length greater than maximum, mid=%llu", mid);
125 return 1;126 return 1;
126 }127 }
127 128
128 if (check_smb2_hdr(hdr, mid))129 if (check_smb2_hdr(hdr, mid))
129 return 1;130 return 1;
130 131
131 if (hdr->StructureSize != SMB2_HEADER_SIZE) {132 if (hdr->StructureSize != SMB2_HEADER_STRUCTURE_SIZE) {
132 cERROR(1, "Illegal structure size %d",133 cERROR(1, "Illegal structure size %u",
133 le16_to_cpu(hdr->StructureSize));134 le16_to_cpu(hdr->StructureSize));
134 return 1;135 return 1;
135 }136 }
@@ -161,8 +162,9 @@ smb2_check_message(char *buf, unsigned int length) · 25 unmodified lines
161 if (4 + len != clc_len) {162 if (4 + len != clc_len) {
162 cFYI(1, "Calculated size %u length %u mismatch mid %llu",163 cFYI(1, "Calculated size %u length %u mismatch mid %llu",
163 clc_len, 4 + len, mid);164 clc_len, 4 + len, mid);
164 if (clc_len == 4 + len + 1) /* BB FIXME (fix samba) */165 /* server can return one byte more */
165 return 0; /* BB workaround Samba 3 bug SessSetup rsp */166 if (clc_len == 4 + len + 1)
167 return 0;
166 return 1;168 return 1;
167 }169 }
168 return 0;170 return 0;
fs/cifs/smb2pdu.h+6−4
@@ -87,10 +87,6 @@ · 86 unmodified lines
87 87
88#define SMB2_PROTO_NUMBER __constant_cpu_to_le32(0x424d53fe)88#define SMB2_PROTO_NUMBER __constant_cpu_to_le32(0x424d53fe)
89 89
90#define SMB2_HEADER_SIZE __constant_le16_to_cpu(64)
91
92#define SMB2_ERROR_STRUCTURE_SIZE2 __constant_le16_to_cpu(9)
93
94/*90/*
95 * SMB2 Header Definition91 * SMB2 Header Definition
96 *92 *
@@ -99,6 +95,9 @@ · 2 unmodified lines
99 * "PDU" : "Protocol Data Unit" (ie a network "frame")95 * "PDU" : "Protocol Data Unit" (ie a network "frame")
100 *96 *
101 */97 */
98
99#define SMB2_HEADER_STRUCTURE_SIZE __constant_le16_to_cpu(64)
100
102struct smb2_hdr {101struct smb2_hdr {
103 __be32 smb2_buf_length; /* big endian on wire */102 __be32 smb2_buf_length; /* big endian on wire */
104 /* length is only two or three bytes - with103 /* length is only two or three bytes - with
@@ -140,6 +139,9 @@ struct smb2_pdu { · 35 unmodified lines
140 * command code name for the struct. Note that structures must be packed.139 * command code name for the struct. Note that structures must be packed.
141 *140 *
142 */141 */
142
143#define SMB2_ERROR_STRUCTURE_SIZE2 __constant_le16_to_cpu(9)
144
143struct smb2_err_rsp {145struct smb2_err_rsp {
144 struct smb2_hdr hdr;146 struct smb2_hdr hdr;
145 __le16 StructureSize;147 __le16 StructureSize;
fs/cifs/transport.c+6−3
@@ -503,13 +503,16 @@ cifs_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server, · 502 unmodified lines
503 /* convert the length into a more usable form */503 /* convert the length into a more usable form */
504 if (server->sec_mode & (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) {504 if (server->sec_mode & (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) {
505 struct kvec iov;505 struct kvec iov;
506 int rc = 0;
506 507
507 iov.iov_base = mid->resp_buf;508 iov.iov_base = mid->resp_buf;
508 iov.iov_len = len;509 iov.iov_len = len;
509 /* FIXME: add code to kill session */510 /* FIXME: add code to kill session */
510 if (cifs_verify_signature(&iov, 1, server,511 rc = cifs_verify_signature(&iov, 1, server,
511 mid->sequence_number + 1) != 0)512 mid->sequence_number + 1);
512 cERROR(1, "Unexpected SMB signature");513 if (rc)
514 cERROR(1, "SMB signature verification returned error = "
515 "%d", rc);
513 }516 }
514 517
515 /* BB special case reconnect tid and uid here? */518 /* BB special case reconnect tid and uid here? */
fs/direct-io.c+5−0
@@ -1062,6 +1062,7 @@ do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, · 1061 unmodified lines
1062 unsigned long user_addr;1062 unsigned long user_addr;
1063 size_t bytes;1063 size_t bytes;
1064 struct buffer_head map_bh = { 0, };1064 struct buffer_head map_bh = { 0, };
1065 struct blk_plug plug;
1065 1066
1066 if (rw & WRITE)1067 if (rw & WRITE)
1067 rw = WRITE_ODIRECT;1068 rw = WRITE_ODIRECT;
@@ -1177,6 +1178,8 @@ do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, · 109 unmodified lines
1177 PAGE_SIZE - user_addr / PAGE_SIZE);1178 PAGE_SIZE - user_addr / PAGE_SIZE);
1178 }1179 }
1179 1180
1181 blk_start_plug(&plug);
1182
1180 for (seg = 0; seg < nr_segs; seg++) {1183 for (seg = 0; seg < nr_segs; seg++) {
1181 user_addr = (unsigned long)iov[seg].iov_base;1184 user_addr = (unsigned long)iov[seg].iov_base;
1182 sdio.size += bytes = iov[seg].iov_len;1185 sdio.size += bytes = iov[seg].iov_len;
@@ -1235,6 +1238,8 @@ do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, · 52 unmodified lines
1235 if (sdio.bio)1238 if (sdio.bio)
1236 dio_bio_submit(dio, &sdio);1239 dio_bio_submit(dio, &sdio);
1237 1240
1241 blk_finish_plug(&plug);
1242
1238 /*1243 /*
1239 * It is possible that, we return short IO due to end of file.1244 * It is possible that, we return short IO due to end of file.
1240 * In that case, we need to release all the pages we got hold on.1245 * In that case, we need to release all the pages we got hold on.
fs/jbd/journal.c+5−0
@@ -1113,6 +1113,11 @@ static void mark_journal_empty(journal_t *journal) · 1112 unmodified lines
1113 1113
1114 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));1114 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
1115 spin_lock(&journal->j_state_lock);1115 spin_lock(&journal->j_state_lock);
1116 /* Is it already empty? */
1117 if (sb->s_start == 0) {
1118 spin_unlock(&journal->j_state_lock);
1119 return;
1120 }
1116 jbd_debug(1, "JBD: Marking journal as empty (seq %d)\n",1121 jbd_debug(1, "JBD: Marking journal as empty (seq %d)\n",
1117 journal->j_tail_sequence);1122 journal->j_tail_sequence);
1118 1123
fs/logfs/dev_bdev.c+7−8
@@ -26,6 +26,7 @@ static int sync_request(struct page *page, struct block_device *bdev, int rw) · 25 unmodified lines
26 struct completion complete;26 struct completion complete;
27 27
28 bio_init(&bio);28 bio_init(&bio);
29 bio.bi_max_vecs = 1;
29 bio.bi_io_vec = &bio_vec;30 bio.bi_io_vec = &bio_vec;
30 bio_vec.bv_page = page;31 bio_vec.bv_page = page;
31 bio_vec.bv_len = PAGE_SIZE;32 bio_vec.bv_len = PAGE_SIZE;
@@ -95,12 +96,11 @@ static int __bdev_writeseg(struct super_block *sb, u64 ofs, pgoff_t index, · 63 unmodified lines
95 struct address_space *mapping = super->s_mapping_inode->i_mapping;96 struct address_space *mapping = super->s_mapping_inode->i_mapping;
96 struct bio *bio;97 struct bio *bio;
97 struct page *page;98 struct page *page;
98 struct request_queue *q = bdev_get_queue(sb->s_bdev);99 unsigned int max_pages;
99 unsigned int max_pages = queue_max_hw_sectors(q) >> (PAGE_SHIFT - 9);
100 int i;100 int i;
101 101
102 if (max_pages > BIO_MAX_PAGES)102 max_pages = min(nr_pages, (size_t) bio_get_nr_vecs(super->s_bdev));
103 max_pages = BIO_MAX_PAGES;103
104 bio = bio_alloc(GFP_NOFS, max_pages);104 bio = bio_alloc(GFP_NOFS, max_pages);
105 BUG_ON(!bio);105 BUG_ON(!bio);
106 106
@@ -190,12 +190,11 @@ static int do_erase(struct super_block *sb, u64 ofs, pgoff_t index, · 83 unmodified lines
190{190{
191 struct logfs_super *super = logfs_super(sb);191 struct logfs_super *super = logfs_super(sb);
192 struct bio *bio;192 struct bio *bio;
193 struct request_queue *q = bdev_get_queue(sb->s_bdev);193 unsigned int max_pages;
194 unsigned int max_pages = queue_max_hw_sectors(q) >> (PAGE_SHIFT - 9);
195 int i;194 int i;
196 195
197 if (max_pages > BIO_MAX_PAGES)196 max_pages = min(nr_pages, (size_t) bio_get_nr_vecs(super->s_bdev));
198 max_pages = BIO_MAX_PAGES;197
199 bio = bio_alloc(GFP_NOFS, max_pages);198 bio = bio_alloc(GFP_NOFS, max_pages);
200 BUG_ON(!bio);199 BUG_ON(!bio);
201 200
fs/logfs/inode.c+17−1
@@ -156,10 +156,26 @@ static void __logfs_destroy_inode(struct inode *inode) · 155 unmodified lines
156 call_rcu(&inode->i_rcu, logfs_i_callback);156 call_rcu(&inode->i_rcu, logfs_i_callback);
157}157}
158 158
159static void __logfs_destroy_meta_inode(struct inode *inode)
160{
161 struct logfs_inode *li = logfs_inode(inode);
162 BUG_ON(li->li_block);
163 call_rcu(&inode->i_rcu, logfs_i_callback);
164}
165
159static void logfs_destroy_inode(struct inode *inode)166static void logfs_destroy_inode(struct inode *inode)
160{167{
161 struct logfs_inode *li = logfs_inode(inode);168 struct logfs_inode *li = logfs_inode(inode);
162 169
170 if (inode->i_ino < LOGFS_RESERVED_INOS) {
171 /*
172 * The reserved inodes are never destroyed unless we are in
173 * unmont path.
174 */
175 __logfs_destroy_meta_inode(inode);
176 return;
177 }
178
163 BUG_ON(list_empty(&li->li_freeing_list));179 BUG_ON(list_empty(&li->li_freeing_list));
164 spin_lock(&logfs_inode_lock);180 spin_lock(&logfs_inode_lock);
165 li->li_refcount--;181 li->li_refcount--;
@@ -373,8 +389,8 @@ static void logfs_put_super(struct super_block *sb) · 207 unmodified lines
373{389{
374 struct logfs_super *super = logfs_super(sb);390 struct logfs_super *super = logfs_super(sb);
375 /* kill the meta-inodes */391 /* kill the meta-inodes */
376 iput(super->s_master_inode);
377 iput(super->s_segfile_inode);392 iput(super->s_segfile_inode);
393 iput(super->s_master_inode);
378 iput(super->s_mapping_inode);394 iput(super->s_mapping_inode);
379}395}
380 396
fs/logfs/journal.c+1−1
@@ -565,7 +565,7 @@ static void write_wbuf(struct super_block *sb, struct logfs_area *area, · 564 unmodified lines
565 index = ofs >> PAGE_SHIFT;565 index = ofs >> PAGE_SHIFT;
566 page_ofs = ofs & (PAGE_SIZE - 1);566 page_ofs = ofs & (PAGE_SIZE - 1);
567 567
568 page = find_lock_page(mapping, index);568 page = find_or_create_page(mapping, index, GFP_NOFS);
569 BUG_ON(!page);569 BUG_ON(!page);
570 memcpy(wbuf, page_address(page) + page_ofs, super->s_writesize);570 memcpy(wbuf, page_address(page) + page_ofs, super->s_writesize);
571 unlock_page(page);571 unlock_page(page);
fs/logfs/readwrite.c+0−1
@@ -2189,7 +2189,6 @@ void logfs_evict_inode(struct inode *inode) · 2188 unmodified lines
2189 return;2189 return;
2190 }2190 }
2191 2191
2192 BUG_ON(inode->i_ino < LOGFS_RESERVED_INOS);
2193 page = inode_to_page(inode);2192 page = inode_to_page(inode);
2194 BUG_ON(!page); /* FIXME: Use emergency page */2193 BUG_ON(!page); /* FIXME: Use emergency page */
2195 logfs_put_write_page(page);2194 logfs_put_write_page(page);
fs/logfs/segment.c+1−1
@@ -886,7 +886,7 @@ static struct logfs_area *alloc_area(struct super_block *sb) · 885 unmodified lines
886 886
887static void map_invalidatepage(struct page *page, unsigned long l)887static void map_invalidatepage(struct page *page, unsigned long l)
888{888{
889 BUG();889 return;
890}890}
891 891
892static int map_releasepage(struct page *page, gfp_t g)892static int map_releasepage(struct page *page, gfp_t g)
fs/nfsd/nfs4callback.c+2−2
@@ -651,12 +651,12 @@ static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *c · 650 unmodified lines
651 651
652 if (clp->cl_minorversion == 0) {652 if (clp->cl_minorversion == 0) {
653 if (!clp->cl_cred.cr_principal &&653 if (!clp->cl_cred.cr_principal &&
654 (clp->cl_flavor >= RPC_AUTH_GSS_KRB5))654 (clp->cl_cred.cr_flavor >= RPC_AUTH_GSS_KRB5))
655 return -EINVAL;655 return -EINVAL;
656 args.client_name = clp->cl_cred.cr_principal;656 args.client_name = clp->cl_cred.cr_principal;
657 args.prognumber = conn->cb_prog,657 args.prognumber = conn->cb_prog,
658 args.protocol = XPRT_TRANSPORT_TCP;658 args.protocol = XPRT_TRANSPORT_TCP;
659 args.authflavor = clp->cl_flavor;659 args.authflavor = clp->cl_cred.cr_flavor;
660 clp->cl_cb_ident = conn->cb_ident;660 clp->cl_cb_ident = conn->cb_ident;
661 } else {661 } else {
662 if (!conn->cb_xprt)662 if (!conn->cb_xprt)
fs/nfsd/state.h+0−1
@@ -231,7 +231,6 @@ struct nfs4_client { · 230 unmodified lines
231 nfs4_verifier cl_verifier; /* generated by client */231 nfs4_verifier cl_verifier; /* generated by client */
232 time_t cl_time; /* time of last lease renewal */232 time_t cl_time; /* time of last lease renewal */
233 struct sockaddr_storage cl_addr; /* client ipaddress */233 struct sockaddr_storage cl_addr; /* client ipaddress */
234 u32 cl_flavor; /* setclientid pseudoflavor */
235 struct svc_cred cl_cred; /* setclientid principal */234 struct svc_cred cl_cred; /* setclientid principal */
236 clientid_t cl_clientid; /* generated by server */235 clientid_t cl_clientid; /* generated by server */
237 nfs4_verifier cl_confirm; /* generated by server */236 nfs4_verifier cl_confirm; /* generated by server */
fs/quota/dquot.c+1−1
@@ -1589,10 +1589,10 @@ int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags) · 1588 unmodified lines
1589 goto out;1589 goto out;
1590 }1590 }
1591 1591
1592 down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
1593 for (cnt = 0; cnt < MAXQUOTAS; cnt++)1592 for (cnt = 0; cnt < MAXQUOTAS; cnt++)
1594 warn[cnt].w_type = QUOTA_NL_NOWARN;1593 warn[cnt].w_type = QUOTA_NL_NOWARN;
1595 1594
1595 down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
1596 spin_lock(&dq_data_lock);1596 spin_lock(&dq_data_lock);
1597 for (cnt = 0; cnt < MAXQUOTAS; cnt++) {1597 for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1598 if (!dquots[cnt])1598 if (!dquots[cnt])
fs/reiserfs/bitmap.c+0−2
@@ -1334,9 +1334,7 @@ struct buffer_head *reiserfs_read_bitmap_block(struct super_block *sb, · 1333 unmodified lines
1334 else if (bitmap == 0)1334 else if (bitmap == 0)
1335 block = (REISERFS_DISK_OFFSET_IN_BYTES >> sb->s_blocksize_bits) + 1;1335 block = (REISERFS_DISK_OFFSET_IN_BYTES >> sb->s_blocksize_bits) + 1;
1336 1336
1337 reiserfs_write_unlock(sb);
1338 bh = sb_bread(sb, block);1337 bh = sb_bread(sb, block);
1339 reiserfs_write_lock(sb);
1340 if (bh == NULL)1338 if (bh == NULL)
1341 reiserfs_warning(sb, "sh-2029: %s: bitmap block (#%u) "1339 reiserfs_warning(sb, "sh-2029: %s: bitmap block (#%u) "
1342 "reading failed", __func__, block);1340 "reading failed", __func__, block);
fs/reiserfs/inode.c+1−1
@@ -76,10 +76,10 @@ void reiserfs_evict_inode(struct inode *inode) · 75 unmodified lines
76 ;76 ;
77 }77 }
78 out:78 out:
79 reiserfs_write_unlock_once(inode->i_sb, depth);
79 clear_inode(inode); /* note this must go after the journal_end to prevent deadlock */80 clear_inode(inode); /* note this must go after the journal_end to prevent deadlock */
80 dquot_drop(inode);81 dquot_drop(inode);
81 inode->i_blocks = 0;82 inode->i_blocks = 0;
82 reiserfs_write_unlock_once(inode->i_sb, depth);
83 return;83 return;
84 84
85no_delete:85no_delete:
fs/ubifs/debug.h+1−1
@@ -167,7 +167,7 @@ struct ubifs_global_debug_info { · 166 unmodified lines
167#define ubifs_dbg_msg(type, fmt, ...) \167#define ubifs_dbg_msg(type, fmt, ...) \
168 pr_debug("UBIFS DBG " type ": " fmt "\n", ##__VA_ARGS__)168 pr_debug("UBIFS DBG " type ": " fmt "\n", ##__VA_ARGS__)
169 169
170#define DBG_KEY_BUF_LEN 32170#define DBG_KEY_BUF_LEN 48
171#define ubifs_dbg_msg_key(type, key, fmt, ...) do { \171#define ubifs_dbg_msg_key(type, key, fmt, ...) do { \
172 char __tmp_key_buf[DBG_KEY_BUF_LEN]; \172 char __tmp_key_buf[DBG_KEY_BUF_LEN]; \
173 pr_debug("UBIFS DBG " type ": " fmt "%s\n", ##__VA_ARGS__, \173 pr_debug("UBIFS DBG " type ": " fmt "%s\n", ##__VA_ARGS__, \
fs/ubifs/lpt.c+4−1
@@ -1749,7 +1749,10 @@ int ubifs_lpt_init(struct ubifs_info *c, int rd, int wr) · 1748 unmodified lines
1749 return 0;1749 return 0;
1750 1750
1751out_err:1751out_err:
1752 ubifs_lpt_free(c, 0);1752 if (wr)
1753 ubifs_lpt_free(c, 1);
1754 if (rd)
1755 ubifs_lpt_free(c, 0);
1753 return err;1756 return err;
1754}1757}
1755 1758
fs/ubifs/recovery.c+1−1
@@ -788,7 +788,7 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum, · 787 unmodified lines
788 788
789corrupted_rescan:789corrupted_rescan:
790 /* Re-scan the corrupted data with verbose messages */790 /* Re-scan the corrupted data with verbose messages */
791 ubifs_err("corruptio %d", ret);791 ubifs_err("corruption %d", ret);
792 ubifs_scan_a_node(c, buf, len, lnum, offs, 1);792 ubifs_scan_a_node(c, buf, len, lnum, offs, 1);
793corrupted:793corrupted:
794 ubifs_scanned_corruption(c, lnum, offs, buf);794 ubifs_scanned_corruption(c, lnum, offs, buf);
fs/ubifs/replay.c+1−2
@@ -1026,7 +1026,6 @@ int ubifs_replay_journal(struct ubifs_info *c) · 1025 unmodified lines
1026 c->replaying = 1;1026 c->replaying = 1;
1027 lnum = c->ltail_lnum = c->lhead_lnum;1027 lnum = c->ltail_lnum = c->lhead_lnum;
1028 1028
1029 lnum = UBIFS_LOG_LNUM;
1030 do {1029 do {
1031 err = replay_log_leb(c, lnum, 0, c->sbuf);1030 err = replay_log_leb(c, lnum, 0, c->sbuf);
1032 if (err == 1)1031 if (err == 1)
@@ -1035,7 +1034,7 @@ int ubifs_replay_journal(struct ubifs_info *c) · 2 unmodified lines
1035 if (err)1034 if (err)
1036 goto out;1035 goto out;
1037 lnum = ubifs_next_log_lnum(c, lnum);1036 lnum = ubifs_next_log_lnum(c, lnum);
1038 } while (lnum != UBIFS_LOG_LNUM);1037 } while (lnum != c->ltail_lnum);
1039 1038
1040 err = replay_buds(c);1039 err = replay_buds(c);
1041 if (err)1040 if (err)
fs/ubifs/super.c+0−3
@@ -1157,9 +1157,6 @@ static int check_free_space(struct ubifs_info *c) · 1156 unmodified lines
1157 *1157 *
1158 * This function mounts UBIFS file system. Returns zero in case of success and1158 * This function mounts UBIFS file system. Returns zero in case of success and
1159 * a negative error code in case of failure.1159 * a negative error code in case of failure.
1160 *
1161 * Note, the function does not de-allocate resources it it fails half way
1162 * through, and the caller has to do this instead.
1163 */1160 */
1164static int mount_ubifs(struct ubifs_info *c)1161static int mount_ubifs(struct ubifs_info *c)
1165{1162{
fs/udf/inode.c+4−1
@@ -1124,14 +1124,17 @@ int udf_setsize(struct inode *inode, loff_t newsize) · 1123 unmodified lines
1124 if (err)1124 if (err)
1125 return err;1125 return err;
1126 down_write(&iinfo->i_data_sem);1126 down_write(&iinfo->i_data_sem);
1127 } else1127 } else {
1128 iinfo->i_lenAlloc = newsize;1128 iinfo->i_lenAlloc = newsize;
1129 goto set_size;
1130 }
1129 }1131 }
1130 err = udf_extend_file(inode, newsize);1132 err = udf_extend_file(inode, newsize);
1131 if (err) {1133 if (err) {
1132 up_write(&iinfo->i_data_sem);1134 up_write(&iinfo->i_data_sem);
1133 return err;1135 return err;
1134 }1136 }
1137set_size:
1135 truncate_setsize(inode, newsize);1138 truncate_setsize(inode, newsize);
1136 up_write(&iinfo->i_data_sem);1139 up_write(&iinfo->i_data_sem);
1137 } else {1140 } else {
fs/udf/super.c+6−1
@@ -1344,6 +1344,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block, · 1343 unmodified lines
1344 udf_err(sb, "error loading logical volume descriptor: "1344 udf_err(sb, "error loading logical volume descriptor: "
1345 "Partition table too long (%u > %lu)\n", table_len,1345 "Partition table too long (%u > %lu)\n", table_len,
1346 sb->s_blocksize - sizeof(*lvd));1346 sb->s_blocksize - sizeof(*lvd));
1347 ret = 1;
1347 goto out_bh;1348 goto out_bh;
1348 }1349 }
1349 1350
@@ -1388,8 +1389,10 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block, · 38 unmodified lines
1388 UDF_ID_SPARABLE,1389 UDF_ID_SPARABLE,
1389 strlen(UDF_ID_SPARABLE))) {1390 strlen(UDF_ID_SPARABLE))) {
1390 if (udf_load_sparable_map(sb, map,1391 if (udf_load_sparable_map(sb, map,
1391 (struct sparablePartitionMap *)gpm) < 0)1392 (struct sparablePartitionMap *)gpm) < 0) {
1393 ret = 1;
1392 goto out_bh;1394 goto out_bh;
1395 }
1393 } else if (!strncmp(upm2->partIdent.ident,1396 } else if (!strncmp(upm2->partIdent.ident,
1394 UDF_ID_METADATA,1397 UDF_ID_METADATA,
1395 strlen(UDF_ID_METADATA))) {1398 strlen(UDF_ID_METADATA))) {
@@ -2000,6 +2003,8 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) · 604 unmodified lines
2000 if (!silent)2003 if (!silent)
2001 pr_notice("Rescanning with blocksize %d\n",2004 pr_notice("Rescanning with blocksize %d\n",
2002 UDF_DEFAULT_BLOCKSIZE);2005 UDF_DEFAULT_BLOCKSIZE);
2006 brelse(sbi->s_lvid_bh);
2007 sbi->s_lvid_bh = NULL;
2003 uopt.blocksize = UDF_DEFAULT_BLOCKSIZE;2008 uopt.blocksize = UDF_DEFAULT_BLOCKSIZE;
2004 ret = udf_load_vrs(sb, &uopt, silent, &fileset);2009 ret = udf_load_vrs(sb, &uopt, silent, &fileset);
2005 }2010 }
fs/xfs/xfs_discard.c+4−2
@@ -179,12 +179,14 @@ xfs_ioc_trim( · 178 unmodified lines
179 * used by the fstrim application. In the end it really doesn't179 * used by the fstrim application. In the end it really doesn't
180 * matter as trimming blocks is an advisory interface.180 * matter as trimming blocks is an advisory interface.
181 */181 */
182 if (range.start >= XFS_FSB_TO_B(mp, mp->m_sb.sb_dblocks) ||
183 range.minlen > XFS_FSB_TO_B(mp, XFS_ALLOC_AG_MAX_USABLE(mp)))
184 return -XFS_ERROR(EINVAL);
185
182 start = BTOBB(range.start);186 start = BTOBB(range.start);
183 end = start + BTOBBT(range.len) - 1;187 end = start + BTOBBT(range.len) - 1;
184 minlen = BTOBB(max_t(u64, granularity, range.minlen));188 minlen = BTOBB(max_t(u64, granularity, range.minlen));
185 189
186 if (XFS_BB_TO_FSB(mp, start) >= mp->m_sb.sb_dblocks)
187 return -XFS_ERROR(EINVAL);
188 if (end > XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks) - 1)190 if (end > XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks) - 1)
189 end = XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks)- 1;191 end = XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks)- 1;
190 192
fs/xfs/xfs_ialloc.c+9−8
@@ -962,23 +962,22 @@ xfs_dialloc( · 961 unmodified lines
962 if (!pag->pagi_freecount && !okalloc)962 if (!pag->pagi_freecount && !okalloc)
963 goto nextag;963 goto nextag;
964 964
965 /*
966 * Then read in the AGI buffer and recheck with the AGI buffer
967 * lock held.
968 */
965 error = xfs_ialloc_read_agi(mp, tp, agno, &agbp);969 error = xfs_ialloc_read_agi(mp, tp, agno, &agbp);
966 if (error)970 if (error)
967 goto out_error;971 goto out_error;
968 972
969 /*
970 * Once the AGI has been read in we have to recheck
971 * pagi_freecount with the AGI buffer lock held.
972 */
973 if (pag->pagi_freecount) {973 if (pag->pagi_freecount) {
974 xfs_perag_put(pag);974 xfs_perag_put(pag);
975 goto out_alloc;975 goto out_alloc;
976 }976 }
977 977
978 if (!okalloc) {978 if (!okalloc)
979 xfs_trans_brelse(tp, agbp);979 goto nextag_relse_buffer;
980 goto nextag;980
981 }
982 981
983 error = xfs_ialloc_ag_alloc(tp, agbp, &ialloced);982 error = xfs_ialloc_ag_alloc(tp, agbp, &ialloced);
984 if (error) {983 if (error) {
@@ -1007,6 +1006,8 @@ xfs_dialloc( · 22 unmodified lines
1007 return 0;1006 return 0;
1008 }1007 }
1009 1008
1009nextag_relse_buffer:
1010 xfs_trans_brelse(tp, agbp);
1010nextag:1011nextag:
1011 xfs_perag_put(pag);1012 xfs_perag_put(pag);
1012 if (++agno == mp->m_sb.sb_agcount)1013 if (++agno == mp->m_sb.sb_agcount)
fs/xfs/xfs_rtalloc.c+1−1
@@ -857,7 +857,7 @@ xfs_rtbuf_get( · 856 unmodified lines
857 xfs_buf_t *bp; /* block buffer, result */857 xfs_buf_t *bp; /* block buffer, result */
858 xfs_inode_t *ip; /* bitmap or summary inode */858 xfs_inode_t *ip; /* bitmap or summary inode */
859 xfs_bmbt_irec_t map;859 xfs_bmbt_irec_t map;
860 int nmap;860 int nmap = 1;
861 int error; /* error value */861 int error; /* error value */
862 862
863 ip = issum ? mp->m_rsumip : mp->m_rbmip;863 ip = issum ? mp->m_rsumip : mp->m_rbmip;
include/drm/drm_crtc.h+2−1
@@ -118,7 +118,8 @@ enum drm_mode_status { · 117 unmodified lines
118 .hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \118 .hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \
119 .htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \119 .htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \
120 .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \120 .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \
121 .vscan = (vs), .flags = (f), .vrefresh = 0121 .vscan = (vs), .flags = (f), .vrefresh = 0, \
122 .base.type = DRM_MODE_OBJECT_MODE
122 123
123#define CRTC_INTERLACE_HALVE_V 0x1 /* halve V values for interlacing */124#define CRTC_INTERLACE_HALVE_V 0x1 /* halve V values for interlacing */
124 125
include/drm/drm_mode.h+3−2
@@ -359,8 +359,9 @@ struct drm_mode_mode_cmd { · 358 unmodified lines
359 struct drm_mode_modeinfo mode;359 struct drm_mode_modeinfo mode;
360};360};
361 361
362#define DRM_MODE_CURSOR_BO (1<<0)362#define DRM_MODE_CURSOR_BO 0x01
363#define DRM_MODE_CURSOR_MOVE (1<<1)363#define DRM_MODE_CURSOR_MOVE 0x02
364#define DRM_MODE_CURSOR_FLAGS 0x03
364 365
365/*366/*
366 * depending on the value in flags different members are used.367 * depending on the value in flags different members are used.
include/linux/blkdev.h+13−1
@@ -601,7 +601,7 @@ static inline void blk_clear_rl_full(struct request_list *rl, bool sync) · 600 unmodified lines
601 * it already be started by driver.601 * it already be started by driver.
602 */602 */
603#define RQ_NOMERGE_FLAGS \603#define RQ_NOMERGE_FLAGS \
604 (REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA)604 (REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA | REQ_DISCARD)
605#define rq_mergeable(rq) \605#define rq_mergeable(rq) \
606 (!((rq)->cmd_flags & RQ_NOMERGE_FLAGS) && \606 (!((rq)->cmd_flags & RQ_NOMERGE_FLAGS) && \
607 (((rq)->cmd_flags & REQ_DISCARD) || \607 (((rq)->cmd_flags & REQ_DISCARD) || \
@@ -894,6 +894,8 @@ extern void blk_queue_flush_queueable(struct request_queue *q, bool queueable); · 286 unmodified lines
894extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);894extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
895 895
896extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *);896extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *);
897extern int blk_bio_map_sg(struct request_queue *q, struct bio *bio,
898 struct scatterlist *sglist);
897extern void blk_dump_rq_flags(struct request *, char *);899extern void blk_dump_rq_flags(struct request *, char *);
898extern long nr_blockdev_pages(void);900extern long nr_blockdev_pages(void);
899 901
@@ -1139,6 +1141,16 @@ static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector · 239 unmodified lines
1139 & (lim->discard_granularity - 1);1141 & (lim->discard_granularity - 1);
1140}1142}
1141 1143
1144static inline int bdev_discard_alignment(struct block_device *bdev)
1145{
1146 struct request_queue *q = bdev_get_queue(bdev);
1147
1148 if (bdev != bdev->bd_contains)
1149 return bdev->bd_part->discard_alignment;
1150
1151 return q->limits.discard_alignment;
1152}
1153
1142static inline unsigned int queue_discard_zeroes_data(struct request_queue *q)1154static inline unsigned int queue_discard_zeroes_data(struct request_queue *q)
1143{1155{
1144 if (q->limits.max_discard_sectors && q->limits.discard_zeroes_data == 1)1156 if (q->limits.max_discard_sectors && q->limits.discard_zeroes_data == 1)
include/linux/cpuidle.h+4−0
@@ -194,6 +194,10 @@ static inline int cpuidle_play_dead(void) {return -ENODEV; } · 193 unmodified lines
194 194
195#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED195#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED
196void cpuidle_coupled_parallel_barrier(struct cpuidle_device *dev, atomic_t *a);196void cpuidle_coupled_parallel_barrier(struct cpuidle_device *dev, atomic_t *a);
197#else
198static inline void cpuidle_coupled_parallel_barrier(struct cpuidle_device *dev, atomic_t *a)
199{
200}
197#endif201#endif
198 202
199/******************************203/******************************
include/linux/kernel.h+10−2
@@ -82,10 +82,18 @@ · 81 unmodified lines
82 __x - (__x % (y)); \82 __x - (__x % (y)); \
83} \83} \
84)84)
85
86/*
87 * Divide positive or negative dividend by positive divisor and round
88 * to closest integer. Result is undefined for negative divisors.
89 */
85#define DIV_ROUND_CLOSEST(x, divisor)( \90#define DIV_ROUND_CLOSEST(x, divisor)( \
86{ \91{ \
87 typeof(divisor) __divisor = divisor; \92 typeof(x) __x = x; \
88 (((x) + ((__divisor) / 2)) / (__divisor)); \93 typeof(divisor) __d = divisor; \
94 (((typeof(x))-1) >= 0 || (__x) >= 0) ? \
95 (((__x) + ((__d) / 2)) / (__d)) : \
96 (((__x) - ((__d) / 2)) / (__d)); \
89} \97} \
90)98)
91 99
include/linux/ktime.h+0−7
@@ -58,13 +58,6 @@ union ktime { · 57 unmodified lines
58 58
59typedef union ktime ktime_t; /* Kill this */59typedef union ktime ktime_t; /* Kill this */
60 60
61#define KTIME_MAX ((s64)~((u64)1 << 63))
62#if (BITS_PER_LONG == 64)
63# define KTIME_SEC_MAX (KTIME_MAX / NSEC_PER_SEC)
64#else
65# define KTIME_SEC_MAX LONG_MAX
66#endif
67
68/*61/*
69 * ktime_t definitions when using the 64-bit scalar representation:62 * ktime_t definitions when using the 64-bit scalar representation:
70 */63 */
include/linux/mmc/card.h+1−0
@@ -239,6 +239,7 @@ struct mmc_card { · 238 unmodified lines
239#define MMC_QUIRK_BLK_NO_CMD23 (1<<7) /* Avoid CMD23 for regular multiblock */239#define MMC_QUIRK_BLK_NO_CMD23 (1<<7) /* Avoid CMD23 for regular multiblock */
240#define MMC_QUIRK_BROKEN_BYTE_MODE_512 (1<<8) /* Avoid sending 512 bytes in */240#define MMC_QUIRK_BROKEN_BYTE_MODE_512 (1<<8) /* Avoid sending 512 bytes in */
241#define MMC_QUIRK_LONG_READ_TIME (1<<9) /* Data read time > CSD says */241#define MMC_QUIRK_LONG_READ_TIME (1<<9) /* Data read time > CSD says */
242#define MMC_QUIRK_SEC_ERASE_TRIM_BROKEN (1<<10) /* Skip secure for erase/trim */
242 /* byte mode */243 /* byte mode */
243 unsigned int poweroff_notify_state; /* eMMC4.5 notify feature */244 unsigned int poweroff_notify_state; /* eMMC4.5 notify feature */
244#define MMC_NO_POWER_NOTIFICATION 0245#define MMC_NO_POWER_NOTIFICATION 0
include/linux/mv643xx_eth.h+2−0
@@ -15,6 +15,8 @@ · 14 unmodified lines
15#define MV643XX_ETH_SIZE_REG_4 0x222415#define MV643XX_ETH_SIZE_REG_4 0x2224
16#define MV643XX_ETH_BASE_ADDR_ENABLE_REG 0x229016#define MV643XX_ETH_BASE_ADDR_ENABLE_REG 0x2290
17 17
18#define MV643XX_TX_CSUM_DEFAULT_LIMIT 0
19
18struct mv643xx_eth_shared_platform_data {20struct mv643xx_eth_shared_platform_data {
19 struct mbus_dram_target_info *dram;21 struct mbus_dram_target_info *dram;
20 struct platform_device *shared_smi;22 struct platform_device *shared_smi;
include/linux/omapfb.h+6−1
@@ -220,7 +220,12 @@ struct omapfb_display_info { · 219 unmodified lines
220 220
221#ifdef __KERNEL__221#ifdef __KERNEL__
222 222
223#include <plat/board.h>223struct omap_lcd_config {
224 char panel_name[16];
225 char ctrl_name[16];
226 s16 nreset_gpio;
227 u8 data_lines;
228};
224 229
225struct omapfb_platform_data {230struct omapfb_platform_data {
226 struct omap_lcd_config lcd;231 struct omap_lcd_config lcd;
include/linux/pci_ids.h+1−1
@@ -2149,7 +2149,7 @@ · 2148 unmodified lines
2149#define PCI_DEVICE_ID_TIGON3_5704S 0x16a82149#define PCI_DEVICE_ID_TIGON3_5704S 0x16a8
2150#define PCI_DEVICE_ID_NX2_57800_VF 0x16a92150#define PCI_DEVICE_ID_NX2_57800_VF 0x16a9
2151#define PCI_DEVICE_ID_NX2_5706S 0x16aa2151#define PCI_DEVICE_ID_NX2_5706S 0x16aa
2152#define PCI_DEVICE_ID_NX2_57840_MF 0x16ab2152#define PCI_DEVICE_ID_NX2_57840_MF 0x16a4
2153#define PCI_DEVICE_ID_NX2_5708S 0x16ac2153#define PCI_DEVICE_ID_NX2_5708S 0x16ac
2154#define PCI_DEVICE_ID_NX2_57840_VF 0x16ad2154#define PCI_DEVICE_ID_NX2_57840_VF 0x16ad
2155#define PCI_DEVICE_ID_NX2_57810_MF 0x16ae2155#define PCI_DEVICE_ID_NX2_57810_MF 0x16ae
include/linux/platform_data/omap1_bl.h+11−0
@@ -0,0 +1,11 @@
1#ifndef __OMAP1_BL_H__
2#define __OMAP1_BL_H__
3
4#include <linux/device.h>
5
6struct omap_backlight_config {
7 int default_intensity;
8 int (*set_power)(struct device *dev, int state);
9};
10
11#endif
include/linux/time.h+27−2
@@ -107,11 +107,36 @@ static inline struct timespec timespec_sub(struct timespec lhs, · 106 unmodified lines
107 return ts_delta;107 return ts_delta;
108}108}
109 109
110#define KTIME_MAX ((s64)~((u64)1 << 63))
111#if (BITS_PER_LONG == 64)
112# define KTIME_SEC_MAX (KTIME_MAX / NSEC_PER_SEC)
113#else
114# define KTIME_SEC_MAX LONG_MAX
115#endif
116
110/*117/*
111 * Returns true if the timespec is norm, false if denorm:118 * Returns true if the timespec is norm, false if denorm:
112 */119 */
113#define timespec_valid(ts) \120static inline bool timespec_valid(const struct timespec *ts)
114 (((ts)->tv_sec >= 0) && (((unsigned long) (ts)->tv_nsec) < NSEC_PER_SEC))121{
122 /* Dates before 1970 are bogus */
123 if (ts->tv_sec < 0)
124 return false;
125 /* Can't have more nanoseconds then a second */
126 if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
127 return false;
128 return true;
129}
130
131static inline bool timespec_valid_strict(const struct timespec *ts)
132{
133 if (!timespec_valid(ts))
134 return false;
135 /* Disallow values that could overflow ktime_t */
136 if ((unsigned long long)ts->tv_sec >= KTIME_SEC_MAX)
137 return false;
138 return true;
139}
115 140
116extern void read_persistent_clock(struct timespec *ts);141extern void read_persistent_clock(struct timespec *ts);
117extern void read_boot_clock(struct timespec *ts);142extern void read_boot_clock(struct timespec *ts);
include/net/netfilter/nf_conntrack_ecache.h+1−0
@@ -18,6 +18,7 @@ struct nf_conntrack_ecache { · 17 unmodified lines
18 u16 ctmask; /* bitmask of ct events to be delivered */18 u16 ctmask; /* bitmask of ct events to be delivered */
19 u16 expmask; /* bitmask of expect events to be delivered */19 u16 expmask; /* bitmask of expect events to be delivered */
20 u32 pid; /* netlink pid of destroyer */20 u32 pid; /* netlink pid of destroyer */
21 struct timer_list timeout;
21};22};
22 23
23static inline struct nf_conntrack_ecache *24static inline struct nf_conntrack_ecache *
include/xen/events.h+0−2
@@ -58,8 +58,6 @@ void notify_remote_via_irq(int irq); · 57 unmodified lines
58 58
59void xen_irq_resume(void);59void xen_irq_resume(void);
60 60
61void xen_hvm_prepare_kexec(struct shared_info *sip, unsigned long pfn);
62
63/* Clear an irq's pending state, in preparation for polling on it */61/* Clear an irq's pending state, in preparation for polling on it */
64void xen_clear_irq_pending(int irq);62void xen_clear_irq_pending(int irq);
65void xen_set_irq_pending(int irq);63void xen_set_irq_pending(int irq);
kernel/fork.c+2−2
@@ -455,8 +455,8 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) · 454 unmodified lines
455 if (retval)455 if (retval)
456 goto out;456 goto out;
457 457
458 if (file && uprobe_mmap(tmp))458 if (file)
459 goto out;459 uprobe_mmap(tmp);
460 }460 }
461 /* a new mm has just been created */461 /* a new mm has just been created */
462 arch_dup_mmap(oldmm, mm);462 arch_dup_mmap(oldmm, mm);
kernel/time/timekeeping.c+33−6
@@ -115,6 +115,7 @@ static void tk_xtime_add(struct timekeeper *tk, const struct timespec *ts) · 114 unmodified lines
115{115{
116 tk->xtime_sec += ts->tv_sec;116 tk->xtime_sec += ts->tv_sec;
117 tk->xtime_nsec += (u64)ts->tv_nsec << tk->shift;117 tk->xtime_nsec += (u64)ts->tv_nsec << tk->shift;
118 tk_normalize_xtime(tk);
118}119}
119 120
120static void tk_set_wall_to_mono(struct timekeeper *tk, struct timespec wtm)121static void tk_set_wall_to_mono(struct timekeeper *tk, struct timespec wtm)
@@ -276,7 +277,7 @@ static void timekeeping_forward_now(struct timekeeper *tk) · 155 unmodified lines
276 tk->xtime_nsec += cycle_delta * tk->mult;277 tk->xtime_nsec += cycle_delta * tk->mult;
277 278
278 /* If arch requires, add in gettimeoffset() */279 /* If arch requires, add in gettimeoffset() */
279 tk->xtime_nsec += arch_gettimeoffset() << tk->shift;280 tk->xtime_nsec += (u64)arch_gettimeoffset() << tk->shift;
280 281
281 tk_normalize_xtime(tk);282 tk_normalize_xtime(tk);
282 283
@@ -427,7 +428,7 @@ int do_settimeofday(const struct timespec *tv) · 144 unmodified lines
427 struct timespec ts_delta, xt;428 struct timespec ts_delta, xt;
428 unsigned long flags;429 unsigned long flags;
429 430
430 if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)431 if (!timespec_valid_strict(tv))
431 return -EINVAL;432 return -EINVAL;
432 433
433 write_seqlock_irqsave(&tk->lock, flags);434 write_seqlock_irqsave(&tk->lock, flags);
@@ -463,6 +464,8 @@ int timekeeping_inject_offset(struct timespec *ts) · 29 unmodified lines
463{464{
464 struct timekeeper *tk = &timekeeper;465 struct timekeeper *tk = &timekeeper;
465 unsigned long flags;466 unsigned long flags;
467 struct timespec tmp;
468 int ret = 0;
466 469
467 if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)470 if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
468 return -EINVAL;471 return -EINVAL;
@@ -471,10 +474,17 @@ int timekeeping_inject_offset(struct timespec *ts) · 2 unmodified lines
471 474
472 timekeeping_forward_now(tk);475 timekeeping_forward_now(tk);
473 476
477 /* Make sure the proposed value is valid */
478 tmp = timespec_add(tk_xtime(tk), *ts);
479 if (!timespec_valid_strict(&tmp)) {
480 ret = -EINVAL;
481 goto error;
482 }
474 483
475 tk_xtime_add(tk, ts);484 tk_xtime_add(tk, ts);
476 tk_set_wall_to_mono(tk, timespec_sub(tk->wall_to_monotonic, *ts));485 tk_set_wall_to_mono(tk, timespec_sub(tk->wall_to_monotonic, *ts));
477 486
487error: /* even if we error out, we forwarded the time, so call update */
478 timekeeping_update(tk, true);488 timekeeping_update(tk, true);
479 489
480 write_sequnlock_irqrestore(&tk->lock, flags);490 write_sequnlock_irqrestore(&tk->lock, flags);
@@ -482,7 +492,7 @@ int timekeeping_inject_offset(struct timespec *ts) · 1 unmodified line
482 /* signal hrtimers about time change */492 /* signal hrtimers about time change */
483 clock_was_set();493 clock_was_set();
484 494
485 return 0;495 return ret;
486}496}
487EXPORT_SYMBOL(timekeeping_inject_offset);497EXPORT_SYMBOL(timekeeping_inject_offset);
488 498
@@ -649,7 +659,20 @@ void __init timekeeping_init(void) · 160 unmodified lines
649 struct timespec now, boot, tmp;659 struct timespec now, boot, tmp;
650 660
651 read_persistent_clock(&now);661 read_persistent_clock(&now);
662 if (!timespec_valid_strict(&now)) {
663 pr_warn("WARNING: Persistent clock returned invalid value!\n"
664 " Check your CMOS/BIOS settings.\n");
665 now.tv_sec = 0;
666 now.tv_nsec = 0;
667 }
668
652 read_boot_clock(&boot);669 read_boot_clock(&boot);
670 if (!timespec_valid_strict(&boot)) {
671 pr_warn("WARNING: Boot clock returned invalid value!\n"
672 " Check your CMOS/BIOS settings.\n");
673 boot.tv_sec = 0;
674 boot.tv_nsec = 0;
675 }
653 676
654 seqlock_init(&tk->lock);677 seqlock_init(&tk->lock);
655 678
@@ -690,7 +713,7 @@ static struct timespec timekeeping_suspend_time; · 34 unmodified lines
690static void __timekeeping_inject_sleeptime(struct timekeeper *tk,713static void __timekeeping_inject_sleeptime(struct timekeeper *tk,
691 struct timespec *delta)714 struct timespec *delta)
692{715{
693 if (!timespec_valid(delta)) {716 if (!timespec_valid_strict(delta)) {
694 printk(KERN_WARNING "__timekeeping_inject_sleeptime: Invalid "717 printk(KERN_WARNING "__timekeeping_inject_sleeptime: Invalid "
695 "sleep delta value!\n");718 "sleep delta value!\n");
696 return;719 return;
@@ -1129,6 +1152,10 @@ static void update_wall_time(void) · 432 unmodified lines
1129 offset = (clock->read(clock) - clock->cycle_last) & clock->mask;1152 offset = (clock->read(clock) - clock->cycle_last) & clock->mask;
1130#endif1153#endif
1131 1154
1155 /* Check if there's really nothing to do */
1156 if (offset < tk->cycle_interval)
1157 goto out;
1158
1132 /*1159 /*
1133 * With NO_HZ we may have to accumulate many cycle_intervals1160 * With NO_HZ we may have to accumulate many cycle_intervals
1134 * (think "ticks") worth of time at once. To do this efficiently,1161 * (think "ticks") worth of time at once. To do this efficiently,
@@ -1161,9 +1188,9 @@ static void update_wall_time(void) · 26 unmodified lines
1161 * the vsyscall implementations are converted to use xtime_nsec1188 * the vsyscall implementations are converted to use xtime_nsec
1162 * (shifted nanoseconds), this can be killed.1189 * (shifted nanoseconds), this can be killed.
1163 */1190 */
1164 remainder = tk->xtime_nsec & ((1 << tk->shift) - 1);1191 remainder = tk->xtime_nsec & ((1ULL << tk->shift) - 1);
1165 tk->xtime_nsec -= remainder;1192 tk->xtime_nsec -= remainder;
1166 tk->xtime_nsec += 1 << tk->shift;1193 tk->xtime_nsec += 1ULL << tk->shift;
1167 tk->ntp_error += remainder << tk->ntp_error_shift;1194 tk->ntp_error += remainder << tk->ntp_error_shift;
1168 1195
1169 /*1196 /*
kernel/trace/trace_syscalls.c+4−0
@@ -506,6 +506,8 @@ static void perf_syscall_enter(void *ignore, struct pt_regs *regs, long id) · 505 unmodified lines
506 int size;506 int size;
507 507
508 syscall_nr = syscall_get_nr(current, regs);508 syscall_nr = syscall_get_nr(current, regs);
509 if (syscall_nr < 0)
510 return;
509 if (!test_bit(syscall_nr, enabled_perf_enter_syscalls))511 if (!test_bit(syscall_nr, enabled_perf_enter_syscalls))
510 return;512 return;
511 513
@@ -580,6 +582,8 @@ static void perf_syscall_exit(void *ignore, struct pt_regs *regs, long ret) · 68 unmodified lines
580 int size;582 int size;
581 583
582 syscall_nr = syscall_get_nr(current, regs);584 syscall_nr = syscall_get_nr(current, regs);
585 if (syscall_nr < 0)
586 return;
583 if (!test_bit(syscall_nr, enabled_perf_exit_syscalls))587 if (!test_bit(syscall_nr, enabled_perf_exit_syscalls))
584 return;588 return;
585 589
mm/filemap.c+0−7
@@ -1412,12 +1412,8 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov, · 1411 unmodified lines
1412 retval = filemap_write_and_wait_range(mapping, pos,1412 retval = filemap_write_and_wait_range(mapping, pos,
1413 pos + iov_length(iov, nr_segs) - 1);1413 pos + iov_length(iov, nr_segs) - 1);
1414 if (!retval) {1414 if (!retval) {
1415 struct blk_plug plug;
1416
1417 blk_start_plug(&plug);
1418 retval = mapping->a_ops->direct_IO(READ, iocb,1415 retval = mapping->a_ops->direct_IO(READ, iocb,
1419 iov, pos, nr_segs);1416 iov, pos, nr_segs);
1420 blk_finish_plug(&plug);
1421 }1417 }
1422 if (retval > 0) {1418 if (retval > 0) {
1423 *ppos = pos + retval;1419 *ppos = pos + retval;
@@ -2527,14 +2523,12 @@ ssize_t generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, · 1103 unmodified lines
2527{2523{
2528 struct file *file = iocb->ki_filp;2524 struct file *file = iocb->ki_filp;
2529 struct inode *inode = file->f_mapping->host;2525 struct inode *inode = file->f_mapping->host;
2530 struct blk_plug plug;
2531 ssize_t ret;2526 ssize_t ret;
2532 2527
2533 BUG_ON(iocb->ki_pos != pos);2528 BUG_ON(iocb->ki_pos != pos);
2534 2529
2535 sb_start_write(inode->i_sb);2530 sb_start_write(inode->i_sb);
2536 mutex_lock(&inode->i_mutex);2531 mutex_lock(&inode->i_mutex);
2537 blk_start_plug(&plug);
2538 ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);2532 ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
2539 mutex_unlock(&inode->i_mutex);2533 mutex_unlock(&inode->i_mutex);
2540 2534
@@ -2545,7 +2539,6 @@ ssize_t generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, · 4 unmodified lines
2545 if (err < 0 && ret > 0)2539 if (err < 0 && ret > 0)
2546 ret = err;2540 ret = err;
2547 }2541 }
2548 blk_finish_plug(&plug);
2549 sb_end_write(inode->i_sb);2542 sb_end_write(inode->i_sb);
2550 return ret;2543 return ret;
2551}2544}
mm/mempolicy.c+1−1
@@ -2562,7 +2562,7 @@ int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol, int no_context) · 2561 unmodified lines
2562 break;2562 break;
2563 2563
2564 default:2564 default:
2565 BUG();2565 return -EINVAL;
2566 }2566 }
2567 2567
2568 l = strlen(policy_modes[mode]);2568 l = strlen(policy_modes[mode]);
mm/mmap.c+2−3
@@ -1356,9 +1356,8 @@ out: · 1355 unmodified lines
1356 } else if ((flags & MAP_POPULATE) && !(flags & MAP_NONBLOCK))1356 } else if ((flags & MAP_POPULATE) && !(flags & MAP_NONBLOCK))
1357 make_pages_present(addr, addr + len);1357 make_pages_present(addr, addr + len);
1358 1358
1359 if (file && uprobe_mmap(vma))1359 if (file)
1360 /* matching probes but cannot insert */1360 uprobe_mmap(vma);
1361 goto unmap_and_free_vma;
1362 1361
1363 return addr;1362 return addr;
1364 1363
mm/slab.c+1−0
@@ -3260,6 +3260,7 @@ force_grow: · 3259 unmodified lines
3260 3260
3261 /* cache_grow can reenable interrupts, then ac could change. */3261 /* cache_grow can reenable interrupts, then ac could change. */
3262 ac = cpu_cache_get(cachep);3262 ac = cpu_cache_get(cachep);
3263 node = numa_mem_id();
3263 3264
3264 /* no objects in sight? abort */3265 /* no objects in sight? abort */
3265 if (!x && (ac->avail == 0 || force_refill))3266 if (!x && (ac->avail == 0 || force_refill))
net/core/netpoll.c+1−9
@@ -168,24 +168,16 @@ static void poll_napi(struct net_device *dev) · 167 unmodified lines
168 struct napi_struct *napi;168 struct napi_struct *napi;
169 int budget = 16;169 int budget = 16;
170 170
171 WARN_ON_ONCE(!irqs_disabled());
172
173 list_for_each_entry(napi, &dev->napi_list, dev_list) {171 list_for_each_entry(napi, &dev->napi_list, dev_list) {
174 local_irq_enable();
175 if (napi->poll_owner != smp_processor_id() &&172 if (napi->poll_owner != smp_processor_id() &&
176 spin_trylock(&napi->poll_lock)) {173 spin_trylock(&napi->poll_lock)) {
177 rcu_read_lock_bh();
178 budget = poll_one_napi(rcu_dereference_bh(dev->npinfo),174 budget = poll_one_napi(rcu_dereference_bh(dev->npinfo),
179 napi, budget);175 napi, budget);
180 rcu_read_unlock_bh();
181 spin_unlock(&napi->poll_lock);176 spin_unlock(&napi->poll_lock);
182 177
183 if (!budget) {178 if (!budget)
184 local_irq_disable();
185 break;179 break;
186 }
187 }180 }
188 local_irq_disable();
189 }181 }
190}182}
191 183
net/ipv4/ipmr.c+12−2
@@ -124,6 +124,8 @@ static DEFINE_SPINLOCK(mfc_unres_lock); · 123 unmodified lines
124static struct kmem_cache *mrt_cachep __read_mostly;124static struct kmem_cache *mrt_cachep __read_mostly;
125 125
126static struct mr_table *ipmr_new_table(struct net *net, u32 id);126static struct mr_table *ipmr_new_table(struct net *net, u32 id);
127static void ipmr_free_table(struct mr_table *mrt);
128
127static int ip_mr_forward(struct net *net, struct mr_table *mrt,129static int ip_mr_forward(struct net *net, struct mr_table *mrt,
128 struct sk_buff *skb, struct mfc_cache *cache,130 struct sk_buff *skb, struct mfc_cache *cache,
129 int local);131 int local);
@@ -131,6 +133,7 @@ static int ipmr_cache_report(struct mr_table *mrt, · 1 unmodified line
131 struct sk_buff *pkt, vifi_t vifi, int assert);133 struct sk_buff *pkt, vifi_t vifi, int assert);
132static int __ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,134static int __ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
133 struct mfc_cache *c, struct rtmsg *rtm);135 struct mfc_cache *c, struct rtmsg *rtm);
136static void mroute_clean_tables(struct mr_table *mrt);
134static void ipmr_expire_process(unsigned long arg);137static void ipmr_expire_process(unsigned long arg);
135 138
136#ifdef CONFIG_IP_MROUTE_MULTIPLE_TABLES139#ifdef CONFIG_IP_MROUTE_MULTIPLE_TABLES
@@ -271,7 +274,7 @@ static void __net_exit ipmr_rules_exit(struct net *net) · 134 unmodified lines
271 274
272 list_for_each_entry_safe(mrt, next, &net->ipv4.mr_tables, list) {275 list_for_each_entry_safe(mrt, next, &net->ipv4.mr_tables, list) {
273 list_del(&mrt->list);276 list_del(&mrt->list);
274 kfree(mrt);277 ipmr_free_table(mrt);
275 }278 }
276 fib_rules_unregister(net->ipv4.mr_rules_ops);279 fib_rules_unregister(net->ipv4.mr_rules_ops);
277}280}
@@ -299,7 +302,7 @@ static int __net_init ipmr_rules_init(struct net *net) · 21 unmodified lines
299 302
300static void __net_exit ipmr_rules_exit(struct net *net)303static void __net_exit ipmr_rules_exit(struct net *net)
301{304{
302 kfree(net->ipv4.mrt);305 ipmr_free_table(net->ipv4.mrt);
303}306}
304#endif307#endif
305 308
@@ -336,6 +339,13 @@ static struct mr_table *ipmr_new_table(struct net *net, u32 id) · 30 unmodified lines
336 return mrt;339 return mrt;
337}340}
338 341
342static void ipmr_free_table(struct mr_table *mrt)
343{
344 del_timer_sync(&mrt->ipmr_expire_timer);
345 mroute_clean_tables(mrt);
346 kfree(mrt);
347}
348
339/* Service routines creating virtual interfaces: DVMRP tunnels and PIMREG */349/* Service routines creating virtual interfaces: DVMRP tunnels and PIMREG */
340 350
341static void ipmr_del_tunnel(struct net_device *dev, struct vifctl *v)351static void ipmr_del_tunnel(struct net_device *dev, struct vifctl *v)
net/ipv4/netfilter/nf_nat_sip.c+4−1
@@ -502,7 +502,10 @@ static unsigned int ip_nat_sdp_media(struct sk_buff *skb, unsigned int dataoff, · 501 unmodified lines
502 ret = nf_ct_expect_related(rtcp_exp);502 ret = nf_ct_expect_related(rtcp_exp);
503 if (ret == 0)503 if (ret == 0)
504 break;504 break;
505 else if (ret != -EBUSY) {505 else if (ret == -EBUSY) {
506 nf_ct_unexpect_related(rtp_exp);
507 continue;
508 } else if (ret < 0) {
506 nf_ct_unexpect_related(rtp_exp);509 nf_ct_unexpect_related(rtp_exp);
507 port = 0;510 port = 0;
508 break;511 break;
net/ipv4/route.c+4−2
@@ -934,12 +934,14 @@ static u32 __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu) · 933 unmodified lines
934 if (mtu < ip_rt_min_pmtu)934 if (mtu < ip_rt_min_pmtu)
935 mtu = ip_rt_min_pmtu;935 mtu = ip_rt_min_pmtu;
936 936
937 rcu_read_lock();
937 if (fib_lookup(dev_net(rt->dst.dev), fl4, &res) == 0) {938 if (fib_lookup(dev_net(rt->dst.dev), fl4, &res) == 0) {
938 struct fib_nh *nh = &FIB_RES_NH(res);939 struct fib_nh *nh = &FIB_RES_NH(res);
939 940
940 update_or_create_fnhe(nh, fl4->daddr, 0, mtu,941 update_or_create_fnhe(nh, fl4->daddr, 0, mtu,
941 jiffies + ip_rt_mtu_expires);942 jiffies + ip_rt_mtu_expires);
942 }943 }
944 rcu_read_unlock();
943 return mtu;945 return mtu;
944}946}
945 947
@@ -956,7 +958,7 @@ static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, · 10 unmodified lines
956 dst->obsolete = DST_OBSOLETE_KILL;958 dst->obsolete = DST_OBSOLETE_KILL;
957 } else {959 } else {
958 rt->rt_pmtu = mtu;960 rt->rt_pmtu = mtu;
959 dst_set_expires(&rt->dst, ip_rt_mtu_expires);961 rt->dst.expires = max(1UL, jiffies + ip_rt_mtu_expires);
960 }962 }
961}963}
962 964
@@ -1263,7 +1265,7 @@ static void ipv4_dst_destroy(struct dst_entry *dst) · 300 unmodified lines
1263{1265{
1264 struct rtable *rt = (struct rtable *) dst;1266 struct rtable *rt = (struct rtable *) dst;
1265 1267
1266 if (dst->flags & DST_NOCACHE) {1268 if (!list_empty(&rt->rt_uncached)) {
1267 spin_lock_bh(&rt_uncached_lock);1269 spin_lock_bh(&rt_uncached_lock);
1268 list_del(&rt->rt_uncached);1270 list_del(&rt->rt_uncached);
1269 spin_unlock_bh(&rt_uncached_lock);1271 spin_unlock_bh(&rt_uncached_lock);
net/ipv4/tcp_input.c+7−8
@@ -2926,13 +2926,14 @@ static void tcp_enter_recovery(struct sock *sk, bool ece_ack) · 2925 unmodified lines
2926 * tcp_xmit_retransmit_queue().2926 * tcp_xmit_retransmit_queue().
2927 */2927 */
2928static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked,2928static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked,
2929 int newly_acked_sacked, bool is_dupack,2929 int prior_sacked, bool is_dupack,
2930 int flag)2930 int flag)
2931{2931{
2932 struct inet_connection_sock *icsk = inet_csk(sk);2932 struct inet_connection_sock *icsk = inet_csk(sk);
2933 struct tcp_sock *tp = tcp_sk(sk);2933 struct tcp_sock *tp = tcp_sk(sk);
2934 int do_lost = is_dupack || ((flag & FLAG_DATA_SACKED) &&2934 int do_lost = is_dupack || ((flag & FLAG_DATA_SACKED) &&
2935 (tcp_fackets_out(tp) > tp->reordering));2935 (tcp_fackets_out(tp) > tp->reordering));
2936 int newly_acked_sacked = 0;
2936 int fast_rexmit = 0;2937 int fast_rexmit = 0;
2937 2938
2938 if (WARN_ON(!tp->packets_out && tp->sacked_out))2939 if (WARN_ON(!tp->packets_out && tp->sacked_out))
@@ -2992,6 +2993,7 @@ static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked, · 53 unmodified lines
2992 tcp_add_reno_sack(sk);2993 tcp_add_reno_sack(sk);
2993 } else2994 } else
2994 do_lost = tcp_try_undo_partial(sk, pkts_acked);2995 do_lost = tcp_try_undo_partial(sk, pkts_acked);
2996 newly_acked_sacked = pkts_acked + tp->sacked_out - prior_sacked;
2995 break;2997 break;
2996 case TCP_CA_Loss:2998 case TCP_CA_Loss:
2997 if (flag & FLAG_DATA_ACKED)2999 if (flag & FLAG_DATA_ACKED)
@@ -3013,6 +3015,7 @@ static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked, · 15 unmodified lines
3013 if (is_dupack)3015 if (is_dupack)
3014 tcp_add_reno_sack(sk);3016 tcp_add_reno_sack(sk);
3015 }3017 }
3018 newly_acked_sacked = pkts_acked + tp->sacked_out - prior_sacked;
3016 3019
3017 if (icsk->icsk_ca_state <= TCP_CA_Disorder)3020 if (icsk->icsk_ca_state <= TCP_CA_Disorder)
3018 tcp_try_undo_dsack(sk);3021 tcp_try_undo_dsack(sk);
@@ -3590,7 +3593,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag) · 571 unmodified lines
3590 int prior_packets;3593 int prior_packets;
3591 int prior_sacked = tp->sacked_out;3594 int prior_sacked = tp->sacked_out;
3592 int pkts_acked = 0;3595 int pkts_acked = 0;
3593 int newly_acked_sacked = 0;
3594 bool frto_cwnd = false;3596 bool frto_cwnd = false;
3595 3597
3596 /* If the ack is older than previous acks3598 /* If the ack is older than previous acks
@@ -3666,8 +3668,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag) · 69 unmodified lines
3666 flag |= tcp_clean_rtx_queue(sk, prior_fackets, prior_snd_una);3668 flag |= tcp_clean_rtx_queue(sk, prior_fackets, prior_snd_una);
3667 3669
3668 pkts_acked = prior_packets - tp->packets_out;3670 pkts_acked = prior_packets - tp->packets_out;
3669 newly_acked_sacked = (prior_packets - prior_sacked) -
3670 (tp->packets_out - tp->sacked_out);
3671 3671
3672 if (tp->frto_counter)3672 if (tp->frto_counter)
3673 frto_cwnd = tcp_process_frto(sk, flag);3673 frto_cwnd = tcp_process_frto(sk, flag);
@@ -3681,7 +3681,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag) · 7 unmodified lines
3681 tcp_may_raise_cwnd(sk, flag))3681 tcp_may_raise_cwnd(sk, flag))
3682 tcp_cong_avoid(sk, ack, prior_in_flight);3682 tcp_cong_avoid(sk, ack, prior_in_flight);
3683 is_dupack = !(flag & (FLAG_SND_UNA_ADVANCED | FLAG_NOT_DUP));3683 is_dupack = !(flag & (FLAG_SND_UNA_ADVANCED | FLAG_NOT_DUP));
3684 tcp_fastretrans_alert(sk, pkts_acked, newly_acked_sacked,3684 tcp_fastretrans_alert(sk, pkts_acked, prior_sacked,
3685 is_dupack, flag);3685 is_dupack, flag);
3686 } else {3686 } else {
3687 if ((flag & FLAG_DATA_ACKED) && !frto_cwnd)3687 if ((flag & FLAG_DATA_ACKED) && !frto_cwnd)
@@ -3698,7 +3698,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag) · 10 unmodified lines
3698no_queue:3698no_queue:
3699 /* If data was DSACKed, see if we can undo a cwnd reduction. */3699 /* If data was DSACKed, see if we can undo a cwnd reduction. */
3700 if (flag & FLAG_DSACKING_ACK)3700 if (flag & FLAG_DSACKING_ACK)
3701 tcp_fastretrans_alert(sk, pkts_acked, newly_acked_sacked,3701 tcp_fastretrans_alert(sk, pkts_acked, prior_sacked,
3702 is_dupack, flag);3702 is_dupack, flag);
3703 /* If this ack opens up a zero window, clear backoff. It was3703 /* If this ack opens up a zero window, clear backoff. It was
3704 * being used to time the probes, and is probably far higher than3704 * being used to time the probes, and is probably far higher than
@@ -3718,8 +3718,7 @@ old_ack: · 13 unmodified lines
3718 */3718 */
3719 if (TCP_SKB_CB(skb)->sacked) {3719 if (TCP_SKB_CB(skb)->sacked) {
3720 flag |= tcp_sacktag_write_queue(sk, skb, prior_snd_una);3720 flag |= tcp_sacktag_write_queue(sk, skb, prior_snd_una);
3721 newly_acked_sacked = tp->sacked_out - prior_sacked;3721 tcp_fastretrans_alert(sk, pkts_acked, prior_sacked,
3722 tcp_fastretrans_alert(sk, pkts_acked, newly_acked_sacked,
3723 is_dupack, flag);3722 is_dupack, flag);
3724 }3723 }
3725 3724
net/ipv6/esp6.c+3−3
@@ -167,8 +167,6 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) · 166 unmodified lines
167 struct esp_data *esp = x->data;167 struct esp_data *esp = x->data;
168 168
169 /* skb is pure payload to encrypt */169 /* skb is pure payload to encrypt */
170 err = -ENOMEM;
171
172 aead = esp->aead;170 aead = esp->aead;
173 alen = crypto_aead_authsize(aead);171 alen = crypto_aead_authsize(aead);
174 172
@@ -203,8 +201,10 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) · 28 unmodified lines
203 }201 }
204 202
205 tmp = esp_alloc_tmp(aead, nfrags + sglists, seqhilen);203 tmp = esp_alloc_tmp(aead, nfrags + sglists, seqhilen);
206 if (!tmp)204 if (!tmp) {
205 err = -ENOMEM;
207 goto error;206 goto error;
207 }
208 208
209 seqhi = esp_tmp_seqhi(tmp);209 seqhi = esp_tmp_seqhi(tmp);
210 iv = esp_tmp_iv(aead, tmp, seqhilen);210 iv = esp_tmp_iv(aead, tmp, seqhilen);
net/l2tp/l2tp_core.c+1−2
@@ -1347,11 +1347,10 @@ static void l2tp_tunnel_free(struct l2tp_tunnel *tunnel) · 1346 unmodified lines
1347 /* Remove from tunnel list */1347 /* Remove from tunnel list */
1348 spin_lock_bh(&pn->l2tp_tunnel_list_lock);1348 spin_lock_bh(&pn->l2tp_tunnel_list_lock);
1349 list_del_rcu(&tunnel->list);1349 list_del_rcu(&tunnel->list);
1350 kfree_rcu(tunnel, rcu);
1350 spin_unlock_bh(&pn->l2tp_tunnel_list_lock);1351 spin_unlock_bh(&pn->l2tp_tunnel_list_lock);
1351 synchronize_rcu();
1352 1352
1353 atomic_dec(&l2tp_tunnel_count);1353 atomic_dec(&l2tp_tunnel_count);
1354 kfree(tunnel);
1355}1354}
1356 1355
1357/* Create a socket for the tunnel, if one isn't set up by1356/* Create a socket for the tunnel, if one isn't set up by
net/l2tp/l2tp_core.h+1−0
@@ -163,6 +163,7 @@ struct l2tp_tunnel_cfg { · 162 unmodified lines
163 163
164struct l2tp_tunnel {164struct l2tp_tunnel {
165 int magic; /* Should be L2TP_TUNNEL_MAGIC */165 int magic; /* Should be L2TP_TUNNEL_MAGIC */
166 struct rcu_head rcu;
166 rwlock_t hlist_lock; /* protect session_hlist */167 rwlock_t hlist_lock; /* protect session_hlist */
167 struct hlist_head session_hlist[L2TP_HASH_SIZE];168 struct hlist_head session_hlist[L2TP_HASH_SIZE];
168 /* hashed list of sessions,169 /* hashed list of sessions,
net/mac80211/tx.c+16−22
@@ -1811,37 +1811,31 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, · 1810 unmodified lines
1811 meshhdrlen = ieee80211_new_mesh_header(&mesh_hdr,1811 meshhdrlen = ieee80211_new_mesh_header(&mesh_hdr,
1812 sdata, NULL, NULL);1812 sdata, NULL, NULL);
1813 } else {1813 } else {
1814 int is_mesh_mcast = 1;1814 /* DS -> MBSS (802.11-2012 13.11.3.3).
1815 const u8 *mesh_da;1815 * For unicast with unknown forwarding information,
1816 * destination might be in the MBSS or if that fails
1817 * forwarded to another mesh gate. In either case
1818 * resolution will be handled in ieee80211_xmit(), so
1819 * leave the original DA. This also works for mcast */
1820 const u8 *mesh_da = skb->data;
1821
1822 if (mppath)
1823 mesh_da = mppath->mpp;
1824 else if (mpath)
1825 mesh_da = mpath->dst;
1826 rcu_read_unlock();
1816 1827
1817 if (is_multicast_ether_addr(skb->data))
1818 /* DA TA mSA AE:SA */
1819 mesh_da = skb->data;
1820 else {
1821 static const u8 bcast[ETH_ALEN] =
1822 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1823 if (mppath) {
1824 /* RA TA mDA mSA AE:DA SA */
1825 mesh_da = mppath->mpp;
1826 is_mesh_mcast = 0;
1827 } else if (mpath) {
1828 mesh_da = mpath->dst;
1829 is_mesh_mcast = 0;
1830 } else {
1831 /* DA TA mSA AE:SA */
1832 mesh_da = bcast;
1833 }
1834 }
1835 hdrlen = ieee80211_fill_mesh_addresses(&hdr, &fc,1828 hdrlen = ieee80211_fill_mesh_addresses(&hdr, &fc,
1836 mesh_da, sdata->vif.addr);1829 mesh_da, sdata->vif.addr);
1837 rcu_read_unlock();1830 if (is_multicast_ether_addr(mesh_da))
1838 if (is_mesh_mcast)1831 /* DA TA mSA AE:SA */
1839 meshhdrlen =1832 meshhdrlen =
1840 ieee80211_new_mesh_header(&mesh_hdr,1833 ieee80211_new_mesh_header(&mesh_hdr,
1841 sdata,1834 sdata,
1842 skb->data + ETH_ALEN,1835 skb->data + ETH_ALEN,
1843 NULL);1836 NULL);
1844 else1837 else
1838 /* RA TA mDA mSA AE:DA SA */
1845 meshhdrlen =1839 meshhdrlen =
1846 ieee80211_new_mesh_header(&mesh_hdr,1840 ieee80211_new_mesh_header(&mesh_hdr,
1847 sdata,1841 sdata,
net/netfilter/ipvs/ip_vs_ctl.c+3−1
@@ -1171,8 +1171,10 @@ ip_vs_add_service(struct net *net, struct ip_vs_service_user_kern *u, · 1170 unmodified lines
1171 goto out_err;1171 goto out_err;
1172 }1172 }
1173 svc->stats.cpustats = alloc_percpu(struct ip_vs_cpu_stats);1173 svc->stats.cpustats = alloc_percpu(struct ip_vs_cpu_stats);
1174 if (!svc->stats.cpustats)1174 if (!svc->stats.cpustats) {
1175 ret = -ENOMEM;
1175 goto out_err;1176 goto out_err;
1177 }
1176 1178
1177 /* I'm the first user of the service */1179 /* I'm the first user of the service */
1178 atomic_set(&svc->usecnt, 0);1180 atomic_set(&svc->usecnt, 0);
net/netfilter/nf_conntrack_core.c+11−5
@@ -249,12 +249,15 @@ static void death_by_event(unsigned long ul_conntrack) · 248 unmodified lines
249{249{
250 struct nf_conn *ct = (void *)ul_conntrack;250 struct nf_conn *ct = (void *)ul_conntrack;
251 struct net *net = nf_ct_net(ct);251 struct net *net = nf_ct_net(ct);
252 struct nf_conntrack_ecache *ecache = nf_ct_ecache_find(ct);
253
254 BUG_ON(ecache == NULL);
252 255
253 if (nf_conntrack_event(IPCT_DESTROY, ct) < 0) {256 if (nf_conntrack_event(IPCT_DESTROY, ct) < 0) {
254 /* bad luck, let's retry again */257 /* bad luck, let's retry again */
255 ct->timeout.expires = jiffies +258 ecache->timeout.expires = jiffies +
256 (random32() % net->ct.sysctl_events_retry_timeout);259 (random32() % net->ct.sysctl_events_retry_timeout);
257 add_timer(&ct->timeout);260 add_timer(&ecache->timeout);
258 return;261 return;
259 }262 }
260 /* we've got the event delivered, now it's dying */263 /* we've got the event delivered, now it's dying */
@@ -268,6 +271,9 @@ static void death_by_event(unsigned long ul_conntrack) · 7 unmodified lines
268void nf_ct_insert_dying_list(struct nf_conn *ct)271void nf_ct_insert_dying_list(struct nf_conn *ct)
269{272{
270 struct net *net = nf_ct_net(ct);273 struct net *net = nf_ct_net(ct);
274 struct nf_conntrack_ecache *ecache = nf_ct_ecache_find(ct);
275
276 BUG_ON(ecache == NULL);
271 277
272 /* add this conntrack to the dying list */278 /* add this conntrack to the dying list */
273 spin_lock_bh(&nf_conntrack_lock);279 spin_lock_bh(&nf_conntrack_lock);
@@ -275,10 +281,10 @@ void nf_ct_insert_dying_list(struct nf_conn *ct) · 1 unmodified line
275 &net->ct.dying);281 &net->ct.dying);
276 spin_unlock_bh(&nf_conntrack_lock);282 spin_unlock_bh(&nf_conntrack_lock);
277 /* set a new timer to retry event delivery */283 /* set a new timer to retry event delivery */
278 setup_timer(&ct->timeout, death_by_event, (unsigned long)ct);284 setup_timer(&ecache->timeout, death_by_event, (unsigned long)ct);
279 ct->timeout.expires = jiffies +285 ecache->timeout.expires = jiffies +
280 (random32() % net->ct.sysctl_events_retry_timeout);286 (random32() % net->ct.sysctl_events_retry_timeout);
281 add_timer(&ct->timeout);287 add_timer(&ecache->timeout);
282}288}
283EXPORT_SYMBOL_GPL(nf_ct_insert_dying_list);289EXPORT_SYMBOL_GPL(nf_ct_insert_dying_list);
284 290
net/netfilter/nf_conntrack_netlink.c+2−1
@@ -2790,7 +2790,8 @@ static int __init ctnetlink_init(void) · 2789 unmodified lines
2790 goto err_unreg_subsys;2790 goto err_unreg_subsys;
2791 }2791 }
2792 2792
2793 if (register_pernet_subsys(&ctnetlink_net_ops)) {2793 ret = register_pernet_subsys(&ctnetlink_net_ops);
2794 if (ret < 0) {
2794 pr_err("ctnetlink_init: cannot register pernet operations\n");2795 pr_err("ctnetlink_init: cannot register pernet operations\n");
2795 goto err_unreg_exp_subsys;2796 goto err_unreg_exp_subsys;
2796 }2797 }
net/netfilter/nfnetlink_log.c+4−2
@@ -480,7 +480,7 @@ __build_packet_message(struct nfulnl_instance *inst, · 479 unmodified lines
480 }480 }
481 481
482 if (indev && skb_mac_header_was_set(skb)) {482 if (indev && skb_mac_header_was_set(skb)) {
483 if (nla_put_be32(inst->skb, NFULA_HWTYPE, htons(skb->dev->type)) ||483 if (nla_put_be16(inst->skb, NFULA_HWTYPE, htons(skb->dev->type)) ||
484 nla_put_be16(inst->skb, NFULA_HWLEN,484 nla_put_be16(inst->skb, NFULA_HWLEN,
485 htons(skb->dev->hard_header_len)) ||485 htons(skb->dev->hard_header_len)) ||
486 nla_put(inst->skb, NFULA_HWHEADER, skb->dev->hard_header_len,486 nla_put(inst->skb, NFULA_HWHEADER, skb->dev->hard_header_len,
@@ -996,8 +996,10 @@ static int __init nfnetlink_log_init(void) · 509 unmodified lines
996 996
997#ifdef CONFIG_PROC_FS997#ifdef CONFIG_PROC_FS
998 if (!proc_create("nfnetlink_log", 0440,998 if (!proc_create("nfnetlink_log", 0440,
999 proc_net_netfilter, &nful_file_ops))999 proc_net_netfilter, &nful_file_ops)) {
1000 status = -ENOMEM;
1000 goto cleanup_logger;1001 goto cleanup_logger;
1002 }
1001#endif1003#endif
1002 return status;1004 return status;
1003 1005
net/netlink/af_netlink.c+3−1
@@ -1373,7 +1373,8 @@ static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock, · 1372 unmodified lines
1373 dst_pid = addr->nl_pid;1373 dst_pid = addr->nl_pid;
1374 dst_group = ffs(addr->nl_groups);1374 dst_group = ffs(addr->nl_groups);
1375 err = -EPERM;1375 err = -EPERM;
1376 if (dst_group && !netlink_capable(sock, NL_NONROOT_SEND))1376 if ((dst_group || dst_pid) &&
1377 !netlink_capable(sock, NL_NONROOT_SEND))
1377 goto out;1378 goto out;
1378 } else {1379 } else {
1379 dst_pid = nlk->dst_pid;1380 dst_pid = nlk->dst_pid;
@@ -2147,6 +2148,7 @@ static void __init netlink_add_usersock_entry(void) · 767 unmodified lines
2147 rcu_assign_pointer(nl_table[NETLINK_USERSOCK].listeners, listeners);2148 rcu_assign_pointer(nl_table[NETLINK_USERSOCK].listeners, listeners);
2148 nl_table[NETLINK_USERSOCK].module = THIS_MODULE;2149 nl_table[NETLINK_USERSOCK].module = THIS_MODULE;
2149 nl_table[NETLINK_USERSOCK].registered = 1;2150 nl_table[NETLINK_USERSOCK].registered = 1;
2151 nl_table[NETLINK_USERSOCK].nl_nonroot = NL_NONROOT_SEND;
2150 2152
2151 netlink_table_ungrab();2153 netlink_table_ungrab();
2152}2154}
net/packet/af_packet.c+1−1
@@ -1273,7 +1273,7 @@ static void __fanout_unlink(struct sock *sk, struct packet_sock *po) · 1272 unmodified lines
1273 spin_unlock(&f->lock);1273 spin_unlock(&f->lock);
1274}1274}
1275 1275
1276bool match_fanout_group(struct packet_type *ptype, struct sock * sk)1276static bool match_fanout_group(struct packet_type *ptype, struct sock * sk)
1277{1277{
1278 if (ptype->af_packet_priv == (void*)((struct packet_sock *)sk)->fanout)1278 if (ptype->af_packet_priv == (void*)((struct packet_sock *)sk)->fanout)
1279 return true;1279 return true;
net/socket.c+2−2
@@ -2604,7 +2604,7 @@ static int do_siocgstamp(struct net *net, struct socket *sock, · 2603 unmodified lines
2604 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&ktv);2604 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&ktv);
2605 set_fs(old_fs);2605 set_fs(old_fs);
2606 if (!err)2606 if (!err)
2607 err = compat_put_timeval(up, &ktv);2607 err = compat_put_timeval(&ktv, up);
2608 2608
2609 return err;2609 return err;
2610}2610}
@@ -2620,7 +2620,7 @@ static int do_siocgstampns(struct net *net, struct socket *sock, · 9 unmodified lines
2620 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&kts);2620 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&kts);
2621 set_fs(old_fs);2621 set_fs(old_fs);
2622 if (!err)2622 if (!err)
2623 err = compat_put_timespec(up, &kts);2623 err = compat_put_timespec(&kts, up);
2624 2624
2625 return err;2625 return err;
2626}2626}
net/sunrpc/svc_xprt.c+4−6
@@ -316,7 +316,6 @@ static bool svc_xprt_has_something_to_do(struct svc_xprt *xprt) · 315 unmodified lines
316 */316 */
317void svc_xprt_enqueue(struct svc_xprt *xprt)317void svc_xprt_enqueue(struct svc_xprt *xprt)
318{318{
319 struct svc_serv *serv = xprt->xpt_server;
320 struct svc_pool *pool;319 struct svc_pool *pool;
321 struct svc_rqst *rqstp;320 struct svc_rqst *rqstp;
322 int cpu;321 int cpu;
@@ -362,8 +361,6 @@ void svc_xprt_enqueue(struct svc_xprt *xprt) · 39 unmodified lines
362 rqstp, rqstp->rq_xprt);361 rqstp, rqstp->rq_xprt);
363 rqstp->rq_xprt = xprt;362 rqstp->rq_xprt = xprt;
364 svc_xprt_get(xprt);363 svc_xprt_get(xprt);
365 rqstp->rq_reserved = serv->sv_max_mesg;
366 atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);
367 pool->sp_stats.threads_woken++;364 pool->sp_stats.threads_woken++;
368 wake_up(&rqstp->rq_wait);365 wake_up(&rqstp->rq_wait);
369 } else {366 } else {
@@ -640,8 +637,6 @@ int svc_recv(struct svc_rqst *rqstp, long timeout) · 270 unmodified lines
640 if (xprt) {637 if (xprt) {
641 rqstp->rq_xprt = xprt;638 rqstp->rq_xprt = xprt;
642 svc_xprt_get(xprt);639 svc_xprt_get(xprt);
643 rqstp->rq_reserved = serv->sv_max_mesg;
644 atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);
645 640
646 /* As there is a shortage of threads and this request641 /* As there is a shortage of threads and this request
647 * had to be queued, don't allow the thread to wait so642 * had to be queued, don't allow the thread to wait so
@@ -738,6 +733,8 @@ int svc_recv(struct svc_rqst *rqstp, long timeout) · 90 unmodified lines
738 else733 else
739 len = xprt->xpt_ops->xpo_recvfrom(rqstp);734 len = xprt->xpt_ops->xpo_recvfrom(rqstp);
740 dprintk("svc: got len=%d\n", len);735 dprintk("svc: got len=%d\n", len);
736 rqstp->rq_reserved = serv->sv_max_mesg;
737 atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);
741 }738 }
742 svc_xprt_received(xprt);739 svc_xprt_received(xprt);
743 740
@@ -794,7 +791,8 @@ int svc_send(struct svc_rqst *rqstp) · 50 unmodified lines
794 791
795 /* Grab mutex to serialize outgoing data. */792 /* Grab mutex to serialize outgoing data. */
796 mutex_lock(&xprt->xpt_mutex);793 mutex_lock(&xprt->xpt_mutex);
797 if (test_bit(XPT_DEAD, &xprt->xpt_flags))794 if (test_bit(XPT_DEAD, &xprt->xpt_flags)
795 || test_bit(XPT_CLOSE, &xprt->xpt_flags))
798 len = -ENOTCONN;796 len = -ENOTCONN;
799 else797 else
800 len = xprt->xpt_ops->xpo_sendto(rqstp);798 len = xprt->xpt_ops->xpo_sendto(rqstp);
net/sunrpc/svcsock.c+1−1
@@ -1129,9 +1129,9 @@ static int svc_tcp_recvfrom(struct svc_rqst *rqstp) · 1128 unmodified lines
1129 if (len >= 0)1129 if (len >= 0)
1130 svsk->sk_tcplen += len;1130 svsk->sk_tcplen += len;
1131 if (len != want) {1131 if (len != want) {
1132 svc_tcp_save_pages(svsk, rqstp);
1132 if (len < 0 && len != -EAGAIN)1133 if (len < 0 && len != -EAGAIN)
1133 goto err_other;1134 goto err_other;
1134 svc_tcp_save_pages(svsk, rqstp);
1135 dprintk("svc: incomplete TCP record (%d of %d)\n",1135 dprintk("svc: incomplete TCP record (%d of %d)\n",
1136 svsk->sk_tcplen, svsk->sk_reclen);1136 svsk->sk_tcplen, svsk->sk_reclen);
1137 goto err_noclose;1137 goto err_noclose;
net/xfrm/xfrm_state.c+3−1
@@ -1994,8 +1994,10 @@ int __xfrm_init_state(struct xfrm_state *x, bool init_replay) · 1993 unmodified lines
1994 goto error;1994 goto error;
1995 1995
1996 x->outer_mode = xfrm_get_mode(x->props.mode, family);1996 x->outer_mode = xfrm_get_mode(x->props.mode, family);
1997 if (x->outer_mode == NULL)1997 if (x->outer_mode == NULL) {
1998 err = -EPROTONOSUPPORT;
1998 goto error;1999 goto error;
2000 }
1999 2001
2000 if (init_replay) {2002 if (init_replay) {
2001 err = xfrm_init_replay(x);2003 err = xfrm_init_replay(x);
scripts/Makefile.fwinst+1−1
@@ -42,7 +42,7 @@ quiet_cmd_install = INSTALL $(subst $(srctree)/,,$@) · 41 unmodified lines
42$(installed-fw-dirs):42$(installed-fw-dirs):
43 $(call cmd,mkdir)43 $(call cmd,mkdir)
44 44
45$(installed-fw): $(INSTALL_FW_PATH)/%: $(obj)/% | $(INSTALL_FW_PATH)/$$(dir %)45$(installed-fw): $(INSTALL_FW_PATH)/%: $(obj)/% | $$(dir $(INSTALL_FW_PATH)/%)
46 $(call cmd,install)46 $(call cmd,install)
47 47
48PHONY += __fw_install __fw_modinst FORCE48PHONY += __fw_install __fw_modinst FORCE
scripts/link-vmlinux.sh+1−1
@@ -211,7 +211,7 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then · 210 unmodified lines
211 211
212 if ! cmp -s System.map .tmp_System.map; then212 if ! cmp -s System.map .tmp_System.map; then
213 echo >&2 Inconsistent kallsyms data213 echo >&2 Inconsistent kallsyms data
214 echo >&2 echo Try "make KALLSYMS_EXTRA_PASS=1" as a workaround214 echo >&2 Try "make KALLSYMS_EXTRA_PASS=1" as a workaround
215 cleanup215 cleanup
216 exit 1216 exit 1
217 fi217 fi
sound/pci/hda/hda_codec.c+8−2
@@ -1209,6 +1209,9 @@ static void snd_hda_codec_free(struct hda_codec *codec) · 1208 unmodified lines
1209 kfree(codec);1209 kfree(codec);
1210}1210}
1211 1211
1212static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec,
1213 hda_nid_t fg, unsigned int power_state);
1214
1212static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,1215static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
1213 unsigned int power_state);1216 unsigned int power_state);
1214 1217
@@ -1317,6 +1320,10 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, · 102 unmodified lines
1317 AC_VERB_GET_SUBSYSTEM_ID, 0);1320 AC_VERB_GET_SUBSYSTEM_ID, 0);
1318 }1321 }
1319 1322
1323 codec->epss = snd_hda_codec_get_supported_ps(codec,
1324 codec->afg ? codec->afg : codec->mfg,
1325 AC_PWRST_EPSS);
1326
1320 /* power-up all before initialization */1327 /* power-up all before initialization */
1321 hda_set_power_state(codec,1328 hda_set_power_state(codec,
1322 codec->afg ? codec->afg : codec->mfg,1329 codec->afg ? codec->afg : codec->mfg,
@@ -3543,8 +3550,7 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, · 2220 unmodified lines
3543 /* this delay seems necessary to avoid click noise at power-down */3550 /* this delay seems necessary to avoid click noise at power-down */
3544 if (power_state == AC_PWRST_D3) {3551 if (power_state == AC_PWRST_D3) {
3545 /* transition time less than 10ms for power down */3552 /* transition time less than 10ms for power down */
3546 bool epss = snd_hda_codec_get_supported_ps(codec, fg, AC_PWRST_EPSS);3553 msleep(codec->epss ? 10 : 100);
3547 msleep(epss ? 10 : 100);
3548 }3554 }
3549 3555
3550 /* repeat power states setting at most 10 times*/3556 /* repeat power states setting at most 10 times*/
sound/pci/hda/hda_codec.h+1−0
@@ -862,6 +862,7 @@ struct hda_codec { · 861 unmodified lines
862 unsigned int ignore_misc_bit:1; /* ignore MISC_NO_PRESENCE bit */862 unsigned int ignore_misc_bit:1; /* ignore MISC_NO_PRESENCE bit */
863 unsigned int no_jack_detect:1; /* Machine has no jack-detection */863 unsigned int no_jack_detect:1; /* Machine has no jack-detection */
864 unsigned int pcm_format_first:1; /* PCM format must be set first */864 unsigned int pcm_format_first:1; /* PCM format must be set first */
865 unsigned int epss:1; /* supporting EPSS? */
865#ifdef CONFIG_SND_HDA_POWER_SAVE866#ifdef CONFIG_SND_HDA_POWER_SAVE
866 unsigned int power_on :1; /* current (global) power-state */867 unsigned int power_on :1; /* current (global) power-state */
867 int power_transition; /* power-state in transition */868 int power_transition; /* power-state in transition */
sound/pci/hda/patch_sigmatel.c+4−0
@@ -4543,6 +4543,9 @@ static void stac92xx_line_out_detect(struct hda_codec *codec, · 4542 unmodified lines
4543 struct auto_pin_cfg *cfg = &spec->autocfg;4543 struct auto_pin_cfg *cfg = &spec->autocfg;
4544 int i;4544 int i;
4545 4545
4546 if (cfg->speaker_outs == 0)
4547 return;
4548
4546 for (i = 0; i < cfg->line_outs; i++) {4549 for (i = 0; i < cfg->line_outs; i++) {
4547 if (presence)4550 if (presence)
4548 break;4551 break;
@@ -5531,6 +5534,7 @@ static int patch_stac92hd83xxx(struct hda_codec *codec) · 982 unmodified lines
5531 snd_hda_codec_set_pincfg(codec, 0xf, 0x2181205e);5534 snd_hda_codec_set_pincfg(codec, 0xf, 0x2181205e);
5532 }5535 }
5533 5536
5537 codec->epss = 0; /* longer delay needed for D3 */
5534 codec->no_trigger_sense = 1;5538 codec->no_trigger_sense = 1;
5535 codec->spec = spec;5539 codec->spec = spec;
5536 5540
sound/usb/card.c+2−2
@@ -553,7 +553,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, · 552 unmodified lines
553 struct snd_usb_audio *chip)553 struct snd_usb_audio *chip)
554{554{
555 struct snd_card *card;555 struct snd_card *card;
556 struct list_head *p;556 struct list_head *p, *n;
557 557
558 if (chip == (void *)-1L)558 if (chip == (void *)-1L)
559 return;559 return;
@@ -570,7 +570,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, · 10 unmodified lines
570 snd_usb_stream_disconnect(p);570 snd_usb_stream_disconnect(p);
571 }571 }
572 /* release the endpoint resources */572 /* release the endpoint resources */
573 list_for_each(p, &chip->ep_list) {573 list_for_each_safe(p, n, &chip->ep_list) {
574 snd_usb_endpoint_free(p);574 snd_usb_endpoint_free(p);
575 }575 }
576 /* release the midi resources */576 /* release the midi resources */
sound/usb/endpoint.c+10−14
@@ -141,7 +141,7 @@ int snd_usb_endpoint_implict_feedback_sink(struct snd_usb_endpoint *ep) · 140 unmodified lines
141 *141 *
142 * For implicit feedback, next_packet_size() is unused.142 * For implicit feedback, next_packet_size() is unused.
143 */143 */
144static int next_packet_size(struct snd_usb_endpoint *ep)144int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
145{145{
146 unsigned long flags;146 unsigned long flags;
147 int ret;147 int ret;
@@ -177,15 +177,6 @@ static void retire_inbound_urb(struct snd_usb_endpoint *ep, · 29 unmodified lines
177 ep->retire_data_urb(ep->data_subs, urb);177 ep->retire_data_urb(ep->data_subs, urb);
178}178}
179 179
180static void prepare_outbound_urb_sizes(struct snd_usb_endpoint *ep,
181 struct snd_urb_ctx *ctx)
182{
183 int i;
184
185 for (i = 0; i < ctx->packets; ++i)
186 ctx->packet_size[i] = next_packet_size(ep);
187}
188
189/*180/*
190 * Prepare a PLAYBACK urb for submission to the bus.181 * Prepare a PLAYBACK urb for submission to the bus.
191 */182 */
@@ -370,7 +361,6 @@ static void snd_complete_urb(struct urb *urb) · 178 unmodified lines
370 goto exit_clear;361 goto exit_clear;
371 }362 }
372 363
373 prepare_outbound_urb_sizes(ep, ctx);
374 prepare_outbound_urb(ep, ctx);364 prepare_outbound_urb(ep, ctx);
375 } else {365 } else {
376 retire_inbound_urb(ep, ctx);366 retire_inbound_urb(ep, ctx);
@@ -799,7 +789,9 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, · 422 unmodified lines
799/**789/**
800 * snd_usb_endpoint_start: start an snd_usb_endpoint790 * snd_usb_endpoint_start: start an snd_usb_endpoint
801 *791 *
802 * @ep: the endpoint to start792 * @ep: the endpoint to start
793 * @can_sleep: flag indicating whether the operation is executed in
794 * non-atomic context
803 *795 *
804 * A call to this function will increment the use count of the endpoint.796 * A call to this function will increment the use count of the endpoint.
805 * In case it is not already running, the URBs for this endpoint will be797 * In case it is not already running, the URBs for this endpoint will be
@@ -809,7 +801,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, · 3 unmodified lines
809 *801 *
810 * Returns an error if the URB submission failed, 0 in all other cases.802 * Returns an error if the URB submission failed, 0 in all other cases.
811 */803 */
812int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)804int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, int can_sleep)
813{805{
814 int err;806 int err;
815 unsigned int i;807 unsigned int i;
@@ -821,6 +813,11 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep) · 5 unmodified lines
821 if (++ep->use_count != 1)813 if (++ep->use_count != 1)
822 return 0;814 return 0;
823 815
816 /* just to be sure */
817 deactivate_urbs(ep, 0, can_sleep);
818 if (can_sleep)
819 wait_clear_urbs(ep);
820
824 ep->active_mask = 0;821 ep->active_mask = 0;
825 ep->unlink_mask = 0;822 ep->unlink_mask = 0;
826 ep->phase = 0;823 ep->phase = 0;
@@ -850,7 +847,6 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep) · 23 unmodified lines
850 goto __error;847 goto __error;
851 848
852 if (usb_pipeout(ep->pipe)) {849 if (usb_pipeout(ep->pipe)) {
853 prepare_outbound_urb_sizes(ep, urb->context);
854 prepare_outbound_urb(ep, urb->context);850 prepare_outbound_urb(ep, urb->context);
855 } else {851 } else {
856 prepare_inbound_urb(ep, urb->context);852 prepare_inbound_urb(ep, urb->context);
sound/usb/endpoint.h+2−1
@@ -13,7 +13,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, · 12 unmodified lines
13 struct audioformat *fmt,13 struct audioformat *fmt,
14 struct snd_usb_endpoint *sync_ep);14 struct snd_usb_endpoint *sync_ep);
15 15
16int snd_usb_endpoint_start(struct snd_usb_endpoint *ep);16int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, int can_sleep);
17void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep,17void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep,
18 int force, int can_sleep, int wait);18 int force, int can_sleep, int wait);
19int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep);19int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep);
@@ -21,6 +21,7 @@ int snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep); · 1 unmodified line
21void snd_usb_endpoint_free(struct list_head *head);21void snd_usb_endpoint_free(struct list_head *head);
22 22
23int snd_usb_endpoint_implict_feedback_sink(struct snd_usb_endpoint *ep);23int snd_usb_endpoint_implict_feedback_sink(struct snd_usb_endpoint *ep);
24int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep);
24 25
25void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,26void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
26 struct snd_usb_endpoint *sender,27 struct snd_usb_endpoint *sender,
sound/usb/pcm.c+52−12
@@ -212,7 +212,7 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface, · 211 unmodified lines
212 }212 }
213}213}
214 214
215static int start_endpoints(struct snd_usb_substream *subs)215static int start_endpoints(struct snd_usb_substream *subs, int can_sleep)
216{216{
217 int err;217 int err;
218 218
@@ -225,7 +225,7 @@ static int start_endpoints(struct snd_usb_substream *subs) · 6 unmodified lines
225 snd_printdd(KERN_DEBUG "Starting data EP @%p\n", ep);225 snd_printdd(KERN_DEBUG "Starting data EP @%p\n", ep);
226 226
227 ep->data_subs = subs;227 ep->data_subs = subs;
228 err = snd_usb_endpoint_start(ep);228 err = snd_usb_endpoint_start(ep, can_sleep);
229 if (err < 0) {229 if (err < 0) {
230 clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags);230 clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags);
231 return err;231 return err;
@@ -236,10 +236,25 @@ static int start_endpoints(struct snd_usb_substream *subs) · 4 unmodified lines
236 !test_and_set_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) {236 !test_and_set_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) {
237 struct snd_usb_endpoint *ep = subs->sync_endpoint;237 struct snd_usb_endpoint *ep = subs->sync_endpoint;
238 238
239 if (subs->data_endpoint->iface != subs->sync_endpoint->iface ||
240 subs->data_endpoint->alt_idx != subs->sync_endpoint->alt_idx) {
241 err = usb_set_interface(subs->dev,
242 subs->sync_endpoint->iface,
243 subs->sync_endpoint->alt_idx);
244 if (err < 0) {
245 snd_printk(KERN_ERR
246 "%d:%d:%d: cannot set interface (%d)\n",
247 subs->dev->devnum,
248 subs->sync_endpoint->iface,
249 subs->sync_endpoint->alt_idx, err);
250 return -EIO;
251 }
252 }
253
239 snd_printdd(KERN_DEBUG "Starting sync EP @%p\n", ep);254 snd_printdd(KERN_DEBUG "Starting sync EP @%p\n", ep);
240 255
241 ep->sync_slave = subs->data_endpoint;256 ep->sync_slave = subs->data_endpoint;
242 err = snd_usb_endpoint_start(ep);257 err = snd_usb_endpoint_start(ep, can_sleep);
243 if (err < 0) {258 if (err < 0) {
244 clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags);259 clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags);
245 return err;260 return err;
@@ -544,13 +559,10 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream) · 298 unmodified lines
544 subs->last_frame_number = 0;559 subs->last_frame_number = 0;
545 runtime->delay = 0;560 runtime->delay = 0;
546 561
547 /* clear the pending deactivation on the target EPs */
548 deactivate_endpoints(subs);
549
550 /* for playback, submit the URBs now; otherwise, the first hwptr_done562 /* for playback, submit the URBs now; otherwise, the first hwptr_done
551 * updates for all URBs would happen at the same time when starting */563 * updates for all URBs would happen at the same time when starting */
552 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK)564 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK)
553 return start_endpoints(subs);565 return start_endpoints(subs, 1);
554 566
555 return 0;567 return 0;
556}568}
@@ -1032,6 +1044,7 @@ static void prepare_playback_urb(struct snd_usb_substream *subs, · 475 unmodified lines
1032 struct urb *urb)1044 struct urb *urb)
1033{1045{
1034 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;1046 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1047 struct snd_usb_endpoint *ep = subs->data_endpoint;
1035 struct snd_urb_ctx *ctx = urb->context;1048 struct snd_urb_ctx *ctx = urb->context;
1036 unsigned int counts, frames, bytes;1049 unsigned int counts, frames, bytes;
1037 int i, stride, period_elapsed = 0;1050 int i, stride, period_elapsed = 0;
@@ -1043,7 +1056,11 @@ static void prepare_playback_urb(struct snd_usb_substream *subs, · 5 unmodified lines
1043 urb->number_of_packets = 0;1056 urb->number_of_packets = 0;
1044 spin_lock_irqsave(&subs->lock, flags);1057 spin_lock_irqsave(&subs->lock, flags);
1045 for (i = 0; i < ctx->packets; i++) {1058 for (i = 0; i < ctx->packets; i++) {
1046 counts = ctx->packet_size[i];1059 if (ctx->packet_size[i])
1060 counts = ctx->packet_size[i];
1061 else
1062 counts = snd_usb_endpoint_next_packet_size(ep);
1063
1047 /* set up descriptor */1064 /* set up descriptor */
1048 urb->iso_frame_desc[i].offset = frames * stride;1065 urb->iso_frame_desc[i].offset = frames * stride;
1049 urb->iso_frame_desc[i].length = counts * stride;1066 urb->iso_frame_desc[i].length = counts * stride;
@@ -1094,7 +1111,16 @@ static void prepare_playback_urb(struct snd_usb_substream *subs, · 44 unmodified lines
1094 subs->hwptr_done += bytes;1111 subs->hwptr_done += bytes;
1095 if (subs->hwptr_done >= runtime->buffer_size * stride)1112 if (subs->hwptr_done >= runtime->buffer_size * stride)
1096 subs->hwptr_done -= runtime->buffer_size * stride;1113 subs->hwptr_done -= runtime->buffer_size * stride;
1114
1115 /* update delay with exact number of samples queued */
1116 runtime->delay = subs->last_delay;
1097 runtime->delay += frames;1117 runtime->delay += frames;
1118 subs->last_delay = runtime->delay;
1119
1120 /* realign last_frame_number */
1121 subs->last_frame_number = usb_get_current_frame_number(subs->dev);
1122 subs->last_frame_number &= 0xFF; /* keep 8 LSBs */
1123
1098 spin_unlock_irqrestore(&subs->lock, flags);1124 spin_unlock_irqrestore(&subs->lock, flags);
1099 urb->transfer_buffer_length = bytes;1125 urb->transfer_buffer_length = bytes;
1100 if (period_elapsed)1126 if (period_elapsed)
@@ -1112,12 +1138,26 @@ static void retire_playback_urb(struct snd_usb_substream *subs, · 11 unmodified lines
1112 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;1138 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1113 int stride = runtime->frame_bits >> 3;1139 int stride = runtime->frame_bits >> 3;
1114 int processed = urb->transfer_buffer_length / stride;1140 int processed = urb->transfer_buffer_length / stride;
1141 int est_delay;
1115 1142
1116 spin_lock_irqsave(&subs->lock, flags);1143 spin_lock_irqsave(&subs->lock, flags);
1117 if (processed > runtime->delay)1144 est_delay = snd_usb_pcm_delay(subs, runtime->rate);
1118 runtime->delay = 0;1145 /* update delay with exact number of samples played */
1146 if (processed > subs->last_delay)
1147 subs->last_delay = 0;
1119 else1148 else
1120 runtime->delay -= processed;1149 subs->last_delay -= processed;
1150 runtime->delay = subs->last_delay;
1151
1152 /*
1153 * Report when delay estimate is off by more than 2ms.
1154 * The error should be lower than 2ms since the estimate relies
1155 * on two reads of a counter updated every ms.
1156 */
1157 if (abs(est_delay - subs->last_delay) * 1000 > runtime->rate * 2)
1158 snd_printk(KERN_DEBUG "delay: estimated %d, actual %d\n",
1159 est_delay, subs->last_delay);
1160
1121 spin_unlock_irqrestore(&subs->lock, flags);1161 spin_unlock_irqrestore(&subs->lock, flags);
1122}1162}
1123 1163
@@ -1175,7 +1215,7 @@ static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream · 51 unmodified lines
1175 1215
1176 switch (cmd) {1216 switch (cmd) {
1177 case SNDRV_PCM_TRIGGER_START:1217 case SNDRV_PCM_TRIGGER_START:
1178 err = start_endpoints(subs);1218 err = start_endpoints(subs, 0);
1179 if (err < 0)1219 if (err < 0)
1180 return err;1220 return err;
1181 1221
tools/perf/util/python-ext-sources+2−0
@@ -10,10 +10,12 @@ util/ctype.c · 9 unmodified lines
10util/evlist.c10util/evlist.c
11util/evsel.c11util/evsel.c
12util/cpumap.c12util/cpumap.c
13util/hweight.c
13util/thread_map.c14util/thread_map.c
14util/util.c15util/util.c
15util/xyarray.c16util/xyarray.c
16util/cgroup.c17util/cgroup.c
17util/debugfs.c18util/debugfs.c
19util/rblist.c
18util/strlist.c20util/strlist.c
19../../lib/rbtree.c21../../lib/rbtree.c
virt/kvm/kvm_main.c+4−3
@@ -1976,9 +1976,10 @@ static long kvm_vcpu_compat_ioctl(struct file *filp, · 1975 unmodified lines
1976 if (copy_from_user(&csigset, sigmask_arg->sigset,1976 if (copy_from_user(&csigset, sigmask_arg->sigset,
1977 sizeof csigset))1977 sizeof csigset))
1978 goto out;1978 goto out;
1979 }1979 sigset_from_compat(&sigset, &csigset);
1980 sigset_from_compat(&sigset, &csigset);1980 r = kvm_vcpu_ioctl_set_sigmask(vcpu, &sigset);
1981 r = kvm_vcpu_ioctl_set_sigmask(vcpu, &sigset);1981 } else
1982 r = kvm_vcpu_ioctl_set_sigmask(vcpu, NULL);
1982 break;1983 break;
1983 }1984 }
1984 default:1985 default: