History

Merge branch 'tip/perf/core' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into perf/core

Ingo Molnar committed 16 years ago

Commit 3aabae72 parents 79e406d 57c072c599 files · +6527 −4395Browse files

Unified · Split

599 files
  1. Documentation/DocBook/device-drivers.tmpl +0 −1
  2. Documentation/DocBook/kernel-api.tmpl +0 −1
  3. Documentation/DocBook/kernel-locking.tmpl +6 −0
  4. Documentation/DocBook/tracepoint.tmpl +5 −0
  5. Documentation/block/cfq-iosched.txt +45 −0
  6. Documentation/cgroups/blkio-controller.txt +28 −0
  7. Documentation/gpio.txt +14 −8
  8. Documentation/kernel-doc-nano-HOWTO.txt +5 −0
  9. Documentation/kernel-parameters.txt +10 −7
  10. Documentation/lguest/Makefile +2 −1
  11. Documentation/lguest/lguest.c +12 −11
  12. Documentation/mutex-design.txt +2 −1
  13. Documentation/sound/alsa/HD-Audio-Models.txt +1 −0
  14. MAINTAINERS +31 −16
  15. Makefile +1 −1
  16. arch/alpha/include/asm/cache.h +0 −1
  17. arch/alpha/kernel/err_marvel.c +3 −3
  18. arch/alpha/kernel/osf_sys.c +1 −1
  19. arch/alpha/kernel/perf_event.c +9 −9
  20. arch/alpha/kernel/proto.h +0 −3
  21. arch/alpha/kernel/sys_cabriolet.c +16 −3
  22. arch/alpha/kernel/sys_takara.c +9 −2
  23. arch/arm/Kconfig +0 −89
  24. arch/arm/boot/Makefile +5 −3
  25. arch/arm/boot/compressed/Makefile +4 −0
  26. arch/arm/boot/compressed/head.S +1 −1
  27. arch/arm/common/it8152.c +8 −0
  28. arch/arm/configs/omap_4430sdp_defconfig +3 −0
  29. arch/arm/include/asm/dma-mapping.h +0 −8
  30. arch/arm/include/asm/perf_event.h +1 −1
  31. arch/arm/include/asm/unistd.h +3 −0
  32. arch/arm/kernel/calls.S +3 −0
  33. arch/arm/kernel/etm.c +1 −1
  34. arch/arm/kernel/perf_event.c +6 −6
  35. arch/arm/mach-at91/at91sam9g45.c +12 −3
  36. arch/arm/mach-at91/at91sam9g45_devices.c +3 −3
  37. arch/arm/mach-at91/board-sam9261ek.c +19 −12
  38. arch/arm/mach-at91/clock.c +2 −1
  39. arch/arm/mach-ep93xx/clock.c +1 −1
  40. arch/arm/mach-mx25/eukrea_mbimxsd-baseboard.c +1 −1
  41. arch/arm/mach-mx25/mach-cpuimx25.c +2 −2
  42. arch/arm/mach-mx3/clock-imx35.c +55 −22
  43. arch/arm/mach-mx3/eukrea_mbimxsd-baseboard.c +1 −1
  44. arch/arm/mach-mx3/mach-cpuimx35.c +2 −2
  45. arch/arm/mach-mx5/clock-mx51.c +1 −1
  46. arch/arm/mach-omap2/Makefile +1 −0
  47. arch/arm/mach-omap2/clock3xxx_data.c +7 −7
  48. arch/arm/mach-omap2/id.c +1 −1
  49. arch/arm/mach-omap2/include/mach/entry-macro.S +4 −2
  50. arch/arm/mach-omap2/omap-smp.c +1 −2
  51. arch/arm/mach-omap2/pm34xx.c +3 −1
  52. arch/arm/mach-pxa/cpufreq-pxa2xx.c +1 −1
  53. arch/arm/mach-pxa/cpufreq-pxa3xx.c +1 −1
  54. arch/arm/mach-pxa/include/mach/mfp-pxa300.h +2 −2
  55. arch/arm/mach-s3c2410/include/mach/vmalloc.h +1 −1
  56. arch/arm/mach-s3c64xx/include/mach/vmalloc.h +1 −1
  57. arch/arm/mach-s5p6440/include/mach/vmalloc.h +1 −1
  58. arch/arm/mach-s5p6442/include/mach/vmalloc.h +1 −1
  59. arch/arm/mach-s5pv210/include/mach/vmalloc.h +1 −1
  60. arch/arm/mach-s5pv310/clock.c +63 −19
  61. arch/arm/mach-s5pv310/cpu.c +10 −0
  62. arch/arm/mach-s5pv310/include/mach/irqs.h +7 −4
  63. arch/arm/mach-s5pv310/include/mach/map.h +14 −2
  64. arch/arm/mach-s5pv310/include/mach/regs-clock.h +30 −29
  65. arch/arm/mach-s5pv310/include/mach/vmalloc.h +1 −1
  66. arch/arm/mach-s5pv310/platsmp.c +1 −1
  67. arch/arm/mach-shmobile/Makefile +1 −1
  68. arch/arm/mach-shmobile/board-ap4evb.c +41 −15
  69. arch/arm/mach-shmobile/clock-sh7372.c +6 −3
  70. arch/arm/mach-shmobile/clock.c +3 −1
  71. arch/arm/mach-shmobile/pm_runtime.c +169 −0
  72. arch/arm/mach-tegra/board-harmony.c +0 −2
  73. arch/arm/mach-tegra/include/mach/vmalloc.h +1 −1
  74. arch/arm/mm/Kconfig +1 −1
  75. arch/arm/mm/dma-mapping.c +2 −0
  76. arch/arm/plat-mxc/Kconfig +1 −0
  77. arch/arm/plat-mxc/include/mach/eukrea-baseboards.h +2 −2
  78. arch/arm/plat-mxc/tzic.c +3 −2
  79. arch/arm/plat-omap/include/plat/smp.h +0 −7
  80. arch/arm/plat-pxa/pwm.c +1 −1
  81. arch/arm/plat-s5p/include/plat/map-s5p.h +2 −0
  82. arch/arm/tools/mach-types +96 −2
  83. arch/blackfin/include/asm/bfin_sport.h +0 −6
  84. arch/blackfin/mach-bf518/include/mach/defBF51x_base.h +0 −82
  85. arch/blackfin/mach-bf527/boards/cm_bf527.c +0 −1
  86. arch/blackfin/mach-bf527/boards/ezbrd.c +0 −1
  87. arch/blackfin/mach-bf527/boards/ezkit.c +0 −1
  88. arch/blackfin/mach-bf527/include/mach/defBF52x_base.h +0 −82
  89. arch/blackfin/mach-bf533/include/mach/defBF532.h +0 −92
  90. arch/blackfin/mach-bf537/include/mach/defBF534.h +0 −80
  91. arch/blackfin/mach-bf538/include/mach/defBF539.h +0 −107
  92. arch/blackfin/mach-bf548/boards/cm_bf548.c +0 −1
  93. arch/blackfin/mach-bf548/boards/ezkit.c +0 −1
  94. arch/blackfin/mach-bf548/include/mach/defBF54x_base.h +0 −67
  95. arch/blackfin/mach-bf561/include/mach/defBF561.h +0 −60
  96. arch/h8300/include/asm/atomic.h +10 −5
  97. arch/h8300/include/asm/system.h +3 −1
  98. arch/h8300/kernel/sys_h8300.c +2 −2
  99. arch/h8300/kernel/traps.c +1 −1
  100. arch/ia64/hp/sim/simserial.c +1 −1
  101. arch/ia64/kernel/fsys.S +39 −7
  102. arch/m68k/include/asm/unistd.h +4 −1
  103. arch/m68k/kernel/entry.S +3 −0
  104. arch/m68knommu/kernel/syscalltable.S +3 −0
  105. arch/m68knommu/kernel/vmlinux.lds.S +2 −0
  106. arch/powerpc/include/asm/fsldma.h +1 −0
  107. arch/powerpc/kernel/head_64.S +9 −3
  108. arch/powerpc/kernel/misc_32.S +3 −0
  109. arch/powerpc/kernel/time.c +11 −12
  110. arch/powerpc/platforms/83xx/mpc837x_mds.c +6 −3
  111. arch/powerpc/platforms/85xx/mpc85xx_mds.c +1 −0
  112. arch/powerpc/platforms/85xx/p1022_ds.c +2 −2
  113. arch/powerpc/platforms/pseries/dlpar.c +29 −13
  114. arch/powerpc/sysdev/fsl_pci.c +2 −0
  115. arch/powerpc/sysdev/fsl_rio.c +5 −1
  116. arch/powerpc/sysdev/qe_lib/qe.c +1 −0
  117. arch/powerpc/xmon/xmon.c +2 −3
  118. arch/sparc/kernel/process_64.c +1 −1
  119. arch/sparc/kernel/sys_sparc_32.c +0 −2
  120. arch/sparc/kernel/unaligned_32.c +1 −2
  121. arch/sparc/kernel/windows.c +0 −2
  122. arch/um/drivers/mconsole_kern.c +1 −1
  123. arch/x86/include/asm/iomap.h +2 −2
  124. arch/x86/include/asm/kvm_emulate.h +6 −1
  125. arch/x86/include/asm/pci.h +4 −2
  126. arch/x86/include/asm/tsc.h +2 −0
  127. arch/x86/kernel/cpu/mcheck/mce_amd.c +2 −2
  128. arch/x86/kernel/cpu/mcheck/therm_throt.c +5 −4
  129. arch/x86/kernel/trampoline.c +1 −2
  130. arch/x86/kernel/tsc.c +38 −0
  131. arch/x86/kvm/emulate.c +4 −5
  132. arch/x86/kvm/i8259.c +3 −0
  133. arch/x86/kvm/irq.h +1 −1
  134. arch/x86/mm/iomap_32.c +3 −3
  135. arch/x86/power/cpu.c +2 −0
  136. block/blk-cgroup.c +1 −1
  137. block/blk-core.c +3 −3
  138. block/blk-sysfs.c +1 −0
  139. block/blk.h +6 −2
  140. block/cfq-iosched.c +88 −15
  141. block/elevator.c +31 −13
  142. crypto/Kconfig +4 −4
  143. crypto/ahash.c +5 −2
  144. crypto/algboss.c +4 −4
  145. crypto/testmgr.c +2 −2
  146. drivers/acpi/pci_root.c +56 −41
  147. drivers/ata/Kconfig +1 −0
  148. drivers/ata/Makefile +0 −1
  149. drivers/ata/ahci.c +14 −0
  150. drivers/ata/ahci.h +1 −0
  151. drivers/ata/ata_piix.c +4 −0
  152. drivers/ata/libahci.c +15 −3
  153. drivers/ata/libata-core.c +20 −5
  154. drivers/ata/libata-eh.c +4 −0
  155. drivers/ata/libata-sff.c +31 −14
  156. drivers/ata/pata_artop.c +2 −1
  157. drivers/ata/pata_cmd64x.c +0 −6
  158. drivers/ata/pata_legacy.c +13 −2
  159. drivers/ata/pata_via.c +2 −0
  160. drivers/ata/pata_winbond.c +0 −282
  161. drivers/ata/sata_dwc_460ex.c +1 −1
  162. drivers/ata/sata_mv.c +38 −8
  163. drivers/base/power/main.c +1 −0
  164. drivers/block/cciss.c +11 −0
  165. drivers/block/loop.c +1 −1
  166. drivers/block/mg_disk.c +1 −2
  167. drivers/char/agp/intel-agp.c +13 −3
  168. drivers/char/agp/intel-agp.h +16 −6
  169. drivers/char/agp/intel-gtt.c +48 −18
  170. drivers/char/hangcheck-timer.c +1 −1
  171. drivers/char/hvc_console.c +1 −1
  172. drivers/char/hvsi.c +1 −1
  173. drivers/char/hw_random/n2-drv.c +1 −1
  174. drivers/char/sysrq.c +26 −27
  175. drivers/char/tty_io.c +1 −1
  176. drivers/char/vt.c +4 −11
  177. drivers/char/vt_ioctl.c +8 −8
  178. drivers/edac/amd64_edac.c +0 −10
  179. drivers/edac/edac_mce_amd.c +10 −7
  180. drivers/firewire/core-transaction.c +10 −3
  181. drivers/firewire/net.c +15 −13
  182. drivers/firewire/ohci.c +9 −1
  183. drivers/firewire/sbp2.c +15 −8
  184. drivers/gpio/sx150x.c +21 −5
  185. drivers/gpu/drm/drm_crtc_helper.c +18 −6
  186. drivers/gpu/drm/drm_fb_helper.c +1 −1
  187. drivers/gpu/drm/drm_fops.c +1 −0
  188. drivers/gpu/drm/drm_lock.c +2 −0
  189. drivers/gpu/drm/drm_mm.c +14 −10
  190. drivers/gpu/drm/drm_modes.c +4 −1
  191. drivers/gpu/drm/i915/i915_debugfs.c +50 −0
  192. drivers/gpu/drm/i915/i915_dma.c +23 −13
  193. drivers/gpu/drm/i915/i915_drv.c +32 −33
  194. drivers/gpu/drm/i915/i915_drv.h +6 −21
  195. drivers/gpu/drm/i915/i915_gem.c +8 −3
  196. drivers/gpu/drm/i915/i915_irq.c +64 −9
  197. drivers/gpu/drm/i915/i915_reg.h +9 −0
  198. drivers/gpu/drm/i915/intel_display.c +117 −150
  199. drivers/gpu/drm/i915/intel_dp.c +28 −30
  200. drivers/gpu/drm/i915/intel_drv.h +10 −0
  201. drivers/gpu/drm/i915/intel_lvds.c +0 −2
  202. drivers/gpu/drm/i915/intel_overlay.c +2 −0
  203. drivers/gpu/drm/i915/intel_ringbuffer.c +6 −2
  204. drivers/gpu/drm/i915/intel_sdvo.c +52 −17
  205. drivers/gpu/drm/i915/intel_tv.c +6 −3
  206. drivers/gpu/drm/nouveau/nouveau_bios.c +15 −49
  207. drivers/gpu/drm/nouveau/nouveau_bios.h +1 −0
  208. drivers/gpu/drm/nouveau/nouveau_drv.h +9 −0
  209. drivers/gpu/drm/nouveau/nouveau_fence.c +4 −2
  210. drivers/gpu/drm/nouveau/nouveau_gem.c +6 −7
  211. drivers/gpu/drm/nouveau/nv04_dfp.c +28 −3
  212. drivers/gpu/drm/nouveau/nv17_tv.c +3 −7
  213. drivers/gpu/drm/nouveau/nv50_instmem.c +2 −0
  214. drivers/gpu/drm/radeon/atombios_crtc.c +41 −7
  215. drivers/gpu/drm/radeon/evergreen.c +38 −10
  216. drivers/gpu/drm/radeon/r600.c +2 −14
  217. drivers/gpu/drm/radeon/radeon.h +6 −2
  218. drivers/gpu/drm/radeon/radeon_asic.c +0 −18
  219. drivers/gpu/drm/radeon/radeon_atombios.c +27 −0
  220. drivers/gpu/drm/radeon/radeon_clocks.c +8 −50
  221. drivers/gpu/drm/radeon/radeon_connectors.c +44 −35
  222. drivers/gpu/drm/radeon/radeon_device.c +9 −19
  223. drivers/gpu/drm/radeon/radeon_i2c.c +1 −1
  224. drivers/gpu/drm/radeon/radeon_mode.h +0 −1
  225. drivers/gpu/drm/radeon/radeon_pm.c +0 −2
  226. drivers/gpu/drm/radeon/rv770.c +52 −9
  227. drivers/hwmon/ads7871.c +19 −19
  228. drivers/hwmon/coretemp.c +0 −1
  229. drivers/hwmon/hp_accel.c +2 −0
  230. drivers/hwmon/k8temp.c +32 −3
  231. drivers/ieee1394/ohci1394.c +1 −1
  232. drivers/infiniband/hw/cxgb3/cxio_hal.h +1 −1
  233. drivers/infiniband/hw/nes/nes_cm.c +10 −8
  234. drivers/infiniband/hw/nes/nes_hw.c +13 −1
  235. drivers/infiniband/hw/nes/nes_hw.h +1 −0
  236. drivers/infiniband/hw/nes/nes_nic.c +2 −2
  237. drivers/input/input.c +9 −2
  238. drivers/input/keyboard/hil_kbd.c +6 −6
  239. drivers/input/keyboard/pxa27x_keypad.c +0 −2
  240. drivers/input/misc/uinput.c +2 −0
  241. drivers/input/mouse/bcm5974.c +8 −4
  242. drivers/input/mousedev.c +4 −4
  243. drivers/input/serio/i8042.c +1 −1
  244. drivers/input/tablet/wacom_wac.c +2 −2
  245. drivers/md/.gitignore +0 −4
  246. drivers/md/bitmap.c +1 −2
  247. drivers/md/md.c +10 −15
  248. drivers/md/md.h +1 −1
  249. drivers/mmc/core/sdio.c +2 −3
  250. drivers/mmc/host/at91_mci.c +1 −0
  251. drivers/mmc/host/imxmmc.c +2 −1
  252. drivers/mmc/host/omap_hsmmc.c +1 −2
  253. drivers/mmc/host/s3cmci.c +1 −1
  254. drivers/mmc/host/tmio_mmc.c +4 −3
  255. drivers/mmc/host/tmio_mmc.h +4 −9
  256. drivers/mtd/ubi/Kconfig.debug +1 −1
  257. drivers/mtd/ubi/cdev.c +6 −6
  258. drivers/mtd/ubi/scan.c +1 −1
  259. drivers/mtd/ubi/wl.c +2 −1
  260. drivers/net/3c59x.c +22 −8
  261. drivers/net/b44.c +9 −0
  262. drivers/net/benet/be.h +1 −0
  263. drivers/net/benet/be_cmds.c +3 −5
  264. drivers/net/benet/be_cmds.h +1 −1
  265. drivers/net/benet/be_ethtool.c +1 −0
  266. drivers/net/benet/be_hw.h +5 −2
  267. drivers/net/benet/be_main.c +19 −28
  268. drivers/net/bonding/bond_main.c +39 −17
  269. drivers/net/caif/Kconfig +1 −1
  270. drivers/net/ibm_newemac/debug.c +1 −1
  271. drivers/net/ks8851.c +21 −18
  272. drivers/net/ll_temac_main.c +1 −0
  273. drivers/net/ll_temac_mdio.c +1 −0
  274. drivers/net/netxen/netxen_nic_main.c +8 −1
  275. drivers/net/niu.c +6 −10
  276. drivers/net/pcmcia/pcnet_cs.c +1 −0
  277. drivers/net/phy/phy_device.c +2 −0
  278. drivers/net/pxa168_eth.c +30 −30
  279. drivers/net/qlcnic/qlcnic_main.c +8 −1
  280. drivers/net/qlge/qlge_main.c +2 −2
  281. drivers/net/stmmac/stmmac_main.c +4 −5
  282. drivers/net/usb/ipheth.c +1 −6
  283. drivers/net/via-velocity.c +1 −1
  284. drivers/net/wireless/ath/ath5k/base.c +4 −0
  285. drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +1 −1
  286. drivers/net/wireless/ath/ath9k/eeprom.h +1 −1
  287. drivers/net/wireless/ath/regd.h +0 −1
  288. drivers/net/wireless/libertas/if_sdio.c +1 −1
  289. drivers/net/wireless/p54/txrx.c +1 −1
  290. drivers/pci/hotplug/acpi_pcihp.c +2 −4
  291. drivers/pci/hotplug/pciehp.h +4 −12
  292. drivers/pci/hotplug/pciehp_acpi.c +1 −3
  293. drivers/pci/hotplug/pciehp_core.c +2 −2
  294. drivers/pci/pci.h +2 −0
  295. drivers/pci/pcie/Makefile +2 −1
  296. drivers/pci/pcie/aer/aerdrv.c +6 −3
  297. drivers/pci/pcie/aer/aerdrv_acpi.c +0 −36
  298. drivers/pci/pcie/aer/aerdrv_core.c +1 −13
  299. drivers/pci/pcie/pme.c +6 −60
  300. drivers/pci/pcie/pme/Makefile +0 −8
  301. drivers/pci/pcie/pme/pcie_pme.h +0 −28
  302. drivers/pci/pcie/pme/pcie_pme_acpi.c +0 −54
  303. drivers/pci/pcie/portdrv.h +22 −0
  304. drivers/pci/pcie/portdrv_acpi.c +77 −0
  305. drivers/pci/pcie/portdrv_core.c +49 −4
  306. drivers/pci/pcie/portdrv_pci.c +31 −7
  307. drivers/pci/slot.c +1 −1
  308. drivers/rtc/rtc-bfin.c +12 −3
  309. drivers/rtc/rtc-m41t80.c +1 −1
  310. drivers/rtc/rtc-pl031.c +1 −1
  311. drivers/s390/char/ctrlchar.c +1 −3
  312. drivers/s390/char/keyboard.c +1 −1
  313. drivers/s390/char/tape_block.c +1 −2
  314. drivers/scsi/be2iscsi/be_iscsi.c +2 −3
  315. drivers/scsi/be2iscsi/be_mgmt.c +1 −1
  316. drivers/scsi/constants.c +3 −3
  317. drivers/scsi/hpsa.c +6 −0
  318. drivers/scsi/osd/osd_initiator.c +1 −1
  319. drivers/scsi/qla2xxx/qla_attr.c +15 −8
  320. drivers/scsi/qla2xxx/qla_dbg.h +0 −2
  321. drivers/scsi/qla2xxx/qla_def.h +20 −0
  322. drivers/scsi/qla2xxx/qla_init.c +81 −13
  323. drivers/scsi/qla2xxx/qla_isr.c +4 −3
  324. drivers/scsi/qla2xxx/qla_mbx.c +5 −2
  325. drivers/scsi/qla2xxx/qla_mid.c +60 −8
  326. drivers/scsi/qla2xxx/qla_nx.c +27 −9
  327. drivers/scsi/qla2xxx/qla_os.c +26 −4
  328. drivers/scsi/qla2xxx/qla_version.h +2 −2
  329. drivers/scsi/scsi_lib.c +1 −1
  330. drivers/scsi/sd.c +4 −4
  331. drivers/scsi/sym53c8xx_2/sym_hipd.c +4 −6
  332. drivers/serial/bfin_sport_uart.c +1 −1
  333. drivers/serial/mpc52xx_uart.c +1 −0
  334. drivers/serial/sn_console.c +1 −1
  335. drivers/spi/amba-pl022.c +9 −7
  336. drivers/spi/dw_spi.c +11 −13
  337. drivers/spi/spi.c +3 −6
  338. drivers/spi/spi_s3c64xx.c +25 −12
  339. drivers/staging/comedi/drivers/das08_cs.c +0 −1
  340. drivers/staging/hv/netvsc_drv.c +3 −0
  341. drivers/staging/hv/ring_buffer.c +1 −2
  342. drivers/staging/hv/storvsc_api.h +2 −2
  343. drivers/staging/hv/storvsc_drv.c +7 −4
  344. drivers/staging/octeon/Kconfig +1 −1
  345. drivers/staging/rt2860/usb_main_dev.c +39 −2
  346. drivers/staging/spectra/Kconfig +1 −0
  347. drivers/staging/spectra/ffsport.c +1 −0
  348. drivers/staging/wlan-ng/cfg80211.c +3 −0
  349. drivers/staging/zram/zram_drv.c +1 −0
  350. drivers/usb/atm/cxacru.c +22 −2
  351. drivers/usb/class/cdc-acm.c +22 −1
  352. drivers/usb/core/message.c +11 −11
  353. drivers/usb/gadget/rndis.c +8 −4
  354. drivers/usb/gadget/rndis.h +1 −1
  355. drivers/usb/gadget/s3c-hsotg.c +0 −2
  356. drivers/usb/host/ehci-ppc-of.c +7 −5
  357. drivers/usb/serial/cp210x.c +7 −4
  358. drivers/usb/serial/ftdi_sio.c +9 −1
  359. drivers/usb/serial/ftdi_sio_ids.h +12 −0
  360. drivers/usb/serial/generic.c +4 −6
  361. drivers/usb/serial/mos7840.c +22 −10
  362. drivers/usb/serial/option.c +75 −44
  363. drivers/usb/serial/pl2303.c +1 −1
  364. drivers/usb/serial/ssu100.c +2 −2
  365. drivers/vhost/vhost.c +62 −23
  366. drivers/video/pxa168fb.c +3 −3
  367. drivers/xen/events.c +16 −5
  368. drivers/xen/manage.c +1 −1
  369. fs/9p/fid.c +2 −1
  370. fs/9p/vfs_dir.c +4 −2
  371. fs/9p/vfs_inode.c +7 −2
  372. fs/9p/vfs_super.c +14 −6
  373. fs/binfmt_misc.c +1 −1
  374. fs/bio-integrity.c +2 −2
  375. fs/ceph/addr.c +3 −9
  376. fs/ceph/auth_x.c +9 −6
  377. fs/ceph/caps.c +23 −9
  378. fs/ceph/debugfs.c +4 −0
  379. fs/ceph/dir.c +1 −1
  380. fs/ceph/inode.c +3 −2
  381. fs/ceph/locks.c +9 −5
  382. fs/ceph/mds_client.c +63 −38
  383. fs/ceph/mds_client.h +2 −1
  384. fs/ceph/osd_client.c +1 −1
  385. fs/ceph/snap.c +58 −31
  386. fs/ceph/super.h +7 −4
  387. fs/ceph/xattr.c +1 −0
  388. fs/cifs/cifs_unicode.h +11 −7
  389. fs/cifs/cifs_uniupr.h +8 −8
  390. fs/cifs/cifsencrypt.c +0 −57
  391. fs/cifs/cifsproto.h +2 −3
  392. fs/cifs/connect.c +23 −39
  393. fs/cifs/dir.c +77 −80
  394. fs/cifs/file.c +1 −2
  395. fs/cifs/inode.c +10 −22
  396. fs/cifs/netmisc.c +13 −9
  397. fs/direct-io.c +2 −2
  398. fs/ecryptfs/crypto.c +1 −2
  399. fs/ecryptfs/inode.c +24 −7
  400. fs/ecryptfs/keystore.c +2 −0
  401. fs/ecryptfs/kthread.c +1 −1
  402. fs/ecryptfs/messaging.c +1 −1
  403. fs/ecryptfs/miscdev.c +1 −1
  404. fs/exec.c +14 −0
  405. fs/fcntl.c +7 −3
  406. fs/fs-writeback.c +1 −1
  407. fs/fuse/dev.c +26 −16
  408. fs/fuse/file.c +4 −4
  409. fs/minix/namei.c +1 −1
  410. fs/namespace.c +22 −1
  411. fs/nfsd/nfs4state.c +16 −12
  412. fs/nfsd/state.h +7 −7
  413. fs/nfsd/vfs.c +8 −6
  414. fs/nilfs2/the_nilfs.c +1 −0
  415. fs/notify/fanotify/fanotify.c +0 −3
  416. fs/notify/fanotify/fanotify_user.c +28 −1
  417. fs/notify/fsnotify.c +36 −32
  418. fs/ocfs2/alloc.c +1 −1
  419. fs/ocfs2/blockcheck.c +2 −2
  420. fs/ocfs2/file.c +12 −3
  421. fs/ocfs2/inode.c +5 −1
  422. fs/ocfs2/mmap.c +5 −3
  423. fs/ocfs2/namei.c +232 −70
  424. fs/ocfs2/refcounttree.c +3 −2
  425. fs/ocfs2/suballoc.c +194 −25
  426. fs/ocfs2/suballoc.h +21 −0
  427. fs/proc/page.c +1 −1
  428. fs/proc/task_mmu.c +2 −1
  429. fs/sysfs/file.c +1 −1
  430. fs/xfs/linux-2.6/xfs_aops.c +8 −5
  431. fs/xfs/linux-2.6/xfs_buf.c +3 −8
  432. fs/xfs/linux-2.6/xfs_buf.h +0 −1
  433. fs/xfs/linux-2.6/xfs_ioctl.c +9 −0
  434. fs/xfs/linux-2.6/xfs_iops.c +1 −1
  435. fs/xfs/linux-2.6/xfs_super.c +7 −2
  436. fs/xfs/linux-2.6/xfs_sync.c +6 −36
  437. fs/xfs/xfs_bmap.c +13 −1
  438. fs/xfs/xfs_fs.h +3 −1
  439. fs/xfs/xfs_fsops.c +18 −13
  440. fs/xfs/xfs_fsops.h +1 −1
  441. fs/xfs/xfs_ialloc.c +10 −6
  442. fs/xfs/xfs_inode.c +26 −23
  443. fs/xfs/xfs_log.c +4 −3
  444. fs/xfs/xfs_log_cil.c +157 −106
  445. fs/xfs/xfs_log_priv.h +11 −2
  446. fs/xfs/xfs_trans.c +1 −4
  447. fs/xfs/xfs_trans_priv.h +2 −1
  448. fs/xfs/xfs_vnodeops.c +10 −3
  449. include/acpi/acpi_bus.h +0 −3
  450. include/asm-generic/gpio.h +13 −1
  451. include/asm-generic/percpu.h +10 −5
  452. include/linux/acpi.h +2 −2
  453. include/linux/cgroup.h +11 −1
  454. include/linux/elevator.h +1 −0
  455. include/linux/fanotify.h +3 −10
  456. include/linux/fsnotify_backend.h +1 −0
  457. include/linux/gpio.h +1 −0
  458. include/linux/i2c/sx150x.h +4 −0
  459. include/linux/intel-gtt.h +20 −0
  460. include/linux/io-mapping.h +12 −12
  461. include/linux/kfifo.h +29 −29
  462. include/linux/ksm.h +9 −11
  463. include/linux/lglock.h +2 −2
  464. include/linux/libata.h +3 −1
  465. include/linux/miscdevice.h +1 −0
  466. include/linux/mm.h +14 −0
  467. include/linux/mmc/sdio.h +2 −0
  468. include/linux/mmzone.h +13 −0
  469. include/linux/mutex.h +8 −0
  470. include/linux/pci.h +3 −0
  471. include/linux/pci_ids.h +2 −0
  472. include/linux/percpu.h +1 −1
  473. include/linux/quotaops.h +8 −2
  474. include/linux/semaphore.h +3 −0
  475. include/linux/serial.h +1 −2
  476. include/linux/serial_core.h +3 −2
  477. include/linux/spi/dw_spi.h +2 −0
  478. include/linux/swap.h +3 −8
  479. include/linux/sysrq.h +9 −7
  480. include/linux/uinput.h +0 −1
  481. include/linux/usb/serial.h +1 −2
  482. include/linux/vgaarb.h +13 −2
  483. include/linux/vmstat.h +22 −0
  484. include/linux/workqueue.h +11 −7
  485. include/net/cls_cgroup.h +8 −2
  486. include/net/ip_vs.h +3 −0
  487. include/net/sock.h +1 −0
  488. include/net/tcp.h +14 −4
  489. include/net/udp.h +1 −0
  490. kernel/cgroup.c +7 −6
  491. kernel/debug/debug_core.c +1 −1
  492. kernel/debug/kdb/kdb_bp.c +0 −2
  493. kernel/debug/kdb/kdb_main.c +1 −1
  494. kernel/gcov/fs.c +180 −64
  495. kernel/groups.c +2 −3
  496. kernel/hrtimer.c +1 −2
  497. kernel/mutex.c +7 −16
  498. kernel/pm_qos_params.c +10 −6
  499. kernel/power/hibernate.c +0 −1
  500. kernel/power/poweroff.c +1 −1
  501. kernel/power/snapshot.c +65 −21
  502. kernel/power/swap.c +3 −3
  503. kernel/sched.c +6 −0
  504. kernel/sched_fair.c +6 −7
  505. kernel/sys.c +2 −0
  506. kernel/sysctl.c +1 −4
  507. kernel/trace/ftrace.c +78 −29
  508. kernel/trace/ring_buffer.c +0 −2
  509. kernel/workqueue.c +38 −15
  510. lib/raid6/.gitignore +4 −0
  511. lib/scatterlist.c +12 −2
  512. mm/Kconfig +1 −1
  513. mm/backing-dev.c +5 −2
  514. mm/bounce.c +1 −1
  515. mm/compaction.c +4 −3
  516. mm/ksm.c +0 −3
  517. mm/memory.c +34 −5
  518. mm/memory_hotplug.c +8 −8
  519. mm/mlock.c +0 −6
  520. mm/mmzone.c +21 −0
  521. mm/page-writeback.c +11 −16
  522. mm/page_alloc.c +23 −10
  523. mm/percpu.c +4 −2
  524. mm/percpu_up.c +2 −2
  525. mm/rmap.c +16 −3
  526. mm/swapfile.c +46 −83
  527. mm/vmstat.c +15 −1
  528. net/9p/client.c +6 −1
  529. net/ax25/ax25_ds_timer.c +1 −1
  530. net/bridge/br_netfilter.c +5 −3
  531. net/caif/cfrfml.c +1 −1
  532. net/core/dev.c +8 −8
  533. net/core/gen_estimator.c +6 −6
  534. net/core/skbuff.c +5 −1
  535. net/ipv4/Kconfig +1 −1
  536. net/ipv4/datagram.c +4 −1
  537. net/ipv4/fib_frontend.c +13 −2
  538. net/ipv4/fib_trie.c +6 −2
  539. net/ipv4/route.c +6 −1
  540. net/ipv4/tcp.c +10 −22
  541. net/ipv4/tcp_cong.c +3 −2
  542. net/ipv4/tcp_timer.c +4 −4
  543. net/ipv4/udp.c +44 −0
  544. net/ipv6/datagram.c +6 −1
  545. net/ipv6/netfilter/nf_conntrack_reasm.c +15 −65
  546. net/ipv6/reassembly.c +15 −56
  547. net/ipv6/udp.c +10 −0
  548. net/irda/af_irda.c +2 −2
  549. net/irda/irlan/irlan_common.c +1 −1
  550. net/l2tp/l2tp_eth.c +1 −1
  551. net/mac80211/main.c +6 −0
  552. net/netfilter/ipvs/ip_vs_core.c +1 −0
  553. net/netfilter/ipvs/ip_vs_ftp.c +2 −7
  554. net/netfilter/ipvs/ip_vs_xmit.c +12 −6
  555. net/netlink/af_netlink.c +22 −0
  556. net/sched/act_police.c +9 −12
  557. net/sched/sch_hfsc.c +1 −1
  558. net/sctp/sm_statefuns.c +23 −23
  559. net/unix/af_unix.c +12 −3
  560. net/wireless/core.c +12 −9
  561. net/wireless/wext-compat.c +3 −0
  562. net/wireless/wext-core.c +16 −0
  563. net/xfrm/xfrm_user.c +1 −1
  564. scripts/basic/docproc.c +128 −1
  565. scripts/kernel-doc +51 −3
  566. security/apparmor/include/resource.h +2 −2
  567. security/apparmor/lib.c +1 −1
  568. security/apparmor/lsm.c +1 −1
  569. security/apparmor/path.c +11 −27
  570. security/apparmor/policy.c +4 −2
  571. security/apparmor/resource.c +12 −8
  572. security/integrity/ima/ima.h +1 −0
  573. security/integrity/ima/ima_iint.c +3 −1
  574. security/integrity/ima/ima_main.c +5 −3
  575. security/keys/keyctl.c +5 −1
  576. sound/core/pcm.c +6 −0
  577. sound/core/rawmidi.c +2 −0
  578. sound/core/seq/oss/seq_oss_init.c +4 −5
  579. sound/isa/msnd/msnd_pinnacle.c +6 −2
  580. sound/oss/sound_timer.c +1 −1
  581. sound/pci/asihpi/hpi6205.c +5 −2
  582. sound/pci/hda/hda_codec.c +1 −1
  583. sound/pci/hda/patch_cirrus.c +50 −0
  584. sound/pci/hda/patch_conexant.c +58 −0
  585. sound/pci/hda/patch_realtek.c +2 −0
  586. sound/pci/oxygen/oxygen.h +1 −0
  587. sound/pci/oxygen/oxygen_lib.c +18 −3
  588. sound/pci/oxygen/virtuoso.c +1 −0
  589. sound/pci/oxygen/xonar_wm87x6.c +21 −1
  590. sound/soc/soc-core.c +1 −1
  591. sound/usb/card.c +13 −6
  592. sound/usb/clock.c +1 −2
  593. sound/usb/endpoint.c +6 −5
  594. sound/usb/format.c +10 −12
  595. sound/usb/mixer.c +9 −1
  596. sound/usb/pcm.c +1 −2
  597. tools/perf/util/symbol.c +7 −0
  598. tools/perf/util/symbol.h +2 −1
  599. virt/kvm/kvm_main.c +2 −3
Documentation/DocBook/device-drivers.tmpl+0−1
@@ -46,7 +46,6 @@ · 45 unmodified lines
4646
4747 <sect1><title>Atomic and pointer manipulation</title>
4848 !Iarch/x86/include/asm/atomic.h
49−!Iarch/x86/include/asm/unaligned.h
5049 </sect1>
5150
5251 <sect1><title>Delaying, scheduling, and timer routines</title>
Documentation/DocBook/kernel-api.tmpl+0−1
@@ -57,7 +57,6 @@ · 56 unmodified lines
5757 </para>
5858
5959 <sect1><title>String Conversions</title>
60−!Ilib/vsprintf.c
6160 !Elib/vsprintf.c
6261 </sect1>
6362 <sect1><title>String Manipulation</title>
Documentation/DocBook/kernel-locking.tmpl+6−0
@@ -1961,6 +1961,12 @@ machines due to caching. · 1960 unmodified lines
19611961 </sect1>
19621962 </chapter>
19631963
1964+ <chapter id="apiref">
1965+ <title>Mutex API reference</title>
1966+!Iinclude/linux/mutex.h
1967+!Ekernel/mutex.c
1968+ </chapter>
1969+
19641970 <chapter id="references">
19651971 <title>Further reading</title>
19661972
Documentation/DocBook/tracepoint.tmpl+5−0
@@ -104,4 +104,9 @@ · 103 unmodified lines
104104 <title>Block IO</title>
105105 !Iinclude/trace/events/block.h
106106 </chapter>
107+
108+ <chapter id="workqueue">
109+ <title>Workqueue</title>
110+!Iinclude/trace/events/workqueue.h
111+ </chapter>
107112 </book>
Documentation/block/cfq-iosched.txt+45−0
@@ -0,0 +1,45 @@
1+CFQ ioscheduler tunables
2+========================
3+
4+slice_idle
5+----------
6+This specifies how long CFQ should idle for next request on certain cfq queues
7+(for sequential workloads) and service trees (for random workloads) before
8+queue is expired and CFQ selects next queue to dispatch from.
9+
10+By default slice_idle is a non-zero value. That means by default we idle on
11+queues/service trees. This can be very helpful on highly seeky media like
12+single spindle SATA/SAS disks where we can cut down on overall number of
13+seeks and see improved throughput.
14+
15+Setting slice_idle to 0 will remove all the idling on queues/service tree
16+level and one should see an overall improved throughput on faster storage
17+devices like multiple SATA/SAS disks in hardware RAID configuration. The down
18+side is that isolation provided from WRITES also goes down and notion of
19+IO priority becomes weaker.
20+
21+So depending on storage and workload, it might be useful to set slice_idle=0.
22+In general I think for SATA/SAS disks and software RAID of SATA/SAS disks
23+keeping slice_idle enabled should be useful. For any configurations where
24+there are multiple spindles behind single LUN (Host based hardware RAID
25+controller or for storage arrays), setting slice_idle=0 might end up in better
26+throughput and acceptable latencies.
27+
28+CFQ IOPS Mode for group scheduling
29+===================================
30+Basic CFQ design is to provide priority based time slices. Higher priority
31+process gets bigger time slice and lower priority process gets smaller time
32+slice. Measuring time becomes harder if storage is fast and supports NCQ and
33+it would be better to dispatch multiple requests from multiple cfq queues in
34+request queue at a time. In such scenario, it is not possible to measure time
35+consumed by single queue accurately.
36+
37+What is possible though is to measure number of requests dispatched from a
38+single queue and also allow dispatch from multiple cfq queue at the same time.
39+This effectively becomes the fairness in terms of IOPS (IO operations per
40+second).
41+
42+If one sets slice_idle=0 and if storage supports NCQ, CFQ internally switches
43+to IOPS mode and starts providing fairness in terms of number of requests
44+dispatched. Note that this mode switching takes effect only for group
45+scheduling. For non-cgroup users nothing should change.
Documentation/cgroups/blkio-controller.txt+28−0
@@ -217,6 +217,7 @@ Details of cgroup files · 216 unmodified lines
217217 CFQ sysfs tunable
218218 =================
219219 /sys/block/<disk>/queue/iosched/group_isolation
220+-----------------------------------------------
220221
221222 If group_isolation=1, it provides stronger isolation between groups at the
222223 expense of throughput. By default group_isolation is 0. In general that
@@ -243,6 +244,33 @@ By default one should run with group_isolation=0. If that is not sufficient · 20 unmodified lines
243244 and one wants stronger isolation between groups, then set group_isolation=1
244245 but this will come at cost of reduced throughput.
245246
247+/sys/block/<disk>/queue/iosched/slice_idle
248+------------------------------------------
249+On a faster hardware CFQ can be slow, especially with sequential workload.
250+This happens because CFQ idles on a single queue and single queue might not
251+drive deeper request queue depths to keep the storage busy. In such scenarios
252+one can try setting slice_idle=0 and that would switch CFQ to IOPS
253+(IO operations per second) mode on NCQ supporting hardware.
254+
255+That means CFQ will not idle between cfq queues of a cfq group and hence be
256+able to driver higher queue depth and achieve better throughput. That also
257+means that cfq provides fairness among groups in terms of IOPS and not in
258+terms of disk time.
259+
260+/sys/block/<disk>/queue/iosched/group_idle
261+------------------------------------------
262+If one disables idling on individual cfq queues and cfq service trees by
263+setting slice_idle=0, group_idle kicks in. That means CFQ will still idle
264+on the group in an attempt to provide fairness among groups.
265+
266+By default group_idle is same as slice_idle and does not do anything if
267+slice_idle is enabled.
268+
269+One can experience an overall throughput drop if you have created multiple
270+groups and put applications in that group which are not driving enough
271+IO to keep disk busy. In that case set group_idle=0, and CFQ will not idle
272+on individual groups and throughput should improve.
273+
246274 What works
247275 ==========
248276 - Currently only sync IO queues are support. All the buffered writes are
Documentation/gpio.txt+14−8
@@ -109,17 +109,19 @@ use numbers 2000-2063 to identify GPIOs in a bank of I2C GPIO expanders. · 108 unmodified lines
109109
110110 If you want to initialize a structure with an invalid GPIO number, use
111111 some negative number (perhaps "-EINVAL"); that will never be valid. To
112−test if a number could reference a GPIO, you may use this predicate:
112+test if such number from such a structure could reference a GPIO, you
113+may use this predicate:
113114
114115 int gpio_is_valid(int number);
115116
116117 A number that's not valid will be rejected by calls which may request
117118 or free GPIOs (see below). Other numbers may also be rejected; for
118−example, a number might be valid but unused on a given board.
119−
120−Whether a platform supports multiple GPIO controllers is currently a
121−platform-specific implementation issue.
119+example, a number might be valid but temporarily unused on a given board.
122120
121+Whether a platform supports multiple GPIO controllers is a platform-specific
122+implementation issue, as are whether that support can leave "holes" in the space
123+of GPIO numbers, and whether new controllers can be added at runtime. Such issues
124+can affect things including whether adjacent GPIO numbers are both valid.
123125
124126 Using GPIOs
125127 -----------
@@ -480,12 +482,16 @@ To support this framework, a platform's Kconfig will "select" either · 354 unmodified lines
480482 ARCH_REQUIRE_GPIOLIB or ARCH_WANT_OPTIONAL_GPIOLIB
481483 and arrange that its <asm/gpio.h> includes <asm-generic/gpio.h> and defines
482484 three functions: gpio_get_value(), gpio_set_value(), and gpio_cansleep().
483−They may also want to provide a custom value for ARCH_NR_GPIOS.
484485
485−ARCH_REQUIRE_GPIOLIB means that the gpio-lib code will always get compiled
486+It may also provide a custom value for ARCH_NR_GPIOS, so that it better
487+reflects the number of GPIOs in actual use on that platform, without
488+wasting static table space. (It should count both built-in/SoC GPIOs and
489+also ones on GPIO expanders.
490+
491+ARCH_REQUIRE_GPIOLIB means that the gpiolib code will always get compiled
486492 into the kernel on that architecture.
487493
488−ARCH_WANT_OPTIONAL_GPIOLIB means the gpio-lib code defaults to off and the user
494+ARCH_WANT_OPTIONAL_GPIOLIB means the gpiolib code defaults to off and the user
489495 can enable it and build it into the kernel optionally.
490496
491497 If neither of these options are selected, the platform does not support
Documentation/kernel-doc-nano-HOWTO.txt+5−0
@@ -345,5 +345,10 @@ documentation, in <filename>, for the functions listed. · 344 unmodified lines
345345 section titled <section title> from <filename>.
346346 Spaces are allowed in <section title>; do not quote the <section title>.
347347
348+!C<filename> is replaced by nothing, but makes the tools check that
349+all DOC: sections and documented functions, symbols, etc. are used.
350+This makes sense to use when you use !F/!P only and want to verify
351+that all documentation is included.
352+
348353 Tim.
349354 */ <twaugh@redhat.com>
Documentation/kernel-parameters.txt+10−7
@@ -1974,15 +1974,18 @@ and is between 256 and 4096 characters. It is defined in the file · 1973 unmodified lines
19741974 force Enable ASPM even on devices that claim not to support it.
19751975 WARNING: Forcing ASPM on may cause system lockups.
19761976
1977+ pcie_ports= [PCIE] PCIe ports handling:
1978+ auto Ask the BIOS whether or not to use native PCIe services
1979+ associated with PCIe ports (PME, hot-plug, AER). Use
1980+ them only if that is allowed by the BIOS.
1981+ native Use native PCIe services associated with PCIe ports
1982+ unconditionally.
1983+ compat Treat PCIe ports as PCI-to-PCI bridges, disable the PCIe
1984+ ports driver.
1985+
19771986 pcie_pme= [PCIE,PM] Native PCIe PME signaling options:
1978− Format: {auto|force}[,nomsi]
1979− auto Use native PCIe PME signaling if the BIOS allows the
1980− kernel to control PCIe config registers of root ports.
1981− force Use native PCIe PME signaling even if the BIOS refuses
1982− to allow the kernel to control the relevant PCIe config
1983− registers.
19841987 nomsi Do not use MSI for native PCIe PME signaling (this makes
1985− all PCIe root ports use INTx for everything).
1988+ all PCIe root ports use INTx for all services).
19861989
19871990 pcmv= [HW,PCMCIA] BadgePAD 4
19881991
Documentation/lguest/Makefile+2−1
@@ -1,5 +1,6 @@
11 # This creates the demonstration utility "lguest" which runs a Linux guest.
2−CFLAGS:=-m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE
2+# Missing headers? Add "-I../../include -I../../arch/x86/include"
3+CFLAGS:=-m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -U_FORTIFY_SOURCE
34
45 all: lguest
56
Documentation/lguest/lguest.c+12−11
@@ -39,14 +39,14 @@ · 38 unmodified lines
3939 #include <limits.h>
4040 #include <stddef.h>
4141 #include <signal.h>
42−#include "linux/lguest_launcher.h"
43−#include "linux/virtio_config.h"
44−#include "linux/virtio_net.h"
45−#include "linux/virtio_blk.h"
46−#include "linux/virtio_console.h"
47−#include "linux/virtio_rng.h"
48−#include "linux/virtio_ring.h"
49−#include "asm/bootparam.h"
42+#include <linux/virtio_config.h>
43+#include <linux/virtio_net.h>
44+#include <linux/virtio_blk.h>
45+#include <linux/virtio_console.h>
46+#include <linux/virtio_rng.h>
47+#include <linux/virtio_ring.h>
48+#include <asm/bootparam.h>
49+#include "../../include/linux/lguest_launcher.h"
5050 /*L:110
5151 * We can ignore the 42 include files we need for this program, but I do want
5252 * to draw attention to the use of kernel-style types.
@@ -1447,14 +1447,15 @@ static void add_to_bridge(int fd, const char *if_name, const char *br_name) · 1394 unmodified lines
14471447 static void configure_device(int fd, const char *tapif, u32 ipaddr)
14481448 {
14491449 struct ifreq ifr;
1450− struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;
1450+ struct sockaddr_in sin;
14511451
14521452 memset(&ifr, 0, sizeof(ifr));
14531453 strcpy(ifr.ifr_name, tapif);
14541454
14551455 /* Don't read these incantations. Just cut & paste them like I did! */
1456− sin->sin_family = AF_INET;
1457− sin->sin_addr.s_addr = htonl(ipaddr);
1456+ sin.sin_family = AF_INET;
1457+ sin.sin_addr.s_addr = htonl(ipaddr);
1458+ memcpy(&ifr.ifr_addr, &sin, sizeof(sin));
14581459 if (ioctl(fd, SIOCSIFADDR, &ifr) != 0)
14591460 err(1, "Setting %s interface address", tapif);
14601461 ifr.ifr_flags = IFF_UP;
Documentation/mutex-design.txt+2−1
@@ -9,7 +9,7 @@ firstly, there's nothing wrong with semaphores. But if the simpler · 8 unmodified lines
99 mutex semantics are sufficient for your code, then there are a couple
1010 of advantages of mutexes:
1111
12− - 'struct mutex' is smaller on most architectures: .e.g on x86,
12+ - 'struct mutex' is smaller on most architectures: E.g. on x86,
1313 'struct semaphore' is 20 bytes, 'struct mutex' is 16 bytes.
1414 A smaller structure size means less RAM footprint, and better
1515 CPU-cache utilization.
@@ -136,3 +136,4 @@ the APIs of 'struct mutex' have been streamlined: · 120 unmodified lines
136136 void mutex_lock_nested(struct mutex *lock, unsigned int subclass);
137137 int mutex_lock_interruptible_nested(struct mutex *lock,
138138 unsigned int subclass);
139+ int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock);
Documentation/sound/alsa/HD-Audio-Models.txt+1−0
@@ -296,6 +296,7 @@ Conexant 5051 · 295 unmodified lines
296296 Conexant 5066
297297 =============
298298 laptop Basic Laptop config (default)
299+ hp-laptop HP laptops, e g G60
299300 dell-laptop Dell laptops
300301 dell-vostro Dell Vostro
301302 olpc-xo-1_5 OLPC XO 1.5
MAINTAINERS+31−16
@@ -1445,6 +1445,16 @@ S: Maintained · 1444 unmodified lines
14451445 F: Documentation/video4linux/cafe_ccic
14461446 F: drivers/media/video/cafe_ccic*
14471447
1448+CAIF NETWORK LAYER
1449+M: Sjur Braendeland <sjur.brandeland@stericsson.com>
1450+L: netdev@vger.kernel.org
1451+S: Supported
1452+F: Documentation/networking/caif/
1453+F: drivers/net/caif/
1454+F: include/linux/caif/
1455+F: include/net/caif/
1456+F: net/caif/
1457+
14481458 CALGARY x86-64 IOMMU
14491459 M: Muli Ben-Yehuda <muli@il.ibm.com>
14501460 M: "Jon D. Mason" <jdmason@kudzu.us>
@@ -1676,8 +1686,7 @@ F: kernel/cgroup* · 225 unmodified lines
16761686 F: mm/*cgroup*
16771687
16781688 CORETEMP HARDWARE MONITORING DRIVER
1679−M: Rudolf Marek <r.marek@assembler.cz>
1680−M: Huaxu Wan <huaxu.wan@intel.com>
1689+M: Fenghua Yu <fenghua.yu@intel.com>
16811690 L: lm-sensors@lm-sensors.org
16821691 S: Maintained
16831692 F: Documentation/hwmon/coretemp
@@ -2202,6 +2211,12 @@ L: linux-rdma@vger.kernel.org · 518 unmodified lines
22022211 S: Supported
22032212 F: drivers/infiniband/hw/ehca/
22042213
2214+EHEA (IBM pSeries eHEA 10Gb ethernet adapter) DRIVER
2215+M: Breno Leitao <leitao@linux.vnet.ibm.com>
2216+L: netdev@vger.kernel.org
2217+S: Maintained
2218+F: drivers/net/ehea/
2219+
22052220 EMBEDDED LINUX
22062221 M: Paul Gortmaker <paul.gortmaker@windriver.com>
22072222 M: Matt Mackall <mpm@selenic.com>
@@ -2297,6 +2312,12 @@ S: Maintained · 89 unmodified lines
22972312 F: Documentation/hwmon/f71805f
22982313 F: drivers/hwmon/f71805f.c
22992314
2315+FANOTIFY
2316+M: Eric Paris <eparis@redhat.com>
2317+S: Maintained
2318+F: fs/notify/fanotify/
2319+F: include/linux/fanotify.h
2320+
23002321 FARSYNC SYNCHRONOUS DRIVER
23012322 M: Kevin Curtis <kevin.curtis@farsite.co.uk>
23022323 W: http://www.farsite.co.uk/
@@ -2776,11 +2797,6 @@ S: Maintained · 473 unmodified lines
27762797 F: arch/x86/kernel/hpet.c
27772798 F: arch/x86/include/asm/hpet.h
27782799
2779−HPET: ACPI
2780−M: Bob Picco <bob.picco@hp.com>
2781−S: Maintained
2782−F: drivers/char/hpet.c
2783−
27842800 HPFS FILESYSTEM
27852801 M: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
27862802 W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
@@ -3393,7 +3409,7 @@ F: drivers/s390/kvm/ · 606 unmodified lines
33933409
33943410 KEXEC
33953411 M: Eric Biederman <ebiederm@xmission.com>
3396−W: http://ftp.kernel.org/pub/linux/kernel/people/horms/kexec-tools/
3412+W: http://kernel.org/pub/linux/utils/kernel/kexec/
33973413 L: kexec@lists.infradead.org
33983414 S: Maintained
33993415 F: include/linux/kexec.h
@@ -3489,7 +3505,7 @@ LGUEST · 89 unmodified lines
34893505 M: Rusty Russell <rusty@rustcorp.com.au>
34903506 L: lguest@lists.ozlabs.org
34913507 W: http://lguest.ozlabs.org/
3492−S: Maintained
3508+S: Odd Fixes
34933509 F: Documentation/lguest/
34943510 F: arch/x86/lguest/
34953511 F: drivers/lguest/
@@ -3918,8 +3934,7 @@ F: Documentation/sound/oss/MultiSound · 422 unmodified lines
39183934 F: sound/oss/msnd*
39193935
39203936 MULTITECH MULTIPORT CARD (ISICOM)
3921−M: Jiri Slaby <jirislaby@gmail.com>
3922−S: Maintained
3937+S: Orphan
39233938 F: drivers/char/isicom.c
39243939 F: include/linux/isicom.h
39253940
@@ -4599,7 +4614,7 @@ F: include/linux/preempt.h · 673 unmodified lines
45994614 PRISM54 WIRELESS DRIVER
46004615 M: "Luis R. Rodriguez" <mcgrof@gmail.com>
46014616 L: linux-wireless@vger.kernel.org
4602−W: http://prism54.org
4617+W: http://wireless.kernel.org/en/users/Drivers/p54
46034618 S: Obsolete
46044619 F: drivers/net/wireless/prism54/
46054620
@@ -4800,6 +4815,7 @@ RCUTORTURE MODULE · 194 unmodified lines
48004815 M: Josh Triplett <josh@freedesktop.org>
48014816 M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
48024817 S: Supported
4818+T: git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
48034819 F: Documentation/RCU/torture.txt
48044820 F: kernel/rcutorture.c
48054821
@@ -4824,6 +4840,7 @@ M: Dipankar Sarma <dipankar@in.ibm.com> · 18 unmodified lines
48244840 M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
48254841 W: http://www.rdrop.com/users/paulmck/rclock/
48264842 S: Supported
4843+T: git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
48274844 F: Documentation/RCU/
48284845 F: include/linux/rcu*
48294846 F: include/linux/srcu*
@@ -4831,12 +4848,10 @@ F: kernel/rcu* · 1 unmodified line
48314848 F: kernel/srcu*
48324849 X: kernel/rcutorture.c
48334850
4834−REAL TIME CLOCK DRIVER
4851+REAL TIME CLOCK DRIVER (LEGACY)
48354852 M: Paul Gortmaker <p_gortmaker@yahoo.com>
48364853 S: Maintained
4837−F: Documentation/rtc.txt
4838−F: drivers/rtc/
4839−F: include/linux/rtc.h
4854+F: drivers/char/rtc.c
48404855
48414856 REAL TIME CLOCK (RTC) SUBSYSTEM
48424857 M: Alessandro Zummo <a.zummo@towertech.it>
Makefile+1−1
@@ -1,7 +1,7 @@
11 VERSION = 2
22 PATCHLEVEL = 6
33 SUBLEVEL = 36
4−EXTRAVERSION = -rc2
4+EXTRAVERSION = -rc4
55 NAME = Sheep on Meth
66
77 # *DOCUMENTATION*
arch/alpha/include/asm/cache.h+0−1
@@ -17,7 +17,6 @@ · 16 unmodified lines
1717 # define L1_CACHE_SHIFT 5
1818 #endif
1919
20−#define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
2120 #define SMP_CACHE_BYTES L1_CACHE_BYTES
2221
2322 #endif
arch/alpha/kernel/err_marvel.c+3−3
@@ -109,7 +109,7 @@ marvel_print_err_cyc(u64 err_cyc) · 108 unmodified lines
109109 #define IO7__ERR_CYC__CYCLE__M (0x7)
110110
111111 printk("%s Packet In Error: %s\n"
112− "%s Error in %s, cycle %ld%s%s\n",
112+ "%s Error in %s, cycle %lld%s%s\n",
113113 err_print_prefix,
114114 packet_desc[EXTRACT(err_cyc, IO7__ERR_CYC__PACKET)],
115115 err_print_prefix,
@@ -313,7 +313,7 @@ marvel_print_po7_ugbge_sym(u64 ugbge_sym) · 197 unmodified lines
313313 }
314314
315315 printk("%s Up Hose Garbage Symptom:\n"
316− "%s Source Port: %ld - Dest PID: %ld - OpCode: %s\n",
316+ "%s Source Port: %lld - Dest PID: %lld - OpCode: %s\n",
317317 err_print_prefix,
318318 err_print_prefix,
319319 EXTRACT(ugbge_sym, IO7__PO7_UGBGE_SYM__UPH_SRC_PORT),
@@ -552,7 +552,7 @@ marvel_print_pox_spl_cmplt(u64 spl_cmplt) · 232 unmodified lines
552552 #define IO7__POX_SPLCMPLT__REM_BYTE_COUNT__M (0xfff)
553553
554554 printk("%s Split Completion Error:\n"
555− "%s Source (Bus:Dev:Func): %ld:%ld:%ld\n",
555+ "%s Source (Bus:Dev:Func): %lld:%lld:%lld\n",
556556 err_print_prefix,
557557 err_print_prefix,
558558 EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__SOURCE_BUS),
arch/alpha/kernel/osf_sys.c+1−1
@@ -252,7 +252,7 @@ SYSCALL_DEFINE3(osf_statfs, const char __user *, pathname, · 251 unmodified lines
252252
253253 retval = user_path(pathname, &path);
254254 if (!retval) {
255− retval = do_osf_statfs(&path buffer, bufsiz);
255+ retval = do_osf_statfs(&path, buffer, bufsiz);
256256 path_put(&path);
257257 }
258258 return retval;
arch/alpha/kernel/perf_event.c+9−9
@@ -241,20 +241,20 @@ static inline unsigned long alpha_read_pmc(int idx) · 240 unmodified lines
241241 static int alpha_perf_event_set_period(struct perf_event *event,
242242 struct hw_perf_event *hwc, int idx)
243243 {
244− long left = atomic64_read(&hwc->period_left);
244+ long left = local64_read(&hwc->period_left);
245245 long period = hwc->sample_period;
246246 int ret = 0;
247247
248248 if (unlikely(left <= -period)) {
249249 left = period;
250− atomic64_set(&hwc->period_left, left);
250+ local64_set(&hwc->period_left, left);
251251 hwc->last_period = period;
252252 ret = 1;
253253 }
254254
255255 if (unlikely(left <= 0)) {
256256 left += period;
257− atomic64_set(&hwc->period_left, left);
257+ local64_set(&hwc->period_left, left);
258258 hwc->last_period = period;
259259 ret = 1;
260260 }
@@ -269,7 +269,7 @@ static int alpha_perf_event_set_period(struct perf_event *event, · 8 unmodified lines
269269 if (left > (long)alpha_pmu->pmc_max_period[idx])
270270 left = alpha_pmu->pmc_max_period[idx];
271271
272− atomic64_set(&hwc->prev_count, (unsigned long)(-left));
272+ local64_set(&hwc->prev_count, (unsigned long)(-left));
273273
274274 alpha_write_pmc(idx, (unsigned long)(-left));
275275
@@ -300,10 +300,10 @@ static unsigned long alpha_perf_event_update(struct perf_event *event, · 24 unmodified lines
300300 long delta;
301301
302302 again:
303− prev_raw_count = atomic64_read(&hwc->prev_count);
303+ prev_raw_count = local64_read(&hwc->prev_count);
304304 new_raw_count = alpha_read_pmc(idx);
305305
306− if (atomic64_cmpxchg(&hwc->prev_count, prev_raw_count,
306+ if (local64_cmpxchg(&hwc->prev_count, prev_raw_count,
307307 new_raw_count) != prev_raw_count)
308308 goto again;
309309
@@ -316,8 +316,8 @@ again: · 6 unmodified lines
316316 delta += alpha_pmu->pmc_max_period[idx] + 1;
317317 }
318318
319− atomic64_add(delta, &event->count);
320− atomic64_sub(delta, &hwc->period_left);
319+ local64_add(delta, &event->count);
320+ local64_sub(delta, &hwc->period_left);
321321
322322 return new_raw_count;
323323 }
@@ -670,7 +670,7 @@ static int __hw_perf_event_init(struct perf_event *event) · 346 unmodified lines
670670 if (!hwc->sample_period) {
671671 hwc->sample_period = alpha_pmu->pmc_max_period[0];
672672 hwc->last_period = hwc->sample_period;
673− atomic64_set(&hwc->period_left, hwc->sample_period);
673+ local64_set(&hwc->period_left, hwc->sample_period);
674674 }
675675
676676 return 0;
arch/alpha/kernel/proto.h+0−3
@@ -156,9 +156,6 @@ extern void SMC669_Init(int); · 155 unmodified lines
156156 /* es1888.c */
157157 extern void es1888_init(void);
158158
159−/* ns87312.c */
160−extern void ns87312_enable_ide(long ide_base);
161−
162159 /* ../lib/fpreg.c */
163160 extern void alpha_write_fp_reg (unsigned long reg, unsigned long val);
164161 extern unsigned long alpha_read_fp_reg (unsigned long reg);
arch/alpha/kernel/sys_cabriolet.c+16−3
@@ -33,7 +33,7 @@ · 32 unmodified lines
3333 #include "irq_impl.h"
3434 #include "pci_impl.h"
3535 #include "machvec_impl.h"
36−
36+#include "pc873xx.h"
3737
3838 /* Note mask bit is true for DISABLED irqs. */
3939 static unsigned long cached_irq_mask = ~0UL;
@@ -235,18 +235,31 @@ cabriolet_map_irq(struct pci_dev *dev, u8 slot, u8 pin) · 195 unmodified lines
235235 return COMMON_TABLE_LOOKUP;
236236 }
237237
238+static inline void __init
239+cabriolet_enable_ide(void)
240+{
241+ if (pc873xx_probe() == -1) {
242+ printk(KERN_ERR "Probing for PC873xx Super IO chip failed.\n");
243+ } else {
244+ printk(KERN_INFO "Found %s Super IO chip at 0x%x\n",
245+ pc873xx_get_model(), pc873xx_get_base());
246+
247+ pc873xx_enable_ide();
248+ }
249+}
250+
238251 static inline void __init
239252 cabriolet_init_pci(void)
240253 {
241254 common_init_pci();
242− ns87312_enable_ide(0x398);
255+ cabriolet_enable_ide();
243256 }
244257
245258 static inline void __init
246259 cia_cab_init_pci(void)
247260 {
248261 cia_init_pci();
249− ns87312_enable_ide(0x398);
262+ cabriolet_enable_ide();
250263 }
251264
252265 /*
arch/alpha/kernel/sys_takara.c+9−2
@@ -29,7 +29,7 @@ · 28 unmodified lines
2929 #include "irq_impl.h"
3030 #include "pci_impl.h"
3131 #include "machvec_impl.h"
32−
32+#include "pc873xx.h"
3333
3434 /* Note mask bit is true for DISABLED irqs. */
3535 static unsigned long cached_irq_mask[2] = { -1, -1 };
@@ -264,7 +264,14 @@ takara_init_pci(void) · 228 unmodified lines
264264 alpha_mv.pci_map_irq = takara_map_irq_srm;
265265
266266 cia_init_pci();
267− ns87312_enable_ide(0x26e);
267+
268+ if (pc873xx_probe() == -1) {
269+ printk(KERN_ERR "Probing for PC873xx Super IO chip failed.\n");
270+ } else {
271+ printk(KERN_INFO "Found %s Super IO chip at 0x%x\n",
272+ pc873xx_get_model(), pc873xx_get_base());
273+ pc873xx_enable_ide();
274+ }
268275 }
269276
270277
arch/arm/Kconfig+0−89
@@ -1576,95 +1576,6 @@ config AUTO_ZRELADDR · 1575 unmodified lines
15761576 0xf8000000. This assumes the zImage being placed in the first 128MB
15771577 from start of memory.
15781578
1579−config ZRELADDR
1580− hex "Physical address of the decompressed kernel image"
1581− depends on !AUTO_ZRELADDR
1582− default 0x00008000 if ARCH_BCMRING ||\
1583− ARCH_CNS3XXX ||\
1584− ARCH_DOVE ||\
1585− ARCH_EBSA110 ||\
1586− ARCH_FOOTBRIDGE ||\
1587− ARCH_INTEGRATOR ||\
1588− ARCH_IOP13XX ||\
1589− ARCH_IOP33X ||\
1590− ARCH_IXP2000 ||\
1591− ARCH_IXP23XX ||\
1592− ARCH_IXP4XX ||\
1593− ARCH_KIRKWOOD ||\
1594− ARCH_KS8695 ||\
1595− ARCH_LOKI ||\
1596− ARCH_MMP ||\
1597− ARCH_MV78XX0 ||\
1598− ARCH_NOMADIK ||\
1599− ARCH_NUC93X ||\
1600− ARCH_NS9XXX ||\
1601− ARCH_ORION5X ||\
1602− ARCH_SPEAR3XX ||\
1603− ARCH_SPEAR6XX ||\
1604− ARCH_U8500 ||\
1605− ARCH_VERSATILE ||\
1606− ARCH_W90X900
1607− default 0x08008000 if ARCH_MX1 ||\
1608− ARCH_SHARK
1609− default 0x10008000 if ARCH_MSM ||\
1610− ARCH_OMAP1 ||\
1611− ARCH_RPC
1612− default 0x20008000 if ARCH_S5P6440 ||\
1613− ARCH_S5P6442 ||\
1614− ARCH_S5PC100 ||\
1615− ARCH_S5PV210
1616− default 0x30008000 if ARCH_S3C2410 ||\
1617− ARCH_S3C2400 ||\
1618− ARCH_S3C2412 ||\
1619− ARCH_S3C2416 ||\
1620− ARCH_S3C2440 ||\
1621− ARCH_S3C2443
1622− default 0x40008000 if ARCH_STMP378X ||\
1623− ARCH_STMP37XX ||\
1624− ARCH_SH7372 ||\
1625− ARCH_SH7377
1626− default 0x50008000 if ARCH_S3C64XX ||\
1627− ARCH_SH7367
1628− default 0x60008000 if ARCH_VEXPRESS
1629− default 0x80008000 if ARCH_MX25 ||\
1630− ARCH_MX3 ||\
1631− ARCH_NETX ||\
1632− ARCH_OMAP2PLUS ||\
1633− ARCH_PNX4008
1634− default 0x90008000 if ARCH_MX5 ||\
1635− ARCH_MX91231
1636− default 0xa0008000 if ARCH_IOP32X ||\
1637− ARCH_PXA ||\
1638− MACH_MX27
1639− default 0xc0008000 if ARCH_LH7A40X ||\
1640− MACH_MX21
1641− default 0xf0008000 if ARCH_AAEC2000 ||\
1642− ARCH_L7200
1643− default 0xc0028000 if ARCH_CLPS711X
1644− default 0x70008000 if ARCH_AT91 && (ARCH_AT91CAP9 || ARCH_AT91SAM9G45)
1645− default 0x20008000 if ARCH_AT91 && !(ARCH_AT91CAP9 || ARCH_AT91SAM9G45)
1646− default 0xc0008000 if ARCH_DAVINCI && ARCH_DAVINCI_DA8XX
1647− default 0x80008000 if ARCH_DAVINCI && !ARCH_DAVINCI_DA8XX
1648− default 0x00008000 if ARCH_EP93XX && EP93XX_SDCE3_SYNC_PHYS_OFFSET
1649− default 0xc0008000 if ARCH_EP93XX && EP93XX_SDCE0_PHYS_OFFSET
1650− default 0xd0008000 if ARCH_EP93XX && EP93XX_SDCE1_PHYS_OFFSET
1651− default 0xe0008000 if ARCH_EP93XX && EP93XX_SDCE2_PHYS_OFFSET
1652− default 0xf0008000 if ARCH_EP93XX && EP93XX_SDCE3_ASYNC_PHYS_OFFSET
1653− default 0x00008000 if ARCH_GEMINI && GEMINI_MEM_SWAP
1654− default 0x10008000 if ARCH_GEMINI && !GEMINI_MEM_SWAP
1655− default 0x70008000 if ARCH_REALVIEW && REALVIEW_HIGH_PHYS_OFFSET
1656− default 0x00008000 if ARCH_REALVIEW && !REALVIEW_HIGH_PHYS_OFFSET
1657− default 0xc0208000 if ARCH_SA1100 && SA1111
1658− default 0xc0008000 if ARCH_SA1100 && !SA1111
1659− default 0x30108000 if ARCH_S3C2410 && PM_H1940
1660− default 0x28E08000 if ARCH_U300 && MACH_U300_SINGLE_RAM
1661− default 0x48008000 if ARCH_U300 && !MACH_U300_SINGLE_RAM
1662− help
1663− ZRELADDR is the physical address where the decompressed kernel
1664− image will be placed. ZRELADDR has to be specified when the
1665− assumption of AUTO_ZRELADDR is not valid, or when ZBOOT_ROM is
1666− selected.
1667−
16681579 endmenu
16691580
16701581 menu "CPU Power Management"
arch/arm/boot/Makefile+5−3
@@ -14,16 +14,18 @@ · 13 unmodified lines
1414 MKIMAGE := $(srctree)/scripts/mkuboot.sh
1515
1616 ifneq ($(MACHINE),)
17−-include $(srctree)/$(MACHINE)/Makefile.boot
17+include $(srctree)/$(MACHINE)/Makefile.boot
1818 endif
1919
2020 # Note: the following conditions must always be true:
21+# ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET)
2122 # PARAMS_PHYS must be within 4MB of ZRELADDR
2223 # INITRD_PHYS must be in RAM
24+ZRELADDR := $(zreladdr-y)
2325 PARAMS_PHYS := $(params_phys-y)
2426 INITRD_PHYS := $(initrd_phys-y)
2527
26−export INITRD_PHYS PARAMS_PHYS
28+export ZRELADDR INITRD_PHYS PARAMS_PHYS
2729
2830 targets := Image zImage xipImage bootpImage uImage
2931
@@ -65,7 +67,7 @@ quiet_cmd_uimage = UIMAGE $@ · 35 unmodified lines
6567 ifeq ($(CONFIG_ZBOOT_ROM),y)
6668 $(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
6769 else
68−$(obj)/uImage: LOADADDR=$(CONFIG_ZRELADDR)
70+$(obj)/uImage: LOADADDR=$(ZRELADDR)
6971 endif
7072
7173 ifeq ($(CONFIG_THUMB2_KERNEL),y)
arch/arm/boot/compressed/Makefile+4−0
@@ -79,6 +79,10 @@ endif · 78 unmodified lines
7979 EXTRA_CFLAGS := -fpic -fno-builtin
8080 EXTRA_AFLAGS := -Wa,-march=all
8181
82+# Supply ZRELADDR to the decompressor via a linker symbol.
83+ifneq ($(CONFIG_AUTO_ZRELADDR),y)
84+LDFLAGS_vmlinux := --defsym zreladdr=$(ZRELADDR)
85+endif
8286 ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
8387 LDFLAGS_vmlinux += --be8
8488 endif
arch/arm/boot/compressed/head.S+1−1
@@ -177,7 +177,7 @@ not_angel: · 176 unmodified lines
177177 and r4, pc, #0xf8000000
178178 add r4, r4, #TEXT_OFFSET
179179 #else
180− ldr r4, =CONFIG_ZRELADDR
180+ ldr r4, =zreladdr
181181 #endif
182182 subs r0, r0, r1 @ calculate the delta offset
183183
arch/arm/common/it8152.c+8−0
@@ -263,6 +263,14 @@ static int it8152_pci_platform_notify_remove(struct device *dev) · 262 unmodified lines
263263 return 0;
264264 }
265265
266+int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
267+{
268+ dev_dbg(dev, "%s: dma_addr %08x, size %08x\n",
269+ __func__, dma_addr, size);
270+ return (dev->bus == &pci_bus_type) &&
271+ ((dma_addr + size - PHYS_OFFSET) >= SZ_64M);
272+}
273+
266274 int __init it8152_pci_setup(int nr, struct pci_sys_data *sys)
267275 {
268276 it8152_io.start = IT8152_IO_BASE + 0x12000;
arch/arm/configs/omap_4430sdp_defconfig+3−0
@@ -13,6 +13,9 @@ CONFIG_MODULE_SRCVERSION_ALL=y · 12 unmodified lines
1313 # CONFIG_BLK_DEV_BSG is not set
1414 CONFIG_ARCH_OMAP=y
1515 CONFIG_ARCH_OMAP4=y
16+# CONFIG_ARCH_OMAP2PLUS_TYPICAL is not set
17+# CONFIG_ARCH_OMAP2 is not set
18+# CONFIG_ARCH_OMAP3 is not set
1619 # CONFIG_OMAP_MUX is not set
1720 CONFIG_OMAP_32K_TIMER=y
1821 CONFIG_OMAP_DM_TIMER=y
arch/arm/include/asm/dma-mapping.h+0−8
@@ -288,15 +288,7 @@ extern void dmabounce_unregister_dev(struct device *); · 287 unmodified lines
288288 * DMA access and 1 if the buffer needs to be bounced.
289289 *
290290 */
291−#ifdef CONFIG_SA1111
292291 extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
293−#else
294−static inline int dma_needs_bounce(struct device *dev, dma_addr_t addr,
295− size_t size)
296−{
297− return 0;
298−}
299−#endif
300292
301293 /*
302294 * The DMA API, implemented by dmabounce.c. See below for descriptions.
arch/arm/include/asm/perf_event.h+1−1
@@ -17,7 +17,7 @@ · 16 unmodified lines
1717 * counter interrupts are regular interrupts and not an NMI. This
1818 * means that when we receive the interrupt we can call
1919 * perf_event_do_pending() that handles all of the work with
20− * interrupts enabled.
20+ * interrupts disabled.
2121 */
2222 static inline void
2323 set_perf_event_pending(void)
arch/arm/include/asm/unistd.h+3−0
@@ -393,6 +393,9 @@ · 392 unmodified lines
393393 #define __NR_perf_event_open (__NR_SYSCALL_BASE+364)
394394 #define __NR_recvmmsg (__NR_SYSCALL_BASE+365)
395395 #define __NR_accept4 (__NR_SYSCALL_BASE+366)
396+#define __NR_fanotify_init (__NR_SYSCALL_BASE+367)
397+#define __NR_fanotify_mark (__NR_SYSCALL_BASE+368)
398+#define __NR_prlimit64 (__NR_SYSCALL_BASE+369)
396399
397400 /*
398401 * The following SWIs are ARM private.
arch/arm/kernel/calls.S+3−0
@@ -376,6 +376,9 @@ · 375 unmodified lines
376376 CALL(sys_perf_event_open)
377377 /* 365 */ CALL(sys_recvmmsg)
378378 CALL(sys_accept4)
379+ CALL(sys_fanotify_init)
380+ CALL(sys_fanotify_mark)
381+ CALL(sys_prlimit64)
379382 #ifndef syscalls_counted
380383 .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
381384 #define syscalls_counted
arch/arm/kernel/etm.c+1−1
@@ -230,7 +230,7 @@ static void etm_dump(void) · 229 unmodified lines
230230 etb_lock(t);
231231 }
232232
233−static void sysrq_etm_dump(int key, struct tty_struct *tty)
233+static void sysrq_etm_dump(int key)
234234 {
235235 dev_dbg(tracer.dev, "Dumping ETB buffer\n");
236236 etm_dump();
arch/arm/kernel/perf_event.c+6−6
@@ -342,8 +342,8 @@ validate_event(struct cpu_hw_events *cpuc, · 341 unmodified lines
342342 {
343343 struct hw_perf_event fake_event = event->hw;
344344
345− if (event->pmu && event->pmu != &pmu)
346− return 0;
345+ if (event->pmu != &pmu || event->state <= PERF_EVENT_STATE_OFF)
346+ return 1;
347347
348348 return armpmu->get_event_idx(cpuc, &fake_event) >= 0;
349349 }
@@ -1082,8 +1082,8 @@ armv6pmu_handle_irq(int irq_num, · 732 unmodified lines
10821082 /*
10831083 * Handle the pending perf events.
10841084 *
1085− * Note: this call *must* be run with interrupts enabled. For
1086− * platforms that can have the PMU interrupts raised as a PMI, this
1085+ * Note: this call *must* be run with interrupts disabled. For
1086+ * platforms that can have the PMU interrupts raised as an NMI, this
10871087 * will not work.
10881088 */
10891089 perf_event_do_pending();
@@ -2058,8 +2058,8 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) · 968 unmodified lines
20582058 /*
20592059 * Handle the pending perf events.
20602060 *
2061− * Note: this call *must* be run with interrupts enabled. For
2062− * platforms that can have the PMU interrupts raised as a PMI, this
2061+ * Note: this call *must* be run with interrupts disabled. For
2062+ * platforms that can have the PMU interrupts raised as an NMI, this
20632063 * will not work.
20642064 */
20652065 perf_event_do_pending();
arch/arm/mach-at91/at91sam9g45.c+12−3
@@ -121,8 +121,8 @@ static struct clk ssc1_clk = { · 120 unmodified lines
121121 .pmc_mask = 1 << AT91SAM9G45_ID_SSC1,
122122 .type = CLK_TYPE_PERIPHERAL,
123123 };
124−static struct clk tcb_clk = {
125− .name = "tcb_clk",
124+static struct clk tcb0_clk = {
125+ .name = "tcb0_clk",
126126 .pmc_mask = 1 << AT91SAM9G45_ID_TCB,
127127 .type = CLK_TYPE_PERIPHERAL,
128128 };
@@ -192,6 +192,14 @@ static struct clk ohci_clk = { · 63 unmodified lines
192192 .parent = &uhphs_clk,
193193 };
194194
195+/* One additional fake clock for second TC block */
196+static struct clk tcb1_clk = {
197+ .name = "tcb1_clk",
198+ .pmc_mask = 0,
199+ .type = CLK_TYPE_PERIPHERAL,
200+ .parent = &tcb0_clk,
201+};
202+
195203 static struct clk *periph_clocks[] __initdata = {
196204 &pioA_clk,
197205 &pioB_clk,
@@ -208,7 +216,7 @@ static struct clk *periph_clocks[] __initdata = { · 10 unmodified lines
208216 &spi1_clk,
209217 &ssc0_clk,
210218 &ssc1_clk,
211− &tcb_clk,
219+ &tcb0_clk,
212220 &pwm_clk,
213221 &tsc_clk,
214222 &dma_clk,
@@ -221,6 +229,7 @@ static struct clk *periph_clocks[] __initdata = { · 6 unmodified lines
221229 &mmc1_clk,
222230 // irq0
223231 &ohci_clk,
232+ &tcb1_clk,
224233 };
225234
226235 /*
arch/arm/mach-at91/at91sam9g45_devices.c+3−3
@@ -46,7 +46,7 @@ static struct resource hdmac_resources[] = { · 45 unmodified lines
4646 .end = AT91_BASE_SYS + AT91_DMA + SZ_512 - 1,
4747 .flags = IORESOURCE_MEM,
4848 },
49− [2] = {
49+ [1] = {
5050 .start = AT91SAM9G45_ID_DMA,
5151 .end = AT91SAM9G45_ID_DMA,
5252 .flags = IORESOURCE_IRQ,
@@ -835,9 +835,9 @@ static struct platform_device at91sam9g45_tcb1_device = { · 782 unmodified lines
835835 static void __init at91_add_device_tc(void)
836836 {
837837 /* this chip has one clock and irq for all six TC channels */
838− at91_clock_associate("tcb_clk", &at91sam9g45_tcb0_device.dev, "t0_clk");
838+ at91_clock_associate("tcb0_clk", &at91sam9g45_tcb0_device.dev, "t0_clk");
839839 platform_device_register(&at91sam9g45_tcb0_device);
840− at91_clock_associate("tcb_clk", &at91sam9g45_tcb1_device.dev, "t0_clk");
840+ at91_clock_associate("tcb1_clk", &at91sam9g45_tcb1_device.dev, "t0_clk");
841841 platform_device_register(&at91sam9g45_tcb1_device);
842842 }
843843 #else
arch/arm/mach-at91/board-sam9261ek.c+19−12
@@ -93,11 +93,12 @@ static struct resource dm9000_resource[] = { · 92 unmodified lines
9393 .start = AT91_PIN_PC11,
9494 .end = AT91_PIN_PC11,
9595 .flags = IORESOURCE_IRQ
96+ | IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE,
9697 }
9798 };
9899
99100 static struct dm9000_plat_data dm9000_platdata = {
100− .flags = DM9000_PLATF_16BITONLY,
101+ .flags = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
101102 };
102103
103104 static struct platform_device dm9000_device = {
@@ -167,17 +168,6 @@ static struct at91_udc_data __initdata ek_udc_data = { · 63 unmodified lines
167168 };
168169
169170
170−/*
171− * MCI (SD/MMC)
172− */
173−static struct at91_mmc_data __initdata ek_mmc_data = {
174− .wire4 = 1,
175−// .det_pin = ... not connected
176−// .wp_pin = ... not connected
177−// .vcc_pin = ... not connected
178−};
179−
180−
181171 /*
182172 * NAND flash
183173 */
@@ -246,6 +236,10 @@ static void __init ek_add_device_nand(void) · 62 unmodified lines
246236 at91_add_device_nand(&ek_nand_data);
247237 }
248238
239+/*
240+ * SPI related devices
241+ */
242+#if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
249243
250244 /*
251245 * ADS7846 Touchscreen
@@ -356,6 +350,19 @@ static struct spi_board_info ek_spi_devices[] = { · 104 unmodified lines
356350 #endif
357351 };
358352
353+#else /* CONFIG_SPI_ATMEL_* */
354+/* spi0 and mmc/sd share the same PIO pins: cannot be used at the same time */
355+
356+/*
357+ * MCI (SD/MMC)
358+ * det_pin, wp_pin and vcc_pin are not connected
359+ */
360+static struct at91_mmc_data __initdata ek_mmc_data = {
361+ .wire4 = 1,
362+};
363+
364+#endif /* CONFIG_SPI_ATMEL_* */
365+
359366
360367 /*
361368 * LCD Controller
arch/arm/mach-at91/clock.c+2−1
@@ -501,7 +501,8 @@ postcore_initcall(at91_clk_debugfs_init); · 500 unmodified lines
501501 int __init clk_register(struct clk *clk)
502502 {
503503 if (clk_is_peripheral(clk)) {
504− clk->parent = &mck;
504+ if (!clk->parent)
505+ clk->parent = &mck;
505506 clk->mode = pmc_periph_mode;
506507 list_add_tail(&clk->node, &clocks);
507508 }
arch/arm/mach-ep93xx/clock.c+1−1
@@ -560,4 +560,4 @@ static int __init ep93xx_clock_init(void) · 559 unmodified lines
560560 clkdev_add_table(clocks, ARRAY_SIZE(clocks));
561561 return 0;
562562 }
563−arch_initcall(ep93xx_clock_init);
563+postcore_initcall(ep93xx_clock_init);
arch/arm/mach-mx25/eukrea_mbimxsd-baseboard.c+1−1
@@ -215,7 +215,7 @@ struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata = { · 214 unmodified lines
215215 * Add platform devices present on this baseboard and init
216216 * them from CPU side as far as required to use them later on
217217 */
218−void __init eukrea_mbimxsd_baseboard_init(void)
218+void __init eukrea_mbimxsd25_baseboard_init(void)
219219 {
220220 if (mxc_iomux_v3_setup_multiple_pads(eukrea_mbimxsd_pads,
221221 ARRAY_SIZE(eukrea_mbimxsd_pads)))
arch/arm/mach-mx25/mach-cpuimx25.c+2−2
@@ -147,8 +147,8 @@ static void __init eukrea_cpuimx25_init(void) · 146 unmodified lines
147147 if (!otg_mode_host)
148148 mxc_register_device(&otg_udc_device, &otg_device_pdata);
149149
150−#ifdef CONFIG_MACH_EUKREA_MBIMXSD_BASEBOARD
151− eukrea_mbimxsd_baseboard_init();
150+#ifdef CONFIG_MACH_EUKREA_MBIMXSD25_BASEBOARD
151+ eukrea_mbimxsd25_baseboard_init();
152152 #endif
153153 }
154154
arch/arm/mach-mx3/clock-imx35.c+55−22
@@ -155,7 +155,7 @@ static unsigned long get_rate_arm(void) · 154 unmodified lines
155155
156156 aad = &clk_consumer[(pdr0 >> 16) & 0xf];
157157 if (aad->sel)
158− fref = fref * 2 / 3;
158+ fref = fref * 3 / 4;
159159
160160 return fref / aad->arm;
161161 }
@@ -164,7 +164,7 @@ static unsigned long get_rate_ahb(struct clk *clk) · 2 unmodified lines
164164 {
165165 unsigned long pdr0 = __raw_readl(CCM_BASE + CCM_PDR0);
166166 struct arm_ahb_div *aad;
167− unsigned long fref = get_rate_mpll();
167+ unsigned long fref = get_rate_arm();
168168
169169 aad = &clk_consumer[(pdr0 >> 16) & 0xf];
170170
@@ -176,16 +176,11 @@ static unsigned long get_rate_ipg(struct clk *clk) · 5 unmodified lines
176176 return get_rate_ahb(NULL) >> 1;
177177 }
178178
179−static unsigned long get_3_3_div(unsigned long in)
180−{
181− return (((in >> 3) & 0x7) + 1) * ((in & 0x7) + 1);
182−}
183−
184179 static unsigned long get_rate_uart(struct clk *clk)
185180 {
186181 unsigned long pdr3 = __raw_readl(CCM_BASE + CCM_PDR3);
187182 unsigned long pdr4 = __raw_readl(CCM_BASE + CCM_PDR4);
188− unsigned long div = get_3_3_div(pdr4 >> 10);
183+ unsigned long div = ((pdr4 >> 10) & 0x3f) + 1;
189184
190185 if (pdr3 & (1 << 14))
191186 return get_rate_arm() / div;
@@ -216,7 +211,7 @@ static unsigned long get_rate_sdhc(struct clk *clk) · 24 unmodified lines
216211 break;
217212 }
218213
219− return rate / get_3_3_div(div);
214+ return rate / (div + 1);
220215 }
221216
222217 static unsigned long get_rate_mshc(struct clk *clk)
@@ -270,7 +265,7 @@ static unsigned long get_rate_csi(struct clk *clk) · 47 unmodified lines
270265 else
271266 rate = get_rate_ppll();
272267
273− return rate / get_3_3_div((pdr2 >> 16) & 0x3f);
268+ return rate / (((pdr2 >> 16) & 0x3f) + 1);
274269 }
275270
276271 static unsigned long get_rate_otg(struct clk *clk)
@@ -283,25 +278,51 @@ static unsigned long get_rate_otg(struct clk *clk) · 6 unmodified lines
283278 else
284279 rate = get_rate_ppll();
285280
286− return rate / get_3_3_div((pdr4 >> 22) & 0x3f);
281+ return rate / (((pdr4 >> 22) & 0x3f) + 1);
287282 }
288283
289284 static unsigned long get_rate_ipg_per(struct clk *clk)
290285 {
291286 unsigned long pdr0 = __raw_readl(CCM_BASE + CCM_PDR0);
292287 unsigned long pdr4 = __raw_readl(CCM_BASE + CCM_PDR4);
293− unsigned long div1, div2;
288+ unsigned long div;
294289
295290 if (pdr0 & (1 << 26)) {
296− div1 = (pdr4 >> 19) & 0x7;
297− div2 = (pdr4 >> 16) & 0x7;
298− return get_rate_arm() / ((div1 + 1) * (div2 + 1));
291+ div = (pdr4 >> 16) & 0x3f;
292+ return get_rate_arm() / (div + 1);
299293 } else {
300− div1 = (pdr0 >> 12) & 0x7;
301− return get_rate_ahb(NULL) / div1;
294+ div = (pdr0 >> 12) & 0x7;
295+ return get_rate_ahb(NULL) / (div + 1);
302296 }
303297 }
304298
299+static unsigned long get_rate_hsp(struct clk *clk)
300+{
301+ unsigned long hsp_podf = (__raw_readl(CCM_BASE + CCM_PDR0) >> 20) & 0x03;
302+ unsigned long fref = get_rate_mpll();
303+
304+ if (fref > 400 * 1000 * 1000) {
305+ switch (hsp_podf) {
306+ case 0:
307+ return fref >> 2;
308+ case 1:
309+ return fref >> 3;
310+ case 2:
311+ return fref / 3;
312+ }
313+ } else {
314+ switch (hsp_podf) {
315+ case 0:
316+ case 2:
317+ return fref / 3;
318+ case 1:
319+ return fref / 6;
320+ }
321+ }
322+
323+ return 0;
324+}
325+
305326 static int clk_cgr_enable(struct clk *clk)
306327 {
307328 u32 reg;
@@ -359,7 +380,7 @@ DEFINE_CLOCK(i2c1_clk, 0, CCM_CGR1, 10, get_rate_ipg_per, NULL); · 51 unmodified lines
359380 DEFINE_CLOCK(i2c2_clk, 1, CCM_CGR1, 12, get_rate_ipg_per, NULL);
360381 DEFINE_CLOCK(i2c3_clk, 2, CCM_CGR1, 14, get_rate_ipg_per, NULL);
361382 DEFINE_CLOCK(iomuxc_clk, 0, CCM_CGR1, 16, NULL, NULL);
362−DEFINE_CLOCK(ipu_clk, 0, CCM_CGR1, 18, get_rate_ahb, NULL);
383+DEFINE_CLOCK(ipu_clk, 0, CCM_CGR1, 18, get_rate_hsp, NULL);
363384 DEFINE_CLOCK(kpp_clk, 0, CCM_CGR1, 20, get_rate_ipg, NULL);
364385 DEFINE_CLOCK(mlb_clk, 0, CCM_CGR1, 22, get_rate_ahb, NULL);
365386 DEFINE_CLOCK(mshc_clk, 0, CCM_CGR1, 24, get_rate_mshc, NULL);
@@ -485,10 +506,10 @@ static struct clk_lookup lookups[] = { · 119 unmodified lines
485506
486507 int __init mx35_clocks_init()
487508 {
488− unsigned int ll = 0;
509+ unsigned int cgr2 = 3 << 26, cgr3 = 0;
489510
490511 #if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_ICEDCC)
491− ll = (3 << 16);
512+ cgr2 |= 3 << 16;
492513 #endif
493514
494515 clkdev_add_table(lookups, ARRAY_SIZE(lookups));
@@ -499,8 +520,20 @@ int __init mx35_clocks_init() · 4 unmodified lines
499520 __raw_writel((3 << 18), CCM_BASE + CCM_CGR0);
500521 __raw_writel((3 << 2) | (3 << 4) | (3 << 6) | (3 << 8) | (3 << 16),
501522 CCM_BASE + CCM_CGR1);
502− __raw_writel((3 << 26) | ll, CCM_BASE + CCM_CGR2);
503− __raw_writel(0, CCM_BASE + CCM_CGR3);
523+
524+ /*
525+ * Check if we came up in internal boot mode. If yes, we need some
526+ * extra clocks turned on, otherwise the MX35 boot ROM code will
527+ * hang after a watchdog reset.
528+ */
529+ if (!(__raw_readl(CCM_BASE + CCM_RCSR) & (3 << 10))) {
530+ /* Additionally turn on UART1, SCC, and IIM clocks */
531+ cgr2 |= 3 << 16 | 3 << 4;
532+ cgr3 |= 3 << 2;
533+ }
534+
535+ __raw_writel(cgr2, CCM_BASE + CCM_CGR2);
536+ __raw_writel(cgr3, CCM_BASE + CCM_CGR3);
504537
505538 mxc_timer_init(&gpt_clk,
506539 MX35_IO_ADDRESS(MX35_GPT1_BASE_ADDR), MX35_INT_GPT);
arch/arm/mach-mx3/eukrea_mbimxsd-baseboard.c+1−1
@@ -216,7 +216,7 @@ struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata = { · 215 unmodified lines
216216 * Add platform devices present on this baseboard and init
217217 * them from CPU side as far as required to use them later on
218218 */
219−void __init eukrea_mbimxsd_baseboard_init(void)
219+void __init eukrea_mbimxsd35_baseboard_init(void)
220220 {
221221 if (mxc_iomux_v3_setup_multiple_pads(eukrea_mbimxsd_pads,
222222 ARRAY_SIZE(eukrea_mbimxsd_pads)))
arch/arm/mach-mx3/mach-cpuimx35.c+2−2
@@ -201,8 +201,8 @@ static void __init mxc_board_init(void) · 200 unmodified lines
201201 if (!otg_mode_host)
202202 mxc_register_device(&mxc_otg_udc_device, &otg_device_pdata);
203203
204−#ifdef CONFIG_MACH_EUKREA_MBIMXSD_BASEBOARD
205− eukrea_mbimxsd_baseboard_init();
204+#ifdef CONFIG_MACH_EUKREA_MBIMXSD35_BASEBOARD
205+ eukrea_mbimxsd35_baseboard_init();
206206 #endif
207207 }
208208
arch/arm/mach-mx5/clock-mx51.c+1−1
@@ -56,7 +56,7 @@ static void _clk_ccgr_disable(struct clk *clk) · 55 unmodified lines
5656 {
5757 u32 reg;
5858 reg = __raw_readl(clk->enable_reg);
59− reg &= ~(MXC_CCM_CCGRx_MOD_OFF << clk->enable_shift);
59+ reg &= ~(MXC_CCM_CCGRx_CG_MASK << clk->enable_shift);
6060 __raw_writel(reg, clk->enable_reg);
6161
6262 }
arch/arm/mach-omap2/Makefile+1−0
@@ -25,6 +25,7 @@ obj-$(CONFIG_LOCAL_TIMERS) += timer-mpu.o · 24 unmodified lines
2525 obj-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o
2626 obj-$(CONFIG_ARCH_OMAP4) += omap44xx-smc.o omap4-common.o
2727
28+AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a
2829 AFLAGS_omap44xx-smc.o :=-Wa,-march=armv7-a
2930
3031 # Functions loaded to SRAM
arch/arm/mach-omap2/clock3xxx_data.c+7−7
@@ -3417,7 +3417,13 @@ int __init omap3xxx_clk_init(void) · 3416 unmodified lines
34173417 struct omap_clk *c;
34183418 u32 cpu_clkflg = CK_3XXX;
34193419
3420− if (cpu_is_omap34xx()) {
3420+ if (cpu_is_omap3517()) {
3421+ cpu_mask = RATE_IN_3XXX | RATE_IN_3430ES2PLUS;
3422+ cpu_clkflg |= CK_3517;
3423+ } else if (cpu_is_omap3505()) {
3424+ cpu_mask = RATE_IN_3XXX | RATE_IN_3430ES2PLUS;
3425+ cpu_clkflg |= CK_3505;
3426+ } else if (cpu_is_omap34xx()) {
34213427 cpu_mask = RATE_IN_3XXX;
34223428 cpu_clkflg |= CK_343X;
34233429
@@ -3432,12 +3438,6 @@ int __init omap3xxx_clk_init(void) · 8 unmodified lines
34323438 cpu_mask |= RATE_IN_3430ES2PLUS;
34333439 cpu_clkflg |= CK_3430ES2;
34343440 }
3435− } else if (cpu_is_omap3517()) {
3436− cpu_mask = RATE_IN_3XXX | RATE_IN_3430ES2PLUS;
3437− cpu_clkflg |= CK_3517;
3438− } else if (cpu_is_omap3505()) {
3439− cpu_mask = RATE_IN_3XXX | RATE_IN_3430ES2PLUS;
3440− cpu_clkflg |= CK_3505;
34413441 }
34423442
34433443 if (omap3_has_192mhz_clk())
arch/arm/mach-omap2/id.c+1−1
@@ -284,8 +284,8 @@ static void __init omap3_check_revision(void) · 283 unmodified lines
284284 default:
285285 omap_revision = OMAP3630_REV_ES1_2;
286286 omap_chip.oc |= CHIP_IS_OMAP3630ES1_2;
287− break;
288287 }
288+ break;
289289 default:
290290 /* Unknown default to latest silicon rev as default*/
291291 omap_revision = OMAP3630_REV_ES1_2;
arch/arm/mach-omap2/include/mach/entry-macro.S+4−2
@@ -177,7 +177,10 @@ omap_irq_base: .word 0 · 176 unmodified lines
177177 cmpne \irqnr, \tmp
178178 cmpcs \irqnr, \irqnr
179179 .endm
180+#endif
181+#endif /* MULTI_OMAP2 */
180182
183+#ifdef CONFIG_SMP
181184 /* We assume that irqstat (the raw value of the IRQ acknowledge
182185 * register) is preserved from the macro above.
183186 * If there is an IPI, we immediately signal end of interrupt
@@ -205,8 +208,7 @@ omap_irq_base: .word 0 · 21 unmodified lines
205208 streq \irqstat, [\base, #GIC_CPU_EOI]
206209 cmp \tmp, #0
207210 .endm
208−#endif
209−#endif /* MULTI_OMAP2 */
211+#endif /* CONFIG_SMP */
210212
211213 .macro irq_prio_table
212214 .endm
arch/arm/mach-omap2/omap-smp.c+1−2
@@ -102,8 +102,7 @@ static void __init wakeup_secondary(void) · 101 unmodified lines
102102 * Send a 'sev' to wake the secondary core from WFE.
103103 * Drain the outstanding writes to memory
104104 */
105− dsb();
106− set_event();
105+ dsb_sev();
107106 mb();
108107 }
109108
arch/arm/mach-omap2/pm34xx.c+3−1
@@ -480,7 +480,9 @@ void omap_sram_idle(void) · 479 unmodified lines
480480 }
481481
482482 /* Disable IO-PAD and IO-CHAIN wakeup */
483− if (omap3_has_io_wakeup() && core_next_state < PWRDM_POWER_ON) {
483+ if (omap3_has_io_wakeup() &&
484+ (per_next_state < PWRDM_POWER_ON ||
485+ core_next_state < PWRDM_POWER_ON)) {
484486 prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
485487 omap3_disable_io_chain();
486488 }
arch/arm/mach-pxa/cpufreq-pxa2xx.c+1−1
@@ -398,7 +398,7 @@ static int pxa_set_target(struct cpufreq_policy *policy, · 397 unmodified lines
398398 return 0;
399399 }
400400
401−static __init int pxa_cpufreq_init(struct cpufreq_policy *policy)
401+static int pxa_cpufreq_init(struct cpufreq_policy *policy)
402402 {
403403 int i;
404404 unsigned int freq;
arch/arm/mach-pxa/cpufreq-pxa3xx.c+1−1
@@ -204,7 +204,7 @@ static int pxa3xx_cpufreq_set(struct cpufreq_policy *policy, · 203 unmodified lines
204204 return 0;
205205 }
206206
207−static __init int pxa3xx_cpufreq_init(struct cpufreq_policy *policy)
207+static int pxa3xx_cpufreq_init(struct cpufreq_policy *policy)
208208 {
209209 int ret = -EINVAL;
210210
arch/arm/mach-pxa/include/mach/mfp-pxa300.h+2−2
@@ -71,10 +71,10 @@ · 70 unmodified lines
7171 #define GPIO46_CI_DD_7 MFP_CFG_DRV(GPIO46, AF0, DS04X)
7272 #define GPIO47_CI_DD_8 MFP_CFG_DRV(GPIO47, AF1, DS04X)
7373 #define GPIO48_CI_DD_9 MFP_CFG_DRV(GPIO48, AF1, DS04X)
74−#define GPIO52_CI_HSYNC MFP_CFG_DRV(GPIO52, AF0, DS04X)
75−#define GPIO51_CI_VSYNC MFP_CFG_DRV(GPIO51, AF0, DS04X)
7674 #define GPIO49_CI_MCLK MFP_CFG_DRV(GPIO49, AF0, DS04X)
7775 #define GPIO50_CI_PCLK MFP_CFG_DRV(GPIO50, AF0, DS04X)
76+#define GPIO51_CI_HSYNC MFP_CFG_DRV(GPIO51, AF0, DS04X)
77+#define GPIO52_CI_VSYNC MFP_CFG_DRV(GPIO52, AF0, DS04X)
7878
7979 /* KEYPAD */
8080 #define GPIO3_KP_DKIN_6 MFP_CFG_LPM(GPIO3, AF2, FLOAT)
arch/arm/mach-s3c2410/include/mach/vmalloc.h+1−1
@@ -15,6 +15,6 @@ · 14 unmodified lines
1515 #ifndef __ASM_ARCH_VMALLOC_H
1616 #define __ASM_ARCH_VMALLOC_H
1717
18−#define VMALLOC_END (0xE0000000)
18+#define VMALLOC_END 0xE0000000UL
1919
2020 #endif /* __ASM_ARCH_VMALLOC_H */
arch/arm/mach-s3c64xx/include/mach/vmalloc.h+1−1
@@ -15,6 +15,6 @@ · 14 unmodified lines
1515 #ifndef __ASM_ARCH_VMALLOC_H
1616 #define __ASM_ARCH_VMALLOC_H
1717
18−#define VMALLOC_END (0xE0000000)
18+#define VMALLOC_END 0xE0000000UL
1919
2020 #endif /* __ASM_ARCH_VMALLOC_H */
arch/arm/mach-s5p6440/include/mach/vmalloc.h+1−1
@@ -12,6 +12,6 @@ · 11 unmodified lines
1212 #ifndef __ASM_ARCH_VMALLOC_H
1313 #define __ASM_ARCH_VMALLOC_H
1414
15−#define VMALLOC_END (0xE0000000)
15+#define VMALLOC_END 0xE0000000UL
1616
1717 #endif /* __ASM_ARCH_VMALLOC_H */
arch/arm/mach-s5p6442/include/mach/vmalloc.h+1−1
@@ -12,6 +12,6 @@ · 11 unmodified lines
1212 #ifndef __ASM_ARCH_VMALLOC_H
1313 #define __ASM_ARCH_VMALLOC_H
1414
15−#define VMALLOC_END (0xE0000000)
15+#define VMALLOC_END 0xE0000000UL
1616
1717 #endif /* __ASM_ARCH_VMALLOC_H */
arch/arm/mach-s5pv210/include/mach/vmalloc.h+1−1
@@ -17,6 +17,6 @@ · 16 unmodified lines
1717 #ifndef __ASM_ARCH_VMALLOC_H
1818 #define __ASM_ARCH_VMALLOC_H __FILE__
1919
20−#define VMALLOC_END (0xE0000000)
20+#define VMALLOC_END (0xE0000000UL)
2121
2222 #endif /* __ASM_ARCH_VMALLOC_H */
arch/arm/mach-s5pv310/clock.c+63−19
@@ -30,6 +30,16 @@ static struct clk clk_sclk_hdmi27m = { · 29 unmodified lines
3030 .rate = 27000000,
3131 };
3232
33+static int s5pv310_clksrc_mask_peril0_ctrl(struct clk *clk, int enable)
34+{
35+ return s5p_gatectrl(S5P_CLKSRC_MASK_PERIL0, clk, enable);
36+}
37+
38+static int s5pv310_clk_ip_peril_ctrl(struct clk *clk, int enable)
39+{
40+ return s5p_gatectrl(S5P_CLKGATE_IP_PERIL, clk, enable);
41+}
42+
3343 /* Core list of CMU_CPU side */
3444
3545 static struct clksrc_clk clk_mout_apll = {
@@ -39,6 +49,14 @@ static struct clksrc_clk clk_mout_apll = { · 3 unmodified lines
3949 },
4050 .sources = &clk_src_apll,
4151 .reg_src = { .reg = S5P_CLKSRC_CPU, .shift = 0, .size = 1 },
52+};
53+
54+static struct clksrc_clk clk_sclk_apll = {
55+ .clk = {
56+ .name = "sclk_apll",
57+ .id = -1,
58+ .parent = &clk_mout_apll.clk,
59+ },
4260 .reg_div = { .reg = S5P_CLKDIV_CPU, .shift = 24, .size = 3 },
4361 };
4462
@@ -61,7 +79,7 @@ static struct clksrc_clk clk_mout_mpll = { · 16 unmodified lines
6179 };
6280
6381 static struct clk *clkset_moutcore_list[] = {
64− [0] = &clk_mout_apll.clk,
82+ [0] = &clk_sclk_apll.clk,
6583 [1] = &clk_mout_mpll.clk,
6684 };
6785
@@ -154,7 +172,7 @@ static struct clksrc_clk clk_pclk_dbg = { · 86 unmodified lines
154172
155173 static struct clk *clkset_corebus_list[] = {
156174 [0] = &clk_mout_mpll.clk,
157− [1] = &clk_mout_apll.clk,
175+ [1] = &clk_sclk_apll.clk,
158176 };
159177
160178 static struct clksrc_sources clkset_mout_corebus = {
@@ -220,7 +238,7 @@ static struct clksrc_clk clk_pclk_acp = { · 59 unmodified lines
220238
221239 static struct clk *clkset_aclk_top_list[] = {
222240 [0] = &clk_mout_mpll.clk,
223− [1] = &clk_mout_apll.clk,
241+ [1] = &clk_sclk_apll.clk,
224242 };
225243
226244 static struct clksrc_sources clkset_aclk_200 = {
@@ -321,11 +339,6 @@ static struct clksrc_clk clk_sclk_vpll = { · 94 unmodified lines
321339 .reg_src = { .reg = S5P_CLKSRC_TOP0, .shift = 8, .size = 1 },
322340 };
323341
324−static int s5pv310_clk_ip_peril_ctrl(struct clk *clk, int enable)
325−{
326− return s5p_gatectrl(S5P_CLKGATE_IP_PERIL, clk, enable);
327−}
328−
329342 static struct clk init_clocks_disable[] = {
330343 {
331344 .name = "timers",
@@ -337,7 +350,37 @@ static struct clk init_clocks_disable[] = { · 5 unmodified lines
337350 };
338351
339352 static struct clk init_clocks[] = {
340− /* Nothing here yet */
353+ {
354+ .name = "uart",
355+ .id = 0,
356+ .enable = s5pv310_clk_ip_peril_ctrl,
357+ .ctrlbit = (1 << 0),
358+ }, {
359+ .name = "uart",
360+ .id = 1,
361+ .enable = s5pv310_clk_ip_peril_ctrl,
362+ .ctrlbit = (1 << 1),
363+ }, {
364+ .name = "uart",
365+ .id = 2,
366+ .enable = s5pv310_clk_ip_peril_ctrl,
367+ .ctrlbit = (1 << 2),
368+ }, {
369+ .name = "uart",
370+ .id = 3,
371+ .enable = s5pv310_clk_ip_peril_ctrl,
372+ .ctrlbit = (1 << 3),
373+ }, {
374+ .name = "uart",
375+ .id = 4,
376+ .enable = s5pv310_clk_ip_peril_ctrl,
377+ .ctrlbit = (1 << 4),
378+ }, {
379+ .name = "uart",
380+ .id = 5,
381+ .enable = s5pv310_clk_ip_peril_ctrl,
382+ .ctrlbit = (1 << 5),
383+ }
341384 };
342385
343386 static struct clk *clkset_group_list[] = {
@@ -359,8 +402,8 @@ static struct clksrc_clk clksrcs[] = { · 15 unmodified lines
359402 .clk = {
360403 .name = "uclk1",
361404 .id = 0,
405+ .enable = s5pv310_clksrc_mask_peril0_ctrl,
362406 .ctrlbit = (1 << 0),
363− .enable = s5pv310_clk_ip_peril_ctrl,
364407 },
365408 .sources = &clkset_group,
366409 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 0, .size = 4 },
@@ -369,8 +412,8 @@ static struct clksrc_clk clksrcs[] = { · 2 unmodified lines
369412 .clk = {
370413 .name = "uclk1",
371414 .id = 1,
372− .enable = s5pv310_clk_ip_peril_ctrl,
373− .ctrlbit = (1 << 1),
415+ .enable = s5pv310_clksrc_mask_peril0_ctrl,
416+ .ctrlbit = (1 << 4),
374417 },
375418 .sources = &clkset_group,
376419 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 4, .size = 4 },
@@ -379,8 +422,8 @@ static struct clksrc_clk clksrcs[] = { · 2 unmodified lines
379422 .clk = {
380423 .name = "uclk1",
381424 .id = 2,
382− .enable = s5pv310_clk_ip_peril_ctrl,
383− .ctrlbit = (1 << 2),
425+ .enable = s5pv310_clksrc_mask_peril0_ctrl,
426+ .ctrlbit = (1 << 8),
384427 },
385428 .sources = &clkset_group,
386429 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 8, .size = 4 },
@@ -389,8 +432,8 @@ static struct clksrc_clk clksrcs[] = { · 2 unmodified lines
389432 .clk = {
390433 .name = "uclk1",
391434 .id = 3,
392− .enable = s5pv310_clk_ip_peril_ctrl,
393− .ctrlbit = (1 << 3),
435+ .enable = s5pv310_clksrc_mask_peril0_ctrl,
436+ .ctrlbit = (1 << 12),
394437 },
395438 .sources = &clkset_group,
396439 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 12, .size = 4 },
@@ -399,7 +442,7 @@ static struct clksrc_clk clksrcs[] = { · 2 unmodified lines
399442 .clk = {
400443 .name = "sclk_pwm",
401444 .id = -1,
402− .enable = s5pv310_clk_ip_peril_ctrl,
445+ .enable = s5pv310_clksrc_mask_peril0_ctrl,
403446 .ctrlbit = (1 << 24),
404447 },
405448 .sources = &clkset_group,
@@ -411,6 +454,7 @@ static struct clksrc_clk clksrcs[] = { · 5 unmodified lines
411454 /* Clock initialization code */
412455 static struct clksrc_clk *sysclks[] = {
413456 &clk_mout_apll,
457+ &clk_sclk_apll,
414458 &clk_mout_epll,
415459 &clk_mout_mpll,
416460 &clk_moutcore,
@@ -470,11 +514,11 @@ void __init_or_cpufreq s5pv310_setup_clocks(void) · 53 unmodified lines
470514 apll = s5p_get_pll45xx(xtal, __raw_readl(S5P_APLL_CON0), pll_4508);
471515 mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON0), pll_4508);
472516 epll = s5p_get_pll46xx(xtal, __raw_readl(S5P_EPLL_CON0),
473− __raw_readl(S5P_EPLL_CON1), pll_4500);
517+ __raw_readl(S5P_EPLL_CON1), pll_4600);
474518
475519 vpllsrc = clk_get_rate(&clk_vpllsrc.clk);
476520 vpll = s5p_get_pll46xx(vpllsrc, __raw_readl(S5P_VPLL_CON0),
477− __raw_readl(S5P_VPLL_CON1), pll_4502);
521+ __raw_readl(S5P_VPLL_CON1), pll_4650);
478522
479523 clk_fout_apll.rate = apll;
480524 clk_fout_mpll.rate = mpll;
arch/arm/mach-s5pv310/cpu.c+10−0
@@ -45,6 +45,16 @@ static struct map_desc s5pv310_iodesc[] __initdata = { · 44 unmodified lines
4545 .pfn = __phys_to_pfn(S5PV310_PA_L2CC),
4646 .length = SZ_4K,
4747 .type = MT_DEVICE,
48+ }, {
49+ .virtual = (unsigned long)S5P_VA_SYSRAM,
50+ .pfn = __phys_to_pfn(S5PV310_PA_SYSRAM),
51+ .length = SZ_4K,
52+ .type = MT_DEVICE,
53+ }, {
54+ .virtual = (unsigned long)S5P_VA_CMU,
55+ .pfn = __phys_to_pfn(S5PV310_PA_CMU),
56+ .length = SZ_128K,
57+ .type = MT_DEVICE,
4858 },
4959 };
5060
arch/arm/mach-s5pv310/include/mach/irqs.h+7−4
@@ -15,12 +15,14 @@ · 14 unmodified lines
1515
1616 #include <plat/irqs.h>
1717
18−/* Private Peripheral Interrupt */
18+/* PPI: Private Peripheral Interrupt */
19+
1920 #define IRQ_PPI(x) S5P_IRQ(x+16)
2021
2122 #define IRQ_LOCALTIMER IRQ_PPI(13)
2223
23−/* Shared Peripheral Interrupt */
24+/* SPI: Shared Peripheral Interrupt */
25+
2426 #define IRQ_SPI(x) S5P_IRQ(x+32)
2527
2628 #define IRQ_EINT0 IRQ_SPI(40)
@@ -36,7 +38,7 @@ · 9 unmodified lines
3638 #define IRQ_PCIE IRQ_SPI(50)
3739 #define IRQ_SYSTEM_TIMER IRQ_SPI(51)
3840 #define IRQ_MFC IRQ_SPI(52)
39−#define IRQ_WTD IRQ_SPI(53)
41+#define IRQ_WDT IRQ_SPI(53)
4042 #define IRQ_AUDIO_SS IRQ_SPI(54)
4143 #define IRQ_AC97 IRQ_SPI(55)
4244 #define IRQ_SPDIF IRQ_SPI(56)
@@ -67,8 +69,9 @@ · 24 unmodified lines
6769 #define IRQ_IIC COMBINER_IRQ(27, 0)
6870
6971 /* Set the default NR_IRQS */
72+
7073 #define NR_IRQS COMBINER_IRQ(MAX_COMBINER_NR, 0)
7174
7275 #define MAX_COMBINER_NR 39
7376
74−#endif /* ASM_ARCH_IRQS_H */
77+#endif /* __ASM_ARCH_IRQS_H */
arch/arm/mach-s5pv310/include/mach/map.h+14−2
@@ -23,12 +23,16 @@ · 22 unmodified lines
2323
2424 #include <plat/map-s5p.h>
2525
26+#define S5PV310_PA_SYSRAM (0x02025000)
27+
2628 #define S5PV310_PA_CHIPID (0x10000000)
2729 #define S5P_PA_CHIPID S5PV310_PA_CHIPID
2830
2931 #define S5PV310_PA_SYSCON (0x10020000)
3032 #define S5P_PA_SYSCON S5PV310_PA_SYSCON
3133
34+#define S5PV310_PA_CMU (0x10030000)
35+
3236 #define S5PV310_PA_WATCHDOG (0x10060000)
3337
3438 #define S5PV310_PA_COMBINER (0x10448000)
@@ -39,8 +43,12 @@ · 4 unmodified lines
3943 #define S5PV310_PA_GIC_DIST (0x10501000)
4044 #define S5PV310_PA_L2CC (0x10502000)
4145
42−#define S5PV310_PA_GPIO (0x11000000)
43−#define S5P_PA_GPIO S5PV310_PA_GPIO
46+#define S5PV310_PA_GPIO1 (0x11400000)
47+#define S5PV310_PA_GPIO2 (0x11000000)
48+#define S5PV310_PA_GPIO3 (0x03860000)
49+#define S5P_PA_GPIO S5PV310_PA_GPIO1
50+
51+#define S5PV310_PA_HSMMC(x) (0x12510000 + ((x) * 0x10000))
4452
4553 #define S5PV310_PA_UART (0x13800000)
4654
@@ -63,6 +71,10 @@ · 16 unmodified lines
6371
6472 /* compatibiltiy defines. */
6573 #define S3C_PA_UART S5PV310_PA_UART
74+#define S3C_PA_HSMMC0 S5PV310_PA_HSMMC(0)
75+#define S3C_PA_HSMMC1 S5PV310_PA_HSMMC(1)
76+#define S3C_PA_HSMMC2 S5PV310_PA_HSMMC(2)
77+#define S3C_PA_HSMMC3 S5PV310_PA_HSMMC(3)
6678 #define S3C_PA_IIC S5PV310_PA_IIC0
6779 #define S3C_PA_WDT S5PV310_PA_WATCHDOG
6880
arch/arm/mach-s5pv310/include/mach/regs-clock.h+30−29
@@ -15,48 +15,49 @@ · 14 unmodified lines
1515
1616 #include <mach/map.h>
1717
18−#define S5P_CLKREG(x) (S3C_VA_SYS + (x))
18+#define S5P_CLKREG(x) (S5P_VA_CMU + (x))
1919
2020 #define S5P_INFORM0 S5P_CLKREG(0x800)
2121
22−#define S5P_EPLL_CON0 S5P_CLKREG(0x1C110)
23−#define S5P_EPLL_CON1 S5P_CLKREG(0x1C114)
24−#define S5P_VPLL_CON0 S5P_CLKREG(0x1C120)
25−#define S5P_VPLL_CON1 S5P_CLKREG(0x1C124)
22+#define S5P_EPLL_CON0 S5P_CLKREG(0x0C110)
23+#define S5P_EPLL_CON1 S5P_CLKREG(0x0C114)
24+#define S5P_VPLL_CON0 S5P_CLKREG(0x0C120)
25+#define S5P_VPLL_CON1 S5P_CLKREG(0x0C124)
2626
27−#define S5P_CLKSRC_TOP0 S5P_CLKREG(0x1C210)
28−#define S5P_CLKSRC_TOP1 S5P_CLKREG(0x1C214)
27+#define S5P_CLKSRC_TOP0 S5P_CLKREG(0x0C210)
28+#define S5P_CLKSRC_TOP1 S5P_CLKREG(0x0C214)
2929
30−#define S5P_CLKSRC_PERIL0 S5P_CLKREG(0x1C250)
30+#define S5P_CLKSRC_PERIL0 S5P_CLKREG(0x0C250)
3131
32−#define S5P_CLKDIV_TOP S5P_CLKREG(0x1C510)
32+#define S5P_CLKDIV_TOP S5P_CLKREG(0x0C510)
3333
34−#define S5P_CLKDIV_PERIL0 S5P_CLKREG(0x1C550)
35−#define S5P_CLKDIV_PERIL1 S5P_CLKREG(0x1C554)
36−#define S5P_CLKDIV_PERIL2 S5P_CLKREG(0x1C558)
37−#define S5P_CLKDIV_PERIL3 S5P_CLKREG(0x1C55C)
38−#define S5P_CLKDIV_PERIL4 S5P_CLKREG(0x1C560)
39−#define S5P_CLKDIV_PERIL5 S5P_CLKREG(0x1C564)
34+#define S5P_CLKDIV_PERIL0 S5P_CLKREG(0x0C550)
35+#define S5P_CLKDIV_PERIL1 S5P_CLKREG(0x0C554)
36+#define S5P_CLKDIV_PERIL2 S5P_CLKREG(0x0C558)
37+#define S5P_CLKDIV_PERIL3 S5P_CLKREG(0x0C55C)
38+#define S5P_CLKDIV_PERIL4 S5P_CLKREG(0x0C560)
39+#define S5P_CLKDIV_PERIL5 S5P_CLKREG(0x0C564)
4040
41−#define S5P_CLKGATE_IP_PERIL S5P_CLKREG(0x1C950)
41+#define S5P_CLKSRC_MASK_PERIL0 S5P_CLKREG(0x0C350)
4242
43−#define S5P_CLKSRC_CORE S5P_CLKREG(0x20200)
43+#define S5P_CLKGATE_IP_PERIL S5P_CLKREG(0x0C950)
4444
45−#define S5P_CLKDIV_CORE0 S5P_CLKREG(0x20500)
45+#define S5P_CLKSRC_CORE S5P_CLKREG(0x10200)
46+#define S5P_CLKDIV_CORE0 S5P_CLKREG(0x10500)
4647
47−#define S5P_APLL_LOCK S5P_CLKREG(0x24000)
48−#define S5P_MPLL_LOCK S5P_CLKREG(0x24004)
49−#define S5P_APLL_CON0 S5P_CLKREG(0x24100)
50−#define S5P_APLL_CON1 S5P_CLKREG(0x24104)
51−#define S5P_MPLL_CON0 S5P_CLKREG(0x24108)
52−#define S5P_MPLL_CON1 S5P_CLKREG(0x2410C)
48+#define S5P_APLL_LOCK S5P_CLKREG(0x14000)
49+#define S5P_MPLL_LOCK S5P_CLKREG(0x14004)
50+#define S5P_APLL_CON0 S5P_CLKREG(0x14100)
51+#define S5P_APLL_CON1 S5P_CLKREG(0x14104)
52+#define S5P_MPLL_CON0 S5P_CLKREG(0x14108)
53+#define S5P_MPLL_CON1 S5P_CLKREG(0x1410C)
5354
54−#define S5P_CLKSRC_CPU S5P_CLKREG(0x24200)
55−#define S5P_CLKMUX_STATCPU S5P_CLKREG(0x24400)
55+#define S5P_CLKSRC_CPU S5P_CLKREG(0x14200)
56+#define S5P_CLKMUX_STATCPU S5P_CLKREG(0x14400)
5657
57−#define S5P_CLKDIV_CPU S5P_CLKREG(0x24500)
58−#define S5P_CLKDIV_STATCPU S5P_CLKREG(0x24600)
58+#define S5P_CLKDIV_CPU S5P_CLKREG(0x14500)
59+#define S5P_CLKDIV_STATCPU S5P_CLKREG(0x14600)
5960
60−#define S5P_CLKGATE_SCLKCPU S5P_CLKREG(0x24800)
61+#define S5P_CLKGATE_SCLKCPU S5P_CLKREG(0x14800)
6162
6263 #endif /* __ASM_ARCH_REGS_CLOCK_H */
arch/arm/mach-s5pv310/include/mach/vmalloc.h+1−1
@@ -17,6 +17,6 @@ · 16 unmodified lines
1717 #ifndef __ASM_ARCH_VMALLOC_H
1818 #define __ASM_ARCH_VMALLOC_H __FILE__
1919
20−#define VMALLOC_END (0xF0000000)
20+#define VMALLOC_END (0xF0000000UL)
2121
2222 #endif /* __ASM_ARCH_VMALLOC_H */
arch/arm/mach-s5pv310/platsmp.c+1−1
@@ -187,6 +187,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) · 186 unmodified lines
187187 * until it receives a soft interrupt, and then the
188188 * secondary CPU branches to this address.
189189 */
190− __raw_writel(BSYM(virt_to_phys(s5pv310_secondary_startup)), S5P_INFORM0);
190+ __raw_writel(BSYM(virt_to_phys(s5pv310_secondary_startup)), S5P_VA_SYSRAM);
191191 }
192192 }
arch/arm/mach-shmobile/Makefile+1−1
@@ -3,7 +3,7 @@ · 2 unmodified lines
33 #
44
55 # Common objects
6−obj-y := timer.o console.o clock.o
6+obj-y := timer.o console.o clock.o pm_runtime.o
77
88 # CPU objects
99 obj-$(CONFIG_ARCH_SH7367) += setup-sh7367.o clock-sh7367.o intc-sh7367.o
arch/arm/mach-shmobile/board-ap4evb.c+41−15
@@ -25,6 +25,7 @@ · 24 unmodified lines
2525 #include <linux/platform_device.h>
2626 #include <linux/delay.h>
2727 #include <linux/mfd/sh_mobile_sdhi.h>
28+#include <linux/mfd/tmio.h>
2829 #include <linux/mmc/host.h>
2930 #include <linux/mtd/mtd.h>
3031 #include <linux/mtd/partitions.h>
@@ -39,6 +40,7 @@ · 8 unmodified lines
3940 #include <linux/sh_clk.h>
4041 #include <linux/gpio.h>
4142 #include <linux/input.h>
43+#include <linux/leds.h>
4244 #include <linux/input/sh_keysc.h>
4345 #include <linux/usb/r8a66597.h>
4446
@@ -307,6 +309,7 @@ static struct sh_mobile_sdhi_info sdhi1_info = { · 262 unmodified lines
307309 .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
308310 .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX,
309311 .tmio_ocr_mask = MMC_VDD_165_195,
312+ .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE,
310313 };
311314
312315 static struct resource sdhi1_resources[] = {
@@ -558,7 +561,7 @@ static struct resource fsi_resources[] = { · 245 unmodified lines
558561
559562 static struct platform_device fsi_device = {
560563 .name = "sh_fsi2",
561− .id = 0,
564+ .id = -1,
562565 .num_resources = ARRAY_SIZE(fsi_resources),
563566 .resource = fsi_resources,
564567 .dev = {
@@ -650,7 +653,44 @@ static struct platform_device hdmi_device = { · 85 unmodified lines
650653 },
651654 };
652655
656+static struct gpio_led ap4evb_leds[] = {
657+ {
658+ .name = "led4",
659+ .gpio = GPIO_PORT185,
660+ .default_state = LEDS_GPIO_DEFSTATE_ON,
661+ },
662+ {
663+ .name = "led2",
664+ .gpio = GPIO_PORT186,
665+ .default_state = LEDS_GPIO_DEFSTATE_ON,
666+ },
667+ {
668+ .name = "led3",
669+ .gpio = GPIO_PORT187,
670+ .default_state = LEDS_GPIO_DEFSTATE_ON,
671+ },
672+ {
673+ .name = "led1",
674+ .gpio = GPIO_PORT188,
675+ .default_state = LEDS_GPIO_DEFSTATE_ON,
676+ }
677+};
678+
679+static struct gpio_led_platform_data ap4evb_leds_pdata = {
680+ .num_leds = ARRAY_SIZE(ap4evb_leds),
681+ .leds = ap4evb_leds,
682+};
683+
684+static struct platform_device leds_device = {
685+ .name = "leds-gpio",
686+ .id = 0,
687+ .dev = {
688+ .platform_data = &ap4evb_leds_pdata,
689+ },
690+};
691+
653692 static struct platform_device *ap4evb_devices[] __initdata = {
693+ &leds_device,
654694 &nor_flash_device,
655695 &smc911x_device,
656696 &sdhi0_device,
@@ -840,20 +880,6 @@ static void __init ap4evb_init(void) · 183 unmodified lines
840880 gpio_request(GPIO_FN_CS5A, NULL);
841881 gpio_request(GPIO_FN_IRQ6_39, NULL);
842882
843− /* enable LED 1 - 4 */
844− gpio_request(GPIO_PORT185, NULL);
845− gpio_request(GPIO_PORT186, NULL);
846− gpio_request(GPIO_PORT187, NULL);
847− gpio_request(GPIO_PORT188, NULL);
848− gpio_direction_output(GPIO_PORT185, 1);
849− gpio_direction_output(GPIO_PORT186, 1);
850− gpio_direction_output(GPIO_PORT187, 1);
851− gpio_direction_output(GPIO_PORT188, 1);
852− gpio_export(GPIO_PORT185, 0);
853− gpio_export(GPIO_PORT186, 0);
854− gpio_export(GPIO_PORT187, 0);
855− gpio_export(GPIO_PORT188, 0);
856−
857883 /* enable Debug switch (S6) */
858884 gpio_request(GPIO_PORT32, NULL);
859885 gpio_request(GPIO_PORT33, NULL);
arch/arm/mach-shmobile/clock-sh7372.c+6−3
@@ -286,7 +286,6 @@ static struct clk_ops pllc2_clk_ops = { · 285 unmodified lines
286286
287287 struct clk pllc2_clk = {
288288 .ops = &pllc2_clk_ops,
289− .flags = CLK_ENABLE_ON_INIT,
290289 .parent = &extal1_div2_clk,
291290 .freq_table = pllc2_freq_table,
292291 .parent_table = pllc2_parent,
@@ -395,7 +394,7 @@ static struct clk div6_reparent_clks[DIV6_REPARENT_NR] = { · 102 unmodified lines
395394
396395 enum { MSTP001,
397396 MSTP131, MSTP130,
398− MSTP129, MSTP128,
397+ MSTP129, MSTP128, MSTP127, MSTP126,
399398 MSTP118, MSTP117, MSTP116,
400399 MSTP106, MSTP101, MSTP100,
401400 MSTP223,
@@ -413,6 +412,8 @@ static struct clk mstp_clks[MSTP_NR] = { · 11 unmodified lines
413412 [MSTP130] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 30, 0), /* VEU2 */
414413 [MSTP129] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 29, 0), /* VEU1 */
415414 [MSTP128] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 28, 0), /* VEU0 */
415+ [MSTP127] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 27, 0), /* CEU */
416+ [MSTP126] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 26, 0), /* CSI2 */
416417 [MSTP118] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 18, 0), /* DSITX */
417418 [MSTP117] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 17, 0), /* LCDC1 */
418419 [MSTP116] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR1, 16, 0), /* IIC0 */
@@ -428,7 +429,7 @@ static struct clk mstp_clks[MSTP_NR] = { · 9 unmodified lines
428429 [MSTP201] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 1, 0), /* SCIFA3 */
429430 [MSTP200] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 0, 0), /* SCIFA4 */
430431 [MSTP329] = MSTP(&r_clk, SMSTPCR3, 29, 0), /* CMT10 */
431− [MSTP328] = MSTP(&div6_clks[DIV6_SPU], SMSTPCR3, 28, CLK_ENABLE_ON_INIT), /* FSIA */
432+ [MSTP328] = MSTP(&div6_clks[DIV6_SPU], SMSTPCR3, 28, 0), /* FSIA */
432433 [MSTP323] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 23, 0), /* IIC1 */
433434 [MSTP322] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 22, 0), /* USB0 */
434435 [MSTP314] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 14, 0), /* SDHI0 */
@@ -498,6 +499,8 @@ static struct clk_lookup lookups[] = { · 63 unmodified lines
498499 CLKDEV_DEV_ID("uio_pdrv_genirq.3", &mstp_clks[MSTP130]), /* VEU2 */
499500 CLKDEV_DEV_ID("uio_pdrv_genirq.2", &mstp_clks[MSTP129]), /* VEU1 */
500501 CLKDEV_DEV_ID("uio_pdrv_genirq.1", &mstp_clks[MSTP128]), /* VEU0 */
502+ CLKDEV_DEV_ID("sh_mobile_ceu.0", &mstp_clks[MSTP127]), /* CEU */
503+ CLKDEV_DEV_ID("sh-mobile-csi2.0", &mstp_clks[MSTP126]), /* CSI2 */
501504 CLKDEV_DEV_ID("sh-mipi-dsi.0", &mstp_clks[MSTP118]), /* DSITX */
502505 CLKDEV_DEV_ID("sh_mobile_lcdc_fb.1", &mstp_clks[MSTP117]), /* LCDC1 */
503506 CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP116]), /* IIC0 */
arch/arm/mach-shmobile/clock.c+3−1
@@ -1,8 +1,10 @@
11 /*
2− * SH-Mobile Timer
2+ * SH-Mobile Clock Framework
33 *
44 * Copyright (C) 2010 Magnus Damm
55 *
6+ * Used together with arch/arm/common/clkdev.c and drivers/sh/clk.c.
7+ *
68 * This program is free software; you can redistribute it and/or modify
79 * it under the terms of the GNU General Public License as published by
810 * the Free Software Foundation; version 2 of the License.
arch/arm/mach-shmobile/pm_runtime.c+169−0
@@ -0,0 +1,169 @@
1+/*
2+ * arch/arm/mach-shmobile/pm_runtime.c
3+ *
4+ * Runtime PM support code for SuperH Mobile ARM
5+ *
6+ * Copyright (C) 2009-2010 Magnus Damm
7+ *
8+ * This file is subject to the terms and conditions of the GNU General Public
9+ * License. See the file "COPYING" in the main directory of this archive
10+ * for more details.
11+ */
12+
13+#include <linux/init.h>
14+#include <linux/kernel.h>
15+#include <linux/io.h>
16+#include <linux/pm_runtime.h>
17+#include <linux/platform_device.h>
18+#include <linux/clk.h>
19+#include <linux/sh_clk.h>
20+#include <linux/bitmap.h>
21+
22+#ifdef CONFIG_PM_RUNTIME
23+#define BIT_ONCE 0
24+#define BIT_ACTIVE 1
25+#define BIT_CLK_ENABLED 2
26+
27+struct pm_runtime_data {
28+ unsigned long flags;
29+ struct clk *clk;
30+};
31+
32+static void __devres_release(struct device *dev, void *res)
33+{
34+ struct pm_runtime_data *prd = res;
35+
36+ dev_dbg(dev, "__devres_release()\n");
37+
38+ if (test_bit(BIT_CLK_ENABLED, &prd->flags))
39+ clk_disable(prd->clk);
40+
41+ if (test_bit(BIT_ACTIVE, &prd->flags))
42+ clk_put(prd->clk);
43+}
44+
45+static struct pm_runtime_data *__to_prd(struct device *dev)
46+{
47+ return devres_find(dev, __devres_release, NULL, NULL);
48+}
49+
50+static void platform_pm_runtime_init(struct device *dev,
51+ struct pm_runtime_data *prd)
52+{
53+ if (prd && !test_and_set_bit(BIT_ONCE, &prd->flags)) {
54+ prd->clk = clk_get(dev, NULL);
55+ if (!IS_ERR(prd->clk)) {
56+ set_bit(BIT_ACTIVE, &prd->flags);
57+ dev_info(dev, "clocks managed by runtime pm\n");
58+ }
59+ }
60+}
61+
62+static void platform_pm_runtime_bug(struct device *dev,
63+ struct pm_runtime_data *prd)
64+{
65+ if (prd && !test_and_set_bit(BIT_ONCE, &prd->flags))
66+ dev_err(dev, "runtime pm suspend before resume\n");
67+}
68+
69+int platform_pm_runtime_suspend(struct device *dev)
70+{
71+ struct pm_runtime_data *prd = __to_prd(dev);
72+
73+ dev_dbg(dev, "platform_pm_runtime_suspend()\n");
74+
75+ platform_pm_runtime_bug(dev, prd);
76+
77+ if (prd && test_bit(BIT_ACTIVE, &prd->flags)) {
78+ clk_disable(prd->clk);
79+ clear_bit(BIT_CLK_ENABLED, &prd->flags);
80+ }
81+
82+ return 0;
83+}
84+
85+int platform_pm_runtime_resume(struct device *dev)
86+{
87+ struct pm_runtime_data *prd = __to_prd(dev);
88+
89+ dev_dbg(dev, "platform_pm_runtime_resume()\n");
90+
91+ platform_pm_runtime_init(dev, prd);
92+
93+ if (prd && test_bit(BIT_ACTIVE, &prd->flags)) {
94+ clk_enable(prd->clk);
95+ set_bit(BIT_CLK_ENABLED, &prd->flags);
96+ }
97+
98+ return 0;
99+}
100+
101+int platform_pm_runtime_idle(struct device *dev)
102+{
103+ /* suspend synchronously to disable clocks immediately */
104+ return pm_runtime_suspend(dev);
105+}
106+
107+static int platform_bus_notify(struct notifier_block *nb,
108+ unsigned long action, void *data)
109+{
110+ struct device *dev = data;
111+ struct pm_runtime_data *prd;
112+
113+ dev_dbg(dev, "platform_bus_notify() %ld !\n", action);
114+
115+ if (action == BUS_NOTIFY_BIND_DRIVER) {
116+ prd = devres_alloc(__devres_release, sizeof(*prd), GFP_KERNEL);
117+ if (prd)
118+ devres_add(dev, prd);
119+ else
120+ dev_err(dev, "unable to alloc memory for runtime pm\n");
121+ }
122+
123+ return 0;
124+}
125+
126+#else /* CONFIG_PM_RUNTIME */
127+
128+static int platform_bus_notify(struct notifier_block *nb,
129+ unsigned long action, void *data)
130+{
131+ struct device *dev = data;
132+ struct clk *clk;
133+
134+ dev_dbg(dev, "platform_bus_notify() %ld !\n", action);
135+
136+ switch (action) {
137+ case BUS_NOTIFY_BIND_DRIVER:
138+ clk = clk_get(dev, NULL);
139+ if (!IS_ERR(clk)) {
140+ clk_enable(clk);
141+ clk_put(clk);
142+ dev_info(dev, "runtime pm disabled, clock forced on\n");
143+ }
144+ break;
145+ case BUS_NOTIFY_UNBOUND_DRIVER:
146+ clk = clk_get(dev, NULL);
147+ if (!IS_ERR(clk)) {
148+ clk_disable(clk);
149+ clk_put(clk);
150+ dev_info(dev, "runtime pm disabled, clock forced off\n");
151+ }
152+ break;
153+ }
154+
155+ return 0;
156+}
157+
158+#endif /* CONFIG_PM_RUNTIME */
159+
160+static struct notifier_block platform_bus_notifier = {
161+ .notifier_call = platform_bus_notify
162+};
163+
164+static int __init sh_pm_runtime_init(void)
165+{
166+ bus_register_notifier(&platform_bus_type, &platform_bus_notifier);
167+ return 0;
168+}
169+core_initcall(sh_pm_runtime_init);
arch/arm/mach-tegra/board-harmony.c+0−2
@@ -91,10 +91,8 @@ static void __init tegra_harmony_fixup(struct machine_desc *desc, · 90 unmodified lines
9191 {
9292 mi->nr_banks = 2;
9393 mi->bank[0].start = PHYS_OFFSET;
94− mi->bank[0].node = PHYS_TO_NID(PHYS_OFFSET);
9594 mi->bank[0].size = 448 * SZ_1M;
9695 mi->bank[1].start = SZ_512M;
97− mi->bank[1].node = PHYS_TO_NID(SZ_512M);
9896 mi->bank[1].size = SZ_512M;
9997 }
10098
arch/arm/mach-tegra/include/mach/vmalloc.h+1−1
@@ -23,6 +23,6 @@ · 22 unmodified lines
2323
2424 #include <asm/sizes.h>
2525
26−#define VMALLOC_END 0xFE000000
26+#define VMALLOC_END 0xFE000000UL
2727
2828 #endif
arch/arm/mm/Kconfig+1−1
@@ -398,7 +398,7 @@ config CPU_V6 · 397 unmodified lines
398398 # ARMv6k
399399 config CPU_32v6K
400400 bool "Support ARM V6K processor extensions" if !SMP
401− depends on CPU_V6
401+ depends on CPU_V6 || CPU_V7
402402 default y if SMP && !(ARCH_MX3 || ARCH_OMAP2)
403403 help
404404 Say Y here if your ARMv6 processor supports the 'K' extension.
arch/arm/mm/dma-mapping.c+2−0
@@ -229,6 +229,8 @@ __dma_alloc_remap(struct page *page, size_t size, gfp_t gfp, pgprot_t prot) · 228 unmodified lines
229229 }
230230 } while (size -= PAGE_SIZE);
231231
232+ dsb();
233+
232234 return (void *)c->vm_start;
233235 }
234236 return NULL;
arch/arm/plat-mxc/Kconfig+1−0
@@ -43,6 +43,7 @@ config ARCH_MXC91231 · 42 unmodified lines
4343 config ARCH_MX5
4444 bool "MX5-based"
4545 select CPU_V7
46+ select ARM_L1_CACHE_SHIFT_6
4647 help
4748 This enables support for systems based on the Freescale i.MX51 family
4849
arch/arm/plat-mxc/include/mach/eukrea-baseboards.h+2−2
@@ -37,9 +37,9 @@ · 36 unmodified lines
3737 * mach-mx5/eukrea_mbimx51-baseboard.c for cpuimx51
3838 */
3939
40−extern void eukrea_mbimx25_baseboard_init(void);
40+extern void eukrea_mbimxsd25_baseboard_init(void);
4141 extern void eukrea_mbimx27_baseboard_init(void);
42−extern void eukrea_mbimx35_baseboard_init(void);
42+extern void eukrea_mbimxsd35_baseboard_init(void);
4343 extern void eukrea_mbimx51_baseboard_init(void);
4444
4545 #endif
arch/arm/plat-mxc/tzic.c+3−2
@@ -164,8 +164,9 @@ int tzic_enable_wake(int is_idle) · 163 unmodified lines
164164 return -EAGAIN;
165165
166166 for (i = 0; i < 4; i++) {
167− v = is_idle ? __raw_readl(TZIC_ENSET0(i)) : wakeup_intr[i];
168− __raw_writel(v, TZIC_WAKEUP0(i));
167+ v = is_idle ? __raw_readl(tzic_base + TZIC_ENSET0(i)) :
168+ wakeup_intr[i];
169+ __raw_writel(v, tzic_base + TZIC_WAKEUP0(i));
169170 }
170171
171172 return 0;
arch/arm/plat-omap/include/plat/smp.h+0−7
@@ -19,13 +19,6 @@ · 18 unmodified lines
1919
2020 #include <asm/hardware/gic.h>
2121
22−/*
23− * set_event() is used to wake up secondary core from wfe using sev. ROM
24− * code puts the second core into wfe(standby).
25− *
26− */
27−#define set_event() __asm__ __volatile__ ("sev" : : : "memory")
28−
2922 /* Needed for secondary core boot */
3023 extern void omap_secondary_startup(void);
3124 extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask);
arch/arm/plat-pxa/pwm.c+1−1
@@ -176,7 +176,7 @@ static inline void __add_pwm(struct pwm_device *pwm) · 175 unmodified lines
176176
177177 static int __devinit pwm_probe(struct platform_device *pdev)
178178 {
179− struct platform_device_id *id = platform_get_device_id(pdev);
179+ const struct platform_device_id *id = platform_get_device_id(pdev);
180180 struct pwm_device *pwm, *secondary = NULL;
181181 struct resource *r;
182182 int ret = 0;
arch/arm/plat-s5p/include/plat/map-s5p.h+2−0
@@ -17,6 +17,7 @@ · 16 unmodified lines
1717 #define S5P_VA_GPIO S3C_ADDR(0x00500000)
1818 #define S5P_VA_SYSTIMER S3C_ADDR(0x01200000)
1919 #define S5P_VA_SROMC S3C_ADDR(0x01100000)
20+#define S5P_VA_SYSRAM S3C_ADDR(0x01180000)
2021
2122 #define S5P_VA_COMBINER_BASE S3C_ADDR(0x00600000)
2223 #define S5P_VA_COMBINER(x) (S5P_VA_COMBINER_BASE + ((x) >> 2) * 0x10)
@@ -29,6 +30,7 @@ · 6 unmodified lines
2930 #define S5P_VA_GIC_DIST S5P_VA_COREPERI(0x1000)
3031
3132 #define S5P_VA_L2CC S3C_ADDR(0x00900000)
33+#define S5P_VA_CMU S3C_ADDR(0x00920000)
3234
3335 #define S5P_VA_UART(x) (S3C_VA_UART + ((x) * S3C_UART_OFFSET))
3436 #define S5P_VA_UART0 S5P_VA_UART(0)
arch/arm/tools/mach-types+96−2
@@ -12,7 +12,7 @@ · 11 unmodified lines
1212 #
1313 # http://www.arm.linux.org.uk/developer/machines/?action=new
1414 #
15−# Last update: Mon Jul 12 21:10:14 2010
15+# Last update: Thu Sep 9 22:43:01 2010
1616 #
1717 # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
1818 #
@@ -2622,7 +2622,7 @@ kraken MACH_KRAKEN KRAKEN 2634 · 2603 unmodified lines
26222622 gw2388 MACH_GW2388 GW2388 2635
26232623 jadecpu MACH_JADECPU JADECPU 2636
26242624 carlisle MACH_CARLISLE CARLISLE 2637
2625−lux_sf9 MACH_LUX_SFT9 LUX_SFT9 2638
2625+lux_sf9 MACH_LUX_SF9 LUX_SF9 2638
26262626 nemid_tb MACH_NEMID_TB NEMID_TB 2639
26272627 terrier MACH_TERRIER TERRIER 2640
26282628 turbot MACH_TURBOT TURBOT 2641
@@ -2950,3 +2950,97 @@ davinci_dm365_dvr MACH_DAVINCI_DM365_DVR DAVINCI_DM365_DVR 2963 · 321 unmodified lines
29502950 netviz MACH_NETVIZ NETVIZ 2964
29512951 flexibity MACH_FLEXIBITY FLEXIBITY 2965
29522952 wlan_computer MACH_WLAN_COMPUTER WLAN_COMPUTER 2966
2953+lpc24xx MACH_LPC24XX LPC24XX 2967
2954+spica MACH_SPICA SPICA 2968
2955+gpsdisplay MACH_GPSDISPLAY GPSDISPLAY 2969
2956+bipnet MACH_BIPNET BIPNET 2970
2957+overo_ctu_inertial MACH_OVERO_CTU_INERTIAL OVERO_CTU_INERTIAL 2971
2958+davinci_dm355_mmm MACH_DAVINCI_DM355_MMM DAVINCI_DM355_MMM 2972
2959+pc9260_v2 MACH_PC9260_V2 PC9260_V2 2973
2960+ptx7545 MACH_PTX7545 PTX7545 2974
2961+tm_efdc MACH_TM_EFDC TM_EFDC 2975
2962+omap3_waldo1 MACH_OMAP3_WALDO1 OMAP3_WALDO1 2977
2963+flyer MACH_FLYER FLYER 2978
2964+tornado3240 MACH_TORNADO3240 TORNADO3240 2979
2965+soli_01 MACH_SOLI_01 SOLI_01 2980
2966+omapl138_europalc MACH_OMAPL138_EUROPALC OMAPL138_EUROPALC 2981
2967+helios_v1 MACH_HELIOS_V1 HELIOS_V1 2982
2968+netspace_lite_v2 MACH_NETSPACE_LITE_V2 NETSPACE_LITE_V2 2983
2969+ssc MACH_SSC SSC 2984
2970+premierwave_en MACH_PREMIERWAVE_EN PREMIERWAVE_EN 2985
2971+wasabi MACH_WASABI WASABI 2986
2972+vivow MACH_VIVOW VIVOW 2987
2973+mx50_rdp MACH_MX50_RDP MX50_RDP 2988
2974+universal MACH_UNIVERSAL UNIVERSAL 2989
2975+real6410 MACH_REAL6410 REAL6410 2990
2976+spx_sakura MACH_SPX_SAKURA SPX_SAKURA 2991
2977+ij3k_2440 MACH_IJ3K_2440 IJ3K_2440 2992
2978+omap3_bc10 MACH_OMAP3_BC10 OMAP3_BC10 2993
2979+thebe MACH_THEBE THEBE 2994
2980+rv082 MACH_RV082 RV082 2995
2981+armlguest MACH_ARMLGUEST ARMLGUEST 2996
2982+tjinc1000 MACH_TJINC1000 TJINC1000 2997
2983+dockstar MACH_DOCKSTAR DOCKSTAR 2998
2984+ax8008 MACH_AX8008 AX8008 2999
2985+gnet_sgce MACH_GNET_SGCE GNET_SGCE 3000
2986+pxwnas_500_1000 MACH_PXWNAS_500_1000 PXWNAS_500_1000 3001
2987+ea20 MACH_EA20 EA20 3002
2988+awm2 MACH_AWM2 AWM2 3003
2989+ti8148evm MACH_TI8148EVM TI8148EVM 3004
2990+tegra_seaboard MACH_TEGRA_SEABOARD TEGRA_SEABOARD 3005
2991+linkstation_chlv2 MACH_LINKSTATION_CHLV2 LINKSTATION_CHLV2 3006
2992+tera_pro2_rack MACH_TERA_PRO2_RACK TERA_PRO2_RACK 3007
2993+rubys MACH_RUBYS RUBYS 3008
2994+aquarius MACH_AQUARIUS AQUARIUS 3009
2995+mx53_ard MACH_MX53_ARD MX53_ARD 3010
2996+mx53_smd MACH_MX53_SMD MX53_SMD 3011
2997+lswxl MACH_LSWXL LSWXL 3012
2998+dove_avng_v3 MACH_DOVE_AVNG_V3 DOVE_AVNG_V3 3013
2999+sdi_ess_9263 MACH_SDI_ESS_9263 SDI_ESS_9263 3014
3000+jocpu550 MACH_JOCPU550 JOCPU550 3015
3001+msm8x60_rumi3 MACH_MSM8X60_RUMI3 MSM8X60_RUMI3 3016
3002+msm8x60_ffa MACH_MSM8X60_FFA MSM8X60_FFA 3017
3003+yanomami MACH_YANOMAMI YANOMAMI 3018
3004+gta04 MACH_GTA04 GTA04 3019
3005+cm_a510 MACH_CM_A510 CM_A510 3020
3006+omap3_rfs200 MACH_OMAP3_RFS200 OMAP3_RFS200 3021
3007+kx33xx MACH_KX33XX KX33XX 3022
3008+ptx7510 MACH_PTX7510 PTX7510 3023
3009+top9000 MACH_TOP9000 TOP9000 3024
3010+teenote MACH_TEENOTE TEENOTE 3025
3011+ts3 MACH_TS3 TS3 3026
3012+a0 MACH_A0 A0 3027
3013+fsm9xxx_surf MACH_FSM9XXX_SURF FSM9XXX_SURF 3028
3014+fsm9xxx_ffa MACH_FSM9XXX_FFA FSM9XXX_FFA 3029
3015+frrhwcdma60w MACH_FRRHWCDMA60W FRRHWCDMA60W 3030
3016+remus MACH_REMUS REMUS 3031
3017+at91cap7xdk MACH_AT91CAP7XDK AT91CAP7XDK 3032
3018+at91cap7stk MACH_AT91CAP7STK AT91CAP7STK 3033
3019+kt_sbc_sam9_1 MACH_KT_SBC_SAM9_1 KT_SBC_SAM9_1 3034
3020+oratisrouter MACH_ORATISROUTER ORATISROUTER 3035
3021+armada_xp_db MACH_ARMADA_XP_DB ARMADA_XP_DB 3036
3022+spdm MACH_SPDM SPDM 3037
3023+gtib MACH_GTIB GTIB 3038
3024+dgm3240 MACH_DGM3240 DGM3240 3039
3025+atlas_i_lpe MACH_ATLAS_I_LPE ATLAS_I_LPE 3040
3026+htcmega MACH_HTCMEGA HTCMEGA 3041
3027+tricorder MACH_TRICORDER TRICORDER 3042
3028+tx28 MACH_TX28 TX28 3043
3029+bstbrd MACH_BSTBRD BSTBRD 3044
3030+pwb3090 MACH_PWB3090 PWB3090 3045
3031+idea6410 MACH_IDEA6410 IDEA6410 3046
3032+qbc9263 MACH_QBC9263 QBC9263 3047
3033+borabora MACH_BORABORA BORABORA 3048
3034+valdez MACH_VALDEZ VALDEZ 3049
3035+ls9g20 MACH_LS9G20 LS9G20 3050
3036+mios_v1 MACH_MIOS_V1 MIOS_V1 3051
3037+s5pc110_crespo MACH_S5PC110_CRESPO S5PC110_CRESPO 3052
3038+controltek9g20 MACH_CONTROLTEK9G20 CONTROLTEK9G20 3053
3039+tin307 MACH_TIN307 TIN307 3054
3040+tin510 MACH_TIN510 TIN510 3055
3041+bluecheese MACH_BLUECHEESE BLUECHEESE 3057
3042+tem3x30 MACH_TEM3X30 TEM3X30 3058
3043+harvest_desoto MACH_HARVEST_DESOTO HARVEST_DESOTO 3059
3044+msm8x60_qrdc MACH_MSM8X60_QRDC MSM8X60_QRDC 3060
3045+spear900 MACH_SPEAR900 SPEAR900 3061
3046+pcontrol_g20 MACH_PCONTROL_G20 PCONTROL_G20 3062
arch/blackfin/include/asm/bfin_sport.h+0−6
@@ -115,12 +115,6 @@ struct sport_register { · 114 unmodified lines
115115
116116 #endif
117117
118−/* Workaround defBF*.h SPORT MMRs till they get cleansed */
119−#undef DTYPE_NORM
120−#undef SLEN
121−#undef SP_WOFF
122−#undef SP_WSIZE
123−
124118 /* SPORT_TCR1 Masks */
125119 #define TSPEN 0x0001 /* TX enable */
126120 #define ITCLK 0x0002 /* Internal TX Clock Select */
arch/blackfin/mach-bf518/include/mach/defBF51x_base.h+0−82
@@ -913,88 +913,6 @@ · 912 unmodified lines
913913 #define PH6 0x0040
914914 #define PH7 0x0080
915915
916−
917−/* ******************* SERIAL PORT MASKS **************************************/
918−/* SPORTx_TCR1 Masks */
919−#define TSPEN 0x0001 /* Transmit Enable */
920−#define ITCLK 0x0002 /* Internal Transmit Clock Select */
921−#define DTYPE_NORM 0x0004 /* Data Format Normal */
922−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
923−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
924−#define TLSBIT 0x0010 /* Transmit Bit Order */
925−#define ITFS 0x0200 /* Internal Transmit Frame Sync Select */
926−#define TFSR 0x0400 /* Transmit Frame Sync Required Select */
927−#define DITFS 0x0800 /* Data-Independent Transmit Frame Sync Select */
928−#define LTFS 0x1000 /* Low Transmit Frame Sync Select */
929−#define LATFS 0x2000 /* Late Transmit Frame Sync Select */
930−#define TCKFE 0x4000 /* Clock Falling Edge Select */
931−
932−/* SPORTx_TCR2 Masks and Macro */
933−#define SLEN(x) ((x)&0x1F) /* SPORT TX Word Length (2 - 31) */
934−#define TXSE 0x0100 /* TX Secondary Enable */
935−#define TSFSE 0x0200 /* Transmit Stereo Frame Sync Enable */
936−#define TRFST 0x0400 /* Left/Right Order (1 = Right Channel 1st) */
937−
938−/* SPORTx_RCR1 Masks */
939−#define RSPEN 0x0001 /* Receive Enable */
940−#define IRCLK 0x0002 /* Internal Receive Clock Select */
941−#define DTYPE_NORM 0x0004 /* Data Format Normal */
942−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
943−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
944−#define RLSBIT 0x0010 /* Receive Bit Order */
945−#define IRFS 0x0200 /* Internal Receive Frame Sync Select */
946−#define RFSR 0x0400 /* Receive Frame Sync Required Select */
947−#define LRFS 0x1000 /* Low Receive Frame Sync Select */
948−#define LARFS 0x2000 /* Late Receive Frame Sync Select */
949−#define RCKFE 0x4000 /* Clock Falling Edge Select */
950−
951−/* SPORTx_RCR2 Masks */
952−#define SLEN(x) ((x)&0x1F) /* SPORT RX Word Length (2 - 31) */
953−#define RXSE 0x0100 /* RX Secondary Enable */
954−#define RSFSE 0x0200 /* RX Stereo Frame Sync Enable */
955−#define RRFST 0x0400 /* Right-First Data Order */
956−
957−/* SPORTx_STAT Masks */
958−#define RXNE 0x0001 /* Receive FIFO Not Empty Status */
959−#define RUVF 0x0002 /* Sticky Receive Underflow Status */
960−#define ROVF 0x0004 /* Sticky Receive Overflow Status */
961−#define TXF 0x0008 /* Transmit FIFO Full Status */
962−#define TUVF 0x0010 /* Sticky Transmit Underflow Status */
963−#define TOVF 0x0020 /* Sticky Transmit Overflow Status */
964−#define TXHRE 0x0040 /* Transmit Hold Register Empty */
965−
966−/* SPORTx_MCMC1 Macros */
967−#define SP_WOFF(x) ((x) & 0x3FF) /* Multichannel Window Offset Field */
968−
969−/* Only use WSIZE Macro With Logic OR While Setting Lower Order Bits */
970−#define SP_WSIZE(x) (((((x)>>0x3)-1)&0xF) << 0xC) /* Multichannel Window Size = (x/8)-1 */
971−
972−/* SPORTx_MCMC2 Masks */
973−#define REC_BYPASS 0x0000 /* Bypass Mode (No Clock Recovery) */
974−#define REC_2FROM4 0x0002 /* Recover 2 MHz Clock from 4 MHz Clock */
975−#define REC_8FROM16 0x0003 /* Recover 8 MHz Clock from 16 MHz Clock */
976−#define MCDTXPE 0x0004 /* Multichannel DMA Transmit Packing */
977−#define MCDRXPE 0x0008 /* Multichannel DMA Receive Packing */
978−#define MCMEN 0x0010 /* Multichannel Frame Mode Enable */
979−#define FSDR 0x0080 /* Multichannel Frame Sync to Data Relationship */
980−#define MFD_0 0x0000 /* Multichannel Frame Delay = 0 */
981−#define MFD_1 0x1000 /* Multichannel Frame Delay = 1 */
982−#define MFD_2 0x2000 /* Multichannel Frame Delay = 2 */
983−#define MFD_3 0x3000 /* Multichannel Frame Delay = 3 */
984−#define MFD_4 0x4000 /* Multichannel Frame Delay = 4 */
985−#define MFD_5 0x5000 /* Multichannel Frame Delay = 5 */
986−#define MFD_6 0x6000 /* Multichannel Frame Delay = 6 */
987−#define MFD_7 0x7000 /* Multichannel Frame Delay = 7 */
988−#define MFD_8 0x8000 /* Multichannel Frame Delay = 8 */
989−#define MFD_9 0x9000 /* Multichannel Frame Delay = 9 */
990−#define MFD_10 0xA000 /* Multichannel Frame Delay = 10 */
991−#define MFD_11 0xB000 /* Multichannel Frame Delay = 11 */
992−#define MFD_12 0xC000 /* Multichannel Frame Delay = 12 */
993−#define MFD_13 0xD000 /* Multichannel Frame Delay = 13 */
994−#define MFD_14 0xE000 /* Multichannel Frame Delay = 14 */
995−#define MFD_15 0xF000 /* Multichannel Frame Delay = 15 */
996−
997−
998916 /* ********************* ASYNCHRONOUS MEMORY CONTROLLER MASKS *************************/
999917 /* EBIU_AMGCTL Masks */
1000918 #define AMCKEN 0x0001 /* Enable CLKOUT */
arch/blackfin/mach-bf527/boards/cm_bf527.c+0−1
@@ -145,7 +145,6 @@ static struct mtd_partition partition_info[] = { · 144 unmodified lines
145145 };
146146
147147 static struct bf5xx_nand_platform bf5xx_nand_platform = {
148− .page_size = NFC_PG_SIZE_256,
149148 .data_width = NFC_NWIDTH_8,
150149 .partitions = partition_info,
151150 .nr_partitions = ARRAY_SIZE(partition_info),
arch/blackfin/mach-bf527/boards/ezbrd.c+0−1
@@ -149,7 +149,6 @@ static struct mtd_partition partition_info[] = { · 148 unmodified lines
149149 };
150150
151151 static struct bf5xx_nand_platform bf5xx_nand_platform = {
152− .page_size = NFC_PG_SIZE_256,
153152 .data_width = NFC_NWIDTH_8,
154153 .partitions = partition_info,
155154 .nr_partitions = ARRAY_SIZE(partition_info),
arch/blackfin/mach-bf527/boards/ezkit.c+0−1
@@ -234,7 +234,6 @@ static struct mtd_partition partition_info[] = { · 233 unmodified lines
234234 };
235235
236236 static struct bf5xx_nand_platform bf5xx_nand_platform = {
237− .page_size = NFC_PG_SIZE_256,
238237 .data_width = NFC_NWIDTH_8,
239238 .partitions = partition_info,
240239 .nr_partitions = ARRAY_SIZE(partition_info),
arch/blackfin/mach-bf527/include/mach/defBF52x_base.h+0−82
@@ -922,88 +922,6 @@ · 921 unmodified lines
922922 #define PH14 0x4000
923923 #define PH15 0x8000
924924
925−
926−/* ******************* SERIAL PORT MASKS **************************************/
927−/* SPORTx_TCR1 Masks */
928−#define TSPEN 0x0001 /* Transmit Enable */
929−#define ITCLK 0x0002 /* Internal Transmit Clock Select */
930−#define DTYPE_NORM 0x0004 /* Data Format Normal */
931−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
932−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
933−#define TLSBIT 0x0010 /* Transmit Bit Order */
934−#define ITFS 0x0200 /* Internal Transmit Frame Sync Select */
935−#define TFSR 0x0400 /* Transmit Frame Sync Required Select */
936−#define DITFS 0x0800 /* Data-Independent Transmit Frame Sync Select */
937−#define LTFS 0x1000 /* Low Transmit Frame Sync Select */
938−#define LATFS 0x2000 /* Late Transmit Frame Sync Select */
939−#define TCKFE 0x4000 /* Clock Falling Edge Select */
940−
941−/* SPORTx_TCR2 Masks and Macro */
942−#define SLEN(x) ((x)&0x1F) /* SPORT TX Word Length (2 - 31) */
943−#define TXSE 0x0100 /* TX Secondary Enable */
944−#define TSFSE 0x0200 /* Transmit Stereo Frame Sync Enable */
945−#define TRFST 0x0400 /* Left/Right Order (1 = Right Channel 1st) */
946−
947−/* SPORTx_RCR1 Masks */
948−#define RSPEN 0x0001 /* Receive Enable */
949−#define IRCLK 0x0002 /* Internal Receive Clock Select */
950−#define DTYPE_NORM 0x0004 /* Data Format Normal */
951−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
952−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
953−#define RLSBIT 0x0010 /* Receive Bit Order */
954−#define IRFS 0x0200 /* Internal Receive Frame Sync Select */
955−#define RFSR 0x0400 /* Receive Frame Sync Required Select */
956−#define LRFS 0x1000 /* Low Receive Frame Sync Select */
957−#define LARFS 0x2000 /* Late Receive Frame Sync Select */
958−#define RCKFE 0x4000 /* Clock Falling Edge Select */
959−
960−/* SPORTx_RCR2 Masks */
961−#define SLEN(x) ((x)&0x1F) /* SPORT RX Word Length (2 - 31) */
962−#define RXSE 0x0100 /* RX Secondary Enable */
963−#define RSFSE 0x0200 /* RX Stereo Frame Sync Enable */
964−#define RRFST 0x0400 /* Right-First Data Order */
965−
966−/* SPORTx_STAT Masks */
967−#define RXNE 0x0001 /* Receive FIFO Not Empty Status */
968−#define RUVF 0x0002 /* Sticky Receive Underflow Status */
969−#define ROVF 0x0004 /* Sticky Receive Overflow Status */
970−#define TXF 0x0008 /* Transmit FIFO Full Status */
971−#define TUVF 0x0010 /* Sticky Transmit Underflow Status */
972−#define TOVF 0x0020 /* Sticky Transmit Overflow Status */
973−#define TXHRE 0x0040 /* Transmit Hold Register Empty */
974−
975−/* SPORTx_MCMC1 Macros */
976−#define SP_WOFF(x) ((x) & 0x3FF) /* Multichannel Window Offset Field */
977−
978−/* Only use WSIZE Macro With Logic OR While Setting Lower Order Bits */
979−#define SP_WSIZE(x) (((((x)>>0x3)-1)&0xF) << 0xC) /* Multichannel Window Size = (x/8)-1 */
980−
981−/* SPORTx_MCMC2 Masks */
982−#define REC_BYPASS 0x0000 /* Bypass Mode (No Clock Recovery) */
983−#define REC_2FROM4 0x0002 /* Recover 2 MHz Clock from 4 MHz Clock */
984−#define REC_8FROM16 0x0003 /* Recover 8 MHz Clock from 16 MHz Clock */
985−#define MCDTXPE 0x0004 /* Multichannel DMA Transmit Packing */
986−#define MCDRXPE 0x0008 /* Multichannel DMA Receive Packing */
987−#define MCMEN 0x0010 /* Multichannel Frame Mode Enable */
988−#define FSDR 0x0080 /* Multichannel Frame Sync to Data Relationship */
989−#define MFD_0 0x0000 /* Multichannel Frame Delay = 0 */
990−#define MFD_1 0x1000 /* Multichannel Frame Delay = 1 */
991−#define MFD_2 0x2000 /* Multichannel Frame Delay = 2 */
992−#define MFD_3 0x3000 /* Multichannel Frame Delay = 3 */
993−#define MFD_4 0x4000 /* Multichannel Frame Delay = 4 */
994−#define MFD_5 0x5000 /* Multichannel Frame Delay = 5 */
995−#define MFD_6 0x6000 /* Multichannel Frame Delay = 6 */
996−#define MFD_7 0x7000 /* Multichannel Frame Delay = 7 */
997−#define MFD_8 0x8000 /* Multichannel Frame Delay = 8 */
998−#define MFD_9 0x9000 /* Multichannel Frame Delay = 9 */
999−#define MFD_10 0xA000 /* Multichannel Frame Delay = 10 */
1000−#define MFD_11 0xB000 /* Multichannel Frame Delay = 11 */
1001−#define MFD_12 0xC000 /* Multichannel Frame Delay = 12 */
1002−#define MFD_13 0xD000 /* Multichannel Frame Delay = 13 */
1003−#define MFD_14 0xE000 /* Multichannel Frame Delay = 14 */
1004−#define MFD_15 0xF000 /* Multichannel Frame Delay = 15 */
1005−
1006−
1007925 /* ********************* ASYNCHRONOUS MEMORY CONTROLLER MASKS *************************/
1008926 /* EBIU_AMGCTL Masks */
1009927 #define AMCKEN 0x0001 /* Enable CLKOUT */
arch/blackfin/mach-bf533/include/mach/defBF532.h+0−92
@@ -509,98 +509,6 @@ · 508 unmodified lines
509509 #define IREN_P 0x01
510510 #define UCEN_P 0x00
511511
512−/* ********** SERIAL PORT MASKS ********************** */
513−
514−/* SPORTx_TCR1 Masks */
515−#define TSPEN 0x0001 /* TX enable */
516−#define ITCLK 0x0002 /* Internal TX Clock Select */
517−#define TDTYPE 0x000C /* TX Data Formatting Select */
518−#define DTYPE_NORM 0x0000 /* Data Format Normal */
519−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
520−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
521−#define TLSBIT 0x0010 /* TX Bit Order */
522−#define ITFS 0x0200 /* Internal TX Frame Sync Select */
523−#define TFSR 0x0400 /* TX Frame Sync Required Select */
524−#define DITFS 0x0800 /* Data Independent TX Frame Sync Select */
525−#define LTFS 0x1000 /* Low TX Frame Sync Select */
526−#define LATFS 0x2000 /* Late TX Frame Sync Select */
527−#define TCKFE 0x4000 /* TX Clock Falling Edge Select */
528−
529−/* SPORTx_TCR2 Masks */
530−#if defined(__ADSPBF531__) || defined(__ADSPBF532__) || \
531− defined(__ADSPBF533__)
532−# define SLEN 0x001F /*TX Word Length */
533−#else
534−# define SLEN(x) ((x)&0x1F) /* SPORT TX Word Length (2 - 31) */
535−#endif
536−#define TXSE 0x0100 /*TX Secondary Enable */
537−#define TSFSE 0x0200 /*TX Stereo Frame Sync Enable */
538−#define TRFST 0x0400 /*TX Right-First Data Order */
539−
540−/* SPORTx_RCR1 Masks */
541−#define RSPEN 0x0001 /* RX enable */
542−#define IRCLK 0x0002 /* Internal RX Clock Select */
543−#define RDTYPE 0x000C /* RX Data Formatting Select */
544−#define DTYPE_NORM 0x0000 /* no companding */
545−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
546−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
547−#define RLSBIT 0x0010 /* RX Bit Order */
548−#define IRFS 0x0200 /* Internal RX Frame Sync Select */
549−#define RFSR 0x0400 /* RX Frame Sync Required Select */
550−#define LRFS 0x1000 /* Low RX Frame Sync Select */
551−#define LARFS 0x2000 /* Late RX Frame Sync Select */
552−#define RCKFE 0x4000 /* RX Clock Falling Edge Select */
553−
554−/* SPORTx_RCR2 Masks */
555−/* SLEN defined above */
556−#define RXSE 0x0100 /*RX Secondary Enable */
557−#define RSFSE 0x0200 /*RX Stereo Frame Sync Enable */
558−#define RRFST 0x0400 /*Right-First Data Order */
559−
560−/*SPORTx_STAT Masks */
561−#define RXNE 0x0001 /*RX FIFO Not Empty Status */
562−#define RUVF 0x0002 /*RX Underflow Status */
563−#define ROVF 0x0004 /*RX Overflow Status */
564−#define TXF 0x0008 /*TX FIFO Full Status */
565−#define TUVF 0x0010 /*TX Underflow Status */
566−#define TOVF 0x0020 /*TX Overflow Status */
567−#define TXHRE 0x0040 /*TX Hold Register Empty */
568−
569−/*SPORTx_MCMC1 Masks */
570−#define SP_WSIZE 0x0000F000 /*Multichannel Window Size Field */
571−#define SP_WOFF 0x000003FF /*Multichannel Window Offset Field */
572−/* SPORTx_MCMC1 Macros */
573−#define SET_SP_WOFF(x) ((x) & 0x3FF) /* Multichannel Window Offset Field */
574−/* Only use SET_WSIZE Macro With Logic OR While Setting Lower Order Bits */
575−#define SET_SP_WSIZE(x) (((((x)>>0x3)-1)&0xF) << 0xC) /* Multichannel Window Size = (x/8)-1 */
576−
577−/*SPORTx_MCMC2 Masks */
578−#define MCCRM 0x00000003 /*Multichannel Clock Recovery Mode */
579−#define REC_BYPASS 0x0000 /* Bypass Mode (No Clock Recovery) */
580−#define REC_2FROM4 0x0002 /* Recover 2 MHz Clock from 4 MHz Clock */
581−#define REC_8FROM16 0x0003 /* Recover 8 MHz Clock from 16 MHz Clock */
582−#define MCDTXPE 0x00000004 /*Multichannel DMA Transmit Packing */
583−#define MCDRXPE 0x00000008 /*Multichannel DMA Receive Packing */
584−#define MCMEN 0x00000010 /*Multichannel Frame Mode Enable */
585−#define FSDR 0x00000080 /*Multichannel Frame Sync to Data Relationship */
586−#define MFD 0x0000F000 /*Multichannel Frame Delay */
587−#define MFD_0 0x0000 /* Multichannel Frame Delay = 0 */
588−#define MFD_1 0x1000 /* Multichannel Frame Delay = 1 */
589−#define MFD_2 0x2000 /* Multichannel Frame Delay = 2 */
590−#define MFD_3 0x3000 /* Multichannel Frame Delay = 3 */
591−#define MFD_4 0x4000 /* Multichannel Frame Delay = 4 */
592−#define MFD_5 0x5000 /* Multichannel Frame Delay = 5 */
593−#define MFD_6 0x6000 /* Multichannel Frame Delay = 6 */
594−#define MFD_7 0x7000 /* Multichannel Frame Delay = 7 */
595−#define MFD_8 0x8000 /* Multichannel Frame Delay = 8 */
596−#define MFD_9 0x9000 /* Multichannel Frame Delay = 9 */
597−#define MFD_10 0xA000 /* Multichannel Frame Delay = 10 */
598−#define MFD_11 0xB000 /* Multichannel Frame Delay = 11 */
599−#define MFD_12 0xC000 /* Multichannel Frame Delay = 12 */
600−#define MFD_13 0xD000 /* Multichannel Frame Delay = 13 */
601−#define MFD_14 0xE000 /* Multichannel Frame Delay = 14 */
602−#define MFD_15 0xF000 /* Multichannel Frame Delay = 15 */
603−
604512 /* ********* PARALLEL PERIPHERAL INTERFACE (PPI) MASKS **************** */
605513
606514 /* PPI_CONTROL Masks */
arch/blackfin/mach-bf537/include/mach/defBF534.h+0−80
@@ -1241,86 +1241,6 @@ · 1240 unmodified lines
12411241 #define PH14 0x4000
12421242 #define PH15 0x8000
12431243
1244−/* ******************* SERIAL PORT MASKS **************************************/
1245−/* SPORTx_TCR1 Masks */
1246−#define TSPEN 0x0001 /* Transmit Enable */
1247−#define ITCLK 0x0002 /* Internal Transmit Clock Select */
1248−#define DTYPE_NORM 0x0004 /* Data Format Normal */
1249−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
1250−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
1251−#define TLSBIT 0x0010 /* Transmit Bit Order */
1252−#define ITFS 0x0200 /* Internal Transmit Frame Sync Select */
1253−#define TFSR 0x0400 /* Transmit Frame Sync Required Select */
1254−#define DITFS 0x0800 /* Data-Independent Transmit Frame Sync Select */
1255−#define LTFS 0x1000 /* Low Transmit Frame Sync Select */
1256−#define LATFS 0x2000 /* Late Transmit Frame Sync Select */
1257−#define TCKFE 0x4000 /* Clock Falling Edge Select */
1258−
1259−/* SPORTx_TCR2 Masks and Macro */
1260−#define SLEN(x) ((x)&0x1F) /* SPORT TX Word Length (2 - 31) */
1261−#define TXSE 0x0100 /* TX Secondary Enable */
1262−#define TSFSE 0x0200 /* Transmit Stereo Frame Sync Enable */
1263−#define TRFST 0x0400 /* Left/Right Order (1 = Right Channel 1st) */
1264−
1265−/* SPORTx_RCR1 Masks */
1266−#define RSPEN 0x0001 /* Receive Enable */
1267−#define IRCLK 0x0002 /* Internal Receive Clock Select */
1268−#define DTYPE_NORM 0x0004 /* Data Format Normal */
1269−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
1270−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
1271−#define RLSBIT 0x0010 /* Receive Bit Order */
1272−#define IRFS 0x0200 /* Internal Receive Frame Sync Select */
1273−#define RFSR 0x0400 /* Receive Frame Sync Required Select */
1274−#define LRFS 0x1000 /* Low Receive Frame Sync Select */
1275−#define LARFS 0x2000 /* Late Receive Frame Sync Select */
1276−#define RCKFE 0x4000 /* Clock Falling Edge Select */
1277−
1278−/* SPORTx_RCR2 Masks */
1279−#define SLEN(x) ((x)&0x1F) /* SPORT RX Word Length (2 - 31) */
1280−#define RXSE 0x0100 /* RX Secondary Enable */
1281−#define RSFSE 0x0200 /* RX Stereo Frame Sync Enable */
1282−#define RRFST 0x0400 /* Right-First Data Order */
1283−
1284−/* SPORTx_STAT Masks */
1285−#define RXNE 0x0001 /* Receive FIFO Not Empty Status */
1286−#define RUVF 0x0002 /* Sticky Receive Underflow Status */
1287−#define ROVF 0x0004 /* Sticky Receive Overflow Status */
1288−#define TXF 0x0008 /* Transmit FIFO Full Status */
1289−#define TUVF 0x0010 /* Sticky Transmit Underflow Status */
1290−#define TOVF 0x0020 /* Sticky Transmit Overflow Status */
1291−#define TXHRE 0x0040 /* Transmit Hold Register Empty */
1292−
1293−/* SPORTx_MCMC1 Macros */
1294−#define SP_WOFF(x) ((x) & 0x3FF) /* Multichannel Window Offset Field */
1295−
1296−/* Only use WSIZE Macro With Logic OR While Setting Lower Order Bits */
1297−#define SP_WSIZE(x) (((((x)>>0x3)-1)&0xF) << 0xC) /* Multichannel Window Size = (x/8)-1 */
1298−
1299−/* SPORTx_MCMC2 Masks */
1300−#define REC_BYPASS 0x0000 /* Bypass Mode (No Clock Recovery) */
1301−#define REC_2FROM4 0x0002 /* Recover 2 MHz Clock from 4 MHz Clock */
1302−#define REC_8FROM16 0x0003 /* Recover 8 MHz Clock from 16 MHz Clock */
1303−#define MCDTXPE 0x0004 /* Multichannel DMA Transmit Packing */
1304−#define MCDRXPE 0x0008 /* Multichannel DMA Receive Packing */
1305−#define MCMEN 0x0010 /* Multichannel Frame Mode Enable */
1306−#define FSDR 0x0080 /* Multichannel Frame Sync to Data Relationship */
1307−#define MFD_0 0x0000 /* Multichannel Frame Delay = 0 */
1308−#define MFD_1 0x1000 /* Multichannel Frame Delay = 1 */
1309−#define MFD_2 0x2000 /* Multichannel Frame Delay = 2 */
1310−#define MFD_3 0x3000 /* Multichannel Frame Delay = 3 */
1311−#define MFD_4 0x4000 /* Multichannel Frame Delay = 4 */
1312−#define MFD_5 0x5000 /* Multichannel Frame Delay = 5 */
1313−#define MFD_6 0x6000 /* Multichannel Frame Delay = 6 */
1314−#define MFD_7 0x7000 /* Multichannel Frame Delay = 7 */
1315−#define MFD_8 0x8000 /* Multichannel Frame Delay = 8 */
1316−#define MFD_9 0x9000 /* Multichannel Frame Delay = 9 */
1317−#define MFD_10 0xA000 /* Multichannel Frame Delay = 10 */
1318−#define MFD_11 0xB000 /* Multichannel Frame Delay = 11 */
1319−#define MFD_12 0xC000 /* Multichannel Frame Delay = 12 */
1320−#define MFD_13 0xD000 /* Multichannel Frame Delay = 13 */
1321−#define MFD_14 0xE000 /* Multichannel Frame Delay = 14 */
1322−#define MFD_15 0xF000 /* Multichannel Frame Delay = 15 */
1323−
13241244 /* ********************* ASYNCHRONOUS MEMORY CONTROLLER MASKS *************************/
13251245 /* EBIU_AMGCTL Masks */
13261246 #define AMCKEN 0x0001 /* Enable CLKOUT */
arch/blackfin/mach-bf538/include/mach/defBF539.h+0−107
@@ -1610,113 +1610,6 @@ · 1609 unmodified lines
16101610 #define UCEN_P 0x00
16111611
16121612
1613−/* ********** SERIAL PORT MASKS ********************** */
1614−/* SPORTx_TCR1 Masks */
1615−#define TSPEN 0x0001 /* TX enable */
1616−#define ITCLK 0x0002 /* Internal TX Clock Select */
1617−#define TDTYPE 0x000C /* TX Data Formatting Select */
1618−#define DTYPE_NORM 0x0000 /* Data Format Normal */
1619−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
1620−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
1621−#define TLSBIT 0x0010 /* TX Bit Order */
1622−#define ITFS 0x0200 /* Internal TX Frame Sync Select */
1623−#define TFSR 0x0400 /* TX Frame Sync Required Select */
1624−#define DITFS 0x0800 /* Data Independent TX Frame Sync Select */
1625−#define LTFS 0x1000 /* Low TX Frame Sync Select */
1626−#define LATFS 0x2000 /* Late TX Frame Sync Select */
1627−#define TCKFE 0x4000 /* TX Clock Falling Edge Select */
1628−/* SPORTx_RCR1 Deprecated Masks */
1629−#define TULAW DTYPE_ULAW /* Compand Using u-Law */
1630−#define TALAW DTYPE_ALAW /* Compand Using A-Law */
1631−
1632−/* SPORTx_TCR2 Masks */
1633−#ifdef _MISRA_RULES
1634−#define SLEN(x) ((x)&0x1Fu) /* SPORT TX Word Length (2 - 31) */
1635−#else
1636−#define SLEN(x) ((x)&0x1F) /* SPORT TX Word Length (2 - 31) */
1637−#endif /* _MISRA_RULES */
1638−#define TXSE 0x0100 /*TX Secondary Enable */
1639−#define TSFSE 0x0200 /*TX Stereo Frame Sync Enable */
1640−#define TRFST 0x0400 /*TX Right-First Data Order */
1641−
1642−/* SPORTx_RCR1 Masks */
1643−#define RSPEN 0x0001 /* RX enable */
1644−#define IRCLK 0x0002 /* Internal RX Clock Select */
1645−#define RDTYPE 0x000C /* RX Data Formatting Select */
1646−#define DTYPE_NORM 0x0000 /* no companding */
1647−#define DTYPE_ULAW 0x0008 /* Compand Using u-Law */
1648−#define DTYPE_ALAW 0x000C /* Compand Using A-Law */
1649−#define RLSBIT 0x0010 /* RX Bit Order */
1650−#define IRFS 0x0200 /* Internal RX Frame Sync Select */
1651−#define RFSR 0x0400 /* RX Frame Sync Required Select */
1652−#define LRFS 0x1000 /* Low RX Frame Sync Select */
1653−#define LARFS 0x2000 /* Late RX Frame Sync Select */
1654−#define RCKFE 0x4000 /* RX Clock Falling Edge Select */
1655−/* SPORTx_RCR1 Deprecated Masks */
1656−#define RULAW DTYPE_ULAW /* Compand Using u-Law */
1657−#define RALAW DTYPE_ALAW /* Compand Using A-Law */
1658−
1659−/* SPORTx_RCR2 Masks */
1660−#ifdef _MISRA_RULES
1661−#define SLEN(x) ((x)&0x1Fu) /* SPORT RX Word Length (2 - 31) */
1662−#else
1663−#define SLEN(x) ((x)&0x1F) /* SPORT RX Word Length (2 - 31) */
1664−#endif /* _MISRA_RULES */
1665−#define RXSE 0x0100 /*RX Secondary Enable */
1666−#define RSFSE 0x0200 /*RX Stereo Frame Sync Enable */
1667−#define RRFST 0x0400 /*Right-First Data Order */
1668−
1669−/*SPORTx_STAT Masks */
1670−#define RXNE 0x0001 /*RX FIFO Not Empty Status */
1671−#define RUVF 0x0002 /*RX Underflow Status */
1672−#define ROVF 0x0004 /*RX Overflow Status */
1673−#define TXF 0x0008 /*TX FIFO Full Status */
1674−#define TUVF 0x0010 /*TX Underflow Status */
1675−#define TOVF 0x0020 /*TX Overflow Status */
1676−#define TXHRE 0x0040 /*TX Hold Register Empty */
1677−
1678−/*SPORTx_MCMC1 Masks */
1679−#define WOFF 0x000003FF /*Multichannel Window Offset Field */
1680−/* SPORTx_MCMC1 Macros */
1681−#ifdef _MISRA_RULES
1682−#define SET_WOFF(x) ((x) & 0x3FFu) /* Multichannel Window Offset Field */
1683−/* Only use SET_WSIZE Macro With Logic OR While Setting Lower Order Bits */
1684−#define SET_WSIZE(x) (((((x)>>0x3)-1u)&0xFu) << 0xC) /* Multichannel Window Size = (x/8)-1 */
1685−#else
1686−#define SET_WOFF(x) ((x) & 0x3FF) /* Multichannel Window Offset Field */
1687−/* Only use SET_WSIZE Macro With Logic OR While Setting Lower Order Bits */
1688−#define SET_WSIZE(x) (((((x)>>0x3)-1)&0xF) << 0xC) /* Multichannel Window Size = (x/8)-1 */
1689−#endif /* _MISRA_RULES */
1690−
1691−
1692−/*SPORTx_MCMC2 Masks */
1693−#define MCCRM 0x0003 /*Multichannel Clock Recovery Mode */
1694−#define REC_BYPASS 0x0000 /* Bypass Mode (No Clock Recovery) */
1695−#define REC_2FROM4 0x0002 /* Recover 2 MHz Clock from 4 MHz Clock */
1696−#define REC_8FROM16 0x0003 /* Recover 8 MHz Clock from 16 MHz Clock */
1697−#define MCDTXPE 0x0004 /*Multichannel DMA Transmit Packing */
1698−#define MCDRXPE 0x0008 /*Multichannel DMA Receive Packing */
1699−#define MCMEN 0x0010 /*Multichannel Frame Mode Enable */
1700−#define FSDR 0x0080 /*Multichannel Frame Sync to Data Relationship */
1701−#define MFD 0xF000 /*Multichannel Frame Delay */
1702−#define MFD_0 0x0000 /* Multichannel Frame Delay = 0 */
1703−#define MFD_1 0x1000 /* Multichannel Frame Delay = 1 */
1704−#define MFD_2 0x2000 /* Multichannel Frame Delay = 2 */
1705−#define MFD_3 0x3000 /* Multichannel Frame Delay = 3 */
1706−#define MFD_4 0x4000 /* Multichannel Frame Delay = 4 */
1707−#define MFD_5 0x5000 /* Multichannel Frame Delay = 5 */
1708−#define MFD_6 0x6000 /* Multichannel Frame Delay = 6 */
1709−#define MFD_7 0x7000 /* Multichannel Frame Delay = 7 */
1710−#define MFD_8 0x8000 /* Multichannel Frame Delay = 8 */
1711−#define MFD_9 0x9000 /* Multichannel Frame Delay = 9 */
1712−#define MFD_10 0xA000 /* Multichannel Frame Delay = 10 */
1713−#define MFD_11 0xB000 /* Multichannel Frame Delay = 11 */
1714−#define MFD_12 0xC000 /* Multichannel Frame Delay = 12 */
1715−#define MFD_13 0xD000 /* Multichannel Frame Delay = 13 */
1716−#define MFD_14 0xE000 /* Multichannel Frame Delay = 14 */
1717−#define MFD_15 0xF000 /* Multichannel Frame Delay = 15 */
1718−
1719−
17201613 /* ********* PARALLEL PERIPHERAL INTERFACE (PPI) MASKS **************** */
17211614 /* PPI_CONTROL Masks */
17221615 #define PORT_EN 0x0001 /* PPI Port Enable */
arch/blackfin/mach-bf548/boards/cm_bf548.c+0−1
@@ -706,7 +706,6 @@ static struct mtd_partition partition_info[] = { · 705 unmodified lines
706706 };
707707
708708 static struct bf5xx_nand_platform bf5xx_nand_platform = {
709− .page_size = NFC_PG_SIZE_256,
710709 .data_width = NFC_NWIDTH_8,
711710 .partitions = partition_info,
712711 .nr_partitions = ARRAY_SIZE(partition_info),
arch/blackfin/mach-bf548/boards/ezkit.c+0−1
@@ -849,7 +849,6 @@ static struct mtd_partition partition_info[] = { · 848 unmodified lines
849849 };
850850
851851 static struct bf5xx_nand_platform bf5xx_nand_platform = {
852− .page_size = NFC_PG_SIZE_256,
853852 .data_width = NFC_NWIDTH_8,
854853 .partitions = partition_info,
855854 .nr_partitions = ARRAY_SIZE(partition_info),
arch/blackfin/mach-bf548/include/mach/defBF54x_base.h+0−67
@@ -2221,73 +2221,6 @@ · 2220 unmodified lines
22212221
22222222 #define RCVDATA16 0xffff /* Receive FIFO 16-Bit Data */
22232223
2224−/* Bit masks for SPORTx_TCR1 */
2225−
2226−#define TCKFE 0x4000 /* Clock Falling Edge Select */
2227−#define LATFS 0x2000 /* Late Transmit Frame Sync */
2228−#define LTFS 0x1000 /* Low Transmit Frame Sync Select */
2229−#define DITFS 0x800 /* Data-Independent Transmit Frame Sync Select */
2230−#define TFSR 0x400 /* Transmit Frame Sync Required Select */
2231−#define ITFS 0x200 /* Internal Transmit Frame Sync Select */
2232−#define TLSBIT 0x10 /* Transmit Bit Order */
2233−#define TDTYPE 0xc /* Data Formatting Type Select */
2234−#define ITCLK 0x2 /* Internal Transmit Clock Select */
2235−#define TSPEN 0x1 /* Transmit Enable */
2236−
2237−/* Bit masks for SPORTx_TCR2 */
2238−
2239−#define TRFST 0x400 /* Left/Right Order */
2240−#define TSFSE 0x200 /* Transmit Stereo Frame Sync Enable */
2241−#define TXSE 0x100 /* TxSEC Enable */
2242−#define SLEN_T 0x1f /* SPORT Word Length */
2243−
2244−/* Bit masks for SPORTx_RCR1 */
2245−
2246−#define RCKFE 0x4000 /* Clock Falling Edge Select */
2247−#define LARFS 0x2000 /* Late Receive Frame Sync */
2248−#define LRFS 0x1000 /* Low Receive Frame Sync Select */
2249−#define RFSR 0x400 /* Receive Frame Sync Required Select */
2250−#define IRFS 0x200 /* Internal Receive Frame Sync Select */
2251−#define RLSBIT 0x10 /* Receive Bit Order */
2252−#define RDTYPE 0xc /* Data Formatting Type Select */
2253−#define IRCLK 0x2 /* Internal Receive Clock Select */
2254−#define RSPEN 0x1 /* Receive Enable */
2255−
2256−/* Bit masks for SPORTx_RCR2 */
2257−
2258−#define RRFST 0x400 /* Left/Right Order */
2259−#define RSFSE 0x200 /* Receive Stereo Frame Sync Enable */
2260−#define RXSE 0x100 /* RxSEC Enable */
2261−#define SLEN_R 0x1f /* SPORT Word Length */
2262−
2263−/* Bit masks for SPORTx_STAT */
2264−
2265−#define TXHRE 0x40 /* Transmit Hold Register Empty */
2266−#define TOVF 0x20 /* Sticky Transmit Overflow Status */
2267−#define TUVF 0x10 /* Sticky Transmit Underflow Status */
2268−#define TXF 0x8 /* Transmit FIFO Full Status */
2269−#define ROVF 0x4 /* Sticky Receive Overflow Status */
2270−#define RUVF 0x2 /* Sticky Receive Underflow Status */
2271−#define RXNE 0x1 /* Receive FIFO Not Empty Status */
2272−
2273−/* Bit masks for SPORTx_MCMC1 */
2274−
2275−#define SP_WSIZE 0xf000 /* Window Size */
2276−#define SP_WOFF 0x3ff /* Windows Offset */
2277−
2278−/* Bit masks for SPORTx_MCMC2 */
2279−
2280−#define MFD 0xf000 /* Multi channel Frame Delay */
2281−#define FSDR 0x80 /* Frame Sync to Data Relationship */
2282−#define MCMEN 0x10 /* Multi channel Frame Mode Enable */
2283−#define MCDRXPE 0x8 /* Multi channel DMA Receive Packing */
2284−#define MCDTXPE 0x4 /* Multi channel DMA Transmit Packing */
2285−#define MCCRM 0x3 /* 2X Clock Recovery Mode */
2286−
2287−/* Bit masks for SPORTx_CHNL */
2288−
2289−#define CUR_CHNL 0x3ff /* Current Channel Indicator */
2290−
22912224 /* Bit masks for UARTx_LCR */
22922225
22932226 #if 0
arch/blackfin/mach-bf561/include/mach/defBF561.h+0−60
@@ -1007,66 +1007,6 @@ · 1006 unmodified lines
10071007 #define IREN_P 0x01
10081008 #define UCEN_P 0x00
10091009
1010−/* ********** SERIAL PORT MASKS ********************** */
1011−
1012−/* SPORTx_TCR1 Masks */
1013−#define TSPEN 0x0001 /* TX enable */
1014−#define ITCLK 0x0002 /* Internal TX Clock Select */
1015−#define TDTYPE 0x000C /* TX Data Formatting Select */
1016−#define TLSBIT 0x0010 /* TX Bit Order */
1017−#define ITFS 0x0200 /* Internal TX Frame Sync Select */
1018−#define TFSR 0x0400 /* TX Frame Sync Required Select */
1019−#define DITFS 0x0800 /* Data Independent TX Frame Sync Select */
1020−#define LTFS 0x1000 /* Low TX Frame Sync Select */
1021−#define LATFS 0x2000 /* Late TX Frame Sync Select */
1022−#define TCKFE 0x4000 /* TX Clock Falling Edge Select */
1023−
1024−/* SPORTx_TCR2 Masks */
1025−#define SLEN 0x001F /*TX Word Length */
1026−#define TXSE 0x0100 /*TX Secondary Enable */
1027−#define TSFSE 0x0200 /*TX Stereo Frame Sync Enable */
1028−#define TRFST 0x0400 /*TX Right-First Data Order */
1029−
1030−/* SPORTx_RCR1 Masks */
1031−#define RSPEN 0x0001 /* RX enable */
1032−#define IRCLK 0x0002 /* Internal RX Clock Select */
1033−#define RDTYPE 0x000C /* RX Data Formatting Select */
1034−#define RULAW 0x0008 /* u-Law enable */
1035−#define RALAW 0x000C /* A-Law enable */
1036−#define RLSBIT 0x0010 /* RX Bit Order */
1037−#define IRFS 0x0200 /* Internal RX Frame Sync Select */
1038−#define RFSR 0x0400 /* RX Frame Sync Required Select */
1039−#define LRFS 0x1000 /* Low RX Frame Sync Select */
1040−#define LARFS 0x2000 /* Late RX Frame Sync Select */
1041−#define RCKFE 0x4000 /* RX Clock Falling Edge Select */
1042−
1043−/* SPORTx_RCR2 Masks */
1044−#define SLEN 0x001F /*RX Word Length */
1045−#define RXSE 0x0100 /*RX Secondary Enable */
1046−#define RSFSE 0x0200 /*RX Stereo Frame Sync Enable */
1047−#define RRFST 0x0400 /*Right-First Data Order */
1048−
1049−/*SPORTx_STAT Masks */
1050−#define RXNE 0x0001 /*RX FIFO Not Empty Status */
1051−#define RUVF 0x0002 /*RX Underflow Status */
1052−#define ROVF 0x0004 /*RX Overflow Status */
1053−#define TXF 0x0008 /*TX FIFO Full Status */
1054−#define TUVF 0x0010 /*TX Underflow Status */
1055−#define TOVF 0x0020 /*TX Overflow Status */
1056−#define TXHRE 0x0040 /*TX Hold Register Empty */
1057−
1058−/*SPORTx_MCMC1 Masks */
1059−#define SP_WSIZE 0x0000F000 /*Multichannel Window Size Field */
1060−#define SP_WOFF 0x000003FF /*Multichannel Window Offset Field */
1061−
1062−/*SPORTx_MCMC2 Masks */
1063−#define MCCRM 0x00000003 /*Multichannel Clock Recovery Mode */
1064−#define MCDTXPE 0x00000004 /*Multichannel DMA Transmit Packing */
1065−#define MCDRXPE 0x00000008 /*Multichannel DMA Receive Packing */
1066−#define MCMEN 0x00000010 /*Multichannel Frame Mode Enable */
1067−#define FSDR 0x00000080 /*Multichannel Frame Sync to Data Relationship */
1068−#define MFD 0x0000F000 /*Multichannel Frame Delay */
1069−
10701010 /* ********* PARALLEL PERIPHERAL INTERFACE (PPI) MASKS **************** */
10711011
10721012 /* PPI_CONTROL Masks */
arch/h8300/include/asm/atomic.h+10−5
@@ -18,7 +18,8 @@ · 17 unmodified lines
1818
1919 static __inline__ int atomic_add_return(int i, atomic_t *v)
2020 {
21− int ret,flags;
21+ unsigned long flags;
22+ int ret;
2223 local_irq_save(flags);
2324 ret = v->counter += i;
2425 local_irq_restore(flags);
@@ -30,7 +31,8 @@ static __inline__ int atomic_add_return(int i, atomic_t *v) · 5 unmodified lines
3031
3132 static __inline__ int atomic_sub_return(int i, atomic_t *v)
3233 {
33− int ret,flags;
34+ unsigned long flags;
35+ int ret;
3436 local_irq_save(flags);
3537 ret = v->counter -= i;
3638 local_irq_restore(flags);
@@ -42,7 +44,8 @@ static __inline__ int atomic_sub_return(int i, atomic_t *v) · 5 unmodified lines
4244
4345 static __inline__ int atomic_inc_return(atomic_t *v)
4446 {
45− int ret,flags;
47+ unsigned long flags;
48+ int ret;
4649 local_irq_save(flags);
4750 v->counter++;
4851 ret = v->counter;
@@ -64,7 +67,8 @@ static __inline__ int atomic_inc_return(atomic_t *v) · 15 unmodified lines
6467
6568 static __inline__ int atomic_dec_return(atomic_t *v)
6669 {
67− int ret,flags;
70+ unsigned long flags;
71+ int ret;
6872 local_irq_save(flags);
6973 --v->counter;
7074 ret = v->counter;
@@ -76,7 +80,8 @@ static __inline__ int atomic_dec_return(atomic_t *v) · 5 unmodified lines
7680
7781 static __inline__ int atomic_dec_and_test(atomic_t *v)
7882 {
79− int ret,flags;
83+ unsigned long flags;
84+ int ret;
8085 local_irq_save(flags);
8186 --v->counter;
8287 ret = v->counter;
arch/h8300/include/asm/system.h+3−1
@@ -3,6 +3,8 @@ · 2 unmodified lines
33
44 #include <linux/linkage.h>
55
6+struct pt_regs;
7+
68 /*
79 * switch_to(n) should switch tasks to task ptr, first checking that
810 * ptr isn't the current task, in which case it does nothing. This
@@ -155,6 +157,6 @@ static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int siz · 146 unmodified lines
155157
156158 #define arch_align_stack(x) (x)
157159
158−void die(char *str, struct pt_regs *fp, unsigned long err);
160+extern void die(const char *str, struct pt_regs *fp, unsigned long err);
159161
160162 #endif /* _H8300_SYSTEM_H */
arch/h8300/kernel/sys_h8300.c+2−2
@@ -56,8 +56,8 @@ int kernel_execve(const char *filename, · 55 unmodified lines
5656 const char *const envp[])
5757 {
5858 register long res __asm__("er0");
59− register char *const *_c __asm__("er3") = envp;
60− register char *const *_b __asm__("er2") = argv;
59+ register const char *const *_c __asm__("er3") = envp;
60+ register const char *const *_b __asm__("er2") = argv;
6161 register const char * _a __asm__("er1") = filename;
6262 __asm__ __volatile__ ("mov.l %1,er0\n\t"
6363 "trapa #0\n\t"
arch/h8300/kernel/traps.c+1−1
@@ -96,7 +96,7 @@ static void dump(struct pt_regs *fp) · 95 unmodified lines
9696 printk("\n\n");
9797 }
9898
99−void die(char *str, struct pt_regs *fp, unsigned long err)
99+void die(const char *str, struct pt_regs *fp, unsigned long err)
100100 {
101101 static int diecount;
102102
arch/ia64/hp/sim/simserial.c+1−1
@@ -149,7 +149,7 @@ static void receive_chars(struct tty_struct *tty) · 148 unmodified lines
149149 ch = ia64_ssc(0, 0, 0, 0,
150150 SSC_GETCHAR);
151151 while (!ch);
152− handle_sysrq(ch, NULL);
152+ handle_sysrq(ch);
153153 }
154154 #endif
155155 seen_esc = 0;
arch/ia64/kernel/fsys.S+39−7
@@ -424,14 +424,26 @@ EX(.fail_efault, ld8 r14=[r33]) // r14 <- *set · 423 unmodified lines
424424 andcm r14=r14,r17 // filter out SIGKILL & SIGSTOP
425425
426426 #ifdef CONFIG_SMP
427− mov r17=1
428− ;;
429− cmpxchg4.acq r18=[r31],r17,ar.ccv // try to acquire the lock
427+ // __ticket_spin_trylock(r31)
428+ ld4 r17=[r31]
430429 mov r8=EINVAL // default to EINVAL
431430 ;;
431+ extr r9=r17,17,15
432+ ;;
433+ xor r18=r17,r9
434+ adds r19=1,r17
435+ ;;
436+ extr.u r18=r18,0,15
437+ ;;
438+ cmp.eq p0,p7=0,r18
439+(p7) br.cond.spnt.many .lock_contention
440+ mov.m ar.ccv=r17
441+ ;;
442+ cmpxchg4.acq r9=[r31],r19,ar.ccv
443+ ;;
444+ cmp4.eq p0,p7=r9,r17
445+(p7) br.cond.spnt.many .lock_contention
432446 ld8 r3=[r2] // re-read current->blocked now that we hold the lock
433− cmp4.ne p6,p0=r18,r0
434−(p6) br.cond.spnt.many .lock_contention
435447 ;;
436448 #else
437449 ld8 r3=[r2] // re-read current->blocked now that we hold the lock
@@ -490,7 +502,17 @@ EX(.fail_efault, ld8 r14=[r33]) // r14 <- *set · 52 unmodified lines
490502 (p6) br.cond.spnt.few 1b // yes -> retry
491503
492504 #ifdef CONFIG_SMP
493− st4.rel [r31]=r0 // release the lock
505+ // __ticket_spin_unlock(r31)
506+ adds r31=2,r31
507+ ;;
508+ ld2.bias r2=[r31]
509+ mov r3=65534
510+ ;;
511+ adds r2=2,r2
512+ ;;
513+ and r3=r3,r2
514+ ;;
515+ st2.rel [r31]=r3
494516 #endif
495517 SSM_PSR_I(p0, p9, r31)
496518 ;;
@@ -512,7 +534,17 @@ EX(.fail_efault, (p15) st8 [r34]=r3) · 15 unmodified lines
512534
513535 .sig_pending:
514536 #ifdef CONFIG_SMP
515− st4.rel [r31]=r0 // release the lock
537+ // __ticket_spin_unlock(r31)
538+ adds r31=2,r31
539+ ;;
540+ ld2.bias r2=[r31]
541+ mov r3=65534
542+ ;;
543+ adds r2=2,r2
544+ ;;
545+ and r3=r3,r2
546+ ;;
547+ st2.rel [r31]=r3
516548 #endif
517549 SSM_PSR_I(p0, p9, r17)
518550 ;;
arch/m68k/include/asm/unistd.h+4−1
@@ -340,10 +340,13 @@ · 339 unmodified lines
340340 #define __NR_set_thread_area 334
341341 #define __NR_atomic_cmpxchg_32 335
342342 #define __NR_atomic_barrier 336
343+#define __NR_fanotify_init 337
344+#define __NR_fanotify_mark 338
345+#define __NR_prlimit64 339
343346
344347 #ifdef __KERNEL__
345348
346−#define NR_syscalls 337
349+#define NR_syscalls 340
347350
348351 #define __ARCH_WANT_IPC_PARSE_VERSION
349352 #define __ARCH_WANT_OLD_READDIR
arch/m68k/kernel/entry.S+3−0
@@ -765,4 +765,7 @@ sys_call_table: · 764 unmodified lines
765765 .long sys_set_thread_area
766766 .long sys_atomic_cmpxchg_32 /* 335 */
767767 .long sys_atomic_barrier
768+ .long sys_fanotify_init
769+ .long sys_fanotify_mark
770+ .long sys_prlimit64
768771
arch/m68knommu/kernel/syscalltable.S+3−0
@@ -355,6 +355,9 @@ ENTRY(sys_call_table) · 354 unmodified lines
355355 .long sys_set_thread_area
356356 .long sys_atomic_cmpxchg_32 /* 335 */
357357 .long sys_atomic_barrier
358+ .long sys_fanotify_init
359+ .long sys_fanotify_mark
360+ .long sys_prlimit64
358361
359362 .rept NR_syscalls-(.-sys_call_table)/4
360363 .long sys_ni_syscall
arch/m68knommu/kernel/vmlinux.lds.S+2−0
@@ -150,6 +150,8 @@ SECTIONS { · 149 unmodified lines
150150 _sdata = . ;
151151 DATA_DATA
152152 CACHELINE_ALIGNED_DATA(32)
153+ PAGE_ALIGNED_DATA(PAGE_SIZE)
154+ *(.data..shared_aligned)
153155 INIT_TASK_DATA(THREAD_SIZE)
154156 _edata = . ;
155157 } > DATA
arch/powerpc/include/asm/fsldma.h+1−0
@@ -11,6 +11,7 @@ · 10 unmodified lines
1111 #ifndef __ARCH_POWERPC_ASM_FSLDMA_H__
1212 #define __ARCH_POWERPC_ASM_FSLDMA_H__
1313
14+#include <linux/slab.h>
1415 #include <linux/dmaengine.h>
1516
1617 /*
arch/powerpc/kernel/head_64.S+9−3
@@ -575,13 +575,19 @@ __secondary_start: · 574 unmodified lines
575575 /* Initialize the kernel stack. Just a repeat for iSeries. */
576576 LOAD_REG_ADDR(r3, current_set)
577577 sldi r28,r24,3 /* get current_set[cpu#] */
578− ldx r1,r3,r28
579− addi r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD
580− std r1,PACAKSAVE(r13)
578+ ldx r14,r3,r28
579+ addi r14,r14,THREAD_SIZE-STACK_FRAME_OVERHEAD
580+ std r14,PACAKSAVE(r13)
581581
582582 /* Do early setup for that CPU (stab, slb, hash table pointer) */
583583 bl .early_setup_secondary
584584
585+ /*
586+ * setup the new stack pointer, but *don't* use this until
587+ * translation is on.
588+ */
589+ mr r1, r14
590+
585591 /* Clear backchain so we get nice backtraces */
586592 li r7,0
587593 mtlr r7
arch/powerpc/kernel/misc_32.S+3−0
@@ -810,6 +810,9 @@ relocate_new_kernel: · 809 unmodified lines
810810 isync
811811 sync
812812
813+ mfspr r3, SPRN_PIR /* current core we are running on */
814+ mr r4, r5 /* load physical address of chunk called */
815+
813816 /* jump to the entry point, usually the setup routine */
814817 mtlr r5
815818 blrl
arch/powerpc/kernel/time.c+11−12
@@ -577,20 +577,11 @@ void timer_interrupt(struct pt_regs * regs) · 576 unmodified lines
577577 * some CPUs will continuue to take decrementer exceptions */
578578 set_dec(DECREMENTER_MAX);
579579
580−#ifdef CONFIG_PPC32
580+#if defined(CONFIG_PPC32) && defined(CONFIG_PMAC)
581581 if (atomic_read(&ppc_n_lost_interrupts) != 0)
582582 do_IRQ(regs);
583583 #endif
584584
585− now = get_tb_or_rtc();
586− if (now < decrementer->next_tb) {
587− /* not time for this event yet */
588− now = decrementer->next_tb - now;
589− if (now <= DECREMENTER_MAX)
590− set_dec((int)now);
591− trace_timer_interrupt_exit(regs);
592− return;
593− }
594585 old_regs = set_irq_regs(regs);
595586 irq_enter();
596587
@@ -606,8 +597,16 @@ void timer_interrupt(struct pt_regs * regs) · 9 unmodified lines
606597 get_lppaca()->int_dword.fields.decr_int = 0;
607598 #endif
608599
609− if (evt->event_handler)
610− evt->event_handler(evt);
600+ now = get_tb_or_rtc();
601+ if (now >= decrementer->next_tb) {
602+ decrementer->next_tb = ~(u64)0;
603+ if (evt->event_handler)
604+ evt->event_handler(evt);
605+ } else {
606+ now = decrementer->next_tb - now;
607+ if (now <= DECREMENTER_MAX)
608+ set_dec((int)now);
609+ }
611610
612611 #ifdef CONFIG_PPC_ISERIES
613612 if (firmware_has_feature(FW_FEATURE_ISERIES) && hvlpevent_is_pending())
arch/powerpc/platforms/83xx/mpc837x_mds.c+6−3
@@ -48,8 +48,10 @@ static int mpc837xmds_usb_cfg(void) · 47 unmodified lines
4848 return -1;
4949
5050 np = of_find_node_by_name(NULL, "usb");
51− if (!np)
52− return -ENODEV;
51+ if (!np) {
52+ ret = -ENODEV;
53+ goto out;
54+ }
5355 phy_type = of_get_property(np, "phy_type", NULL);
5456 if (phy_type && !strcmp(phy_type, "ulpi")) {
5557 clrbits8(bcsr_regs + 12, BCSR12_USB_SER_PIN);
@@ -65,8 +67,9 @@ static int mpc837xmds_usb_cfg(void) · 9 unmodified lines
6567 }
6668
6769 of_node_put(np);
70+out:
6871 iounmap(bcsr_regs);
69− return 0;
72+ return ret;
7073 }
7174
7275 /* ************************************************************************
arch/powerpc/platforms/85xx/mpc85xx_mds.c+1−0
@@ -357,6 +357,7 @@ static void __init mpc85xx_mds_setup_arch(void) · 356 unmodified lines
357357 {
358358 #ifdef CONFIG_PCI
359359 struct pci_controller *hose;
360+ struct device_node *np;
360361 #endif
361362 dma_addr_t max = 0xffffffff;
362363
arch/powerpc/platforms/85xx/p1022_ds.c+2−2
@@ -19,7 +19,7 @@ · 18 unmodified lines
1919
2020 #include <linux/pci.h>
2121 #include <linux/of_platform.h>
22−#include <linux/lmb.h>
22+#include <linux/memblock.h>
2323
2424 #include <asm/mpic.h>
2525 #include <asm/swiotlb.h>
@@ -97,7 +97,7 @@ static void __init p1022_ds_setup_arch(void) · 71 unmodified lines
9797 #endif
9898
9999 #ifdef CONFIG_SWIOTLB
100− if (lmb_end_of_DRAM() > max) {
100+ if (memblock_end_of_DRAM() > max) {
101101 ppc_swiotlb_enable = 1;
102102 set_pci_dma_ops(&swiotlb_dma_ops);
103103 ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb;
arch/powerpc/platforms/pseries/dlpar.c+29−13
@@ -129,20 +129,35 @@ struct device_node *dlpar_configure_connector(u32 drc_index) · 128 unmodified lines
129129 struct property *property;
130130 struct property *last_property = NULL;
131131 struct cc_workarea *ccwa;
132+ char *data_buf;
132133 int cc_token;
133− int rc;
134+ int rc = -1;
134135
135136 cc_token = rtas_token("ibm,configure-connector");
136137 if (cc_token == RTAS_UNKNOWN_SERVICE)
137138 return NULL;
138139
139− spin_lock(&rtas_data_buf_lock);
140− ccwa = (struct cc_workarea *)&rtas_data_buf[0];
140+ data_buf = kzalloc(RTAS_DATA_BUF_SIZE, GFP_KERNEL);
141+ if (!data_buf)
142+ return NULL;
143+
144+ ccwa = (struct cc_workarea *)&data_buf[0];
141145 ccwa->drc_index = drc_index;
142146 ccwa->zero = 0;
143147
144− rc = rtas_call(cc_token, 2, 1, NULL, rtas_data_buf, NULL);
145− while (rc) {
148+ do {
149+ /* Since we release the rtas_data_buf lock between configure
150+ * connector calls we want to re-populate the rtas_data_buffer
151+ * with the contents of the previous call.
152+ */
153+ spin_lock(&rtas_data_buf_lock);
154+
155+ memcpy(rtas_data_buf, data_buf, RTAS_DATA_BUF_SIZE);
156+ rc = rtas_call(cc_token, 2, 1, NULL, rtas_data_buf, NULL);
157+ memcpy(data_buf, rtas_data_buf, RTAS_DATA_BUF_SIZE);
158+
159+ spin_unlock(&rtas_data_buf_lock);
160+
146161 switch (rc) {
147162 case NEXT_SIBLING:
148163 dn = dlpar_parse_cc_node(ccwa);
@@ -197,18 +212,19 @@ struct device_node *dlpar_configure_connector(u32 drc_index) · 48 unmodified lines
197212 "returned from configure-connector\n", rc);
198213 goto cc_error;
199214 }
215+ } while (rc);
200216
201− rc = rtas_call(cc_token, 2, 1, NULL, rtas_data_buf, NULL);
217+cc_error:
218+ kfree(data_buf);
219+
220+ if (rc) {
221+ if (first_dn)
222+ dlpar_free_cc_nodes(first_dn);
223+
224+ return NULL;
202225 }
203226
204− spin_unlock(&rtas_data_buf_lock);
205227 return first_dn;
206−
207−cc_error:
208− if (first_dn)
209− dlpar_free_cc_nodes(first_dn);
210− spin_unlock(&rtas_data_buf_lock);
211− return NULL;
212228 }
213229
214230 static struct device_node *derive_parent(const char *path)
arch/powerpc/sysdev/fsl_pci.c+2−0
@@ -399,6 +399,8 @@ DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1013E, quirk_fsl_pcie_header); · 398 unmodified lines
399399 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1013, quirk_fsl_pcie_header);
400400 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1020E, quirk_fsl_pcie_header);
401401 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1020, quirk_fsl_pcie_header);
402+DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1021E, quirk_fsl_pcie_header);
403+DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1021, quirk_fsl_pcie_header);
402404 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1022E, quirk_fsl_pcie_header);
403405 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1022, quirk_fsl_pcie_header);
404406 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2010E, quirk_fsl_pcie_header);
arch/powerpc/sysdev/fsl_rio.c+5−1
@@ -240,12 +240,13 @@ struct rio_priv { · 239 unmodified lines
240240
241241 static void __iomem *rio_regs_win;
242242
243+#ifdef CONFIG_E500
243244 static int (*saved_mcheck_exception)(struct pt_regs *regs);
244245
245246 static int fsl_rio_mcheck_exception(struct pt_regs *regs)
246247 {
247248 const struct exception_table_entry *entry = NULL;
248− unsigned long reason = (mfspr(SPRN_MCSR) & MCSR_MASK);
249+ unsigned long reason = mfspr(SPRN_MCSR);
249250
250251 if (reason & MCSR_BUS_RBERR) {
251252 reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR));
@@ -269,6 +270,7 @@ static int fsl_rio_mcheck_exception(struct pt_regs *regs) · 17 unmodified lines
269270 else
270271 return cur_cpu_spec->machine_check(regs);
271272 }
273+#endif
272274
273275 /**
274276 * fsl_rio_doorbell_send - Send a MPC85xx doorbell message
@@ -1517,8 +1519,10 @@ int fsl_rio_setup(struct platform_device *dev) · 1242 unmodified lines
15171519 fsl_rio_doorbell_init(port);
15181520 fsl_rio_port_write_init(port);
15191521
1522+#ifdef CONFIG_E500
15201523 saved_mcheck_exception = ppc_md.machine_check_exception;
15211524 ppc_md.machine_check_exception = fsl_rio_mcheck_exception;
1525+#endif
15221526 /* Ensure that RFXE is set */
15231527 mtspr(SPRN_HID1, (mfspr(SPRN_HID1) | 0x20000));
15241528
arch/powerpc/sysdev/qe_lib/qe.c+1−0
@@ -640,6 +640,7 @@ unsigned int qe_get_num_of_snums(void) · 639 unmodified lines
640640 if ((num_of_snums < 28) || (num_of_snums > QE_NUM_OF_SNUM)) {
641641 /* No QE ever has fewer than 28 SNUMs */
642642 pr_err("QE: number of snum is invalid\n");
643+ of_node_put(qe);
643644 return -EINVAL;
644645 }
645646 }
arch/powerpc/xmon/xmon.c+2−3
@@ -2880,15 +2880,14 @@ static void xmon_init(int enable) · 2879 unmodified lines
28802880 }
28812881
28822882 #ifdef CONFIG_MAGIC_SYSRQ
2883−static void sysrq_handle_xmon(int key, struct tty_struct *tty)
2883+static void sysrq_handle_xmon(int key)
28842884 {
28852885 /* ensure xmon is enabled */
28862886 xmon_init(1);
28872887 debugger(get_irq_regs());
28882888 }
28892889
2890−static struct sysrq_key_op sysrq_xmon_op =
2891−{
2890+static struct sysrq_key_op sysrq_xmon_op = {
28922891 .handler = sysrq_handle_xmon,
28932892 .help_msg = "Xmon",
28942893 .action_msg = "Entering xmon",
arch/sparc/kernel/process_64.c+1−1
@@ -303,7 +303,7 @@ void arch_trigger_all_cpu_backtrace(void) · 302 unmodified lines
303303
304304 #ifdef CONFIG_MAGIC_SYSRQ
305305
306−static void sysrq_handle_globreg(int key, struct tty_struct *tty)
306+static void sysrq_handle_globreg(int key)
307307 {
308308 arch_trigger_all_cpu_backtrace();
309309 }
arch/sparc/kernel/sys_sparc_32.c+0−2
@@ -166,7 +166,6 @@ sparc_breakpoint (struct pt_regs *regs) · 165 unmodified lines
166166 {
167167 siginfo_t info;
168168
169− lock_kernel();
170169 #ifdef DEBUG_SPARC_BREAKPOINT
171170 printk ("TRAP: Entering kernel PC=%x, nPC=%x\n", regs->pc, regs->npc);
172171 #endif
@@ -180,7 +179,6 @@ sparc_breakpoint (struct pt_regs *regs) · 7 unmodified lines
180179 #ifdef DEBUG_SPARC_BREAKPOINT
181180 printk ("TRAP: Returning to space: PC=%x nPC=%x\n", regs->pc, regs->npc);
182181 #endif
183− unlock_kernel();
184182 }
185183
186184 asmlinkage int
arch/sparc/kernel/unaligned_32.c+1−2
@@ -323,7 +323,6 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn) · 322 unmodified lines
323323 {
324324 enum direction dir;
325325
326− lock_kernel();
327326 if(!(current->thread.flags & SPARC_FLAG_UNALIGNED) ||
328327 (((insn >> 30) & 3) != 3))
329328 goto kill_user;
@@ -377,5 +376,5 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn) · 47 unmodified lines
377376 kill_user:
378377 user_mna_trap_fault(regs, insn);
379378 out:
380− unlock_kernel();
379+ ;
381380 }
arch/sparc/kernel/windows.c+0−2
@@ -112,7 +112,6 @@ void try_to_clear_window_buffer(struct pt_regs *regs, int who) · 111 unmodified lines
112112 struct thread_info *tp = current_thread_info();
113113 int window;
114114
115− lock_kernel();
116115 flush_user_windows();
117116 for(window = 0; window < tp->w_saved; window++) {
118117 unsigned long sp = tp->rwbuf_stkptrs[window];
@@ -123,5 +122,4 @@ void try_to_clear_window_buffer(struct pt_regs *regs, int who) · 4 unmodified lines
123122 do_exit(SIGILL);
124123 }
125124 tp->w_saved = 0;
126− unlock_kernel();
127125 }
arch/um/drivers/mconsole_kern.c+1−1
@@ -690,7 +690,7 @@ static void with_console(struct mc_request *req, void (*proc)(void *), · 689 unmodified lines
690690 static void sysrq_proc(void *arg)
691691 {
692692 char *op = arg;
693− handle_sysrq(*op, NULL);
693+ handle_sysrq(*op);
694694 }
695695
696696 void mconsole_sysrq(struct mc_request *req)
arch/x86/include/asm/iomap.h+2−2
@@ -26,11 +26,11 @@ · 25 unmodified lines
2626 #include <asm/pgtable.h>
2727 #include <asm/tlbflush.h>
2828
29−void *
29+void __iomem *
3030 iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot);
3131
3232 void
33−iounmap_atomic(void *kvaddr, enum km_type type);
33+iounmap_atomic(void __iomem *kvaddr, enum km_type type);
3434
3535 int
3636 iomap_create_wc(resource_size_t base, unsigned long size, pgprot_t *prot);
arch/x86/include/asm/kvm_emulate.h+6−1
@@ -152,9 +152,14 @@ struct x86_emulate_ops { · 151 unmodified lines
152152 struct operand {
153153 enum { OP_REG, OP_MEM, OP_IMM, OP_NONE } type;
154154 unsigned int bytes;
155− unsigned long orig_val, *ptr;
155+ union {
156+ unsigned long orig_val;
157+ u64 orig_val64;
158+ };
159+ unsigned long *ptr;
156160 union {
157161 unsigned long val;
162+ u64 val64;
158163 char valptr[sizeof(unsigned long) + 2];
159164 };
160165 };
arch/x86/include/asm/pci.h+4−2
@@ -27,6 +27,9 @@ extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops, · 26 unmodified lines
2727 int node);
2828 extern struct pci_bus *pci_scan_bus_with_sysdata(int busno);
2929
30+#ifdef CONFIG_PCI
31+
32+#ifdef CONFIG_PCI_DOMAINS
3033 static inline int pci_domain_nr(struct pci_bus *bus)
3134 {
3235 struct pci_sysdata *sd = bus->sysdata;
@@ -37,13 +40,12 @@ static inline int pci_proc_domain(struct pci_bus *bus) · 4 unmodified lines
3740 {
3841 return pci_domain_nr(bus);
3942 }
40−
43+#endif
4144
4245 /* Can be used to override the logic in pci_scan_bus for skipping
4346 already-configured bus numbers - to be used for buggy BIOSes
4447 or architectures with incomplete PCI setup by the loader */
4548
46−#ifdef CONFIG_PCI
4749 extern unsigned int pcibios_assign_all_busses(void);
4850 extern int pci_legacy_init(void);
4951 # ifdef CONFIG_ACPI
arch/x86/include/asm/tsc.h+2−0
@@ -59,5 +59,7 @@ extern void check_tsc_sync_source(int cpu); · 58 unmodified lines
5959 extern void check_tsc_sync_target(void);
6060
6161 extern int notsc_setup(char *);
62+extern void save_sched_clock_state(void);
63+extern void restore_sched_clock_state(void);
6264
6365 #endif /* _ASM_X86_TSC_H */
arch/x86/kernel/cpu/mcheck/mce_amd.c+2−2
@@ -530,7 +530,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) · 529 unmodified lines
530530 err = -ENOMEM;
531531 goto out;
532532 }
533− if (!alloc_cpumask_var(&b->cpus, GFP_KERNEL)) {
533+ if (!zalloc_cpumask_var(&b->cpus, GFP_KERNEL)) {
534534 kfree(b);
535535 err = -ENOMEM;
536536 goto out;
@@ -543,7 +543,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) · 6 unmodified lines
543543 #ifndef CONFIG_SMP
544544 cpumask_setall(b->cpus);
545545 #else
546− cpumask_copy(b->cpus, c->llc_shared_map);
546+ cpumask_set_cpu(cpu, b->cpus);
547547 #endif
548548
549549 per_cpu(threshold_banks, cpu)[bank] = b;
arch/x86/kernel/cpu/mcheck/therm_throt.c+5−4
@@ -202,10 +202,11 @@ static int therm_throt_process(bool new_event, int event, int level) · 201 unmodified lines
202202
203203 #ifdef CONFIG_SYSFS
204204 /* Add/Remove thermal_throttle interface for CPU device: */
205−static __cpuinit int thermal_throttle_add_dev(struct sys_device *sys_dev)
205+static __cpuinit int thermal_throttle_add_dev(struct sys_device *sys_dev,
206+ unsigned int cpu)
206207 {
207208 int err;
208− struct cpuinfo_x86 *c = &cpu_data(smp_processor_id());
209+ struct cpuinfo_x86 *c = &cpu_data(cpu);
209210
210211 err = sysfs_create_group(&sys_dev->kobj, &thermal_attr_group);
211212 if (err)
@@ -251,7 +252,7 @@ thermal_throttle_cpu_callback(struct notifier_block *nfb, · 39 unmodified lines
251252 case CPU_UP_PREPARE:
252253 case CPU_UP_PREPARE_FROZEN:
253254 mutex_lock(&therm_cpu_lock);
254− err = thermal_throttle_add_dev(sys_dev);
255+ err = thermal_throttle_add_dev(sys_dev, cpu);
255256 mutex_unlock(&therm_cpu_lock);
256257 WARN_ON(err);
257258 break;
@@ -287,7 +288,7 @@ static __init int thermal_throttle_init_device(void) · 29 unmodified lines
287288 #endif
288289 /* connect live CPUs to sysfs */
289290 for_each_online_cpu(cpu) {
290− err = thermal_throttle_add_dev(get_cpu_sysdev(cpu));
291+ err = thermal_throttle_add_dev(get_cpu_sysdev(cpu), cpu);
291292 WARN_ON(err);
292293 }
293294 #ifdef CONFIG_HOTPLUG_CPU
arch/x86/kernel/trampoline.c+1−2
@@ -45,8 +45,7 @@ void __init setup_trampoline_page_table(void) · 44 unmodified lines
4545 /* Copy kernel address range */
4646 clone_pgd_range(trampoline_pg_dir + KERNEL_PGD_BOUNDARY,
4747 swapper_pg_dir + KERNEL_PGD_BOUNDARY,
48− min_t(unsigned long, KERNEL_PGD_PTRS,
49− KERNEL_PGD_BOUNDARY));
48+ KERNEL_PGD_PTRS);
5049
5150 /* Initialize low mappings */
5251 clone_pgd_range(trampoline_pg_dir,
arch/x86/kernel/tsc.c+38−0
@@ -626,6 +626,44 @@ static void set_cyc2ns_scale(unsigned long cpu_khz, int cpu) · 625 unmodified lines
626626 local_irq_restore(flags);
627627 }
628628
629+static unsigned long long cyc2ns_suspend;
630+
631+void save_sched_clock_state(void)
632+{
633+ if (!sched_clock_stable)
634+ return;
635+
636+ cyc2ns_suspend = sched_clock();
637+}
638+
639+/*
640+ * Even on processors with invariant TSC, TSC gets reset in some the
641+ * ACPI system sleep states. And in some systems BIOS seem to reinit TSC to
642+ * arbitrary value (still sync'd across cpu's) during resume from such sleep
643+ * states. To cope up with this, recompute the cyc2ns_offset for each cpu so
644+ * that sched_clock() continues from the point where it was left off during
645+ * suspend.
646+ */
647+void restore_sched_clock_state(void)
648+{
649+ unsigned long long offset;
650+ unsigned long flags;
651+ int cpu;
652+
653+ if (!sched_clock_stable)
654+ return;
655+
656+ local_irq_save(flags);
657+
658+ __get_cpu_var(cyc2ns_offset) = 0;
659+ offset = cyc2ns_suspend - sched_clock();
660+
661+ for_each_possible_cpu(cpu)
662+ per_cpu(cyc2ns_offset, cpu) = offset;
663+
664+ local_irq_restore(flags);
665+}
666+
629667 #ifdef CONFIG_CPU_FREQ
630668
631669 /* Frequency scaling support. Adjust the TSC based timer when the cpu frequency
arch/x86/kvm/emulate.c+4−5
@@ -1870,17 +1870,16 @@ static inline int emulate_grp9(struct x86_emulate_ctxt *ctxt, · 1869 unmodified lines
18701870 struct x86_emulate_ops *ops)
18711871 {
18721872 struct decode_cache *c = &ctxt->decode;
1873− u64 old = c->dst.orig_val;
1873+ u64 old = c->dst.orig_val64;
18741874
18751875 if (((u32) (old >> 0) != (u32) c->regs[VCPU_REGS_RAX]) ||
18761876 ((u32) (old >> 32) != (u32) c->regs[VCPU_REGS_RDX])) {
1877−
18781877 c->regs[VCPU_REGS_RAX] = (u32) (old >> 0);
18791878 c->regs[VCPU_REGS_RDX] = (u32) (old >> 32);
18801879 ctxt->eflags &= ~EFLG_ZF;
18811880 } else {
1882− c->dst.val = ((u64)c->regs[VCPU_REGS_RCX] << 32) |
1883− (u32) c->regs[VCPU_REGS_RBX];
1881+ c->dst.val64 = ((u64)c->regs[VCPU_REGS_RCX] << 32) |
1882+ (u32) c->regs[VCPU_REGS_RBX];
18841883
18851884 ctxt->eflags |= EFLG_ZF;
18861885 }
@@ -2616,7 +2615,7 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) · 729 unmodified lines
26162615 c->src.valptr, c->src.bytes);
26172616 if (rc != X86EMUL_CONTINUE)
26182617 goto done;
2619− c->src.orig_val = c->src.val;
2618+ c->src.orig_val64 = c->src.val64;
26202619 }
26212620
26222621 if (c->src2.type == OP_MEM) {
arch/x86/kvm/i8259.c+3−0
@@ -64,6 +64,9 @@ static void pic_unlock(struct kvm_pic *s) · 63 unmodified lines
6464 if (!found)
6565 found = s->kvm->bsp_vcpu;
6666
67+ if (!found)
68+ return;
69+
6770 kvm_vcpu_kick(found);
6871 }
6972 }
arch/x86/kvm/irq.h+1−1
@@ -43,7 +43,6 @@ struct kvm_kpic_state { · 42 unmodified lines
4343 u8 irr; /* interrupt request register */
4444 u8 imr; /* interrupt mask register */
4545 u8 isr; /* interrupt service register */
46− u8 isr_ack; /* interrupt ack detection */
4746 u8 priority_add; /* highest irq priority */
4847 u8 irq_base;
4948 u8 read_reg_select;
@@ -56,6 +55,7 @@ struct kvm_kpic_state { · 6 unmodified lines
5655 u8 init4; /* true if 4 byte init */
5756 u8 elcr; /* PIIX edge/trigger selection */
5857 u8 elcr_mask;
58+ u8 isr_ack; /* interrupt ack detection */
5959 struct kvm_pic *pics_state;
6060 };
6161
arch/x86/mm/iomap_32.c+3−3
@@ -74,7 +74,7 @@ void *kmap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot) · 73 unmodified lines
7474 /*
7575 * Map 'pfn' using fixed map 'type' and protections 'prot'
7676 */
77−void *
77+void __iomem *
7878 iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot)
7979 {
8080 /*
@@ -86,12 +86,12 @@ iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot) · 5 unmodified lines
8686 if (!pat_enabled && pgprot_val(prot) == pgprot_val(PAGE_KERNEL_WC))
8787 prot = PAGE_KERNEL_UC_MINUS;
8888
89− return kmap_atomic_prot_pfn(pfn, type, prot);
89+ return (void __force __iomem *) kmap_atomic_prot_pfn(pfn, type, prot);
9090 }
9191 EXPORT_SYMBOL_GPL(iomap_atomic_prot_pfn);
9292
9393 void
94−iounmap_atomic(void *kvaddr, enum km_type type)
94+iounmap_atomic(void __iomem *kvaddr, enum km_type type)
9595 {
9696 unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK;
9797 enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id();
arch/x86/power/cpu.c+2−0
@@ -113,6 +113,7 @@ static void __save_processor_state(struct saved_context *ctxt) · 112 unmodified lines
113113 void save_processor_state(void)
114114 {
115115 __save_processor_state(&saved_context);
116+ save_sched_clock_state();
116117 }
117118 #ifdef CONFIG_X86_32
118119 EXPORT_SYMBOL(save_processor_state);
@@ -229,6 +230,7 @@ static void __restore_processor_state(struct saved_context *ctxt) · 110 unmodified lines
229230 void restore_processor_state(void)
230231 {
231232 __restore_processor_state(&saved_context);
233+ restore_sched_clock_state();
232234 }
233235 #ifdef CONFIG_X86_32
234236 EXPORT_SYMBOL(restore_processor_state);
block/blk-cgroup.c+1−1
@@ -966,7 +966,7 @@ blkiocg_create(struct cgroup_subsys *subsys, struct cgroup *cgroup) · 965 unmodified lines
966966
967967 /* Currently we do not support hierarchy deeper than two level (0,1) */
968968 if (parent != cgroup->top_cgroup)
969− return ERR_PTR(-EINVAL);
969+ return ERR_PTR(-EPERM);
970970
971971 blkcg = kzalloc(sizeof(*blkcg), GFP_KERNEL);
972972 if (!blkcg)
block/blk-core.c+3−3
@@ -1198,9 +1198,9 @@ static int __make_request(struct request_queue *q, struct bio *bio) · 1197 unmodified lines
11981198 int el_ret;
11991199 unsigned int bytes = bio->bi_size;
12001200 const unsigned short prio = bio_prio(bio);
1201− const bool sync = (bio->bi_rw & REQ_SYNC);
1202− const bool unplug = (bio->bi_rw & REQ_UNPLUG);
1203− const unsigned int ff = bio->bi_rw & REQ_FAILFAST_MASK;
1201+ const bool sync = !!(bio->bi_rw & REQ_SYNC);
1202+ const bool unplug = !!(bio->bi_rw & REQ_UNPLUG);
1203+ const unsigned long ff = bio->bi_rw & REQ_FAILFAST_MASK;
12041204 int rw_flags;
12051205
12061206 if ((bio->bi_rw & REQ_HARDBARRIER) &&
block/blk-sysfs.c+1−0
@@ -511,6 +511,7 @@ int blk_register_queue(struct gendisk *disk) · 510 unmodified lines
511511 kobject_uevent(&q->kobj, KOBJ_REMOVE);
512512 kobject_del(&q->kobj);
513513 blk_trace_remove_sysfs(disk_to_dev(disk));
514+ kobject_put(&dev->kobj);
514515 return ret;
515516 }
516517
block/blk.h+6−2
@@ -142,14 +142,18 @@ static inline int queue_congestion_off_threshold(struct request_queue *q) · 141 unmodified lines
142142
143143 static inline int blk_cpu_to_group(int cpu)
144144 {
145+ int group = NR_CPUS;
145146 #ifdef CONFIG_SCHED_MC
146147 const struct cpumask *mask = cpu_coregroup_mask(cpu);
147− return cpumask_first(mask);
148+ group = cpumask_first(mask);
148149 #elif defined(CONFIG_SCHED_SMT)
149− return cpumask_first(topology_thread_cpumask(cpu));
150+ group = cpumask_first(topology_thread_cpumask(cpu));
150151 #else
151152 return cpu;
152153 #endif
154+ if (likely(group < NR_CPUS))
155+ return group;
156+ return cpu;
153157 }
154158
155159 /*
block/cfq-iosched.c+88−15
@@ -30,6 +30,7 @@ static const int cfq_slice_sync = HZ / 10; · 29 unmodified lines
3030 static int cfq_slice_async = HZ / 25;
3131 static const int cfq_slice_async_rq = 2;
3232 static int cfq_slice_idle = HZ / 125;
33+static int cfq_group_idle = HZ / 125;
3334 static const int cfq_target_latency = HZ * 3/10; /* 300 ms */
3435 static const int cfq_hist_divisor = 4;
3536
@@ -147,6 +148,8 @@ struct cfq_queue { · 111 unmodified lines
147148 struct cfq_queue *new_cfqq;
148149 struct cfq_group *cfqg;
149150 struct cfq_group *orig_cfqg;
151+ /* Number of sectors dispatched from queue in single dispatch round */
152+ unsigned long nr_sectors;
150153 };
151154
152155 /*
@@ -198,6 +201,8 @@ struct cfq_group { · 45 unmodified lines
198201 struct hlist_node cfqd_node;
199202 atomic_t ref;
200203 #endif
204+ /* number of requests that are on the dispatch list or inside driver */
205+ int dispatched;
201206 };
202207
203208 /*
@@ -271,6 +276,7 @@ struct cfq_data { · 67 unmodified lines
271276 unsigned int cfq_slice[2];
272277 unsigned int cfq_slice_async_rq;
273278 unsigned int cfq_slice_idle;
279+ unsigned int cfq_group_idle;
274280 unsigned int cfq_latency;
275281 unsigned int cfq_group_isolation;
276282
@@ -378,6 +384,21 @@ CFQ_CFQQ_FNS(wait_busy); · 101 unmodified lines
378384 &cfqg->service_trees[i][j]: NULL) \
379385
380386
387+static inline bool iops_mode(struct cfq_data *cfqd)
388+{
389+ /*
390+ * If we are not idling on queues and it is a NCQ drive, parallel
391+ * execution of requests is on and measuring time is not possible
392+ * in most of the cases until and unless we drive shallower queue
393+ * depths and that becomes a performance bottleneck. In such cases
394+ * switch to start providing fairness in terms of number of IOs.
395+ */
396+ if (!cfqd->cfq_slice_idle && cfqd->hw_tag)
397+ return true;
398+ else
399+ return false;
400+}
401+
381402 static inline enum wl_prio_t cfqq_prio(struct cfq_queue *cfqq)
382403 {
383404 if (cfq_class_idle(cfqq))
@@ -906,7 +927,6 @@ static inline unsigned int cfq_cfqq_slice_usage(struct cfq_queue *cfqq) · 522 unmodified lines
906927 slice_used = cfqq->allocated_slice;
907928 }
908929
909− cfq_log_cfqq(cfqq->cfqd, cfqq, "sl_used=%u", slice_used);
910930 return slice_used;
911931 }
912932
@@ -914,19 +934,21 @@ static void cfq_group_served(struct cfq_data *cfqd, struct cfq_group *cfqg, · 1 unmodified line
914934 struct cfq_queue *cfqq)
915935 {
916936 struct cfq_rb_root *st = &cfqd->grp_service_tree;
917− unsigned int used_sl, charge_sl;
937+ unsigned int used_sl, charge;
918938 int nr_sync = cfqg->nr_cfqq - cfqg_busy_async_queues(cfqd, cfqg)
919939 - cfqg->service_tree_idle.count;
920940
921941 BUG_ON(nr_sync < 0);
922− used_sl = charge_sl = cfq_cfqq_slice_usage(cfqq);
942+ used_sl = charge = cfq_cfqq_slice_usage(cfqq);
923943
924− if (!cfq_cfqq_sync(cfqq) && !nr_sync)
925− charge_sl = cfqq->allocated_slice;
944+ if (iops_mode(cfqd))
945+ charge = cfqq->slice_dispatch;
946+ else if (!cfq_cfqq_sync(cfqq) && !nr_sync)
947+ charge = cfqq->allocated_slice;
926948
927949 /* Can't update vdisktime while group is on service tree */
928950 cfq_rb_erase(&cfqg->rb_node, st);
929− cfqg->vdisktime += cfq_scale_slice(charge_sl, cfqg);
951+ cfqg->vdisktime += cfq_scale_slice(charge, cfqg);
930952 __cfq_group_service_tree_add(st, cfqg);
931953
932954 /* This group is being expired. Save the context */
@@ -940,6 +962,9 @@ static void cfq_group_served(struct cfq_data *cfqd, struct cfq_group *cfqg, · 7 unmodified lines
940962
941963 cfq_log_cfqg(cfqd, cfqg, "served: vt=%llu min_vt=%llu", cfqg->vdisktime,
942964 st->min_vdisktime);
965+ cfq_log_cfqq(cfqq->cfqd, cfqq, "sl_used=%u disp=%u charge=%u iops=%u"
966+ " sect=%u", used_sl, cfqq->slice_dispatch, charge,
967+ iops_mode(cfqd), cfqq->nr_sectors);
943968 cfq_blkiocg_update_timeslice_used(&cfqg->blkg, used_sl);
944969 cfq_blkiocg_set_start_empty_time(&cfqg->blkg);
945970 }
@@ -1587,6 +1612,7 @@ static void __cfq_set_active_queue(struct cfq_data *cfqd, · 641 unmodified lines
15871612 cfqq->allocated_slice = 0;
15881613 cfqq->slice_end = 0;
15891614 cfqq->slice_dispatch = 0;
1615+ cfqq->nr_sectors = 0;
15901616
15911617 cfq_clear_cfqq_wait_request(cfqq);
15921618 cfq_clear_cfqq_must_dispatch(cfqq);
@@ -1839,6 +1865,9 @@ static bool cfq_should_idle(struct cfq_data *cfqd, struct cfq_queue *cfqq) · 246 unmodified lines
18391865 BUG_ON(!service_tree);
18401866 BUG_ON(!service_tree->count);
18411867
1868+ if (!cfqd->cfq_slice_idle)
1869+ return false;
1870+
18421871 /* We never do for idle class queues. */
18431872 if (prio == IDLE_WORKLOAD)
18441873 return false;
@@ -1863,7 +1892,7 @@ static void cfq_arm_slice_timer(struct cfq_data *cfqd) · 18 unmodified lines
18631892 {
18641893 struct cfq_queue *cfqq = cfqd->active_queue;
18651894 struct cfq_io_context *cic;
1866− unsigned long sl;
1895+ unsigned long sl, group_idle = 0;
18671896
18681897 /*
18691898 * SSD device without seek penalty, disable idling. But only do so
@@ -1879,8 +1908,13 @@ static void cfq_arm_slice_timer(struct cfq_data *cfqd) · 9 unmodified lines
18791908 /*
18801909 * idle is disabled, either manually or by past process history
18811910 */
1882− if (!cfqd->cfq_slice_idle || !cfq_should_idle(cfqd, cfqq))
1883− return;
1911+ if (!cfq_should_idle(cfqd, cfqq)) {
1912+ /* no queue idling. Check for group idling */
1913+ if (cfqd->cfq_group_idle)
1914+ group_idle = cfqd->cfq_group_idle;
1915+ else
1916+ return;
1917+ }
18841918
18851919 /*
18861920 * still active requests from this queue, don't idle
@@ -1907,13 +1941,21 @@ static void cfq_arm_slice_timer(struct cfq_data *cfqd) · 20 unmodified lines
19071941 return;
19081942 }
19091943
1944+ /* There are other queues in the group, don't do group idle */
1945+ if (group_idle && cfqq->cfqg->nr_cfqq > 1)
1946+ return;
1947+
19101948 cfq_mark_cfqq_wait_request(cfqq);
19111949
1912− sl = cfqd->cfq_slice_idle;
1950+ if (group_idle)
1951+ sl = cfqd->cfq_group_idle;
1952+ else
1953+ sl = cfqd->cfq_slice_idle;
19131954
19141955 mod_timer(&cfqd->idle_slice_timer, jiffies + sl);
19151956 cfq_blkiocg_update_set_idle_time_stats(&cfqq->cfqg->blkg);
1916− cfq_log_cfqq(cfqd, cfqq, "arm_idle: %lu", sl);
1957+ cfq_log_cfqq(cfqd, cfqq, "arm_idle: %lu group_idle: %d", sl,
1958+ group_idle ? 1 : 0);
19171959 }
19181960
19191961 /*
@@ -1929,9 +1971,11 @@ static void cfq_dispatch_insert(struct request_queue *q, struct request *rq) · 9 unmodified lines
19291971 cfqq->next_rq = cfq_find_next_rq(cfqd, cfqq, rq);
19301972 cfq_remove_request(rq);
19311973 cfqq->dispatched++;
1974+ (RQ_CFQG(rq))->dispatched++;
19321975 elv_dispatch_sort(q, rq);
19331976
19341977 cfqd->rq_in_flight[cfq_cfqq_sync(cfqq)]++;
1978+ cfqq->nr_sectors += blk_rq_sectors(rq);
19351979 cfq_blkiocg_update_dispatch_stats(&cfqq->cfqg->blkg, blk_rq_bytes(rq),
19361980 rq_data_dir(rq), rq_is_sync(rq));
19371981 }
@@ -2198,7 +2242,7 @@ static struct cfq_queue *cfq_select_queue(struct cfq_data *cfqd) · 260 unmodified lines
21982242 cfqq = NULL;
21992243 goto keep_queue;
22002244 } else
2201− goto expire;
2245+ goto check_group_idle;
22022246 }
22032247
22042248 /*
@@ -2226,8 +2270,23 @@ static struct cfq_queue *cfq_select_queue(struct cfq_data *cfqd) · 21 unmodified lines
22262270 * flight or is idling for a new request, allow either of these
22272271 * conditions to happen (or time out) before selecting a new queue.
22282272 */
2229− if (timer_pending(&cfqd->idle_slice_timer) ||
2230− (cfqq->dispatched && cfq_should_idle(cfqd, cfqq))) {
2273+ if (timer_pending(&cfqd->idle_slice_timer)) {
2274+ cfqq = NULL;
2275+ goto keep_queue;
2276+ }
2277+
2278+ if (cfqq->dispatched && cfq_should_idle(cfqd, cfqq)) {
2279+ cfqq = NULL;
2280+ goto keep_queue;
2281+ }
2282+
2283+ /*
2284+ * If group idle is enabled and there are requests dispatched from
2285+ * this group, wait for requests to complete.
2286+ */
2287+check_group_idle:
2288+ if (cfqd->cfq_group_idle && cfqq->cfqg->nr_cfqq == 1
2289+ && cfqq->cfqg->dispatched) {
22312290 cfqq = NULL;
22322291 goto keep_queue;
22332292 }
@@ -3375,6 +3434,7 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq) · 1141 unmodified lines
33753434 WARN_ON(!cfqq->dispatched);
33763435 cfqd->rq_in_driver--;
33773436 cfqq->dispatched--;
3437+ (RQ_CFQG(rq))->dispatched--;
33783438 cfq_blkiocg_update_completion_stats(&cfqq->cfqg->blkg,
33793439 rq_start_time_ns(rq), rq_io_start_time_ns(rq),
33803440 rq_data_dir(rq), rq_is_sync(rq));
@@ -3404,7 +3464,10 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq) · 23 unmodified lines
34043464 * the queue.
34053465 */
34063466 if (cfq_should_wait_busy(cfqd, cfqq)) {
3407− cfqq->slice_end = jiffies + cfqd->cfq_slice_idle;
3467+ unsigned long extend_sl = cfqd->cfq_slice_idle;
3468+ if (!cfqd->cfq_slice_idle)
3469+ extend_sl = cfqd->cfq_group_idle;
3470+ cfqq->slice_end = jiffies + extend_sl;
34083471 cfq_mark_cfqq_wait_busy(cfqq);
34093472 cfq_log_cfqq(cfqd, cfqq, "will busy wait");
34103473 }
@@ -3850,6 +3913,7 @@ static void *cfq_init_queue(struct request_queue *q) · 439 unmodified lines
38503913 cfqd->cfq_slice[1] = cfq_slice_sync;
38513914 cfqd->cfq_slice_async_rq = cfq_slice_async_rq;
38523915 cfqd->cfq_slice_idle = cfq_slice_idle;
3916+ cfqd->cfq_group_idle = cfq_group_idle;
38533917 cfqd->cfq_latency = 1;
38543918 cfqd->cfq_group_isolation = 0;
38553919 cfqd->hw_tag = -1;
@@ -3922,6 +3986,7 @@ SHOW_FUNCTION(cfq_fifo_expire_async_show, cfqd->cfq_fifo_expire[0], 1); · 66 unmodified lines
39223986 SHOW_FUNCTION(cfq_back_seek_max_show, cfqd->cfq_back_max, 0);
39233987 SHOW_FUNCTION(cfq_back_seek_penalty_show, cfqd->cfq_back_penalty, 0);
39243988 SHOW_FUNCTION(cfq_slice_idle_show, cfqd->cfq_slice_idle, 1);
3989+SHOW_FUNCTION(cfq_group_idle_show, cfqd->cfq_group_idle, 1);
39253990 SHOW_FUNCTION(cfq_slice_sync_show, cfqd->cfq_slice[1], 1);
39263991 SHOW_FUNCTION(cfq_slice_async_show, cfqd->cfq_slice[0], 1);
39273992 SHOW_FUNCTION(cfq_slice_async_rq_show, cfqd->cfq_slice_async_rq, 0);
@@ -3954,6 +4019,7 @@ STORE_FUNCTION(cfq_back_seek_max_store, &cfqd->cfq_back_max, 0, UINT_MAX, 0); · 26 unmodified lines
39544019 STORE_FUNCTION(cfq_back_seek_penalty_store, &cfqd->cfq_back_penalty, 1,
39554020 UINT_MAX, 0);
39564021 STORE_FUNCTION(cfq_slice_idle_store, &cfqd->cfq_slice_idle, 0, UINT_MAX, 1);
4022+STORE_FUNCTION(cfq_group_idle_store, &cfqd->cfq_group_idle, 0, UINT_MAX, 1);
39574023 STORE_FUNCTION(cfq_slice_sync_store, &cfqd->cfq_slice[1], 1, UINT_MAX, 1);
39584024 STORE_FUNCTION(cfq_slice_async_store, &cfqd->cfq_slice[0], 1, UINT_MAX, 1);
39594025 STORE_FUNCTION(cfq_slice_async_rq_store, &cfqd->cfq_slice_async_rq, 1,
@@ -3975,6 +4041,7 @@ static struct elv_fs_entry cfq_attrs[] = { · 15 unmodified lines
39754041 CFQ_ATTR(slice_async),
39764042 CFQ_ATTR(slice_async_rq),
39774043 CFQ_ATTR(slice_idle),
4044+ CFQ_ATTR(group_idle),
39784045 CFQ_ATTR(low_latency),
39794046 CFQ_ATTR(group_isolation),
39804047 __ATTR_NULL
@@ -4028,6 +4095,12 @@ static int __init cfq_init(void) · 47 unmodified lines
40284095 if (!cfq_slice_idle)
40294096 cfq_slice_idle = 1;
40304097
4098+#ifdef CONFIG_CFQ_GROUP_IOSCHED
4099+ if (!cfq_group_idle)
4100+ cfq_group_idle = 1;
4101+#else
4102+ cfq_group_idle = 0;
4103+#endif
40314104 if (cfq_slab_setup())
40324105 return -ENOMEM;
40334106
block/elevator.c+31−13
@@ -1009,18 +1009,19 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e) · 1008 unmodified lines
10091009 {
10101010 struct elevator_queue *old_elevator, *e;
10111011 void *data;
1012+ int err;
10121013
10131014 /*
10141015 * Allocate new elevator
10151016 */
10161017 e = elevator_alloc(q, new_e);
10171018 if (!e)
1018− return 0;
1019+ return -ENOMEM;
10191020
10201021 data = elevator_init_queue(q, e);
10211022 if (!data) {
10221023 kobject_put(&e->kobj);
1023− return 0;
1024+ return -ENOMEM;
10241025 }
10251026
10261027 /*
@@ -1043,7 +1044,8 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e) · 16 unmodified lines
10431044
10441045 __elv_unregister_queue(old_elevator);
10451046
1046− if (elv_register_queue(q))
1047+ err = elv_register_queue(q);
1048+ if (err)
10471049 goto fail_register;
10481050
10491051 /*
@@ -1056,7 +1058,7 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e) · 6 unmodified lines
10561058
10571059 blk_add_trace_msg(q, "elv switch: %s", e->elevator_type->elevator_name);
10581060
1059− return 1;
1061+ return 0;
10601062
10611063 fail_register:
10621064 /*
@@ -1071,17 +1073,19 @@ fail_register: · 8 unmodified lines
10711073 queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q);
10721074 spin_unlock_irq(q->queue_lock);
10731075
1074− return 0;
1076+ return err;
10751077 }
10761078
1077−ssize_t elv_iosched_store(struct request_queue *q, const char *name,
1078− size_t count)
1079+/*
1080+ * Switch this queue to the given IO scheduler.
1081+ */
1082+int elevator_change(struct request_queue *q, const char *name)
10791083 {
10801084 char elevator_name[ELV_NAME_MAX];
10811085 struct elevator_type *e;
10821086
10831087 if (!q->elevator)
1084− return count;
1088+ return -ENXIO;
10851089
10861090 strlcpy(elevator_name, name, sizeof(elevator_name));
10871091 e = elevator_get(strstrip(elevator_name));
@@ -1092,13 +1096,27 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name, · 4 unmodified lines
10921096
10931097 if (!strcmp(elevator_name, q->elevator->elevator_type->elevator_name)) {
10941098 elevator_put(e);
1095− return count;
1099+ return 0;
10961100 }
10971101
1098− if (!elevator_switch(q, e))
1099− printk(KERN_ERR "elevator: switch to %s failed\n",
1100− elevator_name);
1101− return count;
1102+ return elevator_switch(q, e);
1103+}
1104+EXPORT_SYMBOL(elevator_change);
1105+
1106+ssize_t elv_iosched_store(struct request_queue *q, const char *name,
1107+ size_t count)
1108+{
1109+ int ret;
1110+
1111+ if (!q->elevator)
1112+ return count;
1113+
1114+ ret = elevator_change(q, name);
1115+ if (!ret)
1116+ return count;
1117+
1118+ printk(KERN_ERR "elevator: switch to %s failed\n", name);
1119+ return ret;
11021120 }
11031121
11041122 ssize_t elv_iosched_show(struct request_queue *q, char *name)
crypto/Kconfig+4−4
@@ -101,13 +101,13 @@ config CRYPTO_MANAGER2 · 100 unmodified lines
101101 select CRYPTO_BLKCIPHER2
102102 select CRYPTO_PCOMP2
103103
104−config CRYPTO_MANAGER_TESTS
105− bool "Run algolithms' self-tests"
104+config CRYPTO_MANAGER_DISABLE_TESTS
105+ bool "Disable run-time self tests"
106106 default y
107107 depends on CRYPTO_MANAGER2
108108 help
109− Run cryptomanager's tests for the new crypto algorithms being
110− registered.
109+ Disable run-time self tests that normally take place at
110+ algorithm registration.
111111
112112 config CRYPTO_GF128MUL
113113 tristate "GF(2^128) multiplication functions (EXPERIMENTAL)"
crypto/ahash.c+5−2
@@ -47,8 +47,11 @@ static int hash_walk_next(struct crypto_hash_walk *walk) · 46 unmodified lines
4747 walk->data = crypto_kmap(walk->pg, 0);
4848 walk->data += offset;
4949
50− if (offset & alignmask)
51− nbytes = alignmask + 1 - (offset & alignmask);
50+ if (offset & alignmask) {
51+ unsigned int unaligned = alignmask + 1 - (offset & alignmask);
52+ if (nbytes > unaligned)
53+ nbytes = unaligned;
54+ }
5255
5356 walk->entrylen -= nbytes;
5457 return nbytes;
crypto/algboss.c+4−4
@@ -206,13 +206,16 @@ err: · 205 unmodified lines
206206 return NOTIFY_OK;
207207 }
208208
209−#ifdef CONFIG_CRYPTO_MANAGER_TESTS
210209 static int cryptomgr_test(void *data)
211210 {
212211 struct crypto_test_param *param = data;
213212 u32 type = param->type;
214213 int err = 0;
215214
215+#ifdef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
216+ goto skiptest;
217+#endif
218+
216219 if (type & CRYPTO_ALG_TESTED)
217220 goto skiptest;
218221
@@ -267,7 +270,6 @@ err_put_module: · 48 unmodified lines
267270 err:
268271 return NOTIFY_OK;
269272 }
270−#endif /* CONFIG_CRYPTO_MANAGER_TESTS */
271273
272274 static int cryptomgr_notify(struct notifier_block *this, unsigned long msg,
273275 void *data)
@@ -275,10 +277,8 @@ static int cryptomgr_notify(struct notifier_block *this, unsigned long msg, · 1 unmodified line
275277 switch (msg) {
276278 case CRYPTO_MSG_ALG_REQUEST:
277279 return cryptomgr_schedule_probe(data);
278−#ifdef CONFIG_CRYPTO_MANAGER_TESTS
279280 case CRYPTO_MSG_ALG_REGISTER:
280281 return cryptomgr_schedule_test(data);
281−#endif
282282 }
283283
284284 return NOTIFY_DONE;
crypto/testmgr.c+2−2
@@ -23,7 +23,7 @@ · 22 unmodified lines
2323
2424 #include "internal.h"
2525
26−#ifndef CONFIG_CRYPTO_MANAGER_TESTS
26+#ifdef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
2727
2828 /* a perfect nop */
2929 int alg_test(const char *driver, const char *alg, u32 type, u32 mask)
@@ -2542,6 +2542,6 @@ non_fips_alg: · 2512 unmodified lines
25422542 return -EINVAL;
25432543 }
25442544
2545−#endif /* CONFIG_CRYPTO_MANAGER_TESTS */
2545+#endif /* CONFIG_CRYPTO_MANAGER_DISABLE_TESTS */
25462546
25472547 EXPORT_SYMBOL_GPL(alg_test);
drivers/acpi/pci_root.c+56−41
@@ -33,7 +33,6 @@ · 32 unmodified lines
3333 #include <linux/pm_runtime.h>
3434 #include <linux/pci.h>
3535 #include <linux/pci-acpi.h>
36−#include <linux/pci-aspm.h>
3736 #include <linux/acpi.h>
3837 #include <linux/slab.h>
3938 #include <acpi/acpi_bus.h>
@@ -226,22 +225,31 @@ static acpi_status acpi_pci_run_osc(acpi_handle handle, · 186 unmodified lines
226225 return status;
227226 }
228227
229−static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root, u32 flags)
228+static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root,
229+ u32 support,
230+ u32 *control)
230231 {
231232 acpi_status status;
232− u32 support_set, result, capbuf[3];
233+ u32 result, capbuf[3];
234+
235+ support &= OSC_PCI_SUPPORT_MASKS;
236+ support |= root->osc_support_set;
233237
234− /* do _OSC query for all possible controls */
235− support_set = root->osc_support_set | (flags & OSC_PCI_SUPPORT_MASKS);
236238 capbuf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE;
237− capbuf[OSC_SUPPORT_TYPE] = support_set;
238− capbuf[OSC_CONTROL_TYPE] = OSC_PCI_CONTROL_MASKS;
239+ capbuf[OSC_SUPPORT_TYPE] = support;
240+ if (control) {
241+ *control &= OSC_PCI_CONTROL_MASKS;
242+ capbuf[OSC_CONTROL_TYPE] = *control | root->osc_control_set;
243+ } else {
244+ /* Run _OSC query for all possible controls. */
245+ capbuf[OSC_CONTROL_TYPE] = OSC_PCI_CONTROL_MASKS;
246+ }
239247
240248 status = acpi_pci_run_osc(root->device->handle, capbuf, &result);
241249 if (ACPI_SUCCESS(status)) {
242− root->osc_support_set = support_set;
243− root->osc_control_qry = result;
244− root->osc_queried = 1;
250+ root->osc_support_set = support;
251+ if (control)
252+ *control = result;
245253 }
246254 return status;
247255 }
@@ -255,7 +263,7 @@ static acpi_status acpi_pci_osc_support(struct acpi_pci_root *root, u32 flags) · 7 unmodified lines
255263 if (ACPI_FAILURE(status))
256264 return status;
257265 mutex_lock(&osc_lock);
258− status = acpi_pci_query_osc(root, flags);
266+ status = acpi_pci_query_osc(root, flags, NULL);
259267 mutex_unlock(&osc_lock);
260268 return status;
261269 }
@@ -365,55 +373,70 @@ out: · 103 unmodified lines
365373 EXPORT_SYMBOL_GPL(acpi_get_pci_dev);
366374
367375 /**
368− * acpi_pci_osc_control_set - commit requested control to Firmware
369− * @handle: acpi_handle for the target ACPI object
370− * @flags: driver's requested control bits
376+ * acpi_pci_osc_control_set - Request control of PCI root _OSC features.
377+ * @handle: ACPI handle of a PCI root bridge (or PCIe Root Complex).
378+ * @mask: Mask of _OSC bits to request control of, place to store control mask.
379+ * @req: Mask of _OSC bits the control of is essential to the caller.
380+ *
381+ * Run _OSC query for @mask and if that is successful, compare the returned
382+ * mask of control bits with @req. If all of the @req bits are set in the
383+ * returned mask, run _OSC request for it.
371384 *
372− * Attempt to take control from Firmware on requested control bits.
385+ * The variable at the @mask address may be modified regardless of whether or
386+ * not the function returns success. On success it will contain the mask of
387+ * _OSC bits the BIOS has granted control of, but its contents are meaningless
388+ * on failure.
373389 **/
374−acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 flags)
390+acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 *mask, u32 req)
375391 {
392+ struct acpi_pci_root *root;
376393 acpi_status status;
377− u32 control_req, result, capbuf[3];
394+ u32 ctrl, capbuf[3];
378395 acpi_handle tmp;
379− struct acpi_pci_root *root;
380396
381− status = acpi_get_handle(handle, "_OSC", &tmp);
382− if (ACPI_FAILURE(status))
383− return status;
397+ if (!mask)
398+ return AE_BAD_PARAMETER;
384399
385− control_req = (flags & OSC_PCI_CONTROL_MASKS);
386− if (!control_req)
400+ ctrl = *mask & OSC_PCI_CONTROL_MASKS;
401+ if ((ctrl & req) != req)
387402 return AE_TYPE;
388403
389404 root = acpi_pci_find_root(handle);
390405 if (!root)
391406 return AE_NOT_EXIST;
392407
408+ status = acpi_get_handle(handle, "_OSC", &tmp);
409+ if (ACPI_FAILURE(status))
410+ return status;
411+
393412 mutex_lock(&osc_lock);
413+
414+ *mask = ctrl | root->osc_control_set;
394415 /* No need to evaluate _OSC if the control was already granted. */
395− if ((root->osc_control_set & control_req) == control_req)
416+ if ((root->osc_control_set & ctrl) == ctrl)
396417 goto out;
397418
398− /* Need to query controls first before requesting them */
399− if (!root->osc_queried) {
400− status = acpi_pci_query_osc(root, root->osc_support_set);
419+ /* Need to check the available controls bits before requesting them. */
420+ while (*mask) {
421+ status = acpi_pci_query_osc(root, root->osc_support_set, mask);
401422 if (ACPI_FAILURE(status))
402423 goto out;
424+ if (ctrl == *mask)
425+ break;
426+ ctrl = *mask;
403427 }
404− if ((root->osc_control_qry & control_req) != control_req) {
405− printk(KERN_DEBUG
406− "Firmware did not grant requested _OSC control\n");
428+
429+ if ((ctrl & req) != req) {
407430 status = AE_SUPPORT;
408431 goto out;
409432 }
410433
411434 capbuf[OSC_QUERY_TYPE] = 0;
412435 capbuf[OSC_SUPPORT_TYPE] = root->osc_support_set;
413− capbuf[OSC_CONTROL_TYPE] = root->osc_control_set | control_req;
414− status = acpi_pci_run_osc(handle, capbuf, &result);
436+ capbuf[OSC_CONTROL_TYPE] = ctrl;
437+ status = acpi_pci_run_osc(handle, capbuf, mask);
415438 if (ACPI_SUCCESS(status))
416− root->osc_control_set = result;
439+ root->osc_control_set = *mask;
417440 out:
418441 mutex_unlock(&osc_lock);
419442 return status;
@@ -544,14 +567,6 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device) · 124 unmodified lines
544567 if (flags != base_flags)
545568 acpi_pci_osc_support(root, flags);
546569
547− status = acpi_pci_osc_control_set(root->device->handle,
548− OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
549−
550− if (ACPI_FAILURE(status)) {
551− printk(KERN_INFO "Unable to assume PCIe control: Disabling ASPM\n");
552− pcie_no_aspm();
553− }
554−
555570 pci_acpi_add_bus_pm_notifier(device, root->bus);
556571 if (device->wakeup.flags.run_wake)
557572 device_set_run_wake(root->bus->bridge, true);
drivers/ata/Kconfig+1−0
@@ -828,6 +828,7 @@ config PATA_SAMSUNG_CF · 827 unmodified lines
828828 config PATA_WINBOND_VLB
829829 tristate "Winbond W83759A VLB PATA support (Experimental)"
830830 depends on ISA && EXPERIMENTAL
831+ select PATA_LEGACY
831832 help
832833 Support for the Winbond W83759A controller on Vesa Local Bus
833834 systems.
drivers/ata/Makefile+0−1
@@ -89,7 +89,6 @@ obj-$(CONFIG_PATA_QDI) += pata_qdi.o · 88 unmodified lines
8989 obj-$(CONFIG_PATA_RB532) += pata_rb532_cf.o
9090 obj-$(CONFIG_PATA_RZ1000) += pata_rz1000.o
9191 obj-$(CONFIG_PATA_SAMSUNG_CF) += pata_samsung_cf.o
92−obj-$(CONFIG_PATA_WINBOND_VLB) += pata_winbond.o
9392
9493 obj-$(CONFIG_PATA_PXA) += pata_pxa.o
9594
drivers/ata/ahci.c+14−0
@@ -60,6 +60,7 @@ enum board_ids { · 59 unmodified lines
6060 board_ahci,
6161 board_ahci_ign_iferr,
6262 board_ahci_nosntf,
63+ board_ahci_yes_fbs,
6364
6465 /* board IDs for specific chipsets in alphabetical order */
6566 board_ahci_mcp65,
@@ -132,6 +133,14 @@ static const struct ata_port_info ahci_port_info[] = { · 66 unmodified lines
132133 .udma_mask = ATA_UDMA6,
133134 .port_ops = &ahci_ops,
134135 },
136+ [board_ahci_yes_fbs] =
137+ {
138+ AHCI_HFLAGS (AHCI_HFLAG_YES_FBS),
139+ .flags = AHCI_FLAG_COMMON,
140+ .pio_mask = ATA_PIO4,
141+ .udma_mask = ATA_UDMA6,
142+ .port_ops = &ahci_ops,
143+ },
135144 /* by chipsets */
136145 [board_ahci_mcp65] =
137146 {
@@ -244,6 +253,9 @@ static const struct pci_device_id ahci_pci_tbl[] = { · 106 unmodified lines
244253 { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT RAID */
245254 { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */
246255 { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */
256+ { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */
257+ { PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */
258+ { PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */
247259
248260 /* JMicron 360/1/3/5/6, match class to avoid IDE function */
249261 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
@@ -362,6 +374,8 @@ static const struct pci_device_id ahci_pci_tbl[] = { · 112 unmodified lines
362374 /* Marvell */
363375 { PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */
364376 { PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv }, /* 6121 */
377+ { PCI_DEVICE(0x1b4b, 0x9123),
378+ .driver_data = board_ahci_yes_fbs }, /* 88se9128 */
365379
366380 /* Promise */
367381 { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */
drivers/ata/ahci.h+1−0
@@ -209,6 +209,7 @@ enum { · 208 unmodified lines
209209 link offline */
210210 AHCI_HFLAG_NO_SNTF = (1 << 12), /* no sntf */
211211 AHCI_HFLAG_NO_FPDMA_AA = (1 << 13), /* no FPDMA AA */
212+ AHCI_HFLAG_YES_FBS = (1 << 14), /* force FBS cap on */
212213
213214 /* ap->flags bits */
214215
drivers/ata/ata_piix.c+4−0
@@ -302,6 +302,10 @@ static const struct pci_device_id piix_pci_tbl[] = { · 301 unmodified lines
302302 { 0x8086, 0x1c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
303303 /* SATA Controller IDE (CPT) */
304304 { 0x8086, 0x1c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
305+ /* SATA Controller IDE (PBG) */
306+ { 0x8086, 0x1d00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
307+ /* SATA Controller IDE (PBG) */
308+ { 0x8086, 0x1d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
305309 { } /* terminate list */
306310 };
307311
drivers/ata/libahci.c+15−3
@@ -430,6 +430,12 @@ void ahci_save_initial_config(struct device *dev, · 429 unmodified lines
430430 cap &= ~HOST_CAP_SNTF;
431431 }
432432
433+ if (!(cap & HOST_CAP_FBS) && (hpriv->flags & AHCI_HFLAG_YES_FBS)) {
434+ dev_printk(KERN_INFO, dev,
435+ "controller can do FBS, turning on CAP_FBS\n");
436+ cap |= HOST_CAP_FBS;
437+ }
438+
433439 if (force_port_map && port_map != force_port_map) {
434440 dev_printk(KERN_INFO, dev, "forcing port_map 0x%x -> 0x%x\n",
435441 port_map, force_port_map);
@@ -1320,7 +1326,7 @@ int ahci_do_softreset(struct ata_link *link, unsigned int *class, · 884 unmodified lines
13201326 /* issue the first D2H Register FIS */
13211327 msecs = 0;
13221328 now = jiffies;
1323− if (time_after(now, deadline))
1329+ if (time_after(deadline, now))
13241330 msecs = jiffies_to_msecs(deadline - now);
13251331
13261332 tf.ctl |= ATA_SRST;
@@ -2036,9 +2042,15 @@ static int ahci_port_start(struct ata_port *ap) · 709 unmodified lines
20362042 u32 cmd = readl(port_mmio + PORT_CMD);
20372043 if (cmd & PORT_CMD_FBSCP)
20382044 pp->fbs_supported = true;
2039− else
2045+ else if (hpriv->flags & AHCI_HFLAG_YES_FBS) {
2046+ dev_printk(KERN_INFO, dev,
2047+ "port %d can do FBS, forcing FBSCP\n",
2048+ ap->port_no);
2049+ pp->fbs_supported = true;
2050+ } else
20402051 dev_printk(KERN_WARNING, dev,
2041− "The port is not capable of FBS\n");
2052+ "port %d is not capable of FBS\n",
2053+ ap->port_no);
20422054 }
20432055
20442056 if (pp->fbs_supported) {
drivers/ata/libata-core.c+20−5
@@ -5111,15 +5111,18 @@ void ata_qc_issue(struct ata_queued_cmd *qc) · 5110 unmodified lines
51115111 qc->flags |= ATA_QCFLAG_ACTIVE;
51125112 ap->qc_active |= 1 << qc->tag;
51135113
5114− /* We guarantee to LLDs that they will have at least one
5114+ /*
5115+ * We guarantee to LLDs that they will have at least one
51155116 * non-zero sg if the command is a data command.
51165117 */
5117− BUG_ON(ata_is_data(prot) && (!qc->sg || !qc->n_elem || !qc->nbytes));
5118+ if (WARN_ON_ONCE(ata_is_data(prot) &&
5119+ (!qc->sg || !qc->n_elem || !qc->nbytes)))
5120+ goto sys_err;
51185121
51195122 if (ata_is_dma(prot) || (ata_is_pio(prot) &&
51205123 (ap->flags & ATA_FLAG_PIO_DMA)))
51215124 if (ata_sg_setup(qc))
5122− goto sg_err;
5125+ goto sys_err;
51235126
51245127 /* if device is sleeping, schedule reset and abort the link */
51255128 if (unlikely(qc->dev->flags & ATA_DFLAG_SLEEPING)) {
@@ -5136,7 +5139,7 @@ void ata_qc_issue(struct ata_queued_cmd *qc) · 10 unmodified lines
51365139 goto err;
51375140 return;
51385141
5139−sg_err:
5142+sys_err:
51405143 qc->err_mask |= AC_ERR_SYSTEM;
51415144 err:
51425145 ata_qc_complete(qc);
@@ -5415,6 +5418,7 @@ static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg, · 272 unmodified lines
54155418 */
54165419 int ata_host_suspend(struct ata_host *host, pm_message_t mesg)
54175420 {
5421+ unsigned int ehi_flags = ATA_EHI_QUIET;
54185422 int rc;
54195423
54205424 /*
@@ -5423,7 +5427,18 @@ int ata_host_suspend(struct ata_host *host, pm_message_t mesg) · 2 unmodified lines
54235427 */
54245428 ata_lpm_enable(host);
54255429
5426− rc = ata_host_request_pm(host, mesg, 0, ATA_EHI_QUIET, 1);
5430+ /*
5431+ * On some hardware, device fails to respond after spun down
5432+ * for suspend. As the device won't be used before being
5433+ * resumed, we don't need to touch the device. Ask EH to skip
5434+ * the usual stuff and proceed directly to suspend.
5435+ *
5436+ * http://thread.gmane.org/gmane.linux.ide/46764
5437+ */
5438+ if (mesg.event == PM_EVENT_SUSPEND)
5439+ ehi_flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_NO_RECOVERY;
5440+
5441+ rc = ata_host_request_pm(host, mesg, 0, ehi_flags, 1);
54275442 if (rc == 0)
54285443 host->dev->power.power_state = mesg;
54295444 return rc;
drivers/ata/libata-eh.c+4−0
@@ -3235,6 +3235,10 @@ static int ata_eh_skip_recovery(struct ata_link *link) · 3234 unmodified lines
32353235 if (link->flags & ATA_LFLAG_DISABLED)
32363236 return 1;
32373237
3238+ /* skip if explicitly requested */
3239+ if (ehc->i.flags & ATA_EHI_NO_RECOVERY)
3240+ return 1;
3241+
32383242 /* thaw frozen port and recover failed devices */
32393243 if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link))
32403244 return 0;
drivers/ata/libata-sff.c+31−14
@@ -418,6 +418,7 @@ void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) · 417 unmodified lines
418418 if (ioaddr->ctl_addr)
419419 iowrite8(tf->ctl, ioaddr->ctl_addr);
420420 ap->last_ctl = tf->ctl;
421+ ata_wait_idle(ap);
421422 }
422423
423424 if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) {
@@ -453,6 +454,8 @@ void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) · 29 unmodified lines
453454 iowrite8(tf->device, ioaddr->device_addr);
454455 VPRINTK("device 0x%X\n", tf->device);
455456 }
457+
458+ ata_wait_idle(ap);
456459 }
457460 EXPORT_SYMBOL_GPL(ata_sff_tf_load);
458461
@@ -1042,7 +1045,8 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq) · 583 unmodified lines
10421045 int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
10431046 u8 status, int in_wq)
10441047 {
1045− struct ata_eh_info *ehi = &ap->link.eh_info;
1048+ struct ata_link *link = qc->dev->link;
1049+ struct ata_eh_info *ehi = &link->eh_info;
10461050 unsigned long flags = 0;
10471051 int poll_next;
10481052
@@ -1298,8 +1302,14 @@ fsm_start: · 249 unmodified lines
12981302 }
12991303 EXPORT_SYMBOL_GPL(ata_sff_hsm_move);
13001304
1301−void ata_sff_queue_pio_task(struct ata_port *ap, unsigned long delay)
1305+void ata_sff_queue_pio_task(struct ata_link *link, unsigned long delay)
13021306 {
1307+ struct ata_port *ap = link->ap;
1308+
1309+ WARN_ON((ap->sff_pio_task_link != NULL) &&
1310+ (ap->sff_pio_task_link != link));
1311+ ap->sff_pio_task_link = link;
1312+
13031313 /* may fail if ata_sff_flush_pio_task() in progress */
13041314 queue_delayed_work(ata_sff_wq, &ap->sff_pio_task,
13051315 msecs_to_jiffies(delay));
@@ -1321,14 +1331,18 @@ static void ata_sff_pio_task(struct work_struct *work) · 15 unmodified lines
13211331 {
13221332 struct ata_port *ap =
13231333 container_of(work, struct ata_port, sff_pio_task.work);
1334+ struct ata_link *link = ap->sff_pio_task_link;
13241335 struct ata_queued_cmd *qc;
13251336 u8 status;
13261337 int poll_next;
13271338
1339+ BUG_ON(ap->sff_pio_task_link == NULL);
13281340 /* qc can be NULL if timeout occurred */
1329− qc = ata_qc_from_tag(ap, ap->link.active_tag);
1330− if (!qc)
1341+ qc = ata_qc_from_tag(ap, link->active_tag);
1342+ if (!qc) {
1343+ ap->sff_pio_task_link = NULL;
13311344 return;
1345+ }
13321346
13331347 fsm_start:
13341348 WARN_ON_ONCE(ap->hsm_task_state == HSM_ST_IDLE);
@@ -1345,11 +1359,16 @@ fsm_start: · 10 unmodified lines
13451359 msleep(2);
13461360 status = ata_sff_busy_wait(ap, ATA_BUSY, 10);
13471361 if (status & ATA_BUSY) {
1348− ata_sff_queue_pio_task(ap, ATA_SHORT_PAUSE);
1362+ ata_sff_queue_pio_task(link, ATA_SHORT_PAUSE);
13491363 return;
13501364 }
13511365 }
13521366
1367+ /*
1368+ * hsm_move() may trigger another command to be processed.
1369+ * clean the link beforehand.
1370+ */
1371+ ap->sff_pio_task_link = NULL;
13531372 /* move the HSM */
13541373 poll_next = ata_sff_hsm_move(ap, qc, status, 1);
13551374
@@ -1376,6 +1395,7 @@ fsm_start: · 20 unmodified lines
13761395 unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc)
13771396 {
13781397 struct ata_port *ap = qc->ap;
1398+ struct ata_link *link = qc->dev->link;
13791399
13801400 /* Use polling pio if the LLD doesn't handle
13811401 * interrupt driven pio and atapi CDB interrupt.
@@ -1396,7 +1416,7 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) · 14 unmodified lines
13961416 ap->hsm_task_state = HSM_ST_LAST;
13971417
13981418 if (qc->tf.flags & ATA_TFLAG_POLLING)
1399− ata_sff_queue_pio_task(ap, 0);
1419+ ata_sff_queue_pio_task(link, 0);
14001420
14011421 break;
14021422
@@ -1409,7 +1429,7 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) · 6 unmodified lines
14091429 if (qc->tf.flags & ATA_TFLAG_WRITE) {
14101430 /* PIO data out protocol */
14111431 ap->hsm_task_state = HSM_ST_FIRST;
1412− ata_sff_queue_pio_task(ap, 0);
1432+ ata_sff_queue_pio_task(link, 0);
14131433
14141434 /* always send first data block using the
14151435 * ata_sff_pio_task() codepath.
@@ -1419,7 +1439,7 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) · 3 unmodified lines
14191439 ap->hsm_task_state = HSM_ST;
14201440
14211441 if (qc->tf.flags & ATA_TFLAG_POLLING)
1422− ata_sff_queue_pio_task(ap, 0);
1442+ ata_sff_queue_pio_task(link, 0);
14231443
14241444 /* if polling, ata_sff_pio_task() handles the
14251445 * rest. otherwise, interrupt handler takes
@@ -1441,7 +1461,7 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) · 15 unmodified lines
14411461 /* send cdb by polling if no cdb interrupt */
14421462 if ((!(qc->dev->flags & ATA_DFLAG_CDB_INTR)) ||
14431463 (qc->tf.flags & ATA_TFLAG_POLLING))
1444− ata_sff_queue_pio_task(ap, 0);
1464+ ata_sff_queue_pio_task(link, 0);
14451465 break;
14461466
14471467 default:
@@ -2734,10 +2754,7 @@ EXPORT_SYMBOL_GPL(ata_bmdma_dumb_qc_prep); · 1286 unmodified lines
27342754 unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc)
27352755 {
27362756 struct ata_port *ap = qc->ap;
2737−
2738− /* see ata_dma_blacklisted() */
2739− BUG_ON((ap->flags & ATA_FLAG_PIO_POLLING) &&
2740− qc->tf.protocol == ATAPI_PROT_DMA);
2757+ struct ata_link *link = qc->dev->link;
27412758
27422759 /* defer PIO handling to sff_qc_issue */
27432760 if (!ata_is_dma(qc->tf.protocol))
@@ -2766,7 +2783,7 @@ unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc) · 22 unmodified lines
27662783
27672784 /* send cdb by polling if no cdb interrupt */
27682785 if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR))
2769− ata_sff_queue_pio_task(ap, 0);
2786+ ata_sff_queue_pio_task(link, 0);
27702787 break;
27712788
27722789 default:
drivers/ata/pata_artop.c+2−1
@@ -74,7 +74,8 @@ static int artop6260_pre_reset(struct ata_link *link, unsigned long deadline) · 73 unmodified lines
7474 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
7575
7676 /* Odd numbered device ids are the units with enable bits (the -R cards) */
77− if (pdev->device % 1 && !pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no]))
77+ if ((pdev->device & 1) &&
78+ !pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no]))
7879 return -ENOENT;
7980
8081 return ata_sff_prereset(link, deadline);
drivers/ata/pata_cmd64x.c+0−6
@@ -121,14 +121,8 @@ static void cmd64x_set_timing(struct ata_port *ap, struct ata_device *adev, u8 m · 120 unmodified lines
121121
122122 if (pair) {
123123 struct ata_timing tp;
124−
125124 ata_timing_compute(pair, pair->pio_mode, &tp, T, 0);
126125 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
127− if (pair->dma_mode) {
128− ata_timing_compute(pair, pair->dma_mode,
129− &tp, T, 0);
130− ata_timing_merge(&tp, &t, &t, ATA_TIMING_SETUP);
131− }
132126 }
133127 }
134128
drivers/ata/pata_legacy.c+13−2
@@ -44,6 +44,9 @@ · 43 unmodified lines
4444 * Specific support is included for the ht6560a/ht6560b/opti82c611a/
4545 * opti82c465mv/promise 20230c/20630/qdi65x0/winbond83759A
4646 *
47+ * Support for the Winbond 83759A when operating in advanced mode.
48+ * Multichip mode is not currently supported.
49+ *
4750 * Use the autospeed and pio_mask options with:
4851 * Appian ADI/2 aka CLPD7220 or AIC25VL01.
4952 * Use the jumpers, autospeed and set pio_mask to the mode on the jumpers with
@@ -135,12 +138,18 @@ static int ht6560b; /* HT 6560A on primary 1, second 2, both 3 */ · 85 unmodified lines
135138 static int opti82c611a; /* Opti82c611A on primary 1, sec 2, both 3 */
136139 static int opti82c46x; /* Opti 82c465MV present(pri/sec autodetect) */
137140 static int qdi; /* Set to probe QDI controllers */
138−static int winbond; /* Set to probe Winbond controllers,
139− give I/O port if non standard */
140141 static int autospeed; /* Chip present which snoops speed changes */
141142 static int pio_mask = ATA_PIO4; /* PIO range for autospeed devices */
142143 static int iordy_mask = 0xFFFFFFFF; /* Use iordy if available */
143144
145+#ifdef PATA_WINBOND_VLB_MODULE
146+static int winbond = 1; /* Set to probe Winbond controllers,
147+ give I/O port if non standard */
148+#else
149+static int winbond; /* Set to probe Winbond controllers,
150+ give I/O port if non standard */
151+#endif
152+
144153 /**
145154 * legacy_probe_add - Add interface to probe list
146155 * @port: Controller port
@@ -1297,6 +1306,7 @@ MODULE_AUTHOR("Alan Cox"); · 1150 unmodified lines
12971306 MODULE_DESCRIPTION("low-level driver for legacy ATA");
12981307 MODULE_LICENSE("GPL");
12991308 MODULE_VERSION(DRV_VERSION);
1309+MODULE_ALIAS("pata_winbond");
13001310
13011311 module_param(probe_all, int, 0);
13021312 module_param(autospeed, int, 0);
@@ -1305,6 +1315,7 @@ module_param(ht6560b, int, 0); · 2 unmodified lines
13051315 module_param(opti82c611a, int, 0);
13061316 module_param(opti82c46x, int, 0);
13071317 module_param(qdi, int, 0);
1318+module_param(winbond, int, 0);
13081319 module_param(pio_mask, int, 0);
13091320 module_param(iordy_mask, int, 0);
13101321
drivers/ata/pata_via.c+2−0
@@ -417,6 +417,8 @@ static void via_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) · 416 unmodified lines
417417 tf->lbam,
418418 tf->lbah);
419419 }
420+
421+ ata_wait_idle(ap);
420422 }
421423
422424 static int via_port_start(struct ata_port *ap)
drivers/ata/pata_winbond.c+0−282
@@ -1,282 +0,0 @@
1−/*
2− * pata_winbond.c - Winbond VLB ATA controllers
3− * (C) 2006 Red Hat
4− *
5− * Support for the Winbond 83759A when operating in advanced mode.
6− * Multichip mode is not currently supported.
7− */
8−
9−#include <linux/kernel.h>
10−#include <linux/module.h>
11−#include <linux/init.h>
12−#include <linux/blkdev.h>
13−#include <linux/delay.h>
14−#include <scsi/scsi_host.h>
15−#include <linux/libata.h>
16−#include <linux/platform_device.h>
17−
18−#define DRV_NAME "pata_winbond"
19−#define DRV_VERSION "0.0.3"
20−
21−#define NR_HOST 4 /* Two winbond controllers, two channels each */
22−
23−struct winbond_data {
24− unsigned long config;
25− struct platform_device *platform_dev;
26−};
27−
28−static struct ata_host *winbond_host[NR_HOST];
29−static struct winbond_data winbond_data[NR_HOST];
30−static int nr_winbond_host;
31−
32−#ifdef MODULE
33−static int probe_winbond = 1;
34−#else
35−static int probe_winbond;
36−#endif
37−
38−static DEFINE_SPINLOCK(winbond_lock);
39−
40−static void winbond_writecfg(unsigned long port, u8 reg, u8 val)
41−{
42− unsigned long flags;
43− spin_lock_irqsave(&winbond_lock, flags);
44− outb(reg, port + 0x01);
45− outb(val, port + 0x02);
46− spin_unlock_irqrestore(&winbond_lock, flags);
47−}
48−
49−static u8 winbond_readcfg(unsigned long port, u8 reg)
50−{
51− u8 val;
52−
53− unsigned long flags;
54− spin_lock_irqsave(&winbond_lock, flags);
55− outb(reg, port + 0x01);
56− val = inb(port + 0x02);
57− spin_unlock_irqrestore(&winbond_lock, flags);
58−
59− return val;
60−}
61−
62−static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
63−{
64− struct ata_timing t;
65− struct winbond_data *winbond = ap->host->private_data;
66− int active, recovery;
67− u8 reg;
68− int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
69−
70− reg = winbond_readcfg(winbond->config, 0x81);
71−
72− /* Get the timing data in cycles */
73− if (reg & 0x40) /* Fast VLB bus, assume 50MHz */
74− ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
75− else
76− ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
77−
78− active = (clamp_val(t.active, 3, 17) - 1) & 0x0F;
79− recovery = (clamp_val(t.recover, 1, 15) + 1) & 0x0F;
80− timing = (active << 4) | recovery;
81− winbond_writecfg(winbond->config, timing, reg);
82−
83− /* Load the setup timing */
84−
85− reg = 0x35;
86− if (adev->class != ATA_DEV_ATA)
87− reg |= 0x08; /* FIFO off */
88− if (!ata_pio_need_iordy(adev))
89− reg |= 0x02; /* IORDY off */
90− reg |= (clamp_val(t.setup, 0, 3) << 6);
91− winbond_writecfg(winbond->config, timing + 1, reg);
92−}
93−
94−
95−static unsigned int winbond_data_xfer(struct ata_device *dev,
96− unsigned char *buf, unsigned int buflen, int rw)
97−{
98− struct ata_port *ap = dev->link->ap;
99− int slop = buflen & 3;
100−
101− if (ata_id_has_dword_io(dev->id)) {
102− if (rw == READ)
103− ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
104− else
105− iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
106−
107− if (unlikely(slop)) {
108− __le32 pad;
109− if (rw == READ) {
110− pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
111− memcpy(buf + buflen - slop, &pad, slop);
112− } else {
113− memcpy(&pad, buf + buflen - slop, slop);
114− iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
115− }
116− buflen += 4 - slop;
117− }
118− } else
119− buflen = ata_sff_data_xfer(dev, buf, buflen, rw);
120−
121− return buflen;
122−}
123−
124−static struct scsi_host_template winbond_sht = {
125− ATA_PIO_SHT(DRV_NAME),
126−};
127−
128−static struct ata_port_operations winbond_port_ops = {
129− .inherits = &ata_sff_port_ops,
130− .sff_data_xfer = winbond_data_xfer,
131− .cable_detect = ata_cable_40wire,
132− .set_piomode = winbond_set_piomode,
133−};
134−
135−/**
136− * winbond_init_one - attach a winbond interface
137− * @type: Type to display
138− * @io: I/O port start
139− * @irq: interrupt line
140− * @fast: True if on a > 33Mhz VLB
141− *
142− * Register a VLB bus IDE interface. Such interfaces are PIO and we
143− * assume do not support IRQ sharing.
144− */
145−
146−static __init int winbond_init_one(unsigned long port)
147−{
148− struct platform_device *pdev;
149− u8 reg;
150− int i, rc;
151−
152− reg = winbond_readcfg(port, 0x81);
153− reg |= 0x80; /* jumpered mode off */
154− winbond_writecfg(port, 0x81, reg);
155− reg = winbond_readcfg(port, 0x83);
156− reg |= 0xF0; /* local control */
157− winbond_writecfg(port, 0x83, reg);
158− reg = winbond_readcfg(port, 0x85);
159− reg |= 0xF0; /* programmable timing */
160− winbond_writecfg(port, 0x85, reg);
161−
162− reg = winbond_readcfg(port, 0x81);
163−
164− if (!(reg & 0x03)) /* Disabled */
165− return -ENODEV;
166−
167− for (i = 0; i < 2 ; i ++) {
168− unsigned long cmd_port = 0x1F0 - (0x80 * i);
169− unsigned long ctl_port = cmd_port + 0x206;
170− struct ata_host *host;
171− struct ata_port *ap;
172− void __iomem *cmd_addr, *ctl_addr;
173−
174− if (!(reg & (1 << i)))
175− continue;
176−
177− pdev = platform_device_register_simple(DRV_NAME, nr_winbond_host, NULL, 0);
178− if (IS_ERR(pdev))
179− return PTR_ERR(pdev);
180−
181− rc = -ENOMEM;
182− host = ata_host_alloc(&pdev->dev, 1);
183− if (!host)
184− goto err_unregister;
185− ap = host->ports[0];
186−
187− rc = -ENOMEM;
188− cmd_addr = devm_ioport_map(&pdev->dev, cmd_port, 8);
189− ctl_addr = devm_ioport_map(&pdev->dev, ctl_port, 1);
190− if (!cmd_addr || !ctl_addr)
191− goto err_unregister;
192−
193− ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", cmd_port, ctl_port);
194−
195− ap->ops = &winbond_port_ops;
196− ap->pio_mask = ATA_PIO4;
197− ap->flags |= ATA_FLAG_SLAVE_POSS;
198− ap->ioaddr.cmd_addr = cmd_addr;
199− ap->ioaddr.altstatus_addr = ctl_addr;
200− ap->ioaddr.ctl_addr = ctl_addr;
201− ata_sff_std_ports(&ap->ioaddr);
202−
203− /* hook in a private data structure per channel */
204− host->private_data = &winbond_data[nr_winbond_host];
205− winbond_data[nr_winbond_host].config = port;
206− winbond_data[nr_winbond_host].platform_dev = pdev;
207−
208− /* activate */
209− rc = ata_host_activate(host, 14 + i, ata_sff_interrupt, 0,
210− &winbond_sht);
211− if (rc)
212− goto err_unregister;
213−
214− winbond_host[nr_winbond_host++] = dev_get_drvdata(&pdev->dev);
215− }
216−
217− return 0;
218−
219− err_unregister:
220− platform_device_unregister(pdev);
221− return rc;
222−}
223−
224−/**
225− * winbond_init - attach winbond interfaces
226− *
227− * Attach winbond IDE interfaces by scanning the ports it may occupy.
228− */
229−
230−static __init int winbond_init(void)
231−{
232− static const unsigned long config[2] = { 0x130, 0x1B0 };
233−
234− int ct = 0;
235− int i;
236−
237− if (probe_winbond == 0)
238− return -ENODEV;
239−
240− /*
241− * Check both base addresses
242− */
243−
244− for (i = 0; i < 2; i++) {
245− if (probe_winbond & (1<<i)) {
246− int ret = 0;
247− unsigned long port = config[i];
248−
249− if (request_region(port, 2, "pata_winbond")) {
250− ret = winbond_init_one(port);
251− if (ret <= 0)
252− release_region(port, 2);
253− else ct+= ret;
254− }
255− }
256− }
257− if (ct != 0)
258− return 0;
259− return -ENODEV;
260−}
261−
262−static __exit void winbond_exit(void)
263−{
264− int i;
265−
266− for (i = 0; i < nr_winbond_host; i++) {
267− ata_host_detach(winbond_host[i]);
268− release_region(winbond_data[i].config, 2);
269− platform_device_unregister(winbond_data[i].platform_dev);
270− }
271−}
272−
273−MODULE_AUTHOR("Alan Cox");
274−MODULE_DESCRIPTION("low-level driver for Winbond VL ATA");
275−MODULE_LICENSE("GPL");
276−MODULE_VERSION(DRV_VERSION);
277−
278−module_init(winbond_init);
279−module_exit(winbond_exit);
280−
281−module_param(probe_winbond, int, 0);
282−
drivers/ata/sata_dwc_460ex.c+1−1
@@ -1459,7 +1459,7 @@ static void sata_dwc_qc_prep_by_tag(struct ata_queued_cmd *qc, u8 tag) · 1458 unmodified lines
14591459 {
14601460 struct scatterlist *sg = qc->sg;
14611461 struct ata_port *ap = qc->ap;
1462− u32 dma_chan;
1462+ int dma_chan;
14631463 struct sata_dwc_device *hsdev = HSDEV_FROM_AP(ap);
14641464 struct sata_dwc_device_port *hsdevp = HSDEVP_FROM_AP(ap);
14651465 int err;
drivers/ata/sata_mv.c+38−8
@@ -1898,19 +1898,25 @@ static void mv_bmdma_start(struct ata_queued_cmd *qc) · 1897 unmodified lines
18981898 * LOCKING:
18991899 * Inherited from caller.
19001900 */
1901−static void mv_bmdma_stop(struct ata_queued_cmd *qc)
1901+static void mv_bmdma_stop_ap(struct ata_port *ap)
19021902 {
1903− struct ata_port *ap = qc->ap;
19041903 void __iomem *port_mmio = mv_ap_base(ap);
19051904 u32 cmd;
19061905
19071906 /* clear start/stop bit */
19081907 cmd = readl(port_mmio + BMDMA_CMD);
1909− cmd &= ~ATA_DMA_START;
1910− writelfl(cmd, port_mmio + BMDMA_CMD);
1908+ if (cmd & ATA_DMA_START) {
1909+ cmd &= ~ATA_DMA_START;
1910+ writelfl(cmd, port_mmio + BMDMA_CMD);
1911+
1912+ /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */
1913+ ata_sff_dma_pause(ap);
1914+ }
1915+}
19111916
1912− /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */
1913− ata_sff_dma_pause(ap);
1917+static void mv_bmdma_stop(struct ata_queued_cmd *qc)
1918+{
1919+ mv_bmdma_stop_ap(qc->ap);
19141920 }
19151921
19161922 /**
@@ -1934,8 +1940,21 @@ static u8 mv_bmdma_status(struct ata_port *ap) · 17 unmodified lines
19341940 reg = readl(port_mmio + BMDMA_STATUS);
19351941 if (reg & ATA_DMA_ACTIVE)
19361942 status = ATA_DMA_ACTIVE;
1937− else
1943+ else if (reg & ATA_DMA_ERR)
19381944 status = (reg & ATA_DMA_ERR) | ATA_DMA_INTR;
1945+ else {
1946+ /*
1947+ * Just because DMA_ACTIVE is 0 (DMA completed),
1948+ * this does _not_ mean the device is "done".
1949+ * So we should not yet be signalling ATA_DMA_INTR
1950+ * in some cases. Eg. DSM/TRIM, and perhaps others.
1951+ */
1952+ mv_bmdma_stop_ap(ap);
1953+ if (ioread8(ap->ioaddr.altstatus_addr) & ATA_BUSY)
1954+ status = 0;
1955+ else
1956+ status = ATA_DMA_INTR;
1957+ }
19391958 return status;
19401959 }
19411960
@@ -1995,6 +2014,9 @@ static void mv_qc_prep(struct ata_queued_cmd *qc) · 53 unmodified lines
19952014
19962015 switch (tf->protocol) {
19972016 case ATA_PROT_DMA:
2017+ if (tf->command == ATA_CMD_DSM)
2018+ return;
2019+ /* fall-thru */
19982020 case ATA_PROT_NCQ:
19992021 break; /* continue below */
20002022 case ATA_PROT_PIO:
@@ -2094,6 +2116,8 @@ static void mv_qc_prep_iie(struct ata_queued_cmd *qc) · 93 unmodified lines
20942116 if ((tf->protocol != ATA_PROT_DMA) &&
20952117 (tf->protocol != ATA_PROT_NCQ))
20962118 return;
2119+ if (tf->command == ATA_CMD_DSM)
2120+ return; /* use bmdma for this */
20972121
20982122 /* Fill in Gen IIE command request block */
20992123 if (!(tf->flags & ATA_TFLAG_WRITE))
@@ -2260,7 +2284,7 @@ static unsigned int mv_qc_issue_fis(struct ata_queued_cmd *qc) · 160 unmodified lines
22602284 }
22612285
22622286 if (qc->tf.flags & ATA_TFLAG_POLLING)
2263− ata_sff_queue_pio_task(ap, 0);
2287+ ata_sff_queue_pio_task(link, 0);
22642288 return 0;
22652289 }
22662290
@@ -2289,6 +2313,12 @@ static unsigned int mv_qc_issue(struct ata_queued_cmd *qc) · 22 unmodified lines
22892313
22902314 switch (qc->tf.protocol) {
22912315 case ATA_PROT_DMA:
2316+ if (qc->tf.command == ATA_CMD_DSM) {
2317+ if (!ap->ops->bmdma_setup) /* no bmdma on GEN_I */
2318+ return AC_ERR_OTHER;
2319+ break; /* use bmdma for this */
2320+ }
2321+ /* fall thru */
22922322 case ATA_PROT_NCQ:
22932323 mv_start_edma(ap, port_mmio, pp, qc->tf.protocol);
22942324 pp->req_idx = (pp->req_idx + 1) & MV_MAX_Q_DEPTH_MASK;
drivers/base/power/main.c+1−0
@@ -59,6 +59,7 @@ void device_pm_init(struct device *dev) · 58 unmodified lines
5959 {
6060 dev->power.status = DPM_ON;
6161 init_completion(&dev->power.completion);
62+ complete_all(&dev->power.completion);
6263 dev->power.wakeup_count = 0;
6364 pm_runtime_init(dev);
6465 }
drivers/block/cciss.c+11−0
@@ -297,6 +297,8 @@ static void enqueue_cmd_and_start_io(ctlr_info_t *h, · 296 unmodified lines
297297 spin_lock_irqsave(&h->lock, flags);
298298 addQ(&h->reqQ, c);
299299 h->Qdepth++;
300+ if (h->Qdepth > h->maxQsinceinit)
301+ h->maxQsinceinit = h->Qdepth;
300302 start_io(h);
301303 spin_unlock_irqrestore(&h->lock, flags);
302304 }
@@ -4519,6 +4521,12 @@ static __devinit int cciss_kdump_hard_reset_controller(struct pci_dev *pdev) · 4216 unmodified lines
45194521 misc_fw_support = readl(&cfgtable->misc_fw_support);
45204522 use_doorbell = misc_fw_support & MISC_FW_DOORBELL_RESET;
45214523
4524+ /* The doorbell reset seems to cause lockups on some Smart
4525+ * Arrays (e.g. P410, P410i, maybe others). Until this is
4526+ * fixed or at least isolated, avoid the doorbell reset.
4527+ */
4528+ use_doorbell = 0;
4529+
45224530 rc = cciss_controller_hard_reset(pdev, vaddr, use_doorbell);
45234531 if (rc)
45244532 goto unmap_cfgtable;
@@ -4712,6 +4720,9 @@ static int __devinit cciss_init_one(struct pci_dev *pdev, · 187 unmodified lines
47124720 h->scatter_list = kmalloc(h->max_commands *
47134721 sizeof(struct scatterlist *),
47144722 GFP_KERNEL);
4723+ if (!h->scatter_list)
4724+ goto clean4;
4725+
47154726 for (k = 0; k < h->nr_cmds; k++) {
47164727 h->scatter_list[k] = kmalloc(sizeof(struct scatterlist) *
47174728 h->maxsgentries,
drivers/block/loop.c+1−1
@@ -477,7 +477,7 @@ static int do_bio_filebacked(struct loop_device *lo, struct bio *bio) · 476 unmodified lines
477477 pos = ((loff_t) bio->bi_sector << 9) + lo->lo_offset;
478478
479479 if (bio_rw(bio) == WRITE) {
480− bool barrier = (bio->bi_rw & REQ_HARDBARRIER);
480+ bool barrier = !!(bio->bi_rw & REQ_HARDBARRIER);
481481 struct file *file = lo->lo_backing_file;
482482
483483 if (barrier) {
drivers/block/mg_disk.c+1−2
@@ -974,8 +974,7 @@ static int mg_probe(struct platform_device *plat_dev) · 973 unmodified lines
974974 host->breq->queuedata = host;
975975
976976 /* mflash is random device, thanx for the noop */
977− elevator_exit(host->breq->elevator);
978− err = elevator_init(host->breq, "noop");
977+ err = elevator_change(host->breq, "noop");
979978 if (err) {
980979 printk(KERN_ERR "%s:%d (elevator_init) fail\n",
981980 __func__, __LINE__);
drivers/char/agp/intel-agp.c+13−3
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 #include <asm/smp.h>
1313 #include "agp.h"
1414 #include "intel-agp.h"
15+#include <linux/intel-gtt.h>
1516
1617 #include "intel-gtt.c"
1718
@@ -815,11 +816,19 @@ static const struct intel_driver_description { · 797 unmodified lines
815816 "HD Graphics", NULL, &intel_i965_driver },
816817 { PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB, PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG,
817818 "HD Graphics", NULL, &intel_i965_driver },
818− { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_IG,
819+ { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT1_IG,
819820 "Sandybridge", NULL, &intel_gen6_driver },
820− { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_IG,
821+ { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT2_IG,
821822 "Sandybridge", NULL, &intel_gen6_driver },
822− { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_D0_IG,
823+ { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT2_PLUS_IG,
824+ "Sandybridge", NULL, &intel_gen6_driver },
825+ { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT1_IG,
826+ "Sandybridge", NULL, &intel_gen6_driver },
827+ { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT2_IG,
828+ "Sandybridge", NULL, &intel_gen6_driver },
829+ { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT2_PLUS_IG,
830+ "Sandybridge", NULL, &intel_gen6_driver },
831+ { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_IG,
823832 "Sandybridge", NULL, &intel_gen6_driver },
824833 { 0, 0, NULL, NULL, NULL }
825834 };
@@ -1044,6 +1053,7 @@ static struct pci_device_id agp_intel_pci_table[] = { · 218 unmodified lines
10441053 ID(PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB),
10451054 ID(PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB),
10461055 ID(PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB),
1056+ ID(PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB),
10471057 { }
10481058 };
10491059
drivers/char/agp/intel-agp.h+16−6
@@ -1,6 +1,8 @@
11 /*
22 * Common Intel AGPGART and GTT definitions.
33 */
4+#ifndef _INTEL_AGP_H
5+#define _INTEL_AGP_H
46
57 /* Intel registers */
68 #define INTEL_APSIZE 0xb4
@@ -200,11 +202,16 @@ · 193 unmodified lines
200202 #define PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB 0x0062
201203 #define PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB 0x006a
202204 #define PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG 0x0046
203−#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB 0x0100
204−#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_IG 0x0102
205−#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB 0x0104
206−#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_IG 0x0106
207−#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_D0_IG 0x0126
205+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB 0x0100 /* Desktop */
206+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT1_IG 0x0102
207+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT2_IG 0x0112
208+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT2_PLUS_IG 0x0122
209+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB 0x0104 /* Mobile */
210+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT1_IG 0x0106
211+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT2_IG 0x0116
212+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT2_PLUS_IG 0x0126
213+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB 0x0108 /* Server */
214+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_IG 0x010A
208215
209216 /* cover 915 and 945 variants */
210217 #define IS_I915 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_E7221_HB || \
@@ -231,7 +238,8 @@ · 20 unmodified lines
231238 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_PINEVIEW_HB)
232239
233240 #define IS_SNB (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB || \
234− agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB)
241+ agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB || \
242+ agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB)
235243
236244 #define IS_G4X (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_EAGLELAKE_HB || \
237245 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q45_HB || \
@@ -244,3 +252,5 @@ · 6 unmodified lines
244252 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB || \
245253 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB || \
246254 IS_SNB)
255+
256+#endif
drivers/char/agp/intel-gtt.c+48−18
@@ -49,6 +49,26 @@ static struct gatt_mask intel_i810_masks[] = · 48 unmodified lines
4949 .type = INTEL_AGP_CACHED_MEMORY}
5050 };
5151
52+#define INTEL_AGP_UNCACHED_MEMORY 0
53+#define INTEL_AGP_CACHED_MEMORY_LLC 1
54+#define INTEL_AGP_CACHED_MEMORY_LLC_GFDT 2
55+#define INTEL_AGP_CACHED_MEMORY_LLC_MLC 3
56+#define INTEL_AGP_CACHED_MEMORY_LLC_MLC_GFDT 4
57+
58+static struct gatt_mask intel_gen6_masks[] =
59+{
60+ {.mask = I810_PTE_VALID | GEN6_PTE_UNCACHED,
61+ .type = INTEL_AGP_UNCACHED_MEMORY },
62+ {.mask = I810_PTE_VALID | GEN6_PTE_LLC,
63+ .type = INTEL_AGP_CACHED_MEMORY_LLC },
64+ {.mask = I810_PTE_VALID | GEN6_PTE_LLC | GEN6_PTE_GFDT,
65+ .type = INTEL_AGP_CACHED_MEMORY_LLC_GFDT },
66+ {.mask = I810_PTE_VALID | GEN6_PTE_LLC_MLC,
67+ .type = INTEL_AGP_CACHED_MEMORY_LLC_MLC },
68+ {.mask = I810_PTE_VALID | GEN6_PTE_LLC_MLC | GEN6_PTE_GFDT,
69+ .type = INTEL_AGP_CACHED_MEMORY_LLC_MLC_GFDT },
70+};
71+
5272 static struct _intel_private {
5373 struct pci_dev *pcidev; /* device one */
5474 u8 __iomem *registers;
@@ -178,13 +198,6 @@ static void intel_agp_insert_sg_entries(struct agp_memory *mem, · 123 unmodified lines
178198 off_t pg_start, int mask_type)
179199 {
180200 int i, j;
181− u32 cache_bits = 0;
182−
183− if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB ||
184− agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB)
185− {
186− cache_bits = GEN6_PTE_LLC_MLC;
187− }
188201
189202 for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
190203 writel(agp_bridge->driver->mask_memory(agp_bridge,
@@ -317,6 +330,23 @@ static int intel_i830_type_to_mask_type(struct agp_bridge_data *bridge, · 126 unmodified lines
317330 return 0;
318331 }
319332
333+static int intel_gen6_type_to_mask_type(struct agp_bridge_data *bridge,
334+ int type)
335+{
336+ unsigned int type_mask = type & ~AGP_USER_CACHED_MEMORY_GFDT;
337+ unsigned int gfdt = type & AGP_USER_CACHED_MEMORY_GFDT;
338+
339+ if (type_mask == AGP_USER_UNCACHED_MEMORY)
340+ return INTEL_AGP_UNCACHED_MEMORY;
341+ else if (type_mask == AGP_USER_CACHED_MEMORY_LLC_MLC)
342+ return gfdt ? INTEL_AGP_CACHED_MEMORY_LLC_MLC_GFDT :
343+ INTEL_AGP_CACHED_MEMORY_LLC_MLC;
344+ else /* set 'normal'/'cached' to LLC by default */
345+ return gfdt ? INTEL_AGP_CACHED_MEMORY_LLC_GFDT :
346+ INTEL_AGP_CACHED_MEMORY_LLC;
347+}
348+
349+
320350 static int intel_i810_insert_entries(struct agp_memory *mem, off_t pg_start,
321351 int type)
322352 {
@@ -588,8 +618,7 @@ static void intel_i830_init_gtt_entries(void) · 265 unmodified lines
588618 gtt_entries = 0;
589619 break;
590620 }
591− } else if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB ||
592− agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB) {
621+ } else if (IS_SNB) {
593622 /*
594623 * SandyBridge has new memory control reg at 0x50.w
595624 */
@@ -1068,11 +1097,11 @@ static void intel_i9xx_setup_flush(void) · 472 unmodified lines
10681097 intel_i915_setup_chipset_flush();
10691098 }
10701099
1071− if (intel_private.ifp_resource.start) {
1100+ if (intel_private.ifp_resource.start)
10721101 intel_private.i9xx_flush_page = ioremap_nocache(intel_private.ifp_resource.start, PAGE_SIZE);
1073− if (!intel_private.i9xx_flush_page)
1074− dev_info(&intel_private.pcidev->dev, "can't ioremap flush page - no chipset flushing");
1075− }
1102+ if (!intel_private.i9xx_flush_page)
1103+ dev_err(&intel_private.pcidev->dev,
1104+ "can't ioremap flush page - no chipset flushing\n");
10761105 }
10771106
10781107 static int intel_i9xx_configure(void)
@@ -1163,7 +1192,7 @@ static int intel_i915_insert_entries(struct agp_memory *mem, off_t pg_start, · 84 unmodified lines
11631192
11641193 mask_type = agp_bridge->driver->agp_type_to_mask_type(agp_bridge, type);
11651194
1166− if (mask_type != 0 && mask_type != AGP_PHYS_MEMORY &&
1195+ if (!IS_SNB && mask_type != 0 && mask_type != AGP_PHYS_MEMORY &&
11671196 mask_type != INTEL_AGP_CACHED_MEMORY)
11681197 goto out_err;
11691198
@@ -1333,8 +1362,8 @@ static unsigned long intel_i965_mask_memory(struct agp_bridge_data *bridge, · 163 unmodified lines
13331362 static unsigned long intel_gen6_mask_memory(struct agp_bridge_data *bridge,
13341363 dma_addr_t addr, int type)
13351364 {
1336− /* Shift high bits down */
1337− addr |= (addr >> 28) & 0xff;
1365+ /* gen6 has bit11-4 for physical addr bit39-32 */
1366+ addr |= (addr >> 28) & 0xff0;
13381367
13391368 /* Type checking must be done elsewhere */
13401369 return addr | bridge->driver->masks[type].mask;
@@ -1359,6 +1388,7 @@ static void intel_i965_get_gtt_range(int *gtt_offset, int *gtt_size) · 18 unmodified lines
13591388 break;
13601389 case PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB:
13611390 case PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB:
1391+ case PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB:
13621392 *gtt_offset = MB(2);
13631393
13641394 pci_read_config_word(intel_private.pcidev, SNB_GMCH_CTRL, &snb_gmch_ctl);
@@ -1563,7 +1593,7 @@ static const struct agp_bridge_driver intel_gen6_driver = { · 198 unmodified lines
15631593 .fetch_size = intel_i9xx_fetch_size,
15641594 .cleanup = intel_i915_cleanup,
15651595 .mask_memory = intel_gen6_mask_memory,
1566− .masks = intel_i810_masks,
1596+ .masks = intel_gen6_masks,
15671597 .agp_enable = intel_i810_agp_enable,
15681598 .cache_flush = global_cache_flush,
15691599 .create_gatt_table = intel_i965_create_gatt_table,
@@ -1576,7 +1606,7 @@ static const struct agp_bridge_driver intel_gen6_driver = { · 6 unmodified lines
15761606 .agp_alloc_pages = agp_generic_alloc_pages,
15771607 .agp_destroy_page = agp_generic_destroy_page,
15781608 .agp_destroy_pages = agp_generic_destroy_pages,
1579− .agp_type_to_mask_type = intel_i830_type_to_mask_type,
1609+ .agp_type_to_mask_type = intel_gen6_type_to_mask_type,
15801610 .chipset_flush = intel_i915_chipset_flush,
15811611 #ifdef USE_PCI_DMA_API
15821612 .agp_map_page = intel_agp_map_page,
drivers/char/hangcheck-timer.c+1−1
@@ -159,7 +159,7 @@ static void hangcheck_fire(unsigned long data) · 158 unmodified lines
159159 if (hangcheck_dump_tasks) {
160160 printk(KERN_CRIT "Hangcheck: Task state:\n");
161161 #ifdef CONFIG_MAGIC_SYSRQ
162− handle_sysrq('t', NULL);
162+ handle_sysrq('t');
163163 #endif /* CONFIG_MAGIC_SYSRQ */
164164 }
165165 if (hangcheck_reboot) {
drivers/char/hvc_console.c+1−1
@@ -651,7 +651,7 @@ int hvc_poll(struct hvc_struct *hp) · 650 unmodified lines
651651 if (sysrq_pressed)
652652 continue;
653653 } else if (sysrq_pressed) {
654− handle_sysrq(buf[i], tty);
654+ handle_sysrq(buf[i]);
655655 sysrq_pressed = 0;
656656 continue;
657657 }
drivers/char/hvsi.c+1−1
@@ -403,7 +403,7 @@ static void hvsi_insert_chars(struct hvsi_struct *hp, const char *buf, int len) · 402 unmodified lines
403403 hp->sysrq = 1;
404404 continue;
405405 } else if (hp->sysrq) {
406− handle_sysrq(c, hp->tty);
406+ handle_sysrq(c);
407407 hp->sysrq = 0;
408408 continue;
409409 }
drivers/char/hw_random/n2-drv.c+1−1
@@ -387,7 +387,7 @@ static int n2rng_init_control(struct n2rng *np) · 386 unmodified lines
387387
388388 static int n2rng_data_read(struct hwrng *rng, u32 *data)
389389 {
390− struct n2rng *np = rng->priv;
390+ struct n2rng *np = (struct n2rng *) rng->priv;
391391 unsigned long ra = __pa(&np->test_data);
392392 int len;
393393
drivers/char/sysrq.c+26−27
@@ -18,7 +18,6 @@ · 17 unmodified lines
1818 #include <linux/interrupt.h>
1919 #include <linux/mm.h>
2020 #include <linux/fs.h>
21−#include <linux/tty.h>
2221 #include <linux/mount.h>
2322 #include <linux/kdev_t.h>
2423 #include <linux/major.h>
@@ -76,7 +75,7 @@ static int __init sysrq_always_enabled_setup(char *str) · 51 unmodified lines
7675 __setup("sysrq_always_enabled", sysrq_always_enabled_setup);
7776
7877
79−static void sysrq_handle_loglevel(int key, struct tty_struct *tty)
78+static void sysrq_handle_loglevel(int key)
8079 {
8180 int i;
8281
@@ -93,7 +92,7 @@ static struct sysrq_key_op sysrq_loglevel_op = { · 10 unmodified lines
9392 };
9493
9594 #ifdef CONFIG_VT
96−static void sysrq_handle_SAK(int key, struct tty_struct *tty)
95+static void sysrq_handle_SAK(int key)
9796 {
9897 struct work_struct *SAK_work = &vc_cons[fg_console].SAK_work;
9998 schedule_work(SAK_work);
@@ -109,7 +108,7 @@ static struct sysrq_key_op sysrq_SAK_op = { · 9 unmodified lines
109108 #endif
110109
111110 #ifdef CONFIG_VT
112−static void sysrq_handle_unraw(int key, struct tty_struct *tty)
111+static void sysrq_handle_unraw(int key)
113112 {
114113 struct kbd_struct *kbd = &kbd_table[fg_console];
115114
@@ -126,7 +125,7 @@ static struct sysrq_key_op sysrq_unraw_op = { · 10 unmodified lines
126125 #define sysrq_unraw_op (*(struct sysrq_key_op *)NULL)
127126 #endif /* CONFIG_VT */
128127
129−static void sysrq_handle_crash(int key, struct tty_struct *tty)
128+static void sysrq_handle_crash(int key)
130129 {
131130 char *killer = NULL;
132131
@@ -141,7 +140,7 @@ static struct sysrq_key_op sysrq_crash_op = { · 8 unmodified lines
141140 .enable_mask = SYSRQ_ENABLE_DUMP,
142141 };
143142
144−static void sysrq_handle_reboot(int key, struct tty_struct *tty)
143+static void sysrq_handle_reboot(int key)
145144 {
146145 lockdep_off();
147146 local_irq_enable();
@@ -154,7 +153,7 @@ static struct sysrq_key_op sysrq_reboot_op = { · 6 unmodified lines
154153 .enable_mask = SYSRQ_ENABLE_BOOT,
155154 };
156155
157−static void sysrq_handle_sync(int key, struct tty_struct *tty)
156+static void sysrq_handle_sync(int key)
158157 {
159158 emergency_sync();
160159 }
@@ -165,7 +164,7 @@ static struct sysrq_key_op sysrq_sync_op = { · 4 unmodified lines
165164 .enable_mask = SYSRQ_ENABLE_SYNC,
166165 };
167166
168−static void sysrq_handle_show_timers(int key, struct tty_struct *tty)
167+static void sysrq_handle_show_timers(int key)
169168 {
170169 sysrq_timer_list_show();
171170 }
@@ -176,7 +175,7 @@ static struct sysrq_key_op sysrq_show_timers_op = { · 4 unmodified lines
176175 .action_msg = "Show clockevent devices & pending hrtimers (no others)",
177176 };
178177
179−static void sysrq_handle_mountro(int key, struct tty_struct *tty)
178+static void sysrq_handle_mountro(int key)
180179 {
181180 emergency_remount();
182181 }
@@ -188,7 +187,7 @@ static struct sysrq_key_op sysrq_mountro_op = { · 5 unmodified lines
188187 };
189188
190189 #ifdef CONFIG_LOCKDEP
191−static void sysrq_handle_showlocks(int key, struct tty_struct *tty)
190+static void sysrq_handle_showlocks(int key)
192191 {
193192 debug_show_all_locks();
194193 }
@@ -226,7 +225,7 @@ static void sysrq_showregs_othercpus(struct work_struct *dummy) · 31 unmodified lines
226225
227226 static DECLARE_WORK(sysrq_showallcpus, sysrq_showregs_othercpus);
228227
229−static void sysrq_handle_showallcpus(int key, struct tty_struct *tty)
228+static void sysrq_handle_showallcpus(int key)
230229 {
231230 /*
232231 * Fall back to the workqueue based printing if the
@@ -252,7 +251,7 @@ static struct sysrq_key_op sysrq_showallcpus_op = { · 19 unmodified lines
252251 };
253252 #endif
254253
255−static void sysrq_handle_showregs(int key, struct tty_struct *tty)
254+static void sysrq_handle_showregs(int key)
256255 {
257256 struct pt_regs *regs = get_irq_regs();
258257 if (regs)
@@ -266,7 +265,7 @@ static struct sysrq_key_op sysrq_showregs_op = { · 7 unmodified lines
266265 .enable_mask = SYSRQ_ENABLE_DUMP,
267266 };
268267
269−static void sysrq_handle_showstate(int key, struct tty_struct *tty)
268+static void sysrq_handle_showstate(int key)
270269 {
271270 show_state();
272271 }
@@ -277,7 +276,7 @@ static struct sysrq_key_op sysrq_showstate_op = { · 4 unmodified lines
277276 .enable_mask = SYSRQ_ENABLE_DUMP,
278277 };
279278
280−static void sysrq_handle_showstate_blocked(int key, struct tty_struct *tty)
279+static void sysrq_handle_showstate_blocked(int key)
281280 {
282281 show_state_filter(TASK_UNINTERRUPTIBLE);
283282 }
@@ -291,7 +290,7 @@ static struct sysrq_key_op sysrq_showstate_blocked_op = { · 7 unmodified lines
291290 #ifdef CONFIG_TRACING
292291 #include <linux/ftrace.h>
293292
294−static void sysrq_ftrace_dump(int key, struct tty_struct *tty)
293+static void sysrq_ftrace_dump(int key)
295294 {
296295 ftrace_dump(DUMP_ALL);
297296 }
@@ -305,7 +304,7 @@ static struct sysrq_key_op sysrq_ftrace_dump_op = { · 7 unmodified lines
305304 #define sysrq_ftrace_dump_op (*(struct sysrq_key_op *)NULL)
306305 #endif
307306
308−static void sysrq_handle_showmem(int key, struct tty_struct *tty)
307+static void sysrq_handle_showmem(int key)
309308 {
310309 show_mem();
311310 }
@@ -330,7 +329,7 @@ static void send_sig_all(int sig) · 18 unmodified lines
330329 }
331330 }
332331
333−static void sysrq_handle_term(int key, struct tty_struct *tty)
332+static void sysrq_handle_term(int key)
334333 {
335334 send_sig_all(SIGTERM);
336335 console_loglevel = 8;
@@ -349,7 +348,7 @@ static void moom_callback(struct work_struct *ignored) · 12 unmodified lines
349348
350349 static DECLARE_WORK(moom_work, moom_callback);
351350
352−static void sysrq_handle_moom(int key, struct tty_struct *tty)
351+static void sysrq_handle_moom(int key)
353352 {
354353 schedule_work(&moom_work);
355354 }
@@ -361,7 +360,7 @@ static struct sysrq_key_op sysrq_moom_op = { · 5 unmodified lines
361360 };
362361
363362 #ifdef CONFIG_BLOCK
364−static void sysrq_handle_thaw(int key, struct tty_struct *tty)
363+static void sysrq_handle_thaw(int key)
365364 {
366365 emergency_thaw_all();
367366 }
@@ -373,7 +372,7 @@ static struct sysrq_key_op sysrq_thaw_op = { · 5 unmodified lines
373372 };
374373 #endif
375374
376−static void sysrq_handle_kill(int key, struct tty_struct *tty)
375+static void sysrq_handle_kill(int key)
377376 {
378377 send_sig_all(SIGKILL);
379378 console_loglevel = 8;
@@ -385,7 +384,7 @@ static struct sysrq_key_op sysrq_kill_op = { · 5 unmodified lines
385384 .enable_mask = SYSRQ_ENABLE_SIGNAL,
386385 };
387386
388−static void sysrq_handle_unrt(int key, struct tty_struct *tty)
387+static void sysrq_handle_unrt(int key)
389388 {
390389 normalize_rt_tasks();
391390 }
@@ -493,7 +492,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p) · 101 unmodified lines
493492 sysrq_key_table[i] = op_p;
494493 }
495494
496−void __handle_sysrq(int key, struct tty_struct *tty, int check_mask)
495+void __handle_sysrq(int key, bool check_mask)
497496 {
498497 struct sysrq_key_op *op_p;
499498 int orig_log_level;
@@ -520,7 +519,7 @@ void __handle_sysrq(int key, struct tty_struct *tty, int check_mask) · 20 unmodified lines
520519 if (!check_mask || sysrq_on_mask(op_p->enable_mask)) {
521520 printk("%s\n", op_p->action_msg);
522521 console_loglevel = orig_log_level;
523− op_p->handler(key, tty);
522+ op_p->handler(key);
524523 } else {
525524 printk("This sysrq operation is disabled.\n");
526525 }
@@ -545,10 +544,10 @@ void __handle_sysrq(int key, struct tty_struct *tty, int check_mask) · 18 unmodified lines
545544 spin_unlock_irqrestore(&sysrq_key_table_lock, flags);
546545 }
547546
548−void handle_sysrq(int key, struct tty_struct *tty)
547+void handle_sysrq(int key)
549548 {
550549 if (sysrq_on())
551− __handle_sysrq(key, tty, 1);
550+ __handle_sysrq(key, true);
552551 }
553552 EXPORT_SYMBOL(handle_sysrq);
554553
@@ -597,7 +596,7 @@ static bool sysrq_filter(struct input_handle *handle, unsigned int type, · 42 unmodified lines
597596
598597 default:
599598 if (sysrq_down && value && value != 2)
600− __handle_sysrq(sysrq_xlate[code], NULL, 1);
599+ __handle_sysrq(sysrq_xlate[code], true);
601600 break;
602601 }
603602
@@ -765,7 +764,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, · 161 unmodified lines
765764
766765 if (get_user(c, buf))
767766 return -EFAULT;
768− __handle_sysrq(c, NULL, 0);
767+ __handle_sysrq(c, false);
769768 }
770769
771770 return count;
drivers/char/tty_io.c+1−1
@@ -355,7 +355,7 @@ struct tty_driver *tty_find_polling_driver(char *name, int *line) · 354 unmodified lines
355355 if (*stp == '\0')
356356 stp = NULL;
357357
358− if (tty_line >= 0 && tty_line <= p->num && p->ops &&
358+ if (tty_line >= 0 && tty_line < p->num && p->ops &&
359359 p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) {
360360 res = tty_driver_kref_get(p);
361361 *line = tty_line;
drivers/char/vt.c+4−11
@@ -906,22 +906,16 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc, · 905 unmodified lines
906906 * bottom of buffer
907907 */
908908 old_origin += (old_rows - new_rows) * old_row_size;
909− end = vc->vc_scr_end;
910909 } else {
911910 /*
912911 * Cursor is in no man's land, copy 1/2 screenful
913912 * from the top and bottom of cursor position
914913 */
915914 old_origin += (vc->vc_y - new_rows/2) * old_row_size;
916− end = old_origin + (old_row_size * new_rows);
917915 }
918− } else
919− /*
920− * Cursor near the top, copy contents from the top of buffer
921− */
922− end = (old_rows > new_rows) ? old_origin +
923− (old_row_size * new_rows) :
924− vc->vc_scr_end;
916+ }
917+
918+ end = old_origin + old_row_size * min(old_rows, new_rows);
925919
926920 update_attr(vc);
927921
@@ -3075,8 +3069,7 @@ static int bind_con_driver(const struct consw *csw, int first, int last, · 2147 unmodified lines
30753069
30763070 old_was_color = vc->vc_can_do_color;
30773071 vc->vc_sw->con_deinit(vc);
3078− if (!vc->vc_origin)
3079− vc->vc_origin = (unsigned long)vc->vc_screenbuf;
3072+ vc->vc_origin = (unsigned long)vc->vc_screenbuf;
30803073 visual_init(vc, i, 0);
30813074 set_origin(vc);
30823075 update_attr(vc);
drivers/char/vt_ioctl.c+8−8
@@ -533,11 +533,14 @@ int vt_ioctl(struct tty_struct *tty, struct file * file, · 532 unmodified lines
533533 case KIOCSOUND:
534534 if (!perm)
535535 goto eperm;
536− /* FIXME: This is an old broken API but we need to keep it
537− supported and somehow separate the historic advertised
538− tick rate from any real one */
536+ /*
537+ * The use of PIT_TICK_RATE is historic, it used to be
538+ * the platform-dependent CLOCK_TICK_RATE between 2.6.12
539+ * and 2.6.36, which was a minor but unfortunate ABI
540+ * change.
541+ */
539542 if (arg)
540− arg = CLOCK_TICK_RATE / arg;
543+ arg = PIT_TICK_RATE / arg;
541544 kd_mksound(arg, 0);
542545 break;
543546
@@ -553,11 +556,8 @@ int vt_ioctl(struct tty_struct *tty, struct file * file, · 9 unmodified lines
553556 */
554557 ticks = HZ * ((arg >> 16) & 0xffff) / 1000;
555558 count = ticks ? (arg & 0xffff) : 0;
556− /* FIXME: This is an old broken API but we need to keep it
557− supported and somehow separate the historic advertised
558− tick rate from any real one */
559559 if (count)
560− count = CLOCK_TICK_RATE / count;
560+ count = PIT_TICK_RATE / count;
561561 kd_mksound(count, ticks);
562562 break;
563563 }
drivers/edac/amd64_edac.c+0−10
@@ -2071,16 +2071,6 @@ static inline void __amd64_decode_bus_error(struct mem_ctl_info *mci, · 2070 unmodified lines
20712071 amd64_handle_ce(mci, info);
20722072 else if (ecc_type == 1)
20732073 amd64_handle_ue(mci, info);
2074−
2075− /*
2076− * If main error is CE then overflow must be CE. If main error is UE
2077− * then overflow is unknown. We'll call the overflow a CE - if
2078− * panic_on_ue is set then we're already panic'ed and won't arrive
2079− * here. Else, then apparently someone doesn't think that UE's are
2080− * catastrophic.
2081− */
2082− if (info->nbsh & K8_NBSH_OVERFLOW)
2083− edac_mc_handle_ce_no_info(mci, EDAC_MOD_STR " Error Overflow");
20842074 }
20852075
20862076 void amd64_decode_bus_error(int node_id, struct err_regs *regs)
drivers/edac/edac_mce_amd.c+10−7
@@ -365,11 +365,10 @@ static int amd_decode_mce(struct notifier_block *nb, unsigned long val, · 364 unmodified lines
365365
366366 pr_emerg("MC%d_STATUS: ", m->bank);
367367
368− pr_cont("%sorrected error, report: %s, MiscV: %svalid, "
368+ pr_cont("%sorrected error, other errors lost: %s, "
369369 "CPU context corrupt: %s",
370370 ((m->status & MCI_STATUS_UC) ? "Unc" : "C"),
371− ((m->status & MCI_STATUS_EN) ? "yes" : "no"),
372− ((m->status & MCI_STATUS_MISCV) ? "" : "in"),
371+ ((m->status & MCI_STATUS_OVER) ? "yes" : "no"),
373372 ((m->status & MCI_STATUS_PCC) ? "yes" : "no"));
374373
375374 /* do the two bits[14:13] together */
@@ -426,11 +425,15 @@ static struct notifier_block amd_mce_dec_nb = { · 50 unmodified lines
426425 static int __init mce_amd_init(void)
427426 {
428427 /*
429− * We can decode MCEs for Opteron and later CPUs:
428+ * We can decode MCEs for K8, F10h and F11h CPUs:
430429 */
431− if ((boot_cpu_data.x86_vendor == X86_VENDOR_AMD) &&
432− (boot_cpu_data.x86 >= 0xf))
433− atomic_notifier_chain_register(&x86_mce_decoder_chain, &amd_mce_dec_nb);
430+ if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
431+ return 0;
432+
433+ if (boot_cpu_data.x86 < 0xf || boot_cpu_data.x86 > 0x11)
434+ return 0;
435+
436+ atomic_notifier_chain_register(&x86_mce_decoder_chain, &amd_mce_dec_nb);
434437
435438 return 0;
436439 }
drivers/firewire/core-transaction.c+10−3
@@ -81,6 +81,10 @@ static int close_transaction(struct fw_transaction *transaction, · 80 unmodified lines
8181 spin_lock_irqsave(&card->lock, flags);
8282 list_for_each_entry(t, &card->transaction_list, link) {
8383 if (t == transaction) {
84+ if (!del_timer(&t->split_timeout_timer)) {
85+ spin_unlock_irqrestore(&card->lock, flags);
86+ goto timed_out;
87+ }
8488 list_del_init(&t->link);
8589 card->tlabel_mask &= ~(1ULL << t->tlabel);
8690 break;
@@ -89,11 +93,11 @@ static int close_transaction(struct fw_transaction *transaction, · 2 unmodified lines
8993 spin_unlock_irqrestore(&card->lock, flags);
9094
9195 if (&t->link != &card->transaction_list) {
92− del_timer_sync(&t->split_timeout_timer);
9396 t->callback(card, rcode, NULL, 0, t->callback_data);
9497 return 0;
9598 }
9699
100+ timed_out:
97101 return -ENOENT;
98102 }
99103
@@ -921,6 +925,10 @@ void fw_core_handle_response(struct fw_card *card, struct fw_packet *p) · 821 unmodified lines
921925 spin_lock_irqsave(&card->lock, flags);
922926 list_for_each_entry(t, &card->transaction_list, link) {
923927 if (t->node_id == source && t->tlabel == tlabel) {
928+ if (!del_timer(&t->split_timeout_timer)) {
929+ spin_unlock_irqrestore(&card->lock, flags);
930+ goto timed_out;
931+ }
924932 list_del_init(&t->link);
925933 card->tlabel_mask &= ~(1ULL << t->tlabel);
926934 break;
@@ -929,6 +937,7 @@ void fw_core_handle_response(struct fw_card *card, struct fw_packet *p) · 2 unmodified lines
929937 spin_unlock_irqrestore(&card->lock, flags);
930938
931939 if (&t->link == &card->transaction_list) {
940+ timed_out:
932941 fw_notify("Unsolicited response (source %x, tlabel %x)\n",
933942 source, tlabel);
934943 return;
@@ -963,8 +972,6 @@ void fw_core_handle_response(struct fw_card *card, struct fw_packet *p) · 28 unmodified lines
963972 break;
964973 }
965974
966− del_timer_sync(&t->split_timeout_timer);
967−
968975 /*
969976 * The response handler may be executed while the request handler
970977 * is still pending. Cancel the request handler.
drivers/firewire/net.c+15−13
@@ -579,7 +579,7 @@ static int fwnet_finish_incoming_packet(struct net_device *net, · 578 unmodified lines
579579 if (!peer) {
580580 fw_notify("No peer for ARP packet from %016llx\n",
581581 (unsigned long long)peer_guid);
582− goto failed_proto;
582+ goto no_peer;
583583 }
584584
585585 /*
@@ -656,7 +656,7 @@ static int fwnet_finish_incoming_packet(struct net_device *net, · 70 unmodified lines
656656
657657 return 0;
658658
659− failed_proto:
659+ no_peer:
660660 net->stats.rx_errors++;
661661 net->stats.rx_dropped++;
662662
@@ -664,7 +664,7 @@ static int fwnet_finish_incoming_packet(struct net_device *net, · 1 unmodified line
664664 if (netif_queue_stopped(net))
665665 netif_wake_queue(net);
666666
667− return 0;
667+ return -ENOENT;
668668 }
669669
670670 static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len,
@@ -701,7 +701,7 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, · 30 unmodified lines
701701 fw_error("out of memory\n");
702702 net->stats.rx_dropped++;
703703
704− return -1;
704+ return -ENOMEM;
705705 }
706706 skb_reserve(skb, (net->hard_header_len + 15) & ~15);
707707 memcpy(skb_put(skb, len), buf, len);
@@ -726,8 +726,10 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, · 18 unmodified lines
726726 spin_lock_irqsave(&dev->lock, flags);
727727
728728 peer = fwnet_peer_find_by_node_id(dev, source_node_id, generation);
729− if (!peer)
730− goto bad_proto;
729+ if (!peer) {
730+ retval = -ENOENT;
731+ goto fail;
732+ }
731733
732734 pd = fwnet_pd_find(peer, datagram_label);
733735 if (pd == NULL) {
@@ -741,7 +743,7 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, · 7 unmodified lines
741743 dg_size, buf, fg_off, len);
742744 if (pd == NULL) {
743745 retval = -ENOMEM;
744− goto bad_proto;
746+ goto fail;
745747 }
746748 peer->pdg_size++;
747749 } else {
@@ -755,9 +757,9 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, · 7 unmodified lines
755757 pd = fwnet_pd_new(net, peer, datagram_label,
756758 dg_size, buf, fg_off, len);
757759 if (pd == NULL) {
758− retval = -ENOMEM;
759760 peer->pdg_size--;
760− goto bad_proto;
761+ retval = -ENOMEM;
762+ goto fail;
761763 }
762764 } else {
763765 if (!fwnet_pd_update(peer, pd, buf, fg_off, len)) {
@@ -768,7 +770,8 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, · 4 unmodified lines
768770 */
769771 fwnet_pd_delete(pd);
770772 peer->pdg_size--;
771− goto bad_proto;
773+ retval = -ENOMEM;
774+ goto fail;
772775 }
773776 }
774777 } /* new datagram or add to existing one */
@@ -794,14 +797,13 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, · 19 unmodified lines
794797 spin_unlock_irqrestore(&dev->lock, flags);
795798
796799 return 0;
797−
798− bad_proto:
800+ fail:
799801 spin_unlock_irqrestore(&dev->lock, flags);
800802
801803 if (netif_queue_stopped(net))
802804 netif_wake_queue(net);
803805
804− return 0;
806+ return retval;
805807 }
806808
807809 static void fwnet_receive_packet(struct fw_card *card, struct fw_request *r,
drivers/firewire/ohci.c+9−1
@@ -694,7 +694,15 @@ static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer) · 693 unmodified lines
694694 log_ar_at_event('R', p.speed, p.header, evt);
695695
696696 /*
697− * The OHCI bus reset handler synthesizes a phy packet with
697+ * Several controllers, notably from NEC and VIA, forget to
698+ * write ack_complete status at PHY packet reception.
699+ */
700+ if (evt == OHCI1394_evt_no_status &&
701+ (p.header[0] & 0xff) == (OHCI1394_phy_tcode << 4))
702+ p.ack = ACK_COMPLETE;
703+
704+ /*
705+ * The OHCI bus reset handler synthesizes a PHY packet with
698706 * the new generation number when a bus reset happens (see
699707 * section 8.4.2.3). This helps us determine when a request
700708 * was received and make sure we send the response in the same
drivers/firewire/sbp2.c+15−8
@@ -450,7 +450,7 @@ static void sbp2_status_write(struct fw_card *card, struct fw_request *request, · 449 unmodified lines
450450
451451 if (&orb->link != &lu->orb_list) {
452452 orb->callback(orb, &status);
453− kref_put(&orb->kref, free_orb);
453+ kref_put(&orb->kref, free_orb); /* orb callback reference */
454454 } else {
455455 fw_error("status write for unknown orb\n");
456456 }
@@ -472,20 +472,28 @@ static void complete_transaction(struct fw_card *card, int rcode, · 15 unmodified lines
472472 * So this callback only sets the rcode if it hasn't already
473473 * been set and only does the cleanup if the transaction
474474 * failed and we didn't already get a status write.
475+ *
476+ * Here we treat RCODE_CANCELLED like RCODE_COMPLETE because some
477+ * OXUF936QSE firmwares occasionally respond after Split_Timeout and
478+ * complete the ORB just fine. Note, we also get RCODE_CANCELLED
479+ * from sbp2_cancel_orbs() if fw_cancel_transaction() == 0.
475480 */
476481 spin_lock_irqsave(&card->lock, flags);
477482
478483 if (orb->rcode == -1)
479484 orb->rcode = rcode;
480− if (orb->rcode != RCODE_COMPLETE) {
485+
486+ if (orb->rcode != RCODE_COMPLETE && orb->rcode != RCODE_CANCELLED) {
481487 list_del(&orb->link);
482488 spin_unlock_irqrestore(&card->lock, flags);
489+
483490 orb->callback(orb, NULL);
491+ kref_put(&orb->kref, free_orb); /* orb callback reference */
484492 } else {
485493 spin_unlock_irqrestore(&card->lock, flags);
486494 }
487495
488− kref_put(&orb->kref, free_orb);
496+ kref_put(&orb->kref, free_orb); /* transaction callback reference */
489497 }
490498
491499 static void sbp2_send_orb(struct sbp2_orb *orb, struct sbp2_logical_unit *lu,
@@ -501,9 +509,8 @@ static void sbp2_send_orb(struct sbp2_orb *orb, struct sbp2_logical_unit *lu, · 9 unmodified lines
501509 list_add_tail(&orb->link, &lu->orb_list);
502510 spin_unlock_irqrestore(&device->card->lock, flags);
503511
504− /* Take a ref for the orb list and for the transaction callback. */
505− kref_get(&orb->kref);
506− kref_get(&orb->kref);
512+ kref_get(&orb->kref); /* transaction callback reference */
513+ kref_get(&orb->kref); /* orb callback reference */
507514
508515 fw_send_request(device->card, &orb->t, TCODE_WRITE_BLOCK_REQUEST,
509516 node_id, generation, device->max_speed, offset,
@@ -525,11 +532,11 @@ static int sbp2_cancel_orbs(struct sbp2_logical_unit *lu) · 15 unmodified lines
525532
526533 list_for_each_entry_safe(orb, next, &list, link) {
527534 retval = 0;
528− if (fw_cancel_transaction(device->card, &orb->t) == 0)
529− continue;
535+ fw_cancel_transaction(device->card, &orb->t);
530536
531537 orb->rcode = RCODE_CANCELLED;
532538 orb->callback(orb, NULL);
539+ kref_put(&orb->kref, free_orb); /* orb callback reference */
533540 }
534541
535542 return retval;
drivers/gpio/sx150x.c+21−5
@@ -459,17 +459,33 @@ static int sx150x_init_io(struct sx150x_chip *chip, u8 base, u16 cfg) · 458 unmodified lines
459459 return err;
460460 }
461461
462−static int sx150x_init_hw(struct sx150x_chip *chip,
463− struct sx150x_platform_data *pdata)
462+static int sx150x_reset(struct sx150x_chip *chip)
464463 {
465− int err = 0;
464+ int err;
466465
467− err = i2c_smbus_write_word_data(chip->client,
466+ err = i2c_smbus_write_byte_data(chip->client,
468467 chip->dev_cfg->reg_reset,
469− 0x3412);
468+ 0x12);
470469 if (err < 0)
471470 return err;
472471
472+ err = i2c_smbus_write_byte_data(chip->client,
473+ chip->dev_cfg->reg_reset,
474+ 0x34);
475+ return err;
476+}
477+
478+static int sx150x_init_hw(struct sx150x_chip *chip,
479+ struct sx150x_platform_data *pdata)
480+{
481+ int err = 0;
482+
483+ if (pdata->reset_during_probe) {
484+ err = sx150x_reset(chip);
485+ if (err < 0)
486+ return err;
487+ }
488+
473489 err = sx150x_i2c_write(chip->client,
474490 chip->dev_cfg->reg_misc,
475491 0x01);
drivers/gpu/drm/drm_crtc_helper.c+18−6
@@ -34,6 +34,9 @@ · 33 unmodified lines
3434 #include "drm_crtc_helper.h"
3535 #include "drm_fb_helper.h"
3636
37+static bool drm_kms_helper_poll = true;
38+module_param_named(poll, drm_kms_helper_poll, bool, 0600);
39+
3740 static void drm_mode_validate_flag(struct drm_connector *connector,
3841 int flags)
3942 {
@@ -99,8 +102,10 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, · 59 unmodified lines
99102 connector->status = connector_status_disconnected;
100103 if (connector->funcs->force)
101104 connector->funcs->force(connector);
102− } else
105+ } else {
103106 connector->status = connector->funcs->detect(connector);
107+ drm_helper_hpd_irq_event(dev);
108+ }
104109
105110 if (connector->status == connector_status_disconnected) {
106111 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] disconnected\n",
@@ -110,11 +115,10 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, · 3 unmodified lines
110115 }
111116
112117 count = (*connector_funcs->get_modes)(connector);
113− if (!count) {
118+ if (count == 0 && connector->status == connector_status_connected)
114119 count = drm_add_modes_noedid(connector, 1024, 768);
115− if (!count)
116− return 0;
117− }
120+ if (count == 0)
121+ goto prune;
118122
119123 drm_mode_connector_list_update(connector);
120124
@@ -840,6 +844,9 @@ static void output_poll_execute(struct work_struct *work) · 719 unmodified lines
840844 enum drm_connector_status old_status, status;
841845 bool repoll = false, changed = false;
842846
847+ if (!drm_kms_helper_poll)
848+ return;
849+
843850 mutex_lock(&dev->mode_config.mutex);
844851 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
845852
@@ -890,6 +897,9 @@ void drm_kms_helper_poll_enable(struct drm_device *dev) · 44 unmodified lines
890897 bool poll = false;
891898 struct drm_connector *connector;
892899
900+ if (!dev->mode_config.poll_enabled || !drm_kms_helper_poll)
901+ return;
902+
893903 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
894904 if (connector->polled)
895905 poll = true;
@@ -919,8 +929,10 @@ void drm_helper_hpd_irq_event(struct drm_device *dev) · 23 unmodified lines
919929 {
920930 if (!dev->mode_config.poll_enabled)
921931 return;
932+
922933 /* kill timer and schedule immediate execution, this doesn't block */
923934 cancel_delayed_work(&dev->mode_config.output_poll_work);
924− queue_delayed_work(system_nrt_wq, &dev->mode_config.output_poll_work, 0);
935+ if (drm_kms_helper_poll)
936+ queue_delayed_work(system_nrt_wq, &dev->mode_config.output_poll_work, 0);
925937 }
926938 EXPORT_SYMBOL(drm_helper_hpd_irq_event);
drivers/gpu/drm/drm_fb_helper.c+1−1
@@ -370,7 +370,7 @@ static void drm_fb_helper_restore_work_fn(struct work_struct *ignored) · 369 unmodified lines
370370 }
371371 static DECLARE_WORK(drm_fb_helper_restore_work, drm_fb_helper_restore_work_fn);
372372
373−static void drm_fb_helper_sysrq(int dummy1, struct tty_struct *dummy3)
373+static void drm_fb_helper_sysrq(int dummy1)
374374 {
375375 schedule_work(&drm_fb_helper_restore_work);
376376 }
drivers/gpu/drm/drm_fops.c+1−0
@@ -41,6 +41,7 @@ · 40 unmodified lines
4141
4242 /* from BKL pushdown: note that nothing else serializes idr_find() */
4343 DEFINE_MUTEX(drm_global_mutex);
44+EXPORT_SYMBOL(drm_global_mutex);
4445
4546 static int drm_open_helper(struct inode *inode, struct file *filp,
4647 struct drm_device * dev);
drivers/gpu/drm/drm_lock.c+2−0
@@ -92,7 +92,9 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv) · 91 unmodified lines
9292 }
9393
9494 /* Contention */
95+ mutex_unlock(&drm_global_mutex);
9596 schedule();
97+ mutex_lock(&drm_global_mutex);
9698 if (signal_pending(current)) {
9799 ret = -EINTR;
98100 break;
drivers/gpu/drm/drm_mm.c+14−10
@@ -285,21 +285,21 @@ void drm_mm_put_block(struct drm_mm_node *cur) · 284 unmodified lines
285285
286286 EXPORT_SYMBOL(drm_mm_put_block);
287287
288−static int check_free_mm_node(struct drm_mm_node *entry, unsigned long size,
289− unsigned alignment)
288+static int check_free_hole(unsigned long start, unsigned long end,
289+ unsigned long size, unsigned alignment)
290290 {
291291 unsigned wasted = 0;
292292
293− if (entry->size < size)
293+ if (end - start < size)
294294 return 0;
295295
296296 if (alignment) {
297− register unsigned tmp = entry->start % alignment;
297+ unsigned tmp = start % alignment;
298298 if (tmp)
299299 wasted = alignment - tmp;
300300 }
301301
302− if (entry->size >= size + wasted) {
302+ if (end >= start + size + wasted) {
303303 return 1;
304304 }
305305
@@ -320,7 +320,8 @@ struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm, · 14 unmodified lines
320320 best_size = ~0UL;
321321
322322 list_for_each_entry(entry, &mm->free_stack, free_stack) {
323− if (!check_free_mm_node(entry, size, alignment))
323+ if (!check_free_hole(entry->start, entry->start + entry->size,
324+ size, alignment))
324325 continue;
325326
326327 if (!best_match)
@@ -353,10 +354,12 @@ struct drm_mm_node *drm_mm_search_free_in_range(const struct drm_mm *mm, · 26 unmodified lines
353354 best_size = ~0UL;
354355
355356 list_for_each_entry(entry, &mm->free_stack, free_stack) {
356− if (entry->start > end || (entry->start+entry->size) < start)
357− continue;
357+ unsigned long adj_start = entry->start < start ?
358+ start : entry->start;
359+ unsigned long adj_end = entry->start + entry->size > end ?
360+ end : entry->start + entry->size;
358361
359− if (!check_free_mm_node(entry, size, alignment))
362+ if (!check_free_hole(adj_start, adj_end, size, alignment))
360363 continue;
361364
362365 if (!best_match)
@@ -449,7 +452,8 @@ int drm_mm_scan_add_block(struct drm_mm_node *node) · 86 unmodified lines
449452 node->free_stack.prev = prev_free;
450453 node->free_stack.next = next_free;
451454
452− if (check_free_mm_node(node, mm->scan_size, mm->scan_alignment)) {
455+ if (check_free_hole(node->start, node->start + node->size,
456+ mm->scan_size, mm->scan_alignment)) {
453457 mm->scan_hit_start = node->start;
454458 mm->scan_hit_size = node->size;
455459
drivers/gpu/drm/drm_modes.c+4−1
@@ -251,7 +251,10 @@ struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay, · 250 unmodified lines
251251 drm_mode->htotal = drm_mode->hdisplay + CVT_RB_H_BLANK;
252252 /* Fill in HSync values */
253253 drm_mode->hsync_end = drm_mode->hdisplay + CVT_RB_H_BLANK / 2;
254− drm_mode->hsync_start = drm_mode->hsync_end = CVT_RB_H_SYNC;
254+ drm_mode->hsync_start = drm_mode->hsync_end - CVT_RB_H_SYNC;
255+ /* Fill in VSync values */
256+ drm_mode->vsync_start = drm_mode->vdisplay + CVT_RB_VFPORCH;
257+ drm_mode->vsync_end = drm_mode->vsync_start + vsync;
255258 }
256259 /* 15/13. Find pixel clock frequency (kHz for xf86) */
257260 drm_mode->clock = drm_mode->htotal * HV_FACTOR * 1000 / hperiod;
drivers/gpu/drm/i915/i915_debugfs.c+50−0
@@ -31,6 +31,7 @@ · 30 unmodified lines
3131 #include <linux/slab.h>
3232 #include "drmP.h"
3333 #include "drm.h"
34+#include "intel_drv.h"
3435 #include "i915_drm.h"
3536 #include "i915_drv.h"
3637
@@ -121,6 +122,54 @@ static int i915_gem_object_list_info(struct seq_file *m, void *data) · 84 unmodified lines
121122 return 0;
122123 }
123124
125+static int i915_gem_pageflip_info(struct seq_file *m, void *data)
126+{
127+ struct drm_info_node *node = (struct drm_info_node *) m->private;
128+ struct drm_device *dev = node->minor->dev;
129+ unsigned long flags;
130+ struct intel_crtc *crtc;
131+
132+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head) {
133+ const char *pipe = crtc->pipe ? "B" : "A";
134+ const char *plane = crtc->plane ? "B" : "A";
135+ struct intel_unpin_work *work;
136+
137+ spin_lock_irqsave(&dev->event_lock, flags);
138+ work = crtc->unpin_work;
139+ if (work == NULL) {
140+ seq_printf(m, "No flip due on pipe %s (plane %s)\n",
141+ pipe, plane);
142+ } else {
143+ if (!work->pending) {
144+ seq_printf(m, "Flip queued on pipe %s (plane %s)\n",
145+ pipe, plane);
146+ } else {
147+ seq_printf(m, "Flip pending (waiting for vsync) on pipe %s (plane %s)\n",
148+ pipe, plane);
149+ }
150+ if (work->enable_stall_check)
151+ seq_printf(m, "Stall check enabled, ");
152+ else
153+ seq_printf(m, "Stall check waiting for page flip ioctl, ");
154+ seq_printf(m, "%d prepares\n", work->pending);
155+
156+ if (work->old_fb_obj) {
157+ struct drm_i915_gem_object *obj_priv = to_intel_bo(work->old_fb_obj);
158+ if(obj_priv)
159+ seq_printf(m, "Old framebuffer gtt_offset 0x%08x\n", obj_priv->gtt_offset );
160+ }
161+ if (work->pending_flip_obj) {
162+ struct drm_i915_gem_object *obj_priv = to_intel_bo(work->pending_flip_obj);
163+ if(obj_priv)
164+ seq_printf(m, "New framebuffer gtt_offset 0x%08x\n", obj_priv->gtt_offset );
165+ }
166+ }
167+ spin_unlock_irqrestore(&dev->event_lock, flags);
168+ }
169+
170+ return 0;
171+}
172+
124173 static int i915_gem_request_info(struct seq_file *m, void *data)
125174 {
126175 struct drm_info_node *node = (struct drm_info_node *) m->private;
@@ -777,6 +826,7 @@ static struct drm_info_list i915_debugfs_list[] = { · 650 unmodified lines
777826 {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST},
778827 {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST},
779828 {"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST},
829+ {"i915_gem_pageflip", i915_gem_pageflip_info, 0},
780830 {"i915_gem_request", i915_gem_request_info, 0},
781831 {"i915_gem_seqno", i915_gem_seqno_info, 0},
782832 {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
drivers/gpu/drm/i915/i915_dma.c+23−13
@@ -620,8 +620,10 @@ static int i915_batchbuffer(struct drm_device *dev, void *data, · 619 unmodified lines
620620 ret = copy_from_user(cliprects, batch->cliprects,
621621 batch->num_cliprects *
622622 sizeof(struct drm_clip_rect));
623− if (ret != 0)
623+ if (ret != 0) {
624+ ret = -EFAULT;
624625 goto fail_free;
626+ }
625627 }
626628
627629 mutex_lock(&dev->struct_mutex);
@@ -662,8 +664,10 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data, · 34 unmodified lines
662664 return -ENOMEM;
663665
664666 ret = copy_from_user(batch_data, cmdbuf->buf, cmdbuf->sz);
665− if (ret != 0)
667+ if (ret != 0) {
668+ ret = -EFAULT;
666669 goto fail_batch_free;
670+ }
667671
668672 if (cmdbuf->num_cliprects) {
669673 cliprects = kcalloc(cmdbuf->num_cliprects,
@@ -676,8 +680,10 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data, · 6 unmodified lines
676680 ret = copy_from_user(cliprects, cmdbuf->cliprects,
677681 cmdbuf->num_cliprects *
678682 sizeof(struct drm_clip_rect));
679− if (ret != 0)
683+ if (ret != 0) {
684+ ret = -EFAULT;
680685 goto fail_clip_free;
686+ }
681687 }
682688
683689 mutex_lock(&dev->struct_mutex);
@@ -885,7 +891,7 @@ intel_alloc_mchbar_resource(struct drm_device *dev) · 201 unmodified lines
885891 int reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915;
886892 u32 temp_lo, temp_hi = 0;
887893 u64 mchbar_addr;
888− int ret = 0;
894+ int ret;
889895
890896 if (IS_I965G(dev))
891897 pci_read_config_dword(dev_priv->bridge_dev, reg + 4, &temp_hi);
@@ -895,22 +901,23 @@ intel_alloc_mchbar_resource(struct drm_device *dev) · 3 unmodified lines
895901 /* If ACPI doesn't have it, assume we need to allocate it ourselves */
896902 #ifdef CONFIG_PNP
897903 if (mchbar_addr &&
898− pnp_range_reserved(mchbar_addr, mchbar_addr + MCHBAR_SIZE)) {
899− ret = 0;
900− goto out;
901− }
904+ pnp_range_reserved(mchbar_addr, mchbar_addr + MCHBAR_SIZE))
905+ return 0;
902906 #endif
903907
904908 /* Get some space for it */
905− ret = pci_bus_alloc_resource(dev_priv->bridge_dev->bus, &dev_priv->mch_res,
909+ dev_priv->mch_res.name = "i915 MCHBAR";
910+ dev_priv->mch_res.flags = IORESOURCE_MEM;
911+ ret = pci_bus_alloc_resource(dev_priv->bridge_dev->bus,
912+ &dev_priv->mch_res,
906913 MCHBAR_SIZE, MCHBAR_SIZE,
907914 PCIBIOS_MIN_MEM,
908− 0, pcibios_align_resource,
915+ 0, pcibios_align_resource,
909916 dev_priv->bridge_dev);
910917 if (ret) {
911918 DRM_DEBUG_DRIVER("failed bus alloc: %d\n", ret);
912919 dev_priv->mch_res.start = 0;
913− goto out;
920+ return ret;
914921 }
915922
916923 if (IS_I965G(dev))
@@ -919,8 +926,7 @@ intel_alloc_mchbar_resource(struct drm_device *dev) · 2 unmodified lines
919926
920927 pci_write_config_dword(dev_priv->bridge_dev, reg,
921928 lower_32_bits(dev_priv->mch_res.start));
922−out:
923− return ret;
929+ return 0;
924930 }
925931
926932 /* Setup MCHBAR if possible, return true if we should disable it again */
@@ -2082,6 +2088,10 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) · 1155 unmodified lines
20822088 goto free_priv;
20832089 }
20842090
2091+ /* overlay on gen2 is broken and can't address above 1G */
2092+ if (IS_GEN2(dev))
2093+ dma_set_coherent_mask(&dev->pdev->dev, DMA_BIT_MASK(30));
2094+
20852095 dev_priv->regs = ioremap(base, size);
20862096 if (!dev_priv->regs) {
20872097 DRM_ERROR("failed to map registers\n");
drivers/gpu/drm/i915/i915_drv.c+32−33
@@ -61,91 +61,86 @@ extern int intel_agp_enabled; · 60 unmodified lines
6161 .driver_data = (unsigned long) info }
6262
6363 static const struct intel_device_info intel_i830_info = {
64− .is_i8xx = 1, .is_mobile = 1, .cursor_needs_physical = 1,
64+ .gen = 2, .is_i8xx = 1, .is_mobile = 1, .cursor_needs_physical = 1,
6565 };
6666
6767 static const struct intel_device_info intel_845g_info = {
68− .is_i8xx = 1,
68+ .gen = 2, .is_i8xx = 1,
6969 };
7070
7171 static const struct intel_device_info intel_i85x_info = {
72− .is_i8xx = 1, .is_i85x = 1, .is_mobile = 1,
72+ .gen = 2, .is_i8xx = 1, .is_i85x = 1, .is_mobile = 1,
7373 .cursor_needs_physical = 1,
7474 };
7575
7676 static const struct intel_device_info intel_i865g_info = {
77− .is_i8xx = 1,
77+ .gen = 2, .is_i8xx = 1,
7878 };
7979
8080 static const struct intel_device_info intel_i915g_info = {
81− .is_i915g = 1, .is_i9xx = 1, .cursor_needs_physical = 1,
81+ .gen = 3, .is_i915g = 1, .is_i9xx = 1, .cursor_needs_physical = 1,
8282 };
8383 static const struct intel_device_info intel_i915gm_info = {
84− .is_i9xx = 1, .is_mobile = 1,
84+ .gen = 3, .is_i9xx = 1, .is_mobile = 1,
8585 .cursor_needs_physical = 1,
8686 };
8787 static const struct intel_device_info intel_i945g_info = {
88− .is_i9xx = 1, .has_hotplug = 1, .cursor_needs_physical = 1,
88+ .gen = 3, .is_i9xx = 1, .has_hotplug = 1, .cursor_needs_physical = 1,
8989 };
9090 static const struct intel_device_info intel_i945gm_info = {
91− .is_i945gm = 1, .is_i9xx = 1, .is_mobile = 1,
91+ .gen = 3, .is_i945gm = 1, .is_i9xx = 1, .is_mobile = 1,
9292 .has_hotplug = 1, .cursor_needs_physical = 1,
9393 };
9494
9595 static const struct intel_device_info intel_i965g_info = {
96− .is_broadwater = 1, .is_i965g = 1, .is_i9xx = 1, .has_hotplug = 1,
96+ .gen = 4, .is_broadwater = 1, .is_i965g = 1, .is_i9xx = 1,
97+ .has_hotplug = 1,
9798 };
9899
99100 static const struct intel_device_info intel_i965gm_info = {
100− .is_crestline = 1, .is_i965g = 1, .is_i965gm = 1, .is_i9xx = 1,
101− .is_mobile = 1, .has_fbc = 1, .has_rc6 = 1,
102− .has_hotplug = 1,
101+ .gen = 4, .is_crestline = 1, .is_i965g = 1, .is_i965gm = 1, .is_i9xx = 1,
102+ .is_mobile = 1, .has_fbc = 1, .has_rc6 = 1, .has_hotplug = 1,
103103 };
104104
105105 static const struct intel_device_info intel_g33_info = {
106− .is_g33 = 1, .is_i9xx = 1, .need_gfx_hws = 1,
107− .has_hotplug = 1,
106+ .gen = 3, .is_g33 = 1, .is_i9xx = 1,
107+ .need_gfx_hws = 1, .has_hotplug = 1,
108108 };
109109
110110 static const struct intel_device_info intel_g45_info = {
111− .is_i965g = 1, .is_g4x = 1, .is_i9xx = 1, .need_gfx_hws = 1,
112− .has_pipe_cxsr = 1,
113− .has_hotplug = 1,
111+ .gen = 4, .is_i965g = 1, .is_g4x = 1, .is_i9xx = 1, .need_gfx_hws = 1,
112+ .has_pipe_cxsr = 1, .has_hotplug = 1,
114113 };
115114
116115 static const struct intel_device_info intel_gm45_info = {
117− .is_i965g = 1, .is_g4x = 1, .is_i9xx = 1,
116+ .gen = 4, .is_i965g = 1, .is_g4x = 1, .is_i9xx = 1,
118117 .is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1, .has_rc6 = 1,
119− .has_pipe_cxsr = 1,
120− .has_hotplug = 1,
118+ .has_pipe_cxsr = 1, .has_hotplug = 1,
121119 };
122120
123121 static const struct intel_device_info intel_pineview_info = {
124− .is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .is_i9xx = 1,
125− .need_gfx_hws = 1,
126− .has_hotplug = 1,
122+ .gen = 3, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .is_i9xx = 1,
123+ .need_gfx_hws = 1, .has_hotplug = 1,
127124 };
128125
129126 static const struct intel_device_info intel_ironlake_d_info = {
130− .is_ironlake = 1, .is_i965g = 1, .is_i9xx = 1, .need_gfx_hws = 1,
131− .has_pipe_cxsr = 1,
132− .has_hotplug = 1,
127+ .gen = 5, .is_ironlake = 1, .is_i965g = 1, .is_i9xx = 1,
128+ .need_gfx_hws = 1, .has_pipe_cxsr = 1, .has_hotplug = 1,
133129 };
134130
135131 static const struct intel_device_info intel_ironlake_m_info = {
136− .is_ironlake = 1, .is_mobile = 1, .is_i965g = 1, .is_i9xx = 1,
137− .need_gfx_hws = 1, .has_fbc = 1, .has_rc6 = 1,
138− .has_hotplug = 1,
132+ .gen = 5, .is_ironlake = 1, .is_mobile = 1, .is_i965g = 1, .is_i9xx = 1,
133+ .need_gfx_hws = 1, .has_fbc = 1, .has_rc6 = 1, .has_hotplug = 1,
139134 };
140135
141136 static const struct intel_device_info intel_sandybridge_d_info = {
142− .is_i965g = 1, .is_i9xx = 1, .need_gfx_hws = 1,
143− .has_hotplug = 1, .is_gen6 = 1,
137+ .gen = 6, .is_i965g = 1, .is_i9xx = 1,
138+ .need_gfx_hws = 1, .has_hotplug = 1,
144139 };
145140
146141 static const struct intel_device_info intel_sandybridge_m_info = {
147− .is_i965g = 1, .is_mobile = 1, .is_i9xx = 1, .need_gfx_hws = 1,
148− .has_hotplug = 1, .is_gen6 = 1,
142+ .gen = 6, .is_i965g = 1, .is_mobile = 1, .is_i9xx = 1,
143+ .need_gfx_hws = 1, .has_hotplug = 1,
149144 };
150145
151146 static const struct pci_device_id pciidlist[] = { /* aka */
@@ -180,8 +175,12 @@ static const struct pci_device_id pciidlist[] = { /* aka */ · 28 unmodified lines
180175 INTEL_VGA_DEVICE(0x0042, &intel_ironlake_d_info),
181176 INTEL_VGA_DEVICE(0x0046, &intel_ironlake_m_info),
182177 INTEL_VGA_DEVICE(0x0102, &intel_sandybridge_d_info),
178+ INTEL_VGA_DEVICE(0x0112, &intel_sandybridge_d_info),
179+ INTEL_VGA_DEVICE(0x0122, &intel_sandybridge_d_info),
183180 INTEL_VGA_DEVICE(0x0106, &intel_sandybridge_m_info),
181+ INTEL_VGA_DEVICE(0x0116, &intel_sandybridge_m_info),
184182 INTEL_VGA_DEVICE(0x0126, &intel_sandybridge_m_info),
183+ INTEL_VGA_DEVICE(0x010A, &intel_sandybridge_d_info),
185184 {0, 0, 0}
186185 };
187186
drivers/gpu/drm/i915/i915_drv.h+6−21
@@ -191,6 +191,7 @@ struct drm_i915_display_funcs { · 190 unmodified lines
191191 };
192192
193193 struct intel_device_info {
194+ u8 gen;
194195 u8 is_mobile : 1;
195196 u8 is_i8xx : 1;
196197 u8 is_i85x : 1;
@@ -206,7 +207,6 @@ struct intel_device_info { · 9 unmodified lines
206207 u8 is_broadwater : 1;
207208 u8 is_crestline : 1;
208209 u8 is_ironlake : 1;
209− u8 is_gen6 : 1;
210210 u8 has_fbc : 1;
211211 u8 has_rc6 : 1;
212212 u8 has_pipe_cxsr : 1;
@@ -1162,7 +1162,6 @@ extern void intel_overlay_print_error_state(struct seq_file *m, struct intel_ove · 949 unmodified lines
11621162 #define IS_845G(dev) ((dev)->pci_device == 0x2562)
11631163 #define IS_I85X(dev) (INTEL_INFO(dev)->is_i85x)
11641164 #define IS_I865G(dev) ((dev)->pci_device == 0x2572)
1165−#define IS_GEN2(dev) (INTEL_INFO(dev)->is_i8xx)
11661165 #define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g)
11671166 #define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
11681167 #define IS_I945G(dev) ((dev)->pci_device == 0x2772)
@@ -1181,27 +1180,13 @@ extern void intel_overlay_print_error_state(struct seq_file *m, struct intel_ove · 12 unmodified lines
11811180 #define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046)
11821181 #define IS_IRONLAKE(dev) (INTEL_INFO(dev)->is_ironlake)
11831182 #define IS_I9XX(dev) (INTEL_INFO(dev)->is_i9xx)
1184−#define IS_GEN6(dev) (INTEL_INFO(dev)->is_gen6)
11851183 #define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
11861184
1187−#define IS_GEN3(dev) (IS_I915G(dev) || \
1188− IS_I915GM(dev) || \
1189− IS_I945G(dev) || \
1190− IS_I945GM(dev) || \
1191− IS_G33(dev) || \
1192− IS_PINEVIEW(dev))
1193−#define IS_GEN4(dev) ((dev)->pci_device == 0x2972 || \
1194− (dev)->pci_device == 0x2982 || \
1195− (dev)->pci_device == 0x2992 || \
1196− (dev)->pci_device == 0x29A2 || \
1197− (dev)->pci_device == 0x2A02 || \
1198− (dev)->pci_device == 0x2A12 || \
1199− (dev)->pci_device == 0x2E02 || \
1200− (dev)->pci_device == 0x2E12 || \
1201− (dev)->pci_device == 0x2E22 || \
1202− (dev)->pci_device == 0x2E32 || \
1203− (dev)->pci_device == 0x2A42 || \
1204− (dev)->pci_device == 0x2E42)
1185+#define IS_GEN2(dev) (INTEL_INFO(dev)->gen == 2)
1186+#define IS_GEN3(dev) (INTEL_INFO(dev)->gen == 3)
1187+#define IS_GEN4(dev) (INTEL_INFO(dev)->gen == 4)
1188+#define IS_GEN5(dev) (INTEL_INFO(dev)->gen == 5)
1189+#define IS_GEN6(dev) (INTEL_INFO(dev)->gen == 6)
12051190
12061191 #define HAS_BSD(dev) (IS_IRONLAKE(dev) || IS_G4X(dev))
12071192 #define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
drivers/gpu/drm/i915/i915_gem.c+8−3
@@ -34,6 +34,7 @@ · 33 unmodified lines
3434 #include <linux/slab.h>
3535 #include <linux/swap.h>
3636 #include <linux/pci.h>
37+#include <linux/intel-gtt.h>
3738
3839 static uint32_t i915_gem_get_gtt_alignment(struct drm_gem_object *obj);
3940 static int i915_gem_object_flush_gpu_write_domain(struct drm_gem_object *obj);
@@ -135,12 +136,15 @@ i915_gem_create_ioctl(struct drm_device *dev, void *data, · 95 unmodified lines
135136 return -ENOMEM;
136137
137138 ret = drm_gem_handle_create(file_priv, obj, &handle);
138− drm_gem_object_unreference_unlocked(obj);
139− if (ret)
139+ if (ret) {
140+ drm_gem_object_unreference_unlocked(obj);
140141 return ret;
142+ }
141143
142− args->handle = handle;
144+ /* Sink the floating reference from kref_init(handlecount) */
145+ drm_gem_object_handle_unreference_unlocked(obj);
143146
147+ args->handle = handle;
144148 return 0;
145149 }
146150
@@ -3585,6 +3589,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, · 3438 unmodified lines
35853589 if (ret != 0) {
35863590 DRM_ERROR("copy %d cliprects failed: %d\n",
35873591 args->num_cliprects, ret);
3592+ ret = -EFAULT;
35883593 goto pre_mutex_err;
35893594 }
35903595 }
drivers/gpu/drm/i915/i915_irq.c+64−9
@@ -887,6 +887,49 @@ static void i915_handle_error(struct drm_device *dev, bool wedged) · 886 unmodified lines
887887 queue_work(dev_priv->wq, &dev_priv->error_work);
888888 }
889889
890+static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
891+{
892+ drm_i915_private_t *dev_priv = dev->dev_private;
893+ struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
894+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
895+ struct drm_i915_gem_object *obj_priv;
896+ struct intel_unpin_work *work;
897+ unsigned long flags;
898+ bool stall_detected;
899+
900+ /* Ignore early vblank irqs */
901+ if (intel_crtc == NULL)
902+ return;
903+
904+ spin_lock_irqsave(&dev->event_lock, flags);
905+ work = intel_crtc->unpin_work;
906+
907+ if (work == NULL || work->pending || !work->enable_stall_check) {
908+ /* Either the pending flip IRQ arrived, or we're too early. Don't check */
909+ spin_unlock_irqrestore(&dev->event_lock, flags);
910+ return;
911+ }
912+
913+ /* Potential stall - if we see that the flip has happened, assume a missed interrupt */
914+ obj_priv = to_intel_bo(work->pending_flip_obj);
915+ if(IS_I965G(dev)) {
916+ int dspsurf = intel_crtc->plane == 0 ? DSPASURF : DSPBSURF;
917+ stall_detected = I915_READ(dspsurf) == obj_priv->gtt_offset;
918+ } else {
919+ int dspaddr = intel_crtc->plane == 0 ? DSPAADDR : DSPBADDR;
920+ stall_detected = I915_READ(dspaddr) == (obj_priv->gtt_offset +
921+ crtc->y * crtc->fb->pitch +
922+ crtc->x * crtc->fb->bits_per_pixel/8);
923+ }
924+
925+ spin_unlock_irqrestore(&dev->event_lock, flags);
926+
927+ if (stall_detected) {
928+ DRM_DEBUG_DRIVER("Pageflip stall detected\n");
929+ intel_prepare_page_flip(dev, intel_crtc->plane);
930+ }
931+}
932+
890933 irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
891934 {
892935 struct drm_device *dev = (struct drm_device *) arg;
@@ -1004,15 +1047,19 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) · 111 unmodified lines
10041047 if (pipea_stats & vblank_status) {
10051048 vblank++;
10061049 drm_handle_vblank(dev, 0);
1007− if (!dev_priv->flip_pending_is_done)
1050+ if (!dev_priv->flip_pending_is_done) {
1051+ i915_pageflip_stall_check(dev, 0);
10081052 intel_finish_page_flip(dev, 0);
1053+ }
10091054 }
10101055
10111056 if (pipeb_stats & vblank_status) {
10121057 vblank++;
10131058 drm_handle_vblank(dev, 1);
1014− if (!dev_priv->flip_pending_is_done)
1059+ if (!dev_priv->flip_pending_is_done) {
1060+ i915_pageflip_stall_check(dev, 1);
10151061 intel_finish_page_flip(dev, 1);
1062+ }
10161063 }
10171064
10181065 if ((pipea_stats & PIPE_LEGACY_BLC_EVENT_STATUS) ||
@@ -1303,17 +1350,25 @@ void i915_hangcheck_elapsed(unsigned long data) · 284 unmodified lines
13031350 i915_seqno_passed(i915_get_gem_seqno(dev,
13041351 &dev_priv->render_ring),
13051352 i915_get_tail_request(dev)->seqno)) {
1353+ bool missed_wakeup = false;
1354+
13061355 dev_priv->hangcheck_count = 0;
13071356
13081357 /* Issue a wake-up to catch stuck h/w. */
1309− if (dev_priv->render_ring.waiting_gem_seqno |
1310− dev_priv->bsd_ring.waiting_gem_seqno) {
1311− DRM_ERROR("Hangcheck timer elapsed... GPU idle, missed IRQ.\n");
1312− if (dev_priv->render_ring.waiting_gem_seqno)
1313− DRM_WAKEUP(&dev_priv->render_ring.irq_queue);
1314− if (dev_priv->bsd_ring.waiting_gem_seqno)
1315− DRM_WAKEUP(&dev_priv->bsd_ring.irq_queue);
1358+ if (dev_priv->render_ring.waiting_gem_seqno &&
1359+ waitqueue_active(&dev_priv->render_ring.irq_queue)) {
1360+ DRM_WAKEUP(&dev_priv->render_ring.irq_queue);
1361+ missed_wakeup = true;
13161362 }
1363+
1364+ if (dev_priv->bsd_ring.waiting_gem_seqno &&
1365+ waitqueue_active(&dev_priv->bsd_ring.irq_queue)) {
1366+ DRM_WAKEUP(&dev_priv->bsd_ring.irq_queue);
1367+ missed_wakeup = true;
1368+ }
1369+
1370+ if (missed_wakeup)
1371+ DRM_ERROR("Hangcheck timer elapsed... GPU idle, missed IRQ.\n");
13171372 return;
13181373 }
13191374
drivers/gpu/drm/i915/i915_reg.h+9−0
@@ -319,6 +319,7 @@ · 318 unmodified lines
319319
320320 #define MI_MODE 0x0209c
321321 # define VS_TIMER_DISPATCH (1 << 6)
322+# define MI_FLUSH_ENABLE (1 << 11)
322323
323324 #define SCPD0 0x0209c /* 915+ only */
324325 #define IER 0x020a0
@@ -2205,9 +2206,17 @@ · 1880 unmodified lines
22052206 #define WM1_LP_SR_EN (1<<31)
22062207 #define WM1_LP_LATENCY_SHIFT 24
22072208 #define WM1_LP_LATENCY_MASK (0x7f<<24)
2209+#define WM1_LP_FBC_LP1_MASK (0xf<<20)
2210+#define WM1_LP_FBC_LP1_SHIFT 20
22082211 #define WM1_LP_SR_MASK (0x1ff<<8)
22092212 #define WM1_LP_SR_SHIFT 8
22102213 #define WM1_LP_CURSOR_MASK (0x3f)
2214+#define WM2_LP_ILK 0x4510c
2215+#define WM2_LP_EN (1<<31)
2216+#define WM3_LP_ILK 0x45110
2217+#define WM3_LP_EN (1<<31)
2218+#define WM1S_LP_ILK 0x45120
2219+#define WM1S_LP_EN (1<<31)
22112220
22122221 /* Memory latency timer register */
22132222 #define MLTR_ILK 0x11222
drivers/gpu/drm/i915/intel_display.c+117−150
@@ -990,6 +990,22 @@ void intel_wait_for_vblank(struct drm_device *dev, int pipe) · 989 unmodified lines
990990 struct drm_i915_private *dev_priv = dev->dev_private;
991991 int pipestat_reg = (pipe == 0 ? PIPEASTAT : PIPEBSTAT);
992992
993+ /* Clear existing vblank status. Note this will clear any other
994+ * sticky status fields as well.
995+ *
996+ * This races with i915_driver_irq_handler() with the result
997+ * that either function could miss a vblank event. Here it is not
998+ * fatal, as we will either wait upon the next vblank interrupt or
999+ * timeout. Generally speaking intel_wait_for_vblank() is only
1000+ * called during modeset at which time the GPU should be idle and
1001+ * should *not* be performing page flips and thus not waiting on
1002+ * vblanks...
1003+ * Currently, the result of us stealing a vblank from the irq
1004+ * handler is that a single frame will be skipped during swapbuffers.
1005+ */
1006+ I915_WRITE(pipestat_reg,
1007+ I915_READ(pipestat_reg) | PIPE_VBLANK_INTERRUPT_STATUS);
1008+
9931009 /* Wait for vblank interrupt bit to set */
9941010 if (wait_for((I915_READ(pipestat_reg) &
9951011 PIPE_VBLANK_INTERRUPT_STATUS),
@@ -1486,7 +1502,7 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb, · 490 unmodified lines
14861502 dspcntr &= ~DISPPLANE_TILED;
14871503 }
14881504
1489− if (IS_IRONLAKE(dev))
1505+ if (HAS_PCH_SPLIT(dev))
14901506 /* must disable */
14911507 dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
14921508
@@ -1495,20 +1511,19 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb, · 2 unmodified lines
14951511 Start = obj_priv->gtt_offset;
14961512 Offset = y * fb->pitch + x * (fb->bits_per_pixel / 8);
14971513
1498− DRM_DEBUG("Writing base %08lX %08lX %d %d\n", Start, Offset, x, y);
1514+ DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
1515+ Start, Offset, x, y, fb->pitch);
14991516 I915_WRITE(dspstride, fb->pitch);
15001517 if (IS_I965G(dev)) {
1501− I915_WRITE(dspbase, Offset);
1502− I915_READ(dspbase);
15031518 I915_WRITE(dspsurf, Start);
1504− I915_READ(dspsurf);
15051519 I915_WRITE(dsptileoff, (y << 16) | x);
1520+ I915_WRITE(dspbase, Offset);
15061521 } else {
15071522 I915_WRITE(dspbase, Start + Offset);
1508− I915_READ(dspbase);
15091523 }
1524+ POSTING_READ(dspbase);
15101525
1511− if ((IS_I965G(dev) || plane == 0))
1526+ if (IS_I965G(dev) || plane == 0)
15121527 intel_update_fbc(crtc, &crtc->mode);
15131528
15141529 intel_wait_for_vblank(dev, intel_crtc->pipe);
@@ -1522,7 +1537,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, · 7 unmodified lines
15221537 struct drm_framebuffer *old_fb)
15231538 {
15241539 struct drm_device *dev = crtc->dev;
1525− struct drm_i915_private *dev_priv = dev->dev_private;
15261540 struct drm_i915_master_private *master_priv;
15271541 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
15281542 struct intel_framebuffer *intel_fb;
@@ -1530,13 +1544,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, · 1 unmodified line
15301544 struct drm_gem_object *obj;
15311545 int pipe = intel_crtc->pipe;
15321546 int plane = intel_crtc->plane;
1533− unsigned long Start, Offset;
1534− int dspbase = (plane == 0 ? DSPAADDR : DSPBADDR);
1535− int dspsurf = (plane == 0 ? DSPASURF : DSPBSURF);
1536− int dspstride = (plane == 0) ? DSPASTRIDE : DSPBSTRIDE;
1537− int dsptileoff = (plane == 0 ? DSPATILEOFF : DSPBTILEOFF);
1538− int dspcntr_reg = (plane == 0) ? DSPACNTR : DSPBCNTR;
1539− u32 dspcntr;
15401547 int ret;
15411548
15421549 /* no fb bound */
@@ -1572,71 +1579,18 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, · 29 unmodified lines
15721579 return ret;
15731580 }
15741581
1575− dspcntr = I915_READ(dspcntr_reg);
1576− /* Mask out pixel format bits in case we change it */
1577− dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
1578− switch (crtc->fb->bits_per_pixel) {
1579− case 8:
1580− dspcntr |= DISPPLANE_8BPP;
1581− break;
1582− case 16:
1583− if (crtc->fb->depth == 15)
1584− dspcntr |= DISPPLANE_15_16BPP;
1585− else
1586− dspcntr |= DISPPLANE_16BPP;
1587− break;
1588− case 24:
1589− case 32:
1590− if (crtc->fb->depth == 30)
1591− dspcntr |= DISPPLANE_32BPP_30BIT_NO_ALPHA;
1592− else
1593− dspcntr |= DISPPLANE_32BPP_NO_ALPHA;
1594− break;
1595− default:
1596− DRM_ERROR("Unknown color depth\n");
1582+ ret = intel_pipe_set_base_atomic(crtc, crtc->fb, x, y);
1583+ if (ret) {
15971584 i915_gem_object_unpin(obj);
15981585 mutex_unlock(&dev->struct_mutex);
1599− return -EINVAL;
1600− }
1601− if (IS_I965G(dev)) {
1602− if (obj_priv->tiling_mode != I915_TILING_NONE)
1603− dspcntr |= DISPPLANE_TILED;
1604− else
1605− dspcntr &= ~DISPPLANE_TILED;
1606− }
1607−
1608− if (HAS_PCH_SPLIT(dev))
1609− /* must disable */
1610− dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
1611−
1612− I915_WRITE(dspcntr_reg, dspcntr);
1613−
1614− Start = obj_priv->gtt_offset;
1615− Offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8);
1616−
1617− DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
1618− Start, Offset, x, y, crtc->fb->pitch);
1619− I915_WRITE(dspstride, crtc->fb->pitch);
1620− if (IS_I965G(dev)) {
1621− I915_WRITE(dspsurf, Start);
1622− I915_WRITE(dsptileoff, (y << 16) | x);
1623− I915_WRITE(dspbase, Offset);
1624− } else {
1625− I915_WRITE(dspbase, Start + Offset);
1586+ return ret;
16261587 }
1627− POSTING_READ(dspbase);
1628−
1629− if ((IS_I965G(dev) || plane == 0))
1630− intel_update_fbc(crtc, &crtc->mode);
1631−
1632− intel_wait_for_vblank(dev, pipe);
16331588
16341589 if (old_fb) {
16351590 intel_fb = to_intel_framebuffer(old_fb);
16361591 obj_priv = to_intel_bo(intel_fb->obj);
16371592 i915_gem_object_unpin(intel_fb->obj);
16381593 }
1639− intel_increase_pllclock(crtc, true);
16401594
16411595 mutex_unlock(&dev->struct_mutex);
16421596
@@ -1911,9 +1865,6 @@ static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode) · 268 unmodified lines
19111865 int fdi_tx_reg = (pipe == 0) ? FDI_TXA_CTL : FDI_TXB_CTL;
19121866 int fdi_rx_reg = (pipe == 0) ? FDI_RXA_CTL : FDI_RXB_CTL;
19131867 int transconf_reg = (pipe == 0) ? TRANSACONF : TRANSBCONF;
1914− int pf_ctl_reg = (pipe == 0) ? PFA_CTL_1 : PFB_CTL_1;
1915− int pf_win_size = (pipe == 0) ? PFA_WIN_SZ : PFB_WIN_SZ;
1916− int pf_win_pos = (pipe == 0) ? PFA_WIN_POS : PFB_WIN_POS;
19171868 int cpu_htot_reg = (pipe == 0) ? HTOTAL_A : HTOTAL_B;
19181869 int cpu_hblank_reg = (pipe == 0) ? HBLANK_A : HBLANK_B;
19191870 int cpu_hsync_reg = (pipe == 0) ? HSYNC_A : HSYNC_B;
@@ -1982,15 +1933,19 @@ static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode) · 62 unmodified lines
19821933 }
19831934
19841935 /* Enable panel fitting for LVDS */
1985− if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)
1986− || HAS_eDP || intel_pch_has_edp(crtc)) {
1987− if (dev_priv->pch_pf_size) {
1988− temp = I915_READ(pf_ctl_reg);
1989− I915_WRITE(pf_ctl_reg, temp | PF_ENABLE | PF_FILTER_MED_3x3);
1990− I915_WRITE(pf_win_pos, dev_priv->pch_pf_pos);
1991− I915_WRITE(pf_win_size, dev_priv->pch_pf_size);
1992− } else
1993− I915_WRITE(pf_ctl_reg, temp & ~PF_ENABLE);
1936+ if (dev_priv->pch_pf_size &&
1937+ (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)
1938+ || HAS_eDP || intel_pch_has_edp(crtc))) {
1939+ /* Force use of hard-coded filter coefficients
1940+ * as some pre-programmed values are broken,
1941+ * e.g. x201.
1942+ */
1943+ I915_WRITE(pipe ? PFB_CTL_1 : PFA_CTL_1,
1944+ PF_ENABLE | PF_FILTER_MED_3x3);
1945+ I915_WRITE(pipe ? PFB_WIN_POS : PFA_WIN_POS,
1946+ dev_priv->pch_pf_pos);
1947+ I915_WRITE(pipe ? PFB_WIN_SZ : PFA_WIN_SZ,
1948+ dev_priv->pch_pf_size);
19941949 }
19951950
19961951 /* Enable CPU pipe */
@@ -2115,7 +2070,7 @@ static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode) · 118 unmodified lines
21152070 I915_WRITE(transconf_reg, temp | TRANS_ENABLE);
21162071 I915_READ(transconf_reg);
21172072
2118− if (wait_for(I915_READ(transconf_reg) & TRANS_STATE_ENABLE, 10, 0))
2073+ if (wait_for(I915_READ(transconf_reg) & TRANS_STATE_ENABLE, 100, 1))
21192074 DRM_ERROR("failed to enable transcoder\n");
21202075 }
21212076
@@ -2155,14 +2110,8 @@ static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode) · 33 unmodified lines
21552110 udelay(100);
21562111
21572112 /* Disable PF */
2158− temp = I915_READ(pf_ctl_reg);
2159− if ((temp & PF_ENABLE) != 0) {
2160− I915_WRITE(pf_ctl_reg, temp & ~PF_ENABLE);
2161− I915_READ(pf_ctl_reg);
2162− }
2163− I915_WRITE(pf_win_size, 0);
2164− POSTING_READ(pf_win_size);
2165−
2113+ I915_WRITE(pipe ? PFB_CTL_1 : PFA_CTL_1, 0);
2114+ I915_WRITE(pipe ? PFB_WIN_SZ : PFA_WIN_SZ, 0);
21662115
21672116 /* disable CPU FDI tx and PCH FDI rx */
21682117 temp = I915_READ(fdi_tx_reg);
@@ -2421,6 +2370,9 @@ static void intel_crtc_dpms(struct drm_crtc *crtc, int mode) · 252 unmodified lines
24212370 int pipe = intel_crtc->pipe;
24222371 bool enabled;
24232372
2373+ if (intel_crtc->dpms_mode == mode)
2374+ return;
2375+
24242376 intel_crtc->dpms_mode = mode;
24252377 intel_crtc->cursor_on = mode == DRM_MODE_DPMS_ON;
24262378
@@ -2815,14 +2767,8 @@ static unsigned long intel_calculate_wm(unsigned long clock_in_khz, · 388 unmodified lines
28152767 /* Don't promote wm_size to unsigned... */
28162768 if (wm_size > (long)wm->max_wm)
28172769 wm_size = wm->max_wm;
2818− if (wm_size <= 0) {
2770+ if (wm_size <= 0)
28192771 wm_size = wm->default_wm;
2820− DRM_ERROR("Insufficient FIFO for plane, expect flickering:"
2821− " entries required = %ld, available = %lu.\n",
2822− entries_required + wm->guard_size,
2823− wm->fifo_size);
2824− }
2825−
28262772 return wm_size;
28272773 }
28282774
@@ -3436,8 +3382,7 @@ static void ironlake_update_wm(struct drm_device *dev, int planea_clock, · 607 unmodified lines
34363382 reg_value = I915_READ(WM1_LP_ILK);
34373383 reg_value &= ~(WM1_LP_LATENCY_MASK | WM1_LP_SR_MASK |
34383384 WM1_LP_CURSOR_MASK);
3439− reg_value |= WM1_LP_SR_EN |
3440− (ilk_sr_latency << WM1_LP_LATENCY_SHIFT) |
3385+ reg_value |= (ilk_sr_latency << WM1_LP_LATENCY_SHIFT) |
34413386 (sr_wm << WM1_LP_SR_SHIFT) | cursor_wm;
34423387
34433388 I915_WRITE(WM1_LP_ILK, reg_value);
@@ -3554,10 +3499,9 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 110 unmodified lines
35543499 u32 dpll = 0, fp = 0, fp2 = 0, dspcntr, pipeconf;
35553500 bool ok, has_reduced_clock = false, is_sdvo = false, is_dvo = false;
35563501 bool is_crt = false, is_lvds = false, is_tv = false, is_dp = false;
3557− bool is_edp = false;
3502+ struct intel_encoder *has_edp_encoder = NULL;
35583503 struct drm_mode_config *mode_config = &dev->mode_config;
35593504 struct drm_encoder *encoder;
3560− struct intel_encoder *intel_encoder = NULL;
35613505 const intel_limit_t *limit;
35623506 int ret;
35633507 struct fdi_m_n m_n = {0};
@@ -3578,12 +3522,12 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 14 unmodified lines
35783522 drm_vblank_pre_modeset(dev, pipe);
35793523
35803524 list_for_each_entry(encoder, &mode_config->encoder_list, head) {
3525+ struct intel_encoder *intel_encoder;
35813526
3582− if (!encoder || encoder->crtc != crtc)
3527+ if (encoder->crtc != crtc)
35833528 continue;
35843529
35853530 intel_encoder = enc_to_intel_encoder(encoder);
3586−
35873531 switch (intel_encoder->type) {
35883532 case INTEL_OUTPUT_LVDS:
35893533 is_lvds = true;
@@ -3607,7 +3551,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 17 unmodified lines
36073551 is_dp = true;
36083552 break;
36093553 case INTEL_OUTPUT_EDP:
3610− is_edp = true;
3554+ has_edp_encoder = intel_encoder;
36113555 break;
36123556 }
36133557
@@ -3685,10 +3629,10 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 71 unmodified lines
36853629 int lane = 0, link_bw, bpp;
36863630 /* eDP doesn't require FDI link, so just set DP M/N
36873631 according to current link config */
3688− if (is_edp) {
3632+ if (has_edp_encoder) {
36893633 target_clock = mode->clock;
3690− intel_edp_link_config(intel_encoder,
3691− &lane, &link_bw);
3634+ intel_edp_link_config(has_edp_encoder,
3635+ &lane, &link_bw);
36923636 } else {
36933637 /* DP over FDI requires target mode clock
36943638 instead of link clock */
@@ -3709,7 +3653,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 14 unmodified lines
37093653 temp |= PIPE_8BPC;
37103654 else
37113655 temp |= PIPE_6BPC;
3712− } else if (is_edp || (is_dp && intel_pch_has_edp(crtc))) {
3656+ } else if (has_edp_encoder || (is_dp && intel_pch_has_edp(crtc))) {
37133657 switch (dev_priv->edp_bpp/3) {
37143658 case 8:
37153659 temp |= PIPE_8BPC;
@@ -3782,7 +3726,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 66 unmodified lines
37823726
37833727 udelay(200);
37843728
3785− if (is_edp) {
3729+ if (has_edp_encoder) {
37863730 if (dev_priv->lvds_use_ssc) {
37873731 temp |= DREF_SSC1_ENABLE;
37883732 I915_WRITE(PCH_DREF_CONTROL, temp);
@@ -3931,7 +3875,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 142 unmodified lines
39313875 dpll_reg = pch_dpll_reg;
39323876 }
39333877
3934− if (!is_edp) {
3878+ if (!has_edp_encoder) {
39353879 I915_WRITE(fp_reg, fp);
39363880 I915_WRITE(dpll_reg, dpll & ~DPLL_VCO_ENABLE);
39373881 I915_READ(dpll_reg);
@@ -4026,7 +3970,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 88 unmodified lines
40263970 }
40273971 }
40283972
4029− if (!is_edp) {
3973+ if (!has_edp_encoder) {
40303974 I915_WRITE(fp_reg, fp);
40313975 I915_WRITE(dpll_reg, dpll);
40323976 I915_READ(dpll_reg);
@@ -4105,7 +4049,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, · 72 unmodified lines
41054049 I915_WRITE(link_m1_reg, m_n.link_m);
41064050 I915_WRITE(link_n1_reg, m_n.link_n);
41074051
4108− if (is_edp) {
4052+ if (has_edp_encoder) {
41094053 ironlake_set_pll_edp(crtc, adjusted_mode->clock);
41104054 } else {
41114055 /* enable FDI RX PLL too */
@@ -4911,15 +4855,6 @@ static void intel_crtc_destroy(struct drm_crtc *crtc) · 799 unmodified lines
49114855 kfree(intel_crtc);
49124856 }
49134857
4914−struct intel_unpin_work {
4915− struct work_struct work;
4916− struct drm_device *dev;
4917− struct drm_gem_object *old_fb_obj;
4918− struct drm_gem_object *pending_flip_obj;
4919− struct drm_pending_vblank_event *event;
4920− int pending;
4921−};
4922−
49234858 static void intel_unpin_work_fn(struct work_struct *__work)
49244859 {
49254860 struct intel_unpin_work *work =
@@ -5007,7 +4942,8 @@ void intel_prepare_page_flip(struct drm_device *dev, int plane) · 81 unmodified lines
50074942
50084943 spin_lock_irqsave(&dev->event_lock, flags);
50094944 if (intel_crtc->unpin_work) {
5010− intel_crtc->unpin_work->pending = 1;
4945+ if ((++intel_crtc->unpin_work->pending) > 1)
4946+ DRM_ERROR("Prepared flip multiple times\n");
50114947 } else {
50124948 DRM_DEBUG_DRIVER("preparing flip with no unpin work?\n");
50134949 }
@@ -5026,9 +4962,9 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, · 12 unmodified lines
50264962 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
50274963 struct intel_unpin_work *work;
50284964 unsigned long flags, offset;
5029− int pipesrc_reg = (intel_crtc->pipe == 0) ? PIPEASRC : PIPEBSRC;
5030− int ret, pipesrc;
5031− u32 flip_mask;
4965+ int pipe = intel_crtc->pipe;
4966+ u32 pf, pipesrc;
4967+ int ret;
50324968
50334969 work = kzalloc(sizeof *work, GFP_KERNEL);
50344970 if (work == NULL)
@@ -5077,42 +5013,73 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, · 42 unmodified lines
50775013 atomic_inc(&obj_priv->pending_flip);
50785014 work->pending_flip_obj = obj;
50795015
5080− if (intel_crtc->plane)
5081− flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
5082− else
5083− flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
5084−
50855016 if (IS_GEN3(dev) || IS_GEN2(dev)) {
5017+ u32 flip_mask;
5018+
5019+ if (intel_crtc->plane)
5020+ flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
5021+ else
5022+ flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
5023+
50865024 BEGIN_LP_RING(2);
50875025 OUT_RING(MI_WAIT_FOR_EVENT | flip_mask);
50885026 OUT_RING(0);
50895027 ADVANCE_LP_RING();
50905028 }
50915029
5030+ work->enable_stall_check = true;
5031+
50925032 /* Offset into the new buffer for cases of shared fbs between CRTCs */
5093− offset = obj_priv->gtt_offset;
5094− offset += (crtc->y * fb->pitch) + (crtc->x * (fb->bits_per_pixel) / 8);
5033+ offset = crtc->y * fb->pitch + crtc->x * fb->bits_per_pixel/8;
50955034
50965035 BEGIN_LP_RING(4);
5097− if (IS_I965G(dev)) {
5036+ switch(INTEL_INFO(dev)->gen) {
5037+ case 2:
50985038 OUT_RING(MI_DISPLAY_FLIP |
50995039 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
51005040 OUT_RING(fb->pitch);
5101− OUT_RING(offset | obj_priv->tiling_mode);
5102− pipesrc = I915_READ(pipesrc_reg);
5103− OUT_RING(pipesrc & 0x0fff0fff);
5104− } else if (IS_GEN3(dev)) {
5041+ OUT_RING(obj_priv->gtt_offset + offset);
5042+ OUT_RING(MI_NOOP);
5043+ break;
5044+
5045+ case 3:
51055046 OUT_RING(MI_DISPLAY_FLIP_I915 |
51065047 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
51075048 OUT_RING(fb->pitch);
5108− OUT_RING(offset);
5049+ OUT_RING(obj_priv->gtt_offset + offset);
51095050 OUT_RING(MI_NOOP);
5110− } else {
5051+ break;
5052+
5053+ case 4:
5054+ case 5:
5055+ /* i965+ uses the linear or tiled offsets from the
5056+ * Display Registers (which do not change across a page-flip)
5057+ * so we need only reprogram the base address.
5058+ */
51115059 OUT_RING(MI_DISPLAY_FLIP |
51125060 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
51135061 OUT_RING(fb->pitch);
5114− OUT_RING(offset);
5115− OUT_RING(MI_NOOP);
5062+ OUT_RING(obj_priv->gtt_offset | obj_priv->tiling_mode);
5063+
5064+ /* XXX Enabling the panel-fitter across page-flip is so far
5065+ * untested on non-native modes, so ignore it for now.
5066+ * pf = I915_READ(pipe == 0 ? PFA_CTL_1 : PFB_CTL_1) & PF_ENABLE;
5067+ */
5068+ pf = 0;
5069+ pipesrc = I915_READ(pipe == 0 ? PIPEASRC : PIPEBSRC) & 0x0fff0fff;
5070+ OUT_RING(pf | pipesrc);
5071+ break;
5072+
5073+ case 6:
5074+ OUT_RING(MI_DISPLAY_FLIP |
5075+ MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
5076+ OUT_RING(fb->pitch | obj_priv->tiling_mode);
5077+ OUT_RING(obj_priv->gtt_offset);
5078+
5079+ pf = I915_READ(pipe == 0 ? PFA_CTL_1 : PFB_CTL_1) & PF_ENABLE;
5080+ pipesrc = I915_READ(pipe == 0 ? PIPEASRC : PIPEBSRC) & 0x0fff0fff;
5081+ OUT_RING(pf | pipesrc);
5082+ break;
51165083 }
51175084 ADVANCE_LP_RING();
51185085
@@ -5193,7 +5160,7 @@ static void intel_crtc_init(struct drm_device *dev, int pipe) · 74 unmodified lines
51935160 dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = &intel_crtc->base;
51945161
51955162 intel_crtc->cursor_addr = 0;
5196− intel_crtc->dpms_mode = DRM_MODE_DPMS_OFF;
5163+ intel_crtc->dpms_mode = -1;
51975164 drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
51985165
51995166 intel_crtc->busy = false;
@@ -5701,6 +5668,9 @@ void intel_init_clock_gating(struct drm_device *dev) · 501 unmodified lines
57015668 I915_WRITE(DISP_ARB_CTL,
57025669 (I915_READ(DISP_ARB_CTL) |
57035670 DISP_FBC_WM_DIS));
5671+ I915_WRITE(WM3_LP_ILK, 0);
5672+ I915_WRITE(WM2_LP_ILK, 0);
5673+ I915_WRITE(WM1_LP_ILK, 0);
57045674 }
57055675 /*
57065676 * Based on the document from hardware guys the following bits
@@ -5722,8 +5692,7 @@ void intel_init_clock_gating(struct drm_device *dev) · 15 unmodified lines
57225692 ILK_DPFC_DIS2 |
57235693 ILK_CLK_FBC);
57245694 }
5725− if (IS_GEN6(dev))
5726− return;
5695+ return;
57275696 } else if (IS_G4X(dev)) {
57285697 uint32_t dspclk_gate;
57295698 I915_WRITE(RENCLK_GATE_D1, 0);
@@ -5784,11 +5753,9 @@ void intel_init_clock_gating(struct drm_device *dev) · 54 unmodified lines
57845753 OUT_RING(MI_FLUSH);
57855754 ADVANCE_LP_RING();
57865755 }
5787− } else {
5756+ } else
57885757 DRM_DEBUG_KMS("Failed to allocate render context."
5789− "Disable RC6\n");
5790− return;
5791− }
5758+ "Disable RC6\n");
57925759 }
57935760
57945761 if (I915_HAS_RC6(dev) && drm_core_check_feature(dev, DRIVER_MODESET)) {
drivers/gpu/drm/i915/intel_dp.c+28−30
@@ -239,7 +239,6 @@ intel_dp_aux_ch(struct intel_dp *intel_dp, · 238 unmodified lines
239239 uint32_t ch_data = ch_ctl + 4;
240240 int i;
241241 int recv_bytes;
242− uint32_t ctl;
243242 uint32_t status;
244243 uint32_t aux_clock_divider;
245244 int try, precharge;
@@ -263,41 +262,43 @@ intel_dp_aux_ch(struct intel_dp *intel_dp, · 17 unmodified lines
263262 else
264263 precharge = 5;
265264
265+ if (I915_READ(ch_ctl) & DP_AUX_CH_CTL_SEND_BUSY) {
266+ DRM_ERROR("dp_aux_ch not started status 0x%08x\n",
267+ I915_READ(ch_ctl));
268+ return -EBUSY;
269+ }
270+
266271 /* Must try at least 3 times according to DP spec */
267272 for (try = 0; try < 5; try++) {
268273 /* Load the send data into the aux channel data registers */
269− for (i = 0; i < send_bytes; i += 4) {
270− uint32_t d = pack_aux(send + i, send_bytes - i);
271−
272− I915_WRITE(ch_data + i, d);
273− }
274−
275− ctl = (DP_AUX_CH_CTL_SEND_BUSY |
276− DP_AUX_CH_CTL_TIME_OUT_400us |
277− (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
278− (precharge << DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
279− (aux_clock_divider << DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT) |
280− DP_AUX_CH_CTL_DONE |
281− DP_AUX_CH_CTL_TIME_OUT_ERROR |
282− DP_AUX_CH_CTL_RECEIVE_ERROR);
274+ for (i = 0; i < send_bytes; i += 4)
275+ I915_WRITE(ch_data + i,
276+ pack_aux(send + i, send_bytes - i));
283277
284278 /* Send the command and wait for it to complete */
285− I915_WRITE(ch_ctl, ctl);
286− (void) I915_READ(ch_ctl);
279+ I915_WRITE(ch_ctl,
280+ DP_AUX_CH_CTL_SEND_BUSY |
281+ DP_AUX_CH_CTL_TIME_OUT_400us |
282+ (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
283+ (precharge << DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
284+ (aux_clock_divider << DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT) |
285+ DP_AUX_CH_CTL_DONE |
286+ DP_AUX_CH_CTL_TIME_OUT_ERROR |
287+ DP_AUX_CH_CTL_RECEIVE_ERROR);
287288 for (;;) {
288− udelay(100);
289289 status = I915_READ(ch_ctl);
290290 if ((status & DP_AUX_CH_CTL_SEND_BUSY) == 0)
291291 break;
292+ udelay(100);
292293 }
293294
294295 /* Clear done status and any errors */
295− I915_WRITE(ch_ctl, (status |
296− DP_AUX_CH_CTL_DONE |
297− DP_AUX_CH_CTL_TIME_OUT_ERROR |
298− DP_AUX_CH_CTL_RECEIVE_ERROR));
299− (void) I915_READ(ch_ctl);
300− if ((status & DP_AUX_CH_CTL_TIME_OUT_ERROR) == 0)
296+ I915_WRITE(ch_ctl,
297+ status |
298+ DP_AUX_CH_CTL_DONE |
299+ DP_AUX_CH_CTL_TIME_OUT_ERROR |
300+ DP_AUX_CH_CTL_RECEIVE_ERROR);
301+ if (status & DP_AUX_CH_CTL_DONE)
301302 break;
302303 }
303304
@@ -324,15 +325,12 @@ intel_dp_aux_ch(struct intel_dp *intel_dp, · 20 unmodified lines
324325 /* Unload any bytes sent back from the other side */
325326 recv_bytes = ((status & DP_AUX_CH_CTL_MESSAGE_SIZE_MASK) >>
326327 DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT);
327−
328328 if (recv_bytes > recv_size)
329329 recv_bytes = recv_size;
330330
331− for (i = 0; i < recv_bytes; i += 4) {
332− uint32_t d = I915_READ(ch_data + i);
333−
334− unpack_aux(d, recv + i, recv_bytes - i);
335− }
331+ for (i = 0; i < recv_bytes; i += 4)
332+ unpack_aux(I915_READ(ch_data + i),
333+ recv + i, recv_bytes - i);
336334
337335 return recv_bytes;
338336 }
drivers/gpu/drm/i915/intel_drv.h+10−0
@@ -176,6 +176,16 @@ struct intel_crtc { · 175 unmodified lines
176176 #define enc_to_intel_encoder(x) container_of(x, struct intel_encoder, enc)
177177 #define to_intel_framebuffer(x) container_of(x, struct intel_framebuffer, base)
178178
179+struct intel_unpin_work {
180+ struct work_struct work;
181+ struct drm_device *dev;
182+ struct drm_gem_object *old_fb_obj;
183+ struct drm_gem_object *pending_flip_obj;
184+ struct drm_pending_vblank_event *event;
185+ int pending;
186+ bool enable_stall_check;
187+};
188+
179189 struct i2c_adapter *intel_i2c_create(struct drm_device *dev, const u32 reg,
180190 const char *name);
181191 void intel_i2c_destroy(struct i2c_adapter *adapter);
drivers/gpu/drm/i915/intel_lvds.c+0−2
@@ -875,8 +875,6 @@ void intel_lvds_init(struct drm_device *dev) · 874 unmodified lines
875875
876876 intel_encoder->clone_mask = (1 << INTEL_LVDS_CLONE_BIT);
877877 intel_encoder->crtc_mask = (1 << 1);
878− if (IS_I965G(dev))
879− intel_encoder->crtc_mask |= (1 << 0);
880878 drm_encoder_helper_add(encoder, &intel_lvds_helper_funcs);
881879 drm_connector_helper_add(connector, &intel_lvds_connector_helper_funcs);
882880 connector->display_info.subpixel_order = SubPixelHorizontalRGB;
drivers/gpu/drm/i915/intel_overlay.c+2−0
@@ -25,6 +25,8 @@ · 24 unmodified lines
2525 *
2626 * Derived from Xorg ddx, xf86-video-intel, src/i830_video.c
2727 */
28+
29+#include <linux/seq_file.h>
2830 #include "drmP.h"
2931 #include "drm.h"
3032 #include "i915_drm.h"
drivers/gpu/drm/i915/intel_ringbuffer.c+6−2
@@ -220,9 +220,13 @@ static int init_render_ring(struct drm_device *dev, · 219 unmodified lines
220220 {
221221 drm_i915_private_t *dev_priv = dev->dev_private;
222222 int ret = init_ring_common(dev, ring);
223+ int mode;
224+
223225 if (IS_I9XX(dev) && !IS_GEN3(dev)) {
224− I915_WRITE(MI_MODE,
225− (VS_TIMER_DISPATCH) << 16 | VS_TIMER_DISPATCH);
226+ mode = VS_TIMER_DISPATCH << 16 | VS_TIMER_DISPATCH;
227+ if (IS_GEN6(dev))
228+ mode |= MI_FLUSH_ENABLE << 16 | MI_FLUSH_ENABLE;
229+ I915_WRITE(MI_MODE, mode);
226230 }
227231 return ret;
228232 }
drivers/gpu/drm/i915/intel_sdvo.c+52−17
@@ -1061,8 +1061,9 @@ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder, · 1060 unmodified lines
10611061 if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, mode))
10621062 return false;
10631063
1064− if (!intel_sdvo_set_input_timings_for_mode(intel_sdvo, mode, adjusted_mode))
1065− return false;
1064+ (void) intel_sdvo_set_input_timings_for_mode(intel_sdvo,
1065+ mode,
1066+ adjusted_mode);
10661067 } else if (intel_sdvo->is_lvds) {
10671068 drm_mode_set_crtcinfo(intel_sdvo->sdvo_lvds_fixed_mode, 0);
10681069
@@ -1070,8 +1071,9 @@ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder, · 1 unmodified line
10701071 intel_sdvo->sdvo_lvds_fixed_mode))
10711072 return false;
10721073
1073− if (!intel_sdvo_set_input_timings_for_mode(intel_sdvo, mode, adjusted_mode))
1074− return false;
1074+ (void) intel_sdvo_set_input_timings_for_mode(intel_sdvo,
1075+ mode,
1076+ adjusted_mode);
10751077 }
10761078
10771079 /* Make the CRTC code factor in the SDVO pixel multiplier. The
@@ -1108,10 +1110,9 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder, · 30 unmodified lines
11081110 in_out.in0 = intel_sdvo->attached_output;
11091111 in_out.in1 = 0;
11101112
1111− if (!intel_sdvo_set_value(intel_sdvo,
1112− SDVO_CMD_SET_IN_OUT_MAP,
1113− &in_out, sizeof(in_out)))
1114− return;
1113+ intel_sdvo_set_value(intel_sdvo,
1114+ SDVO_CMD_SET_IN_OUT_MAP,
1115+ &in_out, sizeof(in_out));
11151116
11161117 if (intel_sdvo->is_hdmi) {
11171118 if (!intel_sdvo_set_avi_infoframe(intel_sdvo, mode))
@@ -1122,11 +1123,9 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder, · 4 unmodified lines
11221123
11231124 /* We have tried to get input timing in mode_fixup, and filled into
11241125 adjusted_mode */
1125− if (intel_sdvo->is_tv || intel_sdvo->is_lvds) {
1126− intel_sdvo_get_dtd_from_mode(&input_dtd, adjusted_mode);
1126+ intel_sdvo_get_dtd_from_mode(&input_dtd, adjusted_mode);
1127+ if (intel_sdvo->is_tv || intel_sdvo->is_lvds)
11271128 input_dtd.part2.sdvo_flags = intel_sdvo->sdvo_flags;
1128− } else
1129− intel_sdvo_get_dtd_from_mode(&input_dtd, mode);
11301129
11311130 /* If it's a TV, we already set the output timing in mode_fixup.
11321131 * Otherwise, the output timing is equal to the input timing.
@@ -1137,8 +1136,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder, · 4 unmodified lines
11371136 intel_sdvo->attached_output))
11381137 return;
11391138
1140− if (!intel_sdvo_set_output_timing(intel_sdvo, &input_dtd))
1141− return;
1139+ (void) intel_sdvo_set_output_timing(intel_sdvo, &input_dtd);
11421140 }
11431141
11441142 /* Set the input timing to the screen. Assume always input 0. */
@@ -1165,8 +1163,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder, · 20 unmodified lines
11651163 intel_sdvo_set_input_timing(encoder, &input_dtd);
11661164 }
11671165 #else
1168− if (!intel_sdvo_set_input_timing(intel_sdvo, &input_dtd))
1169− return;
1166+ (void) intel_sdvo_set_input_timing(intel_sdvo, &input_dtd);
11701167 #endif
11711168
11721169 sdvo_pixel_multiply = intel_sdvo_get_pixel_multiplier(mode);
@@ -1932,6 +1929,41 @@ static const struct drm_encoder_funcs intel_sdvo_enc_funcs = { · 759 unmodified lines
19321929 .destroy = intel_sdvo_enc_destroy,
19331930 };
19341931
1932+static void
1933+intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
1934+{
1935+ uint16_t mask = 0;
1936+ unsigned int num_bits;
1937+
1938+ /* Make a mask of outputs less than or equal to our own priority in the
1939+ * list.
1940+ */
1941+ switch (sdvo->controlled_output) {
1942+ case SDVO_OUTPUT_LVDS1:
1943+ mask |= SDVO_OUTPUT_LVDS1;
1944+ case SDVO_OUTPUT_LVDS0:
1945+ mask |= SDVO_OUTPUT_LVDS0;
1946+ case SDVO_OUTPUT_TMDS1:
1947+ mask |= SDVO_OUTPUT_TMDS1;
1948+ case SDVO_OUTPUT_TMDS0:
1949+ mask |= SDVO_OUTPUT_TMDS0;
1950+ case SDVO_OUTPUT_RGB1:
1951+ mask |= SDVO_OUTPUT_RGB1;
1952+ case SDVO_OUTPUT_RGB0:
1953+ mask |= SDVO_OUTPUT_RGB0;
1954+ break;
1955+ }
1956+
1957+ /* Count bits to find what number we are in the priority list. */
1958+ mask &= sdvo->caps.output_flags;
1959+ num_bits = hweight16(mask);
1960+ /* If more than 3 outputs, default to DDC bus 3 for now. */
1961+ if (num_bits > 3)
1962+ num_bits = 3;
1963+
1964+ /* Corresponds to SDVO_CONTROL_BUS_DDCx */
1965+ sdvo->ddc_bus = 1 << num_bits;
1966+}
19351967
19361968 /**
19371969 * Choose the appropriate DDC bus for control bus switch command for this
@@ -1951,7 +1983,10 @@ intel_sdvo_select_ddc_bus(struct drm_i915_private *dev_priv, · 13 unmodified lines
19511983 else
19521984 mapping = &(dev_priv->sdvo_mappings[1]);
19531985
1954− sdvo->ddc_bus = 1 << ((mapping->ddc_pin & 0xf0) >> 4);
1986+ if (mapping->initialized)
1987+ sdvo->ddc_bus = 1 << ((mapping->ddc_pin & 0xf0) >> 4);
1988+ else
1989+ intel_sdvo_guess_ddc_bus(sdvo);
19551990 }
19561991
19571992 static bool
drivers/gpu/drm/i915/intel_tv.c+6−3
@@ -1231,7 +1231,6 @@ intel_tv_detect_type (struct intel_tv *intel_tv) · 1230 unmodified lines
12311231 struct drm_encoder *encoder = &intel_tv->base.enc;
12321232 struct drm_device *dev = encoder->dev;
12331233 struct drm_i915_private *dev_priv = dev->dev_private;
1234− struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
12351234 unsigned long irqflags;
12361235 u32 tv_ctl, save_tv_ctl;
12371236 u32 tv_dac, save_tv_dac;
@@ -1268,11 +1267,15 @@ intel_tv_detect_type (struct intel_tv *intel_tv) · 30 unmodified lines
12681267 DAC_C_0_7_V);
12691268 I915_WRITE(TV_CTL, tv_ctl);
12701269 I915_WRITE(TV_DAC, tv_dac);
1271− intel_wait_for_vblank(dev, intel_crtc->pipe);
1270+ POSTING_READ(TV_DAC);
1271+ msleep(20);
1272+
12721273 tv_dac = I915_READ(TV_DAC);
12731274 I915_WRITE(TV_DAC, save_tv_dac);
12741275 I915_WRITE(TV_CTL, save_tv_ctl);
1275− intel_wait_for_vblank(dev, intel_crtc->pipe);
1276+ POSTING_READ(TV_CTL);
1277+ msleep(20);
1278+
12761279 /*
12771280 * A B C
12781281 * 0 1 1 Composite
drivers/gpu/drm/nouveau/nouveau_bios.c+15−49
@@ -3869,27 +3869,10 @@ static int call_lvds_manufacturer_script(struct drm_device *dev, struct dcb_entr · 3868 unmodified lines
38693869 }
38703870 #ifdef __powerpc__
38713871 /* Powerbook specific quirks */
3872− if ((dev->pci_device & 0xffff) == 0x0179 ||
3873− (dev->pci_device & 0xffff) == 0x0189 ||
3874− (dev->pci_device & 0xffff) == 0x0329) {
3875− if (script == LVDS_RESET) {
3876− nv_write_tmds(dev, dcbent->or, 0, 0x02, 0x72);
3877−
3878− } else if (script == LVDS_PANEL_ON) {
3879− bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL,
3880− bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL)
3881− | (1 << 31));
3882− bios_wr32(bios, NV_PCRTC_GPIO_EXT,
3883− bios_rd32(bios, NV_PCRTC_GPIO_EXT) | 1);
3884−
3885− } else if (script == LVDS_PANEL_OFF) {
3886− bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL,
3887− bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL)
3888− & ~(1 << 31));
3889− bios_wr32(bios, NV_PCRTC_GPIO_EXT,
3890− bios_rd32(bios, NV_PCRTC_GPIO_EXT) & ~3);
3891− }
3892− }
3872+ if (script == LVDS_RESET &&
3873+ (dev->pci_device == 0x0179 || dev->pci_device == 0x0189 ||
3874+ dev->pci_device == 0x0329))
3875+ nv_write_tmds(dev, dcbent->or, 0, 0x02, 0x72);
38933876 #endif
38943877
38953878 return 0;
@@ -4381,11 +4364,8 @@ int nouveau_bios_parse_lvds_table(struct drm_device *dev, int pxclk, bool *dl, b · 485 unmodified lines
43814364 *
43824365 * For the moment, a quirk will do :)
43834366 */
4384− if ((dev->pdev->device == 0x01d7) &&
4385− (dev->pdev->subsystem_vendor == 0x1028) &&
4386− (dev->pdev->subsystem_device == 0x01c2)) {
4367+ if (nv_match_device(dev, 0x01d7, 0x1028, 0x01c2))
43874368 bios->fp.duallink_transition_clk = 80000;
4388− }
43894369
43904370 /* set dual_link flag for EDID case */
43914371 if (pxclk && (chip_version < 0x25 || chip_version > 0x28))
@@ -5814,9 +5794,7 @@ parse_dcb_gpio_table(struct nvbios *bios) · 1422 unmodified lines
58145794 */
58155795
58165796 /* Apple iMac G4 NV18 */
5817− if (dev->pdev->device == 0x0189 &&
5818− dev->pdev->subsystem_vendor == 0x10de &&
5819− dev->pdev->subsystem_device == 0x0010) {
5797+ if (nv_match_device(dev, 0x0189, 0x10de, 0x0010)) {
58205798 struct dcb_gpio_entry *gpio = new_gpio_entry(bios);
58215799
58225800 gpio->tag = DCB_GPIO_TVDAC0;
@@ -5898,9 +5876,7 @@ apply_dcb_connector_quirks(struct nvbios *bios, int idx) · 75 unmodified lines
58985876 struct drm_device *dev = bios->dev;
58995877
59005878 /* Gigabyte NX85T */
5901− if ((dev->pdev->device == 0x0421) &&
5902− (dev->pdev->subsystem_vendor == 0x1458) &&
5903− (dev->pdev->subsystem_device == 0x344c)) {
5879+ if (nv_match_device(dev, 0x0421, 0x1458, 0x344c)) {
59045880 if (cte->type == DCB_CONNECTOR_HDMI_1)
59055881 cte->type = DCB_CONNECTOR_DVI_I;
59065882 }
@@ -6153,7 +6129,7 @@ parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb, · 246 unmodified lines
61536129 entry->tmdsconf.slave_addr = (conf & 0x00000070) >> 4;
61546130
61556131 break;
6156− case 0xe:
6132+ case OUTPUT_EOL:
61576133 /* weird g80 mobile type that "nv" treats as a terminator */
61586134 dcb->entries--;
61596135 return false;
@@ -6190,22 +6166,14 @@ parse_dcb15_entry(struct drm_device *dev, struct dcb_table *dcb, · 30 unmodified lines
61906166 entry->type = OUTPUT_TV;
61916167 break;
61926168 case 2:
6193− case 3:
6194− entry->type = OUTPUT_LVDS;
6195− break;
61966169 case 4:
6197− switch ((conn & 0x000000f0) >> 4) {
6198− case 0:
6199− entry->type = OUTPUT_TMDS;
6200− break;
6201− case 1:
6170+ if (conn & 0x10)
62026171 entry->type = OUTPUT_LVDS;
6203− break;
6204− default:
6205− NV_ERROR(dev, "Unknown DCB subtype 4/%d\n",
6206− (conn & 0x000000f0) >> 4);
6207− return false;
6208− }
6172+ else
6173+ entry->type = OUTPUT_TMDS;
6174+ break;
6175+ case 3:
6176+ entry->type = OUTPUT_LVDS;
62096177 break;
62106178 default:
62116179 NV_ERROR(dev, "Unknown DCB type %d\n", conn & 0x0000000f);
@@ -6321,9 +6289,7 @@ apply_dcb_encoder_quirks(struct drm_device *dev, int idx, u32 *conn, u32 *conf) · 109 unmodified lines
63216289 * nasty problems until this is sorted (assuming it's not a
63226290 * VBIOS bug).
63236291 */
6324− if ((dev->pdev->device == 0x040d) &&
6325− (dev->pdev->subsystem_vendor == 0x1028) &&
6326− (dev->pdev->subsystem_device == 0x019b)) {
6292+ if (nv_match_device(dev, 0x040d, 0x1028, 0x019b)) {
63276293 if (*conn == 0x02026312 && *conf == 0x00000020)
63286294 return false;
63296295 }
drivers/gpu/drm/nouveau/nouveau_bios.h+1−0
@@ -95,6 +95,7 @@ enum dcb_type { · 94 unmodified lines
9595 OUTPUT_TMDS = 2,
9696 OUTPUT_LVDS = 3,
9797 OUTPUT_DP = 6,
98+ OUTPUT_EOL = 14, /* DCB 4.0+, appears to be end-of-list */
9899 OUTPUT_ANY = -1
99100 };
100101
drivers/gpu/drm/nouveau/nouveau_drv.h+9−0
@@ -1389,6 +1389,15 @@ nv_two_reg_pll(struct drm_device *dev) · 1388 unmodified lines
13891389 return false;
13901390 }
13911391
1392+static inline bool
1393+nv_match_device(struct drm_device *dev, unsigned device,
1394+ unsigned sub_vendor, unsigned sub_device)
1395+{
1396+ return dev->pdev->device == device &&
1397+ dev->pdev->subsystem_vendor == sub_vendor &&
1398+ dev->pdev->subsystem_device == sub_device;
1399+}
1400+
13921401 #define NV_SW 0x0000506e
13931402 #define NV_SW_DMA_SEMAPHORE 0x00000060
13941403 #define NV_SW_SEMAPHORE_OFFSET 0x00000064
drivers/gpu/drm/nouveau/nouveau_fence.c+4−2
@@ -64,16 +64,17 @@ nouveau_fence_update(struct nouveau_channel *chan) · 63 unmodified lines
6464 struct nouveau_fence *fence;
6565 uint32_t sequence;
6666
67+ spin_lock(&chan->fence.lock);
68+
6769 if (USE_REFCNT)
6870 sequence = nvchan_rd32(chan, 0x48);
6971 else
7072 sequence = atomic_read(&chan->fence.last_sequence_irq);
7173
7274 if (chan->fence.sequence_ack == sequence)
73− return;
75+ goto out;
7476 chan->fence.sequence_ack = sequence;
7577
76− spin_lock(&chan->fence.lock);
7778 list_for_each_safe(entry, tmp, &chan->fence.pending) {
7879 fence = list_entry(entry, struct nouveau_fence, entry);
7980
@@ -85,6 +86,7 @@ nouveau_fence_update(struct nouveau_channel *chan) · 5 unmodified lines
8586 if (sequence == chan->fence.sequence_ack)
8687 break;
8788 }
89+out:
8890 spin_unlock(&chan->fence.lock);
8991 }
9092
drivers/gpu/drm/nouveau/nouveau_gem.c+6−7
@@ -245,7 +245,7 @@ validate_fini_list(struct list_head *list, struct nouveau_fence *fence) · 244 unmodified lines
245245 list_del(&nvbo->entry);
246246 nvbo->reserved_by = NULL;
247247 ttm_bo_unreserve(&nvbo->bo);
248− drm_gem_object_unreference(nvbo->gem);
248+ drm_gem_object_unreference_unlocked(nvbo->gem);
249249 }
250250 }
251251
@@ -300,7 +300,7 @@ retry: · 48 unmodified lines
300300 validate_fini(op, NULL);
301301 if (ret == -EAGAIN)
302302 ret = ttm_bo_wait_unreserved(&nvbo->bo, false);
303− drm_gem_object_unreference(gem);
303+ drm_gem_object_unreference_unlocked(gem);
304304 if (ret) {
305305 NV_ERROR(dev, "fail reserve\n");
306306 return ret;
@@ -337,7 +337,9 @@ retry: · 30 unmodified lines
337337 return -EINVAL;
338338 }
339339
340+ mutex_unlock(&drm_global_mutex);
340341 ret = ttm_bo_wait_cpu(&nvbo->bo, false);
342+ mutex_lock(&drm_global_mutex);
341343 if (ret) {
342344 NV_ERROR(dev, "fail wait_cpu\n");
343345 return ret;
@@ -614,8 +616,6 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data, · 270 unmodified lines
614616 return PTR_ERR(bo);
615617 }
616618
617− mutex_lock(&dev->struct_mutex);
618−
619619 /* Mark push buffers as being used on PFIFO, the validation code
620620 * will then make sure that if the pushbuf bo moves, that they
621621 * happen on the kernel channel, which will in turn cause a sync
@@ -663,7 +663,7 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data, · 41 unmodified lines
663663 push[i].length);
664664 }
665665 } else
666− if (dev_priv->card_type >= NV_20) {
666+ if (dev_priv->chipset >= 0x25) {
667667 ret = RING_SPACE(chan, req->nr_push * 2);
668668 if (ret) {
669669 NV_ERROR(dev, "cal_space: %d\n", ret);
@@ -729,7 +729,6 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data, · 59 unmodified lines
729729 out:
730730 validate_fini(&op, fence);
731731 nouveau_fence_unref((void**)&fence);
732− mutex_unlock(&dev->struct_mutex);
733732 kfree(bo);
734733 kfree(push);
735734
@@ -738,7 +737,7 @@ out_next: · 2 unmodified lines
738737 req->suffix0 = 0x00000000;
739738 req->suffix1 = 0x00000000;
740739 } else
741− if (dev_priv->card_type >= NV_20) {
740+ if (dev_priv->chipset >= 0x25) {
742741 req->suffix0 = 0x00020000;
743742 req->suffix1 = 0x00000000;
744743 } else {
drivers/gpu/drm/nouveau/nv04_dfp.c+28−3
@@ -444,6 +444,7 @@ static void nv04_dfp_commit(struct drm_encoder *encoder) · 443 unmodified lines
444444 struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
445445 struct dcb_entry *dcbe = nv_encoder->dcb;
446446 int head = nouveau_crtc(encoder->crtc)->index;
447+ struct drm_encoder *slave_encoder;
447448
448449 if (dcbe->type == OUTPUT_TMDS)
449450 run_tmds_table(dev, dcbe, head, nv_encoder->mode.clock);
@@ -462,9 +463,10 @@ static void nv04_dfp_commit(struct drm_encoder *encoder) · 12 unmodified lines
462463 NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + nv04_dac_output_offset(encoder), 0x00100000);
463464
464465 /* Init external transmitters */
465− if (get_tmds_slave(encoder))
466− get_slave_funcs(get_tmds_slave(encoder))->mode_set(
467− encoder, &nv_encoder->mode, &nv_encoder->mode);
466+ slave_encoder = get_tmds_slave(encoder);
467+ if (slave_encoder)
468+ get_slave_funcs(slave_encoder)->mode_set(
469+ slave_encoder, &nv_encoder->mode, &nv_encoder->mode);
468470
469471 helper->dpms(encoder, DRM_MODE_DPMS_ON);
470472
@@ -473,6 +475,27 @@ static void nv04_dfp_commit(struct drm_encoder *encoder) · 2 unmodified lines
473475 nv_crtc->index, '@' + ffs(nv_encoder->dcb->or));
474476 }
475477
478+static void nv04_dfp_update_backlight(struct drm_encoder *encoder, int mode)
479+{
480+#ifdef __powerpc__
481+ struct drm_device *dev = encoder->dev;
482+
483+ /* BIOS scripts usually take care of the backlight, thanks
484+ * Apple for your consistency.
485+ */
486+ if (dev->pci_device == 0x0179 || dev->pci_device == 0x0189 ||
487+ dev->pci_device == 0x0329) {
488+ if (mode == DRM_MODE_DPMS_ON) {
489+ nv_mask(dev, NV_PBUS_DEBUG_DUALHEAD_CTL, 0, 1 << 31);
490+ nv_mask(dev, NV_PCRTC_GPIO_EXT, 3, 1);
491+ } else {
492+ nv_mask(dev, NV_PBUS_DEBUG_DUALHEAD_CTL, 1 << 31, 0);
493+ nv_mask(dev, NV_PCRTC_GPIO_EXT, 3, 0);
494+ }
495+ }
496+#endif
497+}
498+
476499 static inline bool is_powersaving_dpms(int mode)
477500 {
478501 return (mode != DRM_MODE_DPMS_ON);
@@ -520,6 +543,7 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode) · 41 unmodified lines
520543 LVDS_PANEL_OFF, 0);
521544 }
522545
546+ nv04_dfp_update_backlight(encoder, mode);
523547 nv04_dfp_update_fp_control(encoder, mode);
524548
525549 if (mode == DRM_MODE_DPMS_ON)
@@ -543,6 +567,7 @@ static void nv04_tmds_dpms(struct drm_encoder *encoder, int mode) · 17 unmodified lines
543567 NV_INFO(dev, "Setting dpms mode %d on tmds encoder (output %d)\n",
544568 mode, nv_encoder->dcb->index);
545569
570+ nv04_dfp_update_backlight(encoder, mode);
546571 nv04_dfp_update_fp_control(encoder, mode);
547572 }
548573
drivers/gpu/drm/nouveau/nv17_tv.c+3−7
@@ -121,18 +121,14 @@ static bool · 120 unmodified lines
121121 get_tv_detect_quirks(struct drm_device *dev, uint32_t *pin_mask)
122122 {
123123 /* Zotac FX5200 */
124− if (dev->pdev->device == 0x0322 &&
125− dev->pdev->subsystem_vendor == 0x19da &&
126− (dev->pdev->subsystem_device == 0x1035 ||
127− dev->pdev->subsystem_device == 0x2035)) {
124+ if (nv_match_device(dev, 0x0322, 0x19da, 0x1035) ||
125+ nv_match_device(dev, 0x0322, 0x19da, 0x2035)) {
128126 *pin_mask = 0xc;
129127 return false;
130128 }
131129
132130 /* MSI nForce2 IGP */
133− if (dev->pdev->device == 0x01f0 &&
134− dev->pdev->subsystem_vendor == 0x1462 &&
135− dev->pdev->subsystem_device == 0x5710) {
131+ if (nv_match_device(dev, 0x01f0, 0x1462, 0x5710)) {
136132 *pin_mask = 0xc;
137133 return false;
138134 }
drivers/gpu/drm/nouveau/nv50_instmem.c+2−0
@@ -139,6 +139,8 @@ nv50_instmem_init(struct drm_device *dev) · 138 unmodified lines
139139 chan->file_priv = (struct drm_file *)-2;
140140 dev_priv->fifos[0] = dev_priv->fifos[127] = chan;
141141
142+ INIT_LIST_HEAD(&chan->ramht_refs);
143+
142144 /* Channel's PRAMIN object + heap */
143145 ret = nouveau_gpuobj_new_fake(dev, 0, c_offset, c_size, 0,
144146 NULL, &chan->ramin);
drivers/gpu/drm/radeon/atombios_crtc.c+41−7
@@ -332,6 +332,11 @@ static void atombios_crtc_set_timing(struct drm_crtc *crtc, · 331 unmodified lines
332332 args.usV_SyncWidth =
333333 cpu_to_le16(mode->crtc_vsync_end - mode->crtc_vsync_start);
334334
335+ args.ucOverscanRight = radeon_crtc->h_border;
336+ args.ucOverscanLeft = radeon_crtc->h_border;
337+ args.ucOverscanBottom = radeon_crtc->v_border;
338+ args.ucOverscanTop = radeon_crtc->v_border;
339+
335340 if (mode->flags & DRM_MODE_FLAG_NVSYNC)
336341 misc |= ATOM_VSYNC_POLARITY;
337342 if (mode->flags & DRM_MODE_FLAG_NHSYNC)
@@ -534,6 +539,20 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc, · 196 unmodified lines
534539 pll->algo = PLL_ALGO_LEGACY;
535540 pll->flags |= RADEON_PLL_PREFER_CLOSEST_LOWER;
536541 }
542+ /* There is some evidence (often anecdotal) that RV515 LVDS
543+ * (on some boards at least) prefers the legacy algo. I'm not
544+ * sure whether this should handled generically or on a
545+ * case-by-case quirk basis. Both algos should work fine in the
546+ * majority of cases.
547+ */
548+ if ((radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) &&
549+ (rdev->family == CHIP_RV515)) {
550+ /* allow the user to overrride just in case */
551+ if (radeon_new_pll == 1)
552+ pll->algo = PLL_ALGO_NEW;
553+ else
554+ pll->algo = PLL_ALGO_LEGACY;
555+ }
537556 } else {
538557 if (encoder->encoder_type != DRM_MODE_ENCODER_DAC)
539558 pll->flags |= RADEON_PLL_NO_ODD_POST_DIV;
@@ -1056,11 +1075,11 @@ static int avivo_crtc_set_base(struct drm_crtc *crtc, int x, int y, · 516 unmodified lines
10561075
10571076 if (rdev->family >= CHIP_RV770) {
10581077 if (radeon_crtc->crtc_id) {
1059− WREG32(R700_D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, 0);
1060− WREG32(R700_D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, 0);
1078+ WREG32(R700_D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, upper_32_bits(fb_location));
1079+ WREG32(R700_D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, upper_32_bits(fb_location));
10611080 } else {
1062− WREG32(R700_D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, 0);
1063− WREG32(R700_D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, 0);
1081+ WREG32(R700_D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, upper_32_bits(fb_location));
1082+ WREG32(R700_D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, upper_32_bits(fb_location));
10641083 }
10651084 }
10661085 WREG32(AVIVO_D1GRPH_PRIMARY_SURFACE_ADDRESS + radeon_crtc->crtc_offset,
@@ -1197,8 +1216,18 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc, · 130 unmodified lines
11971216 struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
11981217 struct drm_device *dev = crtc->dev;
11991218 struct radeon_device *rdev = dev->dev_private;
1219+ struct drm_encoder *encoder;
1220+ bool is_tvcv = false;
12001221
1201− /* TODO color tiling */
1222+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
1223+ /* find tv std */
1224+ if (encoder->crtc == crtc) {
1225+ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1226+ if (radeon_encoder->active_device &
1227+ (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT))
1228+ is_tvcv = true;
1229+ }
1230+ }
12021231
12031232 atombios_disable_ss(crtc);
12041233 /* always set DCPLL */
@@ -1207,9 +1236,14 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc, · 2 unmodified lines
12071236 atombios_crtc_set_pll(crtc, adjusted_mode);
12081237 atombios_enable_ss(crtc);
12091238
1210− if (ASIC_IS_AVIVO(rdev))
1239+ if (ASIC_IS_DCE4(rdev))
12111240 atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
1212− else {
1241+ else if (ASIC_IS_AVIVO(rdev)) {
1242+ if (is_tvcv)
1243+ atombios_crtc_set_timing(crtc, adjusted_mode);
1244+ else
1245+ atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
1246+ } else {
12131247 atombios_crtc_set_timing(crtc, adjusted_mode);
12141248 if (radeon_crtc->crtc_id == 0)
12151249 atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
drivers/gpu/drm/radeon/evergreen.c+38−10
@@ -675,6 +675,43 @@ static int evergreen_cp_load_microcode(struct radeon_device *rdev) · 674 unmodified lines
675675 return 0;
676676 }
677677
678+static int evergreen_cp_start(struct radeon_device *rdev)
679+{
680+ int r;
681+ uint32_t cp_me;
682+
683+ r = radeon_ring_lock(rdev, 7);
684+ if (r) {
685+ DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
686+ return r;
687+ }
688+ radeon_ring_write(rdev, PACKET3(PACKET3_ME_INITIALIZE, 5));
689+ radeon_ring_write(rdev, 0x1);
690+ radeon_ring_write(rdev, 0x0);
691+ radeon_ring_write(rdev, rdev->config.evergreen.max_hw_contexts - 1);
692+ radeon_ring_write(rdev, PACKET3_ME_INITIALIZE_DEVICE_ID(1));
693+ radeon_ring_write(rdev, 0);
694+ radeon_ring_write(rdev, 0);
695+ radeon_ring_unlock_commit(rdev);
696+
697+ cp_me = 0xff;
698+ WREG32(CP_ME_CNTL, cp_me);
699+
700+ r = radeon_ring_lock(rdev, 4);
701+ if (r) {
702+ DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
703+ return r;
704+ }
705+ /* init some VGT regs */
706+ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
707+ radeon_ring_write(rdev, (VGT_VERTEX_REUSE_BLOCK_CNTL - PACKET3_SET_CONTEXT_REG_START) >> 2);
708+ radeon_ring_write(rdev, 0xe);
709+ radeon_ring_write(rdev, 0x10);
710+ radeon_ring_unlock_commit(rdev);
711+
712+ return 0;
713+}
714+
678715 int evergreen_cp_resume(struct radeon_device *rdev)
679716 {
680717 u32 tmp;
@@ -719,7 +756,7 @@ int evergreen_cp_resume(struct radeon_device *rdev) · 38 unmodified lines
719756 rdev->cp.rptr = RREG32(CP_RB_RPTR);
720757 rdev->cp.wptr = RREG32(CP_RB_WPTR);
721758
722− r600_cp_start(rdev);
759+ evergreen_cp_start(rdev);
723760 rdev->cp.ready = true;
724761 r = radeon_ring_test(rdev);
725762 if (r) {
@@ -2054,11 +2091,6 @@ int evergreen_resume(struct radeon_device *rdev) · 1328 unmodified lines
20542091 */
20552092 /* post card */
20562093 atom_asic_init(rdev->mode_info.atom_context);
2057− /* Initialize clocks */
2058− r = radeon_clocks_init(rdev);
2059− if (r) {
2060− return r;
2061− }
20622094
20632095 r = evergreen_startup(rdev);
20642096 if (r) {
@@ -2164,9 +2196,6 @@ int evergreen_init(struct radeon_device *rdev) · 99 unmodified lines
21642196 radeon_surface_init(rdev);
21652197 /* Initialize clocks */
21662198 radeon_get_clock_info(rdev->ddev);
2167− r = radeon_clocks_init(rdev);
2168− if (r)
2169− return r;
21702199 /* Fence driver */
21712200 r = radeon_fence_driver_init(rdev);
21722201 if (r)
@@ -2236,7 +2265,6 @@ void evergreen_fini(struct radeon_device *rdev) · 63 unmodified lines
22362265 evergreen_pcie_gart_fini(rdev);
22372266 radeon_gem_fini(rdev);
22382267 radeon_fence_driver_fini(rdev);
2239− radeon_clocks_fini(rdev);
22402268 radeon_agp_fini(rdev);
22412269 radeon_bo_fini(rdev);
22422270 radeon_atombios_fini(rdev);
drivers/gpu/drm/radeon/r600.c+2−14
@@ -2119,10 +2119,7 @@ int r600_cp_start(struct radeon_device *rdev) · 2118 unmodified lines
21192119 }
21202120 radeon_ring_write(rdev, PACKET3(PACKET3_ME_INITIALIZE, 5));
21212121 radeon_ring_write(rdev, 0x1);
2122− if (rdev->family >= CHIP_CEDAR) {
2123− radeon_ring_write(rdev, 0x0);
2124− radeon_ring_write(rdev, rdev->config.evergreen.max_hw_contexts - 1);
2125− } else if (rdev->family >= CHIP_RV770) {
2122+ if (rdev->family >= CHIP_RV770) {
21262123 radeon_ring_write(rdev, 0x0);
21272124 radeon_ring_write(rdev, rdev->config.rv770.max_hw_contexts - 1);
21282125 } else {
@@ -2489,11 +2486,6 @@ int r600_resume(struct radeon_device *rdev) · 360 unmodified lines
24892486 */
24902487 /* post card */
24912488 atom_asic_init(rdev->mode_info.atom_context);
2492− /* Initialize clocks */
2493− r = radeon_clocks_init(rdev);
2494− if (r) {
2495− return r;
2496− }
24972489
24982490 r = r600_startup(rdev);
24992491 if (r) {
@@ -2586,9 +2578,6 @@ int r600_init(struct radeon_device *rdev) · 86 unmodified lines
25862578 radeon_surface_init(rdev);
25872579 /* Initialize clocks */
25882580 radeon_get_clock_info(rdev->ddev);
2589− r = radeon_clocks_init(rdev);
2590− if (r)
2591− return r;
25922581 /* Fence driver */
25932582 r = radeon_fence_driver_init(rdev);
25942583 if (r)
@@ -2663,7 +2652,6 @@ void r600_fini(struct radeon_device *rdev) · 68 unmodified lines
26632652 radeon_agp_fini(rdev);
26642653 radeon_gem_fini(rdev);
26652654 radeon_fence_driver_fini(rdev);
2666− radeon_clocks_fini(rdev);
26672655 radeon_bo_fini(rdev);
26682656 radeon_atombios_fini(rdev);
26692657 kfree(rdev->bios);
@@ -3541,7 +3529,7 @@ void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo) · 871 unmodified lines
35413529 * rather than write to HDP_REG_COHERENCY_FLUSH_CNTL
35423530 */
35433531 if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_RV740)) {
3544− void __iomem *ptr = (void *)rdev->gart.table.vram.ptr;
3532+ void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
35453533 u32 tmp;
35463534
35473535 WREG32(HDP_DEBUG1, 0);
drivers/gpu/drm/radeon/radeon.h+6−2
@@ -1013,6 +1013,11 @@ int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data, · 1012 unmodified lines
10131013 int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
10141014 struct drm_file *filp);
10151015
1016+/* VRAM scratch page for HDP bug */
1017+struct r700_vram_scratch {
1018+ struct radeon_bo *robj;
1019+ volatile uint32_t *ptr;
1020+};
10161021
10171022 /*
10181023 * Core structure, functions and helpers.
@@ -1079,6 +1084,7 @@ struct radeon_device { · 60 unmodified lines
10791084 const struct firmware *pfp_fw; /* r6/700 PFP firmware */
10801085 const struct firmware *rlc_fw; /* r6/700 RLC firmware */
10811086 struct r600_blit r600_blit;
1087+ struct r700_vram_scratch vram_scratch;
10821088 int msi_enabled; /* msi enabled */
10831089 struct r600_ih ih; /* r6/700 interrupt ring */
10841090 struct workqueue_struct *wq;
@@ -1333,8 +1339,6 @@ extern bool radeon_card_posted(struct radeon_device *rdev); · 248 unmodified lines
13331339 extern void radeon_update_bandwidth_info(struct radeon_device *rdev);
13341340 extern void radeon_update_display_priority(struct radeon_device *rdev);
13351341 extern bool radeon_boot_test_post_card(struct radeon_device *rdev);
1336−extern int radeon_clocks_init(struct radeon_device *rdev);
1337−extern void radeon_clocks_fini(struct radeon_device *rdev);
13381342 extern void radeon_scratch_init(struct radeon_device *rdev);
13391343 extern void radeon_surface_init(struct radeon_device *rdev);
13401344 extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data);
drivers/gpu/drm/radeon/radeon_asic.c+0−18
@@ -858,21 +858,3 @@ int radeon_asic_init(struct radeon_device *rdev) · 857 unmodified lines
858858 return 0;
859859 }
860860
861−/*
862− * Wrapper around modesetting bits. Move to radeon_clocks.c?
863− */
864−int radeon_clocks_init(struct radeon_device *rdev)
865−{
866− int r;
867−
868− r = radeon_static_clocks_init(rdev->ddev);
869− if (r) {
870− return r;
871− }
872− DRM_INFO("Clocks initialized !\n");
873− return 0;
874−}
875−
876−void radeon_clocks_fini(struct radeon_device *rdev)
877−{
878−}
drivers/gpu/drm/radeon/radeon_atombios.c+27−0
@@ -85,6 +85,19 @@ static inline struct radeon_i2c_bus_rec radeon_lookup_i2c_gpio(struct radeon_dev · 84 unmodified lines
8585 for (i = 0; i < num_indices; i++) {
8686 gpio = &i2c_info->asGPIO_Info[i];
8787
88+ /* some evergreen boards have bad data for this entry */
89+ if (ASIC_IS_DCE4(rdev)) {
90+ if ((i == 7) &&
91+ (gpio->usClkMaskRegisterIndex == 0x1936) &&
92+ (gpio->sucI2cId.ucAccess == 0)) {
93+ gpio->sucI2cId.ucAccess = 0x97;
94+ gpio->ucDataMaskShift = 8;
95+ gpio->ucDataEnShift = 8;
96+ gpio->ucDataY_Shift = 8;
97+ gpio->ucDataA_Shift = 8;
98+ }
99+ }
100+
88101 if (gpio->sucI2cId.ucAccess == id) {
89102 i2c.mask_clk_reg = le16_to_cpu(gpio->usClkMaskRegisterIndex) * 4;
90103 i2c.mask_data_reg = le16_to_cpu(gpio->usDataMaskRegisterIndex) * 4;
@@ -147,6 +160,20 @@ void radeon_atombios_i2c_init(struct radeon_device *rdev) · 56 unmodified lines
147160 for (i = 0; i < num_indices; i++) {
148161 gpio = &i2c_info->asGPIO_Info[i];
149162 i2c.valid = false;
163+
164+ /* some evergreen boards have bad data for this entry */
165+ if (ASIC_IS_DCE4(rdev)) {
166+ if ((i == 7) &&
167+ (gpio->usClkMaskRegisterIndex == 0x1936) &&
168+ (gpio->sucI2cId.ucAccess == 0)) {
169+ gpio->sucI2cId.ucAccess = 0x97;
170+ gpio->ucDataMaskShift = 8;
171+ gpio->ucDataEnShift = 8;
172+ gpio->ucDataY_Shift = 8;
173+ gpio->ucDataA_Shift = 8;
174+ }
175+ }
176+
150177 i2c.mask_clk_reg = le16_to_cpu(gpio->usClkMaskRegisterIndex) * 4;
151178 i2c.mask_data_reg = le16_to_cpu(gpio->usDataMaskRegisterIndex) * 4;
152179 i2c.en_clk_reg = le16_to_cpu(gpio->usClkEnRegisterIndex) * 4;
drivers/gpu/drm/radeon/radeon_clocks.c+8−50
@@ -327,6 +327,14 @@ void radeon_get_clock_info(struct drm_device *dev) · 326 unmodified lines
327327 mpll->max_feedback_div = 0xff;
328328 mpll->best_vco = 0;
329329
330+ if (!rdev->clock.default_sclk)
331+ rdev->clock.default_sclk = radeon_get_engine_clock(rdev);
332+ if ((!rdev->clock.default_mclk) && rdev->asic->get_memory_clock)
333+ rdev->clock.default_mclk = radeon_get_memory_clock(rdev);
334+
335+ rdev->pm.current_sclk = rdev->clock.default_sclk;
336+ rdev->pm.current_mclk = rdev->clock.default_mclk;
337+
330338 }
331339
332340 /* 10 khz */
@@ -897,53 +905,3 @@ void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable) · 564 unmodified lines
897905 }
898906 }
899907
900−static void radeon_apply_clock_quirks(struct radeon_device *rdev)
901−{
902− uint32_t tmp;
903−
904− /* XXX make sure engine is idle */
905−
906− if (rdev->family < CHIP_RS600) {
907− tmp = RREG32_PLL(RADEON_SCLK_CNTL);
908− if (ASIC_IS_R300(rdev) || ASIC_IS_RV100(rdev))
909− tmp |= RADEON_SCLK_FORCE_CP | RADEON_SCLK_FORCE_VIP;
910− if ((rdev->family == CHIP_RV250)
911− || (rdev->family == CHIP_RV280))
912− tmp |=
913− RADEON_SCLK_FORCE_DISP1 | RADEON_SCLK_FORCE_DISP2;
914− if ((rdev->family == CHIP_RV350)
915− || (rdev->family == CHIP_RV380))
916− tmp |= R300_SCLK_FORCE_VAP;
917− if (rdev->family == CHIP_R420)
918− tmp |= R300_SCLK_FORCE_PX | R300_SCLK_FORCE_TX;
919− WREG32_PLL(RADEON_SCLK_CNTL, tmp);
920− } else if (rdev->family < CHIP_R600) {
921− tmp = RREG32_PLL(AVIVO_CP_DYN_CNTL);
922− tmp |= AVIVO_CP_FORCEON;
923− WREG32_PLL(AVIVO_CP_DYN_CNTL, tmp);
924−
925− tmp = RREG32_PLL(AVIVO_E2_DYN_CNTL);
926− tmp |= AVIVO_E2_FORCEON;
927− WREG32_PLL(AVIVO_E2_DYN_CNTL, tmp);
928−
929− tmp = RREG32_PLL(AVIVO_IDCT_DYN_CNTL);
930− tmp |= AVIVO_IDCT_FORCEON;
931− WREG32_PLL(AVIVO_IDCT_DYN_CNTL, tmp);
932− }
933−}
934−
935−int radeon_static_clocks_init(struct drm_device *dev)
936−{
937− struct radeon_device *rdev = dev->dev_private;
938−
939− /* XXX make sure engine is idle */
940−
941− if (radeon_dynclks != -1) {
942− if (radeon_dynclks) {
943− if (rdev->asic->set_clock_gating)
944− radeon_set_clock_gating(rdev, 1);
945− }
946− }
947− radeon_apply_clock_quirks(rdev);
948− return 0;
949−}
drivers/gpu/drm/radeon/radeon_connectors.c+44−35
@@ -999,6 +999,7 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto · 998 unmodified lines
999999 }
10001000 }
10011001
1002+ radeon_connector_update_scratch_regs(connector, ret);
10021003 return ret;
10031004 }
10041005
@@ -1050,10 +1051,16 @@ radeon_add_atom_connector(struct drm_device *dev, · 45 unmodified lines
10501051 uint32_t subpixel_order = SubPixelNone;
10511052 bool shared_ddc = false;
10521053
1053− /* fixme - tv/cv/din */
10541054 if (connector_type == DRM_MODE_CONNECTOR_Unknown)
10551055 return;
10561056
1057+ /* if the user selected tv=0 don't try and add the connector */
1058+ if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
1059+ (connector_type == DRM_MODE_CONNECTOR_Composite) ||
1060+ (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
1061+ (radeon_tv == 0))
1062+ return;
1063+
10571064 /* see if we already added it */
10581065 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
10591066 radeon_connector = to_radeon_connector(connector);
@@ -1208,19 +1215,17 @@ radeon_add_atom_connector(struct drm_device *dev, · 148 unmodified lines
12081215 case DRM_MODE_CONNECTOR_SVIDEO:
12091216 case DRM_MODE_CONNECTOR_Composite:
12101217 case DRM_MODE_CONNECTOR_9PinDIN:
1211− if (radeon_tv == 1) {
1212− drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1213− drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1214− radeon_connector->dac_load_detect = true;
1215− drm_connector_attach_property(&radeon_connector->base,
1216− rdev->mode_info.load_detect_property,
1217− 1);
1218− drm_connector_attach_property(&radeon_connector->base,
1219− rdev->mode_info.tv_std_property,
1220− radeon_atombios_get_tv_info(rdev));
1221− /* no HPD on analog connectors */
1222− radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1223− }
1218+ drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1219+ drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1220+ radeon_connector->dac_load_detect = true;
1221+ drm_connector_attach_property(&radeon_connector->base,
1222+ rdev->mode_info.load_detect_property,
1223+ 1);
1224+ drm_connector_attach_property(&radeon_connector->base,
1225+ rdev->mode_info.tv_std_property,
1226+ radeon_atombios_get_tv_info(rdev));
1227+ /* no HPD on analog connectors */
1228+ radeon_connector->hpd.hpd = RADEON_HPD_NONE;
12241229 break;
12251230 case DRM_MODE_CONNECTOR_LVDS:
12261231 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
@@ -1271,10 +1276,16 @@ radeon_add_legacy_connector(struct drm_device *dev, · 44 unmodified lines
12711276 struct radeon_connector *radeon_connector;
12721277 uint32_t subpixel_order = SubPixelNone;
12731278
1274− /* fixme - tv/cv/din */
12751279 if (connector_type == DRM_MODE_CONNECTOR_Unknown)
12761280 return;
12771281
1282+ /* if the user selected tv=0 don't try and add the connector */
1283+ if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
1284+ (connector_type == DRM_MODE_CONNECTOR_Composite) ||
1285+ (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
1286+ (radeon_tv == 0))
1287+ return;
1288+
12781289 /* see if we already added it */
12791290 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
12801291 radeon_connector = to_radeon_connector(connector);
@@ -1346,26 +1357,24 @@ radeon_add_legacy_connector(struct drm_device *dev, · 65 unmodified lines
13461357 case DRM_MODE_CONNECTOR_SVIDEO:
13471358 case DRM_MODE_CONNECTOR_Composite:
13481359 case DRM_MODE_CONNECTOR_9PinDIN:
1349− if (radeon_tv == 1) {
1350− drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1351− drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1352− radeon_connector->dac_load_detect = true;
1353− /* RS400,RC410,RS480 chipset seems to report a lot
1354− * of false positive on load detect, we haven't yet
1355− * found a way to make load detect reliable on those
1356− * chipset, thus just disable it for TV.
1357− */
1358− if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480)
1359− radeon_connector->dac_load_detect = false;
1360− drm_connector_attach_property(&radeon_connector->base,
1361− rdev->mode_info.load_detect_property,
1362− radeon_connector->dac_load_detect);
1363− drm_connector_attach_property(&radeon_connector->base,
1364− rdev->mode_info.tv_std_property,
1365− radeon_combios_get_tv_info(rdev));
1366− /* no HPD on analog connectors */
1367− radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1368− }
1360+ drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1361+ drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1362+ radeon_connector->dac_load_detect = true;
1363+ /* RS400,RC410,RS480 chipset seems to report a lot
1364+ * of false positive on load detect, we haven't yet
1365+ * found a way to make load detect reliable on those
1366+ * chipset, thus just disable it for TV.
1367+ */
1368+ if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480)
1369+ radeon_connector->dac_load_detect = false;
1370+ drm_connector_attach_property(&radeon_connector->base,
1371+ rdev->mode_info.load_detect_property,
1372+ radeon_connector->dac_load_detect);
1373+ drm_connector_attach_property(&radeon_connector->base,
1374+ rdev->mode_info.tv_std_property,
1375+ radeon_combios_get_tv_info(rdev));
1376+ /* no HPD on analog connectors */
1377+ radeon_connector->hpd.hpd = RADEON_HPD_NONE;
13691378 break;
13701379 case DRM_MODE_CONNECTOR_LVDS:
13711380 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
drivers/gpu/drm/radeon/radeon_device.c+9−19
@@ -293,30 +293,20 @@ bool radeon_card_posted(struct radeon_device *rdev) · 292 unmodified lines
293293 void radeon_update_bandwidth_info(struct radeon_device *rdev)
294294 {
295295 fixed20_12 a;
296− u32 sclk, mclk;
296+ u32 sclk = rdev->pm.current_sclk;
297+ u32 mclk = rdev->pm.current_mclk;
297298
298− if (rdev->flags & RADEON_IS_IGP) {
299− sclk = radeon_get_engine_clock(rdev);
300− mclk = rdev->clock.default_mclk;
301−
302− a.full = dfixed_const(100);
303− rdev->pm.sclk.full = dfixed_const(sclk);
304− rdev->pm.sclk.full = dfixed_div(rdev->pm.sclk, a);
305− rdev->pm.mclk.full = dfixed_const(mclk);
306− rdev->pm.mclk.full = dfixed_div(rdev->pm.mclk, a);
299+ /* sclk/mclk in Mhz */
300+ a.full = dfixed_const(100);
301+ rdev->pm.sclk.full = dfixed_const(sclk);
302+ rdev->pm.sclk.full = dfixed_div(rdev->pm.sclk, a);
303+ rdev->pm.mclk.full = dfixed_const(mclk);
304+ rdev->pm.mclk.full = dfixed_div(rdev->pm.mclk, a);
307305
306+ if (rdev->flags & RADEON_IS_IGP) {
308307 a.full = dfixed_const(16);
309308 /* core_bandwidth = sclk(Mhz) * 16 */
310309 rdev->pm.core_bandwidth.full = dfixed_div(rdev->pm.sclk, a);
311− } else {
312− sclk = radeon_get_engine_clock(rdev);
313− mclk = radeon_get_memory_clock(rdev);
314−
315− a.full = dfixed_const(100);
316− rdev->pm.sclk.full = dfixed_const(sclk);
317− rdev->pm.sclk.full = dfixed_div(rdev->pm.sclk, a);
318− rdev->pm.mclk.full = dfixed_const(mclk);
319− rdev->pm.mclk.full = dfixed_div(rdev->pm.mclk, a);
320310 }
321311 }
322312
drivers/gpu/drm/radeon/radeon_i2c.c+1−1
@@ -213,7 +213,7 @@ static void post_xfer(struct i2c_adapter *i2c_adap) · 212 unmodified lines
213213
214214 static u32 radeon_get_i2c_prescale(struct radeon_device *rdev)
215215 {
216− u32 sclk = radeon_get_engine_clock(rdev);
216+ u32 sclk = rdev->pm.current_sclk;
217217 u32 prescale = 0;
218218 u32 nm;
219219 u8 n, m, loop;
drivers/gpu/drm/radeon/radeon_mode.h+0−1
@@ -600,7 +600,6 @@ extern bool radeon_get_atom_connector_info_from_supported_devices_table(struct d · 599 unmodified lines
600600 void radeon_enc_destroy(struct drm_encoder *encoder);
601601 void radeon_copy_fb(struct drm_device *dev, struct drm_gem_object *dst_obj);
602602 void radeon_combios_asic_init(struct drm_device *dev);
603−extern int radeon_static_clocks_init(struct drm_device *dev);
604603 bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
605604 struct drm_display_mode *mode,
606605 struct drm_display_mode *adjusted_mode);
drivers/gpu/drm/radeon/radeon_pm.c+0−2
@@ -637,8 +637,6 @@ void radeon_pm_fini(struct radeon_device *rdev) · 636 unmodified lines
637637 }
638638
639639 radeon_hwmon_fini(rdev);
640− if (rdev->pm.i2c_bus)
641− radeon_i2c_destroy(rdev->pm.i2c_bus);
642640 }
643641
644642 void radeon_pm_compute_clocks(struct radeon_device *rdev)
drivers/gpu/drm/radeon/rv770.c+52−9
@@ -905,6 +905,54 @@ static void rv770_gpu_init(struct radeon_device *rdev) · 904 unmodified lines
905905
906906 }
907907
908+static int rv770_vram_scratch_init(struct radeon_device *rdev)
909+{
910+ int r;
911+ u64 gpu_addr;
912+
913+ if (rdev->vram_scratch.robj == NULL) {
914+ r = radeon_bo_create(rdev, NULL, RADEON_GPU_PAGE_SIZE,
915+ true, RADEON_GEM_DOMAIN_VRAM,
916+ &rdev->vram_scratch.robj);
917+ if (r) {
918+ return r;
919+ }
920+ }
921+
922+ r = radeon_bo_reserve(rdev->vram_scratch.robj, false);
923+ if (unlikely(r != 0))
924+ return r;
925+ r = radeon_bo_pin(rdev->vram_scratch.robj,
926+ RADEON_GEM_DOMAIN_VRAM, &gpu_addr);
927+ if (r) {
928+ radeon_bo_unreserve(rdev->vram_scratch.robj);
929+ return r;
930+ }
931+ r = radeon_bo_kmap(rdev->vram_scratch.robj,
932+ (void **)&rdev->vram_scratch.ptr);
933+ if (r)
934+ radeon_bo_unpin(rdev->vram_scratch.robj);
935+ radeon_bo_unreserve(rdev->vram_scratch.robj);
936+
937+ return r;
938+}
939+
940+static void rv770_vram_scratch_fini(struct radeon_device *rdev)
941+{
942+ int r;
943+
944+ if (rdev->vram_scratch.robj == NULL) {
945+ return;
946+ }
947+ r = radeon_bo_reserve(rdev->vram_scratch.robj, false);
948+ if (likely(r == 0)) {
949+ radeon_bo_kunmap(rdev->vram_scratch.robj);
950+ radeon_bo_unpin(rdev->vram_scratch.robj);
951+ radeon_bo_unreserve(rdev->vram_scratch.robj);
952+ }
953+ radeon_bo_unref(&rdev->vram_scratch.robj);
954+}
955+
908956 int rv770_mc_init(struct radeon_device *rdev)
909957 {
910958 u32 tmp;
@@ -970,6 +1018,9 @@ static int rv770_startup(struct radeon_device *rdev) · 59 unmodified lines
9701018 if (r)
9711019 return r;
9721020 }
1021+ r = rv770_vram_scratch_init(rdev);
1022+ if (r)
1023+ return r;
9731024 rv770_gpu_init(rdev);
9741025 r = r600_blit_init(rdev);
9751026 if (r) {
@@ -1023,11 +1074,6 @@ int rv770_resume(struct radeon_device *rdev) · 47 unmodified lines
10231074 */
10241075 /* post card */
10251076 atom_asic_init(rdev->mode_info.atom_context);
1026− /* Initialize clocks */
1027− r = radeon_clocks_init(rdev);
1028− if (r) {
1029− return r;
1030− }
10311077
10321078 r = rv770_startup(rdev);
10331079 if (r) {
@@ -1118,9 +1164,6 @@ int rv770_init(struct radeon_device *rdev) · 84 unmodified lines
11181164 radeon_surface_init(rdev);
11191165 /* Initialize clocks */
11201166 radeon_get_clock_info(rdev->ddev);
1121− r = radeon_clocks_init(rdev);
1122− if (r)
1123− return r;
11241167 /* Fence driver */
11251168 r = radeon_fence_driver_init(rdev);
11261169 if (r)
@@ -1195,9 +1238,9 @@ void rv770_fini(struct radeon_device *rdev) · 68 unmodified lines
11951238 r600_irq_fini(rdev);
11961239 radeon_irq_kms_fini(rdev);
11971240 rv770_pcie_gart_fini(rdev);
1241+ rv770_vram_scratch_fini(rdev);
11981242 radeon_gem_fini(rdev);
11991243 radeon_fence_driver_fini(rdev);
1200− radeon_clocks_fini(rdev);
12011244 radeon_agp_fini(rdev);
12021245 radeon_bo_fini(rdev);
12031246 radeon_atombios_fini(rdev);
drivers/hwmon/ads7871.c+19−19
@@ -160,30 +160,12 @@ static const struct attribute_group ads7871_group = { · 159 unmodified lines
160160
161161 static int __devinit ads7871_probe(struct spi_device *spi)
162162 {
163− int status, ret, err = 0;
163+ int ret, err;
164164 uint8_t val;
165165 struct ads7871_data *pdata;
166166
167167 dev_dbg(&spi->dev, "probe\n");
168168
169− pdata = kzalloc(sizeof(struct ads7871_data), GFP_KERNEL);
170− if (!pdata) {
171− err = -ENOMEM;
172− goto exit;
173− }
174−
175− status = sysfs_create_group(&spi->dev.kobj, &ads7871_group);
176− if (status < 0)
177− goto error_free;
178−
179− pdata->hwmon_dev = hwmon_device_register(&spi->dev);
180− if (IS_ERR(pdata->hwmon_dev)) {
181− err = PTR_ERR(pdata->hwmon_dev);
182− goto error_remove;
183− }
184−
185− spi_set_drvdata(spi, pdata);
186−
187169 /* Configure the SPI bus */
188170 spi->mode = (SPI_MODE_0);
189171 spi->bits_per_word = 8;
@@ -201,6 +183,24 @@ static int __devinit ads7871_probe(struct spi_device *spi) · 11 unmodified lines
201183 we need to make sure we really have a chip*/
202184 if (val != ret) {
203185 err = -ENODEV;
186+ goto exit;
187+ }
188+
189+ pdata = kzalloc(sizeof(struct ads7871_data), GFP_KERNEL);
190+ if (!pdata) {
191+ err = -ENOMEM;
192+ goto exit;
193+ }
194+
195+ err = sysfs_create_group(&spi->dev.kobj, &ads7871_group);
196+ if (err < 0)
197+ goto error_free;
198+
199+ spi_set_drvdata(spi, pdata);
200+
201+ pdata->hwmon_dev = hwmon_device_register(&spi->dev);
202+ if (IS_ERR(pdata->hwmon_dev)) {
203+ err = PTR_ERR(pdata->hwmon_dev);
204204 goto error_remove;
205205 }
206206
drivers/hwmon/coretemp.c+0−1
@@ -518,7 +518,6 @@ static struct notifier_block coretemp_cpu_notifier __refdata = { · 517 unmodified lines
518518 static int __init coretemp_init(void)
519519 {
520520 int i, err = -ENODEV;
521− struct pdev_entry *p, *n;
522521
523522 /* quick check if we run Intel */
524523 if (cpu_data(0).x86_vendor != X86_VENDOR_INTEL)
drivers/hwmon/hp_accel.c+2−0
@@ -221,6 +221,8 @@ static struct dmi_system_id lis3lv02d_dmi_ids[] = { · 220 unmodified lines
221221 AXIS_DMI_MATCH("HPB442x", "HP ProBook 442", xy_rotated_left),
222222 AXIS_DMI_MATCH("HPB452x", "HP ProBook 452", y_inverted),
223223 AXIS_DMI_MATCH("HPB522x", "HP ProBook 522", xy_swap),
224+ AXIS_DMI_MATCH("HPB532x", "HP ProBook 532", y_inverted),
225+ AXIS_DMI_MATCH("Mini5102", "HP Mini 5102", xy_rotated_left_usd),
224226 { NULL, }
225227 /* Laptop models without axis info (yet):
226228 * "NC6910" "HP Compaq 6910"
drivers/hwmon/k8temp.c+32−3
@@ -143,6 +143,37 @@ static const struct pci_device_id k8temp_ids[] = { · 142 unmodified lines
143143
144144 MODULE_DEVICE_TABLE(pci, k8temp_ids);
145145
146+static int __devinit is_rev_g_desktop(u8 model)
147+{
148+ u32 brandidx;
149+
150+ if (model < 0x69)
151+ return 0;
152+
153+ if (model == 0xc1 || model == 0x6c || model == 0x7c)
154+ return 0;
155+
156+ /*
157+ * Differentiate between AM2 and ASB1.
158+ * See "Constructing the processor Name String" in "Revision
159+ * Guide for AMD NPT Family 0Fh Processors" (33610).
160+ */
161+ brandidx = cpuid_ebx(0x80000001);
162+ brandidx = (brandidx >> 9) & 0x1f;
163+
164+ /* Single core */
165+ if ((model == 0x6f || model == 0x7f) &&
166+ (brandidx == 0x7 || brandidx == 0x9 || brandidx == 0xc))
167+ return 0;
168+
169+ /* Dual core */
170+ if (model == 0x6b &&
171+ (brandidx == 0xb || brandidx == 0xc))
172+ return 0;
173+
174+ return 1;
175+}
176+
146177 static int __devinit k8temp_probe(struct pci_dev *pdev,
147178 const struct pci_device_id *id)
148179 {
@@ -179,9 +210,7 @@ static int __devinit k8temp_probe(struct pci_dev *pdev, · 30 unmodified lines
179210 "wrong - check erratum #141\n");
180211 }
181212
182− if ((model >= 0x69) &&
183− !(model == 0xc1 || model == 0x6c || model == 0x7c ||
184− model == 0x6b || model == 0x6f || model == 0x7f)) {
213+ if (is_rev_g_desktop(model)) {
185214 /*
186215 * RevG desktop CPUs (i.e. no socket S1G1 or
187216 * ASB1 parts) need additional offset,
drivers/ieee1394/ohci1394.c+1−1
@@ -1106,7 +1106,7 @@ static int ohci_iso_recv_init(struct hpsb_iso *iso) · 1105 unmodified lines
11061106 if (recv->block_irq_interval * 4 > iso->buf_packets)
11071107 recv->block_irq_interval = iso->buf_packets / 4;
11081108 if (recv->block_irq_interval < 1)
1109− recv->block_irq_interval = 1;
1109+ recv->block_irq_interval = 1;
11101110
11111111 /* choose a buffer stride */
11121112 /* must be a power of 2, and <= PAGE_SIZE */
drivers/infiniband/hw/cxgb3/cxio_hal.h+1−1
@@ -53,7 +53,7 @@ · 52 unmodified lines
5353 #define T3_MAX_PBL_SIZE 256
5454 #define T3_MAX_RQ_SIZE 1024
5555 #define T3_MAX_QP_DEPTH (T3_MAX_RQ_SIZE-1)
56−#define T3_MAX_CQ_DEPTH 262144
56+#define T3_MAX_CQ_DEPTH 65536
5757 #define T3_MAX_NUM_STAG (1<<15)
5858 #define T3_MAX_MR_SIZE 0x100000000ULL
5959 #define T3_PAGESIZE_MASK 0xffff000 /* 4KB-128MB */
drivers/infiniband/hw/nes/nes_cm.c+10−8
@@ -502,7 +502,9 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb, · 501 unmodified lines
502502 static void nes_retrans_expired(struct nes_cm_node *cm_node)
503503 {
504504 struct iw_cm_id *cm_id = cm_node->cm_id;
505− switch (cm_node->state) {
505+ enum nes_cm_node_state state = cm_node->state;
506+ cm_node->state = NES_CM_STATE_CLOSED;
507+ switch (state) {
506508 case NES_CM_STATE_SYN_RCVD:
507509 case NES_CM_STATE_CLOSING:
508510 rem_ref_cm_node(cm_node->cm_core, cm_node);
@@ -511,7 +513,6 @@ static void nes_retrans_expired(struct nes_cm_node *cm_node) · 2 unmodified lines
511513 case NES_CM_STATE_FIN_WAIT1:
512514 if (cm_node->cm_id)
513515 cm_id->rem_ref(cm_id);
514− cm_node->state = NES_CM_STATE_CLOSED;
515516 send_reset(cm_node, NULL);
516517 break;
517518 default:
@@ -1439,9 +1440,6 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, · 921 unmodified lines
14391440 break;
14401441 case NES_CM_STATE_MPAREQ_RCVD:
14411442 passive_state = atomic_add_return(1, &cm_node->passive_state);
1442− if (passive_state == NES_SEND_RESET_EVENT)
1443− create_event(cm_node, NES_CM_EVENT_RESET);
1444− cm_node->state = NES_CM_STATE_CLOSED;
14451443 dev_kfree_skb_any(skb);
14461444 break;
14471445 case NES_CM_STATE_ESTABLISHED:
@@ -1456,6 +1454,7 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, · 8 unmodified lines
14561454 case NES_CM_STATE_CLOSED:
14571455 drop_packet(skb);
14581456 break;
1457+ case NES_CM_STATE_FIN_WAIT2:
14591458 case NES_CM_STATE_FIN_WAIT1:
14601459 case NES_CM_STATE_LAST_ACK:
14611460 cm_node->cm_id->rem_ref(cm_node->cm_id);
@@ -2777,6 +2776,12 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) · 1315 unmodified lines
27772776 return -EINVAL;
27782777 }
27792778
2779+ passive_state = atomic_add_return(1, &cm_node->passive_state);
2780+ if (passive_state == NES_SEND_RESET_EVENT) {
2781+ rem_ref_cm_node(cm_node->cm_core, cm_node);
2782+ return -ECONNRESET;
2783+ }
2784+
27802785 /* associate the node with the QP */
27812786 nesqp->cm_node = (void *)cm_node;
27822787 cm_node->nesqp = nesqp;
@@ -2979,9 +2984,6 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) · 196 unmodified lines
29792984 printk(KERN_ERR "%s[%u] OFA CM event_handler returned, "
29802985 "ret=%d\n", __func__, __LINE__, ret);
29812986
2982− passive_state = atomic_add_return(1, &cm_node->passive_state);
2983− if (passive_state == NES_SEND_RESET_EVENT)
2984− create_event(cm_node, NES_CM_EVENT_RESET);
29852987 return 0;
29862988 }
29872989
drivers/infiniband/hw/nes/nes_hw.c+13−1
@@ -3468,6 +3468,19 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, · 3467 unmodified lines
34683468 return; /* Ignore it, wait for close complete */
34693469
34703470 if (atomic_inc_return(&nesqp->close_timer_started) == 1) {
3471+ if ((tcp_state == NES_AEQE_TCP_STATE_CLOSE_WAIT) &&
3472+ (nesqp->ibqp_state == IB_QPS_RTS) &&
3473+ ((nesadapter->eeprom_version >> 16) != NES_A0)) {
3474+ spin_lock_irqsave(&nesqp->lock, flags);
3475+ nesqp->hw_iwarp_state = iwarp_state;
3476+ nesqp->hw_tcp_state = tcp_state;
3477+ nesqp->last_aeq = async_event_id;
3478+ next_iwarp_state = NES_CQP_QP_IWARP_STATE_CLOSING;
3479+ nesqp->hw_iwarp_state = NES_AEQE_IWARP_STATE_CLOSING;
3480+ spin_unlock_irqrestore(&nesqp->lock, flags);
3481+ nes_hw_modify_qp(nesdev, nesqp, next_iwarp_state, 0, 0);
3482+ nes_cm_disconn(nesqp);
3483+ }
34713484 nesqp->cm_id->add_ref(nesqp->cm_id);
34723485 schedule_nes_timer(nesqp->cm_node, (struct sk_buff *)nesqp,
34733486 NES_TIMER_TYPE_CLOSE, 1, 0);
@@ -3477,7 +3490,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, · 3 unmodified lines
34773490 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount),
34783491 async_event_id, nesqp->last_aeq, tcp_state);
34793492 }
3480−
34813493 break;
34823494 case NES_AEQE_AEID_LLP_CLOSE_COMPLETE:
34833495 if (nesqp->term_flags) {
drivers/infiniband/hw/nes/nes_hw.h+1−0
@@ -45,6 +45,7 @@ · 44 unmodified lines
4545 #define NES_PHY_TYPE_KR 9
4646
4747 #define NES_MULTICAST_PF_MAX 8
48+#define NES_A0 3
4849
4950 enum pci_regs {
5051 NES_INT_STAT = 0x0000,
drivers/infiniband/hw/nes/nes_nic.c+2−2
@@ -1446,14 +1446,14 @@ static int nes_netdev_set_pauseparam(struct net_device *netdev, · 1445 unmodified lines
14461446 NES_IDX_MAC_TX_CONFIG + (nesdev->mac_index*0x200));
14471447 u32temp |= NES_IDX_MAC_TX_CONFIG_ENABLE_PAUSE;
14481448 nes_write_indexed(nesdev,
1449− NES_IDX_MAC_TX_CONFIG_ENABLE_PAUSE + (nesdev->mac_index*0x200), u32temp);
1449+ NES_IDX_MAC_TX_CONFIG + (nesdev->mac_index*0x200), u32temp);
14501450 nesdev->disable_tx_flow_control = 0;
14511451 } else if ((et_pauseparam->tx_pause == 0) && (nesdev->disable_tx_flow_control == 0)) {
14521452 u32temp = nes_read_indexed(nesdev,
14531453 NES_IDX_MAC_TX_CONFIG + (nesdev->mac_index*0x200));
14541454 u32temp &= ~NES_IDX_MAC_TX_CONFIG_ENABLE_PAUSE;
14551455 nes_write_indexed(nesdev,
1456− NES_IDX_MAC_TX_CONFIG_ENABLE_PAUSE + (nesdev->mac_index*0x200), u32temp);
1456+ NES_IDX_MAC_TX_CONFIG + (nesdev->mac_index*0x200), u32temp);
14571457 nesdev->disable_tx_flow_control = 1;
14581458 }
14591459 if ((et_pauseparam->rx_pause == 1) && (nesdev->disable_rx_flow_control == 1)) {
drivers/input/input.c+9−2
@@ -1599,11 +1599,14 @@ EXPORT_SYMBOL(input_free_device); · 1598 unmodified lines
15991599 * @dev: input device supporting MT events and finger tracking
16001600 * @num_slots: number of slots used by the device
16011601 *
1602− * This function allocates all necessary memory for MT slot handling
1603− * in the input device, and adds ABS_MT_SLOT to the device capabilities.
1602+ * This function allocates all necessary memory for MT slot handling in the
1603+ * input device, and adds ABS_MT_SLOT to the device capabilities. All slots
1604+ * are initially marked as unused iby setting ABS_MT_TRACKING_ID to -1.
16041605 */
16051606 int input_mt_create_slots(struct input_dev *dev, unsigned int num_slots)
16061607 {
1608+ int i;
1609+
16071610 if (!num_slots)
16081611 return 0;
16091612
@@ -1614,6 +1617,10 @@ int input_mt_create_slots(struct input_dev *dev, unsigned int num_slots) · 4 unmodified lines
16141617 dev->mtsize = num_slots;
16151618 input_set_abs_params(dev, ABS_MT_SLOT, 0, num_slots - 1, 0, 0);
16161619
1620+ /* Mark slots as 'unused' */
1621+ for (i = 0; i < num_slots; i++)
1622+ dev->mt[i].abs[ABS_MT_TRACKING_ID - ABS_MT_FIRST] = -1;
1623+
16171624 return 0;
16181625 }
16191626 EXPORT_SYMBOL(input_mt_create_slots);
drivers/input/keyboard/hil_kbd.c+6−6
@@ -232,13 +232,13 @@ static void hil_dev_handle_ptr_events(struct hil_dev *ptr) · 231 unmodified lines
232232 if (absdev) {
233233 val = lo + (hi << 8);
234234 #ifdef TABLET_AUTOADJUST
235− if (val < input_abs_min(dev, ABS_X + i))
235+ if (val < input_abs_get_min(dev, ABS_X + i))
236236 input_abs_set_min(dev, ABS_X + i, val);
237− if (val > input_abs_max(dev, ABS_X + i))
237+ if (val > input_abs_get_max(dev, ABS_X + i))
238238 input_abs_set_max(dev, ABS_X + i, val);
239239 #endif
240240 if (i % 3)
241− val = input_abs_max(dev, ABS_X + i) - val;
241+ val = input_abs_get_max(dev, ABS_X + i) - val;
242242 input_report_abs(dev, ABS_X + i, val);
243243 } else {
244244 val = (int) (((int8_t) lo) | ((int8_t) hi << 8));
@@ -388,11 +388,11 @@ static void hil_dev_pointer_setup(struct hil_dev *ptr) · 143 unmodified lines
388388
389389 #ifdef TABLET_AUTOADJUST
390390 for (i = 0; i < ABS_MAX; i++) {
391− int diff = input_abs_max(input_dev, ABS_X + i) / 10;
391+ int diff = input_abs_get_max(input_dev, ABS_X + i) / 10;
392392 input_abs_set_min(input_dev, ABS_X + i,
393− input_abs_min(input_dev, ABS_X + i) + diff)
393+ input_abs_get_min(input_dev, ABS_X + i) + diff);
394394 input_abs_set_max(input_dev, ABS_X + i,
395− input_abs_max(input_dev, ABS_X + i) - diff)
395+ input_abs_get_max(input_dev, ABS_X + i) - diff);
396396 }
397397 #endif
398398
drivers/input/keyboard/pxa27x_keypad.c+0−2
@@ -567,8 +567,6 @@ static int __devexit pxa27x_keypad_remove(struct platform_device *pdev) · 566 unmodified lines
567567 clk_put(keypad->clk);
568568
569569 input_unregister_device(keypad->input_dev);
570− input_free_device(keypad->input_dev);
571−
572570 iounmap(keypad->mmio_base);
573571
574572 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
drivers/input/misc/uinput.c+2−0
@@ -811,6 +811,8 @@ static struct miscdevice uinput_misc = { · 810 unmodified lines
811811 .minor = UINPUT_MINOR,
812812 .name = UINPUT_NAME,
813813 };
814+MODULE_ALIAS_MISCDEV(UINPUT_MINOR);
815+MODULE_ALIAS("devname:" UINPUT_NAME);
814816
815817 static int __init uinput_init(void)
816818 {
drivers/input/mouse/bcm5974.c+8−4
@@ -337,10 +337,14 @@ static void report_finger_data(struct input_dev *input, · 336 unmodified lines
337337 const struct bcm5974_config *cfg,
338338 const struct tp_finger *f)
339339 {
340− input_report_abs(input, ABS_MT_TOUCH_MAJOR, raw2int(f->force_major));
341− input_report_abs(input, ABS_MT_TOUCH_MINOR, raw2int(f->force_minor));
342− input_report_abs(input, ABS_MT_WIDTH_MAJOR, raw2int(f->size_major));
343− input_report_abs(input, ABS_MT_WIDTH_MINOR, raw2int(f->size_minor));
340+ input_report_abs(input, ABS_MT_TOUCH_MAJOR,
341+ raw2int(f->force_major) << 1);
342+ input_report_abs(input, ABS_MT_TOUCH_MINOR,
343+ raw2int(f->force_minor) << 1);
344+ input_report_abs(input, ABS_MT_WIDTH_MAJOR,
345+ raw2int(f->size_major) << 1);
346+ input_report_abs(input, ABS_MT_WIDTH_MINOR,
347+ raw2int(f->size_minor) << 1);
344348 input_report_abs(input, ABS_MT_ORIENTATION,
345349 MAX_FINGER_ORIENTATION - raw2int(f->orientation));
346350 input_report_abs(input, ABS_MT_POSITION_X, raw2int(f->abs_x));
drivers/input/mousedev.c+4−4
@@ -138,8 +138,8 @@ static void mousedev_touchpad_event(struct input_dev *dev, · 137 unmodified lines
138138
139139 fx(0) = value;
140140 if (mousedev->touch && mousedev->pkt_count >= 2) {
141− size = input_abs_get_min(dev, ABS_X) -
142− input_abs_get_max(dev, ABS_X);
141+ size = input_abs_get_max(dev, ABS_X) -
142+ input_abs_get_min(dev, ABS_X);
143143 if (size == 0)
144144 size = 256 * 2;
145145
@@ -155,8 +155,8 @@ static void mousedev_touchpad_event(struct input_dev *dev, · 9 unmodified lines
155155 fy(0) = value;
156156 if (mousedev->touch && mousedev->pkt_count >= 2) {
157157 /* use X size for ABS_Y to keep the same scale */
158− size = input_abs_get_min(dev, ABS_X) -
159− input_abs_get_max(dev, ABS_X);
158+ size = input_abs_get_max(dev, ABS_X) -
159+ input_abs_get_min(dev, ABS_X);
160160 if (size == 0)
161161 size = 256 * 2;
162162
drivers/input/serio/i8042.c+1−1
@@ -1485,8 +1485,8 @@ static int __init i8042_init(void) · 1484 unmodified lines
14851485
14861486 static void __exit i8042_exit(void)
14871487 {
1488− platform_driver_unregister(&i8042_driver);
14891488 platform_device_unregister(i8042_platform_device);
1489+ platform_driver_unregister(&i8042_driver);
14901490 i8042_platform_exit();
14911491
14921492 panic_blink = NULL;
drivers/input/tablet/wacom_wac.c+2−2
@@ -243,10 +243,10 @@ static int wacom_graphire_irq(struct wacom_wac *wacom) · 242 unmodified lines
243243 if (features->type == WACOM_G4 ||
244244 features->type == WACOM_MO) {
245245 input_report_abs(input, ABS_DISTANCE, data[6] & 0x3f);
246− rw = (signed)(data[7] & 0x04) - (data[7] & 0x03);
246+ rw = (data[7] & 0x04) - (data[7] & 0x03);
247247 } else {
248248 input_report_abs(input, ABS_DISTANCE, data[7] & 0x3f);
249− rw = -(signed)data[6];
249+ rw = -(signed char)data[6];
250250 }
251251 input_report_rel(input, REL_WHEEL, rw);
252252 }
drivers/md/.gitignore+0−4
@@ -1,4 +0,0 @@
1−mktables
2−raid6altivec*.c
3−raid6int*.c
4−raid6tables.c
drivers/md/bitmap.c+1−2
@@ -1542,8 +1542,7 @@ void bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector) · 1541 unmodified lines
15421542 atomic_read(&bitmap->mddev->recovery_active) == 0);
15431543
15441544 bitmap->mddev->curr_resync_completed = bitmap->mddev->curr_resync;
1545− if (bitmap->mddev->persistent)
1546− set_bit(MD_CHANGE_CLEAN, &bitmap->mddev->flags);
1545+ set_bit(MD_CHANGE_CLEAN, &bitmap->mddev->flags);
15471546 sector &= ~((1ULL << CHUNK_BLOCK_SHIFT(bitmap)) - 1);
15481547 s = 0;
15491548 while (s < sector && s < bitmap->mddev->resync_max_sectors) {
drivers/md/md.c+10−15
@@ -2167,9 +2167,9 @@ repeat: · 2166 unmodified lines
21672167 rdev->recovery_offset = mddev->curr_resync_completed;
21682168
21692169 }
2170− if (mddev->external || !mddev->persistent) {
2171− clear_bit(MD_CHANGE_DEVS, &mddev->flags);
2170+ if (!mddev->persistent) {
21722171 clear_bit(MD_CHANGE_CLEAN, &mddev->flags);
2172+ clear_bit(MD_CHANGE_DEVS, &mddev->flags);
21732173 wake_up(&mddev->sb_wait);
21742174 return;
21752175 }
@@ -2178,7 +2178,6 @@ repeat: · 2 unmodified lines
21782178
21792179 mddev->utime = get_seconds();
21802180
2181− set_bit(MD_CHANGE_PENDING, &mddev->flags);
21822181 if (test_and_clear_bit(MD_CHANGE_DEVS, &mddev->flags))
21832182 force_change = 1;
21842183 if (test_and_clear_bit(MD_CHANGE_CLEAN, &mddev->flags))
@@ -3371,7 +3370,7 @@ array_state_show(mddev_t *mddev, char *page) · 1186 unmodified lines
33713370 case 0:
33723371 if (mddev->in_sync)
33733372 st = clean;
3374− else if (test_bit(MD_CHANGE_CLEAN, &mddev->flags))
3373+ else if (test_bit(MD_CHANGE_PENDING, &mddev->flags))
33753374 st = write_pending;
33763375 else if (mddev->safemode)
33773376 st = active_idle;
@@ -3452,9 +3451,7 @@ array_state_store(mddev_t *mddev, const char *buf, size_t len) · 74 unmodified lines
34523451 mddev->in_sync = 1;
34533452 if (mddev->safemode == 1)
34543453 mddev->safemode = 0;
3455− if (mddev->persistent)
3456− set_bit(MD_CHANGE_CLEAN,
3457− &mddev->flags);
3454+ set_bit(MD_CHANGE_CLEAN, &mddev->flags);
34583455 }
34593456 err = 0;
34603457 } else
@@ -3466,8 +3463,7 @@ array_state_store(mddev_t *mddev, const char *buf, size_t len) · 5 unmodified lines
34663463 case active:
34673464 if (mddev->pers) {
34683465 restart_array(mddev);
3469− if (mddev->external)
3470− clear_bit(MD_CHANGE_CLEAN, &mddev->flags);
3466+ clear_bit(MD_CHANGE_PENDING, &mddev->flags);
34713467 wake_up(&mddev->sb_wait);
34723468 err = 0;
34733469 } else {
@@ -6572,6 +6568,7 @@ void md_write_start(mddev_t *mddev, struct bio *bi) · 3098 unmodified lines
65726568 if (mddev->in_sync) {
65736569 mddev->in_sync = 0;
65746570 set_bit(MD_CHANGE_CLEAN, &mddev->flags);
6571+ set_bit(MD_CHANGE_PENDING, &mddev->flags);
65756572 md_wakeup_thread(mddev->thread);
65766573 did_change = 1;
65776574 }
@@ -6580,7 +6577,6 @@ void md_write_start(mddev_t *mddev, struct bio *bi) · 2 unmodified lines
65806577 if (did_change)
65816578 sysfs_notify_dirent_safe(mddev->sysfs_state);
65826579 wait_event(mddev->sb_wait,
6583− !test_bit(MD_CHANGE_CLEAN, &mddev->flags) &&
65846580 !test_bit(MD_CHANGE_PENDING, &mddev->flags));
65856581 }
65866582
@@ -6616,6 +6612,7 @@ int md_allow_write(mddev_t *mddev) · 29 unmodified lines
66166612 if (mddev->in_sync) {
66176613 mddev->in_sync = 0;
66186614 set_bit(MD_CHANGE_CLEAN, &mddev->flags);
6615+ set_bit(MD_CHANGE_PENDING, &mddev->flags);
66196616 if (mddev->safemode_delay &&
66206617 mddev->safemode == 0)
66216618 mddev->safemode = 1;
@@ -6625,7 +6622,7 @@ int md_allow_write(mddev_t *mddev) · 3 unmodified lines
66256622 } else
66266623 spin_unlock_irq(&mddev->write_lock);
66276624
6628− if (test_bit(MD_CHANGE_CLEAN, &mddev->flags))
6625+ if (test_bit(MD_CHANGE_PENDING, &mddev->flags))
66296626 return -EAGAIN;
66306627 else
66316628 return 0;
@@ -6823,8 +6820,7 @@ void md_do_sync(mddev_t *mddev) · 191 unmodified lines
68236820 atomic_read(&mddev->recovery_active) == 0);
68246821 mddev->curr_resync_completed =
68256822 mddev->curr_resync;
6826− if (mddev->persistent)
6827− set_bit(MD_CHANGE_CLEAN, &mddev->flags);
6823+ set_bit(MD_CHANGE_CLEAN, &mddev->flags);
68286824 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
68296825 }
68306826
@@ -7103,8 +7099,7 @@ void md_check_recovery(mddev_t *mddev) · 272 unmodified lines
71037099 mddev->recovery_cp == MaxSector) {
71047100 mddev->in_sync = 1;
71057101 did_change = 1;
7106− if (mddev->persistent)
7107− set_bit(MD_CHANGE_CLEAN, &mddev->flags);
7102+ set_bit(MD_CHANGE_CLEAN, &mddev->flags);
71087103 }
71097104 if (mddev->safemode == 1)
71107105 mddev->safemode = 0;
drivers/md/md.h+1−1
@@ -140,7 +140,7 @@ struct mddev_s · 139 unmodified lines
140140 unsigned long flags;
141141 #define MD_CHANGE_DEVS 0 /* Some device status has changed */
142142 #define MD_CHANGE_CLEAN 1 /* transition to or from 'clean' */
143−#define MD_CHANGE_PENDING 2 /* superblock update in progress */
143+#define MD_CHANGE_PENDING 2 /* switch from 'clean' to 'active' in progress */
144144
145145 int suspended;
146146 atomic_t active_io;
drivers/mmc/core/sdio.c+2−3
@@ -362,9 +362,8 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, · 361 unmodified lines
362362 goto err;
363363 }
364364
365− err = mmc_sd_get_cid(host, host->ocr & ocr, card->raw_cid);
366−
367− if (!err) {
365+ if (ocr & R4_MEMORY_PRESENT
366+ && mmc_sd_get_cid(host, host->ocr & ocr, card->raw_cid) == 0) {
368367 card->type = MMC_TYPE_SD_COMBO;
369368
370369 if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO ||
drivers/mmc/host/at91_mci.c+1−0
@@ -66,6 +66,7 @@ · 65 unmodified lines
6666 #include <linux/clk.h>
6767 #include <linux/atmel_pdc.h>
6868 #include <linux/gfp.h>
69+#include <linux/highmem.h>
6970
7071 #include <linux/mmc/host.h>
7172
drivers/mmc/host/imxmmc.c+2−1
@@ -148,11 +148,12 @@ static int imxmci_start_clock(struct imxmci_host *host) · 147 unmodified lines
148148
149149 while (delay--) {
150150 reg = readw(host->base + MMC_REG_STATUS);
151− if (reg & STATUS_CARD_BUS_CLK_RUN)
151+ if (reg & STATUS_CARD_BUS_CLK_RUN) {
152152 /* Check twice before cut */
153153 reg = readw(host->base + MMC_REG_STATUS);
154154 if (reg & STATUS_CARD_BUS_CLK_RUN)
155155 return 0;
156+ }
156157
157158 if (test_bit(IMXMCI_PEND_STARTED_b, &host->pending_events))
158159 return 0;
drivers/mmc/host/omap_hsmmc.c+1−2
@@ -2305,7 +2305,6 @@ static int omap_hsmmc_suspend(struct device *dev) · 2304 unmodified lines
23052305 int ret = 0;
23062306 struct platform_device *pdev = to_platform_device(dev);
23072307 struct omap_hsmmc_host *host = platform_get_drvdata(pdev);
2308− pm_message_t state = PMSG_SUSPEND; /* unused by MMC core */
23092308
23102309 if (host && host->suspended)
23112310 return 0;
@@ -2324,8 +2323,8 @@ static int omap_hsmmc_suspend(struct device *dev) · 12 unmodified lines
23242323 }
23252324 }
23262325 cancel_work_sync(&host->mmc_carddetect_work);
2327− mmc_host_enable(host->mmc);
23282326 ret = mmc_suspend_host(host->mmc);
2327+ mmc_host_enable(host->mmc);
23292328 if (ret == 0) {
23302329 omap_hsmmc_disable_irq(host);
23312330 OMAP_HSMMC_WRITE(host->base, HCTL,
drivers/mmc/host/s3cmci.c+1−1
@@ -1600,7 +1600,7 @@ static int __devinit s3cmci_probe(struct platform_device *pdev) · 1599 unmodified lines
16001600 host->pio_active = XFER_NONE;
16011601
16021602 #ifdef CONFIG_MMC_S3C_PIODMA
1603− host->dodma = host->pdata->dma;
1603+ host->dodma = host->pdata->use_dma;
16041604 #endif
16051605
16061606 host->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
drivers/mmc/host/tmio_mmc.c+4−3
@@ -164,6 +164,7 @@ tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd) · 163 unmodified lines
164164 static void tmio_mmc_pio_irq(struct tmio_mmc_host *host)
165165 {
166166 struct mmc_data *data = host->data;
167+ void *sg_virt;
167168 unsigned short *buf;
168169 unsigned int count;
169170 unsigned long flags;
@@ -173,8 +174,8 @@ static void tmio_mmc_pio_irq(struct tmio_mmc_host *host) · 3 unmodified lines
173174 return;
174175 }
175176
176− buf = (unsigned short *)(tmio_mmc_kmap_atomic(host, &flags) +
177− host->sg_off);
177+ sg_virt = tmio_mmc_kmap_atomic(host->sg_ptr, &flags);
178+ buf = (unsigned short *)(sg_virt + host->sg_off);
178179
179180 count = host->sg_ptr->length - host->sg_off;
180181 if (count > data->blksz)
@@ -191,7 +192,7 @@ static void tmio_mmc_pio_irq(struct tmio_mmc_host *host) · 10 unmodified lines
191192
192193 host->sg_off += count;
193194
194− tmio_mmc_kunmap_atomic(host, &flags);
195+ tmio_mmc_kunmap_atomic(sg_virt, &flags);
195196
196197 if (host->sg_off == host->sg_ptr->length)
197198 tmio_mmc_next_sg(host);
drivers/mmc/host/tmio_mmc.h+4−9
@@ -82,10 +82,7 @@ · 81 unmodified lines
8282
8383 #define ack_mmc_irqs(host, i) \
8484 do { \
85− u32 mask;\
86− mask = sd_ctrl_read32((host), CTL_STATUS); \
87− mask &= ~((i) & TMIO_MASK_IRQ); \
88− sd_ctrl_write32((host), CTL_STATUS, mask); \
85+ sd_ctrl_write32((host), CTL_STATUS, ~(i)); \
8986 } while (0)
9087
9188
@@ -177,19 +174,17 @@ static inline int tmio_mmc_next_sg(struct tmio_mmc_host *host) · 85 unmodified lines
177174 return --host->sg_len;
178175 }
179176
180−static inline char *tmio_mmc_kmap_atomic(struct tmio_mmc_host *host,
177+static inline char *tmio_mmc_kmap_atomic(struct scatterlist *sg,
181178 unsigned long *flags)
182179 {
183− struct scatterlist *sg = host->sg_ptr;
184−
185180 local_irq_save(*flags);
186181 return kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset;
187182 }
188183
189−static inline void tmio_mmc_kunmap_atomic(struct tmio_mmc_host *host,
184+static inline void tmio_mmc_kunmap_atomic(void *virt,
190185 unsigned long *flags)
191186 {
192− kunmap_atomic(sg_page(host->sg_ptr), KM_BIO_SRC_IRQ);
187+ kunmap_atomic(virt, KM_BIO_SRC_IRQ);
193188 local_irq_restore(*flags);
194189 }
195190
drivers/mtd/ubi/Kconfig.debug+1−1
@@ -6,7 +6,7 @@ config MTD_UBI_DEBUG · 5 unmodified lines
66 depends on SYSFS
77 depends on MTD_UBI
88 select DEBUG_FS
9− select KALLSYMS_ALL
9+ select KALLSYMS_ALL if KALLSYMS && DEBUG_KERNEL
1010 help
1111 This option enables UBI debugging.
1212
drivers/mtd/ubi/cdev.c+6−6
@@ -798,18 +798,18 @@ static int rename_volumes(struct ubi_device *ubi, · 797 unmodified lines
798798 goto out_free;
799799 }
800800
801− re = kzalloc(sizeof(struct ubi_rename_entry), GFP_KERNEL);
802− if (!re) {
801+ re1 = kzalloc(sizeof(struct ubi_rename_entry), GFP_KERNEL);
802+ if (!re1) {
803803 err = -ENOMEM;
804804 ubi_close_volume(desc);
805805 goto out_free;
806806 }
807807
808− re->remove = 1;
809− re->desc = desc;
810− list_add(&re->list, &rename_list);
808+ re1->remove = 1;
809+ re1->desc = desc;
810+ list_add(&re1->list, &rename_list);
811811 dbg_msg("will remove volume %d, name \"%s\"",
812− re->desc->vol->vol_id, re->desc->vol->name);
812+ re1->desc->vol->vol_id, re1->desc->vol->name);
813813 }
814814
815815 mutex_lock(&ubi->device_mutex);
drivers/mtd/ubi/scan.c+1−1
@@ -843,7 +843,7 @@ static int process_eb(struct ubi_device *ubi, struct ubi_scan_info *si, · 842 unmodified lines
843843 case UBI_COMPAT_DELETE:
844844 ubi_msg("\"delete\" compatible internal volume %d:%d"
845845 " found, will remove it", vol_id, lnum);
846− err = add_to_list(si, pnum, ec, &si->corr);
846+ err = add_to_list(si, pnum, ec, &si->erase);
847847 if (err)
848848 return err;
849849 return 0;
drivers/mtd/ubi/wl.c+2−1
@@ -1212,7 +1212,8 @@ int ubi_wl_scrub_peb(struct ubi_device *ubi, int pnum) · 1211 unmodified lines
12121212 retry:
12131213 spin_lock(&ubi->wl_lock);
12141214 e = ubi->lookuptbl[pnum];
1215− if (e == ubi->move_from || in_wl_tree(e, &ubi->scrub)) {
1215+ if (e == ubi->move_from || in_wl_tree(e, &ubi->scrub) ||
1216+ in_wl_tree(e, &ubi->erroneous)) {
12161217 spin_unlock(&ubi->wl_lock);
12171218 return 0;
12181219 }
drivers/net/3c59x.c+22−8
@@ -633,7 +633,8 @@ struct vortex_private { · 632 unmodified lines
633633 open:1,
634634 medialock:1,
635635 must_free_region:1, /* Flag: if zero, Cardbus owns the I/O region */
636− large_frames:1; /* accept large frames */
636+ large_frames:1, /* accept large frames */
637+ handling_irq:1; /* private in_irq indicator */
637638 int drv_flags;
638639 u16 status_enable;
639640 u16 intr_enable;
@@ -646,7 +647,7 @@ struct vortex_private { · 6 unmodified lines
646647 u16 io_size; /* Size of PCI region (for release_region) */
647648
648649 /* Serialises access to hardware other than MII and variables below.
649− * The lock hierarchy is rtnl_lock > lock > mii_lock > window_lock. */
650+ * The lock hierarchy is rtnl_lock > {lock, mii_lock} > window_lock. */
650651 spinlock_t lock;
651652
652653 spinlock_t mii_lock; /* Serialises access to MII */
@@ -1993,10 +1994,9 @@ vortex_error(struct net_device *dev, int status) · 1340 unmodified lines
19931994 }
19941995 }
19951996
1996− if (status & RxEarly) { /* Rx early is unused. */
1997− vortex_rx(dev);
1997+ if (status & RxEarly) /* Rx early is unused. */
19981998 iowrite16(AckIntr | RxEarly, ioaddr + EL3_CMD);
1999− }
1999+
20002000 if (status & StatsFull) { /* Empty statistics. */
20012001 static int DoneDidThat;
20022002 if (vortex_debug > 4)
@@ -2133,6 +2133,15 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev) · 130 unmodified lines
21332133 dev->name, vp->cur_tx);
21342134 }
21352135
2136+ /*
2137+ * We can't allow a recursion from our interrupt handler back into the
2138+ * tx routine, as they take the same spin lock, and that causes
2139+ * deadlock. Just return NETDEV_TX_BUSY and let the stack try again in
2140+ * a bit
2141+ */
2142+ if (vp->handling_irq)
2143+ return NETDEV_TX_BUSY;
2144+
21362145 if (vp->cur_tx - vp->dirty_tx >= TX_RING_SIZE) {
21372146 if (vortex_debug > 0)
21382147 pr_warning("%s: BUG! Tx Ring full, refusing to send buffer.\n",
@@ -2288,7 +2297,12 @@ vortex_interrupt(int irq, void *dev_id) · 149 unmodified lines
22882297 if (status & (HostError | RxEarly | StatsFull | TxComplete | IntReq)) {
22892298 if (status == 0xffff)
22902299 break;
2300+ if (status & RxEarly)
2301+ vortex_rx(dev);
2302+ spin_unlock(&vp->window_lock);
22912303 vortex_error(dev, status);
2304+ spin_lock(&vp->window_lock);
2305+ window_set(vp, 7);
22922306 }
22932307
22942308 if (--work_done < 0) {
@@ -2335,11 +2349,13 @@ boomerang_interrupt(int irq, void *dev_id) · 40 unmodified lines
23352349
23362350 ioaddr = vp->ioaddr;
23372351
2352+
23382353 /*
23392354 * It seems dopey to put the spinlock this early, but we could race against vortex_tx_timeout
23402355 * and boomerang_start_xmit
23412356 */
23422357 spin_lock(&vp->lock);
2358+ vp->handling_irq = 1;
23432359
23442360 status = ioread16(ioaddr + EL3_STATUS);
23452361
@@ -2447,6 +2463,7 @@ boomerang_interrupt(int irq, void *dev_id) · 101 unmodified lines
24472463 pr_debug("%s: exiting interrupt, status %4.4x.\n",
24482464 dev->name, status);
24492465 handler_exit:
2466+ vp->handling_irq = 0;
24502467 spin_unlock(&vp->lock);
24512468 return IRQ_HANDLED;
24522469 }
@@ -2971,7 +2988,6 @@ static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) · 518 unmodified lines
29712988 {
29722989 int err;
29732990 struct vortex_private *vp = netdev_priv(dev);
2974− unsigned long flags;
29752991 pci_power_t state = 0;
29762992
29772993 if(VORTEX_PCI(vp))
@@ -2981,9 +2997,7 @@ static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) · 3 unmodified lines
29812997
29822998 if(state != 0)
29832999 pci_set_power_state(VORTEX_PCI(vp), PCI_D0);
2984− spin_lock_irqsave(&vp->lock, flags);
29853000 err = generic_mii_ioctl(&vp->mii, if_mii(rq), cmd, NULL);
2986− spin_unlock_irqrestore(&vp->lock, flags);
29873001 if(state != 0)
29883002 pci_set_power_state(VORTEX_PCI(vp), state);
29893003
drivers/net/b44.c+9−0
@@ -848,6 +848,15 @@ static int b44_poll(struct napi_struct *napi, int budget) · 847 unmodified lines
848848 b44_tx(bp);
849849 /* spin_unlock(&bp->tx_lock); */
850850 }
851+ if (bp->istat & ISTAT_RFO) { /* fast recovery, in ~20msec */
852+ bp->istat &= ~ISTAT_RFO;
853+ b44_disable_ints(bp);
854+ ssb_device_enable(bp->sdev, 0); /* resets ISTAT_RFO */
855+ b44_init_rings(bp);
856+ b44_init_hw(bp, B44_FULL_RESET_SKIP_PHY);
857+ netif_wake_queue(bp->dev);
858+ }
859+
851860 spin_unlock_irqrestore(&bp->lock, flags);
852861
853862 work_done = 0;
drivers/net/benet/be.h+1−0
@@ -181,6 +181,7 @@ struct be_drvr_stats { · 180 unmodified lines
181181 u64 be_rx_bytes_prev;
182182 u64 be_rx_pkts;
183183 u32 be_rx_rate;
184+ u32 be_rx_mcast_pkt;
184185 /* number of non ether type II frames dropped where
185186 * frame len > length field of Mac Hdr */
186187 u32 be_802_3_dropped_frames;
drivers/net/benet/be_cmds.c+3−5
@@ -140,10 +140,8 @@ int be_process_mcc(struct be_adapter *adapter, int *status) · 139 unmodified lines
140140 while ((compl = be_mcc_compl_get(adapter))) {
141141 if (compl->flags & CQE_FLAGS_ASYNC_MASK) {
142142 /* Interpret flags as an async trailer */
143− BUG_ON(!is_link_state_evt(compl->flags));
144−
145− /* Interpret compl as a async link evt */
146− be_async_link_state_process(adapter,
143+ if (is_link_state_evt(compl->flags))
144+ be_async_link_state_process(adapter,
147145 (struct be_async_event_link_state *) compl);
148146 } else if (compl->flags & CQE_FLAGS_COMPLETED_MASK) {
149147 *status = be_mcc_compl_process(adapter, compl);
@@ -207,7 +205,7 @@ static int be_mbox_db_ready_wait(struct be_adapter *adapter, void __iomem *db) · 57 unmodified lines
207205
208206 if (msecs > 4000) {
209207 dev_err(&adapter->pdev->dev, "mbox poll timed out\n");
210− be_dump_ue(adapter);
208+ be_detect_dump_ue(adapter);
211209 return -1;
212210 }
213211
drivers/net/benet/be_cmds.h+1−1
@@ -992,5 +992,5 @@ extern int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num, · 991 unmodified lines
992992 extern int be_cmd_get_phy_info(struct be_adapter *adapter,
993993 struct be_dma_mem *cmd);
994994 extern int be_cmd_set_qos(struct be_adapter *adapter, u32 bps, u32 domain);
995−extern void be_dump_ue(struct be_adapter *adapter);
995+extern void be_detect_dump_ue(struct be_adapter *adapter);
996996
drivers/net/benet/be_ethtool.c+1−0
@@ -60,6 +60,7 @@ static const struct be_ethtool_stat et_stats[] = { · 59 unmodified lines
6060 {DRVSTAT_INFO(be_rx_events)},
6161 {DRVSTAT_INFO(be_tx_compl)},
6262 {DRVSTAT_INFO(be_rx_compl)},
63+ {DRVSTAT_INFO(be_rx_mcast_pkt)},
6364 {DRVSTAT_INFO(be_ethrx_post_fail)},
6465 {DRVSTAT_INFO(be_802_3_dropped_frames)},
6566 {DRVSTAT_INFO(be_802_3_malformed_frames)},
drivers/net/benet/be_hw.h+5−2
@@ -167,8 +167,11 @@ · 166 unmodified lines
167167 #define FLASH_FCoE_BIOS_START_g3 (13631488)
168168 #define FLASH_REDBOOT_START_g3 (262144)
169169
170−
171−
170+/************* Rx Packet Type Encoding **************/
171+#define BE_UNICAST_PACKET 0
172+#define BE_MULTICAST_PACKET 1
173+#define BE_BROADCAST_PACKET 2
174+#define BE_RSVD_PACKET 3
172175
173176 /*
174177 * BE descriptors: host memory data structures whose formats
drivers/net/benet/be_main.c+19−28
@@ -247,6 +247,7 @@ void netdev_stats_update(struct be_adapter *adapter) · 246 unmodified lines
247247 dev_stats->tx_packets = drvr_stats(adapter)->be_tx_pkts;
248248 dev_stats->rx_bytes = drvr_stats(adapter)->be_rx_bytes;
249249 dev_stats->tx_bytes = drvr_stats(adapter)->be_tx_bytes;
250+ dev_stats->multicast = drvr_stats(adapter)->be_rx_mcast_pkt;
250251
251252 /* bad pkts received */
252253 dev_stats->rx_errors = port_stats->rx_crc_errors +
@@ -294,7 +295,6 @@ void netdev_stats_update(struct be_adapter *adapter) · 41 unmodified lines
294295 /* no space available in linux */
295296 dev_stats->tx_dropped = 0;
296297
297− dev_stats->multicast = port_stats->rx_multicast_frames;
298298 dev_stats->collisions = 0;
299299
300300 /* detailed tx_errors */
@@ -848,7 +848,7 @@ static void be_rx_rate_update(struct be_adapter *adapter) · 547 unmodified lines
848848 }
849849
850850 static void be_rx_stats_update(struct be_adapter *adapter,
851− u32 pktsize, u16 numfrags)
851+ u32 pktsize, u16 numfrags, u8 pkt_type)
852852 {
853853 struct be_drvr_stats *stats = drvr_stats(adapter);
854854
@@ -856,6 +856,9 @@ static void be_rx_stats_update(struct be_adapter *adapter, · 1 unmodified line
856856 stats->be_rx_frags += numfrags;
857857 stats->be_rx_bytes += pktsize;
858858 stats->be_rx_pkts++;
859+
860+ if (pkt_type == BE_MULTICAST_PACKET)
861+ stats->be_rx_mcast_pkt++;
859862 }
860863
861864 static inline bool do_pkt_csum(struct be_eth_rx_compl *rxcp, bool cso)
@@ -925,9 +928,11 @@ static void skb_fill_rx_data(struct be_adapter *adapter, · 63 unmodified lines
925928 u16 rxq_idx, i, j;
926929 u32 pktsize, hdr_len, curr_frag_len, size;
927930 u8 *start;
931+ u8 pkt_type;
928932
929933 rxq_idx = AMAP_GET_BITS(struct amap_eth_rx_compl, fragndx, rxcp);
930934 pktsize = AMAP_GET_BITS(struct amap_eth_rx_compl, pktsize, rxcp);
935+ pkt_type = AMAP_GET_BITS(struct amap_eth_rx_compl, cast_enc, rxcp);
931936
932937 page_info = get_rx_page_info(adapter, rxq_idx);
933938
@@ -993,7 +998,7 @@ static void skb_fill_rx_data(struct be_adapter *adapter, · 59 unmodified lines
993998 BUG_ON(j > MAX_SKB_FRAGS);
994999
9951000 done:
996− be_rx_stats_update(adapter, pktsize, num_rcvd);
1001+ be_rx_stats_update(adapter, pktsize, num_rcvd, pkt_type);
9971002 }
9981003
9991004 /* Process the RX completion indicated by rxcp when GRO is disabled */
@@ -1060,6 +1065,7 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter, · 60 unmodified lines
10601065 u32 num_rcvd, pkt_size, remaining, vlanf, curr_frag_len;
10611066 u16 i, rxq_idx = 0, vid, j;
10621067 u8 vtm;
1068+ u8 pkt_type;
10631069
10641070 num_rcvd = AMAP_GET_BITS(struct amap_eth_rx_compl, numfrags, rxcp);
10651071 /* Is it a flush compl that has no data */
@@ -1070,6 +1076,7 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter, · 4 unmodified lines
10701076 vlanf = AMAP_GET_BITS(struct amap_eth_rx_compl, vtp, rxcp);
10711077 rxq_idx = AMAP_GET_BITS(struct amap_eth_rx_compl, fragndx, rxcp);
10721078 vtm = AMAP_GET_BITS(struct amap_eth_rx_compl, vtm, rxcp);
1079+ pkt_type = AMAP_GET_BITS(struct amap_eth_rx_compl, cast_enc, rxcp);
10731080
10741081 /* vlanf could be wrongly set in some cards.
10751082 * ignore if vtm is not set */
@@ -1125,7 +1132,7 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter, · 49 unmodified lines
11251132 vlan_gro_frags(&eq_obj->napi, adapter->vlan_grp, vid);
11261133 }
11271134
1128− be_rx_stats_update(adapter, pkt_size, num_rcvd);
1135+ be_rx_stats_update(adapter, pkt_size, num_rcvd, pkt_type);
11291136 }
11301137
11311138 static struct be_eth_rx_compl *be_rx_compl_get(struct be_adapter *adapter)
@@ -1743,26 +1750,7 @@ static int be_poll_tx_mcc(struct napi_struct *napi, int budget) · 611 unmodified lines
17431750 return 1;
17441751 }
17451752
1746−static inline bool be_detect_ue(struct be_adapter *adapter)
1747−{
1748− u32 online0 = 0, online1 = 0;
1749−
1750− pci_read_config_dword(adapter->pdev, PCICFG_ONLINE0, &online0);
1751−
1752− pci_read_config_dword(adapter->pdev, PCICFG_ONLINE1, &online1);
1753−
1754− if (!online0 || !online1) {
1755− adapter->ue_detected = true;
1756− dev_err(&adapter->pdev->dev,
1757− "UE Detected!! online0=%d online1=%d\n",
1758− online0, online1);
1759− return true;
1760− }
1761−
1762− return false;
1763−}
1764−
1765−void be_dump_ue(struct be_adapter *adapter)
1753+void be_detect_dump_ue(struct be_adapter *adapter)
17661754 {
17671755 u32 ue_status_lo, ue_status_hi, ue_status_lo_mask, ue_status_hi_mask;
17681756 u32 i;
@@ -1779,6 +1767,11 @@ void be_dump_ue(struct be_adapter *adapter) · 10 unmodified lines
17791767 ue_status_lo = (ue_status_lo & (~ue_status_lo_mask));
17801768 ue_status_hi = (ue_status_hi & (~ue_status_hi_mask));
17811769
1770+ if (ue_status_lo || ue_status_hi) {
1771+ adapter->ue_detected = true;
1772+ dev_err(&adapter->pdev->dev, "UE Detected!!\n");
1773+ }
1774+
17821775 if (ue_status_lo) {
17831776 for (i = 0; ue_status_lo; ue_status_lo >>= 1, i++) {
17841777 if (ue_status_lo & 1)
@@ -1814,10 +1807,8 @@ static void be_worker(struct work_struct *work) · 29 unmodified lines
18141807 adapter->rx_post_starved = false;
18151808 be_post_rx_frags(adapter);
18161809 }
1817− if (!adapter->ue_detected) {
1818− if (be_detect_ue(adapter))
1819− be_dump_ue(adapter);
1820− }
1810+ if (!adapter->ue_detected)
1811+ be_detect_dump_ue(adapter);
18211812
18221813 schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
18231814 }
drivers/net/bonding/bond_main.c+39−17
@@ -2797,9 +2797,15 @@ void bond_loadbalance_arp_mon(struct work_struct *work) · 2796 unmodified lines
27972797 * so it can wait
27982798 */
27992799 bond_for_each_slave(bond, slave, i) {
2800+ unsigned long trans_start = dev_trans_start(slave->dev);
2801+
28002802 if (slave->link != BOND_LINK_UP) {
2801− if (time_before_eq(jiffies, dev_trans_start(slave->dev) + delta_in_ticks) &&
2802− time_before_eq(jiffies, slave->dev->last_rx + delta_in_ticks)) {
2803+ if (time_in_range(jiffies,
2804+ trans_start - delta_in_ticks,
2805+ trans_start + delta_in_ticks) &&
2806+ time_in_range(jiffies,
2807+ slave->dev->last_rx - delta_in_ticks,
2808+ slave->dev->last_rx + delta_in_ticks)) {
28032809
28042810 slave->link = BOND_LINK_UP;
28052811 slave->state = BOND_STATE_ACTIVE;
@@ -2827,8 +2833,12 @@ void bond_loadbalance_arp_mon(struct work_struct *work) · 21 unmodified lines
28272833 * when the source ip is 0, so don't take the link down
28282834 * if we don't know our ip yet
28292835 */
2830− if (time_after_eq(jiffies, dev_trans_start(slave->dev) + 2*delta_in_ticks) ||
2831− (time_after_eq(jiffies, slave->dev->last_rx + 2*delta_in_ticks))) {
2836+ if (!time_in_range(jiffies,
2837+ trans_start - delta_in_ticks,
2838+ trans_start + 2 * delta_in_ticks) ||
2839+ !time_in_range(jiffies,
2840+ slave->dev->last_rx - delta_in_ticks,
2841+ slave->dev->last_rx + 2 * delta_in_ticks)) {
28322842
28332843 slave->link = BOND_LINK_DOWN;
28342844 slave->state = BOND_STATE_BACKUP;
@@ -2883,13 +2893,16 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks) · 48 unmodified lines
28832893 {
28842894 struct slave *slave;
28852895 int i, commit = 0;
2896+ unsigned long trans_start;
28862897
28872898 bond_for_each_slave(bond, slave, i) {
28882899 slave->new_link = BOND_LINK_NOCHANGE;
28892900
28902901 if (slave->link != BOND_LINK_UP) {
2891− if (time_before_eq(jiffies, slave_last_rx(bond, slave) +
2892− delta_in_ticks)) {
2902+ if (time_in_range(jiffies,
2903+ slave_last_rx(bond, slave) - delta_in_ticks,
2904+ slave_last_rx(bond, slave) + delta_in_ticks)) {
2905+
28932906 slave->new_link = BOND_LINK_UP;
28942907 commit++;
28952908 }
@@ -2902,8 +2915,9 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks) · 6 unmodified lines
29022915 * active. This avoids bouncing, as the last receive
29032916 * times need a full ARP monitor cycle to be updated.
29042917 */
2905− if (!time_after_eq(jiffies, slave->jiffies +
2906− 2 * delta_in_ticks))
2918+ if (time_in_range(jiffies,
2919+ slave->jiffies - delta_in_ticks,
2920+ slave->jiffies + 2 * delta_in_ticks))
29072921 continue;
29082922
29092923 /*
@@ -2921,8 +2935,10 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks) · 11 unmodified lines
29212935 */
29222936 if (slave->state == BOND_STATE_BACKUP &&
29232937 !bond->current_arp_slave &&
2924− time_after(jiffies, slave_last_rx(bond, slave) +
2925− 3 * delta_in_ticks)) {
2938+ !time_in_range(jiffies,
2939+ slave_last_rx(bond, slave) - delta_in_ticks,
2940+ slave_last_rx(bond, slave) + 3 * delta_in_ticks)) {
2941+
29262942 slave->new_link = BOND_LINK_DOWN;
29272943 commit++;
29282944 }
@@ -2933,11 +2949,15 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks) · 4 unmodified lines
29332949 * - (more than 2*delta since receive AND
29342950 * the bond has an IP address)
29352951 */
2952+ trans_start = dev_trans_start(slave->dev);
29362953 if ((slave->state == BOND_STATE_ACTIVE) &&
2937− (time_after_eq(jiffies, dev_trans_start(slave->dev) +
2938− 2 * delta_in_ticks) ||
2939− (time_after_eq(jiffies, slave_last_rx(bond, slave)
2940− + 2 * delta_in_ticks)))) {
2954+ (!time_in_range(jiffies,
2955+ trans_start - delta_in_ticks,
2956+ trans_start + 2 * delta_in_ticks) ||
2957+ !time_in_range(jiffies,
2958+ slave_last_rx(bond, slave) - delta_in_ticks,
2959+ slave_last_rx(bond, slave) + 2 * delta_in_ticks))) {
2960+
29412961 slave->new_link = BOND_LINK_DOWN;
29422962 commit++;
29432963 }
@@ -2956,6 +2976,7 @@ static void bond_ab_arp_commit(struct bonding *bond, int delta_in_ticks) · 12 unmodified lines
29562976 {
29572977 struct slave *slave;
29582978 int i;
2979+ unsigned long trans_start;
29592980
29602981 bond_for_each_slave(bond, slave, i) {
29612982 switch (slave->new_link) {
@@ -2963,10 +2984,11 @@ static void bond_ab_arp_commit(struct bonding *bond, int delta_in_ticks) · 1 unmodified line
29632984 continue;
29642985
29652986 case BOND_LINK_UP:
2987+ trans_start = dev_trans_start(slave->dev);
29662988 if ((!bond->curr_active_slave &&
2967− time_before_eq(jiffies,
2968− dev_trans_start(slave->dev) +
2969− delta_in_ticks)) ||
2989+ time_in_range(jiffies,
2990+ trans_start - delta_in_ticks,
2991+ trans_start + delta_in_ticks)) ||
29702992 bond->curr_active_slave != slave) {
29712993 slave->link = BOND_LINK_UP;
29722994 bond->current_arp_slave = NULL;
drivers/net/caif/Kconfig+1−1
@@ -15,7 +15,7 @@ config CAIF_TTY · 14 unmodified lines
1515
1616 config CAIF_SPI_SLAVE
1717 tristate "CAIF SPI transport driver for slave interface"
18− depends on CAIF
18+ depends on CAIF && HAS_DMA
1919 default n
2020 ---help---
2121 The CAIF Link layer SPI Protocol driver for Slave SPI interface.
drivers/net/ibm_newemac/debug.c+1−1
@@ -238,7 +238,7 @@ void emac_dbg_dump_all(void) · 237 unmodified lines
238238 }
239239
240240 #if defined(CONFIG_MAGIC_SYSRQ)
241−static void emac_sysrq_handler(int key, struct tty_struct *tty)
241+static void emac_sysrq_handler(int key)
242242 {
243243 emac_dbg_dump_all();
244244 }
drivers/net/ks8851.c+21−18
@@ -503,30 +503,33 @@ static void ks8851_rx_pkts(struct ks8851_net *ks) · 502 unmodified lines
503503 ks8851_wrreg16(ks, KS_RXQCR,
504504 ks->rc_rxqcr | RXQCR_SDA | RXQCR_ADRFE);
505505
506− if (rxlen > 0) {
507− skb = netdev_alloc_skb(ks->netdev, rxlen + 2 + 8);
508− if (!skb) {
509− /* todo - dump frame and move on */
510− }
506+ if (rxlen > 4) {
507+ unsigned int rxalign;
508+
509+ rxlen -= 4;
510+ rxalign = ALIGN(rxlen, 4);
511+ skb = netdev_alloc_skb_ip_align(ks->netdev, rxalign);
512+ if (skb) {
511513
512− /* two bytes to ensure ip is aligned, and four bytes
513− * for the status header and 4 bytes of garbage */
514− skb_reserve(skb, 2 + 4 + 4);
514+ /* 4 bytes of status header + 4 bytes of
515+ * garbage: we put them before ethernet
516+ * header, so that they are copied,
517+ * but ignored.
518+ */
515519
516− rxpkt = skb_put(skb, rxlen - 4) - 8;
520+ rxpkt = skb_put(skb, rxlen) - 8;
517521
518− /* align the packet length to 4 bytes, and add 4 bytes
519− * as we're getting the rx status header as well */
520− ks8851_rdfifo(ks, rxpkt, ALIGN(rxlen, 4) + 8);
522+ ks8851_rdfifo(ks, rxpkt, rxalign + 8);
521523
522− if (netif_msg_pktdata(ks))
523− ks8851_dbg_dumpkkt(ks, rxpkt);
524+ if (netif_msg_pktdata(ks))
525+ ks8851_dbg_dumpkkt(ks, rxpkt);
524526
525− skb->protocol = eth_type_trans(skb, ks->netdev);
526− netif_rx(skb);
527+ skb->protocol = eth_type_trans(skb, ks->netdev);
528+ netif_rx(skb);
527529
528− ks->netdev->stats.rx_packets++;
529− ks->netdev->stats.rx_bytes += rxlen - 4;
530+ ks->netdev->stats.rx_packets++;
531+ ks->netdev->stats.rx_bytes += rxlen;
532+ }
530533 }
531534
532535 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);
drivers/net/ll_temac_main.c+1−0
@@ -38,6 +38,7 @@ · 37 unmodified lines
3838 #include <linux/of_device.h>
3939 #include <linux/of_mdio.h>
4040 #include <linux/of_platform.h>
41+#include <linux/of_address.h>
4142 #include <linux/skbuff.h>
4243 #include <linux/spinlock.h>
4344 #include <linux/tcp.h> /* needed for sizeof(tcphdr) */
drivers/net/ll_temac_mdio.c+1−0
@@ -10,6 +10,7 @@ · 9 unmodified lines
1010 #include <linux/phy.h>
1111 #include <linux/of.h>
1212 #include <linux/of_device.h>
13+#include <linux/of_address.h>
1314 #include <linux/slab.h>
1415 #include <linux/of_mdio.h>
1516
drivers/net/netxen/netxen_nic_main.c+8−1
@@ -2131,9 +2131,16 @@ static int netxen_nic_poll(struct napi_struct *napi, int budget) · 2130 unmodified lines
21312131 #ifdef CONFIG_NET_POLL_CONTROLLER
21322132 static void netxen_nic_poll_controller(struct net_device *netdev)
21332133 {
2134+ int ring;
2135+ struct nx_host_sds_ring *sds_ring;
21342136 struct netxen_adapter *adapter = netdev_priv(netdev);
2137+ struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
2138+
21352139 disable_irq(adapter->irq);
2136− netxen_intr(adapter->irq, adapter);
2140+ for (ring = 0; ring < adapter->max_sds_rings; ring++) {
2141+ sds_ring = &recv_ctx->sds_rings[ring];
2142+ netxen_intr(adapter->irq, sds_ring);
2143+ }
21372144 enable_irq(adapter->irq);
21382145 }
21392146 #endif
drivers/net/niu.c+6−10
@@ -7269,32 +7269,28 @@ static int niu_get_ethtool_tcam_all(struct niu *np, · 7268 unmodified lines
72697269 struct niu_parent *parent = np->parent;
72707270 struct niu_tcam_entry *tp;
72717271 int i, idx, cnt;
7272− u16 n_entries;
72737272 unsigned long flags;
7274−
7273+ int ret = 0;
72757274
72767275 /* put the tcam size here */
72777276 nfc->data = tcam_get_size(np);
72787277
72797278 niu_lock_parent(np, flags);
7280− n_entries = nfc->rule_cnt;
72817279 for (cnt = 0, i = 0; i < nfc->data; i++) {
72827280 idx = tcam_get_index(np, i);
72837281 tp = &parent->tcam[idx];
72847282 if (!tp->valid)
72857283 continue;
7284+ if (cnt == nfc->rule_cnt) {
7285+ ret = -EMSGSIZE;
7286+ break;
7287+ }
72867288 rule_locs[cnt] = i;
72877289 cnt++;
72887290 }
72897291 niu_unlock_parent(np, flags);
72907292
7291− if (n_entries != cnt) {
7292− /* print warning, this should not happen */
7293− netdev_info(np->dev, "niu%d: In %s(): n_entries[%d] != cnt[%d]!!!\n",
7294− np->parent->index, __func__, n_entries, cnt);
7295− }
7296−
7297− return 0;
7293+ return ret;
72987294 }
72997295
73007296 static int niu_get_nfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
drivers/net/pcmcia/pcnet_cs.c+1−0
@@ -1637,6 +1637,7 @@ static struct pcmcia_device_id pcnet_ids[] = { · 1636 unmodified lines
16371637 PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCETTX", 0x547e66dc, 0x6fc5459b),
16381638 PCMCIA_DEVICE_PROD_ID12("iPort", "10/100 Ethernet Card", 0x56c538d2, 0x11b0ffc0),
16391639 PCMCIA_DEVICE_PROD_ID12("KANSAI ELECTRIC CO.,LTD", "KLA-PCM/T", 0xb18dc3b4, 0xcc51a956),
1640+ PCMCIA_DEVICE_PROD_ID12("KENTRONICS", "KEP-230", 0xaf8144c9, 0x868f6616),
16401641 PCMCIA_DEVICE_PROD_ID12("KCI", "PE520 PCMCIA Ethernet Adapter", 0xa89b87d3, 0x1eb88e64),
16411642 PCMCIA_DEVICE_PROD_ID12("KINGMAX", "EN10T2T", 0x7bcb459a, 0xa5c81fa5),
16421643 PCMCIA_DEVICE_PROD_ID12("Kingston", "KNE-PC2", 0x1128e633, 0xce2a89b3),
drivers/net/phy/phy_device.c+2−0
@@ -466,6 +466,8 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, · 465 unmodified lines
466466
467467 phydev->interface = interface;
468468
469+ phydev->state = PHY_READY;
470+
469471 /* Do initial configuration here, now that
470472 * we have certain key parameters
471473 * (dev_flags and interface) */
drivers/net/pxa168_eth.c+30−30
@@ -654,15 +654,15 @@ static void eth_port_start(struct net_device *dev) · 653 unmodified lines
654654 /* Assignment of Tx CTRP of given queue */
655655 tx_curr_desc = pep->tx_curr_desc_q;
656656 wrl(pep, ETH_C_TX_DESC_1,
657− (u32) ((struct tx_desc *)pep->tx_desc_dma + tx_curr_desc));
657+ (u32) (pep->tx_desc_dma + tx_curr_desc * sizeof(struct tx_desc)));
658658
659659 /* Assignment of Rx CRDP of given queue */
660660 rx_curr_desc = pep->rx_curr_desc_q;
661661 wrl(pep, ETH_C_RX_DESC_0,
662− (u32) ((struct rx_desc *)pep->rx_desc_dma + rx_curr_desc));
662+ (u32) (pep->rx_desc_dma + rx_curr_desc * sizeof(struct rx_desc)));
663663
664664 wrl(pep, ETH_F_RX_DESC_0,
665− (u32) ((struct rx_desc *)pep->rx_desc_dma + rx_curr_desc));
665+ (u32) (pep->rx_desc_dma + rx_curr_desc * sizeof(struct rx_desc)));
666666
667667 /* Clear all interrupts */
668668 wrl(pep, INT_CAUSE, 0);
@@ -1350,7 +1350,7 @@ static int pxa168_eth_do_ioctl(struct net_device *dev, struct ifreq *ifr, · 681 unmodified lines
13501350 {
13511351 struct pxa168_eth_private *pep = netdev_priv(dev);
13521352 if (pep->phy != NULL)
1353− return phy_mii_ioctl(pep->phy, if_mii(ifr), cmd);
1353+ return phy_mii_ioctl(pep->phy, ifr, cmd);
13541354
13551355 return -EOPNOTSUPP;
13561356 }
@@ -1414,10 +1414,8 @@ static int ethernet_phy_setup(struct net_device *dev) · 57 unmodified lines
14141414 {
14151415 struct pxa168_eth_private *pep = netdev_priv(dev);
14161416
1417− if (pep->pd != NULL) {
1418− if (pep->pd->init)
1419− pep->pd->init();
1420− }
1417+ if (pep->pd->init)
1418+ pep->pd->init();
14211419 pep->phy = phy_scan(pep, pep->pd->phy_addr & 0x1f);
14221420 if (pep->phy != NULL)
14231421 phy_init(pep, pep->pd->speed, pep->pd->duplex);
@@ -1499,7 +1497,7 @@ static int pxa168_eth_probe(struct platform_device *pdev) · 75 unmodified lines
14991497 dev = alloc_etherdev(sizeof(struct pxa168_eth_private));
15001498 if (!dev) {
15011499 err = -ENOMEM;
1502− goto out;
1500+ goto err_clk;
15031501 }
15041502
15051503 platform_set_drvdata(pdev, dev);
@@ -1509,12 +1507,12 @@ static int pxa168_eth_probe(struct platform_device *pdev) · 3 unmodified lines
15091507 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
15101508 if (res == NULL) {
15111509 err = -ENODEV;
1512− goto out;
1510+ goto err_netdev;
15131511 }
15141512 pep->base = ioremap(res->start, res->end - res->start + 1);
15151513 if (pep->base == NULL) {
15161514 err = -ENOMEM;
1517− goto out;
1515+ goto err_netdev;
15181516 }
15191517 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
15201518 BUG_ON(!res);
@@ -1551,7 +1549,7 @@ static int pxa168_eth_probe(struct platform_device *pdev) · 30 unmodified lines
15511549 pep->smi_bus = mdiobus_alloc();
15521550 if (pep->smi_bus == NULL) {
15531551 err = -ENOMEM;
1554− goto out;
1552+ goto err_base;
15551553 }
15561554 pep->smi_bus->priv = pep;
15571555 pep->smi_bus->name = "pxa168_eth smi";
@@ -1560,31 +1558,31 @@ static int pxa168_eth_probe(struct platform_device *pdev) · 2 unmodified lines
15601558 snprintf(pep->smi_bus->id, MII_BUS_ID_SIZE, "%d", pdev->id);
15611559 pep->smi_bus->parent = &pdev->dev;
15621560 pep->smi_bus->phy_mask = 0xffffffff;
1563− if (mdiobus_register(pep->smi_bus) < 0) {
1564− err = -ENOMEM;
1565− goto out;
1566− }
1561+ err = mdiobus_register(pep->smi_bus);
1562+ if (err)
1563+ goto err_free_mdio;
1564+
15671565 pxa168_init_hw(pep);
15681566 err = ethernet_phy_setup(dev);
15691567 if (err)
1570− goto out;
1568+ goto err_mdiobus;
15711569 SET_NETDEV_DEV(dev, &pdev->dev);
15721570 err = register_netdev(dev);
15731571 if (err)
1574− goto out;
1572+ goto err_mdiobus;
15751573 return 0;
1576−out:
1577− if (pep->clk) {
1578− clk_disable(pep->clk);
1579− clk_put(pep->clk);
1580− pep->clk = NULL;
1581− }
1582− if (pep->base) {
1583− iounmap(pep->base);
1584− pep->base = NULL;
1585− }
1586− if (dev)
1587− free_netdev(dev);
1574+
1575+err_mdiobus:
1576+ mdiobus_unregister(pep->smi_bus);
1577+err_free_mdio:
1578+ mdiobus_free(pep->smi_bus);
1579+err_base:
1580+ iounmap(pep->base);
1581+err_netdev:
1582+ free_netdev(dev);
1583+err_clk:
1584+ clk_disable(clk);
1585+ clk_put(clk);
15881586 return err;
15891587 }
15901588
@@ -1608,6 +1606,8 @@ static int pxa168_eth_remove(struct platform_device *pdev) · 17 unmodified lines
16081606
16091607 iounmap(pep->base);
16101608 pep->base = NULL;
1609+ mdiobus_unregister(pep->smi_bus);
1610+ mdiobus_free(pep->smi_bus);
16111611 unregister_netdev(dev);
16121612 flush_scheduled_work();
16131613 free_netdev(dev);
drivers/net/qlcnic/qlcnic_main.c+8−1
@@ -2188,9 +2188,16 @@ static int qlcnic_rx_poll(struct napi_struct *napi, int budget) · 2187 unmodified lines
21882188 #ifdef CONFIG_NET_POLL_CONTROLLER
21892189 static void qlcnic_poll_controller(struct net_device *netdev)
21902190 {
2191+ int ring;
2192+ struct qlcnic_host_sds_ring *sds_ring;
21912193 struct qlcnic_adapter *adapter = netdev_priv(netdev);
2194+ struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
2195+
21922196 disable_irq(adapter->irq);
2193− qlcnic_intr(adapter->irq, adapter);
2197+ for (ring = 0; ring < adapter->max_sds_rings; ring++) {
2198+ sds_ring = &recv_ctx->sds_rings[ring];
2199+ qlcnic_intr(adapter->irq, sds_ring);
2200+ }
21942201 enable_irq(adapter->irq);
21952202 }
21962203 #endif
drivers/net/qlge/qlge_main.c+2−2
@@ -3919,12 +3919,12 @@ static int ql_adapter_down(struct ql_adapter *qdev) · 3918 unmodified lines
39193919 for (i = 0; i < qdev->rss_ring_count; i++)
39203920 netif_napi_del(&qdev->rx_ring[i].napi);
39213921
3922− ql_free_rx_buffers(qdev);
3923−
39243922 status = ql_adapter_reset(qdev);
39253923 if (status)
39263924 netif_err(qdev, ifdown, qdev->ndev, "reset(func #%d) FAILED!\n",
39273925 qdev->func);
3926+ ql_free_rx_buffers(qdev);
3927+
39283928 return status;
39293929 }
39303930
drivers/net/stmmac/stmmac_main.c+4−5
@@ -1865,15 +1865,15 @@ static int stmmac_resume(struct platform_device *pdev) · 1864 unmodified lines
18651865 if (!netif_running(dev))
18661866 return 0;
18671867
1868− spin_lock(&priv->lock);
1869−
18701868 if (priv->shutdown) {
18711869 /* Re-open the interface and re-init the MAC/DMA
1872− and the rings. */
1870+ and the rings (i.e. on hibernation stage) */
18731871 stmmac_open(dev);
1874− goto out_resume;
1872+ return 0;
18751873 }
18761874
1875+ spin_lock(&priv->lock);
1876+
18771877 /* Power Down bit, into the PM register, is cleared
18781878 * automatically as soon as a magic packet or a Wake-up frame
18791879 * is received. Anyway, it's better to manually clear
@@ -1901,7 +1901,6 @@ static int stmmac_resume(struct platform_device *pdev) · 21 unmodified lines
19011901
19021902 netif_start_queue(dev);
19031903
1904−out_resume:
19051904 spin_unlock(&priv->lock);
19061905 return 0;
19071906 }
drivers/net/usb/ipheth.c+1−6
@@ -429,10 +429,6 @@ static const struct net_device_ops ipheth_netdev_ops = { · 428 unmodified lines
429429 .ndo_get_stats = &ipheth_stats,
430430 };
431431
432−static struct device_type ipheth_type = {
433− .name = "wwan",
434−};
435−
436432 static int ipheth_probe(struct usb_interface *intf,
437433 const struct usb_device_id *id)
438434 {
@@ -450,7 +446,7 @@ static int ipheth_probe(struct usb_interface *intf, · 11 unmodified lines
450446
451447 netdev->netdev_ops = &ipheth_netdev_ops;
452448 netdev->watchdog_timeo = IPHETH_TX_TIMEOUT;
453− strcpy(netdev->name, "wwan%d");
449+ strcpy(netdev->name, "eth%d");
454450
455451 dev = netdev_priv(netdev);
456452 dev->udev = udev;
@@ -500,7 +496,6 @@ static int ipheth_probe(struct usb_interface *intf, · 43 unmodified lines
500496
501497 SET_NETDEV_DEV(netdev, &intf->dev);
502498 SET_ETHTOOL_OPS(netdev, &ops);
503− SET_NETDEV_DEVTYPE(netdev, &ipheth_type);
504499
505500 retval = register_netdev(netdev);
506501 if (retval) {
drivers/net/via-velocity.c+1−1
@@ -2824,7 +2824,7 @@ static int __devinit velocity_found1(struct pci_dev *pdev, const struct pci_devi · 2823 unmodified lines
28242824 netif_napi_add(dev, &vptr->napi, velocity_poll, VELOCITY_NAPI_WEIGHT);
28252825
28262826 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_FILTER |
2827− NETIF_F_HW_VLAN_RX | NETIF_F_IP_CSUM | NETIF_F_SG;
2827+ NETIF_F_HW_VLAN_RX | NETIF_F_IP_CSUM;
28282828
28292829 ret = register_netdev(dev);
28302830 if (ret < 0)
drivers/net/wireless/ath/ath5k/base.c+4−0
@@ -1327,6 +1327,10 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf, · 1326 unmodified lines
13271327 PCI_DMA_TODEVICE);
13281328
13291329 rate = ieee80211_get_tx_rate(sc->hw, info);
1330+ if (!rate) {
1331+ ret = -EINVAL;
1332+ goto err_unmap;
1333+ }
13301334
13311335 if (info->flags & IEEE80211_TX_CTL_NO_ACK)
13321336 flags |= AR5K_TXDESC_NOACK;
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c+1−1
@@ -797,7 +797,7 @@ static bool ar9300_uncompress_block(struct ath_hw *ah, · 796 unmodified lines
797797 length = block[it+1];
798798 length &= 0xff;
799799
800− if (length > 0 && spot >= 0 && spot+length < mdataSize) {
800+ if (length > 0 && spot >= 0 && spot+length <= mdataSize) {
801801 ath_print(common, ATH_DBG_EEPROM,
802802 "Restore at %d: spot=%d "
803803 "offset=%d length=%d\n",
drivers/net/wireless/ath/ath9k/eeprom.h+1−1
@@ -62,7 +62,7 @@ · 61 unmodified lines
6262
6363 #define SD_NO_CTL 0xE0
6464 #define NO_CTL 0xff
65−#define CTL_MODE_M 7
65+#define CTL_MODE_M 0xf
6666 #define CTL_11A 0
6767 #define CTL_11B 1
6868 #define CTL_11G 2
drivers/net/wireless/ath/regd.h+0−1
@@ -31,7 +31,6 @@ enum ctl_group { · 30 unmodified lines
3131 #define NO_CTL 0xff
3232 #define SD_NO_CTL 0xE0
3333 #define NO_CTL 0xff
34−#define CTL_MODE_M 7
3534 #define CTL_11A 0
3635 #define CTL_11B 1
3736 #define CTL_11G 2
drivers/net/wireless/libertas/if_sdio.c+1−1
@@ -128,7 +128,7 @@ struct if_sdio_card { · 127 unmodified lines
128128 bool helper_allocated;
129129 bool firmware_allocated;
130130
131− u8 buffer[65536];
131+ u8 buffer[65536] __attribute__((aligned(4)));
132132
133133 spinlock_t lock;
134134 struct if_sdio_packet *packets;
drivers/net/wireless/p54/txrx.c+1−1
@@ -446,7 +446,7 @@ static void p54_rx_frame_sent(struct p54_common *priv, struct sk_buff *skb) · 445 unmodified lines
446446 }
447447
448448 if (!(info->flags & IEEE80211_TX_CTL_NO_ACK) &&
449− (!payload->status))
449+ !(payload->status & P54_TX_FAILED))
450450 info->flags |= IEEE80211_TX_STAT_ACK;
451451 if (payload->status & P54_TX_PSM_CANCELLED)
452452 info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
drivers/pci/hotplug/acpi_pcihp.c+2−4
@@ -338,9 +338,7 @@ int acpi_get_hp_hw_control_from_firmware(struct pci_dev *pdev, u32 flags) · 337 unmodified lines
338338 acpi_handle chandle, handle;
339339 struct acpi_buffer string = { ACPI_ALLOCATE_BUFFER, NULL };
340340
341− flags &= (OSC_PCI_EXPRESS_NATIVE_HP_CONTROL |
342− OSC_SHPC_NATIVE_HP_CONTROL |
343− OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
341+ flags &= OSC_SHPC_NATIVE_HP_CONTROL;
344342 if (!flags) {
345343 err("Invalid flags %u specified!\n", flags);
346344 return -EINVAL;
@@ -360,7 +358,7 @@ int acpi_get_hp_hw_control_from_firmware(struct pci_dev *pdev, u32 flags) · 13 unmodified lines
360358 acpi_get_name(handle, ACPI_FULL_PATHNAME, &string);
361359 dbg("Trying to get hotplug control for %s\n",
362360 (char *)string.pointer);
363− status = acpi_pci_osc_control_set(handle, flags);
361+ status = acpi_pci_osc_control_set(handle, &flags, flags);
364362 if (ACPI_SUCCESS(status))
365363 goto got_one;
366364 if (status == AE_SUPPORT)
drivers/pci/hotplug/pciehp.h+4−12
@@ -176,19 +176,11 @@ static inline void pciehp_firmware_init(void) · 175 unmodified lines
176176 {
177177 pciehp_acpi_slot_detection_init();
178178 }
179−
180−static inline int pciehp_get_hp_hw_control_from_firmware(struct pci_dev *dev)
181−{
182− int retval;
183− u32 flags = (OSC_PCI_EXPRESS_NATIVE_HP_CONTROL |
184− OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
185− retval = acpi_get_hp_hw_control_from_firmware(dev, flags);
186− if (retval)
187− return retval;
188− return pciehp_acpi_slot_detection_check(dev);
189−}
190179 #else
191180 #define pciehp_firmware_init() do {} while (0)
192−#define pciehp_get_hp_hw_control_from_firmware(dev) 0
181+static inline int pciehp_acpi_slot_detection_check(struct pci_dev *dev)
182+{
183+ return 0;
184+}
193185 #endif /* CONFIG_ACPI */
194186 #endif /* _PCIEHP_H */
drivers/pci/hotplug/pciehp_acpi.c+1−3
@@ -85,9 +85,7 @@ static int __init dummy_probe(struct pcie_device *dev) · 84 unmodified lines
8585 acpi_handle handle;
8686 struct dummy_slot *slot, *tmp;
8787 struct pci_dev *pdev = dev->port;
88− /* Note: pciehp_detect_mode != PCIEHP_DETECT_ACPI here */
89− if (pciehp_get_hp_hw_control_from_firmware(pdev))
90− return -ENODEV;
88+
9189 pos = pci_pcie_cap(pdev);
9290 if (!pos)
9391 return -ENODEV;
drivers/pci/hotplug/pciehp_core.c+2−2
@@ -59,7 +59,7 @@ module_param(pciehp_force, bool, 0644); · 58 unmodified lines
5959 MODULE_PARM_DESC(pciehp_debug, "Debugging mode enabled or not");
6060 MODULE_PARM_DESC(pciehp_poll_mode, "Using polling mechanism for hot-plug events or not");
6161 MODULE_PARM_DESC(pciehp_poll_time, "Polling mechanism frequency, in seconds");
62−MODULE_PARM_DESC(pciehp_force, "Force pciehp, even if _OSC and OSHP are missing");
62+MODULE_PARM_DESC(pciehp_force, "Force pciehp, even if OSHP is missing");
6363
6464 #define PCIE_MODULE_NAME "pciehp"
6565
@@ -235,7 +235,7 @@ static int pciehp_probe(struct pcie_device *dev) · 169 unmodified lines
235235 dev_info(&dev->device,
236236 "Bypassing BIOS check for pciehp use on %s\n",
237237 pci_name(dev->port));
238− else if (pciehp_get_hp_hw_control_from_firmware(dev->port))
238+ else if (pciehp_acpi_slot_detection_check(dev->port))
239239 goto err_out_none;
240240
241241 ctrl = pcie_init(dev);
drivers/pci/pci.h+2−0
@@ -140,8 +140,10 @@ static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { } · 139 unmodified lines
140140
141141 #ifdef CONFIG_PCIEAER
142142 void pci_no_aer(void);
143+bool pci_aer_available(void);
143144 #else
144145 static inline void pci_no_aer(void) { }
146+static inline bool pci_aer_available(void) { return false; }
145147 #endif
146148
147149 static inline int pci_no_d1d2(struct pci_dev *dev)
drivers/pci/pcie/Makefile+2−1
@@ -6,10 +6,11 @@ · 5 unmodified lines
66 obj-$(CONFIG_PCIEASPM) += aspm.o
77
88 pcieportdrv-y := portdrv_core.o portdrv_pci.o portdrv_bus.o
9+pcieportdrv-$(CONFIG_ACPI) += portdrv_acpi.o
910
1011 obj-$(CONFIG_PCIEPORTBUS) += pcieportdrv.o
1112
1213 # Build PCI Express AER if needed
1314 obj-$(CONFIG_PCIEAER) += aer/
1415
15−obj-$(CONFIG_PCIE_PME) += pme/
16+obj-$(CONFIG_PCIE_PME) += pme.o
drivers/pci/pcie/aer/aerdrv.c+6−3
@@ -72,6 +72,11 @@ void pci_no_aer(void) · 71 unmodified lines
7272 pcie_aer_disable = 1; /* has priority over 'forceload' */
7373 }
7474
75+bool pci_aer_available(void)
76+{
77+ return !pcie_aer_disable && pci_msi_enabled();
78+}
79+
7580 static int set_device_error_reporting(struct pci_dev *dev, void *data)
7681 {
7782 bool enable = *((bool *)data);
@@ -411,9 +416,7 @@ static void aer_error_resume(struct pci_dev *dev) · 333 unmodified lines
411416 */
412417 static int __init aer_service_init(void)
413418 {
414− if (pcie_aer_disable)
415− return -ENXIO;
416− if (!pci_msi_enabled())
419+ if (!pci_aer_available())
417420 return -ENXIO;
418421 return pcie_port_service_register(&aerdriver);
419422 }
drivers/pci/pcie/aer/aerdrv_acpi.c+0−36
@@ -19,42 +19,6 @@ · 18 unmodified lines
1919 #include <acpi/apei.h>
2020 #include "aerdrv.h"
2121
22−/**
23− * aer_osc_setup - run ACPI _OSC method
24− * @pciedev: pcie_device which AER is being enabled on
25− *
26− * @return: Zero on success. Nonzero otherwise.
27− *
28− * Invoked when PCIe bus loads AER service driver. To avoid conflict with
29− * BIOS AER support requires BIOS to yield AER control to OS native driver.
30− **/
31−int aer_osc_setup(struct pcie_device *pciedev)
32−{
33− acpi_status status = AE_NOT_FOUND;
34− struct pci_dev *pdev = pciedev->port;
35− acpi_handle handle = NULL;
36−
37− if (acpi_pci_disabled)
38− return -1;
39−
40− handle = acpi_find_root_bridge_handle(pdev);
41− if (handle) {
42− status = acpi_pci_osc_control_set(handle,
43− OSC_PCI_EXPRESS_AER_CONTROL |
44− OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
45− }
46−
47− if (ACPI_FAILURE(status)) {
48− dev_printk(KERN_DEBUG, &pciedev->device, "AER service couldn't "
49− "init device: %s\n",
50− (status == AE_SUPPORT || status == AE_NOT_FOUND) ?
51− "no _OSC support" : "_OSC failed");
52− return -1;
53− }
54−
55− return 0;
56−}
57−
5822 #ifdef CONFIG_ACPI_APEI
5923 static inline int hest_match_pci(struct acpi_hest_aer_common *p,
6024 struct pci_dev *pci)
drivers/pci/pcie/aer/aerdrv_core.c+1−13
@@ -772,22 +772,10 @@ void aer_isr(struct work_struct *work) · 771 unmodified lines
772772 */
773773 int aer_init(struct pcie_device *dev)
774774 {
775− if (pcie_aer_get_firmware_first(dev->port)) {
776− dev_printk(KERN_DEBUG, &dev->device,
777− "PCIe errors handled by platform firmware.\n");
778− goto out;
779− }
780−
781− if (aer_osc_setup(dev))
782− goto out;
783−
784− return 0;
785−out:
786775 if (forceload) {
787776 dev_printk(KERN_DEBUG, &dev->device,
788777 "aerdrv forceload requested.\n");
789778 pcie_aer_force_firmware_first(dev->port, 0);
790− return 0;
791779 }
792− return -ENXIO;
780+ return 0;
793781 }
drivers/pci/pcie/pme.crenamed from drivers/pci/pcie/pme/pcie_pme.c+6−60
@@ -23,37 +23,12 @@ · 22 unmodified lines
2323 #include <linux/pci-acpi.h>
2424 #include <linux/pm_runtime.h>
2525
26−#include "../../pci.h"
27−#include "pcie_pme.h"
26+#include "../pci.h"
27+#include "portdrv.h"
2828
2929 #define PCI_EXP_RTSTA_PME 0x10000 /* PME status */
3030 #define PCI_EXP_RTSTA_PENDING 0x20000 /* PME pending */
3131
32−/*
33− * If set, this switch will prevent the PCIe root port PME service driver from
34− * being registered. Consequently, the interrupt-based PCIe PME signaling will
35− * not be used by any PCIe root ports in that case.
36− */
37−static bool pcie_pme_disabled = true;
38−
39−/*
40− * The PCI Express Base Specification 2.0, Section 6.1.8, states the following:
41− * "In order to maintain compatibility with non-PCI Express-aware system
42− * software, system power management logic must be configured by firmware to use
43− * the legacy mechanism of signaling PME by default. PCI Express-aware system
44− * software must notify the firmware prior to enabling native, interrupt-based
45− * PME signaling." However, if the platform doesn't provide us with a suitable
46− * notification mechanism or the notification fails, it is not clear whether or
47− * not we are supposed to use the interrupt-based PCIe PME signaling. The
48− * switch below can be used to indicate the desired behaviour. When set, it
49− * will make the kernel use the interrupt-based PCIe PME signaling regardless of
50− * the platform notification status, although the kernel will attempt to notify
51− * the platform anyway. When unset, it will prevent the kernel from using the
52− * the interrupt-based PCIe PME signaling if the platform notification fails,
53− * which is the default.
54− */
55−static bool pcie_pme_force_enable;
56−
5732 /*
5833 * If this switch is set, MSI will not be used for PCIe PME signaling. This
5934 * causes the PCIe port driver to use INTx interrupts only, but it turns out
@@ -64,38 +39,13 @@ bool pcie_pme_msi_disabled; · 4 unmodified lines
6439
6540 static int __init pcie_pme_setup(char *str)
6641 {
67− if (!strncmp(str, "auto", 4))
68− pcie_pme_disabled = false;
69− else if (!strncmp(str, "force", 5))
70− pcie_pme_force_enable = true;
71−
72− str = strchr(str, ',');
73− if (str) {
74− str++;
75− str += strspn(str, " \t");
76− if (*str && !strcmp(str, "nomsi"))
77− pcie_pme_msi_disabled = true;
78− }
42+ if (!strncmp(str, "nomsi", 5))
43+ pcie_pme_msi_disabled = true;
7944
8045 return 1;
8146 }
8247 __setup("pcie_pme=", pcie_pme_setup);
8348
84−/**
85− * pcie_pme_platform_setup - Ensure that the kernel controls the PCIe PME.
86− * @srv: PCIe PME root port service to use for carrying out the check.
87− *
88− * Notify the platform that the native PCIe PME is going to be used and return
89− * 'true' if the control of the PCIe PME registers has been acquired from the
90− * platform.
91− */
92−static bool pcie_pme_platform_setup(struct pcie_device *srv)
93−{
94− if (!pcie_pme_platform_notify(srv))
95− return true;
96− return pcie_pme_force_enable;
97−}
98−
9949 struct pcie_pme_service_data {
10050 spinlock_t lock;
10151 struct pcie_device *srv;
@@ -108,7 +58,7 @@ struct pcie_pme_service_data { · 6 unmodified lines
10858 * @dev: PCIe root port or event collector.
10959 * @enable: Enable or disable the interrupt.
11060 */
111−static void pcie_pme_interrupt_enable(struct pci_dev *dev, bool enable)
61+void pcie_pme_interrupt_enable(struct pci_dev *dev, bool enable)
11262 {
11363 int rtctl_pos;
11464 u16 rtctl;
@@ -417,9 +367,6 @@ static int pcie_pme_probe(struct pcie_device *srv) · 302 unmodified lines
417367 struct pcie_pme_service_data *data;
418368 int ret;
419369
420− if (!pcie_pme_platform_setup(srv))
421− return -EACCES;
422−
423370 data = kzalloc(sizeof(*data), GFP_KERNEL);
424371 if (!data)
425372 return -ENOMEM;
@@ -509,8 +456,7 @@ static struct pcie_port_service_driver pcie_pme_driver = { · 83 unmodified lines
509456 */
510457 static int __init pcie_pme_service_init(void)
511458 {
512− return pcie_pme_disabled ?
513− -ENODEV : pcie_port_service_register(&pcie_pme_driver);
459+ return pcie_port_service_register(&pcie_pme_driver);
514460 }
515461
516462 module_init(pcie_pme_service_init);
drivers/pci/pcie/pme/Makefile+0−8
@@ -1,8 +0,0 @@
1−#
2−# Makefile for PCI-Express Root Port PME signaling driver
3−#
4−
5−obj-$(CONFIG_PCIE_PME) += pmedriver.o
6−
7−pmedriver-objs := pcie_pme.o
8−pmedriver-$(CONFIG_ACPI) += pcie_pme_acpi.o
drivers/pci/pcie/pme/pcie_pme.h+0−28
@@ -1,28 +0,0 @@
1−/*
2− * drivers/pci/pcie/pme/pcie_pme.h
3− *
4− * PCI Express Root Port PME signaling support
5− *
6− * Copyright (C) 2009 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc.
7− */
8−
9−#ifndef _PCIE_PME_H_
10−#define _PCIE_PME_H_
11−
12−struct pcie_device;
13−
14−#ifdef CONFIG_ACPI
15−extern int pcie_pme_acpi_setup(struct pcie_device *srv);
16−
17−static inline int pcie_pme_platform_notify(struct pcie_device *srv)
18−{
19− return pcie_pme_acpi_setup(srv);
20−}
21−#else /* !CONFIG_ACPI */
22−static inline int pcie_pme_platform_notify(struct pcie_device *srv)
23−{
24− return 0;
25−}
26−#endif /* !CONFIG_ACPI */
27−
28−#endif
drivers/pci/pcie/pme/pcie_pme_acpi.c+0−54
@@ -1,54 +0,0 @@
1−/*
2− * PCIe Native PME support, ACPI-related part
3− *
4− * Copyright (C) 2009 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc.
5− *
6− * This file is subject to the terms and conditions of the GNU General Public
7− * License V2. See the file "COPYING" in the main directory of this archive
8− * for more details.
9− */
10−
11−#include <linux/pci.h>
12−#include <linux/kernel.h>
13−#include <linux/errno.h>
14−#include <linux/acpi.h>
15−#include <linux/pci-acpi.h>
16−#include <linux/pcieport_if.h>
17−
18−/**
19− * pcie_pme_acpi_setup - Request the ACPI BIOS to release control over PCIe PME.
20− * @srv - PCIe PME service for a root port or event collector.
21− *
22− * Invoked when the PCIe bus type loads PCIe PME service driver. To avoid
23− * conflict with the BIOS PCIe support requires the BIOS to yield PCIe PME
24− * control to the kernel.
25− */
26−int pcie_pme_acpi_setup(struct pcie_device *srv)
27−{
28− acpi_status status = AE_NOT_FOUND;
29− struct pci_dev *port = srv->port;
30− acpi_handle handle;
31− int error = 0;
32−
33− if (acpi_pci_disabled)
34− return -ENOSYS;
35−
36− dev_info(&port->dev, "Requesting control of PCIe PME from ACPI BIOS\n");
37−
38− handle = acpi_find_root_bridge_handle(port);
39− if (!handle)
40− return -EINVAL;
41−
42− status = acpi_pci_osc_control_set(handle,
43− OSC_PCI_EXPRESS_PME_CONTROL |
44− OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
45− if (ACPI_FAILURE(status)) {
46− dev_info(&port->dev,
47− "Failed to receive control of PCIe PME service: %s\n",
48− (status == AE_SUPPORT || status == AE_NOT_FOUND) ?
49− "no _OSC support" : "ACPI _OSC failed");
50− error = -ENODEV;
51− }
52−
53− return error;
54−}
drivers/pci/pcie/portdrv.h+22−0
@@ -20,6 +20,9 @@ · 19 unmodified lines
2020
2121 #define get_descriptor_id(type, service) (((type - 4) << 4) | service)
2222
23+extern bool pcie_ports_disabled;
24+extern bool pcie_ports_auto;
25+
2326 extern struct bus_type pcie_port_bus_type;
2427 extern int pcie_port_device_register(struct pci_dev *dev);
2528 #ifdef CONFIG_PM
@@ -30,6 +33,8 @@ extern void pcie_port_device_remove(struct pci_dev *dev); · 4 unmodified lines
3033 extern int __must_check pcie_port_bus_register(void);
3134 extern void pcie_port_bus_unregister(void);
3235
36+struct pci_dev;
37+
3338 #ifdef CONFIG_PCIE_PME
3439 extern bool pcie_pme_msi_disabled;
3540
@@ -42,9 +47,26 @@ static inline bool pcie_pme_no_msi(void) · 6 unmodified lines
4247 {
4348 return pcie_pme_msi_disabled;
4449 }
50+
51+extern void pcie_pme_interrupt_enable(struct pci_dev *dev, bool enable);
4552 #else /* !CONFIG_PCIE_PME */
4653 static inline void pcie_pme_disable_msi(void) {}
4754 static inline bool pcie_pme_no_msi(void) { return false; }
55+static inline void pcie_pme_interrupt_enable(struct pci_dev *dev, bool en) {}
4856 #endif /* !CONFIG_PCIE_PME */
4957
58+#ifdef CONFIG_ACPI
59+extern int pcie_port_acpi_setup(struct pci_dev *port, int *mask);
60+
61+static inline int pcie_port_platform_notify(struct pci_dev *port, int *mask)
62+{
63+ return pcie_port_acpi_setup(port, mask);
64+}
65+#else /* !CONFIG_ACPI */
66+static inline int pcie_port_platform_notify(struct pci_dev *port, int *mask)
67+{
68+ return 0;
69+}
70+#endif /* !CONFIG_ACPI */
71+
5072 #endif /* _PORTDRV_H_ */
drivers/pci/pcie/portdrv_acpi.c+77−0
@@ -0,0 +1,77 @@
1+/*
2+ * PCIe Port Native Services Support, ACPI-Related Part
3+ *
4+ * Copyright (C) 2010 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc.
5+ *
6+ * This file is subject to the terms and conditions of the GNU General Public
7+ * License V2. See the file "COPYING" in the main directory of this archive
8+ * for more details.
9+ */
10+
11+#include <linux/pci.h>
12+#include <linux/kernel.h>
13+#include <linux/errno.h>
14+#include <linux/acpi.h>
15+#include <linux/pci-acpi.h>
16+#include <linux/pcieport_if.h>
17+
18+#include "aer/aerdrv.h"
19+#include "../pci.h"
20+
21+/**
22+ * pcie_port_acpi_setup - Request the BIOS to release control of PCIe services.
23+ * @port: PCIe Port service for a root port or event collector.
24+ * @srv_mask: Bit mask of services that can be enabled for @port.
25+ *
26+ * Invoked when @port is identified as a PCIe port device. To avoid conflicts
27+ * with the BIOS PCIe port native services support requires the BIOS to yield
28+ * control of these services to the kernel. The mask of services that the BIOS
29+ * allows to be enabled for @port is written to @srv_mask.
30+ *
31+ * NOTE: It turns out that we cannot do that for individual port services
32+ * separately, because that would make some systems work incorrectly.
33+ */
34+int pcie_port_acpi_setup(struct pci_dev *port, int *srv_mask)
35+{
36+ acpi_status status;
37+ acpi_handle handle;
38+ u32 flags;
39+
40+ if (acpi_pci_disabled)
41+ return 0;
42+
43+ handle = acpi_find_root_bridge_handle(port);
44+ if (!handle)
45+ return -EINVAL;
46+
47+ flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL
48+ | OSC_PCI_EXPRESS_NATIVE_HP_CONTROL
49+ | OSC_PCI_EXPRESS_PME_CONTROL;
50+
51+ if (pci_aer_available()) {
52+ if (pcie_aer_get_firmware_first(port))
53+ dev_dbg(&port->dev, "PCIe errors handled by BIOS.\n");
54+ else
55+ flags |= OSC_PCI_EXPRESS_AER_CONTROL;
56+ }
57+
58+ status = acpi_pci_osc_control_set(handle, &flags,
59+ OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
60+ if (ACPI_FAILURE(status)) {
61+ dev_dbg(&port->dev, "ACPI _OSC request failed (code %d)\n",
62+ status);
63+ return -ENODEV;
64+ }
65+
66+ dev_info(&port->dev, "ACPI _OSC control granted for 0x%02x\n", flags);
67+
68+ *srv_mask = PCIE_PORT_SERVICE_VC;
69+ if (flags & OSC_PCI_EXPRESS_NATIVE_HP_CONTROL)
70+ *srv_mask |= PCIE_PORT_SERVICE_HP;
71+ if (flags & OSC_PCI_EXPRESS_PME_CONTROL)
72+ *srv_mask |= PCIE_PORT_SERVICE_PME;
73+ if (flags & OSC_PCI_EXPRESS_AER_CONTROL)
74+ *srv_mask |= PCIE_PORT_SERVICE_AER;
75+
76+ return 0;
77+}
drivers/pci/pcie/portdrv_core.c+49−4
@@ -14,6 +14,8 @@ · 13 unmodified lines
1414 #include <linux/string.h>
1515 #include <linux/slab.h>
1616 #include <linux/pcieport_if.h>
17+#include <linux/aer.h>
18+#include <linux/pci-aspm.h>
1719
1820 #include "../pci.h"
1921 #include "portdrv.h"
@@ -236,24 +238,64 @@ static int get_port_device_capability(struct pci_dev *dev) · 216 unmodified lines
236238 int services = 0, pos;
237239 u16 reg16;
238240 u32 reg32;
241+ int cap_mask;
242+ int err;
243+
244+ err = pcie_port_platform_notify(dev, &cap_mask);
245+ if (pcie_ports_auto) {
246+ if (err) {
247+ pcie_no_aspm();
248+ return 0;
249+ }
250+ } else {
251+ cap_mask = PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_HP
252+ | PCIE_PORT_SERVICE_VC;
253+ if (pci_aer_available())
254+ cap_mask |= PCIE_PORT_SERVICE_AER;
255+ }
239256
240257 pos = pci_pcie_cap(dev);
241258 pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &reg16);
242259 /* Hot-Plug Capable */
243− if (reg16 & PCI_EXP_FLAGS_SLOT) {
260+ if ((cap_mask & PCIE_PORT_SERVICE_HP) && (reg16 & PCI_EXP_FLAGS_SLOT)) {
244261 pci_read_config_dword(dev, pos + PCI_EXP_SLTCAP, &reg32);
245− if (reg32 & PCI_EXP_SLTCAP_HPC)
262+ if (reg32 & PCI_EXP_SLTCAP_HPC) {
246263 services |= PCIE_PORT_SERVICE_HP;
264+ /*
265+ * Disable hot-plug interrupts in case they have been
266+ * enabled by the BIOS and the hot-plug service driver
267+ * is not loaded.
268+ */
269+ pos += PCI_EXP_SLTCTL;
270+ pci_read_config_word(dev, pos, &reg16);
271+ reg16 &= ~(PCI_EXP_SLTCTL_CCIE | PCI_EXP_SLTCTL_HPIE);
272+ pci_write_config_word(dev, pos, reg16);
273+ }
247274 }
248275 /* AER capable */
249− if (pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR))
276+ if ((cap_mask & PCIE_PORT_SERVICE_AER)
277+ && pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR)) {
250278 services |= PCIE_PORT_SERVICE_AER;
279+ /*
280+ * Disable AER on this port in case it's been enabled by the
281+ * BIOS (the AER service driver will enable it when necessary).
282+ */
283+ pci_disable_pcie_error_reporting(dev);
284+ }
251285 /* VC support */
252286 if (pci_find_ext_capability(dev, PCI_EXT_CAP_ID_VC))
253287 services |= PCIE_PORT_SERVICE_VC;
254288 /* Root ports are capable of generating PME too */
255− if (dev->pcie_type == PCI_EXP_TYPE_ROOT_PORT)
289+ if ((cap_mask & PCIE_PORT_SERVICE_PME)
290+ && dev->pcie_type == PCI_EXP_TYPE_ROOT_PORT) {
256291 services |= PCIE_PORT_SERVICE_PME;
292+ /*
293+ * Disable PME interrupt on this port in case it's been enabled
294+ * by the BIOS (the PME service driver will enable it when
295+ * necessary).
296+ */
297+ pcie_pme_interrupt_enable(dev, false);
298+ }
257299
258300 return services;
259301 }
@@ -494,6 +536,9 @@ static void pcie_port_shutdown_service(struct device *dev) {} · 234 unmodified lines
494536 */
495537 int pcie_port_service_register(struct pcie_port_service_driver *new)
496538 {
539+ if (pcie_ports_disabled)
540+ return -ENODEV;
541+
497542 new->driver.name = (char *)new->name;
498543 new->driver.bus = &pcie_port_bus_type;
499544 new->driver.probe = pcie_port_probe_service;
drivers/pci/pcie/portdrv_pci.c+31−7
@@ -15,6 +15,7 @@ · 14 unmodified lines
1515 #include <linux/pcieport_if.h>
1616 #include <linux/aer.h>
1717 #include <linux/dmi.h>
18+#include <linux/pci-aspm.h>
1819
1920 #include "portdrv.h"
2021 #include "aer/aerdrv.h"
@@ -29,6 +30,31 @@ MODULE_AUTHOR(DRIVER_AUTHOR); · 8 unmodified lines
2930 MODULE_DESCRIPTION(DRIVER_DESC);
3031 MODULE_LICENSE("GPL");
3132
33+/* If this switch is set, PCIe port native services should not be enabled. */
34+bool pcie_ports_disabled;
35+
36+/*
37+ * If this switch is set, ACPI _OSC will be used to determine whether or not to
38+ * enable PCIe port native services.
39+ */
40+bool pcie_ports_auto = true;
41+
42+static int __init pcie_port_setup(char *str)
43+{
44+ if (!strncmp(str, "compat", 6)) {
45+ pcie_ports_disabled = true;
46+ } else if (!strncmp(str, "native", 6)) {
47+ pcie_ports_disabled = false;
48+ pcie_ports_auto = false;
49+ } else if (!strncmp(str, "auto", 4)) {
50+ pcie_ports_disabled = false;
51+ pcie_ports_auto = true;
52+ }
53+
54+ return 1;
55+}
56+__setup("pcie_ports=", pcie_port_setup);
57+
3258 /* global data */
3359
3460 static int pcie_portdrv_restore_config(struct pci_dev *dev)
@@ -301,6 +327,11 @@ static int __init pcie_portdrv_init(void) · 266 unmodified lines
301327 {
302328 int retval;
303329
330+ if (pcie_ports_disabled) {
331+ pcie_no_aspm();
332+ return -EACCES;
333+ }
334+
304335 dmi_check_system(pcie_portdrv_dmi_table);
305336
306337 retval = pcie_port_bus_register();
@@ -315,11 +346,4 @@ static int __init pcie_portdrv_init(void) · 8 unmodified lines
315346 return retval;
316347 }
317348
318−static void __exit pcie_portdrv_exit(void)
319−{
320− pci_unregister_driver(&pcie_portdriver);
321− pcie_port_bus_unregister();
322−}
323−
324349 module_init(pcie_portdrv_init);
325−module_exit(pcie_portdrv_exit);
drivers/pci/slot.c+1−1
@@ -49,7 +49,7 @@ static ssize_t address_read_file(struct pci_slot *slot, char *buf) · 48 unmodified lines
4949 }
5050
5151 /* these strings match up with the values in pci_bus_speed */
52−static char *pci_bus_speed_strings[] = {
52+static const char *pci_bus_speed_strings[] = {
5353 "33 MHz PCI", /* 0x00 */
5454 "66 MHz PCI", /* 0x01 */
5555 "66 MHz PCI-X", /* 0x02 */
drivers/rtc/rtc-bfin.c+12−3
@@ -426,7 +426,7 @@ static int bfin_rtc_suspend(struct platform_device *pdev, pm_message_t state) · 425 unmodified lines
426426 enable_irq_wake(IRQ_RTC);
427427 bfin_rtc_sync_pending(&pdev->dev);
428428 } else
429− bfin_rtc_int_clear(-1);
429+ bfin_rtc_int_clear(0);
430430
431431 return 0;
432432 }
@@ -435,8 +435,17 @@ static int bfin_rtc_resume(struct platform_device *pdev) · 2 unmodified lines
435435 {
436436 if (device_may_wakeup(&pdev->dev))
437437 disable_irq_wake(IRQ_RTC);
438− else
439− bfin_write_RTC_ISTAT(-1);
438+
439+ /*
440+ * Since only some of the RTC bits are maintained externally in the
441+ * Vbat domain, we need to wait for the RTC MMRs to be synced into
442+ * the core after waking up. This happens every RTC 1HZ. Once that
443+ * has happened, we can go ahead and re-enable the important write
444+ * complete interrupt event.
445+ */
446+ while (!(bfin_read_RTC_ISTAT() & RTC_ISTAT_SEC))
447+ continue;
448+ bfin_rtc_int_set(RTC_ISTAT_WRITE_COMPLETE);
440449
441450 return 0;
442451 }
drivers/rtc/rtc-m41t80.c+1−1
@@ -364,7 +364,7 @@ static int m41t80_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *t) · 363 unmodified lines
364364 t->time.tm_isdst = -1;
365365 t->enabled = !!(reg[M41T80_REG_ALARM_MON] & M41T80_ALMON_AFE);
366366 t->pending = !!(reg[M41T80_REG_FLAGS] & M41T80_FLAGS_AF);
367− return rtc_valid_tm(t);
367+ return 0;
368368 }
369369
370370 static struct rtc_class_ops m41t80_rtc_ops = {
drivers/rtc/rtc-pl031.c+1−1
@@ -403,7 +403,7 @@ static int pl031_probe(struct amba_device *adev, struct amba_id *id) · 402 unmodified lines
403403 }
404404
405405 if (request_irq(adev->irq[0], pl031_interrupt,
406− IRQF_DISABLED | IRQF_SHARED, "rtc-pl031", ldata)) {
406+ IRQF_DISABLED, "rtc-pl031", ldata)) {
407407 ret = -EIO;
408408 goto out_no_irq;
409409 }
drivers/s390/char/ctrlchar.c+1−3
@@ -16,12 +16,11 @@ · 15 unmodified lines
1616
1717 #ifdef CONFIG_MAGIC_SYSRQ
1818 static int ctrlchar_sysrq_key;
19−static struct tty_struct *sysrq_tty;
2019
2120 static void
2221 ctrlchar_handle_sysrq(struct work_struct *work)
2322 {
24− handle_sysrq(ctrlchar_sysrq_key, sysrq_tty);
23+ handle_sysrq(ctrlchar_sysrq_key);
2524 }
2625
2726 static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq);
@@ -54,7 +53,6 @@ ctrlchar_handle(const unsigned char *buf, int len, struct tty_struct *tty) · 26 unmodified lines
5453 /* racy */
5554 if (len == 3 && buf[1] == '-') {
5655 ctrlchar_sysrq_key = buf[2];
57− sysrq_tty = tty;
5856 schedule_work(&ctrlchar_work);
5957 return CTRLCHAR_SYSRQ;
6058 }
drivers/s390/char/keyboard.c+1−1
@@ -305,7 +305,7 @@ kbd_keycode(struct kbd_data *kbd, unsigned int keycode) · 304 unmodified lines
305305 if (kbd->sysrq) {
306306 if (kbd->sysrq == K(KT_LATIN, '-')) {
307307 kbd->sysrq = 0;
308− handle_sysrq(value, kbd->tty);
308+ handle_sysrq(value);
309309 return;
310310 }
311311 if (value == '-') {
drivers/s390/char/tape_block.c+1−2
@@ -217,8 +217,7 @@ tapeblock_setup_device(struct tape_device * device) · 216 unmodified lines
217217 if (!blkdat->request_queue)
218218 return -ENOMEM;
219219
220− elevator_exit(blkdat->request_queue->elevator);
221− rc = elevator_init(blkdat->request_queue, "noop");
220+ rc = elevator_change(blkdat->request_queue, "noop");
222221 if (rc)
223222 goto cleanup_queue;
224223
drivers/scsi/be2iscsi/be_iscsi.c+2−3
@@ -300,8 +300,7 @@ int beiscsi_get_host_param(struct Scsi_Host *shost, · 299 unmodified lines
300300 enum iscsi_host_param param, char *buf)
301301 {
302302 struct beiscsi_hba *phba = (struct beiscsi_hba *)iscsi_host_priv(shost);
303− int len = 0;
304− int status;
303+ int status = 0;
305304
306305 SE_DEBUG(DBG_LVL_8, "In beiscsi_get_host_param, param= %d\n", param);
307306 switch (param) {
@@ -315,7 +314,7 @@ int beiscsi_get_host_param(struct Scsi_Host *shost, · 7 unmodified lines
315314 default:
316315 return iscsi_host_get_param(shost, param, buf);
317316 }
318− return len;
317+ return status;
319318 }
320319
321320 int beiscsi_get_macaddr(char *buf, struct beiscsi_hba *phba)
drivers/scsi/be2iscsi/be_mgmt.c+1−1
@@ -368,7 +368,7 @@ int mgmt_open_connection(struct beiscsi_hba *phba, · 367 unmodified lines
368368 memset(req, 0, sizeof(*req));
369369 wrb->tag0 |= tag;
370370
371− be_wrb_hdr_prepare(wrb, sizeof(*req), true, 1);
371+ be_wrb_hdr_prepare(wrb, sizeof(*req), false, 1);
372372 be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ISCSI,
373373 OPCODE_COMMON_ISCSI_TCP_CONNECT_AND_OFFLOAD,
374374 sizeof(*req));
drivers/scsi/constants.c+3−3
@@ -1404,13 +1404,13 @@ void scsi_print_sense(char *name, struct scsi_cmnd *cmd) · 1403 unmodified lines
14041404 {
14051405 struct scsi_sense_hdr sshdr;
14061406
1407− scmd_printk(KERN_INFO, cmd, "");
1407+ scmd_printk(KERN_INFO, cmd, " ");
14081408 scsi_decode_sense_buffer(cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE,
14091409 &sshdr);
14101410 scsi_show_sense_hdr(&sshdr);
14111411 scsi_decode_sense_extras(cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE,
14121412 &sshdr);
1413− scmd_printk(KERN_INFO, cmd, "");
1413+ scmd_printk(KERN_INFO, cmd, " ");
14141414 scsi_show_extd_sense(sshdr.asc, sshdr.ascq);
14151415 }
14161416 EXPORT_SYMBOL(scsi_print_sense);
@@ -1453,7 +1453,7 @@ EXPORT_SYMBOL(scsi_show_result); · 36 unmodified lines
14531453
14541454 void scsi_print_result(struct scsi_cmnd *cmd)
14551455 {
1456− scmd_printk(KERN_INFO, cmd, "");
1456+ scmd_printk(KERN_INFO, cmd, " ");
14571457 scsi_show_result(cmd->result);
14581458 }
14591459 EXPORT_SYMBOL(scsi_print_result);
drivers/scsi/hpsa.c+6−0
@@ -3231,6 +3231,12 @@ static __devinit int hpsa_kdump_hard_reset_controller(struct pci_dev *pdev) · 3230 unmodified lines
32313231 misc_fw_support = readl(&cfgtable->misc_fw_support);
32323232 use_doorbell = misc_fw_support & MISC_FW_DOORBELL_RESET;
32333233
3234+ /* The doorbell reset seems to cause lockups on some Smart
3235+ * Arrays (e.g. P410, P410i, maybe others). Until this is
3236+ * fixed or at least isolated, avoid the doorbell reset.
3237+ */
3238+ use_doorbell = 0;
3239+
32343240 rc = hpsa_controller_hard_reset(pdev, vaddr, use_doorbell);
32353241 if (rc)
32363242 goto unmap_cfgtable;
drivers/scsi/osd/osd_initiator.c+1−1
@@ -865,7 +865,7 @@ void osd_req_read(struct osd_request *or, · 864 unmodified lines
865865 {
866866 _osd_req_encode_common(or, OSD_ACT_READ, obj, offset, len);
867867 WARN_ON(or->in.bio || or->in.total_bytes);
868− WARN_ON(1 == (bio->bi_rw & REQ_WRITE));
868+ WARN_ON(bio->bi_rw & REQ_WRITE);
869869 or->in.bio = bio;
870870 or->in.total_bytes = len;
871871 }
drivers/scsi/qla2xxx/qla_attr.c+15−8
@@ -1838,26 +1838,33 @@ qla24xx_vport_delete(struct fc_vport *fc_vport) · 1837 unmodified lines
18381838
18391839 qla24xx_disable_vp(vha);
18401840
1841+ vha->flags.delete_progress = 1;
1842+
18411843 fc_remove_host(vha->host);
18421844
18431845 scsi_remove_host(vha->host);
18441846
1845− qla2x00_free_fcports(vha);
1847+ if (vha->timer_active) {
1848+ qla2x00_vp_stop_timer(vha);
1849+ DEBUG15(printk(KERN_INFO "scsi(%ld): timer for the vport[%d]"
1850+ " = %p has stopped\n", vha->host_no, vha->vp_idx, vha));
1851+ }
18461852
18471853 qla24xx_deallocate_vp_id(vha);
18481854
1855+ /* No pending activities shall be there on the vha now */
1856+ DEBUG(msleep(random32()%10)); /* Just to see if something falls on
1857+ * the net we have placed below */
1858+
1859+ BUG_ON(atomic_read(&vha->vref_count));
1860+
1861+ qla2x00_free_fcports(vha);
1862+
18491863 mutex_lock(&ha->vport_lock);
18501864 ha->cur_vport_count--;
18511865 clear_bit(vha->vp_idx, ha->vp_idx_map);
18521866 mutex_unlock(&ha->vport_lock);
18531867
1854− if (vha->timer_active) {
1855− qla2x00_vp_stop_timer(vha);
1856− DEBUG15(printk ("scsi(%ld): timer for the vport[%d] = %p "
1857− "has stopped\n",
1858− vha->host_no, vha->vp_idx, vha));
1859− }
1860−
18611868 if (vha->req->id && !ha->flags.cpu_affinity_enabled) {
18621869 if (qla25xx_delete_req_que(vha, vha->req) != QLA_SUCCESS)
18631870 qla_printk(KERN_WARNING, ha,
drivers/scsi/qla2xxx/qla_dbg.h+0−2
@@ -29,8 +29,6 @@ · 28 unmodified lines
2929 /* #define QL_DEBUG_LEVEL_17 */ /* Output EEH trace messages */
3030 /* #define QL_DEBUG_LEVEL_18 */ /* Output T10 CRC trace messages */
3131
32−/* #define QL_PRINTK_BUF */ /* Captures printk to buffer */
33−
3432 /*
3533 * Macros use for debugging the driver.
3634 */
drivers/scsi/qla2xxx/qla_def.h+20−0
@@ -2641,6 +2641,7 @@ struct qla_hw_data { · 2640 unmodified lines
26412641 #define MBX_UPDATE_FLASH_ACTIVE 3
26422642
26432643 struct mutex vport_lock; /* Virtual port synchronization */
2644+ spinlock_t vport_slock; /* order is hardware_lock, then vport_slock */
26442645 struct completion mbx_cmd_comp; /* Serialize mbx access */
26452646 struct completion mbx_intr_comp; /* Used for completion notification */
26462647 struct completion dcbx_comp; /* For set port config notification */
@@ -2828,6 +2829,7 @@ typedef struct scsi_qla_host { · 181 unmodified lines
28282829 uint32_t management_server_logged_in :1;
28292830 uint32_t process_response_queue :1;
28302831 uint32_t difdix_supported:1;
2832+ uint32_t delete_progress:1;
28312833 } flags;
28322834
28332835 atomic_t loop_state;
@@ -2922,6 +2924,8 @@ typedef struct scsi_qla_host { · 88 unmodified lines
29222924 struct req_que *req;
29232925 int fw_heartbeat_counter;
29242926 int seconds_since_last_heartbeat;
2927+
2928+ atomic_t vref_count;
29252929 } scsi_qla_host_t;
29262930
29272931 /*
@@ -2932,6 +2936,22 @@ typedef struct scsi_qla_host { · 4 unmodified lines
29322936 test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) || \
29332937 atomic_read(&ha->loop_state) == LOOP_DOWN)
29342938
2939+#define QLA_VHA_MARK_BUSY(__vha, __bail) do { \
2940+ atomic_inc(&__vha->vref_count); \
2941+ mb(); \
2942+ if (__vha->flags.delete_progress) { \
2943+ atomic_dec(&__vha->vref_count); \
2944+ __bail = 1; \
2945+ } else { \
2946+ __bail = 0; \
2947+ } \
2948+} while (0)
2949+
2950+#define QLA_VHA_MARK_NOT_BUSY(__vha) do { \
2951+ atomic_dec(&__vha->vref_count); \
2952+} while (0)
2953+
2954+
29352955 #define qla_printk(level, ha, format, arg...) \
29362956 dev_printk(level , &((ha)->pdev->dev) , format , ## arg)
29372957
drivers/scsi/qla2xxx/qla_init.c+81−13
@@ -69,21 +69,29 @@ qla2x00_ctx_sp_free(srb_t *sp) · 68 unmodified lines
6969 {
7070 struct srb_ctx *ctx = sp->ctx;
7171 struct srb_iocb *iocb = ctx->u.iocb_cmd;
72+ struct scsi_qla_host *vha = sp->fcport->vha;
7273
7374 del_timer_sync(&iocb->timer);
7475 kfree(iocb);
7576 kfree(ctx);
7677 mempool_free(sp, sp->fcport->vha->hw->srb_mempool);
78+
79+ QLA_VHA_MARK_NOT_BUSY(vha);
7780 }
7881
7982 inline srb_t *
8083 qla2x00_get_ctx_sp(scsi_qla_host_t *vha, fc_port_t *fcport, size_t size,
8184 unsigned long tmo)
8285 {
83− srb_t *sp;
86+ srb_t *sp = NULL;
8487 struct qla_hw_data *ha = vha->hw;
8588 struct srb_ctx *ctx;
8689 struct srb_iocb *iocb;
90+ uint8_t bail;
91+
92+ QLA_VHA_MARK_BUSY(vha, bail);
93+ if (bail)
94+ return NULL;
8795
8896 sp = mempool_alloc(ha->srb_mempool, GFP_KERNEL);
8997 if (!sp)
@@ -116,6 +124,8 @@ qla2x00_get_ctx_sp(scsi_qla_host_t *vha, fc_port_t *fcport, size_t size, · 26 unmodified lines
116124 iocb->timer.function = qla2x00_ctx_sp_timeout;
117125 add_timer(&iocb->timer);
118126 done:
127+ if (!sp)
128+ QLA_VHA_MARK_NOT_BUSY(vha);
119129 return sp;
120130 }
121131
@@ -1777,11 +1787,15 @@ qla2x00_init_rings(scsi_qla_host_t *vha) · 1655 unmodified lines
17771787 qla2x00_init_response_q_entries(rsp);
17781788 }
17791789
1790+ spin_lock_irqsave(&ha->vport_slock, flags);
17801791 /* Clear RSCN queue. */
17811792 list_for_each_entry(vp, &ha->vp_list, list) {
17821793 vp->rscn_in_ptr = 0;
17831794 vp->rscn_out_ptr = 0;
17841795 }
1796+
1797+ spin_unlock_irqrestore(&ha->vport_slock, flags);
1798+
17851799 ha->isp_ops->config_rings(vha);
17861800
17871801 spin_unlock_irqrestore(&ha->hardware_lock, flags);
@@ -3218,12 +3232,17 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha, · 1430 unmodified lines
32183232 /* Bypass virtual ports of the same host. */
32193233 found = 0;
32203234 if (ha->num_vhosts) {
3235+ unsigned long flags;
3236+
3237+ spin_lock_irqsave(&ha->vport_slock, flags);
32213238 list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
32223239 if (new_fcport->d_id.b24 == vp->d_id.b24) {
32233240 found = 1;
32243241 break;
32253242 }
32263243 }
3244+ spin_unlock_irqrestore(&ha->vport_slock, flags);
3245+
32273246 if (found)
32283247 continue;
32293248 }
@@ -3343,6 +3362,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev) · 113 unmodified lines
33433362 struct qla_hw_data *ha = vha->hw;
33443363 struct scsi_qla_host *vp;
33453364 struct scsi_qla_host *tvp;
3365+ unsigned long flags = 0;
33463366
33473367 rval = QLA_SUCCESS;
33483368
@@ -3367,6 +3387,8 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev) · 18 unmodified lines
33673387 /* Check for loop ID being already in use. */
33683388 found = 0;
33693389 fcport = NULL;
3390+
3391+ spin_lock_irqsave(&ha->vport_slock, flags);
33703392 list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
33713393 list_for_each_entry(fcport, &vp->vp_fcports, list) {
33723394 if (fcport->loop_id == dev->loop_id &&
@@ -3379,6 +3401,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev) · 6 unmodified lines
33793401 if (found)
33803402 break;
33813403 }
3404+ spin_unlock_irqrestore(&ha->vport_slock, flags);
33823405
33833406 /* If not in use then it is free to use. */
33843407 if (!found) {
@@ -3791,14 +3814,27 @@ void · 406 unmodified lines
37913814 qla2x00_update_fcports(scsi_qla_host_t *base_vha)
37923815 {
37933816 fc_port_t *fcport;
3794− struct scsi_qla_host *tvp, *vha;
3817+ struct scsi_qla_host *vha;
3818+ struct qla_hw_data *ha = base_vha->hw;
3819+ unsigned long flags;
37953820
3821+ spin_lock_irqsave(&ha->vport_slock, flags);
37963822 /* Go with deferred removal of rport references. */
3797− list_for_each_entry_safe(vha, tvp, &base_vha->hw->vp_list, list)
3798− list_for_each_entry(fcport, &vha->vp_fcports, list)
3823+ list_for_each_entry(vha, &base_vha->hw->vp_list, list) {
3824+ atomic_inc(&vha->vref_count);
3825+ list_for_each_entry(fcport, &vha->vp_fcports, list) {
37993826 if (fcport && fcport->drport &&
3800− atomic_read(&fcport->state) != FCS_UNCONFIGURED)
3827+ atomic_read(&fcport->state) != FCS_UNCONFIGURED) {
3828+ spin_unlock_irqrestore(&ha->vport_slock, flags);
3829+
38013830 qla2x00_rport_del(fcport);
3831+
3832+ spin_lock_irqsave(&ha->vport_slock, flags);
3833+ }
3834+ }
3835+ atomic_dec(&vha->vref_count);
3836+ }
3837+ spin_unlock_irqrestore(&ha->vport_slock, flags);
38023838 }
38033839
38043840 void
@@ -3806,7 +3842,7 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha) · 1 unmodified line
38063842 {
38073843 struct qla_hw_data *ha = vha->hw;
38083844 struct scsi_qla_host *vp, *base_vha = pci_get_drvdata(ha->pdev);
3809− struct scsi_qla_host *tvp;
3845+ unsigned long flags;
38103846
38113847 vha->flags.online = 0;
38123848 ha->flags.chip_reset_done = 0;
@@ -3824,8 +3860,18 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha) · 11 unmodified lines
38243860 if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
38253861 atomic_set(&vha->loop_state, LOOP_DOWN);
38263862 qla2x00_mark_all_devices_lost(vha, 0);
3827− list_for_each_entry_safe(vp, tvp, &base_vha->hw->vp_list, list)
3863+
3864+ spin_lock_irqsave(&ha->vport_slock, flags);
3865+ list_for_each_entry(vp, &base_vha->hw->vp_list, list) {
3866+ atomic_inc(&vp->vref_count);
3867+ spin_unlock_irqrestore(&ha->vport_slock, flags);
3868+
38283869 qla2x00_mark_all_devices_lost(vp, 0);
3870+
3871+ spin_lock_irqsave(&ha->vport_slock, flags);
3872+ atomic_dec(&vp->vref_count);
3873+ }
3874+ spin_unlock_irqrestore(&ha->vport_slock, flags);
38293875 } else {
38303876 if (!atomic_read(&vha->loop_down_timer))
38313877 atomic_set(&vha->loop_down_timer,
@@ -3862,8 +3908,8 @@ qla2x00_abort_isp(scsi_qla_host_t *vha) · 30 unmodified lines
38623908 uint8_t status = 0;
38633909 struct qla_hw_data *ha = vha->hw;
38643910 struct scsi_qla_host *vp;
3865− struct scsi_qla_host *tvp;
38663911 struct req_que *req = ha->req_q_map[0];
3912+ unsigned long flags;
38673913
38683914 if (vha->flags.online) {
38693915 qla2x00_abort_isp_cleanup(vha);
@@ -3970,10 +4016,21 @@ qla2x00_abort_isp(scsi_qla_host_t *vha) · 100 unmodified lines
39704016 DEBUG(printk(KERN_INFO
39714017 "qla2x00_abort_isp(%ld): succeeded.\n",
39724018 vha->host_no));
3973− list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
3974− if (vp->vp_idx)
4019+
4020+ spin_lock_irqsave(&ha->vport_slock, flags);
4021+ list_for_each_entry(vp, &ha->vp_list, list) {
4022+ if (vp->vp_idx) {
4023+ atomic_inc(&vp->vref_count);
4024+ spin_unlock_irqrestore(&ha->vport_slock, flags);
4025+
39754026 qla2x00_vp_abort_isp(vp);
4027+
4028+ spin_lock_irqsave(&ha->vport_slock, flags);
4029+ atomic_dec(&vp->vref_count);
4030+ }
39764031 }
4032+ spin_unlock_irqrestore(&ha->vport_slock, flags);
4033+
39774034 } else {
39784035 qla_printk(KERN_INFO, ha,
39794036 "qla2x00_abort_isp: **** FAILED ****\n");
@@ -5185,7 +5242,7 @@ qla82xx_restart_isp(scsi_qla_host_t *vha) · 1205 unmodified lines
51855242 struct req_que *req = ha->req_q_map[0];
51865243 struct rsp_que *rsp = ha->rsp_q_map[0];
51875244 struct scsi_qla_host *vp;
5188− struct scsi_qla_host *tvp;
5245+ unsigned long flags;
51895246
51905247 status = qla2x00_init_rings(vha);
51915248 if (!status) {
@@ -5272,10 +5329,21 @@ qla82xx_restart_isp(scsi_qla_host_t *vha) · 80 unmodified lines
52725329 DEBUG(printk(KERN_INFO
52735330 "qla82xx_restart_isp(%ld): succeeded.\n",
52745331 vha->host_no));
5275− list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
5276− if (vp->vp_idx)
5332+
5333+ spin_lock_irqsave(&ha->vport_slock, flags);
5334+ list_for_each_entry(vp, &ha->vp_list, list) {
5335+ if (vp->vp_idx) {
5336+ atomic_inc(&vp->vref_count);
5337+ spin_unlock_irqrestore(&ha->vport_slock, flags);
5338+
52775339 qla2x00_vp_abort_isp(vp);
5340+
5341+ spin_lock_irqsave(&ha->vport_slock, flags);
5342+ atomic_dec(&vp->vref_count);
5343+ }
52785344 }
5345+ spin_unlock_irqrestore(&ha->vport_slock, flags);
5346+
52795347 } else {
52805348 qla_printk(KERN_INFO, ha,
52815349 "qla82xx_restart_isp: **** FAILED ****\n");
drivers/scsi/qla2xxx/qla_isr.c+4−3
@@ -1706,19 +1706,20 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) · 1705 unmodified lines
17061706 cp->result = DID_ERROR << 16;
17071707 break;
17081708 }
1709− } else if (!lscsi_status) {
1709+ } else {
17101710 DEBUG2(qla_printk(KERN_INFO, ha,
17111711 "scsi(%ld:%d:%d) Dropped frame(s) detected (0x%x "
17121712 "of 0x%x bytes).\n", vha->host_no, cp->device->id,
17131713 cp->device->lun, resid, scsi_bufflen(cp)));
17141714
1715− cp->result = DID_ERROR << 16;
1716− break;
1715+ cp->result = DID_ERROR << 16 | lscsi_status;
1716+ goto check_scsi_status;
17171717 }
17181718
17191719 cp->result = DID_OK << 16 | lscsi_status;
17201720 logit = 0;
17211721
1722+check_scsi_status:
17221723 /*
17231724 * Check to see if SCSI Status is non zero. If so report SCSI
17241725 * Status.
drivers/scsi/qla2xxx/qla_mbx.c+5−2
@@ -2913,7 +2913,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, · 2912 unmodified lines
29132913 uint16_t stat = le16_to_cpu(rptid_entry->vp_idx);
29142914 struct qla_hw_data *ha = vha->hw;
29152915 scsi_qla_host_t *vp;
2916− scsi_qla_host_t *tvp;
2916+ unsigned long flags;
29172917
29182918 if (rptid_entry->entry_status != 0)
29192919 return;
@@ -2945,9 +2945,12 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, · 25 unmodified lines
29452945 return;
29462946 }
29472947
2948− list_for_each_entry_safe(vp, tvp, &ha->vp_list, list)
2948+ spin_lock_irqsave(&ha->vport_slock, flags);
2949+ list_for_each_entry(vp, &ha->vp_list, list)
29492950 if (vp_idx == vp->vp_idx)
29502951 break;
2952+ spin_unlock_irqrestore(&ha->vport_slock, flags);
2953+
29512954 if (!vp)
29522955 return;
29532956
drivers/scsi/qla2xxx/qla_mid.c+60−8
@@ -30,6 +30,7 @@ qla24xx_allocate_vp_id(scsi_qla_host_t *vha) · 29 unmodified lines
3030 {
3131 uint32_t vp_id;
3232 struct qla_hw_data *ha = vha->hw;
33+ unsigned long flags;
3334
3435 /* Find an empty slot and assign an vp_id */
3536 mutex_lock(&ha->vport_lock);
@@ -44,7 +45,11 @@ qla24xx_allocate_vp_id(scsi_qla_host_t *vha) · 8 unmodified lines
4445 set_bit(vp_id, ha->vp_idx_map);
4546 ha->num_vhosts++;
4647 vha->vp_idx = vp_id;
48+
49+ spin_lock_irqsave(&ha->vport_slock, flags);
4750 list_add_tail(&vha->list, &ha->vp_list);
51+ spin_unlock_irqrestore(&ha->vport_slock, flags);
52+
4853 mutex_unlock(&ha->vport_lock);
4954 return vp_id;
5055 }
@@ -54,12 +59,31 @@ qla24xx_deallocate_vp_id(scsi_qla_host_t *vha) · 3 unmodified lines
5459 {
5560 uint16_t vp_id;
5661 struct qla_hw_data *ha = vha->hw;
62+ unsigned long flags = 0;
5763
5864 mutex_lock(&ha->vport_lock);
65+ /*
66+ * Wait for all pending activities to finish before removing vport from
67+ * the list.
68+ * Lock needs to be held for safe removal from the list (it
69+ * ensures no active vp_list traversal while the vport is removed
70+ * from the queue)
71+ */
72+ spin_lock_irqsave(&ha->vport_slock, flags);
73+ while (atomic_read(&vha->vref_count)) {
74+ spin_unlock_irqrestore(&ha->vport_slock, flags);
75+
76+ msleep(500);
77+
78+ spin_lock_irqsave(&ha->vport_slock, flags);
79+ }
80+ list_del(&vha->list);
81+ spin_unlock_irqrestore(&ha->vport_slock, flags);
82+
5983 vp_id = vha->vp_idx;
6084 ha->num_vhosts--;
6185 clear_bit(vp_id, ha->vp_idx_map);
62− list_del(&vha->list);
86+
6387 mutex_unlock(&ha->vport_lock);
6488 }
6589
@@ -68,12 +92,17 @@ qla24xx_find_vhost_by_name(struct qla_hw_data *ha, uint8_t *port_name) · 2 unmodified lines
6892 {
6993 scsi_qla_host_t *vha;
7094 struct scsi_qla_host *tvha;
95+ unsigned long flags;
7196
97+ spin_lock_irqsave(&ha->vport_slock, flags);
7298 /* Locate matching device in database. */
7399 list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) {
74− if (!memcmp(port_name, vha->port_name, WWN_SIZE))
100+ if (!memcmp(port_name, vha->port_name, WWN_SIZE)) {
101+ spin_unlock_irqrestore(&ha->vport_slock, flags);
75102 return vha;
103+ }
76104 }
105+ spin_unlock_irqrestore(&ha->vport_slock, flags);
77106 return NULL;
78107 }
79108
@@ -93,6 +122,12 @@ qla24xx_find_vhost_by_name(struct qla_hw_data *ha, uint8_t *port_name) · 13 unmodified lines
93122 static void
94123 qla2x00_mark_vp_devices_dead(scsi_qla_host_t *vha)
95124 {
125+ /*
126+ * !!! NOTE !!!
127+ * This function, if called in contexts other than vp create, disable
128+ * or delete, please make sure this is synchronized with the
129+ * delete thread.
130+ */
96131 fc_port_t *fcport;
97132
98133 list_for_each_entry(fcport, &vha->vp_fcports, list) {
@@ -100,7 +135,6 @@ qla2x00_mark_vp_devices_dead(scsi_qla_host_t *vha) · 1 unmodified line
100135 "loop_id=0x%04x :%x\n",
101136 vha->host_no, fcport->loop_id, fcport->vp_idx));
102137
103− atomic_set(&fcport->state, FCS_DEVICE_DEAD);
104138 qla2x00_mark_device_lost(vha, fcport, 0, 0);
105139 atomic_set(&fcport->state, FCS_UNCONFIGURED);
106140 }
@@ -194,12 +228,17 @@ qla24xx_configure_vp(scsi_qla_host_t *vha) · 87 unmodified lines
194228 void
195229 qla2x00_alert_all_vps(struct rsp_que *rsp, uint16_t *mb)
196230 {
197− scsi_qla_host_t *vha, *tvha;
231+ scsi_qla_host_t *vha;
198232 struct qla_hw_data *ha = rsp->hw;
199233 int i = 0;
234+ unsigned long flags;
200235
201− list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) {
236+ spin_lock_irqsave(&ha->vport_slock, flags);
237+ list_for_each_entry(vha, &ha->vp_list, list) {
202238 if (vha->vp_idx) {
239+ atomic_inc(&vha->vref_count);
240+ spin_unlock_irqrestore(&ha->vport_slock, flags);
241+
203242 switch (mb[0]) {
204243 case MBA_LIP_OCCURRED:
205244 case MBA_LOOP_UP:
@@ -215,9 +254,13 @@ qla2x00_alert_all_vps(struct rsp_que *rsp, uint16_t *mb) · 9 unmodified lines
215254 qla2x00_async_event(vha, rsp, mb);
216255 break;
217256 }
257+
258+ spin_lock_irqsave(&ha->vport_slock, flags);
259+ atomic_dec(&vha->vref_count);
218260 }
219261 i++;
220262 }
263+ spin_unlock_irqrestore(&ha->vport_slock, flags);
221264 }
222265
223266 int
@@ -297,7 +340,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha) · 73 unmodified lines
297340 int ret;
298341 struct qla_hw_data *ha = vha->hw;
299342 scsi_qla_host_t *vp;
300− struct scsi_qla_host *tvp;
343+ unsigned long flags = 0;
301344
302345 if (vha->vp_idx)
303346 return;
@@ -309,10 +352,19 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha) · 5 unmodified lines
309352 if (!(ha->current_topology & ISP_CFG_F))
310353 return;
311354
312− list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
313− if (vp->vp_idx)
355+ spin_lock_irqsave(&ha->vport_slock, flags);
356+ list_for_each_entry(vp, &ha->vp_list, list) {
357+ if (vp->vp_idx) {
358+ atomic_inc(&vp->vref_count);
359+ spin_unlock_irqrestore(&ha->vport_slock, flags);
360+
314361 ret = qla2x00_do_dpc_vp(vp);
362+
363+ spin_lock_irqsave(&ha->vport_slock, flags);
364+ atomic_dec(&vp->vref_count);
365+ }
315366 }
367+ spin_unlock_irqrestore(&ha->vport_slock, flags);
316368 }
317369
318370 int
drivers/scsi/qla2xxx/qla_nx.c+27−9
@@ -2672,6 +2672,19 @@ qla82xx_start_scsi(srb_t *sp) · 2671 unmodified lines
26722672 sufficient_dsds:
26732673 req_cnt = 1;
26742674
2675+ if (req->cnt < (req_cnt + 2)) {
2676+ cnt = (uint16_t)RD_REG_DWORD_RELAXED(
2677+ &reg->req_q_out[0]);
2678+ if (req->ring_index < cnt)
2679+ req->cnt = cnt - req->ring_index;
2680+ else
2681+ req->cnt = req->length -
2682+ (req->ring_index - cnt);
2683+ }
2684+
2685+ if (req->cnt < (req_cnt + 2))
2686+ goto queuing_error;
2687+
26752688 ctx = sp->ctx = mempool_alloc(ha->ctx_mempool, GFP_ATOMIC);
26762689 if (!sp->ctx) {
26772690 DEBUG(printk(KERN_INFO
@@ -3307,16 +3320,19 @@ qla82xx_check_fw_alive(scsi_qla_host_t *vha) · 629 unmodified lines
33073320 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
33083321 }
33093322 qla2xxx_wake_dpc(vha);
3323+ ha->flags.fw_hung = 1;
33103324 if (ha->flags.mbox_busy) {
3311− ha->flags.fw_hung = 1;
33123325 ha->flags.mbox_int = 1;
33133326 DEBUG2(qla_printk(KERN_ERR, ha,
3314− "Due to fw hung, doing premature "
3315− "completion of mbx command\n"));
3316− complete(&ha->mbx_intr_comp);
3327+ "Due to fw hung, doing premature "
3328+ "completion of mbx command\n"));
3329+ if (test_bit(MBX_INTR_WAIT,
3330+ &ha->mbx_cmd_flags))
3331+ complete(&ha->mbx_intr_comp);
33173332 }
33183333 }
3319− }
3334+ } else
3335+ vha->seconds_since_last_heartbeat = 0;
33203336 vha->fw_heartbeat_counter = fw_heartbeat_counter;
33213337 }
33223338
@@ -3418,13 +3434,15 @@ void qla82xx_watchdog(scsi_qla_host_t *vha) · 95 unmodified lines
34183434 "%s(): Adapter reset needed!\n", __func__);
34193435 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
34203436 qla2xxx_wake_dpc(vha);
3437+ ha->flags.fw_hung = 1;
34213438 if (ha->flags.mbox_busy) {
3422− ha->flags.fw_hung = 1;
34233439 ha->flags.mbox_int = 1;
34243440 DEBUG2(qla_printk(KERN_ERR, ha,
3425− "Need reset, doing premature "
3426− "completion of mbx command\n"));
3427− complete(&ha->mbx_intr_comp);
3441+ "Need reset, doing premature "
3442+ "completion of mbx command\n"));
3443+ if (test_bit(MBX_INTR_WAIT,
3444+ &ha->mbx_cmd_flags))
3445+ complete(&ha->mbx_intr_comp);
34283446 }
34293447 } else {
34303448 qla82xx_check_fw_alive(vha);
drivers/scsi/qla2xxx/qla_os.c+26−4
@@ -2341,16 +2341,28 @@ probe_out: · 2340 unmodified lines
23412341 static void
23422342 qla2x00_remove_one(struct pci_dev *pdev)
23432343 {
2344− scsi_qla_host_t *base_vha, *vha, *temp;
2344+ scsi_qla_host_t *base_vha, *vha;
23452345 struct qla_hw_data *ha;
2346+ unsigned long flags;
23462347
23472348 base_vha = pci_get_drvdata(pdev);
23482349 ha = base_vha->hw;
23492350
2350− list_for_each_entry_safe(vha, temp, &ha->vp_list, list) {
2351− if (vha && vha->fc_vport)
2351+ spin_lock_irqsave(&ha->vport_slock, flags);
2352+ list_for_each_entry(vha, &ha->vp_list, list) {
2353+ atomic_inc(&vha->vref_count);
2354+
2355+ if (vha && vha->fc_vport) {
2356+ spin_unlock_irqrestore(&ha->vport_slock, flags);
2357+
23522358 fc_vport_terminate(vha->fc_vport);
2359+
2360+ spin_lock_irqsave(&ha->vport_slock, flags);
2361+ }
2362+
2363+ atomic_dec(&vha->vref_count);
23532364 }
2365+ spin_unlock_irqrestore(&ha->vport_slock, flags);
23542366
23552367 set_bit(UNLOADING, &base_vha->dpc_flags);
23562368
@@ -2975,10 +2987,17 @@ static struct qla_work_evt * · 618 unmodified lines
29752987 qla2x00_alloc_work(struct scsi_qla_host *vha, enum qla_work_type type)
29762988 {
29772989 struct qla_work_evt *e;
2990+ uint8_t bail;
2991+
2992+ QLA_VHA_MARK_BUSY(vha, bail);
2993+ if (bail)
2994+ return NULL;
29782995
29792996 e = kzalloc(sizeof(struct qla_work_evt), GFP_ATOMIC);
2980− if (!e)
2997+ if (!e) {
2998+ QLA_VHA_MARK_NOT_BUSY(vha);
29812999 return NULL;
3000+ }
29823001
29833002 INIT_LIST_HEAD(&e->list);
29843003 e->type = type;
@@ -3135,6 +3154,9 @@ qla2x00_do_work(struct scsi_qla_host *vha) · 150 unmodified lines
31353154 }
31363155 if (e->flags & QLA_EVT_FLAG_FREE)
31373156 kfree(e);
3157+
3158+ /* For each work completed decrement vha ref count */
3159+ QLA_VHA_MARK_NOT_BUSY(vha);
31383160 }
31393161 }
31403162
drivers/scsi/qla2xxx/qla_version.h+2−2
@@ -7,9 +7,9 @@ · 6 unmodified lines
77 /*
88 * Driver version
99 */
10−#define QLA2XXX_VERSION "8.03.03-k0"
10+#define QLA2XXX_VERSION "8.03.04-k0"
1111
1212 #define QLA_DRIVER_MAJOR_VER 8
1313 #define QLA_DRIVER_MINOR_VER 3
14−#define QLA_DRIVER_PATCH_VER 3
14+#define QLA_DRIVER_PATCH_VER 4
1515 #define QLA_DRIVER_BETA_VER 0
drivers/scsi/scsi_lib.c+1−1
@@ -1011,8 +1011,8 @@ int scsi_init_io(struct scsi_cmnd *cmd, gfp_t gfp_mask) · 1010 unmodified lines
10111011
10121012 err_exit:
10131013 scsi_release_buffers(cmd);
1014− scsi_put_command(cmd);
10151014 cmd->request->special = NULL;
1015+ scsi_put_command(cmd);
10161016 return error;
10171017 }
10181018 EXPORT_SYMBOL(scsi_init_io);
drivers/scsi/sd.c+4−4
@@ -870,7 +870,7 @@ static int sd_release(struct gendisk *disk, fmode_t mode) · 869 unmodified lines
870870
871871 SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_release\n"));
872872
873− if (atomic_dec_return(&sdkp->openers) && sdev->removable) {
873+ if (atomic_dec_return(&sdkp->openers) == 0 && sdev->removable) {
874874 if (scsi_block_when_processing_errors(sdev))
875875 scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW);
876876 }
@@ -2625,15 +2625,15 @@ module_exit(exit_sd); · 1748 unmodified lines
26252625 static void sd_print_sense_hdr(struct scsi_disk *sdkp,
26262626 struct scsi_sense_hdr *sshdr)
26272627 {
2628− sd_printk(KERN_INFO, sdkp, "");
2628+ sd_printk(KERN_INFO, sdkp, " ");
26292629 scsi_show_sense_hdr(sshdr);
2630− sd_printk(KERN_INFO, sdkp, "");
2630+ sd_printk(KERN_INFO, sdkp, " ");
26312631 scsi_show_extd_sense(sshdr->asc, sshdr->ascq);
26322632 }
26332633
26342634 static void sd_print_result(struct scsi_disk *sdkp, int result)
26352635 {
2636− sd_printk(KERN_INFO, sdkp, "");
2636+ sd_printk(KERN_INFO, sdkp, " ");
26372637 scsi_show_result(result);
26382638 }
26392639
drivers/scsi/sym53c8xx_2/sym_hipd.c+4−6
@@ -72,10 +72,7 @@ static void sym_printl_hex(u_char *p, int n) · 71 unmodified lines
7272
7373 static void sym_print_msg(struct sym_ccb *cp, char *label, u_char *msg)
7474 {
75− if (label)
76− sym_print_addr(cp->cmd, "%s: ", label);
77− else
78− sym_print_addr(cp->cmd, "");
75+ sym_print_addr(cp->cmd, "%s: ", label);
7976
8077 spi_print_msg(msg);
8178 printf("\n");
@@ -4558,7 +4555,8 @@ static void sym_int_sir(struct sym_hcb *np) · 4476 unmodified lines
45584555 switch (np->msgin [2]) {
45594556 case M_X_MODIFY_DP:
45604557 if (DEBUG_FLAGS & DEBUG_POINTER)
4561− sym_print_msg(cp, NULL, np->msgin);
4558+ sym_print_msg(cp, "extended msg ",
4559+ np->msgin);
45624560 tmp = (np->msgin[3]<<24) + (np->msgin[4]<<16) +
45634561 (np->msgin[5]<<8) + (np->msgin[6]);
45644562 sym_modify_dp(np, tp, cp, tmp);
@@ -4585,7 +4583,7 @@ static void sym_int_sir(struct sym_hcb *np) · 20 unmodified lines
45854583 */
45864584 case M_IGN_RESIDUE:
45874585 if (DEBUG_FLAGS & DEBUG_POINTER)
4588− sym_print_msg(cp, NULL, np->msgin);
4586+ sym_print_msg(cp, "1 or 2 byte ", np->msgin);
45894587 if (cp->host_flags & HF_SENSE)
45904588 OUTL_DSP(np, SCRIPTA_BA(np, clrack));
45914589 else
drivers/serial/bfin_sport_uart.c+1−1
@@ -121,7 +121,7 @@ static int sport_uart_setup(struct sport_uart_port *up, int size, int baud_rate) · 120 unmodified lines
121121 unsigned int sclk = get_sclk();
122122
123123 /* Set TCR1 and TCR2, TFSR is not enabled for uart */
124− SPORT_PUT_TCR1(up, (ITFS | TLSBIT | ITCLK));
124+ SPORT_PUT_TCR1(up, (LATFS | ITFS | TFSR | TLSBIT | ITCLK));
125125 SPORT_PUT_TCR2(up, size + 1);
126126 pr_debug("%s TCR1:%x, TCR2:%x\n", __func__, SPORT_GET_TCR1(up), SPORT_GET_TCR2(up));
127127
drivers/serial/mpc52xx_uart.c+1−0
@@ -500,6 +500,7 @@ static int __init mpc512x_psc_fifoc_init(void) · 499 unmodified lines
500500 psc_fifoc = of_iomap(np, 0);
501501 if (!psc_fifoc) {
502502 pr_err("%s: Can't map FIFOC\n", __func__);
503+ of_node_put(np);
503504 return -ENODEV;
504505 }
505506
drivers/serial/sn_console.c+1−1
@@ -492,7 +492,7 @@ sn_receive_chars(struct sn_cons_port *port, unsigned long flags) · 491 unmodified lines
492492 sysrq_requested = 0;
493493 if (ch && time_before(jiffies, sysrq_timeout)) {
494494 spin_unlock_irqrestore(&port->sc_port.lock, flags);
495− handle_sysrq(ch, NULL);
495+ handle_sysrq(ch);
496496 spin_lock_irqsave(&port->sc_port.lock, flags);
497497 /* ignore actual sysrq command char */
498498 continue;
drivers/spi/amba-pl022.c+9−7
@@ -503,8 +503,9 @@ static void giveback(struct pl022 *pl022) · 502 unmodified lines
503503 msg->state = NULL;
504504 if (msg->complete)
505505 msg->complete(msg->context);
506− /* This message is completed, so let's turn off the clock! */
506+ /* This message is completed, so let's turn off the clocks! */
507507 clk_disable(pl022->clk);
508+ amba_pclk_disable(pl022->adev);
508509 }
509510
510511 /**
@@ -1139,9 +1140,10 @@ static void pump_messages(struct work_struct *work) · 628 unmodified lines
11391140 /* Setup the SPI using the per chip configuration */
11401141 pl022->cur_chip = spi_get_ctldata(pl022->cur_msg->spi);
11411142 /*
1142− * We enable the clock here, then the clock will be disabled when
1143+ * We enable the clocks here, then the clocks will be disabled when
11431144 * giveback() is called in each method (poll/interrupt/DMA)
11441145 */
1146+ amba_pclk_enable(pl022->adev);
11451147 clk_enable(pl022->clk);
11461148 restore_state(pl022);
11471149 flush(pl022);
@@ -1786,11 +1788,9 @@ pl022_probe(struct amba_device *adev, struct amba_id *id) · 638 unmodified lines
17861788 }
17871789
17881790 /* Disable SSP */
1789− clk_enable(pl022->clk);
17901791 writew((readw(SSP_CR1(pl022->virtbase)) & (~SSP_CR1_MASK_SSE)),
17911792 SSP_CR1(pl022->virtbase));
17921793 load_ssp_default_config(pl022);
1793− clk_disable(pl022->clk);
17941794
17951795 status = request_irq(adev->irq[0], pl022_interrupt_handler, 0, "pl022",
17961796 pl022);
@@ -1818,6 +1818,8 @@ pl022_probe(struct amba_device *adev, struct amba_id *id) · 21 unmodified lines
18181818 goto err_spi_register;
18191819 }
18201820 dev_dbg(dev, "probe succeded\n");
1821+ /* Disable the silicon block pclk and clock it when needed */
1822+ amba_pclk_disable(adev);
18211823 return 0;
18221824
18231825 err_spi_register:
@@ -1879,9 +1881,9 @@ static int pl022_suspend(struct amba_device *adev, pm_message_t state) · 55 unmodified lines
18791881 return status;
18801882 }
18811883
1882− clk_enable(pl022->clk);
1884+ amba_pclk_enable(adev);
18831885 load_ssp_default_config(pl022);
1884− clk_disable(pl022->clk);
1886+ amba_pclk_disable(adev);
18851887 dev_dbg(&adev->dev, "suspended\n");
18861888 return 0;
18871889 }
@@ -1981,7 +1983,7 @@ static int __init pl022_init(void) · 93 unmodified lines
19811983 return amba_driver_register(&pl022_driver);
19821984 }
19831985
1984−module_init(pl022_init);
1986+subsys_initcall(pl022_init);
19851987
19861988 static void __exit pl022_exit(void)
19871989 {
drivers/spi/dw_spi.c+11−13
@@ -181,10 +181,6 @@ static void flush(struct dw_spi *dws) · 180 unmodified lines
181181 wait_till_not_busy(dws);
182182 }
183183
184−static void null_cs_control(u32 command)
185−{
186−}
187−
188184 static int null_writer(struct dw_spi *dws)
189185 {
190186 u8 n_bytes = dws->n_bytes;
@@ -322,7 +318,7 @@ static void giveback(struct dw_spi *dws) · 131 unmodified lines
322318 struct spi_transfer,
323319 transfer_list);
324320
325− if (!last_transfer->cs_change)
321+ if (!last_transfer->cs_change && dws->cs_control)
326322 dws->cs_control(MRST_SPI_DEASSERT);
327323
328324 msg->state = NULL;
@@ -396,6 +392,11 @@ static irqreturn_t interrupt_transfer(struct dw_spi *dws) · 67 unmodified lines
396392 static irqreturn_t dw_spi_irq(int irq, void *dev_id)
397393 {
398394 struct dw_spi *dws = dev_id;
395+ u16 irq_status, irq_mask = 0x3f;
396+
397+ irq_status = dw_readw(dws, isr) & irq_mask;
398+ if (!irq_status)
399+ return IRQ_NONE;
399400
400401 if (!dws->cur_msg) {
401402 spi_mask_intr(dws, SPI_INT_TXEI);
@@ -544,13 +545,13 @@ static void pump_transfers(unsigned long data) · 142 unmodified lines
544545 */
545546 if (dws->cs_control) {
546547 if (dws->rx && dws->tx)
547− chip->tmode = 0x00;
548+ chip->tmode = SPI_TMOD_TR;
548549 else if (dws->rx)
549− chip->tmode = 0x02;
550+ chip->tmode = SPI_TMOD_RO;
550551 else
551− chip->tmode = 0x01;
552+ chip->tmode = SPI_TMOD_TO;
552553
553− cr0 &= ~(0x3 << SPI_MODE_OFFSET);
554+ cr0 &= ~SPI_TMOD_MASK;
554555 cr0 |= (chip->tmode << SPI_TMOD_OFFSET);
555556 }
556557
@@ -699,9 +700,6 @@ static int dw_spi_setup(struct spi_device *spi) · 142 unmodified lines
699700 chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
700701 if (!chip)
701702 return -ENOMEM;
702−
703− chip->cs_control = null_cs_control;
704− chip->enable_dma = 0;
705703 }
706704
707705 /*
@@ -883,7 +881,7 @@ int __devinit dw_spi_add_host(struct dw_spi *dws) · 175 unmodified lines
883881 dws->dma_inited = 0;
884882 dws->dma_addr = (dma_addr_t)(dws->paddr + 0x60);
885883
886− ret = request_irq(dws->irq, dw_spi_irq, 0,
884+ ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED,
887885 "dw_spi", dws);
888886 if (ret < 0) {
889887 dev_err(&master->dev, "can not get IRQ\n");
drivers/spi/spi.c+3−6
@@ -554,11 +554,9 @@ done: · 553 unmodified lines
554554 EXPORT_SYMBOL_GPL(spi_register_master);
555555
556556
557−static int __unregister(struct device *dev, void *master_dev)
557+static int __unregister(struct device *dev, void *null)
558558 {
559− /* note: before about 2.6.14-rc1 this would corrupt memory: */
560− if (dev != master_dev)
561− spi_unregister_device(to_spi_device(dev));
559+ spi_unregister_device(to_spi_device(dev));
562560 return 0;
563561 }
564562
@@ -576,8 +574,7 @@ void spi_unregister_master(struct spi_master *master) · 11 unmodified lines
576574 {
577575 int dummy;
578576
579− dummy = device_for_each_child(master->dev.parent, &master->dev,
580− __unregister);
577+ dummy = device_for_each_child(&master->dev, NULL, __unregister);
581578 device_unregister(&master->dev);
582579 }
583580 EXPORT_SYMBOL_GPL(spi_unregister_master);
drivers/spi/spi_s3c64xx.c+25−12
@@ -200,6 +200,9 @@ static void flush_fifo(struct s3c64xx_spi_driver_data *sdd) · 199 unmodified lines
200200 val = readl(regs + S3C64XX_SPI_STATUS);
201201 } while (TX_FIFO_LVL(val, sci) && loops--);
202202
203+ if (loops == 0)
204+ dev_warn(&sdd->pdev->dev, "Timed out flushing TX FIFO\n");
205+
203206 /* Flush RxFIFO*/
204207 loops = msecs_to_loops(1);
205208 do {
@@ -210,6 +213,9 @@ static void flush_fifo(struct s3c64xx_spi_driver_data *sdd) · 4 unmodified lines
210213 break;
211214 } while (loops--);
212215
216+ if (loops == 0)
217+ dev_warn(&sdd->pdev->dev, "Timed out flushing RX FIFO\n");
218+
213219 val = readl(regs + S3C64XX_SPI_CH_CFG);
214220 val &= ~S3C64XX_SPI_CH_SW_RST;
215221 writel(val, regs + S3C64XX_SPI_CH_CFG);
@@ -320,16 +326,17 @@ static int wait_for_xfer(struct s3c64xx_spi_driver_data *sdd, · 104 unmodified lines
320326
321327 /* millisecs to xfer 'len' bytes @ 'cur_speed' */
322328 ms = xfer->len * 8 * 1000 / sdd->cur_speed;
323− ms += 5; /* some tolerance */
329+ ms += 10; /* some tolerance */
324330
325331 if (dma_mode) {
326332 val = msecs_to_jiffies(ms) + 10;
327333 val = wait_for_completion_timeout(&sdd->xfer_completion, val);
328334 } else {
335+ u32 status;
329336 val = msecs_to_loops(ms);
330337 do {
331− val = readl(regs + S3C64XX_SPI_STATUS);
332− } while (RX_FIFO_LVL(val, sci) < xfer->len && --val);
338+ status = readl(regs + S3C64XX_SPI_STATUS);
339+ } while (RX_FIFO_LVL(status, sci) < xfer->len && --val);
333340 }
334341
335342 if (!val)
@@ -447,8 +454,8 @@ static void s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd) · 111 unmodified lines
447454 writel(val, regs + S3C64XX_SPI_CLK_CFG);
448455 }
449456
450−void s3c64xx_spi_dma_rxcb(struct s3c2410_dma_chan *chan, void *buf_id,
451− int size, enum s3c2410_dma_buffresult res)
457+static void s3c64xx_spi_dma_rxcb(struct s3c2410_dma_chan *chan, void *buf_id,
458+ int size, enum s3c2410_dma_buffresult res)
452459 {
453460 struct s3c64xx_spi_driver_data *sdd = buf_id;
454461 unsigned long flags;
@@ -467,8 +474,8 @@ void s3c64xx_spi_dma_rxcb(struct s3c2410_dma_chan *chan, void *buf_id, · 12 unmodified lines
467474 spin_unlock_irqrestore(&sdd->lock, flags);
468475 }
469476
470−void s3c64xx_spi_dma_txcb(struct s3c2410_dma_chan *chan, void *buf_id,
471− int size, enum s3c2410_dma_buffresult res)
477+static void s3c64xx_spi_dma_txcb(struct s3c2410_dma_chan *chan, void *buf_id,
478+ int size, enum s3c2410_dma_buffresult res)
472479 {
473480 struct s3c64xx_spi_driver_data *sdd = buf_id;
474481 unsigned long flags;
@@ -508,8 +515,9 @@ static int s3c64xx_spi_map_mssg(struct s3c64xx_spi_driver_data *sdd, · 33 unmodified lines
508515 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
509516
510517 if (xfer->tx_buf != NULL) {
511− xfer->tx_dma = dma_map_single(dev, xfer->tx_buf,
512− xfer->len, DMA_TO_DEVICE);
518+ xfer->tx_dma = dma_map_single(dev,
519+ (void *)xfer->tx_buf, xfer->len,
520+ DMA_TO_DEVICE);
513521 if (dma_mapping_error(dev, xfer->tx_dma)) {
514522 dev_err(dev, "dma_map_single Tx failed\n");
515523 xfer->tx_dma = XFER_DMAADDR_INVALID;
@@ -919,6 +927,13 @@ static int __init s3c64xx_spi_probe(struct platform_device *pdev) · 403 unmodified lines
919927 return -ENODEV;
920928 }
921929
930+ sci = pdev->dev.platform_data;
931+ if (!sci->src_clk_name) {
932+ dev_err(&pdev->dev,
933+ "Board init must call s3c64xx_spi_set_info()\n");
934+ return -EINVAL;
935+ }
936+
922937 /* Check for availability of necessary resource */
923938
924939 dmatx_res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
@@ -946,8 +961,6 @@ static int __init s3c64xx_spi_probe(struct platform_device *pdev) · 21 unmodified lines
946961 return -ENOMEM;
947962 }
948963
949− sci = pdev->dev.platform_data;
950−
951964 platform_set_drvdata(pdev, master);
952965
953966 sdd = spi_master_get_devdata(master);
@@ -1170,7 +1183,7 @@ static int __init s3c64xx_spi_init(void) · 216 unmodified lines
11701183 {
11711184 return platform_driver_probe(&s3c64xx_spi_driver, s3c64xx_spi_probe);
11721185 }
1173−module_init(s3c64xx_spi_init);
1186+subsys_initcall(s3c64xx_spi_init);
11741187
11751188 static void __exit s3c64xx_spi_exit(void)
11761189 {
drivers/staging/comedi/drivers/das08_cs.c+0−1
@@ -222,7 +222,6 @@ static int das08_pcmcia_config_loop(struct pcmcia_device *p_dev, · 221 unmodified lines
222222 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
223223 p_dev->resource[0]->flags |=
224224 pcmcia_io_cfg_data_width(io->flags);
225− p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
226225 p_dev->resource[0]->start = io->win[0].base;
227226 p_dev->resource[0]->end = io->win[0].len;
228227 if (io->nwin > 1) {
drivers/staging/hv/netvsc_drv.c+3−0
@@ -327,6 +327,9 @@ static const struct net_device_ops device_ops = { · 326 unmodified lines
327327 .ndo_stop = netvsc_close,
328328 .ndo_start_xmit = netvsc_start_xmit,
329329 .ndo_set_multicast_list = netvsc_set_multicast_list,
330+ .ndo_change_mtu = eth_change_mtu,
331+ .ndo_validate_addr = eth_validate_addr,
332+ .ndo_set_mac_address = eth_mac_addr,
330333 };
331334
332335 static int netvsc_probe(struct device *device)
drivers/staging/hv/ring_buffer.c+1−2
@@ -193,8 +193,7 @@ Description: · 192 unmodified lines
193193 static inline u64
194194 GetRingBufferIndices(struct hv_ring_buffer_info *RingInfo)
195195 {
196− return ((u64)RingInfo->RingBuffer->WriteIndex << 32)
197− || RingInfo->RingBuffer->ReadIndex;
196+ return (u64)RingInfo->RingBuffer->WriteIndex << 32;
198197 }
199198
200199
drivers/staging/hv/storvsc_api.h+2−2
@@ -28,10 +28,10 @@ · 27 unmodified lines
2828 #include "vmbus_api.h"
2929
3030 /* Defines */
31−#define STORVSC_RING_BUFFER_SIZE (10*PAGE_SIZE)
31+#define STORVSC_RING_BUFFER_SIZE (20*PAGE_SIZE)
3232 #define BLKVSC_RING_BUFFER_SIZE (20*PAGE_SIZE)
3333
34−#define STORVSC_MAX_IO_REQUESTS 64
34+#define STORVSC_MAX_IO_REQUESTS 128
3535
3636 /*
3737 * In Hyper-V, each port/path/target maps to 1 scsi host adapter. In
drivers/staging/hv/storvsc_drv.c+7−4
@@ -495,7 +495,7 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl, · 494 unmodified lines
495495
496496 /* ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); */
497497
498− if (j == 0)
498+ if (bounce_addr == 0)
499499 bounce_addr = (unsigned long)kmap_atomic(sg_page((&bounce_sgl[j])), KM_IRQ0);
500500
501501 while (srclen) {
@@ -556,7 +556,7 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl, · 54 unmodified lines
556556 destlen = orig_sgl[i].length;
557557 /* ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); */
558558
559− if (j == 0)
559+ if (bounce_addr == 0)
560560 bounce_addr = (unsigned long)kmap_atomic(sg_page((&bounce_sgl[j])), KM_IRQ0);
561561
562562 while (destlen) {
@@ -615,6 +615,7 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, · 52 unmodified lines
615615 unsigned int request_size = 0;
616616 int i;
617617 struct scatterlist *sgl;
618+ unsigned int sg_count = 0;
618619
619620 DPRINT_DBG(STORVSC_DRV, "scmnd %p dir %d, use_sg %d buf %p len %d "
620621 "queue depth %d tagged %d", scmnd, scmnd->sc_data_direction,
@@ -697,6 +698,7 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, · 76 unmodified lines
697698 request->DataBuffer.Length = scsi_bufflen(scmnd);
698699 if (scsi_sg_count(scmnd)) {
699700 sgl = (struct scatterlist *)scsi_sglist(scmnd);
701+ sg_count = scsi_sg_count(scmnd);
700702
701703 /* check if we need to bounce the sgl */
702704 if (do_bounce_buffer(sgl, scsi_sg_count(scmnd)) != -1) {
@@ -731,15 +733,16 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, · 28 unmodified lines
731733 scsi_sg_count(scmnd));
732734
733735 sgl = cmd_request->bounce_sgl;
736+ sg_count = cmd_request->bounce_sgl_count;
734737 }
735738
736739 request->DataBuffer.Offset = sgl[0].offset;
737740
738− for (i = 0; i < scsi_sg_count(scmnd); i++) {
741+ for (i = 0; i < sg_count; i++) {
739742 DPRINT_DBG(STORVSC_DRV, "sgl[%d] len %d offset %d\n",
740743 i, sgl[i].length, sgl[i].offset);
741744 request->DataBuffer.PfnArray[i] =
742− page_to_pfn(sg_page((&sgl[i])));
745+ page_to_pfn(sg_page((&sgl[i])));
743746 }
744747 } else if (scsi_sglist(scmnd)) {
745748 /* ASSERT(scsi_bufflen(scmnd) <= PAGE_SIZE); */
drivers/staging/octeon/Kconfig+1−1
@@ -1,6 +1,6 @@
11 config OCTEON_ETHERNET
22 tristate "Cavium Networks Octeon Ethernet support"
3− depends on CPU_CAVIUM_OCTEON
3+ depends on CPU_CAVIUM_OCTEON && NETDEVICES
44 select PHYLIB
55 select MDIO_OCTEON
66 help
drivers/staging/rt2860/usb_main_dev.c+39−2
@@ -44,6 +44,7 @@ struct usb_device_id rtusb_usb_id[] = { · 43 unmodified lines
4444 {USB_DEVICE(0x07B8, 0x2870)}, /* AboCom */
4545 {USB_DEVICE(0x07B8, 0x2770)}, /* AboCom */
4646 {USB_DEVICE(0x0DF6, 0x0039)}, /* Sitecom 2770 */
47+ {USB_DEVICE(0x0DF6, 0x003F)}, /* Sitecom 2770 */
4748 {USB_DEVICE(0x083A, 0x7512)}, /* Arcadyan 2770 */
4849 {USB_DEVICE(0x0789, 0x0162)}, /* Logitec 2870 */
4950 {USB_DEVICE(0x0789, 0x0163)}, /* Logitec 2870 */
@@ -95,7 +96,8 @@ struct usb_device_id rtusb_usb_id[] = { · 45 unmodified lines
9596 {USB_DEVICE(0x050d, 0x815c)},
9697 {USB_DEVICE(0x1482, 0x3C09)}, /* Abocom */
9798 {USB_DEVICE(0x14B2, 0x3C09)}, /* Alpha */
98− {USB_DEVICE(0x04E8, 0x2018)}, /* samsung */
99+ {USB_DEVICE(0x04E8, 0x2018)}, /* samsung linkstick2 */
100+ {USB_DEVICE(0x1690, 0x0740)}, /* Askey */
99101 {USB_DEVICE(0x5A57, 0x0280)}, /* Zinwell */
100102 {USB_DEVICE(0x5A57, 0x0282)}, /* Zinwell */
101103 {USB_DEVICE(0x7392, 0x7718)},
@@ -105,21 +107,34 @@ struct usb_device_id rtusb_usb_id[] = { · 3 unmodified lines
105107 {USB_DEVICE(0x1737, 0x0071)}, /* Linksys WUSB600N */
106108 {USB_DEVICE(0x0411, 0x00e8)}, /* Buffalo WLI-UC-G300N */
107109 {USB_DEVICE(0x050d, 0x815c)}, /* Belkin F5D8053 */
110+ {USB_DEVICE(0x100D, 0x9031)}, /* Motorola 2770 */
108111 #endif /* RT2870 // */
109112 #ifdef RT3070
110113 {USB_DEVICE(0x148F, 0x3070)}, /* Ralink 3070 */
111114 {USB_DEVICE(0x148F, 0x3071)}, /* Ralink 3071 */
112115 {USB_DEVICE(0x148F, 0x3072)}, /* Ralink 3072 */
113116 {USB_DEVICE(0x0DB0, 0x3820)}, /* Ralink 3070 */
117+ {USB_DEVICE(0x0DB0, 0x871C)}, /* Ralink 3070 */
118+ {USB_DEVICE(0x0DB0, 0x822C)}, /* Ralink 3070 */
119+ {USB_DEVICE(0x0DB0, 0x871B)}, /* Ralink 3070 */
120+ {USB_DEVICE(0x0DB0, 0x822B)}, /* Ralink 3070 */
114121 {USB_DEVICE(0x0DF6, 0x003E)}, /* Sitecom 3070 */
115122 {USB_DEVICE(0x0DF6, 0x0042)}, /* Sitecom 3072 */
123+ {USB_DEVICE(0x0DF6, 0x0048)}, /* Sitecom 3070 */
124+ {USB_DEVICE(0x0DF6, 0x0047)}, /* Sitecom 3071 */
116125 {USB_DEVICE(0x14B2, 0x3C12)}, /* AL 3070 */
117126 {USB_DEVICE(0x18C5, 0x0012)}, /* Corega 3070 */
118127 {USB_DEVICE(0x083A, 0x7511)}, /* Arcadyan 3070 */
128+ {USB_DEVICE(0x083A, 0xA701)}, /* SMC 3070 */
129+ {USB_DEVICE(0x083A, 0xA702)}, /* SMC 3072 */
119130 {USB_DEVICE(0x1740, 0x9703)}, /* EnGenius 3070 */
120131 {USB_DEVICE(0x1740, 0x9705)}, /* EnGenius 3071 */
121132 {USB_DEVICE(0x1740, 0x9706)}, /* EnGenius 3072 */
133+ {USB_DEVICE(0x1740, 0x9707)}, /* EnGenius 3070 */
134+ {USB_DEVICE(0x1740, 0x9708)}, /* EnGenius 3071 */
135+ {USB_DEVICE(0x1740, 0x9709)}, /* EnGenius 3072 */
122136 {USB_DEVICE(0x13D3, 0x3273)}, /* AzureWave 3070 */
137+ {USB_DEVICE(0x13D3, 0x3305)}, /* AzureWave 3070*/
123138 {USB_DEVICE(0x1044, 0x800D)}, /* Gigabyte GN-WB32L 3070 */
124139 {USB_DEVICE(0x2019, 0xAB25)}, /* Planex Communications, Inc. RT3070 */
125140 {USB_DEVICE(0x07B8, 0x3070)}, /* AboCom 3070 */
@@ -132,14 +147,36 @@ struct usb_device_id rtusb_usb_id[] = { · 6 unmodified lines
132147 {USB_DEVICE(0x07D1, 0x3C0D)}, /* D-Link 3070 */
133148 {USB_DEVICE(0x07D1, 0x3C0E)}, /* D-Link 3070 */
134149 {USB_DEVICE(0x07D1, 0x3C0F)}, /* D-Link 3070 */
150+ {USB_DEVICE(0x07D1, 0x3C16)}, /* D-Link 3070 */
151+ {USB_DEVICE(0x07D1, 0x3C17)}, /* D-Link 8070 */
135152 {USB_DEVICE(0x1D4D, 0x000C)}, /* Pegatron Corporation 3070 */
136153 {USB_DEVICE(0x1D4D, 0x000E)}, /* Pegatron Corporation 3070 */
137154 {USB_DEVICE(0x5A57, 0x5257)}, /* Zinwell 3070 */
138155 {USB_DEVICE(0x5A57, 0x0283)}, /* Zinwell 3072 */
139156 {USB_DEVICE(0x04BB, 0x0945)}, /* I-O DATA 3072 */
157+ {USB_DEVICE(0x04BB, 0x0947)}, /* I-O DATA 3070 */
158+ {USB_DEVICE(0x04BB, 0x0948)}, /* I-O DATA 3072 */
140159 {USB_DEVICE(0x203D, 0x1480)}, /* Encore 3070 */
160+ {USB_DEVICE(0x20B8, 0x8888)}, /* PARA INDUSTRIAL 3070 */
161+ {USB_DEVICE(0x0B05, 0x1784)}, /* Asus 3072 */
162+ {USB_DEVICE(0x203D, 0x14A9)}, /* Encore 3070*/
163+ {USB_DEVICE(0x0DB0, 0x899A)}, /* MSI 3070*/
164+ {USB_DEVICE(0x0DB0, 0x3870)}, /* MSI 3070*/
165+ {USB_DEVICE(0x0DB0, 0x870A)}, /* MSI 3070*/
166+ {USB_DEVICE(0x0DB0, 0x6899)}, /* MSI 3070 */
167+ {USB_DEVICE(0x0DB0, 0x3822)}, /* MSI 3070 */
168+ {USB_DEVICE(0x0DB0, 0x3871)}, /* MSI 3070 */
169+ {USB_DEVICE(0x0DB0, 0x871A)}, /* MSI 3070 */
170+ {USB_DEVICE(0x0DB0, 0x822A)}, /* MSI 3070 */
171+ {USB_DEVICE(0x0DB0, 0x3821)}, /* Ralink 3070 */
172+ {USB_DEVICE(0x0DB0, 0x821A)}, /* Ralink 3070 */
173+ {USB_DEVICE(0x083A, 0xA703)}, /* IO-MAGIC */
174+ {USB_DEVICE(0x13D3, 0x3307)}, /* Azurewave */
175+ {USB_DEVICE(0x13D3, 0x3321)}, /* Azurewave */
176+ {USB_DEVICE(0x07FA, 0x7712)}, /* Edimax */
177+ {USB_DEVICE(0x0789, 0x0166)}, /* Edimax */
178+ {USB_DEVICE(0x148F, 0x2070)}, /* Edimax */
141179 #endif /* RT3070 // */
142− {USB_DEVICE(0x0DF6, 0x003F)}, /* Sitecom WL-608 */
143180 {USB_DEVICE(0x1737, 0x0077)}, /* Linksys WUSB54GC-EU v3 */
144181 {USB_DEVICE(0x2001, 0x3C09)}, /* D-Link */
145182 {USB_DEVICE(0x2001, 0x3C0A)}, /* D-Link 3072 */
drivers/staging/spectra/Kconfig+1−0
@@ -2,6 +2,7 @@ · 1 unmodified line
22 menuconfig SPECTRA
33 tristate "Denali Spectra Flash Translation Layer"
44 depends on BLOCK
5+ depends on X86_MRST
56 default n
67 ---help---
78 Enable the FTL pseudo-filesystem used with the NAND Flash
drivers/staging/spectra/ffsport.c+1−0
@@ -28,6 +28,7 @@ · 27 unmodified lines
2828 #include <linux/log2.h>
2929 #include <linux/init.h>
3030 #include <linux/smp_lock.h>
31+#include <linux/slab.h>
3132
3233 /**** Helper functions used for Div, Remainder operation on u64 ****/
3334
drivers/staging/wlan-ng/cfg80211.c+3−0
@@ -219,6 +219,7 @@ int prism2_get_key(struct wiphy *wiphy, struct net_device *dev, · 218 unmodified lines
219219 return -ENOENT;
220220 params.key_len = len;
221221 params.key = wlandev->wep_keys[key_index];
222+ params.seq_len = 0;
222223
223224 callback(cookie, &params);
224225
@@ -735,6 +736,8 @@ struct wiphy *wlan_create_wiphy(struct device *dev, wlandevice_t *wlandev) · 510 unmodified lines
735736 priv->band.n_channels = ARRAY_SIZE(prism2_channels);
736737 priv->band.bitrates = priv->rates;
737738 priv->band.n_bitrates = ARRAY_SIZE(prism2_rates);
739+ priv->band.band = IEEE80211_BAND_2GHZ;
740+ priv->band.ht_cap.ht_supported = false;
738741 wiphy->bands[IEEE80211_BAND_2GHZ] = &priv->band;
739742
740743 set_wiphy_dev(wiphy, dev);
drivers/staging/zram/zram_drv.c+1−0
@@ -769,6 +769,7 @@ static int __init zram_init(void) · 768 unmodified lines
769769 free_devices:
770770 while (dev_id)
771771 destroy_device(&devices[--dev_id]);
772+ kfree(devices);
772773 unregister:
773774 unregister_blkdev(zram_major, "zram");
774775 out:
drivers/usb/atm/cxacru.c+22−2
@@ -1127,6 +1127,7 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, · 1126 unmodified lines
11271127 {
11281128 struct cxacru_data *instance;
11291129 struct usb_device *usb_dev = interface_to_usbdev(intf);
1130+ struct usb_host_endpoint *cmd_ep = usb_dev->ep_in[CXACRU_EP_CMD];
11301131 int ret;
11311132
11321133 /* instance init */
@@ -1171,15 +1172,34 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, · 38 unmodified lines
11711172 goto fail;
11721173 }
11731174
1174− usb_fill_int_urb(instance->rcv_urb,
1175+ if (!cmd_ep) {
1176+ dbg("cxacru_bind: no command endpoint");
1177+ ret = -ENODEV;
1178+ goto fail;
1179+ }
1180+
1181+ if ((cmd_ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
1182+ == USB_ENDPOINT_XFER_INT) {
1183+ usb_fill_int_urb(instance->rcv_urb,
11751184 usb_dev, usb_rcvintpipe(usb_dev, CXACRU_EP_CMD),
11761185 instance->rcv_buf, PAGE_SIZE,
11771186 cxacru_blocking_completion, &instance->rcv_done, 1);
11781187
1179− usb_fill_int_urb(instance->snd_urb,
1188+ usb_fill_int_urb(instance->snd_urb,
11801189 usb_dev, usb_sndintpipe(usb_dev, CXACRU_EP_CMD),
11811190 instance->snd_buf, PAGE_SIZE,
11821191 cxacru_blocking_completion, &instance->snd_done, 4);
1192+ } else {
1193+ usb_fill_bulk_urb(instance->rcv_urb,
1194+ usb_dev, usb_rcvbulkpipe(usb_dev, CXACRU_EP_CMD),
1195+ instance->rcv_buf, PAGE_SIZE,
1196+ cxacru_blocking_completion, &instance->rcv_done);
1197+
1198+ usb_fill_bulk_urb(instance->snd_urb,
1199+ usb_dev, usb_sndbulkpipe(usb_dev, CXACRU_EP_CMD),
1200+ instance->snd_buf, PAGE_SIZE,
1201+ cxacru_blocking_completion, &instance->snd_done);
1202+ }
11831203
11841204 mutex_init(&instance->cm_serialize);
11851205
drivers/usb/class/cdc-acm.c+22−1
@@ -965,7 +965,8 @@ static int acm_probe(struct usb_interface *intf, · 964 unmodified lines
965965 }
966966
967967 if (!buflen) {
968− if (intf->cur_altsetting->endpoint->extralen &&
968+ if (intf->cur_altsetting->endpoint &&
969+ intf->cur_altsetting->endpoint->extralen &&
969970 intf->cur_altsetting->endpoint->extra) {
970971 dev_dbg(&intf->dev,
971972 "Seeking extra descriptors on endpoint\n");
@@ -1481,6 +1482,11 @@ static int acm_reset_resume(struct usb_interface *intf) · 509 unmodified lines
14811482 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
14821483 USB_CDC_ACM_PROTO_VENDOR)
14831484
1485+#define SAMSUNG_PCSUITE_ACM_INFO(x) \
1486+ USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1487+ USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1488+ USB_CDC_ACM_PROTO_VENDOR)
1489+
14841490 /*
14851491 * USB driver structure.
14861492 */
@@ -1591,6 +1597,17 @@ static const struct usb_device_id acm_ids[] = { · 104 unmodified lines
15911597 { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
15921598 { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
15931599 { NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1600+ { NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1601+ { NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1602+ { NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1603+ { NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1604+ { NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1605+ { NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1606+ { NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1607+ { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1608+ { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1609+ { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1610+ { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
15941611
15951612 /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
15961613
@@ -1599,6 +1616,10 @@ static const struct usb_device_id acm_ids[] = { · 2 unmodified lines
15991616 .driver_info = NOT_A_MODEM,
16001617 },
16011618
1619+ /* control interfaces without any protocol set */
1620+ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1621+ USB_CDC_PROTO_NONE) },
1622+
16021623 /* control interfaces with various AT-command sets */
16031624 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
16041625 USB_CDC_ACM_PROTO_AT_V25TER) },
drivers/usb/core/message.c+11−11
@@ -1724,6 +1724,15 @@ free_interfaces: · 1723 unmodified lines
17241724 if (ret)
17251725 goto free_interfaces;
17261726
1727+ /* if it's already configured, clear out old state first.
1728+ * getting rid of old interfaces means unbinding their drivers.
1729+ */
1730+ if (dev->state != USB_STATE_ADDRESS)
1731+ usb_disable_device(dev, 1); /* Skip ep0 */
1732+
1733+ /* Get rid of pending async Set-Config requests for this device */
1734+ cancel_async_set_config(dev);
1735+
17271736 /* Make sure we have bandwidth (and available HCD resources) for this
17281737 * configuration. Remove endpoints from the schedule if we're dropping
17291738 * this configuration to set configuration 0. After this point, the
@@ -1733,20 +1742,11 @@ free_interfaces: · 3 unmodified lines
17331742 mutex_lock(&hcd->bandwidth_mutex);
17341743 ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
17351744 if (ret < 0) {
1736− usb_autosuspend_device(dev);
17371745 mutex_unlock(&hcd->bandwidth_mutex);
1746+ usb_autosuspend_device(dev);
17381747 goto free_interfaces;
17391748 }
17401749
1741− /* if it's already configured, clear out old state first.
1742− * getting rid of old interfaces means unbinding their drivers.
1743− */
1744− if (dev->state != USB_STATE_ADDRESS)
1745− usb_disable_device(dev, 1); /* Skip ep0 */
1746−
1747− /* Get rid of pending async Set-Config requests for this device */
1748− cancel_async_set_config(dev);
1749−
17501750 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
17511751 USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
17521752 NULL, 0, USB_CTRL_SET_TIMEOUT);
@@ -1761,8 +1761,8 @@ free_interfaces: · 8 unmodified lines
17611761 if (!cp) {
17621762 usb_set_device_state(dev, USB_STATE_ADDRESS);
17631763 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1764− usb_autosuspend_device(dev);
17651764 mutex_unlock(&hcd->bandwidth_mutex);
1765+ usb_autosuspend_device(dev);
17661766 goto free_interfaces;
17671767 }
17681768 mutex_unlock(&hcd->bandwidth_mutex);
drivers/usb/gadget/rndis.c+8−4
@@ -293,9 +293,13 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len, · 292 unmodified lines
293293 /* mandatory */
294294 case OID_GEN_VENDOR_DESCRIPTION:
295295 pr_debug("%s: OID_GEN_VENDOR_DESCRIPTION\n", __func__);
296− length = strlen (rndis_per_dev_params [configNr].vendorDescr);
297− memcpy (outbuf,
298− rndis_per_dev_params [configNr].vendorDescr, length);
296+ if ( rndis_per_dev_params [configNr].vendorDescr ) {
297+ length = strlen (rndis_per_dev_params [configNr].vendorDescr);
298+ memcpy (outbuf,
299+ rndis_per_dev_params [configNr].vendorDescr, length);
300+ } else {
301+ outbuf[0] = 0;
302+ }
299303 retval = 0;
300304 break;
301305
@@ -1148,7 +1152,7 @@ static struct proc_dir_entry *rndis_connect_state [RNDIS_MAX_CONFIGS]; · 846 unmodified lines
11481152 #endif /* CONFIG_USB_GADGET_DEBUG_FILES */
11491153
11501154
1151−int __init rndis_init (void)
1155+int rndis_init(void)
11521156 {
11531157 u8 i;
11541158
drivers/usb/gadget/rndis.h+1−1
@@ -262,7 +262,7 @@ int rndis_signal_disconnect (int configNr); · 261 unmodified lines
262262 int rndis_state (int configNr);
263263 extern void rndis_set_host_mac (int configNr, const u8 *addr);
264264
265−int __devinit rndis_init (void);
265+int rndis_init(void);
266266 void rndis_exit (void);
267267
268268 #endif /* _LINUX_RNDIS_H */
drivers/usb/gadget/s3c-hsotg.c+0−2
@@ -12,8 +12,6 @@ · 11 unmodified lines
1212 * published by the Free Software Foundation.
1313 */
1414
15−#define DEBUG
16−
1715 #include <linux/kernel.h>
1816 #include <linux/module.h>
1917 #include <linux/spinlock.h>
drivers/usb/host/ehci-ppc-of.c+7−5
@@ -192,17 +192,19 @@ ehci_hcd_ppc_of_probe(struct platform_device *op, const struct of_device_id *mat · 191 unmodified lines
192192 }
193193
194194 rv = usb_add_hcd(hcd, irq, 0);
195− if (rv == 0)
196− return 0;
195+ if (rv)
196+ goto err_ehci;
197+
198+ return 0;
197199
200+err_ehci:
201+ if (ehci->has_amcc_usb23)
202+ iounmap(ehci->ohci_hcctrl_reg);
198203 iounmap(hcd->regs);
199204 err_ioremap:
200205 irq_dispose_mapping(irq);
201206 err_irq:
202207 release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
203−
204− if (ehci->has_amcc_usb23)
205− iounmap(ehci->ohci_hcctrl_reg);
206208 err_rmr:
207209 usb_put_hcd(hcd);
208210
drivers/usb/serial/cp210x.c+7−4
@@ -56,6 +56,7 @@ static int debug; · 55 unmodified lines
5656 static const struct usb_device_id id_table[] = {
5757 { USB_DEVICE(0x0471, 0x066A) }, /* AKTAKOM ACE-1001 cable */
5858 { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
59+ { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
5960 { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */
6061 { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
6162 { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
@@ -88,6 +89,7 @@ static const struct usb_device_id id_table[] = { · 26 unmodified lines
8889 { USB_DEVICE(0x10C4, 0x8149) }, /* West Mountain Radio Computerized Battery Analyzer */
8990 { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */
9091 { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
92+ { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */
9193 { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
9294 { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */
9395 { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
@@ -109,6 +111,7 @@ static const struct usb_device_id id_table[] = { · 15 unmodified lines
109111 { USB_DEVICE(0x10C4, 0x83A8) }, /* Amber Wireless AMB2560 */
110112 { USB_DEVICE(0x10C4, 0x8411) }, /* Kyocera GPS Module */
111113 { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
114+ { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
112115 { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
113116 { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
114117 { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */
@@ -122,14 +125,14 @@ static const struct usb_device_id id_table[] = { · 7 unmodified lines
122125 { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
123126 { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
124127 { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
125− { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
126− { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
127− { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
128− { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */
129128 { USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */
130129 { USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */
131130 { USB_DEVICE(0x16DC, 0x0012) }, /* W-IE-NE-R Plein & Baus GmbH MPOD Multi Channel Power Supply */
132131 { USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */
132+ { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
133+ { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
134+ { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
135+ { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */
133136 { } /* Terminating Entry */
134137 };
135138
drivers/usb/serial/ftdi_sio.c+9−1
@@ -753,6 +753,14 @@ static struct usb_device_id id_table_combined [] = { · 752 unmodified lines
753753 { USB_DEVICE(FTDI_VID, SEGWAY_RMP200_PID) },
754754 { USB_DEVICE(IONICS_VID, IONICS_PLUGCOMPUTER_PID),
755755 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
756+ { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_24_MASTER_WING_PID) },
757+ { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_PC_WING_PID) },
758+ { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_USB_DMX_PID) },
759+ { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MIDI_TIMECODE_PID) },
760+ { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MINI_WING_PID) },
761+ { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MAXI_WING_PID) },
762+ { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MEDIA_WING_PID) },
763+ { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_WING_PID) },
756764 { }, /* Optional parameter entry */
757765 { } /* Terminating entry */
758766 };
@@ -1834,7 +1842,7 @@ static int ftdi_process_packet(struct tty_struct *tty, · 1075 unmodified lines
18341842
18351843 if (port->port.console && port->sysrq) {
18361844 for (i = 0; i < len; i++, ch++) {
1837− if (!usb_serial_handle_sysrq_char(tty, port, *ch))
1845+ if (!usb_serial_handle_sysrq_char(port, *ch))
18381846 tty_insert_flip_char(tty, *ch, flag);
18391847 }
18401848 } else {
drivers/usb/serial/ftdi_sio_ids.h+12−0
@@ -134,6 +134,18 @@ · 133 unmodified lines
134134 #define FTDI_NDI_FUTURE_3_PID 0xDA73 /* NDI future device #3 */
135135 #define FTDI_NDI_AURORA_SCU_PID 0xDA74 /* NDI Aurora SCU */
136136
137+/*
138+ * ChamSys Limited (www.chamsys.co.uk) USB wing/interface product IDs
139+ */
140+#define FTDI_CHAMSYS_24_MASTER_WING_PID 0xDAF8
141+#define FTDI_CHAMSYS_PC_WING_PID 0xDAF9
142+#define FTDI_CHAMSYS_USB_DMX_PID 0xDAFA
143+#define FTDI_CHAMSYS_MIDI_TIMECODE_PID 0xDAFB
144+#define FTDI_CHAMSYS_MINI_WING_PID 0xDAFC
145+#define FTDI_CHAMSYS_MAXI_WING_PID 0xDAFD
146+#define FTDI_CHAMSYS_MEDIA_WING_PID 0xDAFE
147+#define FTDI_CHAMSYS_WING_PID 0xDAFF
148+
137149 /*
138150 * Westrex International devices submitted by Cory Lee
139151 */
drivers/usb/serial/generic.c+4−6
@@ -343,7 +343,7 @@ void usb_serial_generic_process_read_urb(struct urb *urb) · 342 unmodified lines
343343 tty_insert_flip_string(tty, ch, urb->actual_length);
344344 else {
345345 for (i = 0; i < urb->actual_length; i++, ch++) {
346− if (!usb_serial_handle_sysrq_char(tty, port, *ch))
346+ if (!usb_serial_handle_sysrq_char(port, *ch))
347347 tty_insert_flip_char(tty, *ch, TTY_NORMAL);
348348 }
349349 }
@@ -448,12 +448,11 @@ void usb_serial_generic_unthrottle(struct tty_struct *tty) · 98 unmodified lines
448448 EXPORT_SYMBOL_GPL(usb_serial_generic_unthrottle);
449449
450450 #ifdef CONFIG_MAGIC_SYSRQ
451−int usb_serial_handle_sysrq_char(struct tty_struct *tty,
452− struct usb_serial_port *port, unsigned int ch)
451+int usb_serial_handle_sysrq_char(struct usb_serial_port *port, unsigned int ch)
453452 {
454453 if (port->sysrq && port->port.console) {
455454 if (ch && time_before(jiffies, port->sysrq)) {
456− handle_sysrq(ch, tty);
455+ handle_sysrq(ch);
457456 port->sysrq = 0;
458457 return 1;
459458 }
@@ -462,8 +461,7 @@ int usb_serial_handle_sysrq_char(struct tty_struct *tty, · 2 unmodified lines
462461 return 0;
463462 }
464463 #else
465−int usb_serial_handle_sysrq_char(struct tty_struct *tty,
466− struct usb_serial_port *port, unsigned int ch)
464+int usb_serial_handle_sysrq_char(struct usb_serial_port *port, unsigned int ch)
467465 {
468466 return 0;
469467 }
drivers/usb/serial/mos7840.c+22−10
@@ -119,16 +119,20 @@ · 118 unmodified lines
119119 * by making a change here, in moschip_port_id_table, and in
120120 * moschip_id_table_combined
121121 */
122−#define USB_VENDOR_ID_BANDB 0x0856
123−#define BANDB_DEVICE_ID_USO9ML2_2 0xAC22
124−#define BANDB_DEVICE_ID_USO9ML2_4 0xAC24
125−#define BANDB_DEVICE_ID_US9ML2_2 0xAC29
126−#define BANDB_DEVICE_ID_US9ML2_4 0xAC30
127−#define BANDB_DEVICE_ID_USPTL4_2 0xAC31
128−#define BANDB_DEVICE_ID_USPTL4_4 0xAC32
129−#define BANDB_DEVICE_ID_USOPTL4_2 0xAC42
130−#define BANDB_DEVICE_ID_USOPTL4_4 0xAC44
131−#define BANDB_DEVICE_ID_USOPTL2_4 0xAC24
122+#define USB_VENDOR_ID_BANDB 0x0856
123+#define BANDB_DEVICE_ID_USO9ML2_2 0xAC22
124+#define BANDB_DEVICE_ID_USO9ML2_2P 0xBC00
125+#define BANDB_DEVICE_ID_USO9ML2_4 0xAC24
126+#define BANDB_DEVICE_ID_USO9ML2_4P 0xBC01
127+#define BANDB_DEVICE_ID_US9ML2_2 0xAC29
128+#define BANDB_DEVICE_ID_US9ML2_4 0xAC30
129+#define BANDB_DEVICE_ID_USPTL4_2 0xAC31
130+#define BANDB_DEVICE_ID_USPTL4_4 0xAC32
131+#define BANDB_DEVICE_ID_USOPTL4_2 0xAC42
132+#define BANDB_DEVICE_ID_USOPTL4_2P 0xBC02
133+#define BANDB_DEVICE_ID_USOPTL4_4 0xAC44
134+#define BANDB_DEVICE_ID_USOPTL4_4P 0xBC03
135+#define BANDB_DEVICE_ID_USOPTL2_4 0xAC24
132136
133137 /* This driver also supports
134138 * ATEN UC2324 device using Moschip MCS7840
@@ -184,13 +188,17 @@ static const struct usb_device_id moschip_port_id_table[] = { · 49 unmodified lines
184188 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)},
185189 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
186190 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)},
191+ {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2P)},
187192 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)},
193+ {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4P)},
188194 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)},
189195 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)},
190196 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)},
191197 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)},
192198 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)},
199+ {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2P)},
193200 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)},
201+ {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4P)},
194202 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL2_4)},
195203 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)},
196204 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)},
@@ -201,13 +209,17 @@ static const struct usb_device_id moschip_id_table_combined[] __devinitconst = { · 4 unmodified lines
201209 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)},
202210 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
203211 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)},
212+ {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2P)},
204213 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)},
214+ {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4P)},
205215 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)},
206216 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)},
207217 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)},
208218 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)},
209219 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)},
220+ {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2P)},
210221 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)},
222+ {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4P)},
211223 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL2_4)},
212224 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)},
213225 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)},
drivers/usb/serial/option.c+75−44
@@ -164,6 +164,14 @@ static void option_instat_callback(struct urb *urb); · 163 unmodified lines
164164 #define YISO_VENDOR_ID 0x0EAB
165165 #define YISO_PRODUCT_U893 0xC893
166166
167+/*
168+ * NOVATEL WIRELESS PRODUCTS
169+ *
170+ * Note from Novatel Wireless:
171+ * If your Novatel modem does not work on linux, don't
172+ * change the option module, but check our website. If
173+ * that does not help, contact ddeschepper@nvtl.com
174+*/
167175 /* MERLIN EVDO PRODUCTS */
168176 #define NOVATELWIRELESS_PRODUCT_V640 0x1100
169177 #define NOVATELWIRELESS_PRODUCT_V620 0x1110
@@ -185,24 +193,39 @@ static void option_instat_callback(struct urb *urb); · 15 unmodified lines
185193 #define NOVATELWIRELESS_PRODUCT_EU730 0x2400
186194 #define NOVATELWIRELESS_PRODUCT_EU740 0x2410
187195 #define NOVATELWIRELESS_PRODUCT_EU870D 0x2420
188−
189196 /* OVATION PRODUCTS */
190197 #define NOVATELWIRELESS_PRODUCT_MC727 0x4100
191198 #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400
192−#define NOVATELWIRELESS_PRODUCT_U727 0x5010
193−#define NOVATELWIRELESS_PRODUCT_MC727_NEW 0x5100
194−#define NOVATELWIRELESS_PRODUCT_MC760 0x6000
199+/*
200+ * Note from Novatel Wireless:
201+ * All PID in the 5xxx range are currently reserved for
202+ * auto-install CDROMs, and should not be added to this
203+ * module.
204+ *
205+ * #define NOVATELWIRELESS_PRODUCT_U727 0x5010
206+ * #define NOVATELWIRELESS_PRODUCT_MC727_NEW 0x5100
207+*/
195208 #define NOVATELWIRELESS_PRODUCT_OVMC760 0x6002
196−
197−/* FUTURE NOVATEL PRODUCTS */
198−#define NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED 0X6001
199−#define NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED 0X7000
200−#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED 0X7001
201−#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED 0X8000
202−#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0X8001
203−#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0X9000
204−#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0X9001
205−#define NOVATELWIRELESS_PRODUCT_GLOBAL 0XA001
209+#define NOVATELWIRELESS_PRODUCT_MC780 0x6010
210+#define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0x6000
211+#define NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED 0x6001
212+#define NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED 0x7000
213+#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED 0x7001
214+#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED3 0x7003
215+#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED4 0x7004
216+#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED5 0x7005
217+#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED6 0x7006
218+#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED7 0x7007
219+#define NOVATELWIRELESS_PRODUCT_MC996D 0x7030
220+#define NOVATELWIRELESS_PRODUCT_MF3470 0x7041
221+#define NOVATELWIRELESS_PRODUCT_MC547 0x7042
222+#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED 0x8000
223+#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0x8001
224+#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0x9000
225+#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0x9001
226+#define NOVATELWIRELESS_PRODUCT_G1 0xA001
227+#define NOVATELWIRELESS_PRODUCT_G1_M 0xA002
228+#define NOVATELWIRELESS_PRODUCT_G2 0xA010
206229
207230 /* AMOI PRODUCTS */
208231 #define AMOI_VENDOR_ID 0x1614
@@ -490,36 +513,44 @@ static const struct usb_device_id option_ids[] = { · 281 unmodified lines
490513 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) },
491514 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },
492515 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC) },
493− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */
494− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */
495− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, /* Novatel Merlin EX720/V740/X720 */
496− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V720) }, /* Novatel Merlin V720/S720/PC720 */
497− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U730) }, /* Novatel U730/U740 (VF version) */
498− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U740) }, /* Novatel U740 */
499− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U870) }, /* Novatel U870 */
500− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_XU870) }, /* Novatel Merlin XU870 HSDPA/3G */
501− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_X950D) }, /* Novatel X950D */
502− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) }, /* Novatel EV620/ES620 CDMA/EV-DO */
503− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) }, /* Novatel ES620/ES720/U720/USB720 */
504− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) }, /* Novatel E725/E726 */
505− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES620) }, /* Novatel Merlin ES620 SM Bus */
506− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) }, /* Novatel EU730 and Vodafone EU740 */
507− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) }, /* Novatel non-Vodafone EU740 */
508− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
509− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
510− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
511− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727_NEW) }, /* Novatel MC727/U727/USB727 refresh */
512− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel MC727/U727/USB727 */
513− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC760) }, /* Novatel MC760/U760/USB760 */
514− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_OVMC760) }, /* Novatel Ovation MC760 */
515− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */
516− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */
517− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) }, /* Novatel HSPA Embedded product */
518− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) }, /* Novatel EVDO product */
519− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED) }, /* Novatel HSPA product */
520− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) }, /* Novatel EVDO Embedded product */
521− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) }, /* Novatel HSPA Embedded product */
522− { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL) }, /* Novatel Global product */
516+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
517+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) },
518+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) },
519+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V720) },
520+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U730) },
521+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U740) },
522+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U870) },
523+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_XU870) },
524+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_X950D) },
525+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) },
526+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) },
527+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) },
528+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES620) },
529+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) },
530+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) },
531+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) },
532+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) },
533+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) },
534+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_OVMC760) },
535+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC780) },
536+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) },
537+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) },
538+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) },
539+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) },
540+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) },
541+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED3) },
542+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED4) },
543+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED5) },
544+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED6) },
545+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED7) },
546+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC996D) },
547+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MF3470) },
548+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC547) },
549+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) },
550+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) },
551+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1) },
552+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1_M) },
553+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) },
523554
524555 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
525556 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
drivers/usb/serial/pl2303.c+1−1
@@ -789,7 +789,7 @@ static void pl2303_process_read_urb(struct urb *urb) · 788 unmodified lines
789789
790790 if (port->port.console && port->sysrq) {
791791 for (i = 0; i < urb->actual_length; ++i)
792− if (!usb_serial_handle_sysrq_char(tty, port, data[i]))
792+ if (!usb_serial_handle_sysrq_char(port, data[i]))
793793 tty_insert_flip_char(tty, data[i], tty_flag);
794794 } else {
795795 tty_insert_flip_string_fixed_flag(tty, data, tty_flag,
drivers/usb/serial/ssu100.c+2−2
@@ -46,7 +46,7 @@ · 45 unmodified lines
4646 #define FULLPWRBIT 0x00000080
4747 #define NEXT_BOARD_POWER_BIT 0x00000004
4848
49−static int debug = 1;
49+static int debug;
5050
5151 /* Version Information */
5252 #define DRIVER_VERSION "v0.1"
@@ -672,7 +672,7 @@ static int ssu100_process_packet(struct tty_struct *tty, · 619 unmodified lines
672672
673673 if (port->port.console && port->sysrq) {
674674 for (i = 0; i < len; i++, ch++) {
675− if (!usb_serial_handle_sysrq_char(tty, port, *ch))
675+ if (!usb_serial_handle_sysrq_char(port, *ch))
676676 tty_insert_flip_char(tty, *ch, flag);
677677 }
678678 } else
drivers/vhost/vhost.c+62−23
@@ -60,22 +60,25 @@ static int vhost_poll_wakeup(wait_queue_t *wait, unsigned mode, int sync, · 59 unmodified lines
6060 return 0;
6161 }
6262
63+static void vhost_work_init(struct vhost_work *work, vhost_work_fn_t fn)
64+{
65+ INIT_LIST_HEAD(&work->node);
66+ work->fn = fn;
67+ init_waitqueue_head(&work->done);
68+ work->flushing = 0;
69+ work->queue_seq = work->done_seq = 0;
70+}
71+
6372 /* Init poll structure */
6473 void vhost_poll_init(struct vhost_poll *poll, vhost_work_fn_t fn,
6574 unsigned long mask, struct vhost_dev *dev)
6675 {
67− struct vhost_work *work = &poll->work;
68−
6976 init_waitqueue_func_entry(&poll->wait, vhost_poll_wakeup);
7077 init_poll_funcptr(&poll->table, vhost_poll_func);
7178 poll->mask = mask;
7279 poll->dev = dev;
7380
74− INIT_LIST_HEAD(&work->node);
75− work->fn = fn;
76− init_waitqueue_head(&work->done);
77− work->flushing = 0;
78− work->queue_seq = work->done_seq = 0;
81+ vhost_work_init(&poll->work, fn);
7982 }
8083
8184 /* Start polling a file. We add ourselves to file's wait queue. The caller must
@@ -95,35 +98,38 @@ void vhost_poll_stop(struct vhost_poll *poll) · 13 unmodified lines
9598 remove_wait_queue(poll->wqh, &poll->wait);
9699 }
97100
98−/* Flush any work that has been scheduled. When calling this, don't hold any
99− * locks that are also used by the callback. */
100−void vhost_poll_flush(struct vhost_poll *poll)
101+static void vhost_work_flush(struct vhost_dev *dev, struct vhost_work *work)
101102 {
102− struct vhost_work *work = &poll->work;
103103 unsigned seq;
104104 int left;
105105 int flushing;
106106
107− spin_lock_irq(&poll->dev->work_lock);
107+ spin_lock_irq(&dev->work_lock);
108108 seq = work->queue_seq;
109109 work->flushing++;
110− spin_unlock_irq(&poll->dev->work_lock);
110+ spin_unlock_irq(&dev->work_lock);
111111 wait_event(work->done, ({
112− spin_lock_irq(&poll->dev->work_lock);
112+ spin_lock_irq(&dev->work_lock);
113113 left = seq - work->done_seq <= 0;
114− spin_unlock_irq(&poll->dev->work_lock);
114+ spin_unlock_irq(&dev->work_lock);
115115 left;
116116 }));
117− spin_lock_irq(&poll->dev->work_lock);
117+ spin_lock_irq(&dev->work_lock);
118118 flushing = --work->flushing;
119− spin_unlock_irq(&poll->dev->work_lock);
119+ spin_unlock_irq(&dev->work_lock);
120120 BUG_ON(flushing < 0);
121121 }
122122
123−void vhost_poll_queue(struct vhost_poll *poll)
123+/* Flush any work that has been scheduled. When calling this, don't hold any
124+ * locks that are also used by the callback. */
125+void vhost_poll_flush(struct vhost_poll *poll)
126+{
127+ vhost_work_flush(poll->dev, &poll->work);
128+}
129+
130+static inline void vhost_work_queue(struct vhost_dev *dev,
131+ struct vhost_work *work)
124132 {
125− struct vhost_dev *dev = poll->dev;
126− struct vhost_work *work = &poll->work;
127133 unsigned long flags;
128134
129135 spin_lock_irqsave(&dev->work_lock, flags);
@@ -135,6 +141,11 @@ void vhost_poll_queue(struct vhost_poll *poll) · 5 unmodified lines
135141 spin_unlock_irqrestore(&dev->work_lock, flags);
136142 }
137143
144+void vhost_poll_queue(struct vhost_poll *poll)
145+{
146+ vhost_work_queue(poll->dev, &poll->work);
147+}
148+
138149 static void vhost_vq_reset(struct vhost_dev *dev,
139150 struct vhost_virtqueue *vq)
140151 {
@@ -236,6 +247,29 @@ long vhost_dev_check_owner(struct vhost_dev *dev) · 95 unmodified lines
236247 return dev->mm == current->mm ? 0 : -EPERM;
237248 }
238249
250+struct vhost_attach_cgroups_struct {
251+ struct vhost_work work;
252+ struct task_struct *owner;
253+ int ret;
254+};
255+
256+static void vhost_attach_cgroups_work(struct vhost_work *work)
257+{
258+ struct vhost_attach_cgroups_struct *s;
259+ s = container_of(work, struct vhost_attach_cgroups_struct, work);
260+ s->ret = cgroup_attach_task_all(s->owner, current);
261+}
262+
263+static int vhost_attach_cgroups(struct vhost_dev *dev)
264+{
265+ struct vhost_attach_cgroups_struct attach;
266+ attach.owner = current;
267+ vhost_work_init(&attach.work, vhost_attach_cgroups_work);
268+ vhost_work_queue(dev, &attach.work);
269+ vhost_work_flush(dev, &attach.work);
270+ return attach.ret;
271+}
272+
239273 /* Caller should have device mutex */
240274 static long vhost_dev_set_owner(struct vhost_dev *dev)
241275 {
@@ -255,14 +289,16 @@ static long vhost_dev_set_owner(struct vhost_dev *dev) · 13 unmodified lines
255289 }
256290
257291 dev->worker = worker;
258− err = cgroup_attach_task_current_cg(worker);
292+ wake_up_process(worker); /* avoid contributing to loadavg */
293+
294+ err = vhost_attach_cgroups(dev);
259295 if (err)
260296 goto err_cgroup;
261− wake_up_process(worker); /* avoid contributing to loadavg */
262297
263298 return 0;
264299 err_cgroup:
265300 kthread_stop(worker);
301+ dev->worker = NULL;
266302 err_worker:
267303 if (dev->mm)
268304 mmput(dev->mm);
@@ -323,7 +359,10 @@ void vhost_dev_cleanup(struct vhost_dev *dev) · 54 unmodified lines
323359 dev->mm = NULL;
324360
325361 WARN_ON(!list_empty(&dev->work_list));
326− kthread_stop(dev->worker);
362+ if (dev->worker) {
363+ kthread_stop(dev->worker);
364+ dev->worker = NULL;
365+ }
327366 }
328367
329368 static int log_access_ok(void __user *log_base, u64 addr, unsigned long sz)
drivers/video/pxa168fb.c+3−3
@@ -559,7 +559,7 @@ static struct fb_ops pxa168fb_ops = { · 558 unmodified lines
559559 .fb_imageblit = cfb_imageblit,
560560 };
561561
562−static int __init pxa168fb_init_mode(struct fb_info *info,
562+static int __devinit pxa168fb_init_mode(struct fb_info *info,
563563 struct pxa168fb_mach_info *mi)
564564 {
565565 struct pxa168fb_info *fbi = info->par;
@@ -599,7 +599,7 @@ static int __init pxa168fb_init_mode(struct fb_info *info, · 33 unmodified lines
599599 return ret;
600600 }
601601
602−static int __init pxa168fb_probe(struct platform_device *pdev)
602+static int __devinit pxa168fb_probe(struct platform_device *pdev)
603603 {
604604 struct pxa168fb_mach_info *mi;
605605 struct fb_info *info = 0;
@@ -792,7 +792,7 @@ static struct platform_driver pxa168fb_driver = { · 186 unmodified lines
792792 .probe = pxa168fb_probe,
793793 };
794794
795−static int __devinit pxa168fb_init(void)
795+static int __init pxa168fb_init(void)
796796 {
797797 return platform_driver_register(&pxa168fb_driver);
798798 }
drivers/xen/events.c+16−5
@@ -112,6 +112,7 @@ static inline unsigned long *cpu_evtchn_mask(int cpu) · 111 unmodified lines
112112 #define VALID_EVTCHN(chn) ((chn) != 0)
113113
114114 static struct irq_chip xen_dynamic_chip;
115+static struct irq_chip xen_percpu_chip;
115116
116117 /* Constructor for packed IRQ information. */
117118 static struct irq_info mk_unbound_info(void)
@@ -377,7 +378,7 @@ int bind_evtchn_to_irq(unsigned int evtchn) · 259 unmodified lines
377378 irq = find_unbound_irq();
378379
379380 set_irq_chip_and_handler_name(irq, &xen_dynamic_chip,
380− handle_level_irq, "event");
381+ handle_edge_irq, "event");
381382
382383 evtchn_to_irq[evtchn] = irq;
383384 irq_info[irq] = mk_evtchn_info(evtchn);
@@ -403,8 +404,8 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu) · 19 unmodified lines
403404 if (irq < 0)
404405 goto out;
405406
406− set_irq_chip_and_handler_name(irq, &xen_dynamic_chip,
407− handle_level_irq, "ipi");
407+ set_irq_chip_and_handler_name(irq, &xen_percpu_chip,
408+ handle_percpu_irq, "ipi");
408409
409410 bind_ipi.vcpu = cpu;
410411 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi,
@@ -444,8 +445,8 @@ static int bind_virq_to_irq(unsigned int virq, unsigned int cpu) · 33 unmodified lines
444445
445446 irq = find_unbound_irq();
446447
447− set_irq_chip_and_handler_name(irq, &xen_dynamic_chip,
448− handle_level_irq, "virq");
448+ set_irq_chip_and_handler_name(irq, &xen_percpu_chip,
449+ handle_percpu_irq, "virq");
449450
450451 evtchn_to_irq[evtchn] = irq;
451452 irq_info[irq] = mk_virq_info(evtchn, virq);
@@ -964,6 +965,16 @@ static struct irq_chip xen_dynamic_chip __read_mostly = { · 512 unmodified lines
964965 .retrigger = retrigger_dynirq,
965966 };
966967
968+static struct irq_chip xen_percpu_chip __read_mostly = {
969+ .name = "xen-percpu",
970+
971+ .disable = disable_dynirq,
972+ .mask = disable_dynirq,
973+ .unmask = enable_dynirq,
974+
975+ .ack = ack_dynirq,
976+};
977+
967978 int xen_set_callback_via(uint64_t via)
968979 {
969980 struct xen_hvm_param a;
drivers/xen/manage.c+1−1
@@ -237,7 +237,7 @@ static void sysrq_handler(struct xenbus_watch *watch, const char **vec, · 236 unmodified lines
237237 goto again;
238238
239239 if (sysrq_key != '\0')
240− handle_sysrq(sysrq_key, NULL);
240+ handle_sysrq(sysrq_key);
241241 }
242242
243243 static struct xenbus_watch sysrq_watch = {
fs/9p/fid.c+2−1
@@ -242,7 +242,8 @@ struct p9_fid *v9fs_fid_lookup(struct dentry *dentry) · 241 unmodified lines
242242 }
243243 kfree(wnames);
244244 fid_out:
245− v9fs_fid_add(dentry, fid);
245+ if (!IS_ERR(fid))
246+ v9fs_fid_add(dentry, fid);
246247 err_out:
247248 up_read(&v9ses->rename_sem);
248249 return fid;
fs/9p/vfs_dir.c+4−2
@@ -292,9 +292,11 @@ int v9fs_dir_release(struct inode *inode, struct file *filp) · 291 unmodified lines
292292
293293 fid = filp->private_data;
294294 P9_DPRINTK(P9_DEBUG_VFS,
295− "inode: %p filp: %p fid: %d\n", inode, filp, fid->fid);
295+ "v9fs_dir_release: inode: %p filp: %p fid: %d\n",
296+ inode, filp, fid ? fid->fid : -1);
296297 filemap_write_and_wait(inode->i_mapping);
297− p9_client_clunk(fid);
298+ if (fid)
299+ p9_client_clunk(fid);
298300 return 0;
299301 }
300302
fs/9p/vfs_inode.c+7−2
@@ -730,7 +730,10 @@ v9fs_vfs_create_dotl(struct inode *dir, struct dentry *dentry, int mode, · 729 unmodified lines
730730 P9_DPRINTK(P9_DEBUG_VFS, "inode creation failed %d\n", err);
731731 goto error;
732732 }
733− dentry->d_op = &v9fs_cached_dentry_operations;
733+ if (v9ses->cache)
734+ dentry->d_op = &v9fs_cached_dentry_operations;
735+ else
736+ dentry->d_op = &v9fs_dentry_operations;
734737 d_instantiate(dentry, inode);
735738 err = v9fs_fid_add(dentry, fid);
736739 if (err < 0)
@@ -1128,6 +1131,7 @@ v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry, · 391 unmodified lines
11281131 v9fs_stat2inode(st, dentry->d_inode, dentry->d_inode->i_sb);
11291132 generic_fillattr(dentry->d_inode, stat);
11301133
1134+ p9stat_free(st);
11311135 kfree(st);
11321136 return 0;
11331137 }
@@ -1489,6 +1493,7 @@ static int v9fs_readlink(struct dentry *dentry, char *buffer, int buflen) · 355 unmodified lines
14891493
14901494 retval = strnlen(buffer, buflen);
14911495 done:
1496+ p9stat_free(st);
14921497 kfree(st);
14931498 return retval;
14941499 }
@@ -1942,7 +1947,7 @@ static const struct inode_operations v9fs_dir_inode_operations_dotu = { · 447 unmodified lines
19421947 .unlink = v9fs_vfs_unlink,
19431948 .mkdir = v9fs_vfs_mkdir,
19441949 .rmdir = v9fs_vfs_rmdir,
1945− .mknod = v9fs_vfs_mknod_dotl,
1950+ .mknod = v9fs_vfs_mknod,
19461951 .rename = v9fs_vfs_rename,
19471952 .getattr = v9fs_vfs_getattr,
19481953 .setattr = v9fs_vfs_setattr,
fs/9p/vfs_super.c+14−6
@@ -122,6 +122,10 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, · 121 unmodified lines
122122 fid = v9fs_session_init(v9ses, dev_name, data);
123123 if (IS_ERR(fid)) {
124124 retval = PTR_ERR(fid);
125+ /*
126+ * we need to call session_close to tear down some
127+ * of the data structure setup by session_init
128+ */
125129 goto close_session;
126130 }
127131
@@ -144,7 +148,6 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, · 16 unmodified lines
144148 retval = -ENOMEM;
145149 goto release_sb;
146150 }
147−
148151 sb->s_root = root;
149152
150153 if (v9fs_proto_dotl(v9ses)) {
@@ -152,7 +155,7 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, · 1 unmodified line
152155 st = p9_client_getattr_dotl(fid, P9_STATS_BASIC);
153156 if (IS_ERR(st)) {
154157 retval = PTR_ERR(st);
155− goto clunk_fid;
158+ goto release_sb;
156159 }
157160
158161 v9fs_stat2inode_dotl(st, root->d_inode);
@@ -162,7 +165,7 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, · 3 unmodified lines
162165 st = p9_client_stat(fid);
163166 if (IS_ERR(st)) {
164167 retval = PTR_ERR(st);
165− goto clunk_fid;
168+ goto release_sb;
166169 }
167170
168171 root->d_inode->i_ino = v9fs_qid2ino(&st->qid);
@@ -174,19 +177,24 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, · 5 unmodified lines
174177
175178 v9fs_fid_add(root, fid);
176179
177−P9_DPRINTK(P9_DEBUG_VFS, " simple set mount, return 0\n");
180+ P9_DPRINTK(P9_DEBUG_VFS, " simple set mount, return 0\n");
178181 simple_set_mnt(mnt, sb);
179182 return 0;
180183
181184 clunk_fid:
182185 p9_client_clunk(fid);
183−
184186 close_session:
185187 v9fs_session_close(v9ses);
186188 kfree(v9ses);
187189 return retval;
188−
189190 release_sb:
191+ /*
192+ * we will do the session_close and root dentry release
193+ * in the below call. But we need to clunk fid, because we haven't
194+ * attached the fid to dentry so it won't get clunked
195+ * automatically.
196+ */
197+ p9_client_clunk(fid);
190198 deactivate_locked_super(sb);
191199 return retval;
192200 }
fs/binfmt_misc.c+1−1
@@ -724,7 +724,7 @@ static int __init init_misc_binfmt(void) · 723 unmodified lines
724724 {
725725 int err = register_filesystem(&bm_fs_type);
726726 if (!err) {
727− err = register_binfmt(&misc_format);
727+ err = insert_binfmt(&misc_format);
728728 if (err)
729729 unregister_filesystem(&bm_fs_type);
730730 }
fs/bio-integrity.c+2−2
@@ -413,10 +413,10 @@ int bio_integrity_prep(struct bio *bio) · 412 unmodified lines
413413
414414 /* Allocate kernel buffer for protection data */
415415 len = sectors * blk_integrity_tuple_size(bi);
416− buf = kmalloc(len, GFP_NOIO | __GFP_NOFAIL | q->bounce_gfp);
416+ buf = kmalloc(len, GFP_NOIO | q->bounce_gfp);
417417 if (unlikely(buf == NULL)) {
418418 printk(KERN_ERR "could not allocate integrity buffer\n");
419− return -EIO;
419+ return -ENOMEM;
420420 }
421421
422422 end = (((unsigned long) buf) + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
fs/ceph/addr.c+3−9
@@ -87,7 +87,7 @@ static int ceph_set_page_dirty(struct page *page) · 86 unmodified lines
8787
8888 /* dirty the head */
8989 spin_lock(&inode->i_lock);
90− if (ci->i_wrbuffer_ref_head == 0)
90+ if (ci->i_head_snapc == NULL)
9191 ci->i_head_snapc = ceph_get_snap_context(snapc);
9292 ++ci->i_wrbuffer_ref_head;
9393 if (ci->i_wrbuffer_ref == 0)
@@ -105,13 +105,7 @@ static int ceph_set_page_dirty(struct page *page) · 11 unmodified lines
105105 spin_lock_irq(&mapping->tree_lock);
106106 if (page->mapping) { /* Race with truncate? */
107107 WARN_ON_ONCE(!PageUptodate(page));
108−
109− if (mapping_cap_account_dirty(mapping)) {
110− __inc_zone_page_state(page, NR_FILE_DIRTY);
111− __inc_bdi_stat(mapping->backing_dev_info,
112− BDI_RECLAIMABLE);
113− task_io_account_write(PAGE_CACHE_SIZE);
114− }
108+ account_page_dirtied(page, page->mapping);
115109 radix_tree_tag_set(&mapping->page_tree,
116110 page_index(page), PAGECACHE_TAG_DIRTY);
117111
@@ -352,7 +346,7 @@ static struct ceph_snap_context *get_oldest_context(struct inode *inode, · 234 unmodified lines
352346 break;
353347 }
354348 }
355− if (!snapc && ci->i_head_snapc) {
349+ if (!snapc && ci->i_wrbuffer_ref_head) {
356350 snapc = ceph_get_snap_context(ci->i_head_snapc);
357351 dout(" head snapc %p has %d dirty pages\n",
358352 snapc, ci->i_wrbuffer_ref_head);
fs/ceph/auth_x.c+9−6
@@ -376,7 +376,7 @@ static void ceph_x_validate_tickets(struct ceph_auth_client *ac, int *pneed) · 375 unmodified lines
376376
377377 th = get_ticket_handler(ac, service);
378378
379− if (!th) {
379+ if (IS_ERR(th)) {
380380 *pneed |= service;
381381 continue;
382382 }
@@ -399,6 +399,9 @@ static int ceph_x_build_request(struct ceph_auth_client *ac, · 16 unmodified lines
399399 struct ceph_x_ticket_handler *th =
400400 get_ticket_handler(ac, CEPH_ENTITY_TYPE_AUTH);
401401
402+ if (IS_ERR(th))
403+ return PTR_ERR(th);
404+
402405 ceph_x_validate_tickets(ac, &need);
403406
404407 dout("build_request want %x have %x need %x\n",
@@ -450,7 +453,6 @@ static int ceph_x_build_request(struct ceph_auth_client *ac, · 45 unmodified lines
450453 return -ERANGE;
451454 head->op = cpu_to_le16(CEPHX_GET_PRINCIPAL_SESSION_KEY);
452455
453− BUG_ON(!th);
454456 ret = ceph_x_build_authorizer(ac, th, &xi->auth_authorizer);
455457 if (ret)
456458 return ret;
@@ -505,7 +507,8 @@ static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result, · 48 unmodified lines
505507
506508 case CEPHX_GET_PRINCIPAL_SESSION_KEY:
507509 th = get_ticket_handler(ac, CEPH_ENTITY_TYPE_AUTH);
508− BUG_ON(!th);
510+ if (IS_ERR(th))
511+ return PTR_ERR(th);
509512 ret = ceph_x_proc_ticket_reply(ac, &th->session_key,
510513 buf + sizeof(*head), end);
511514 break;
@@ -563,8 +566,8 @@ static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac, · 51 unmodified lines
563566 void *end = p + sizeof(au->reply_buf);
564567
565568 th = get_ticket_handler(ac, au->service);
566− if (!th)
567− return -EIO; /* hrm! */
569+ if (IS_ERR(th))
570+ return PTR_ERR(th);
568571 ret = ceph_x_decrypt(&th->session_key, &p, end, &reply, sizeof(reply));
569572 if (ret < 0)
570573 return ret;
@@ -626,7 +629,7 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac, · 55 unmodified lines
626629 struct ceph_x_ticket_handler *th;
627630
628631 th = get_ticket_handler(ac, peer_type);
629− if (th && !IS_ERR(th))
632+ if (!IS_ERR(th))
630633 remove_ticket_handler(ac, th);
631634 }
632635
fs/ceph/caps.c+23−9
@@ -1082,6 +1082,7 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap, · 1081 unmodified lines
10821082 gid_t gid;
10831083 struct ceph_mds_session *session;
10841084 u64 xattr_version = 0;
1085+ struct ceph_buffer *xattr_blob = NULL;
10851086 int delayed = 0;
10861087 u64 flush_tid = 0;
10871088 int i;
@@ -1142,6 +1143,10 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap, · 54 unmodified lines
11421143 for (i = 0; i < CEPH_CAP_BITS; i++)
11431144 if (flushing & (1 << i))
11441145 ci->i_cap_flush_tid[i] = flush_tid;
1146+
1147+ follows = ci->i_head_snapc->seq;
1148+ } else {
1149+ follows = 0;
11451150 }
11461151
11471152 keep = cap->implemented;
@@ -1155,14 +1160,14 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap, · 7 unmodified lines
11551160 mtime = inode->i_mtime;
11561161 atime = inode->i_atime;
11571162 time_warp_seq = ci->i_time_warp_seq;
1158− follows = ci->i_snap_realm->cached_context->seq;
11591163 uid = inode->i_uid;
11601164 gid = inode->i_gid;
11611165 mode = inode->i_mode;
11621166
1163− if (dropping & CEPH_CAP_XATTR_EXCL) {
1167+ if (flushing & CEPH_CAP_XATTR_EXCL) {
11641168 __ceph_build_xattrs_blob(ci);
1165− xattr_version = ci->i_xattrs.version + 1;
1169+ xattr_blob = ci->i_xattrs.blob;
1170+ xattr_version = ci->i_xattrs.version;
11661171 }
11671172
11681173 spin_unlock(&inode->i_lock);
@@ -1170,9 +1175,7 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap, · 1 unmodified line
11701175 ret = send_cap_msg(session, ceph_vino(inode).ino, cap_id,
11711176 op, keep, want, flushing, seq, flush_tid, issue_seq, mseq,
11721177 size, max_size, &mtime, &atime, time_warp_seq,
1173− uid, gid, mode,
1174− xattr_version,
1175− (flushing & CEPH_CAP_XATTR_EXCL) ? ci->i_xattrs.blob : NULL,
1178+ uid, gid, mode, xattr_version, xattr_blob,
11761179 follows);
11771180 if (ret < 0) {
11781181 dout("error sending cap msg, must requeue %p\n", inode);
@@ -1282,7 +1285,7 @@ retry: · 103 unmodified lines
12821285 &capsnap->mtime, &capsnap->atime,
12831286 capsnap->time_warp_seq,
12841287 capsnap->uid, capsnap->gid, capsnap->mode,
1285− 0, NULL,
1288+ capsnap->xattr_version, capsnap->xattr_blob,
12861289 capsnap->follows);
12871290
12881291 next_follows = capsnap->follows + 1;
@@ -1332,7 +1335,11 @@ void __ceph_mark_dirty_caps(struct ceph_inode_info *ci, int mask) · 43 unmodified lines
13321335 ceph_cap_string(was | mask));
13331336 ci->i_dirty_caps |= mask;
13341337 if (was == 0) {
1335− dout(" inode %p now dirty\n", &ci->vfs_inode);
1338+ if (!ci->i_head_snapc)
1339+ ci->i_head_snapc = ceph_get_snap_context(
1340+ ci->i_snap_realm->cached_context);
1341+ dout(" inode %p now dirty snapc %p\n", &ci->vfs_inode,
1342+ ci->i_head_snapc);
13361343 BUG_ON(!list_empty(&ci->i_dirty_item));
13371344 spin_lock(&mdsc->cap_dirty_lock);
13381345 list_add(&ci->i_dirty_item, &mdsc->cap_dirty);
@@ -2190,7 +2197,9 @@ void ceph_put_wrbuffer_cap_refs(struct ceph_inode_info *ci, int nr, · 851 unmodified lines
21902197
21912198 if (ci->i_head_snapc == snapc) {
21922199 ci->i_wrbuffer_ref_head -= nr;
2193− if (!ci->i_wrbuffer_ref_head) {
2200+ if (ci->i_wrbuffer_ref_head == 0 &&
2201+ ci->i_dirty_caps == 0 && ci->i_flushing_caps == 0) {
2202+ BUG_ON(!ci->i_head_snapc);
21942203 ceph_put_snap_context(ci->i_head_snapc);
21952204 ci->i_head_snapc = NULL;
21962205 }
@@ -2483,6 +2492,11 @@ static void handle_cap_flush_ack(struct inode *inode, u64 flush_tid, · 286 unmodified lines
24832492 dout(" inode %p now clean\n", inode);
24842493 BUG_ON(!list_empty(&ci->i_dirty_item));
24852494 drop = 1;
2495+ if (ci->i_wrbuffer_ref_head == 0) {
2496+ BUG_ON(!ci->i_head_snapc);
2497+ ceph_put_snap_context(ci->i_head_snapc);
2498+ ci->i_head_snapc = NULL;
2499+ }
24862500 } else {
24872501 BUG_ON(list_empty(&ci->i_dirty_item));
24882502 }
fs/ceph/debugfs.c+4−0
@@ -171,6 +171,8 @@ static int mdsc_show(struct seq_file *s, void *p) · 170 unmodified lines
171171 } else if (req->r_dentry) {
172172 path = ceph_mdsc_build_path(req->r_dentry, &pathlen,
173173 &pathbase, 0);
174+ if (IS_ERR(path))
175+ path = NULL;
174176 spin_lock(&req->r_dentry->d_lock);
175177 seq_printf(s, " #%llx/%.*s (%s)",
176178 ceph_ino(req->r_dentry->d_parent->d_inode),
@@ -187,6 +189,8 @@ static int mdsc_show(struct seq_file *s, void *p) · 10 unmodified lines
187189 if (req->r_old_dentry) {
188190 path = ceph_mdsc_build_path(req->r_old_dentry, &pathlen,
189191 &pathbase, 0);
192+ if (IS_ERR(path))
193+ path = NULL;
190194 spin_lock(&req->r_old_dentry->d_lock);
191195 seq_printf(s, " #%llx/%.*s (%s)",
192196 ceph_ino(req->r_old_dentry->d_parent->d_inode),
fs/ceph/dir.c+1−1
@@ -46,7 +46,7 @@ int ceph_init_dentry(struct dentry *dentry) · 45 unmodified lines
4646 else
4747 dentry->d_op = &ceph_snap_dentry_ops;
4848
49− di = kmem_cache_alloc(ceph_dentry_cachep, GFP_NOFS);
49+ di = kmem_cache_alloc(ceph_dentry_cachep, GFP_NOFS | __GFP_ZERO);
5050 if (!di)
5151 return -ENOMEM; /* oh well */
5252
fs/ceph/inode.c+3−2
@@ -677,6 +677,7 @@ static int fill_inode(struct inode *inode, · 676 unmodified lines
677677 if (ci->i_files == 0 && ci->i_subdirs == 0 &&
678678 ceph_snap(inode) == CEPH_NOSNAP &&
679679 (le32_to_cpu(info->cap.caps) & CEPH_CAP_FILE_SHARED) &&
680+ (issued & CEPH_CAP_FILE_EXCL) == 0 &&
680681 (ci->i_ceph_flags & CEPH_I_COMPLETE) == 0) {
681682 dout(" marking %p complete (empty)\n", inode);
682683 ci->i_ceph_flags |= CEPH_I_COMPLETE;
@@ -1229,11 +1230,11 @@ retry_lookup: · 546 unmodified lines
12291230 in = dn->d_inode;
12301231 } else {
12311232 in = ceph_get_inode(parent->d_sb, vino);
1232− if (in == NULL) {
1233+ if (IS_ERR(in)) {
12331234 dout("new_inode badness\n");
12341235 d_delete(dn);
12351236 dput(dn);
1236− err = -ENOMEM;
1237+ err = PTR_ERR(in);
12371238 goto out;
12381239 }
12391240 dn = splice_dentry(dn, in, NULL);
fs/ceph/locks.c+9−5
@@ -82,7 +82,8 @@ int ceph_lock(struct file *file, int cmd, struct file_lock *fl) · 81 unmodified lines
8282 length = fl->fl_end - fl->fl_start + 1;
8383
8484 err = ceph_lock_message(CEPH_LOCK_FCNTL, op, file,
85− (u64)fl->fl_pid, (u64)fl->fl_nspid,
85+ (u64)fl->fl_pid,
86+ (u64)(unsigned long)fl->fl_nspid,
8687 lock_cmd, fl->fl_start,
8788 length, wait);
8889 if (!err) {
@@ -92,7 +93,8 @@ int ceph_lock(struct file *file, int cmd, struct file_lock *fl) · 3 unmodified lines
9293 /* undo! This should only happen if the kernel detects
9394 * local deadlock. */
9495 ceph_lock_message(CEPH_LOCK_FCNTL, op, file,
95− (u64)fl->fl_pid, (u64)fl->fl_nspid,
96+ (u64)fl->fl_pid,
97+ (u64)(unsigned long)fl->fl_nspid,
9698 CEPH_LOCK_UNLOCK, fl->fl_start,
9799 length, 0);
98100 dout("got %d on posix_lock_file, undid lock", err);
@@ -132,7 +134,8 @@ int ceph_flock(struct file *file, int cmd, struct file_lock *fl) · 33 unmodified lines
132134 length = fl->fl_end - fl->fl_start + 1;
133135
134136 err = ceph_lock_message(CEPH_LOCK_FLOCK, CEPH_MDS_OP_SETFILELOCK,
135− file, (u64)fl->fl_pid, (u64)fl->fl_nspid,
137+ file, (u64)fl->fl_pid,
138+ (u64)(unsigned long)fl->fl_nspid,
136139 lock_cmd, fl->fl_start,
137140 length, wait);
138141 if (!err) {
@@ -141,7 +144,7 @@ int ceph_flock(struct file *file, int cmd, struct file_lock *fl) · 2 unmodified lines
141144 ceph_lock_message(CEPH_LOCK_FLOCK,
142145 CEPH_MDS_OP_SETFILELOCK,
143146 file, (u64)fl->fl_pid,
144− (u64)fl->fl_nspid,
147+ (u64)(unsigned long)fl->fl_nspid,
145148 CEPH_LOCK_UNLOCK, fl->fl_start,
146149 length, 0);
147150 dout("got %d on flock_lock_file_wait, undid lock", err);
@@ -235,7 +238,8 @@ int lock_to_ceph_filelock(struct file_lock *lock, · 87 unmodified lines
235238 cephlock->length = cpu_to_le64(lock->fl_end - lock->fl_start + 1);
236239 cephlock->client = cpu_to_le64(0);
237240 cephlock->pid = cpu_to_le64(lock->fl_pid);
238− cephlock->pid_namespace = cpu_to_le64((u64)lock->fl_nspid);
241+ cephlock->pid_namespace =
242+ cpu_to_le64((u64)(unsigned long)lock->fl_nspid);
239243
240244 switch (lock->fl_type) {
241245 case F_RDLCK:
fs/ceph/mds_client.c+63−38
@@ -560,6 +560,13 @@ static void __unregister_request(struct ceph_mds_client *mdsc, · 559 unmodified lines
560560 *
561561 * Called under mdsc->mutex.
562562 */
563+struct dentry *get_nonsnap_parent(struct dentry *dentry)
564+{
565+ while (!IS_ROOT(dentry) && ceph_snap(dentry->d_inode) != CEPH_NOSNAP)
566+ dentry = dentry->d_parent;
567+ return dentry;
568+}
569+
563570 static int __choose_mds(struct ceph_mds_client *mdsc,
564571 struct ceph_mds_request *req)
565572 {
@@ -590,14 +597,29 @@ static int __choose_mds(struct ceph_mds_client *mdsc, · 24 unmodified lines
590597 if (req->r_inode) {
591598 inode = req->r_inode;
592599 } else if (req->r_dentry) {
593− if (req->r_dentry->d_inode) {
600+ struct inode *dir = req->r_dentry->d_parent->d_inode;
601+
602+ if (dir->i_sb != mdsc->client->sb) {
603+ /* not this fs! */
604+ inode = req->r_dentry->d_inode;
605+ } else if (ceph_snap(dir) != CEPH_NOSNAP) {
606+ /* direct snapped/virtual snapdir requests
607+ * based on parent dir inode */
608+ struct dentry *dn =
609+ get_nonsnap_parent(req->r_dentry->d_parent);
610+ inode = dn->d_inode;
611+ dout("__choose_mds using nonsnap parent %p\n", inode);
612+ } else if (req->r_dentry->d_inode) {
613+ /* dentry target */
594614 inode = req->r_dentry->d_inode;
595615 } else {
596− inode = req->r_dentry->d_parent->d_inode;
616+ /* dir + name */
617+ inode = dir;
597618 hash = req->r_dentry->d_name.hash;
598619 is_hash = true;
599620 }
600621 }
622+
601623 dout("__choose_mds %p is_hash=%d (%d) mode %d\n", inode, (int)is_hash,
602624 (int)hash, mode);
603625 if (!inode)
@@ -2208,7 +2230,7 @@ static void handle_session(struct ceph_mds_session *session, · 1604 unmodified lines
22082230 pr_info("mds%d reconnect denied\n", session->s_mds);
22092231 remove_session_caps(session);
22102232 wake = 1; /* for good measure */
2211− complete_all(&mdsc->session_close_waiters);
2233+ wake_up_all(&mdsc->session_close_wq);
22122234 kick_requests(mdsc, mds);
22132235 break;
22142236
@@ -2302,7 +2324,7 @@ static int encode_caps_cb(struct inode *inode, struct ceph_cap *cap, · 87 unmodified lines
23022324 path = ceph_mdsc_build_path(dentry, &pathlen, &pathbase, 0);
23032325 if (IS_ERR(path)) {
23042326 err = PTR_ERR(path);
2305− BUG_ON(err);
2327+ goto out_dput;
23062328 }
23072329 } else {
23082330 path = NULL;
@@ -2310,7 +2332,7 @@ static int encode_caps_cb(struct inode *inode, struct ceph_cap *cap, · 1 unmodified line
23102332 }
23112333 err = ceph_pagelist_encode_string(pagelist, path, pathlen);
23122334 if (err)
2313− goto out;
2335+ goto out_free;
23142336
23152337 spin_lock(&inode->i_lock);
23162338 cap->seq = 0; /* reset cap seq */
@@ -2354,8 +2376,9 @@ static int encode_caps_cb(struct inode *inode, struct ceph_cap *cap, · 37 unmodified lines
23542376 unlock_kernel();
23552377 }
23562378
2357−out:
2379+out_free:
23582380 kfree(path);
2381+out_dput:
23592382 dput(dentry);
23602383 return err;
23612384 }
@@ -2876,7 +2899,7 @@ int ceph_mdsc_init(struct ceph_mds_client *mdsc, struct ceph_client *client) · 514 unmodified lines
28762899 return -ENOMEM;
28772900
28782901 init_completion(&mdsc->safe_umount_waiters);
2879− init_completion(&mdsc->session_close_waiters);
2902+ init_waitqueue_head(&mdsc->session_close_wq);
28802903 INIT_LIST_HEAD(&mdsc->waiting_for_map);
28812904 mdsc->sessions = NULL;
28822905 mdsc->max_sessions = 0;
@@ -3021,6 +3044,23 @@ void ceph_mdsc_sync(struct ceph_mds_client *mdsc) · 138 unmodified lines
30213044 wait_event(mdsc->cap_flushing_wq, check_cap_flush(mdsc, want_flush));
30223045 }
30233046
3047+/*
3048+ * true if all sessions are closed, or we force unmount
3049+ */
3050+bool done_closing_sessions(struct ceph_mds_client *mdsc)
3051+{
3052+ int i, n = 0;
3053+
3054+ if (mdsc->client->mount_state == CEPH_MOUNT_SHUTDOWN)
3055+ return true;
3056+
3057+ mutex_lock(&mdsc->mutex);
3058+ for (i = 0; i < mdsc->max_sessions; i++)
3059+ if (mdsc->sessions[i])
3060+ n++;
3061+ mutex_unlock(&mdsc->mutex);
3062+ return n == 0;
3063+}
30243064
30253065 /*
30263066 * called after sb is ro.
@@ -3029,45 +3069,32 @@ void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc) · 2 unmodified lines
30293069 {
30303070 struct ceph_mds_session *session;
30313071 int i;
3032− int n;
30333072 struct ceph_client *client = mdsc->client;
3034− unsigned long started, timeout = client->mount_args->mount_timeout * HZ;
3073+ unsigned long timeout = client->mount_args->mount_timeout * HZ;
30353074
30363075 dout("close_sessions\n");
30373076
3038− mutex_lock(&mdsc->mutex);
3039−
30403077 /* close sessions */
3041− started = jiffies;
3042− while (time_before(jiffies, started + timeout)) {
3043− dout("closing sessions\n");
3044− n = 0;
3045− for (i = 0; i < mdsc->max_sessions; i++) {
3046− session = __ceph_lookup_mds_session(mdsc, i);
3047− if (!session)
3048− continue;
3049− mutex_unlock(&mdsc->mutex);
3050− mutex_lock(&session->s_mutex);
3051− __close_session(mdsc, session);
3052− mutex_unlock(&session->s_mutex);
3053− ceph_put_mds_session(session);
3054− mutex_lock(&mdsc->mutex);
3055− n++;
3056− }
3057− if (n == 0)
3058− break;
3059−
3060− if (client->mount_state == CEPH_MOUNT_SHUTDOWN)
3061− break;
3062−
3063− dout("waiting for sessions to close\n");
3078+ mutex_lock(&mdsc->mutex);
3079+ for (i = 0; i < mdsc->max_sessions; i++) {
3080+ session = __ceph_lookup_mds_session(mdsc, i);
3081+ if (!session)
3082+ continue;
30643083 mutex_unlock(&mdsc->mutex);
3065− wait_for_completion_timeout(&mdsc->session_close_waiters,
3066− timeout);
3084+ mutex_lock(&session->s_mutex);
3085+ __close_session(mdsc, session);
3086+ mutex_unlock(&session->s_mutex);
3087+ ceph_put_mds_session(session);
30673088 mutex_lock(&mdsc->mutex);
30683089 }
3090+ mutex_unlock(&mdsc->mutex);
3091+
3092+ dout("waiting for sessions to close\n");
3093+ wait_event_timeout(mdsc->session_close_wq, done_closing_sessions(mdsc),
3094+ timeout);
30693095
30703096 /* tear down remaining sessions */
3097+ mutex_lock(&mdsc->mutex);
30713098 for (i = 0; i < mdsc->max_sessions; i++) {
30723099 if (mdsc->sessions[i]) {
30733100 session = get_session(mdsc->sessions[i]);
@@ -3080,9 +3107,7 @@ void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc) · 6 unmodified lines
30803107 mutex_lock(&mdsc->mutex);
30813108 }
30823109 }
3083−
30843110 WARN_ON(!list_empty(&mdsc->cap_delay_list));
3085−
30863111 mutex_unlock(&mdsc->mutex);
30873112
30883113 ceph_cleanup_empty_realms(mdsc);
fs/ceph/mds_client.h+2−1
@@ -234,7 +234,8 @@ struct ceph_mds_client { · 233 unmodified lines
234234 struct mutex mutex; /* all nested structures */
235235
236236 struct ceph_mdsmap *mdsmap;
237− struct completion safe_umount_waiters, session_close_waiters;
237+ struct completion safe_umount_waiters;
238+ wait_queue_head_t session_close_wq;
238239 struct list_head waiting_for_map;
239240
240241 struct ceph_mds_session **sessions; /* NULL for mds if no session */
fs/ceph/osd_client.c+1−1
@@ -661,7 +661,7 @@ static int __send_request(struct ceph_osd_client *osdc, · 660 unmodified lines
661661 reqhead->reassert_version = req->r_reassert_version;
662662
663663 req->r_stamp = jiffies;
664− list_move_tail(&osdc->req_lru, &req->r_req_lru_item);
664+ list_move_tail(&req->r_req_lru_item, &osdc->req_lru);
665665
666666 ceph_msg_get(req->r_request); /* send consumes a ref */
667667 ceph_con_send(&req->r_osd->o_con, req->r_request);
fs/ceph/snap.c+58−31
@@ -435,7 +435,7 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci) · 434 unmodified lines
435435 {
436436 struct inode *inode = &ci->vfs_inode;
437437 struct ceph_cap_snap *capsnap;
438− int used;
438+ int used, dirty;
439439
440440 capsnap = kzalloc(sizeof(*capsnap), GFP_NOFS);
441441 if (!capsnap) {
@@ -445,6 +445,7 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci) · 3 unmodified lines
445445
446446 spin_lock(&inode->i_lock);
447447 used = __ceph_caps_used(ci);
448+ dirty = __ceph_caps_dirty(ci);
448449 if (__ceph_have_pending_cap_snap(ci)) {
449450 /* there is no point in queuing multiple "pending" cap_snaps,
450451 as no new writes are allowed to start when pending, so any
@@ -452,11 +453,15 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci) · 1 unmodified line
452453 cap_snap. lucky us. */
453454 dout("queue_cap_snap %p already pending\n", inode);
454455 kfree(capsnap);
455− } else if (ci->i_wrbuffer_ref_head || (used & CEPH_CAP_FILE_WR)) {
456+ } else if (ci->i_wrbuffer_ref_head || (used & CEPH_CAP_FILE_WR) ||
457+ (dirty & (CEPH_CAP_AUTH_EXCL|CEPH_CAP_XATTR_EXCL|
458+ CEPH_CAP_FILE_EXCL|CEPH_CAP_FILE_WR))) {
456459 struct ceph_snap_context *snapc = ci->i_head_snapc;
457460
461+ dout("queue_cap_snap %p cap_snap %p queuing under %p\n", inode,
462+ capsnap, snapc);
458463 igrab(inode);
459−
464+
460465 atomic_set(&capsnap->nref, 1);
461466 capsnap->ci = ci;
462467 INIT_LIST_HEAD(&capsnap->ci_item);
@@ -464,15 +469,21 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci) · 1 unmodified line
464469
465470 capsnap->follows = snapc->seq - 1;
466471 capsnap->issued = __ceph_caps_issued(ci, NULL);
467− capsnap->dirty = __ceph_caps_dirty(ci);
472+ capsnap->dirty = dirty;
468473
469474 capsnap->mode = inode->i_mode;
470475 capsnap->uid = inode->i_uid;
471476 capsnap->gid = inode->i_gid;
472477
473− /* fixme? */
474− capsnap->xattr_blob = NULL;
475− capsnap->xattr_len = 0;
478+ if (dirty & CEPH_CAP_XATTR_EXCL) {
479+ __ceph_build_xattrs_blob(ci);
480+ capsnap->xattr_blob =
481+ ceph_buffer_get(ci->i_xattrs.blob);
482+ capsnap->xattr_version = ci->i_xattrs.version;
483+ } else {
484+ capsnap->xattr_blob = NULL;
485+ capsnap->xattr_version = 0;
486+ }
476487
477488 /* dirty page count moved from _head to this cap_snap;
478489 all subsequent writes page dirties occur _after_ this
@@ -480,7 +491,9 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci) · 1 unmodified line
480491 capsnap->dirty_pages = ci->i_wrbuffer_ref_head;
481492 ci->i_wrbuffer_ref_head = 0;
482493 capsnap->context = snapc;
483− ci->i_head_snapc = NULL;
494+ ci->i_head_snapc =
495+ ceph_get_snap_context(ci->i_snap_realm->cached_context);
496+ dout(" new snapc is %p\n", ci->i_head_snapc);
484497 list_add_tail(&capsnap->ci_item, &ci->i_cap_snaps);
485498
486499 if (used & CEPH_CAP_FILE_WR) {
@@ -539,6 +552,41 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci, · 52 unmodified lines
539552 return 1; /* caller may want to ceph_flush_snaps */
540553 }
541554
555+/*
556+ * Queue cap_snaps for snap writeback for this realm and its children.
557+ * Called under snap_rwsem, so realm topology won't change.
558+ */
559+static void queue_realm_cap_snaps(struct ceph_snap_realm *realm)
560+{
561+ struct ceph_inode_info *ci;
562+ struct inode *lastinode = NULL;
563+ struct ceph_snap_realm *child;
564+
565+ dout("queue_realm_cap_snaps %p %llx inodes\n", realm, realm->ino);
566+
567+ spin_lock(&realm->inodes_with_caps_lock);
568+ list_for_each_entry(ci, &realm->inodes_with_caps,
569+ i_snap_realm_item) {
570+ struct inode *inode = igrab(&ci->vfs_inode);
571+ if (!inode)
572+ continue;
573+ spin_unlock(&realm->inodes_with_caps_lock);
574+ if (lastinode)
575+ iput(lastinode);
576+ lastinode = inode;
577+ ceph_queue_cap_snap(ci);
578+ spin_lock(&realm->inodes_with_caps_lock);
579+ }
580+ spin_unlock(&realm->inodes_with_caps_lock);
581+ if (lastinode)
582+ iput(lastinode);
583+
584+ dout("queue_realm_cap_snaps %p %llx children\n", realm, realm->ino);
585+ list_for_each_entry(child, &realm->children, child_item)
586+ queue_realm_cap_snaps(child);
587+
588+ dout("queue_realm_cap_snaps %p %llx done\n", realm, realm->ino);
589+}
542590
543591 /*
544592 * Parse and apply a snapblob "snap trace" from the MDS. This specifies
@@ -589,29 +637,8 @@ more: · 44 unmodified lines
589637 *
590638 * ...unless it's a snap deletion!
591639 */
592− if (!deletion) {
593− struct ceph_inode_info *ci;
594− struct inode *lastinode = NULL;
595−
596− spin_lock(&realm->inodes_with_caps_lock);
597− list_for_each_entry(ci, &realm->inodes_with_caps,
598− i_snap_realm_item) {
599− struct inode *inode = igrab(&ci->vfs_inode);
600− if (!inode)
601− continue;
602− spin_unlock(&realm->inodes_with_caps_lock);
603− if (lastinode)
604− iput(lastinode);
605− lastinode = inode;
606− ceph_queue_cap_snap(ci);
607− spin_lock(&realm->inodes_with_caps_lock);
608− }
609− spin_unlock(&realm->inodes_with_caps_lock);
610− if (lastinode)
611− iput(lastinode);
612− dout("update_snap_trace cap_snaps queued\n");
613− }
614−
640+ if (!deletion)
641+ queue_realm_cap_snaps(realm);
615642 } else {
616643 dout("update_snap_trace %llx %p seq %lld unchanged\n",
617644 realm->ino, realm, realm->seq);
fs/ceph/super.h+7−4
@@ -216,8 +216,7 @@ struct ceph_cap_snap { · 215 unmodified lines
216216 uid_t uid;
217217 gid_t gid;
218218
219− void *xattr_blob;
220− int xattr_len;
219+ struct ceph_buffer *xattr_blob;
221220 u64 xattr_version;
222221
223222 u64 size;
@@ -229,8 +228,11 @@ struct ceph_cap_snap { · 5 unmodified lines
229228
230229 static inline void ceph_put_cap_snap(struct ceph_cap_snap *capsnap)
231230 {
232− if (atomic_dec_and_test(&capsnap->nref))
231+ if (atomic_dec_and_test(&capsnap->nref)) {
232+ if (capsnap->xattr_blob)
233+ ceph_buffer_put(capsnap->xattr_blob);
233234 kfree(capsnap);
235+ }
234236 }
235237
236238 /*
@@ -342,7 +344,8 @@ struct ceph_inode_info { · 105 unmodified lines
342344 unsigned i_cap_exporting_issued;
343345 struct ceph_cap_reservation i_cap_migration_resv;
344346 struct list_head i_cap_snaps; /* snapped state pending flush to mds */
345− struct ceph_snap_context *i_head_snapc; /* set if wr_buffer_head > 0 */
347+ struct ceph_snap_context *i_head_snapc; /* set if wr_buffer_head > 0 or
348+ dirty|flushing caps */
346349 unsigned i_snap_caps; /* cap bits for snapped files */
347350
348351 int i_nr_by_mode[CEPH_FILE_MODE_NUM]; /* open file counts */
fs/ceph/xattr.c+1−0
@@ -485,6 +485,7 @@ void __ceph_build_xattrs_blob(struct ceph_inode_info *ci) · 484 unmodified lines
485485 ci->i_xattrs.blob = ci->i_xattrs.prealloc_blob;
486486 ci->i_xattrs.prealloc_blob = NULL;
487487 ci->i_xattrs.dirty = false;
488+ ci->i_xattrs.version++;
488489 }
489490 }
490491
fs/cifs/cifs_unicode.h+11−7
@@ -30,6 +30,8 @@ · 29 unmodified lines
3030 * This is a compressed table of upper and lower case conversion.
3131 *
3232 */
33+#ifndef _CIFS_UNICODE_H
34+#define _CIFS_UNICODE_H
3335
3436 #include <asm/byteorder.h>
3537 #include <linux/types.h>
@@ -67,8 +69,8 @@ extern const struct UniCaseRange CifsUniUpperRange[]; · 31 unmodified lines
6769 #endif /* UNIUPR_NOUPPER */
6870
6971 #ifndef UNIUPR_NOLOWER
70−extern signed char UniLowerTable[512];
71−extern struct UniCaseRange UniLowerRange[];
72+extern signed char CifsUniLowerTable[512];
73+extern const struct UniCaseRange CifsUniLowerRange[];
7274 #endif /* UNIUPR_NOLOWER */
7375
7476 #ifdef __KERNEL__
@@ -337,15 +339,15 @@ UniStrupr(register wchar_t *upin) · 262 unmodified lines
337339 * UniTolower: Convert a unicode character to lower case
338340 */
339341 static inline wchar_t
340−UniTolower(wchar_t uc)
342+UniTolower(register wchar_t uc)
341343 {
342− register struct UniCaseRange *rp;
344+ register const struct UniCaseRange *rp;
343345
344− if (uc < sizeof(UniLowerTable)) {
346+ if (uc < sizeof(CifsUniLowerTable)) {
345347 /* Latin characters */
346− return uc + UniLowerTable[uc]; /* Use base tables */
348+ return uc + CifsUniLowerTable[uc]; /* Use base tables */
347349 } else {
348− rp = UniLowerRange; /* Use range tables */
350+ rp = CifsUniLowerRange; /* Use range tables */
349351 while (rp->start) {
350352 if (uc < rp->start) /* Before start of range */
351353 return uc; /* Uppercase = input */
@@ -374,3 +376,5 @@ UniStrlwr(register wchar_t *upin) · 22 unmodified lines
374376 }
375377
376378 #endif
379+
380+#endif /* _CIFS_UNICODE_H */
fs/cifs/cifs_uniupr.h+8−8
@@ -140,7 +140,7 @@ const struct UniCaseRange CifsUniUpperRange[] = { · 139 unmodified lines
140140 /*
141141 * Latin lower case
142142 */
143−static signed char CifsUniLowerTable[512] = {
143+signed char CifsUniLowerTable[512] = {
144144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 000-00f */
145145 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 010-01f */
146146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 020-02f */
@@ -242,12 +242,12 @@ static signed char UniCaseRangeLff20[27] = { · 95 unmodified lines
242242 /*
243243 * Lower Case Range
244244 */
245−static const struct UniCaseRange CifsUniLowerRange[] = {
246− 0x0380, 0x03ab, UniCaseRangeL0380,
247− 0x0400, 0x042f, UniCaseRangeL0400,
248− 0x0490, 0x04cb, UniCaseRangeL0490,
249− 0x1e00, 0x1ff7, UniCaseRangeL1e00,
250− 0xff20, 0xff3a, UniCaseRangeLff20,
251− 0, 0, 0
245+const struct UniCaseRange CifsUniLowerRange[] = {
246+ {0x0380, 0x03ab, UniCaseRangeL0380},
247+ {0x0400, 0x042f, UniCaseRangeL0400},
248+ {0x0490, 0x04cb, UniCaseRangeL0490},
249+ {0x1e00, 0x1ff7, UniCaseRangeL1e00},
250+ {0xff20, 0xff3a, UniCaseRangeLff20},
251+ {0}
252252 };
253253 #endif
fs/cifs/cifsencrypt.c+0−57
@@ -223,63 +223,6 @@ int cifs_calculate_mac_key(struct mac_key *key, const char *rn, · 222 unmodified lines
223223 return 0;
224224 }
225225
226−int CalcNTLMv2_partial_mac_key(struct cifsSesInfo *ses,
227− const struct nls_table *nls_info)
228−{
229− char temp_hash[16];
230− struct HMACMD5Context ctx;
231− char *ucase_buf;
232− __le16 *unicode_buf;
233− unsigned int i, user_name_len, dom_name_len;
234−
235− if (ses == NULL)
236− return -EINVAL;
237−
238− E_md4hash(ses->password, temp_hash);
239−
240− hmac_md5_init_limK_to_64(temp_hash, 16, &ctx);
241− user_name_len = strlen(ses->userName);
242− if (user_name_len > MAX_USERNAME_SIZE)
243− return -EINVAL;
244− if (ses->domainName == NULL)
245− return -EINVAL; /* BB should we use CIFS_LINUX_DOM */
246− dom_name_len = strlen(ses->domainName);
247− if (dom_name_len > MAX_USERNAME_SIZE)
248− return -EINVAL;
249−
250− ucase_buf = kmalloc((MAX_USERNAME_SIZE+1), GFP_KERNEL);
251− if (ucase_buf == NULL)
252− return -ENOMEM;
253− unicode_buf = kmalloc((MAX_USERNAME_SIZE+1)*4, GFP_KERNEL);
254− if (unicode_buf == NULL) {
255− kfree(ucase_buf);
256− return -ENOMEM;
257− }
258−
259− for (i = 0; i < user_name_len; i++)
260− ucase_buf[i] = nls_info->charset2upper[(int)ses->userName[i]];
261− ucase_buf[i] = 0;
262− user_name_len = cifs_strtoUCS(unicode_buf, ucase_buf,
263− MAX_USERNAME_SIZE*2, nls_info);
264− unicode_buf[user_name_len] = 0;
265− user_name_len++;
266−
267− for (i = 0; i < dom_name_len; i++)
268− ucase_buf[i] = nls_info->charset2upper[(int)ses->domainName[i]];
269− ucase_buf[i] = 0;
270− dom_name_len = cifs_strtoUCS(unicode_buf+user_name_len, ucase_buf,
271− MAX_USERNAME_SIZE*2, nls_info);
272−
273− unicode_buf[user_name_len + dom_name_len] = 0;
274− hmac_md5_update((const unsigned char *) unicode_buf,
275− (user_name_len+dom_name_len)*2, &ctx);
276−
277− hmac_md5_final(ses->server->ntlmv2_hash, &ctx);
278− kfree(ucase_buf);
279− kfree(unicode_buf);
280− return 0;
281−}
282−
283226 #ifdef CONFIG_CIFS_WEAK_PW_HASH
284227 void calc_lanman_hash(const char *password, const char *cryptkey, bool encrypt,
285228 char *lnm_session_key)
fs/cifs/cifsproto.h+2−3
@@ -87,8 +87,9 @@ extern unsigned int smbCalcSize_LE(struct smb_hdr *ptr); · 86 unmodified lines
8787 extern int decode_negTokenInit(unsigned char *security_blob, int length,
8888 struct TCP_Server_Info *server);
8989 extern int cifs_convert_address(struct sockaddr *dst, const char *src, int len);
90+extern int cifs_set_port(struct sockaddr *addr, const unsigned short int port);
9091 extern int cifs_fill_sockaddr(struct sockaddr *dst, const char *src, int len,
91− unsigned short int port);
92+ const unsigned short int port);
9293 extern int map_smb_to_linux_error(struct smb_hdr *smb, int logErr);
9394 extern void header_assemble(struct smb_hdr *, char /* command */ ,
9495 const struct cifsTconInfo *, int /* length of
@@ -365,8 +366,6 @@ extern int cifs_verify_signature(struct smb_hdr *, · 270 unmodified lines
365366 __u32 expected_sequence_number);
366367 extern int cifs_calculate_mac_key(struct mac_key *key, const char *rn,
367368 const char *pass);
368−extern int CalcNTLMv2_partial_mac_key(struct cifsSesInfo *,
369− const struct nls_table *);
370369 extern void CalcNTLMv2_response(const struct cifsSesInfo *, char *);
371370 extern void setup_ntlmv2_rsp(struct cifsSesInfo *, char *,
372371 const struct nls_table *);
fs/cifs/connect.c+23−39
@@ -400,7 +400,9 @@ incomplete_rcv: · 399 unmodified lines
400400 cFYI(1, "call to reconnect done");
401401 csocket = server->ssocket;
402402 continue;
403− } else if ((length == -ERESTARTSYS) || (length == -EAGAIN)) {
403+ } else if (length == -ERESTARTSYS ||
404+ length == -EAGAIN ||
405+ length == -EINTR) {
404406 msleep(1); /* minimum sleep to prevent looping
405407 allowing socket to clear and app threads to set
406408 tcpStatus CifsNeedReconnect if server hung */
@@ -414,18 +416,6 @@ incomplete_rcv: · 7 unmodified lines
414416 } else
415417 continue;
416418 } else if (length <= 0) {
417− if (server->tcpStatus == CifsNew) {
418− cFYI(1, "tcp session abend after SMBnegprot");
419− /* some servers kill the TCP session rather than
420− returning an SMB negprot error, in which
421− case reconnecting here is not going to help,
422− and so simply return error to mount */
423− break;
424− }
425− if (!try_to_freeze() && (length == -EINTR)) {
426− cFYI(1, "cifsd thread killed");
427− break;
428− }
429419 cFYI(1, "Reconnect after unexpected peek error %d",
430420 length);
431421 cifs_reconnect(server);
@@ -466,27 +456,19 @@ incomplete_rcv: · 34 unmodified lines
466456 an error on SMB negprot response */
467457 cFYI(1, "Negative RFC1002 Session Response Error 0x%x)",
468458 pdu_length);
469− if (server->tcpStatus == CifsNew) {
470− /* if nack on negprot (rather than
471− ret of smb negprot error) reconnecting
472− not going to help, ret error to mount */
473− break;
474− } else {
475− /* give server a second to
476− clean up before reconnect attempt */
477− msleep(1000);
478− /* always try 445 first on reconnect
479− since we get NACK on some if we ever
480− connected to port 139 (the NACK is
481− since we do not begin with RFC1001
482− session initialize frame) */
483− server->addr.sockAddr.sin_port =
484− htons(CIFS_PORT);
485− cifs_reconnect(server);
486− csocket = server->ssocket;
487− wake_up(&server->response_q);
488− continue;
489− }
459+ /* give server a second to clean up */
460+ msleep(1000);
461+ /* always try 445 first on reconnect since we get NACK
462+ * on some if we ever connected to port 139 (the NACK
463+ * is since we do not begin with RFC1001 session
464+ * initialize frame)
465+ */
466+ cifs_set_port((struct sockaddr *)
467+ &server->addr.sockAddr, CIFS_PORT);
468+ cifs_reconnect(server);
469+ csocket = server->ssocket;
470+ wake_up(&server->response_q);
471+ continue;
490472 } else if (temp != (char) 0) {
491473 cERROR(1, "Unknown RFC 1002 frame");
492474 cifs_dump_mem(" Received Data: ", (char *)smb_buffer,
@@ -522,8 +504,7 @@ incomplete_rcv: · 29 unmodified lines
522504 total_read += length) {
523505 length = kernel_recvmsg(csocket, &smb_msg, &iov, 1,
524506 pdu_length - total_read, 0);
525− if ((server->tcpStatus == CifsExiting) ||
526− (length == -EINTR)) {
507+ if (server->tcpStatus == CifsExiting) {
527508 /* then will exit */
528509 reconnect = 2;
529510 break;
@@ -534,8 +515,9 @@ incomplete_rcv: · 4 unmodified lines
534515 /* Now we will reread sock */
535516 reconnect = 1;
536517 break;
537− } else if ((length == -ERESTARTSYS) ||
538− (length == -EAGAIN)) {
518+ } else if (length == -ERESTARTSYS ||
519+ length == -EAGAIN ||
520+ length == -EINTR) {
539521 msleep(1); /* minimum sleep to prevent looping,
540522 allowing socket to clear and app
541523 threads to set tcpStatus
@@ -1673,7 +1655,9 @@ cifs_find_smb_ses(struct TCP_Server_Info *server, struct smb_vol *vol) · 1131 unmodified lines
16731655 MAX_USERNAME_SIZE))
16741656 continue;
16751657 if (strlen(vol->username) != 0 &&
1676− strncmp(ses->password, vol->password,
1658+ ses->password != NULL &&
1659+ strncmp(ses->password,
1660+ vol->password ? vol->password : "",
16771661 MAX_PASSWORD_SIZE))
16781662 continue;
16791663 }
fs/cifs/dir.c+77−80
@@ -305,8 +305,7 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode, · 304 unmodified lines
305305 full_path = build_path_from_dentry(direntry);
306306 if (full_path == NULL) {
307307 rc = -ENOMEM;
308− FreeXid(xid);
309− return rc;
308+ goto cifs_create_out;
310309 }
311310
312311 if (oplockEnabled)
@@ -365,9 +364,8 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode, · 52 unmodified lines
365364
366365 buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
367366 if (buf == NULL) {
368− kfree(full_path);
369− FreeXid(xid);
370− return -ENOMEM;
367+ rc = -ENOMEM;
368+ goto cifs_create_out;
371369 }
372370
373371 /*
@@ -496,6 +494,11 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode, · 122 unmodified lines
496494 struct cifsTconInfo *pTcon;
497495 char *full_path = NULL;
498496 struct inode *newinode = NULL;
497+ int oplock = 0;
498+ u16 fileHandle;
499+ FILE_ALL_INFO *buf = NULL;
500+ unsigned int bytes_written;
501+ struct win_dev *pdev;
499502
500503 if (!old_valid_dev(device_number))
501504 return -EINVAL;
@@ -506,9 +509,12 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode, · 4 unmodified lines
506509 pTcon = cifs_sb->tcon;
507510
508511 full_path = build_path_from_dentry(direntry);
509− if (full_path == NULL)
512+ if (full_path == NULL) {
510513 rc = -ENOMEM;
511− else if (pTcon->unix_ext) {
514+ goto mknod_out;
515+ }
516+
517+ if (pTcon->unix_ext) {
512518 struct cifs_unix_set_info_args args = {
513519 .mode = mode & ~current_umask(),
514520 .ctime = NO_CHANGE_64,
@@ -527,87 +533,78 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode, · 12 unmodified lines
527533 cifs_sb->local_nls,
528534 cifs_sb->mnt_cifs_flags &
529535 CIFS_MOUNT_MAP_SPECIAL_CHR);
536+ if (rc)
537+ goto mknod_out;
530538
531− if (!rc) {
532− rc = cifs_get_inode_info_unix(&newinode, full_path,
539+ rc = cifs_get_inode_info_unix(&newinode, full_path,
533540 inode->i_sb, xid);
534− if (pTcon->nocase)
535− direntry->d_op = &cifs_ci_dentry_ops;
536− else
537− direntry->d_op = &cifs_dentry_ops;
538− if (rc == 0)
539− d_instantiate(direntry, newinode);
540− }
541− } else {
542− if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
543− int oplock = 0;
544− u16 fileHandle;
545− FILE_ALL_INFO *buf;
541+ if (pTcon->nocase)
542+ direntry->d_op = &cifs_ci_dentry_ops;
543+ else
544+ direntry->d_op = &cifs_dentry_ops;
546545
547− cFYI(1, "sfu compat create special file");
546+ if (rc == 0)
547+ d_instantiate(direntry, newinode);
548+ goto mknod_out;
549+ }
548550
549− buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
550− if (buf == NULL) {
551− kfree(full_path);
552− rc = -ENOMEM;
553− FreeXid(xid);
554− return rc;
555− }
551+ if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL))
552+ goto mknod_out;
556553
557− rc = CIFSSMBOpen(xid, pTcon, full_path,
558− FILE_CREATE, /* fail if exists */
559− GENERIC_WRITE /* BB would
560− WRITE_OWNER | WRITE_DAC be better? */,
561− /* Create a file and set the
562− file attribute to SYSTEM */
563− CREATE_NOT_DIR | CREATE_OPTION_SPECIAL,
564− &fileHandle, &oplock, buf,
565− cifs_sb->local_nls,
566− cifs_sb->mnt_cifs_flags &
567− CIFS_MOUNT_MAP_SPECIAL_CHR);
568−
569− /* BB FIXME - add handling for backlevel servers
570− which need legacy open and check for all
571− calls to SMBOpen for fallback to SMBLeagcyOpen */
572− if (!rc) {
573− /* BB Do not bother to decode buf since no
574− local inode yet to put timestamps in,
575− but we can reuse it safely */
576− unsigned int bytes_written;
577− struct win_dev *pdev;
578− pdev = (struct win_dev *)buf;
579− if (S_ISCHR(mode)) {
580− memcpy(pdev->type, "IntxCHR", 8);
581− pdev->major =
582− cpu_to_le64(MAJOR(device_number));
583− pdev->minor =
584− cpu_to_le64(MINOR(device_number));
585− rc = CIFSSMBWrite(xid, pTcon,
586− fileHandle,
587− sizeof(struct win_dev),
588− 0, &bytes_written, (char *)pdev,
589− NULL, 0);
590− } else if (S_ISBLK(mode)) {
591− memcpy(pdev->type, "IntxBLK", 8);
592− pdev->major =
593− cpu_to_le64(MAJOR(device_number));
594− pdev->minor =
595− cpu_to_le64(MINOR(device_number));
596− rc = CIFSSMBWrite(xid, pTcon,
597− fileHandle,
598− sizeof(struct win_dev),
599− 0, &bytes_written, (char *)pdev,
600− NULL, 0);
601− } /* else if(S_ISFIFO */
602− CIFSSMBClose(xid, pTcon, fileHandle);
603− d_drop(direntry);
604− }
605− kfree(buf);
606− /* add code here to set EAs */
607− }
554+
555+ cFYI(1, "sfu compat create special file");
556+
557+ buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
558+ if (buf == NULL) {
559+ kfree(full_path);
560+ rc = -ENOMEM;
561+ FreeXid(xid);
562+ return rc;
608563 }
609564
565+ /* FIXME: would WRITE_OWNER | WRITE_DAC be better? */
566+ rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_CREATE,
567+ GENERIC_WRITE, CREATE_NOT_DIR | CREATE_OPTION_SPECIAL,
568+ &fileHandle, &oplock, buf, cifs_sb->local_nls,
569+ cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
570+ if (rc)
571+ goto mknod_out;
572+
573+ /* BB Do not bother to decode buf since no local inode yet to put
574+ * timestamps in, but we can reuse it safely */
575+
576+ pdev = (struct win_dev *)buf;
577+ if (S_ISCHR(mode)) {
578+ memcpy(pdev->type, "IntxCHR", 8);
579+ pdev->major =
580+ cpu_to_le64(MAJOR(device_number));
581+ pdev->minor =
582+ cpu_to_le64(MINOR(device_number));
583+ rc = CIFSSMBWrite(xid, pTcon,
584+ fileHandle,
585+ sizeof(struct win_dev),
586+ 0, &bytes_written, (char *)pdev,
587+ NULL, 0);
588+ } else if (S_ISBLK(mode)) {
589+ memcpy(pdev->type, "IntxBLK", 8);
590+ pdev->major =
591+ cpu_to_le64(MAJOR(device_number));
592+ pdev->minor =
593+ cpu_to_le64(MINOR(device_number));
594+ rc = CIFSSMBWrite(xid, pTcon,
595+ fileHandle,
596+ sizeof(struct win_dev),
597+ 0, &bytes_written, (char *)pdev,
598+ NULL, 0);
599+ } /* else if (S_ISFIFO) */
600+ CIFSSMBClose(xid, pTcon, fileHandle);
601+ d_drop(direntry);
602+
603+ /* FIXME: add code here to set EAs */
604+
605+mknod_out:
610606 kfree(full_path);
607+ kfree(buf);
611608 FreeXid(xid);
612609 return rc;
613610 }
fs/cifs/file.c+1−2
@@ -242,8 +242,7 @@ int cifs_open(struct inode *inode, struct file *file) · 241 unmodified lines
242242 full_path = build_path_from_dentry(file->f_path.dentry);
243243 if (full_path == NULL) {
244244 rc = -ENOMEM;
245− FreeXid(xid);
246− return rc;
245+ goto out;
247246 }
248247
249248 cFYI(1, "inode = 0x%p file flags are 0x%x for %s",
fs/cifs/inode.c+10−22
@@ -834,7 +834,7 @@ struct inode *cifs_root_iget(struct super_block *sb, unsigned long ino) · 833 unmodified lines
834834 xid, NULL);
835835
836836 if (!inode)
837− return ERR_PTR(-ENOMEM);
837+ return ERR_PTR(rc);
838838
839839 #ifdef CONFIG_CIFS_FSCACHE
840840 /* populate tcon->resource_id */
@@ -1462,28 +1462,17 @@ int cifs_rename(struct inode *source_dir, struct dentry *source_dentry, · 621 unmodified lines
14621462 {
14631463 char *fromName = NULL;
14641464 char *toName = NULL;
1465− struct cifs_sb_info *cifs_sb_source;
1466− struct cifs_sb_info *cifs_sb_target;
1465+ struct cifs_sb_info *cifs_sb;
14671466 struct cifsTconInfo *tcon;
14681467 FILE_UNIX_BASIC_INFO *info_buf_source = NULL;
14691468 FILE_UNIX_BASIC_INFO *info_buf_target;
14701469 int xid, rc, tmprc;
14711470
1472− cifs_sb_target = CIFS_SB(target_dir->i_sb);
1473− cifs_sb_source = CIFS_SB(source_dir->i_sb);
1474− tcon = cifs_sb_source->tcon;
1471+ cifs_sb = CIFS_SB(source_dir->i_sb);
1472+ tcon = cifs_sb->tcon;
14751473
14761474 xid = GetXid();
14771475
1478− /*
1479− * BB: this might be allowed if same server, but different share.
1480− * Consider adding support for this
1481− */
1482− if (tcon != cifs_sb_target->tcon) {
1483− rc = -EXDEV;
1484− goto cifs_rename_exit;
1485− }
1486−
14871476 /*
14881477 * we already have the rename sem so we do not need to
14891478 * grab it again here to protect the path integrity
@@ -1519,17 +1508,16 @@ int cifs_rename(struct inode *source_dir, struct dentry *source_dentry, · 29 unmodified lines
15191508 info_buf_target = info_buf_source + 1;
15201509 tmprc = CIFSSMBUnixQPathInfo(xid, tcon, fromName,
15211510 info_buf_source,
1522− cifs_sb_source->local_nls,
1523− cifs_sb_source->mnt_cifs_flags &
1511+ cifs_sb->local_nls,
1512+ cifs_sb->mnt_cifs_flags &
15241513 CIFS_MOUNT_MAP_SPECIAL_CHR);
15251514 if (tmprc != 0)
15261515 goto unlink_target;
15271516
1528− tmprc = CIFSSMBUnixQPathInfo(xid, tcon,
1529− toName, info_buf_target,
1530− cifs_sb_target->local_nls,
1531− /* remap based on source sb */
1532− cifs_sb_source->mnt_cifs_flags &
1517+ tmprc = CIFSSMBUnixQPathInfo(xid, tcon, toName,
1518+ info_buf_target,
1519+ cifs_sb->local_nls,
1520+ cifs_sb->mnt_cifs_flags &
15331521 CIFS_MOUNT_MAP_SPECIAL_CHR);
15341522
15351523 if (tmprc == 0 && (info_buf_source->UniqueId ==
fs/cifs/netmisc.c+13−9
@@ -206,26 +206,30 @@ cifs_convert_address(struct sockaddr *dst, const char *src, int len) · 205 unmodified lines
206206 }
207207
208208 int
209−cifs_fill_sockaddr(struct sockaddr *dst, const char *src, int len,
210− const unsigned short int port)
209+cifs_set_port(struct sockaddr *addr, const unsigned short int port)
211210 {
212− if (!cifs_convert_address(dst, src, len))
213− return 0;
214−
215− switch (dst->sa_family) {
211+ switch (addr->sa_family) {
216212 case AF_INET:
217− ((struct sockaddr_in *)dst)->sin_port = htons(port);
213+ ((struct sockaddr_in *)addr)->sin_port = htons(port);
218214 break;
219215 case AF_INET6:
220− ((struct sockaddr_in6 *)dst)->sin6_port = htons(port);
216+ ((struct sockaddr_in6 *)addr)->sin6_port = htons(port);
221217 break;
222218 default:
223219 return 0;
224220 }
225−
226221 return 1;
227222 }
228223
224+int
225+cifs_fill_sockaddr(struct sockaddr *dst, const char *src, int len,
226+ const unsigned short int port)
227+{
228+ if (!cifs_convert_address(dst, src, len))
229+ return 0;
230+ return cifs_set_port(dst, port);
231+}
232+
229233 /*****************************************************************************
230234 convert a NT status code to a dos class/code
231235 *****************************************************************************/
fs/direct-io.c+2−2
@@ -634,7 +634,7 @@ static int dio_send_cur_page(struct dio *dio) · 633 unmodified lines
634634 int ret = 0;
635635
636636 if (dio->bio) {
637− loff_t cur_offset = dio->block_in_file << dio->blkbits;
637+ loff_t cur_offset = dio->cur_page_fs_offset;
638638 loff_t bio_next_offset = dio->logical_offset_in_bio +
639639 dio->bio->bi_size;
640640
@@ -659,7 +659,7 @@ static int dio_send_cur_page(struct dio *dio) · 18 unmodified lines
659659 * Submit now if the underlying fs is about to perform a
660660 * metadata read
661661 */
662− if (dio->boundary)
662+ else if (dio->boundary)
663663 dio_bio_submit(dio);
664664 }
665665
fs/ecryptfs/crypto.c+1−2
@@ -1793,7 +1793,7 @@ struct kmem_cache *ecryptfs_key_tfm_cache; · 1792 unmodified lines
17931793 static struct list_head key_tfm_list;
17941794 struct mutex key_tfm_list_mutex;
17951795
1796−int ecryptfs_init_crypto(void)
1796+int __init ecryptfs_init_crypto(void)
17971797 {
17981798 mutex_init(&key_tfm_list_mutex);
17991799 INIT_LIST_HEAD(&key_tfm_list);
@@ -2169,7 +2169,6 @@ int ecryptfs_encrypt_and_encode_filename( · 369 unmodified lines
21692169 (ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE
21702170 + encoded_name_no_prefix_size);
21712171 (*encoded_name)[(*encoded_name_size)] = '\0';
2172− (*encoded_name_size)++;
21732172 } else {
21742173 rc = -EOPNOTSUPP;
21752174 }
fs/ecryptfs/inode.c+24−7
@@ -349,7 +349,7 @@ out: · 348 unmodified lines
349349
350350 /**
351351 * ecryptfs_new_lower_dentry
352− * @ename: The name of the new dentry.
352+ * @name: The name of the new dentry.
353353 * @lower_dir_dentry: Parent directory of the new dentry.
354354 * @nd: nameidata from last lookup.
355355 *
@@ -386,20 +386,19 @@ ecryptfs_new_lower_dentry(struct qstr *name, struct dentry *lower_dir_dentry, · 30 unmodified lines
386386 * ecryptfs_lookup_one_lower
387387 * @ecryptfs_dentry: The eCryptfs dentry that we are looking up
388388 * @lower_dir_dentry: lower parent directory
389+ * @name: lower file name
389390 *
390391 * Get the lower dentry from vfs. If lower dentry does not exist yet,
391392 * create it.
392393 */
393394 static struct dentry *
394395 ecryptfs_lookup_one_lower(struct dentry *ecryptfs_dentry,
395− struct dentry *lower_dir_dentry)
396+ struct dentry *lower_dir_dentry, struct qstr *name)
396397 {
397398 struct nameidata nd;
398399 struct vfsmount *lower_mnt;
399− struct qstr *name;
400400 int err;
401401
402− name = &ecryptfs_dentry->d_name;
403402 lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(
404403 ecryptfs_dentry->d_parent));
405404 err = vfs_path_lookup(lower_dir_dentry, lower_mnt, name->name , 0, &nd);
@@ -434,6 +433,7 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode, · 28 unmodified lines
434433 size_t encrypted_and_encoded_name_size;
435434 struct ecryptfs_mount_crypt_stat *mount_crypt_stat = NULL;
436435 struct dentry *lower_dir_dentry, *lower_dentry;
436+ struct qstr lower_name;
437437 int rc = 0;
438438
439439 ecryptfs_dentry->d_op = &ecryptfs_dops;
@@ -444,9 +444,17 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode, · 4 unmodified lines
444444 goto out_d_drop;
445445 }
446446 lower_dir_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry->d_parent);
447−
447+ lower_name.name = ecryptfs_dentry->d_name.name;
448+ lower_name.len = ecryptfs_dentry->d_name.len;
449+ lower_name.hash = ecryptfs_dentry->d_name.hash;
450+ if (lower_dir_dentry->d_op && lower_dir_dentry->d_op->d_hash) {
451+ rc = lower_dir_dentry->d_op->d_hash(lower_dir_dentry,
452+ &lower_name);
453+ if (rc < 0)
454+ goto out_d_drop;
455+ }
448456 lower_dentry = ecryptfs_lookup_one_lower(ecryptfs_dentry,
449− lower_dir_dentry);
457+ lower_dir_dentry, &lower_name);
450458 if (IS_ERR(lower_dentry)) {
451459 rc = PTR_ERR(lower_dentry);
452460 ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_lower() returned "
@@ -471,8 +479,17 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode, · 18 unmodified lines
471479 "filename; rc = [%d]\n", __func__, rc);
472480 goto out_d_drop;
473481 }
482+ lower_name.name = encrypted_and_encoded_name;
483+ lower_name.len = encrypted_and_encoded_name_size;
484+ lower_name.hash = full_name_hash(lower_name.name, lower_name.len);
485+ if (lower_dir_dentry->d_op && lower_dir_dentry->d_op->d_hash) {
486+ rc = lower_dir_dentry->d_op->d_hash(lower_dir_dentry,
487+ &lower_name);
488+ if (rc < 0)
489+ goto out_d_drop;
490+ }
474491 lower_dentry = ecryptfs_lookup_one_lower(ecryptfs_dentry,
475− lower_dir_dentry);
492+ lower_dir_dentry, &lower_name);
476493 if (IS_ERR(lower_dentry)) {
477494 rc = PTR_ERR(lower_dentry);
478495 ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_lower() returned "
fs/ecryptfs/keystore.c+2−0
@@ -515,6 +515,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes, · 514 unmodified lines
515515 if (!s) {
516516 printk(KERN_ERR "%s: Out of memory whilst trying to kmalloc "
517517 "[%zd] bytes of kernel memory\n", __func__, sizeof(*s));
518+ rc = -ENOMEM;
518519 goto out;
519520 }
520521 s->desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP;
@@ -806,6 +807,7 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, · 285 unmodified lines
806807 if (!s) {
807808 printk(KERN_ERR "%s: Out of memory whilst trying to kmalloc "
808809 "[%zd] bytes of kernel memory\n", __func__, sizeof(*s));
810+ rc = -ENOMEM;
809811 goto out;
810812 }
811813 s->desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP;
fs/ecryptfs/kthread.c+1−1
@@ -86,7 +86,7 @@ out: · 85 unmodified lines
8686 return 0;
8787 }
8888
89−int ecryptfs_init_kthread(void)
89+int __init ecryptfs_init_kthread(void)
9090 {
9191 int rc = 0;
9292
fs/ecryptfs/messaging.c+1−1
@@ -473,7 +473,7 @@ sleep: · 472 unmodified lines
473473 return rc;
474474 }
475475
476−int ecryptfs_init_messaging(void)
476+int __init ecryptfs_init_messaging(void)
477477 {
478478 int i;
479479 int rc = 0;
fs/ecryptfs/miscdev.c+1−1
@@ -500,7 +500,7 @@ static struct miscdevice ecryptfs_miscdev = { · 499 unmodified lines
500500 *
501501 * Returns zero on success; non-zero otherwise
502502 */
503−int ecryptfs_init_ecryptfs_miscdev(void)
503+int __init ecryptfs_init_ecryptfs_miscdev(void)
504504 {
505505 int rc;
506506
fs/exec.c+14−0
@@ -376,6 +376,9 @@ static int count(const char __user * const __user * argv, int max) · 375 unmodified lines
376376 argv++;
377377 if (i++ >= max)
378378 return -E2BIG;
379+
380+ if (fatal_signal_pending(current))
381+ return -ERESTARTNOHAND;
379382 cond_resched();
380383 }
381384 }
@@ -419,6 +422,12 @@ static int copy_strings(int argc, const char __user *const __user *argv, · 37 unmodified lines
419422 while (len > 0) {
420423 int offset, bytes_to_copy;
421424
425+ if (fatal_signal_pending(current)) {
426+ ret = -ERESTARTNOHAND;
427+ goto out;
428+ }
429+ cond_resched();
430+
422431 offset = pos % PAGE_SIZE;
423432 if (offset == 0)
424433 offset = PAGE_SIZE;
@@ -594,6 +603,11 @@ int setup_arg_pages(struct linux_binprm *bprm, · 169 unmodified lines
594603 #else
595604 stack_top = arch_align_stack(stack_top);
596605 stack_top = PAGE_ALIGN(stack_top);
606+
607+ if (unlikely(stack_top < mmap_min_addr) ||
608+ unlikely(vma->vm_end - vma->vm_start >= stack_top - mmap_min_addr))
609+ return -ENOMEM;
610+
597611 stack_shift = vma->vm_end - stack_top;
598612
599613 bprm->p -= stack_shift;
fs/fcntl.c+7−3
@@ -769,11 +769,15 @@ EXPORT_SYMBOL(kill_fasync); · 768 unmodified lines
769769
770770 static int __init fcntl_init(void)
771771 {
772− /* please add new bits here to ensure allocation uniqueness */
773− BUILD_BUG_ON(19 - 1 /* for O_RDONLY being 0 */ != HWEIGHT32(
772+ /*
773+ * Please add new bits here to ensure allocation uniqueness.
774+ * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY
775+ * is defined as O_NONBLOCK on some platforms and not on others.
776+ */
777+ BUILD_BUG_ON(18 - 1 /* for O_RDONLY being 0 */ != HWEIGHT32(
774778 O_RDONLY | O_WRONLY | O_RDWR |
775779 O_CREAT | O_EXCL | O_NOCTTY |
776− O_TRUNC | O_APPEND | O_NONBLOCK |
780+ O_TRUNC | O_APPEND | /* O_NONBLOCK | */
777781 __O_SYNC | O_DSYNC | FASYNC |
778782 O_DIRECT | O_LARGEFILE | O_DIRECTORY |
779783 O_NOFOLLOW | O_NOATIME | O_CLOEXEC |
fs/fs-writeback.c+1−1
@@ -808,7 +808,7 @@ int bdi_writeback_thread(void *data) · 807 unmodified lines
808808 wb->last_active = jiffies;
809809
810810 set_current_state(TASK_INTERRUPTIBLE);
811− if (!list_empty(&bdi->work_list)) {
811+ if (!list_empty(&bdi->work_list) || kthread_should_stop()) {
812812 __set_current_state(TASK_RUNNING);
813813 continue;
814814 }
fs/fuse/dev.c+26−16
@@ -276,7 +276,7 @@ static void flush_bg_queue(struct fuse_conn *fc) · 275 unmodified lines
276276 * Called with fc->lock, unlocks it
277277 */
278278 static void request_end(struct fuse_conn *fc, struct fuse_req *req)
279−__releases(&fc->lock)
279+__releases(fc->lock)
280280 {
281281 void (*end) (struct fuse_conn *, struct fuse_req *) = req->end;
282282 req->end = NULL;
@@ -306,8 +306,8 @@ __releases(&fc->lock) · 23 unmodified lines
306306
307307 static void wait_answer_interruptible(struct fuse_conn *fc,
308308 struct fuse_req *req)
309−__releases(&fc->lock)
310−__acquires(&fc->lock)
309+__releases(fc->lock)
310+__acquires(fc->lock)
311311 {
312312 if (signal_pending(current))
313313 return;
@@ -325,8 +325,8 @@ static void queue_interrupt(struct fuse_conn *fc, struct fuse_req *req) · 11 unmodified lines
325325 }
326326
327327 static void request_wait_answer(struct fuse_conn *fc, struct fuse_req *req)
328−__releases(&fc->lock)
329−__acquires(&fc->lock)
328+__releases(fc->lock)
329+__acquires(fc->lock)
330330 {
331331 if (!fc->no_interrupt) {
332332 /* Any signal may interrupt this */
@@ -905,8 +905,8 @@ static int request_pending(struct fuse_conn *fc) · 572 unmodified lines
905905
906906 /* Wait until a request is available on the pending list */
907907 static void request_wait(struct fuse_conn *fc)
908−__releases(&fc->lock)
909−__acquires(&fc->lock)
908+__releases(fc->lock)
909+__acquires(fc->lock)
910910 {
911911 DECLARE_WAITQUEUE(wait, current);
912912
@@ -934,7 +934,7 @@ __acquires(&fc->lock) · 21 unmodified lines
934934 */
935935 static int fuse_read_interrupt(struct fuse_conn *fc, struct fuse_copy_state *cs,
936936 size_t nbytes, struct fuse_req *req)
937−__releases(&fc->lock)
937+__releases(fc->lock)
938938 {
939939 struct fuse_in_header ih;
940940 struct fuse_interrupt_in arg;
@@ -1720,8 +1720,8 @@ static unsigned fuse_dev_poll(struct file *file, poll_table *wait) · 779 unmodified lines
17201720 * This function releases and reacquires fc->lock
17211721 */
17221722 static void end_requests(struct fuse_conn *fc, struct list_head *head)
1723−__releases(&fc->lock)
1724−__acquires(&fc->lock)
1723+__releases(fc->lock)
1724+__acquires(fc->lock)
17251725 {
17261726 while (!list_empty(head)) {
17271727 struct fuse_req *req;
@@ -1744,8 +1744,8 @@ __acquires(&fc->lock) · 16 unmodified lines
17441744 * locked).
17451745 */
17461746 static void end_io_requests(struct fuse_conn *fc)
1747−__releases(&fc->lock)
1748−__acquires(&fc->lock)
1747+__releases(fc->lock)
1748+__acquires(fc->lock)
17491749 {
17501750 while (!list_empty(&fc->io)) {
17511751 struct fuse_req *req =
@@ -1769,6 +1769,16 @@ __acquires(&fc->lock) · 17 unmodified lines
17691769 }
17701770 }
17711771
1772+static void end_queued_requests(struct fuse_conn *fc)
1773+__releases(fc->lock)
1774+__acquires(fc->lock)
1775+{
1776+ fc->max_background = UINT_MAX;
1777+ flush_bg_queue(fc);
1778+ end_requests(fc, &fc->pending);
1779+ end_requests(fc, &fc->processing);
1780+}
1781+
17721782 /*
17731783 * Abort all requests.
17741784 *
@@ -1795,8 +1805,7 @@ void fuse_abort_conn(struct fuse_conn *fc) · 20 unmodified lines
17951805 fc->connected = 0;
17961806 fc->blocked = 0;
17971807 end_io_requests(fc);
1798− end_requests(fc, &fc->pending);
1799− end_requests(fc, &fc->processing);
1808+ end_queued_requests(fc);
18001809 wake_up_all(&fc->waitq);
18011810 wake_up_all(&fc->blocked_waitq);
18021811 kill_fasync(&fc->fasync, SIGIO, POLL_IN);
@@ -1811,8 +1820,9 @@ int fuse_dev_release(struct inode *inode, struct file *file) · 8 unmodified lines
18111820 if (fc) {
18121821 spin_lock(&fc->lock);
18131822 fc->connected = 0;
1814− end_requests(fc, &fc->pending);
1815− end_requests(fc, &fc->processing);
1823+ fc->blocked = 0;
1824+ end_queued_requests(fc);
1825+ wake_up_all(&fc->blocked_waitq);
18161826 spin_unlock(&fc->lock);
18171827 fuse_conn_put(fc);
18181828 }
fs/fuse/file.c+4−4
@@ -1144,8 +1144,8 @@ static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req) · 1143 unmodified lines
11441144
11451145 /* Called under fc->lock, may release and reacquire it */
11461146 static void fuse_send_writepage(struct fuse_conn *fc, struct fuse_req *req)
1147−__releases(&fc->lock)
1148−__acquires(&fc->lock)
1147+__releases(fc->lock)
1148+__acquires(fc->lock)
11491149 {
11501150 struct fuse_inode *fi = get_fuse_inode(req->inode);
11511151 loff_t size = i_size_read(req->inode);
@@ -1183,8 +1183,8 @@ __acquires(&fc->lock) · 31 unmodified lines
11831183 * Called with fc->lock
11841184 */
11851185 void fuse_flush_writepages(struct inode *inode)
1186−__releases(&fc->lock)
1187−__acquires(&fc->lock)
1186+__releases(fc->lock)
1187+__acquires(fc->lock)
11881188 {
11891189 struct fuse_conn *fc = get_fuse_conn(inode);
11901190 struct fuse_inode *fi = get_fuse_inode(inode);
fs/minix/namei.c+1−1
@@ -115,7 +115,7 @@ static int minix_mkdir(struct inode * dir, struct dentry *dentry, int mode) · 114 unmodified lines
115115
116116 inode_inc_link_count(dir);
117117
118− inode = minix_new_inode(dir, mode, &err);
118+ inode = minix_new_inode(dir, S_IFDIR | mode, &err);
119119 if (!inode)
120120 goto out_dir;
121121
fs/namespace.c+22−1
@@ -1483,6 +1483,23 @@ out_unlock: · 1482 unmodified lines
14831483 return err;
14841484 }
14851485
1486+/*
1487+ * Sanity check the flags to change_mnt_propagation.
1488+ */
1489+
1490+static int flags_to_propagation_type(int flags)
1491+{
1492+ int type = flags & ~MS_REC;
1493+
1494+ /* Fail if any non-propagation flags are set */
1495+ if (type & ~(MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))
1496+ return 0;
1497+ /* Only one propagation flag should be set */
1498+ if (!is_power_of_2(type))
1499+ return 0;
1500+ return type;
1501+}
1502+
14861503 /*
14871504 * recursively change the type of the mountpoint.
14881505 */
@@ -1490,7 +1507,7 @@ static int do_change_type(struct path *path, int flag) · 1 unmodified line
14901507 {
14911508 struct vfsmount *m, *mnt = path->mnt;
14921509 int recurse = flag & MS_REC;
1493− int type = flag & ~MS_REC;
1510+ int type;
14941511 int err = 0;
14951512
14961513 if (!capable(CAP_SYS_ADMIN))
@@ -1499,6 +1516,10 @@ static int do_change_type(struct path *path, int flag) · 2 unmodified lines
14991516 if (path->dentry != path->mnt->mnt_root)
15001517 return -EINVAL;
15011518
1519+ type = flags_to_propagation_type(flag);
1520+ if (!type)
1521+ return -EINVAL;
1522+
15021523 down_write(&namespace_sem);
15031524 if (type == MS_SHARED) {
15041525 err = invent_group_ids(mnt, recurse);
fs/nfsd/nfs4state.c+16−12
@@ -440,7 +440,7 @@ test_share(struct nfs4_stateid *stp, struct nfsd4_open *open) { · 439 unmodified lines
440440
441441 static int nfs4_access_to_omode(u32 access)
442442 {
443− switch (access) {
443+ switch (access & NFS4_SHARE_ACCESS_BOTH) {
444444 case NFS4_SHARE_ACCESS_READ:
445445 return O_RDONLY;
446446 case NFS4_SHARE_ACCESS_WRITE:
@@ -2450,14 +2450,13 @@ nfsd4_truncate(struct svc_rqst *rqstp, struct svc_fh *fh, · 2003 unmodified lines
24502450 static __be32
24512451 nfs4_upgrade_open(struct svc_rqst *rqstp, struct nfs4_file *fp, struct svc_fh *cur_fh, struct nfs4_stateid *stp, struct nfsd4_open *open)
24522452 {
2453− u32 op_share_access, new_access;
2453+ u32 op_share_access = open->op_share_access & ~NFS4_SHARE_WANT_MASK;
2454+ bool new_access;
24542455 __be32 status;
24552456
2456− set_access(&new_access, stp->st_access_bmap);
2457− new_access = (~new_access) & open->op_share_access & ~NFS4_SHARE_WANT_MASK;
2458−
2457+ new_access = !test_bit(op_share_access, &stp->st_access_bmap);
24592458 if (new_access) {
2460− status = nfs4_get_vfs_file(rqstp, fp, cur_fh, new_access);
2459+ status = nfs4_get_vfs_file(rqstp, fp, cur_fh, op_share_access);
24612460 if (status)
24622461 return status;
24632462 }
@@ -2470,7 +2469,6 @@ nfs4_upgrade_open(struct svc_rqst *rqstp, struct nfs4_file *fp, struct svc_fh *c · 6 unmodified lines
24702469 return status;
24712470 }
24722471 /* remember the open */
2473− op_share_access = open->op_share_access & ~NFS4_SHARE_WANT_MASK;
24742472 __set_bit(op_share_access, &stp->st_access_bmap);
24752473 __set_bit(open->op_share_deny, &stp->st_deny_bmap);
24762474
@@ -2983,7 +2981,6 @@ nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate, · 506 unmodified lines
29832981 *filpp = find_readable_file(stp->st_file);
29842982 else
29852983 *filpp = find_writeable_file(stp->st_file);
2986− BUG_ON(!*filpp); /* assured by check_openmode */
29872984 }
29882985 }
29892986 status = nfs_ok;
@@ -3561,7 +3558,8 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, · 571 unmodified lines
35613558 struct nfs4_stateowner *open_sop = NULL;
35623559 struct nfs4_stateowner *lock_sop = NULL;
35633560 struct nfs4_stateid *lock_stp;
3564− struct file *filp;
3561+ struct nfs4_file *fp;
3562+ struct file *filp = NULL;
35653563 struct file_lock file_lock;
35663564 struct file_lock conflock;
35673565 __be32 status = 0;
@@ -3591,7 +3589,6 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, · 23 unmodified lines
35913589 * lock stateid.
35923590 */
35933591 struct nfs4_stateid *open_stp = NULL;
3594− struct nfs4_file *fp;
35953592
35963593 status = nfserr_stale_clientid;
35973594 if (!nfsd4_has_session(cstate) &&
@@ -3634,6 +3631,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, · 36 unmodified lines
36343631 if (status)
36353632 goto out;
36363633 lock_sop = lock->lk_replay_owner;
3634+ fp = lock_stp->st_file;
36373635 }
36383636 /* lock->lk_replay_owner and lock_stp have been created or found */
36393637
@@ -3648,13 +3646,19 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, · 8 unmodified lines
36483646 switch (lock->lk_type) {
36493647 case NFS4_READ_LT:
36503648 case NFS4_READW_LT:
3651− filp = find_readable_file(lock_stp->st_file);
3649+ if (find_readable_file(lock_stp->st_file)) {
3650+ nfs4_get_vfs_file(rqstp, fp, &cstate->current_fh, NFS4_SHARE_ACCESS_READ);
3651+ filp = find_readable_file(lock_stp->st_file);
3652+ }
36523653 file_lock.fl_type = F_RDLCK;
36533654 cmd = F_SETLK;
36543655 break;
36553656 case NFS4_WRITE_LT:
36563657 case NFS4_WRITEW_LT:
3657− filp = find_writeable_file(lock_stp->st_file);
3658+ if (find_writeable_file(lock_stp->st_file)) {
3659+ nfs4_get_vfs_file(rqstp, fp, &cstate->current_fh, NFS4_SHARE_ACCESS_WRITE);
3660+ filp = find_writeable_file(lock_stp->st_file);
3661+ }
36583662 file_lock.fl_type = F_WRLCK;
36593663 cmd = F_SETLK;
36603664 break;
fs/nfsd/state.h+7−7
@@ -363,23 +363,23 @@ struct nfs4_file { · 362 unmodified lines
363363 * at all? */
364364 static inline struct file *find_writeable_file(struct nfs4_file *f)
365365 {
366− if (f->fi_fds[O_RDWR])
367− return f->fi_fds[O_RDWR];
368− return f->fi_fds[O_WRONLY];
366+ if (f->fi_fds[O_WRONLY])
367+ return f->fi_fds[O_WRONLY];
368+ return f->fi_fds[O_RDWR];
369369 }
370370
371371 static inline struct file *find_readable_file(struct nfs4_file *f)
372372 {
373− if (f->fi_fds[O_RDWR])
374− return f->fi_fds[O_RDWR];
375− return f->fi_fds[O_RDONLY];
373+ if (f->fi_fds[O_RDONLY])
374+ return f->fi_fds[O_RDONLY];
375+ return f->fi_fds[O_RDWR];
376376 }
377377
378378 static inline struct file *find_any_file(struct nfs4_file *f)
379379 {
380380 if (f->fi_fds[O_RDWR])
381381 return f->fi_fds[O_RDWR];
382− else if (f->fi_fds[O_RDWR])
382+ else if (f->fi_fds[O_WRONLY])
383383 return f->fi_fds[O_WRONLY];
384384 else
385385 return f->fi_fds[O_RDONLY];
fs/nfsd/vfs.c+8−6
@@ -2033,15 +2033,17 @@ out: · 2032 unmodified lines
20332033 __be32
20342034 nfsd_statfs(struct svc_rqst *rqstp, struct svc_fh *fhp, struct kstatfs *stat, int access)
20352035 {
2036− struct path path = {
2037− .mnt = fhp->fh_export->ex_path.mnt,
2038− .dentry = fhp->fh_dentry,
2039− };
20402036 __be32 err;
20412037
20422038 err = fh_verify(rqstp, fhp, 0, NFSD_MAY_NOP | access);
2043− if (!err && vfs_statfs(&path, stat))
2044− err = nfserr_io;
2039+ if (!err) {
2040+ struct path path = {
2041+ .mnt = fhp->fh_export->ex_path.mnt,
2042+ .dentry = fhp->fh_dentry,
2043+ };
2044+ if (vfs_statfs(&path, stat))
2045+ err = nfserr_io;
2046+ }
20452047 return err;
20462048 }
20472049
fs/nilfs2/the_nilfs.c+1−0
@@ -446,6 +446,7 @@ int load_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi) · 445 unmodified lines
446446 nilfs_mdt_destroy(nilfs->ns_cpfile);
447447 nilfs_mdt_destroy(nilfs->ns_sufile);
448448 nilfs_mdt_destroy(nilfs->ns_dat);
449+ nilfs_mdt_destroy(nilfs->ns_gc_dat);
449450
450451 failed:
451452 nilfs_clear_recovery_info(&ri);
fs/notify/fanotify/fanotify.c+0−3
@@ -165,9 +165,6 @@ static bool fanotify_should_send_event(struct fsnotify_group *group, · 164 unmodified lines
165165 "mask=%x data=%p data_type=%d\n", __func__, group, to_tell,
166166 inode_mark, vfsmnt_mark, event_mask, data, data_type);
167167
168− pr_debug("%s: group=%p vfsmount_mark=%p inode_mark=%p mask=%x\n",
169− __func__, group, vfsmnt_mark, inode_mark, event_mask);
170−
171168 /* sorry, fanotify only gives a damn about files and dirs */
172169 if (!S_ISREG(to_tell->i_mode) &&
173170 !S_ISDIR(to_tell->i_mode))
fs/notify/fanotify/fanotify_user.c+28−1
@@ -195,6 +195,14 @@ static int prepare_for_access_response(struct fsnotify_group *group, · 194 unmodified lines
195195 re->fd = fd;
196196
197197 mutex_lock(&group->fanotify_data.access_mutex);
198+
199+ if (group->fanotify_data.bypass_perm) {
200+ mutex_unlock(&group->fanotify_data.access_mutex);
201+ kmem_cache_free(fanotify_response_event_cache, re);
202+ event->response = FAN_ALLOW;
203+ return 0;
204+ }
205+
198206 list_add_tail(&re->list, &group->fanotify_data.access_list);
199207 mutex_unlock(&group->fanotify_data.access_mutex);
200208
@@ -364,9 +372,28 @@ static ssize_t fanotify_write(struct file *file, const char __user *buf, size_t · 163 unmodified lines
364372 static int fanotify_release(struct inode *ignored, struct file *file)
365373 {
366374 struct fsnotify_group *group = file->private_data;
375+ struct fanotify_response_event *re, *lre;
367376
368377 pr_debug("%s: file=%p group=%p\n", __func__, file, group);
369378
379+#ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
380+ mutex_lock(&group->fanotify_data.access_mutex);
381+
382+ group->fanotify_data.bypass_perm = true;
383+
384+ list_for_each_entry_safe(re, lre, &group->fanotify_data.access_list, list) {
385+ pr_debug("%s: found group=%p re=%p event=%p\n", __func__, group,
386+ re, re->event);
387+
388+ list_del_init(&re->list);
389+ re->event->response = FAN_ALLOW;
390+
391+ kmem_cache_free(fanotify_response_event_cache, re);
392+ }
393+ mutex_unlock(&group->fanotify_data.access_mutex);
394+
395+ wake_up(&group->fanotify_data.access_waitq);
396+#endif
370397 /* matches the fanotify_init->fsnotify_alloc_group */
371398 fsnotify_put_group(group);
372399
@@ -614,7 +641,7 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags) · 241 unmodified lines
614641 __func__, flags, event_f_flags);
615642
616643 if (!capable(CAP_SYS_ADMIN))
617− return -EACCES;
644+ return -EPERM;
618645
619646 if (flags & ~FAN_ALL_INIT_FLAGS)
620647 return -EINVAL;
fs/notify/fsnotify.c+36−32
@@ -148,13 +148,14 @@ static int send_to_group(struct inode *to_tell, struct vfsmount *mnt, · 147 unmodified lines
148148 const unsigned char *file_name,
149149 struct fsnotify_event **event)
150150 {
151− struct fsnotify_group *group = inode_mark->group;
152− __u32 inode_test_mask = (mask & ~FS_EVENT_ON_CHILD);
153− __u32 vfsmount_test_mask = (mask & ~FS_EVENT_ON_CHILD);
151+ struct fsnotify_group *group = NULL;
152+ __u32 inode_test_mask = 0;
153+ __u32 vfsmount_test_mask = 0;
154154
155− pr_debug("%s: group=%p to_tell=%p mnt=%p mark=%p mask=%x data=%p"
156− " data_is=%d cookie=%d event=%p\n", __func__, group, to_tell,
157− mnt, inode_mark, mask, data, data_is, cookie, *event);
155+ if (unlikely(!inode_mark && !vfsmount_mark)) {
156+ BUG();
157+ return 0;
158+ }
158159
159160 /* clear ignored on inode modification */
160161 if (mask & FS_MODIFY) {
@@ -168,18 +169,29 @@ static int send_to_group(struct inode *to_tell, struct vfsmount *mnt, · 7 unmodified lines
168169
169170 /* does the inode mark tell us to do something? */
170171 if (inode_mark) {
172+ group = inode_mark->group;
173+ inode_test_mask = (mask & ~FS_EVENT_ON_CHILD);
171174 inode_test_mask &= inode_mark->mask;
172175 inode_test_mask &= ~inode_mark->ignored_mask;
173176 }
174177
175178 /* does the vfsmount_mark tell us to do something? */
176179 if (vfsmount_mark) {
180+ vfsmount_test_mask = (mask & ~FS_EVENT_ON_CHILD);
181+ group = vfsmount_mark->group;
177182 vfsmount_test_mask &= vfsmount_mark->mask;
178183 vfsmount_test_mask &= ~vfsmount_mark->ignored_mask;
179184 if (inode_mark)
180185 vfsmount_test_mask &= ~inode_mark->ignored_mask;
181186 }
182187
188+ pr_debug("%s: group=%p to_tell=%p mnt=%p mask=%x inode_mark=%p"
189+ " inode_test_mask=%x vfsmount_mark=%p vfsmount_test_mask=%x"
190+ " data=%p data_is=%d cookie=%d event=%p\n",
191+ __func__, group, to_tell, mnt, mask, inode_mark,
192+ inode_test_mask, vfsmount_mark, vfsmount_test_mask, data,
193+ data_is, cookie, *event);
194+
183195 if (!inode_test_mask && !vfsmount_test_mask)
184196 return 0;
185197
@@ -207,13 +219,12 @@ static int send_to_group(struct inode *to_tell, struct vfsmount *mnt, · 21 unmodified lines
207219 int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,
208220 const unsigned char *file_name, u32 cookie)
209221 {
210− struct hlist_node *inode_node, *vfsmount_node;
222+ struct hlist_node *inode_node = NULL, *vfsmount_node = NULL;
211223 struct fsnotify_mark *inode_mark = NULL, *vfsmount_mark = NULL;
212224 struct fsnotify_group *inode_group, *vfsmount_group;
213225 struct fsnotify_event *event = NULL;
214226 struct vfsmount *mnt;
215227 int idx, ret = 0;
216− bool used_inode = false, used_vfsmount = false;
217228 /* global tests shouldn't care about events on child only the specific event */
218229 __u32 test_mask = (mask & ~FS_EVENT_ON_CHILD);
219230
@@ -238,57 +249,50 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, · 18 unmodified lines
238249 (test_mask & to_tell->i_fsnotify_mask))
239250 inode_node = srcu_dereference(to_tell->i_fsnotify_marks.first,
240251 &fsnotify_mark_srcu);
241− else
242− inode_node = NULL;
243252
244− if (mnt) {
245− if ((mask & FS_MODIFY) ||
246− (test_mask & mnt->mnt_fsnotify_mask))
247− vfsmount_node = srcu_dereference(mnt->mnt_fsnotify_marks.first,
248− &fsnotify_mark_srcu);
249− else
250− vfsmount_node = NULL;
251− } else {
252− mnt = NULL;
253− vfsmount_node = NULL;
253+ if (mnt && ((mask & FS_MODIFY) ||
254+ (test_mask & mnt->mnt_fsnotify_mask))) {
255+ vfsmount_node = srcu_dereference(mnt->mnt_fsnotify_marks.first,
256+ &fsnotify_mark_srcu);
257+ inode_node = srcu_dereference(to_tell->i_fsnotify_marks.first,
258+ &fsnotify_mark_srcu);
254259 }
255260
256261 while (inode_node || vfsmount_node) {
262+ inode_group = vfsmount_group = NULL;
263+
257264 if (inode_node) {
258265 inode_mark = hlist_entry(srcu_dereference(inode_node, &fsnotify_mark_srcu),
259266 struct fsnotify_mark, i.i_list);
260267 inode_group = inode_mark->group;
261− } else
262− inode_group = (void *)-1;
268+ }
263269
264270 if (vfsmount_node) {
265271 vfsmount_mark = hlist_entry(srcu_dereference(vfsmount_node, &fsnotify_mark_srcu),
266272 struct fsnotify_mark, m.m_list);
267273 vfsmount_group = vfsmount_mark->group;
268− } else
269− vfsmount_group = (void *)-1;
274+ }
270275
271− if (inode_group < vfsmount_group) {
276+ if (inode_group > vfsmount_group) {
272277 /* handle inode */
273278 send_to_group(to_tell, NULL, inode_mark, NULL, mask, data,
274279 data_is, cookie, file_name, &event);
275− used_inode = true;
276− } else if (vfsmount_group < inode_group) {
280+ /* we didn't use the vfsmount_mark */
281+ vfsmount_group = NULL;
282+ } else if (vfsmount_group > inode_group) {
277283 send_to_group(to_tell, mnt, NULL, vfsmount_mark, mask, data,
278284 data_is, cookie, file_name, &event);
279− used_vfsmount = true;
285+ inode_group = NULL;
280286 } else {
281287 send_to_group(to_tell, mnt, inode_mark, vfsmount_mark,
282288 mask, data, data_is, cookie, file_name,
283289 &event);
284− used_vfsmount = true;
285− used_inode = true;
286290 }
287291
288− if (used_inode)
292+ if (inode_group)
289293 inode_node = srcu_dereference(inode_node->next,
290294 &fsnotify_mark_srcu);
291− if (used_vfsmount)
295+ if (vfsmount_group)
292296 vfsmount_node = srcu_dereference(vfsmount_node->next,
293297 &fsnotify_mark_srcu);
294298 }
fs/ocfs2/alloc.c+1−1
@@ -6672,7 +6672,7 @@ int ocfs2_grab_pages(struct inode *inode, loff_t start, loff_t end, · 6671 unmodified lines
66726672 last_page_bytes = PAGE_ALIGN(end);
66736673 index = start >> PAGE_CACHE_SHIFT;
66746674 do {
6675− pages[numpages] = grab_cache_page(mapping, index);
6675+ pages[numpages] = find_or_create_page(mapping, index, GFP_NOFS);
66766676 if (!pages[numpages]) {
66776677 ret = -ENOMEM;
66786678 mlog_errno(ret);
fs/ocfs2/blockcheck.c+2−2
@@ -439,7 +439,7 @@ int ocfs2_block_check_validate(void *data, size_t blocksize, · 438 unmodified lines
439439
440440 ocfs2_blockcheck_inc_failure(stats);
441441 mlog(ML_ERROR,
442− "CRC32 failed: stored: %u, computed %u. Applying ECC.\n",
442+ "CRC32 failed: stored: 0x%x, computed 0x%x. Applying ECC.\n",
443443 (unsigned int)check.bc_crc32e, (unsigned int)crc);
444444
445445 /* Ok, try ECC fixups */
@@ -453,7 +453,7 @@ int ocfs2_block_check_validate(void *data, size_t blocksize, · 7 unmodified lines
453453 goto out;
454454 }
455455
456− mlog(ML_ERROR, "Fixed CRC32 failed: stored: %u, computed %u\n",
456+ mlog(ML_ERROR, "Fixed CRC32 failed: stored: 0x%x, computed 0x%x\n",
457457 (unsigned int)check.bc_crc32e, (unsigned int)crc);
458458
459459 rc = -EIO;
fs/ocfs2/file.c+12−3
@@ -36,6 +36,7 @@ · 35 unmodified lines
3636 #include <linux/writeback.h>
3737 #include <linux/falloc.h>
3838 #include <linux/quotaops.h>
39+#include <linux/blkdev.h>
3940
4041 #define MLOG_MASK_PREFIX ML_INODE
4142 #include <cluster/masklog.h>
@@ -190,8 +191,16 @@ static int ocfs2_sync_file(struct file *file, int datasync) · 148 unmodified lines
190191 if (err)
191192 goto bail;
192193
193− if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
194+ if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) {
195+ /*
196+ * We still have to flush drive's caches to get data to the
197+ * platter
198+ */
199+ if (osb->s_mount_opt & OCFS2_MOUNT_BARRIER)
200+ blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL,
201+ NULL, BLKDEV_IFL_WAIT);
194202 goto bail;
203+ }
195204
196205 journal = osb->journal->j_journal;
197206 err = jbd2_journal_force_commit(journal);
@@ -774,7 +783,7 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, · 576 unmodified lines
774783 BUG_ON(abs_to > (((u64)index + 1) << PAGE_CACHE_SHIFT));
775784 BUG_ON(abs_from & (inode->i_blkbits - 1));
776785
777− page = grab_cache_page(mapping, index);
786+ page = find_or_create_page(mapping, index, GFP_NOFS);
778787 if (!page) {
779788 ret = -ENOMEM;
780789 mlog_errno(ret);
@@ -2329,7 +2338,7 @@ out_dio: · 1548 unmodified lines
23292338 BUG_ON(ret == -EIOCBQUEUED && !(file->f_flags & O_DIRECT));
23302339
23312340 if (((file->f_flags & O_DSYNC) && !direct_io) || IS_SYNC(inode) ||
2332− ((file->f_flags & O_DIRECT) && has_refcount)) {
2341+ ((file->f_flags & O_DIRECT) && !direct_io)) {
23332342 ret = filemap_fdatawrite_range(file->f_mapping, pos,
23342343 pos + count - 1);
23352344 if (ret < 0)
fs/ocfs2/inode.c+5−1
@@ -488,7 +488,11 @@ static int ocfs2_read_locked_inode(struct inode *inode, · 487 unmodified lines
488488 OCFS2_BH_IGNORE_CACHE);
489489 } else {
490490 status = ocfs2_read_blocks_sync(osb, args->fi_blkno, 1, &bh);
491− if (!status)
491+ /*
492+ * If buffer is in jbd, then its checksum may not have been
493+ * computed as yet.
494+ */
495+ if (!status && !buffer_jbd(bh))
492496 status = ocfs2_validate_inode_block(osb->sb, bh);
493497 }
494498 if (status < 0) {
fs/ocfs2/mmap.c+5−3
@@ -74,9 +74,11 @@ static int __ocfs2_page_mkwrite(struct inode *inode, struct buffer_head *di_bh, · 73 unmodified lines
7474 /*
7575 * Another node might have truncated while we were waiting on
7676 * cluster locks.
77+ * We don't check size == 0 before the shift. This is borrowed
78+ * from do_generic_file_read.
7779 */
78− last_index = size >> PAGE_CACHE_SHIFT;
79− if (page->index > last_index) {
80+ last_index = (size - 1) >> PAGE_CACHE_SHIFT;
81+ if (unlikely(!size || page->index > last_index)) {
8082 ret = -EINVAL;
8183 goto out;
8284 }
@@ -107,7 +109,7 @@ static int __ocfs2_page_mkwrite(struct inode *inode, struct buffer_head *di_bh, · 24 unmodified lines
107109 * because the "write" would invalidate their data.
108110 */
109111 if (page->index == last_index)
110− len = size & ~PAGE_CACHE_MASK;
112+ len = ((size - 1) & ~PAGE_CACHE_MASK) + 1;
111113
112114 ret = ocfs2_write_begin_nolock(mapping, pos, len, 0, &locked_page,
113115 &fsdata, di_bh, page);
fs/ocfs2/namei.c+232−70
@@ -472,32 +472,23 @@ leave: · 471 unmodified lines
472472 return status;
473473 }
474474
475−static int ocfs2_mknod_locked(struct ocfs2_super *osb,
476− struct inode *dir,
477− struct inode *inode,
478− dev_t dev,
479− struct buffer_head **new_fe_bh,
480− struct buffer_head *parent_fe_bh,
481− handle_t *handle,
482− struct ocfs2_alloc_context *inode_ac)
475+static int __ocfs2_mknod_locked(struct inode *dir,
476+ struct inode *inode,
477+ dev_t dev,
478+ struct buffer_head **new_fe_bh,
479+ struct buffer_head *parent_fe_bh,
480+ handle_t *handle,
481+ struct ocfs2_alloc_context *inode_ac,
482+ u64 fe_blkno, u64 suballoc_loc, u16 suballoc_bit)
483483 {
484484 int status = 0;
485+ struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
485486 struct ocfs2_dinode *fe = NULL;
486487 struct ocfs2_extent_list *fel;
487− u64 suballoc_loc, fe_blkno = 0;
488− u16 suballoc_bit;
489488 u16 feat;
490489
491490 *new_fe_bh = NULL;
492491
493− status = ocfs2_claim_new_inode(handle, dir, parent_fe_bh,
494− inode_ac, &suballoc_loc,
495− &suballoc_bit, &fe_blkno);
496− if (status < 0) {
497− mlog_errno(status);
498− goto leave;
499− }
500−
501492 /* populate as many fields early on as possible - many of
502493 * these are used by the support functions here and in
503494 * callers. */
@@ -591,6 +582,34 @@ leave: · 87 unmodified lines
591582 return status;
592583 }
593584
585+static int ocfs2_mknod_locked(struct ocfs2_super *osb,
586+ struct inode *dir,
587+ struct inode *inode,
588+ dev_t dev,
589+ struct buffer_head **new_fe_bh,
590+ struct buffer_head *parent_fe_bh,
591+ handle_t *handle,
592+ struct ocfs2_alloc_context *inode_ac)
593+{
594+ int status = 0;
595+ u64 suballoc_loc, fe_blkno = 0;
596+ u16 suballoc_bit;
597+
598+ *new_fe_bh = NULL;
599+
600+ status = ocfs2_claim_new_inode(handle, dir, parent_fe_bh,
601+ inode_ac, &suballoc_loc,
602+ &suballoc_bit, &fe_blkno);
603+ if (status < 0) {
604+ mlog_errno(status);
605+ return status;
606+ }
607+
608+ return __ocfs2_mknod_locked(dir, inode, dev, new_fe_bh,
609+ parent_fe_bh, handle, inode_ac,
610+ fe_blkno, suballoc_loc, suballoc_bit);
611+}
612+
594613 static int ocfs2_mkdir(struct inode *dir,
595614 struct dentry *dentry,
596615 int mode)
@@ -1852,61 +1871,117 @@ bail: · 1255 unmodified lines
18521871 return status;
18531872 }
18541873
1855−static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb,
1856− struct inode **ret_orphan_dir,
1857− u64 blkno,
1858− char *name,
1859− struct ocfs2_dir_lookup_result *lookup)
1874+static int ocfs2_lookup_lock_orphan_dir(struct ocfs2_super *osb,
1875+ struct inode **ret_orphan_dir,
1876+ struct buffer_head **ret_orphan_dir_bh)
18601877 {
18611878 struct inode *orphan_dir_inode;
18621879 struct buffer_head *orphan_dir_bh = NULL;
1863− int status = 0;
1864−
1865− status = ocfs2_blkno_stringify(blkno, name);
1866− if (status < 0) {
1867− mlog_errno(status);
1868− return status;
1869− }
1880+ int ret = 0;
18701881
18711882 orphan_dir_inode = ocfs2_get_system_file_inode(osb,
18721883 ORPHAN_DIR_SYSTEM_INODE,
18731884 osb->slot_num);
18741885 if (!orphan_dir_inode) {
1875− status = -ENOENT;
1876− mlog_errno(status);
1877− return status;
1886+ ret = -ENOENT;
1887+ mlog_errno(ret);
1888+ return ret;
18781889 }
18791890
18801891 mutex_lock(&orphan_dir_inode->i_mutex);
18811892
1882− status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
1883− if (status < 0) {
1884− mlog_errno(status);
1885− goto leave;
1893+ ret = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
1894+ if (ret < 0) {
1895+ mutex_unlock(&orphan_dir_inode->i_mutex);
1896+ iput(orphan_dir_inode);
1897+
1898+ mlog_errno(ret);
1899+ return ret;
18861900 }
18871901
1888− status = ocfs2_prepare_dir_for_insert(osb, orphan_dir_inode,
1889− orphan_dir_bh, name,
1890− OCFS2_ORPHAN_NAMELEN, lookup);
1891− if (status < 0) {
1892− ocfs2_inode_unlock(orphan_dir_inode, 1);
1902+ *ret_orphan_dir = orphan_dir_inode;
1903+ *ret_orphan_dir_bh = orphan_dir_bh;
18931904
1894− mlog_errno(status);
1895− goto leave;
1905+ return 0;
1906+}
1907+
1908+static int __ocfs2_prepare_orphan_dir(struct inode *orphan_dir_inode,
1909+ struct buffer_head *orphan_dir_bh,
1910+ u64 blkno,
1911+ char *name,
1912+ struct ocfs2_dir_lookup_result *lookup)
1913+{
1914+ int ret;
1915+ struct ocfs2_super *osb = OCFS2_SB(orphan_dir_inode->i_sb);
1916+
1917+ ret = ocfs2_blkno_stringify(blkno, name);
1918+ if (ret < 0) {
1919+ mlog_errno(ret);
1920+ return ret;
1921+ }
1922+
1923+ ret = ocfs2_prepare_dir_for_insert(osb, orphan_dir_inode,
1924+ orphan_dir_bh, name,
1925+ OCFS2_ORPHAN_NAMELEN, lookup);
1926+ if (ret < 0) {
1927+ mlog_errno(ret);
1928+ return ret;
1929+ }
1930+
1931+ return 0;
1932+}
1933+
1934+/**
1935+ * ocfs2_prepare_orphan_dir() - Prepare an orphan directory for
1936+ * insertion of an orphan.
1937+ * @osb: ocfs2 file system
1938+ * @ret_orphan_dir: Orphan dir inode - returned locked!
1939+ * @blkno: Actual block number of the inode to be inserted into orphan dir.
1940+ * @lookup: dir lookup result, to be passed back into functions like
1941+ * ocfs2_orphan_add
1942+ *
1943+ * Returns zero on success and the ret_orphan_dir, name and lookup
1944+ * fields will be populated.
1945+ *
1946+ * Returns non-zero on failure.
1947+ */
1948+static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb,
1949+ struct inode **ret_orphan_dir,
1950+ u64 blkno,
1951+ char *name,
1952+ struct ocfs2_dir_lookup_result *lookup)
1953+{
1954+ struct inode *orphan_dir_inode = NULL;
1955+ struct buffer_head *orphan_dir_bh = NULL;
1956+ int ret = 0;
1957+
1958+ ret = ocfs2_lookup_lock_orphan_dir(osb, &orphan_dir_inode,
1959+ &orphan_dir_bh);
1960+ if (ret < 0) {
1961+ mlog_errno(ret);
1962+ return ret;
1963+ }
1964+
1965+ ret = __ocfs2_prepare_orphan_dir(orphan_dir_inode, orphan_dir_bh,
1966+ blkno, name, lookup);
1967+ if (ret < 0) {
1968+ mlog_errno(ret);
1969+ goto out;
18961970 }
18971971
18981972 *ret_orphan_dir = orphan_dir_inode;
18991973
1900−leave:
1901− if (status) {
1974+out:
1975+ brelse(orphan_dir_bh);
1976+
1977+ if (ret) {
1978+ ocfs2_inode_unlock(orphan_dir_inode, 1);
19021979 mutex_unlock(&orphan_dir_inode->i_mutex);
19031980 iput(orphan_dir_inode);
19041981 }
19051982
1906− brelse(orphan_dir_bh);
1907−
1908− mlog_exit(status);
1909− return status;
1983+ mlog_exit(ret);
1984+ return ret;
19101985 }
19111986
19121987 static int ocfs2_orphan_add(struct ocfs2_super *osb,
@@ -2053,6 +2128,99 @@ leave: · 140 unmodified lines
20532128 return status;
20542129 }
20552130
2131+/**
2132+ * ocfs2_prep_new_orphaned_file() - Prepare the orphan dir to recieve a newly
2133+ * allocated file. This is different from the typical 'add to orphan dir'
2134+ * operation in that the inode does not yet exist. This is a problem because
2135+ * the orphan dir stringifies the inode block number to come up with it's
2136+ * dirent. Obviously if the inode does not yet exist we have a chicken and egg
2137+ * problem. This function works around it by calling deeper into the orphan
2138+ * and suballoc code than other callers. Use this only by necessity.
2139+ * @dir: The directory which this inode will ultimately wind up under - not the
2140+ * orphan dir!
2141+ * @dir_bh: buffer_head the @dir inode block
2142+ * @orphan_name: string of length (CFS2_ORPHAN_NAMELEN + 1). Will be filled
2143+ * with the string to be used for orphan dirent. Pass back to the orphan dir
2144+ * code.
2145+ * @ret_orphan_dir: orphan dir inode returned to be passed back into orphan
2146+ * dir code.
2147+ * @ret_di_blkno: block number where the new inode will be allocated.
2148+ * @orphan_insert: Dir insert context to be passed back into orphan dir code.
2149+ * @ret_inode_ac: Inode alloc context to be passed back to the allocator.
2150+ *
2151+ * Returns zero on success and the ret_orphan_dir, name and lookup
2152+ * fields will be populated.
2153+ *
2154+ * Returns non-zero on failure.
2155+ */
2156+static int ocfs2_prep_new_orphaned_file(struct inode *dir,
2157+ struct buffer_head *dir_bh,
2158+ char *orphan_name,
2159+ struct inode **ret_orphan_dir,
2160+ u64 *ret_di_blkno,
2161+ struct ocfs2_dir_lookup_result *orphan_insert,
2162+ struct ocfs2_alloc_context **ret_inode_ac)
2163+{
2164+ int ret;
2165+ u64 di_blkno;
2166+ struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
2167+ struct inode *orphan_dir = NULL;
2168+ struct buffer_head *orphan_dir_bh = NULL;
2169+ struct ocfs2_alloc_context *inode_ac = NULL;
2170+
2171+ ret = ocfs2_lookup_lock_orphan_dir(osb, &orphan_dir, &orphan_dir_bh);
2172+ if (ret < 0) {
2173+ mlog_errno(ret);
2174+ return ret;
2175+ }
2176+
2177+ /* reserve an inode spot */
2178+ ret = ocfs2_reserve_new_inode(osb, &inode_ac);
2179+ if (ret < 0) {
2180+ if (ret != -ENOSPC)
2181+ mlog_errno(ret);
2182+ goto out;
2183+ }
2184+
2185+ ret = ocfs2_find_new_inode_loc(dir, dir_bh, inode_ac,
2186+ &di_blkno);
2187+ if (ret) {
2188+ mlog_errno(ret);
2189+ goto out;
2190+ }
2191+
2192+ ret = __ocfs2_prepare_orphan_dir(orphan_dir, orphan_dir_bh,
2193+ di_blkno, orphan_name, orphan_insert);
2194+ if (ret < 0) {
2195+ mlog_errno(ret);
2196+ goto out;
2197+ }
2198+
2199+out:
2200+ if (ret == 0) {
2201+ *ret_orphan_dir = orphan_dir;
2202+ *ret_di_blkno = di_blkno;
2203+ *ret_inode_ac = inode_ac;
2204+ /*
2205+ * orphan_name and orphan_insert are already up to
2206+ * date via prepare_orphan_dir
2207+ */
2208+ } else {
2209+ /* Unroll reserve_new_inode* */
2210+ if (inode_ac)
2211+ ocfs2_free_alloc_context(inode_ac);
2212+
2213+ /* Unroll orphan dir locking */
2214+ mutex_unlock(&orphan_dir->i_mutex);
2215+ ocfs2_inode_unlock(orphan_dir, 1);
2216+ iput(orphan_dir);
2217+ }
2218+
2219+ brelse(orphan_dir_bh);
2220+
2221+ return 0;
2222+}
2223+
20562224 int ocfs2_create_inode_in_orphan(struct inode *dir,
20572225 int mode,
20582226 struct inode **new_inode)
@@ -2068,6 +2236,8 @@ int ocfs2_create_inode_in_orphan(struct inode *dir, · 9 unmodified lines
20682236 struct buffer_head *new_di_bh = NULL;
20692237 struct ocfs2_alloc_context *inode_ac = NULL;
20702238 struct ocfs2_dir_lookup_result orphan_insert = { NULL, };
2239+ u64 uninitialized_var(di_blkno), suballoc_loc;
2240+ u16 suballoc_bit;
20712241
20722242 status = ocfs2_inode_lock(dir, &parent_di_bh, 1);
20732243 if (status < 0) {
@@ -2076,20 +2246,9 @@ int ocfs2_create_inode_in_orphan(struct inode *dir, · 2 unmodified lines
20762246 return status;
20772247 }
20782248
2079− /*
2080− * We give the orphan dir the root blkno to fake an orphan name,
2081− * and allocate enough space for our insertion.
2082− */
2083− status = ocfs2_prepare_orphan_dir(osb, &orphan_dir,
2084− osb->root_blkno,
2085− orphan_name, &orphan_insert);
2086− if (status < 0) {
2087− mlog_errno(status);
2088− goto leave;
2089− }
2090−
2091− /* reserve an inode spot */
2092− status = ocfs2_reserve_new_inode(osb, &inode_ac);
2249+ status = ocfs2_prep_new_orphaned_file(dir, parent_di_bh,
2250+ orphan_name, &orphan_dir,
2251+ &di_blkno, &orphan_insert, &inode_ac);
20932252 if (status < 0) {
20942253 if (status != -ENOSPC)
20952254 mlog_errno(status);
@@ -2116,17 +2275,20 @@ int ocfs2_create_inode_in_orphan(struct inode *dir, · 20 unmodified lines
21162275 goto leave;
21172276 did_quota_inode = 1;
21182277
2119− inode->i_nlink = 0;
2120− /* do the real work now. */
2121− status = ocfs2_mknod_locked(osb, dir, inode,
2122− 0, &new_di_bh, parent_di_bh, handle,
2123− inode_ac);
2278+ status = ocfs2_claim_new_inode_at_loc(handle, dir, inode_ac,
2279+ &suballoc_loc,
2280+ &suballoc_bit, di_blkno);
21242281 if (status < 0) {
21252282 mlog_errno(status);
21262283 goto leave;
21272284 }
21282285
2129− status = ocfs2_blkno_stringify(OCFS2_I(inode)->ip_blkno, orphan_name);
2286+ inode->i_nlink = 0;
2287+ /* do the real work now. */
2288+ status = __ocfs2_mknod_locked(dir, inode,
2289+ 0, &new_di_bh, parent_di_bh, handle,
2290+ inode_ac, di_blkno, suballoc_loc,
2291+ suballoc_bit);
21302292 if (status < 0) {
21312293 mlog_errno(status);
21322294 goto leave;
fs/ocfs2/refcounttree.c+3−2
@@ -2960,7 +2960,7 @@ static int ocfs2_duplicate_clusters_by_page(handle_t *handle, · 2959 unmodified lines
29602960 if (map_end & (PAGE_CACHE_SIZE - 1))
29612961 to = map_end & (PAGE_CACHE_SIZE - 1);
29622962
2963− page = grab_cache_page(mapping, page_index);
2963+ page = find_or_create_page(mapping, page_index, GFP_NOFS);
29642964
29652965 /*
29662966 * In case PAGE_CACHE_SIZE <= CLUSTER_SIZE, This page
@@ -3179,7 +3179,8 @@ static int ocfs2_cow_sync_writeback(struct super_block *sb, · 212 unmodified lines
31793179 if (map_end > end)
31803180 map_end = end;
31813181
3182− page = grab_cache_page(context->inode->i_mapping, page_index);
3182+ page = find_or_create_page(context->inode->i_mapping,
3183+ page_index, GFP_NOFS);
31833184 BUG_ON(!page);
31843185
31853186 wait_on_page_writeback(page);
fs/ocfs2/suballoc.c+194−25
@@ -57,11 +57,28 @@ struct ocfs2_suballoc_result { · 56 unmodified lines
5757 u64 sr_bg_blkno; /* The bg we allocated from. Set
5858 to 0 when a block group is
5959 contiguous. */
60+ u64 sr_bg_stable_blkno; /*
61+ * Doesn't change, always
62+ * set to target block
63+ * group descriptor
64+ * block.
65+ */
6066 u64 sr_blkno; /* The first allocated block */
6167 unsigned int sr_bit_offset; /* The bit in the bg */
6268 unsigned int sr_bits; /* How many bits we claimed */
6369 };
6470
71+static u64 ocfs2_group_from_res(struct ocfs2_suballoc_result *res)
72+{
73+ if (res->sr_blkno == 0)
74+ return 0;
75+
76+ if (res->sr_bg_blkno)
77+ return res->sr_bg_blkno;
78+
79+ return ocfs2_which_suballoc_group(res->sr_blkno, res->sr_bit_offset);
80+}
81+
6582 static inline void ocfs2_debug_bg(struct ocfs2_group_desc *bg);
6683 static inline void ocfs2_debug_suballoc_inode(struct ocfs2_dinode *fe);
6784 static inline u16 ocfs2_find_victim_chain(struct ocfs2_chain_list *cl);
@@ -138,6 +155,10 @@ void ocfs2_free_ac_resource(struct ocfs2_alloc_context *ac) · 70 unmodified lines
138155 brelse(ac->ac_bh);
139156 ac->ac_bh = NULL;
140157 ac->ac_resv = NULL;
158+ if (ac->ac_find_loc_priv) {
159+ kfree(ac->ac_find_loc_priv);
160+ ac->ac_find_loc_priv = NULL;
161+ }
141162 }
142163
143164 void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac)
@@ -1678,6 +1699,15 @@ static int ocfs2_search_one_group(struct ocfs2_alloc_context *ac, · 1534 unmodified lines
16781699 if (!ret)
16791700 ocfs2_bg_discontig_fix_result(ac, gd, res);
16801701
1702+ /*
1703+ * sr_bg_blkno might have been changed by
1704+ * ocfs2_bg_discontig_fix_result
1705+ */
1706+ res->sr_bg_stable_blkno = group_bh->b_blocknr;
1707+
1708+ if (ac->ac_find_loc_only)
1709+ goto out_loc_only;
1710+
16811711 ret = ocfs2_alloc_dinode_update_counts(alloc_inode, handle, ac->ac_bh,
16821712 res->sr_bits,
16831713 le16_to_cpu(gd->bg_chain));
@@ -1691,6 +1721,7 @@ static int ocfs2_search_one_group(struct ocfs2_alloc_context *ac, · 7 unmodified lines
16911721 if (ret < 0)
16921722 mlog_errno(ret);
16931723
1724+out_loc_only:
16941725 *bits_left = le16_to_cpu(gd->bg_free_bits_count);
16951726
16961727 out:
@@ -1708,7 +1739,6 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, · 11 unmodified lines
17081739 {
17091740 int status;
17101741 u16 chain;
1711− u32 tmp_used;
17121742 u64 next_group;
17131743 struct inode *alloc_inode = ac->ac_inode;
17141744 struct buffer_head *group_bh = NULL;
@@ -1770,6 +1800,11 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, · 55 unmodified lines
17701800 if (!status)
17711801 ocfs2_bg_discontig_fix_result(ac, bg, res);
17721802
1803+ /*
1804+ * sr_bg_blkno might have been changed by
1805+ * ocfs2_bg_discontig_fix_result
1806+ */
1807+ res->sr_bg_stable_blkno = group_bh->b_blocknr;
17731808
17741809 /*
17751810 * Keep track of previous block descriptor read. When
@@ -1796,22 +1831,17 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, · 20 unmodified lines
17961831 }
17971832 }
17981833
1799− /* Ok, claim our bits now: set the info on dinode, chainlist
1800− * and then the group */
1801− status = ocfs2_journal_access_di(handle,
1802− INODE_CACHE(alloc_inode),
1803− ac->ac_bh,
1804− OCFS2_JOURNAL_ACCESS_WRITE);
1805− if (status < 0) {
1834+ if (ac->ac_find_loc_only)
1835+ goto out_loc_only;
1836+
1837+ status = ocfs2_alloc_dinode_update_counts(alloc_inode, handle,
1838+ ac->ac_bh, res->sr_bits,
1839+ chain);
1840+ if (status) {
18061841 mlog_errno(status);
18071842 goto bail;
18081843 }
18091844
1810− tmp_used = le32_to_cpu(fe->id1.bitmap1.i_used);
1811− fe->id1.bitmap1.i_used = cpu_to_le32(res->sr_bits + tmp_used);
1812− le32_add_cpu(&cl->cl_recs[chain].c_free, -res->sr_bits);
1813− ocfs2_journal_dirty(handle, ac->ac_bh);
1814−
18151845 status = ocfs2_block_group_set_bits(handle,
18161846 alloc_inode,
18171847 bg,
@@ -1826,6 +1856,7 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, · 8 unmodified lines
18261856 mlog(0, "Allocated %u bits from suballocator %llu\n", res->sr_bits,
18271857 (unsigned long long)le64_to_cpu(fe->i_blkno));
18281858
1859+out_loc_only:
18291860 *bits_left = le16_to_cpu(bg->bg_free_bits_count);
18301861 bail:
18311862 brelse(group_bh);
@@ -1845,6 +1876,7 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, · 13 unmodified lines
18451876 int status;
18461877 u16 victim, i;
18471878 u16 bits_left = 0;
1879+ u64 hint = ac->ac_last_group;
18481880 struct ocfs2_chain_list *cl;
18491881 struct ocfs2_dinode *fe;
18501882
@@ -1872,7 +1904,7 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, · 21 unmodified lines
18721904 goto bail;
18731905 }
18741906
1875− res->sr_bg_blkno = ac->ac_last_group;
1907+ res->sr_bg_blkno = hint;
18761908 if (res->sr_bg_blkno) {
18771909 /* Attempt to short-circuit the usual search mechanism
18781910 * by jumping straight to the most recently used
@@ -1896,8 +1928,10 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, · 17 unmodified lines
18961928
18971929 status = ocfs2_search_chain(ac, handle, bits_wanted, min_bits,
18981930 res, &bits_left);
1899− if (!status)
1931+ if (!status) {
1932+ hint = ocfs2_group_from_res(res);
19001933 goto set_hint;
1934+ }
19011935 if (status < 0 && status != -ENOSPC) {
19021936 mlog_errno(status);
19031937 goto bail;
@@ -1920,8 +1954,10 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, · 16 unmodified lines
19201954 ac->ac_chain = i;
19211955 status = ocfs2_search_chain(ac, handle, bits_wanted, min_bits,
19221956 res, &bits_left);
1923− if (!status)
1957+ if (!status) {
1958+ hint = ocfs2_group_from_res(res);
19241959 break;
1960+ }
19251961 if (status < 0 && status != -ENOSPC) {
19261962 mlog_errno(status);
19271963 goto bail;
@@ -1936,7 +1972,7 @@ set_hint: · 8 unmodified lines
19361972 if (bits_left < min_bits)
19371973 ac->ac_last_group = 0;
19381974 else
1939− ac->ac_last_group = res->sr_bg_blkno;
1975+ ac->ac_last_group = hint;
19401976 }
19411977
19421978 bail:
@@ -2016,6 +2052,136 @@ static inline void ocfs2_save_inode_ac_group(struct inode *dir, · 73 unmodified lines
20162052 OCFS2_I(dir)->ip_last_used_slot = ac->ac_alloc_slot;
20172053 }
20182054
2055+int ocfs2_find_new_inode_loc(struct inode *dir,
2056+ struct buffer_head *parent_fe_bh,
2057+ struct ocfs2_alloc_context *ac,
2058+ u64 *fe_blkno)
2059+{
2060+ int ret;
2061+ handle_t *handle = NULL;
2062+ struct ocfs2_suballoc_result *res;
2063+
2064+ BUG_ON(!ac);
2065+ BUG_ON(ac->ac_bits_given != 0);
2066+ BUG_ON(ac->ac_bits_wanted != 1);
2067+ BUG_ON(ac->ac_which != OCFS2_AC_USE_INODE);
2068+
2069+ res = kzalloc(sizeof(*res), GFP_NOFS);
2070+ if (res == NULL) {
2071+ ret = -ENOMEM;
2072+ mlog_errno(ret);
2073+ goto out;
2074+ }
2075+
2076+ ocfs2_init_inode_ac_group(dir, parent_fe_bh, ac);
2077+
2078+ /*
2079+ * The handle started here is for chain relink. Alternatively,
2080+ * we could just disable relink for these calls.
2081+ */
2082+ handle = ocfs2_start_trans(OCFS2_SB(dir->i_sb), OCFS2_SUBALLOC_ALLOC);
2083+ if (IS_ERR(handle)) {
2084+ ret = PTR_ERR(handle);
2085+ handle = NULL;
2086+ mlog_errno(ret);
2087+ goto out;
2088+ }
2089+
2090+ /*
2091+ * This will instruct ocfs2_claim_suballoc_bits and
2092+ * ocfs2_search_one_group to search but save actual allocation
2093+ * for later.
2094+ */
2095+ ac->ac_find_loc_only = 1;
2096+
2097+ ret = ocfs2_claim_suballoc_bits(ac, handle, 1, 1, res);
2098+ if (ret < 0) {
2099+ mlog_errno(ret);
2100+ goto out;
2101+ }
2102+
2103+ ac->ac_find_loc_priv = res;
2104+ *fe_blkno = res->sr_blkno;
2105+
2106+out:
2107+ if (handle)
2108+ ocfs2_commit_trans(OCFS2_SB(dir->i_sb), handle);
2109+
2110+ if (ret)
2111+ kfree(res);
2112+
2113+ return ret;
2114+}
2115+
2116+int ocfs2_claim_new_inode_at_loc(handle_t *handle,
2117+ struct inode *dir,
2118+ struct ocfs2_alloc_context *ac,
2119+ u64 *suballoc_loc,
2120+ u16 *suballoc_bit,
2121+ u64 di_blkno)
2122+{
2123+ int ret;
2124+ u16 chain;
2125+ struct ocfs2_suballoc_result *res = ac->ac_find_loc_priv;
2126+ struct buffer_head *bg_bh = NULL;
2127+ struct ocfs2_group_desc *bg;
2128+ struct ocfs2_dinode *di = (struct ocfs2_dinode *) ac->ac_bh->b_data;
2129+
2130+ /*
2131+ * Since di_blkno is being passed back in, we check for any
2132+ * inconsistencies which may have happened between
2133+ * calls. These are code bugs as di_blkno is not expected to
2134+ * change once returned from ocfs2_find_new_inode_loc()
2135+ */
2136+ BUG_ON(res->sr_blkno != di_blkno);
2137+
2138+ ret = ocfs2_read_group_descriptor(ac->ac_inode, di,
2139+ res->sr_bg_stable_blkno, &bg_bh);
2140+ if (ret) {
2141+ mlog_errno(ret);
2142+ goto out;
2143+ }
2144+
2145+ bg = (struct ocfs2_group_desc *) bg_bh->b_data;
2146+ chain = le16_to_cpu(bg->bg_chain);
2147+
2148+ ret = ocfs2_alloc_dinode_update_counts(ac->ac_inode, handle,
2149+ ac->ac_bh, res->sr_bits,
2150+ chain);
2151+ if (ret) {
2152+ mlog_errno(ret);
2153+ goto out;
2154+ }
2155+
2156+ ret = ocfs2_block_group_set_bits(handle,
2157+ ac->ac_inode,
2158+ bg,
2159+ bg_bh,
2160+ res->sr_bit_offset,
2161+ res->sr_bits);
2162+ if (ret < 0) {
2163+ mlog_errno(ret);
2164+ goto out;
2165+ }
2166+
2167+ mlog(0, "Allocated %u bits from suballocator %llu\n", res->sr_bits,
2168+ (unsigned long long)di_blkno);
2169+
2170+ atomic_inc(&OCFS2_SB(ac->ac_inode->i_sb)->alloc_stats.bg_allocs);
2171+
2172+ BUG_ON(res->sr_bits != 1);
2173+
2174+ *suballoc_loc = res->sr_bg_blkno;
2175+ *suballoc_bit = res->sr_bit_offset;
2176+ ac->ac_bits_given++;
2177+ ocfs2_save_inode_ac_group(dir, ac);
2178+
2179+out:
2180+ brelse(bg_bh);
2181+
2182+ return ret;
2183+}
2184+
20192185 int ocfs2_claim_new_inode(handle_t *handle,
20202186 struct inode *dir,
20212187 struct buffer_head *parent_fe_bh,
@@ -2567,7 +2733,8 @@ out: · 545 unmodified lines
25672733 * suballoc_bit.
25682734 */
25692735 static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno,
2570− u16 *suballoc_slot, u16 *suballoc_bit)
2736+ u16 *suballoc_slot, u64 *group_blkno,
2737+ u16 *suballoc_bit)
25712738 {
25722739 int status;
25732740 struct buffer_head *inode_bh = NULL;
@@ -2604,6 +2771,8 @@ static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno, · 30 unmodified lines
26042771 *suballoc_slot = le16_to_cpu(inode_fe->i_suballoc_slot);
26052772 if (suballoc_bit)
26062773 *suballoc_bit = le16_to_cpu(inode_fe->i_suballoc_bit);
2774+ if (group_blkno)
2775+ *group_blkno = le64_to_cpu(inode_fe->i_suballoc_loc);
26072776
26082777 bail:
26092778 brelse(inode_bh);
@@ -2621,7 +2790,8 @@ bail: · 11 unmodified lines
26212790 */
26222791 static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb,
26232792 struct inode *suballoc,
2624− struct buffer_head *alloc_bh, u64 blkno,
2793+ struct buffer_head *alloc_bh,
2794+ u64 group_blkno, u64 blkno,
26252795 u16 bit, int *res)
26262796 {
26272797 struct ocfs2_dinode *alloc_di;
@@ -2642,10 +2812,8 @@ static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb, · 14 unmodified lines
26422812 goto bail;
26432813 }
26442814
2645− if (alloc_di->i_suballoc_loc)
2646− bg_blkno = le64_to_cpu(alloc_di->i_suballoc_loc);
2647− else
2648− bg_blkno = ocfs2_which_suballoc_group(blkno, bit);
2815+ bg_blkno = group_blkno ? group_blkno :
2816+ ocfs2_which_suballoc_group(blkno, bit);
26492817 status = ocfs2_read_group_descriptor(suballoc, alloc_di, bg_blkno,
26502818 &group_bh);
26512819 if (status < 0) {
@@ -2680,6 +2848,7 @@ bail: · 28 unmodified lines
26802848 int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
26812849 {
26822850 int status;
2851+ u64 group_blkno = 0;
26832852 u16 suballoc_bit = 0, suballoc_slot = 0;
26842853 struct inode *inode_alloc_inode;
26852854 struct buffer_head *alloc_bh = NULL;
@@ -2687,7 +2856,7 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res) · 1 unmodified line
26872856 mlog_entry("blkno: %llu", (unsigned long long)blkno);
26882857
26892858 status = ocfs2_get_suballoc_slot_bit(osb, blkno, &suballoc_slot,
2690− &suballoc_bit);
2859+ &group_blkno, &suballoc_bit);
26912860 if (status < 0) {
26922861 mlog(ML_ERROR, "get alloc slot and bit failed %d\n", status);
26932862 goto bail;
@@ -2715,7 +2884,7 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res) · 21 unmodified lines
27152884 }
27162885
27172886 status = ocfs2_test_suballoc_bit(osb, inode_alloc_inode, alloc_bh,
2718− blkno, suballoc_bit, res);
2887+ group_blkno, blkno, suballoc_bit, res);
27192888 if (status < 0)
27202889 mlog(ML_ERROR, "test suballoc bit failed %d\n", status);
27212890
fs/ocfs2/suballoc.h+21−0
@@ -56,6 +56,9 @@ struct ocfs2_alloc_context { · 55 unmodified lines
5656 u64 ac_max_block; /* Highest block number to allocate. 0 is
5757 is the same as ~0 - unlimited */
5858
59+ int ac_find_loc_only; /* hack for reflink operation ordering */
60+ struct ocfs2_suballoc_result *ac_find_loc_priv; /* */
61+
5962 struct ocfs2_alloc_reservation *ac_resv;
6063 };
6164
@@ -197,4 +200,22 @@ int ocfs2_lock_allocators(struct inode *inode, struct ocfs2_extent_tree *et, · 135 unmodified lines
197200 struct ocfs2_alloc_context **meta_ac);
198201
199202 int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res);
203+
204+
205+
206+/*
207+ * The following two interfaces are for ocfs2_create_inode_in_orphan().
208+ */
209+int ocfs2_find_new_inode_loc(struct inode *dir,
210+ struct buffer_head *parent_fe_bh,
211+ struct ocfs2_alloc_context *ac,
212+ u64 *fe_blkno);
213+
214+int ocfs2_claim_new_inode_at_loc(handle_t *handle,
215+ struct inode *dir,
216+ struct ocfs2_alloc_context *ac,
217+ u64 *suballoc_loc,
218+ u16 *suballoc_bit,
219+ u64 di_blkno);
220+
200221 #endif /* _CHAINALLOC_H_ */
fs/proc/page.c+1−1
@@ -146,7 +146,7 @@ u64 stable_page_flags(struct page *page) · 145 unmodified lines
146146 u |= kpf_copy_bit(k, KPF_HWPOISON, PG_hwpoison);
147147 #endif
148148
149−#ifdef CONFIG_IA64_UNCACHED_ALLOCATOR
149+#ifdef CONFIG_ARCH_USES_PG_UNCACHED
150150 u |= kpf_copy_bit(k, KPF_UNCACHED, PG_uncached);
151151 #endif
152152
fs/proc/task_mmu.c+2−1
@@ -224,7 +224,8 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma) · 223 unmodified lines
224224 /* We don't show the stack guard page in /proc/maps */
225225 start = vma->vm_start;
226226 if (vma->vm_flags & VM_GROWSDOWN)
227− start += PAGE_SIZE;
227+ if (!vma_stack_continue(vma->vm_prev, vma->vm_start))
228+ start += PAGE_SIZE;
228229
229230 seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
230231 start,
fs/sysfs/file.c+1−1
@@ -340,7 +340,7 @@ static int sysfs_open_file(struct inode *inode, struct file *file) · 339 unmodified lines
340340 char *p;
341341
342342 p = d_path(&file->f_path, last_sysfs_file, sizeof(last_sysfs_file));
343− if (p)
343+ if (!IS_ERR(p))
344344 memmove(last_sysfs_file, p, strlen(p) + 1);
345345
346346 /* need attr_sd for attr and ops, its parent for kobj */
fs/xfs/linux-2.6/xfs_aops.c+8−5
@@ -852,8 +852,8 @@ xfs_convert_page( · 851 unmodified lines
852852 SetPageUptodate(page);
853853
854854 if (count) {
855− wbc->nr_to_write--;
856− if (wbc->nr_to_write <= 0)
855+ if (--wbc->nr_to_write <= 0 &&
856+ wbc->sync_mode == WB_SYNC_NONE)
857857 done = 1;
858858 }
859859 xfs_start_page_writeback(page, !page_dirty, count);
@@ -1068,7 +1068,7 @@ xfs_vm_writepage( · 208 unmodified lines
10681068 * by themselves.
10691069 */
10701070 if ((current->flags & (PF_MEMALLOC|PF_KSWAPD)) == PF_MEMALLOC)
1071− goto out_fail;
1071+ goto redirty;
10721072
10731073 /*
10741074 * We need a transaction if there are delalloc or unwritten buffers
@@ -1080,7 +1080,7 @@ xfs_vm_writepage( · 5 unmodified lines
10801080 */
10811081 xfs_count_page_state(page, &delalloc, &unwritten);
10821082 if ((current->flags & PF_FSTRANS) && (delalloc || unwritten))
1083− goto out_fail;
1083+ goto redirty;
10841084
10851085 /* Is this page beyond the end of the file? */
10861086 offset = i_size_read(inode);
@@ -1245,12 +1245,15 @@ error: · 158 unmodified lines
12451245 if (iohead)
12461246 xfs_cancel_ioend(iohead);
12471247
1248+ if (err == -EAGAIN)
1249+ goto redirty;
1250+
12481251 xfs_aops_discard_page(page);
12491252 ClearPageUptodate(page);
12501253 unlock_page(page);
12511254 return err;
12521255
1253−out_fail:
1256+redirty:
12541257 redirty_page_for_writepage(wbc, page);
12551258 unlock_page(page);
12561259 return 0;
fs/xfs/linux-2.6/xfs_buf.c+3−8
@@ -440,12 +440,7 @@ _xfs_buf_find( · 439 unmodified lines
440440 ASSERT(btp == bp->b_target);
441441 if (bp->b_file_offset == range_base &&
442442 bp->b_buffer_length == range_length) {
443− /*
444− * If we look at something, bring it to the
445− * front of the list for next time.
446− */
447443 atomic_inc(&bp->b_hold);
448− list_move(&bp->b_hash_list, &hash->bh_list);
449444 goto found;
450445 }
451446 }
@@ -1443,8 +1438,7 @@ xfs_alloc_bufhash( · 991 unmodified lines
14431438 {
14441439 unsigned int i;
14451440
1446− btp->bt_hashshift = external ? 3 : 8; /* 8 or 256 buckets */
1447− btp->bt_hashmask = (1 << btp->bt_hashshift) - 1;
1441+ btp->bt_hashshift = external ? 3 : 12; /* 8 or 4096 buckets */
14481442 btp->bt_hash = kmem_zalloc_large((1 << btp->bt_hashshift) *
14491443 sizeof(xfs_bufhash_t));
14501444 for (i = 0; i < (1 << btp->bt_hashshift); i++) {
@@ -1938,7 +1932,8 @@ xfs_buf_init(void) · 487 unmodified lines
19381932 if (!xfs_buf_zone)
19391933 goto out;
19401934
1941− xfslogd_workqueue = create_workqueue("xfslogd");
1935+ xfslogd_workqueue = alloc_workqueue("xfslogd",
1936+ WQ_RESCUER | WQ_HIGHPRI, 1);
19421937 if (!xfslogd_workqueue)
19431938 goto out_free_buf_zone;
19441939
fs/xfs/linux-2.6/xfs_buf.h+0−1
@@ -137,7 +137,6 @@ typedef struct xfs_buftarg { · 136 unmodified lines
137137 size_t bt_smask;
138138
139139 /* per device buffer hash table */
140− uint bt_hashmask;
141140 uint bt_hashshift;
142141 xfs_bufhash_t *bt_hash;
143142
fs/xfs/linux-2.6/xfs_ioctl.c+9−0
@@ -785,6 +785,8 @@ xfs_ioc_fsgetxattr( · 784 unmodified lines
785785 {
786786 struct fsxattr fa;
787787
788+ memset(&fa, 0, sizeof(struct fsxattr));
789+
788790 xfs_ilock(ip, XFS_ILOCK_SHARED);
789791 fa.fsx_xflags = xfs_ip2xflags(ip);
790792 fa.fsx_extsize = ip->i_d.di_extsize << ip->i_mount->m_sb.sb_blocklog;
@@ -906,6 +908,13 @@ xfs_ioctl_setattr( · 115 unmodified lines
906908 if (XFS_FORCED_SHUTDOWN(mp))
907909 return XFS_ERROR(EIO);
908910
911+ /*
912+ * Disallow 32bit project ids because on-disk structure
913+ * is 16bit only.
914+ */
915+ if ((mask & FSX_PROJID) && (fa->fsx_projid > (__uint16_t)-1))
916+ return XFS_ERROR(EINVAL);
917+
909918 /*
910919 * If disk quotas is on, we make sure that the dquots do exist on disk,
911920 * before we start any other transactions. Trying to do this later
fs/xfs/linux-2.6/xfs_iops.c+1−1
@@ -664,7 +664,7 @@ xfs_vn_fiemap( · 663 unmodified lines
664664 fieinfo->fi_extents_max + 1;
665665 bm.bmv_count = min_t(__s32, bm.bmv_count,
666666 (PAGE_SIZE * 16 / sizeof(struct getbmapx)));
667− bm.bmv_iflags = BMV_IF_PREALLOC;
667+ bm.bmv_iflags = BMV_IF_PREALLOC | BMV_IF_NO_HOLES;
668668 if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR)
669669 bm.bmv_iflags |= BMV_IF_ATTRFORK;
670670 if (!(fieinfo->fi_flags & FIEMAP_FLAG_SYNC))
fs/xfs/linux-2.6/xfs_super.c+7−2
@@ -1226,6 +1226,7 @@ xfs_fs_statfs( · 1225 unmodified lines
12261226 struct xfs_inode *ip = XFS_I(dentry->d_inode);
12271227 __uint64_t fakeinos, id;
12281228 xfs_extlen_t lsize;
1229+ __int64_t ffree;
12291230
12301231 statp->f_type = XFS_SB_MAGIC;
12311232 statp->f_namelen = MAXNAMELEN - 1;
@@ -1249,7 +1250,11 @@ xfs_fs_statfs( · 17 unmodified lines
12491250 statp->f_files = min_t(typeof(statp->f_files),
12501251 statp->f_files,
12511252 mp->m_maxicount);
1252− statp->f_ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree);
1253+
1254+ /* make sure statp->f_ffree does not underflow */
1255+ ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree);
1256+ statp->f_ffree = max_t(__int64_t, ffree, 0);
1257+
12531258 spin_unlock(&mp->m_sb_lock);
12541259
12551260 if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) ||
@@ -1402,7 +1407,7 @@ xfs_fs_freeze( · 146 unmodified lines
14021407
14031408 xfs_save_resvblks(mp);
14041409 xfs_quiesce_attr(mp);
1405− return -xfs_fs_log_dummy(mp);
1410+ return -xfs_fs_log_dummy(mp, SYNC_WAIT);
14061411 }
14071412
14081413 STATIC int
fs/xfs/linux-2.6/xfs_sync.c+6−36
@@ -34,6 +34,7 @@ · 33 unmodified lines
3434 #include "xfs_inode_item.h"
3535 #include "xfs_quota.h"
3636 #include "xfs_trace.h"
37+#include "xfs_fsops.h"
3738
3839 #include <linux/kthread.h>
3940 #include <linux/freezer.h>
@@ -340,38 +341,6 @@ xfs_sync_attr( · 300 unmodified lines
340341 XFS_ICI_NO_TAG, 0, NULL);
341342 }
342343
343−STATIC int
344−xfs_commit_dummy_trans(
345− struct xfs_mount *mp,
346− uint flags)
347−{
348− struct xfs_inode *ip = mp->m_rootip;
349− struct xfs_trans *tp;
350− int error;
351−
352− /*
353− * Put a dummy transaction in the log to tell recovery
354− * that all others are OK.
355− */
356− tp = xfs_trans_alloc(mp, XFS_TRANS_DUMMY1);
357− error = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), 0, 0, 0);
358− if (error) {
359− xfs_trans_cancel(tp, 0);
360− return error;
361− }
362−
363− xfs_ilock(ip, XFS_ILOCK_EXCL);
364−
365− xfs_trans_ijoin(tp, ip);
366− xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
367− error = xfs_trans_commit(tp, 0);
368− xfs_iunlock(ip, XFS_ILOCK_EXCL);
369−
370− /* the log force ensures this transaction is pushed to disk */
371− xfs_log_force(mp, (flags & SYNC_WAIT) ? XFS_LOG_SYNC : 0);
372− return error;
373−}
374−
375344 STATIC int
376345 xfs_sync_fsdata(
377346 struct xfs_mount *mp)
@@ -432,7 +401,7 @@ xfs_quiesce_data( · 54 unmodified lines
432401
433402 /* mark the log as covered if needed */
434403 if (xfs_log_need_covered(mp))
435− error2 = xfs_commit_dummy_trans(mp, SYNC_WAIT);
404+ error2 = xfs_fs_log_dummy(mp, SYNC_WAIT);
436405
437406 /* flush data-only devices */
438407 if (mp->m_rtdev_targp)
@@ -563,7 +532,7 @@ xfs_flush_inodes( · 124 unmodified lines
563532 /*
564533 * Every sync period we need to unpin all items, reclaim inodes and sync
565534 * disk quotas. We might need to cover the log to indicate that the
566− * filesystem is idle.
535+ * filesystem is idle and not frozen.
567536 */
568537 STATIC void
569538 xfs_sync_worker(
@@ -577,8 +546,9 @@ xfs_sync_worker( · 7 unmodified lines
577546 xfs_reclaim_inodes(mp, 0);
578547 /* dgc: errors ignored here */
579548 error = xfs_qm_sync(mp, SYNC_TRYLOCK);
580− if (xfs_log_need_covered(mp))
581− error = xfs_commit_dummy_trans(mp, 0);
549+ if (mp->m_super->s_frozen == SB_UNFROZEN &&
550+ xfs_log_need_covered(mp))
551+ error = xfs_fs_log_dummy(mp, 0);
582552 }
583553 mp->m_sync_seq++;
584554 wake_up(&mp->m_wait_single_sync_task);
fs/xfs/xfs_bmap.c+13−1
@@ -5533,12 +5533,24 @@ xfs_getbmap( · 5532 unmodified lines
55335533 map[i].br_startblock))
55345534 goto out_free_map;
55355535
5536− nexleft--;
55375536 bmv->bmv_offset =
55385537 out[cur_ext].bmv_offset +
55395538 out[cur_ext].bmv_length;
55405539 bmv->bmv_length =
55415540 max_t(__int64_t, 0, bmvend - bmv->bmv_offset);
5541+
5542+ /*
5543+ * In case we don't want to return the hole,
5544+ * don't increase cur_ext so that we can reuse
5545+ * it in the next loop.
5546+ */
5547+ if ((iflags & BMV_IF_NO_HOLES) &&
5548+ map[i].br_startblock == HOLESTARTBLOCK) {
5549+ memset(&out[cur_ext], 0, sizeof(out[cur_ext]));
5550+ continue;
5551+ }
5552+
5553+ nexleft--;
55425554 bmv->bmv_entries++;
55435555 cur_ext++;
55445556 }
fs/xfs/xfs_fs.h+3−1
@@ -114,8 +114,10 @@ struct getbmapx { · 113 unmodified lines
114114 #define BMV_IF_NO_DMAPI_READ 0x2 /* Do not generate DMAPI read event */
115115 #define BMV_IF_PREALLOC 0x4 /* rtn status BMV_OF_PREALLOC if req */
116116 #define BMV_IF_DELALLOC 0x8 /* rtn status BMV_OF_DELALLOC if req */
117+#define BMV_IF_NO_HOLES 0x10 /* Do not return holes */
117118 #define BMV_IF_VALID \
118− (BMV_IF_ATTRFORK|BMV_IF_NO_DMAPI_READ|BMV_IF_PREALLOC|BMV_IF_DELALLOC)
119+ (BMV_IF_ATTRFORK|BMV_IF_NO_DMAPI_READ|BMV_IF_PREALLOC| \
120+ BMV_IF_DELALLOC|BMV_IF_NO_HOLES)
119121
120122 /* bmv_oflags values - returned for each non-header segment */
121123 #define BMV_OF_PREALLOC 0x1 /* segment = unwritten pre-allocation */
fs/xfs/xfs_fsops.c+18−13
@@ -604,31 +604,36 @@ out: · 603 unmodified lines
604604 return 0;
605605 }
606606
607+/*
608+ * Dump a transaction into the log that contains no real change. This is needed
609+ * to be able to make the log dirty or stamp the current tail LSN into the log
610+ * during the covering operation.
611+ *
612+ * We cannot use an inode here for this - that will push dirty state back up
613+ * into the VFS and then periodic inode flushing will prevent log covering from
614+ * making progress. Hence we log a field in the superblock instead.
615+ */
607616 int
608617 xfs_fs_log_dummy(
609− xfs_mount_t *mp)
618+ xfs_mount_t *mp,
619+ int flags)
610620 {
611621 xfs_trans_t *tp;
612− xfs_inode_t *ip;
613622 int error;
614623
615624 tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1, KM_SLEEP);
616− error = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), 0, 0, 0);
625+ error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0,
626+ XFS_DEFAULT_LOG_COUNT);
617627 if (error) {
618628 xfs_trans_cancel(tp, 0);
619629 return error;
620630 }
621631
622− ip = mp->m_rootip;
623− xfs_ilock(ip, XFS_ILOCK_EXCL);
624−
625− xfs_trans_ijoin(tp, ip);
626− xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
627− xfs_trans_set_sync(tp);
628− error = xfs_trans_commit(tp, 0);
629−
630− xfs_iunlock(ip, XFS_ILOCK_EXCL);
631− return error;
632+ /* log the UUID because it is an unchanging field */
633+ xfs_mod_sb(tp, XFS_SB_UUID);
634+ if (flags & SYNC_WAIT)
635+ xfs_trans_set_sync(tp);
636+ return xfs_trans_commit(tp, 0);
632637 }
633638
634639 int
fs/xfs/xfs_fsops.h+1−1
@@ -25,6 +25,6 @@ extern int xfs_fs_counts(xfs_mount_t *mp, xfs_fsop_counts_t *cnt); · 24 unmodified lines
2525 extern int xfs_reserve_blocks(xfs_mount_t *mp, __uint64_t *inval,
2626 xfs_fsop_resblks_t *outval);
2727 extern int xfs_fs_goingdown(xfs_mount_t *mp, __uint32_t inflags);
28−extern int xfs_fs_log_dummy(xfs_mount_t *mp);
28+extern int xfs_fs_log_dummy(xfs_mount_t *mp, int flags);
2929
3030 #endif /* __XFS_FSOPS_H__ */
fs/xfs/xfs_ialloc.c+10−6
@@ -1213,7 +1213,6 @@ xfs_imap_lookup( · 1212 unmodified lines
12131213 struct xfs_inobt_rec_incore rec;
12141214 struct xfs_btree_cur *cur;
12151215 struct xfs_buf *agbp;
1216− xfs_agino_t startino;
12171216 int error;
12181217 int i;
12191218
@@ -1227,13 +1226,13 @@ xfs_imap_lookup( · 7 unmodified lines
12271226 }
12281227
12291228 /*
1230− * derive and lookup the exact inode record for the given agino. If the
1231− * record cannot be found, then it's an invalid inode number and we
1232− * should abort.
1229+ * Lookup the inode record for the given agino. If the record cannot be
1230+ * found, then it's an invalid inode number and we should abort. Once
1231+ * we have a record, we need to ensure it contains the inode number
1232+ * we are looking up.
12331233 */
12341234 cur = xfs_inobt_init_cursor(mp, tp, agbp, agno);
1235− startino = agino & ~(XFS_IALLOC_INODES(mp) - 1);
1236− error = xfs_inobt_lookup(cur, startino, XFS_LOOKUP_EQ, &i);
1235+ error = xfs_inobt_lookup(cur, agino, XFS_LOOKUP_LE, &i);
12371236 if (!error) {
12381237 if (i)
12391238 error = xfs_inobt_get_rec(cur, &rec, &i);
@@ -1246,6 +1245,11 @@ xfs_imap_lookup( · 6 unmodified lines
12461245 if (error)
12471246 return error;
12481247
1248+ /* check that the returned record contains the required inode */
1249+ if (rec.ir_startino > agino ||
1250+ rec.ir_startino + XFS_IALLOC_INODES(mp) <= agino)
1251+ return EINVAL;
1252+
12491253 /* for untrusted inodes check it is allocated first */
12501254 if ((flags & XFS_IGET_UNTRUSTED) &&
12511255 (rec.ir_free & XFS_INOBT_MASK(agino - rec.ir_startino)))
fs/xfs/xfs_inode.c+26−23
@@ -1914,6 +1914,11 @@ xfs_iunlink_remove( · 1913 unmodified lines
19141914 return 0;
19151915 }
19161916
1917+/*
1918+ * A big issue when freeing the inode cluster is is that we _cannot_ skip any
1919+ * inodes that are in memory - they all must be marked stale and attached to
1920+ * the cluster buffer.
1921+ */
19171922 STATIC void
19181923 xfs_ifree_cluster(
19191924 xfs_inode_t *free_ip,
@@ -1945,8 +1950,6 @@ xfs_ifree_cluster( · 25 unmodified lines
19451950 }
19461951
19471952 for (j = 0; j < nbufs; j++, inum += ninodes) {
1948− int found = 0;
1949−
19501953 blkno = XFS_AGB_TO_DADDR(mp, XFS_INO_TO_AGNO(mp, inum),
19511954 XFS_INO_TO_AGBNO(mp, inum));
19521955
@@ -1965,7 +1968,9 @@ xfs_ifree_cluster( · 12 unmodified lines
19651968 /*
19661969 * Walk the inodes already attached to the buffer and mark them
19671970 * stale. These will all have the flush locks held, so an
1968− * in-memory inode walk can't lock them.
1971+ * in-memory inode walk can't lock them. By marking them all
1972+ * stale first, we will not attempt to lock them in the loop
1973+ * below as the XFS_ISTALE flag will be set.
19691974 */
19701975 lip = XFS_BUF_FSPRIVATE(bp, xfs_log_item_t *);
19711976 while (lip) {
@@ -1977,11 +1982,11 @@ xfs_ifree_cluster( · 5 unmodified lines
19771982 &iip->ili_flush_lsn,
19781983 &iip->ili_item.li_lsn);
19791984 xfs_iflags_set(iip->ili_inode, XFS_ISTALE);
1980− found++;
19811985 }
19821986 lip = lip->li_bio_list;
19831987 }
19841988
1989+
19851990 /*
19861991 * For each inode in memory attempt to add it to the inode
19871992 * buffer and set it up for being staled on buffer IO
@@ -1993,6 +1998,7 @@ xfs_ifree_cluster( · 5 unmodified lines
19931998 * even trying to lock them.
19941999 */
19952000 for (i = 0; i < ninodes; i++) {
2001+retry:
19962002 read_lock(&pag->pag_ici_lock);
19972003 ip = radix_tree_lookup(&pag->pag_ici_root,
19982004 XFS_INO_TO_AGINO(mp, (inum + i)));
@@ -2003,38 +2009,36 @@ xfs_ifree_cluster( · 4 unmodified lines
20032009 continue;
20042010 }
20052011
2006− /* don't try to lock/unlock the current inode */
2012+ /*
2013+ * Don't try to lock/unlock the current inode, but we
2014+ * _cannot_ skip the other inodes that we did not find
2015+ * in the list attached to the buffer and are not
2016+ * already marked stale. If we can't lock it, back off
2017+ * and retry.
2018+ */
20072019 if (ip != free_ip &&
20082020 !xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) {
20092021 read_unlock(&pag->pag_ici_lock);
2010− continue;
2022+ delay(1);
2023+ goto retry;
20112024 }
20122025 read_unlock(&pag->pag_ici_lock);
20132026
2014− if (!xfs_iflock_nowait(ip)) {
2015− if (ip != free_ip)
2016− xfs_iunlock(ip, XFS_ILOCK_EXCL);
2017− continue;
2018− }
2019−
2027+ xfs_iflock(ip);
20202028 xfs_iflags_set(ip, XFS_ISTALE);
2021− if (xfs_inode_clean(ip)) {
2022− ASSERT(ip != free_ip);
2023− xfs_ifunlock(ip);
2024− xfs_iunlock(ip, XFS_ILOCK_EXCL);
2025− continue;
2026− }
20272029
2030+ /*
2031+ * we don't need to attach clean inodes or those only
2032+ * with unlogged changes (which we throw away, anyway).
2033+ */
20282034 iip = ip->i_itemp;
2029− if (!iip) {
2030− /* inode with unlogged changes only */
2035+ if (!iip || xfs_inode_clean(ip)) {
20312036 ASSERT(ip != free_ip);
20322037 ip->i_update_core = 0;
20332038 xfs_ifunlock(ip);
20342039 xfs_iunlock(ip, XFS_ILOCK_EXCL);
20352040 continue;
20362041 }
2037− found++;
20382042
20392043 iip->ili_last_fields = iip->ili_format.ilf_fields;
20402044 iip->ili_format.ilf_fields = 0;
@@ -2049,8 +2053,7 @@ xfs_ifree_cluster( · 8 unmodified lines
20492053 xfs_iunlock(ip, XFS_ILOCK_EXCL);
20502054 }
20512055
2052− if (found)
2053− xfs_trans_stale_inode_buf(tp, bp);
2056+ xfs_trans_stale_inode_buf(tp, bp);
20542057 xfs_trans_binval(tp, bp);
20552058 }
20562059
fs/xfs/xfs_log.c+4−3
@@ -3015,7 +3015,8 @@ _xfs_log_force( · 3014 unmodified lines
30153015
30163016 XFS_STATS_INC(xs_log_force);
30173017
3018− xlog_cil_push(log, 1);
3018+ if (log->l_cilp)
3019+ xlog_cil_force(log);
30193020
30203021 spin_lock(&log->l_icloglock);
30213022
@@ -3167,7 +3168,7 @@ _xfs_log_force_lsn( · 145 unmodified lines
31673168 XFS_STATS_INC(xs_log_force);
31683169
31693170 if (log->l_cilp) {
3170− lsn = xlog_cil_push_lsn(log, lsn);
3171+ lsn = xlog_cil_force_lsn(log, lsn);
31713172 if (lsn == NULLCOMMITLSN)
31723173 return 0;
31733174 }
@@ -3724,7 +3725,7 @@ xfs_log_force_umount( · 550 unmodified lines
37243725 * call below.
37253726 */
37263727 if (!logerror && (mp->m_flags & XFS_MOUNT_DELAYLOG))
3727− xlog_cil_push(log, 1);
3728+ xlog_cil_force(log);
37283729
37293730 /*
37303731 * We must hold both the GRANT lock and the LOG lock,
fs/xfs/xfs_log_cil.c+157−106
@@ -68,6 +68,7 @@ xlog_cil_init( · 67 unmodified lines
6868 ctx->sequence = 1;
6969 ctx->cil = cil;
7070 cil->xc_ctx = ctx;
71+ cil->xc_current_sequence = ctx->sequence;
7172
7273 cil->xc_log = log;
7374 log->l_cilp = cil;
@@ -269,15 +270,10 @@ xlog_cil_insert( · 195 unmodified lines
269270 static void
270271 xlog_cil_format_items(
271272 struct log *log,
272− struct xfs_log_vec *log_vector,
273− struct xlog_ticket *ticket,
274− xfs_lsn_t *start_lsn)
273+ struct xfs_log_vec *log_vector)
275274 {
276275 struct xfs_log_vec *lv;
277276
278− if (start_lsn)
279− *start_lsn = log->l_cilp->xc_ctx->sequence;
280−
281277 ASSERT(log_vector);
282278 for (lv = log_vector; lv; lv = lv->lv_next) {
283279 void *ptr;
@@ -301,9 +297,24 @@ xlog_cil_format_items( · 17 unmodified lines
301297 ptr += vec->i_len;
302298 }
303299 ASSERT(ptr == lv->lv_buf + lv->lv_buf_len);
300+ }
301+}
302+
303+static void
304+xlog_cil_insert_items(
305+ struct log *log,
306+ struct xfs_log_vec *log_vector,
307+ struct xlog_ticket *ticket,
308+ xfs_lsn_t *start_lsn)
309+{
310+ struct xfs_log_vec *lv;
311+
312+ if (start_lsn)
313+ *start_lsn = log->l_cilp->xc_ctx->sequence;
304314
315+ ASSERT(log_vector);
316+ for (lv = log_vector; lv; lv = lv->lv_next)
305317 xlog_cil_insert(log, ticket, lv->lv_item, lv);
306− }
307318 }
308319
309320 static void
@@ -320,80 +331,6 @@ xlog_cil_free_logvec( · 10 unmodified lines
320331 }
321332 }
322333
323−/*
324− * Commit a transaction with the given vector to the Committed Item List.
325− *
326− * To do this, we need to format the item, pin it in memory if required and
327− * account for the space used by the transaction. Once we have done that we
328− * need to release the unused reservation for the transaction, attach the
329− * transaction to the checkpoint context so we carry the busy extents through
330− * to checkpoint completion, and then unlock all the items in the transaction.
331− *
332− * For more specific information about the order of operations in
333− * xfs_log_commit_cil() please refer to the comments in
334− * xfs_trans_commit_iclog().
335− *
336− * Called with the context lock already held in read mode to lock out
337− * background commit, returns without it held once background commits are
338− * allowed again.
339− */
340−int
341−xfs_log_commit_cil(
342− struct xfs_mount *mp,
343− struct xfs_trans *tp,
344− struct xfs_log_vec *log_vector,
345− xfs_lsn_t *commit_lsn,
346− int flags)
347−{
348− struct log *log = mp->m_log;
349− int log_flags = 0;
350− int push = 0;
351−
352− if (flags & XFS_TRANS_RELEASE_LOG_RES)
353− log_flags = XFS_LOG_REL_PERM_RESERV;
354−
355− if (XLOG_FORCED_SHUTDOWN(log)) {
356− xlog_cil_free_logvec(log_vector);
357− return XFS_ERROR(EIO);
358− }
359−
360− /* lock out background commit */
361− down_read(&log->l_cilp->xc_ctx_lock);
362− xlog_cil_format_items(log, log_vector, tp->t_ticket, commit_lsn);
363−
364− /* check we didn't blow the reservation */
365− if (tp->t_ticket->t_curr_res < 0)
366− xlog_print_tic_res(log->l_mp, tp->t_ticket);
367−
368− /* attach the transaction to the CIL if it has any busy extents */
369− if (!list_empty(&tp->t_busy)) {
370− spin_lock(&log->l_cilp->xc_cil_lock);
371− list_splice_init(&tp->t_busy,
372− &log->l_cilp->xc_ctx->busy_extents);
373− spin_unlock(&log->l_cilp->xc_cil_lock);
374− }
375−
376− tp->t_commit_lsn = *commit_lsn;
377− xfs_log_done(mp, tp->t_ticket, NULL, log_flags);
378− xfs_trans_unreserve_and_mod_sb(tp);
379−
380− /* check for background commit before unlock */
381− if (log->l_cilp->xc_ctx->space_used > XLOG_CIL_SPACE_LIMIT(log))
382− push = 1;
383− up_read(&log->l_cilp->xc_ctx_lock);
384−
385− /*
386− * We need to push CIL every so often so we don't cache more than we
387− * can fit in the log. The limit really is that a checkpoint can't be
388− * more than half the log (the current checkpoint is not allowed to
389− * overwrite the previous checkpoint), but commit latency and memory
390− * usage limit this to a smaller size in most cases.
391− */
392− if (push)
393− xlog_cil_push(log, 0);
394− return 0;
395−}
396−
397334 /*
398335 * Mark all items committed and clear busy extents. We free the log vector
399336 * chains in a separate pass so that we unpin the log items as quickly as
@@ -427,13 +364,23 @@ xlog_cil_committed( · 27 unmodified lines
427364 }
428365
429366 /*
430− * Push the Committed Item List to the log. If the push_now flag is not set,
431− * then it is a background flush and so we can chose to ignore it.
367+ * Push the Committed Item List to the log. If @push_seq flag is zero, then it
368+ * is a background flush and so we can chose to ignore it. Otherwise, if the
369+ * current sequence is the same as @push_seq we need to do a flush. If
370+ * @push_seq is less than the current sequence, then it has already been
371+ * flushed and we don't need to do anything - the caller will wait for it to
372+ * complete if necessary.
373+ *
374+ * @push_seq is a value rather than a flag because that allows us to do an
375+ * unlocked check of the sequence number for a match. Hence we can allows log
376+ * forces to run racily and not issue pushes for the same sequence twice. If we
377+ * get a race between multiple pushes for the same sequence they will block on
378+ * the first one and then abort, hence avoiding needless pushes.
432379 */
433−int
380+STATIC int
434381 xlog_cil_push(
435382 struct log *log,
436− int push_now)
383+ xfs_lsn_t push_seq)
437384 {
438385 struct xfs_cil *cil = log->l_cilp;
439386 struct xfs_log_vec *lv;
@@ -453,12 +400,14 @@ xlog_cil_push( · 13 unmodified lines
453400 if (!cil)
454401 return 0;
455402
403+ ASSERT(!push_seq || push_seq <= cil->xc_ctx->sequence);
404+
456405 new_ctx = kmem_zalloc(sizeof(*new_ctx), KM_SLEEP|KM_NOFS);
457406 new_ctx->ticket = xlog_cil_ticket_alloc(log);
458407
459408 /* lock out transaction commit, but don't block on background push */
460409 if (!down_write_trylock(&cil->xc_ctx_lock)) {
461− if (!push_now)
410+ if (!push_seq)
462411 goto out_free_ticket;
463412 down_write(&cil->xc_ctx_lock);
464413 }
@@ -469,7 +418,11 @@ xlog_cil_push( · 4 unmodified lines
469418 goto out_skip;
470419
471420 /* check for spurious background flush */
472− if (!push_now && cil->xc_ctx->space_used < XLOG_CIL_SPACE_LIMIT(log))
421+ if (!push_seq && cil->xc_ctx->space_used < XLOG_CIL_SPACE_LIMIT(log))
422+ goto out_skip;
423+
424+ /* check for a previously pushed seqeunce */
425+ if (push_seq < cil->xc_ctx->sequence)
473426 goto out_skip;
474427
475428 /*
@@ -514,6 +467,13 @@ xlog_cil_push( · 38 unmodified lines
514467 new_ctx->cil = cil;
515468 cil->xc_ctx = new_ctx;
516469
470+ /*
471+ * mirror the new sequence into the cil structure so that we can do
472+ * unlocked checks against the current sequence in log forces without
473+ * risking deferencing a freed context pointer.
474+ */
475+ cil->xc_current_sequence = new_ctx->sequence;
476+
517477 /*
518478 * The switch is now done, so we can drop the context lock and move out
519479 * of a shared context. We can't just go straight to the commit record,
@@ -625,6 +585,102 @@ out_abort: · 105 unmodified lines
625585 return XFS_ERROR(EIO);
626586 }
627587
588+/*
589+ * Commit a transaction with the given vector to the Committed Item List.
590+ *
591+ * To do this, we need to format the item, pin it in memory if required and
592+ * account for the space used by the transaction. Once we have done that we
593+ * need to release the unused reservation for the transaction, attach the
594+ * transaction to the checkpoint context so we carry the busy extents through
595+ * to checkpoint completion, and then unlock all the items in the transaction.
596+ *
597+ * For more specific information about the order of operations in
598+ * xfs_log_commit_cil() please refer to the comments in
599+ * xfs_trans_commit_iclog().
600+ *
601+ * Called with the context lock already held in read mode to lock out
602+ * background commit, returns without it held once background commits are
603+ * allowed again.
604+ */
605+int
606+xfs_log_commit_cil(
607+ struct xfs_mount *mp,
608+ struct xfs_trans *tp,
609+ struct xfs_log_vec *log_vector,
610+ xfs_lsn_t *commit_lsn,
611+ int flags)
612+{
613+ struct log *log = mp->m_log;
614+ int log_flags = 0;
615+ int push = 0;
616+
617+ if (flags & XFS_TRANS_RELEASE_LOG_RES)
618+ log_flags = XFS_LOG_REL_PERM_RESERV;
619+
620+ if (XLOG_FORCED_SHUTDOWN(log)) {
621+ xlog_cil_free_logvec(log_vector);
622+ return XFS_ERROR(EIO);
623+ }
624+
625+ /*
626+ * do all the hard work of formatting items (including memory
627+ * allocation) outside the CIL context lock. This prevents stalling CIL
628+ * pushes when we are low on memory and a transaction commit spends a
629+ * lot of time in memory reclaim.
630+ */
631+ xlog_cil_format_items(log, log_vector);
632+
633+ /* lock out background commit */
634+ down_read(&log->l_cilp->xc_ctx_lock);
635+ xlog_cil_insert_items(log, log_vector, tp->t_ticket, commit_lsn);
636+
637+ /* check we didn't blow the reservation */
638+ if (tp->t_ticket->t_curr_res < 0)
639+ xlog_print_tic_res(log->l_mp, tp->t_ticket);
640+
641+ /* attach the transaction to the CIL if it has any busy extents */
642+ if (!list_empty(&tp->t_busy)) {
643+ spin_lock(&log->l_cilp->xc_cil_lock);
644+ list_splice_init(&tp->t_busy,
645+ &log->l_cilp->xc_ctx->busy_extents);
646+ spin_unlock(&log->l_cilp->xc_cil_lock);
647+ }
648+
649+ tp->t_commit_lsn = *commit_lsn;
650+ xfs_log_done(mp, tp->t_ticket, NULL, log_flags);
651+ xfs_trans_unreserve_and_mod_sb(tp);
652+
653+ /*
654+ * Once all the items of the transaction have been copied to the CIL,
655+ * the items can be unlocked and freed.
656+ *
657+ * This needs to be done before we drop the CIL context lock because we
658+ * have to update state in the log items and unlock them before they go
659+ * to disk. If we don't, then the CIL checkpoint can race with us and
660+ * we can run checkpoint completion before we've updated and unlocked
661+ * the log items. This affects (at least) processing of stale buffers,
662+ * inodes and EFIs.
663+ */
664+ xfs_trans_free_items(tp, *commit_lsn, 0);
665+
666+ /* check for background commit before unlock */
667+ if (log->l_cilp->xc_ctx->space_used > XLOG_CIL_SPACE_LIMIT(log))
668+ push = 1;
669+
670+ up_read(&log->l_cilp->xc_ctx_lock);
671+
672+ /*
673+ * We need to push CIL every so often so we don't cache more than we
674+ * can fit in the log. The limit really is that a checkpoint can't be
675+ * more than half the log (the current checkpoint is not allowed to
676+ * overwrite the previous checkpoint), but commit latency and memory
677+ * usage limit this to a smaller size in most cases.
678+ */
679+ if (push)
680+ xlog_cil_push(log, 0);
681+ return 0;
682+}
683+
628684 /*
629685 * Conditionally push the CIL based on the sequence passed in.
630686 *
@@ -639,39 +695,34 @@ out_abort: · 8 unmodified lines
639695 * commit lsn is there. It'll be empty, so this is broken for now.
640696 */
641697 xfs_lsn_t
642−xlog_cil_push_lsn(
698+xlog_cil_force_lsn(
643699 struct log *log,
644− xfs_lsn_t push_seq)
700+ xfs_lsn_t sequence)
645701 {
646702 struct xfs_cil *cil = log->l_cilp;
647703 struct xfs_cil_ctx *ctx;
648704 xfs_lsn_t commit_lsn = NULLCOMMITLSN;
649705
650−restart:
651− down_write(&cil->xc_ctx_lock);
652− ASSERT(push_seq <= cil->xc_ctx->sequence);
653−
654− /* check to see if we need to force out the current context */
655− if (push_seq == cil->xc_ctx->sequence) {
656− up_write(&cil->xc_ctx_lock);
657− xlog_cil_push(log, 1);
658− goto restart;
659− }
706+ ASSERT(sequence <= cil->xc_current_sequence);
707+
708+ /*
709+ * check to see if we need to force out the current context.
710+ * xlog_cil_push() handles racing pushes for the same sequence,
711+ * so no need to deal with it here.
712+ */
713+ if (sequence == cil->xc_current_sequence)
714+ xlog_cil_push(log, sequence);
660715
661716 /*
662717 * See if we can find a previous sequence still committing.
663− * We can drop the flush lock as soon as we have the cil lock
664− * because we are now only comparing contexts protected by
665− * the cil lock.
666− *
667718 * We need to wait for all previous sequence commits to complete
668719 * before allowing the force of push_seq to go ahead. Hence block
669720 * on commits for those as well.
670721 */
722+restart:
671723 spin_lock(&cil->xc_cil_lock);
672− up_write(&cil->xc_ctx_lock);
673724 list_for_each_entry(ctx, &cil->xc_committing, committing) {
674− if (ctx->sequence > push_seq)
725+ if (ctx->sequence > sequence)
675726 continue;
676727 if (!ctx->commit_lsn) {
677728 /*
@@ -681,7 +732,7 @@ restart: · 3 unmodified lines
681732 sv_wait(&cil->xc_commit_wait, 0, &cil->xc_cil_lock, 0);
682733 goto restart;
683734 }
684− if (ctx->sequence != push_seq)
735+ if (ctx->sequence != sequence)
685736 continue;
686737 /* found it! */
687738 commit_lsn = ctx->commit_lsn;
fs/xfs/xfs_log_priv.h+11−2
@@ -422,6 +422,7 @@ struct xfs_cil { · 421 unmodified lines
422422 struct rw_semaphore xc_ctx_lock;
423423 struct list_head xc_committing;
424424 sv_t xc_commit_wait;
425+ xfs_lsn_t xc_current_sequence;
425426 };
426427
427428 /*
@@ -562,8 +563,16 @@ int xlog_cil_init(struct log *log); · 134 unmodified lines
562563 void xlog_cil_init_post_recovery(struct log *log);
563564 void xlog_cil_destroy(struct log *log);
564565
565−int xlog_cil_push(struct log *log, int push_now);
566−xfs_lsn_t xlog_cil_push_lsn(struct log *log, xfs_lsn_t push_sequence);
566+/*
567+ * CIL force routines
568+ */
569+xfs_lsn_t xlog_cil_force_lsn(struct log *log, xfs_lsn_t sequence);
570+
571+static inline void
572+xlog_cil_force(struct log *log)
573+{
574+ xlog_cil_force_lsn(log, log->l_cilp->xc_current_sequence);
575+}
567576
568577 /*
569578 * Unmount record type is used as a pseudo transaction type for the ticket.
fs/xfs/xfs_trans.c+1−4
@@ -1167,7 +1167,7 @@ xfs_trans_del_item( · 1166 unmodified lines
11671167 * Unlock all of the items of a transaction and free all the descriptors
11681168 * of that transaction.
11691169 */
1170−STATIC void
1170+void
11711171 xfs_trans_free_items(
11721172 struct xfs_trans *tp,
11731173 xfs_lsn_t commit_lsn,
@@ -1653,9 +1653,6 @@ xfs_trans_commit_cil( · 479 unmodified lines
16531653 return error;
16541654
16551655 current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
1656−
1657− /* xfs_trans_free_items() unlocks them first */
1658− xfs_trans_free_items(tp, *commit_lsn, 0);
16591656 xfs_trans_free(tp);
16601657 return 0;
16611658 }
fs/xfs/xfs_trans_priv.h+2−1
@@ -25,7 +25,8 @@ struct xfs_trans; · 24 unmodified lines
2525
2626 void xfs_trans_add_item(struct xfs_trans *, struct xfs_log_item *);
2727 void xfs_trans_del_item(struct xfs_log_item *);
28−
28+void xfs_trans_free_items(struct xfs_trans *tp, xfs_lsn_t commit_lsn,
29+ int flags);
2930 void xfs_trans_item_committed(struct xfs_log_item *lip,
3031 xfs_lsn_t commit_lsn, int aborted);
3132 void xfs_trans_unreserve_and_mod_sb(struct xfs_trans *tp);
fs/xfs/xfs_vnodeops.c+10−3
@@ -2299,15 +2299,22 @@ xfs_alloc_file_space( · 2298 unmodified lines
22992299 e = allocatesize_fsb;
23002300 }
23012301
2302+ /*
2303+ * The transaction reservation is limited to a 32-bit block
2304+ * count, hence we need to limit the number of blocks we are
2305+ * trying to reserve to avoid an overflow. We can't allocate
2306+ * more than @nimaps extents, and an extent is limited on disk
2307+ * to MAXEXTLEN (21 bits), so use that to enforce the limit.
2308+ */
2309+ resblks = min_t(xfs_fileoff_t, (e - s), (MAXEXTLEN * nimaps));
23022310 if (unlikely(rt)) {
2303− resrtextents = qblocks = (uint)(e - s);
2311+ resrtextents = qblocks = resblks;
23042312 resrtextents /= mp->m_sb.sb_rextsize;
23052313 resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
23062314 quota_flag = XFS_QMOPT_RES_RTBLKS;
23072315 } else {
23082316 resrtextents = 0;
2309− resblks = qblocks = \
2310− XFS_DIOSTRAT_SPACE_RES(mp, (uint)(e - s));
2317+ resblks = qblocks = XFS_DIOSTRAT_SPACE_RES(mp, resblks);
23112318 quota_flag = XFS_QMOPT_RES_REGBLKS;
23122319 }
23132320
include/acpi/acpi_bus.h+0−3
@@ -377,9 +377,6 @@ struct acpi_pci_root { · 376 unmodified lines
377377
378378 u32 osc_support_set; /* _OSC state of support bits */
379379 u32 osc_control_set; /* _OSC state of control bits */
380− u32 osc_control_qry; /* the latest _OSC query result */
381−
382− u32 osc_queried:1; /* has _OSC control been queried? */
383380 };
384381
385382 /* helper */
include/asm-generic/gpio.h+13−1
@@ -16,15 +16,27 @@ · 15 unmodified lines
1616 * While the GPIO programming interface defines valid GPIO numbers
1717 * to be in the range 0..MAX_INT, this library restricts them to the
1818 * smaller range 0..ARCH_NR_GPIOS-1.
19+ *
20+ * ARCH_NR_GPIOS is somewhat arbitrary; it usually reflects the sum of
21+ * builtin/SoC GPIOs plus a number of GPIOs on expanders; the latter is
22+ * actually an estimate of a board-specific value.
1923 */
2024
2125 #ifndef ARCH_NR_GPIOS
2226 #define ARCH_NR_GPIOS 256
2327 #endif
2428
29+/*
30+ * "valid" GPIO numbers are nonnegative and may be passed to
31+ * setup routines like gpio_request(). only some valid numbers
32+ * can successfully be requested and used.
33+ *
34+ * Invalid GPIO numbers are useful for indicating no-such-GPIO in
35+ * platform data and other tables.
36+ */
37+
2538 static inline int gpio_is_valid(int number)
2639 {
27− /* only some non-negative numbers are valid */
2840 return ((unsigned)number) < ARCH_NR_GPIOS;
2941 }
3042
include/asm-generic/percpu.h+10−5
@@ -70,11 +70,16 @@ extern void setup_per_cpu_areas(void); · 69 unmodified lines
7070
7171 #else /* ! SMP */
7272
73−#define per_cpu(var, cpu) (*((void)(cpu), &(var)))
74−#define __get_cpu_var(var) (var)
75−#define __raw_get_cpu_var(var) (var)
76−#define this_cpu_ptr(ptr) per_cpu_ptr(ptr, 0)
77−#define __this_cpu_ptr(ptr) this_cpu_ptr(ptr)
73+#define VERIFY_PERCPU_PTR(__p) ({ \
74+ __verify_pcpu_ptr((__p)); \
75+ (typeof(*(__p)) __kernel __force *)(__p); \
76+})
77+
78+#define per_cpu(var, cpu) (*((void)(cpu), VERIFY_PERCPU_PTR(&(var))))
79+#define __get_cpu_var(var) (*VERIFY_PERCPU_PTR(&(var)))
80+#define __raw_get_cpu_var(var) (*VERIFY_PERCPU_PTR(&(var)))
81+#define this_cpu_ptr(ptr) per_cpu_ptr(ptr, 0)
82+#define __this_cpu_ptr(ptr) this_cpu_ptr(ptr)
7883
7984 #endif /* SMP */
8085
include/linux/acpi.h+2−2
@@ -304,8 +304,8 @@ acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context); · 303 unmodified lines
304304 OSC_PCI_EXPRESS_PME_CONTROL | \
305305 OSC_PCI_EXPRESS_AER_CONTROL | \
306306 OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL)
307−
308−extern acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 flags);
307+extern acpi_status acpi_pci_osc_control_set(acpi_handle handle,
308+ u32 *mask, u32 req);
309309 extern void acpi_early_init(void);
310310
311311 #else /* !CONFIG_ACPI */
include/linux/cgroup.h+11−1
@@ -578,7 +578,12 @@ struct task_struct *cgroup_iter_next(struct cgroup *cgrp, · 577 unmodified lines
578578 void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it);
579579 int cgroup_scan_tasks(struct cgroup_scanner *scan);
580580 int cgroup_attach_task(struct cgroup *, struct task_struct *);
581−int cgroup_attach_task_current_cg(struct task_struct *);
581+int cgroup_attach_task_all(struct task_struct *from, struct task_struct *);
582+
583+static inline int cgroup_attach_task_current_cg(struct task_struct *tsk)
584+{
585+ return cgroup_attach_task_all(current, tsk);
586+}
582587
583588 /*
584589 * CSS ID is ID for cgroup_subsys_state structs under subsys. This only works
@@ -636,6 +641,11 @@ static inline int cgroupstats_build(struct cgroupstats *stats, · 51 unmodified lines
636641 }
637642
638643 /* No cgroups - nothing to do */
644+static inline int cgroup_attach_task_all(struct task_struct *from,
645+ struct task_struct *t)
646+{
647+ return 0;
648+}
639649 static inline int cgroup_attach_task_current_cg(struct task_struct *t)
640650 {
641651 return 0;
include/linux/elevator.h+1−0
@@ -136,6 +136,7 @@ extern ssize_t elv_iosched_store(struct request_queue *, const char *, size_t); · 135 unmodified lines
136136
137137 extern int elevator_init(struct request_queue *, char *);
138138 extern void elevator_exit(struct elevator_queue *);
139+extern int elevator_change(struct request_queue *, const char *);
139140 extern int elv_rq_merge_ok(struct request *, struct bio *);
140141
141142 /*
include/linux/fanotify.h+3−10
@@ -65,14 +65,14 @@ · 64 unmodified lines
6565 FAN_ALL_PERM_EVENTS |\
6666 FAN_Q_OVERFLOW)
6767
68−#define FANOTIFY_METADATA_VERSION 1
68+#define FANOTIFY_METADATA_VERSION 2
6969
7070 struct fanotify_event_metadata {
7171 __u32 event_len;
7272 __u32 vers;
73− __s32 fd;
7473 __u64 mask;
75− __s64 pid;
74+ __s32 fd;
75+ __s32 pid;
7676 } __attribute__ ((packed));
7777
7878 struct fanotify_response {
@@ -95,11 +95,4 @@ struct fanotify_response { · 16 unmodified lines
9595 (long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \
9696 (long)(meta)->event_len <= (long)(len))
9797
98−#ifdef __KERNEL__
99−
100−struct fanotify_wait {
101− struct fsnotify_event *event;
102− __s32 fd;
103−};
104−#endif /* __KERNEL__ */
10598 #endif /* _LINUX_FANOTIFY_H */
include/linux/fsnotify_backend.h+1−0
@@ -156,6 +156,7 @@ struct fsnotify_group { · 155 unmodified lines
156156 struct mutex access_mutex;
157157 struct list_head access_list;
158158 wait_queue_head_t access_waitq;
159+ bool bypass_perm; /* protected by access_mutex */
159160 #endif /* CONFIG_FANOTIFY_ACCESS_PERMISSIONS */
160161 int f_flags;
161162 } fanotify_data;
include/linux/gpio.h+1−0
@@ -13,6 +13,7 @@ · 12 unmodified lines
1313 #include <linux/errno.h>
1414
1515 struct device;
16+struct gpio_chip;
1617
1718 /*
1819 * Some platforms don't support the GPIO programming interface.
include/linux/i2c/sx150x.h+4−0
@@ -63,6 +63,9 @@ · 62 unmodified lines
6363 * IRQ lines will appear. Similarly to gpio_base, the expander
6464 * will create a block of irqs beginning at this number.
6565 * This value is ignored if irq_summary is < 0.
66+ * @reset_during_probe: If set to true, the driver will trigger a full
67+ * reset of the chip at the beginning of the probe
68+ * in order to place it in a known state.
6669 */
6770 struct sx150x_platform_data {
6871 unsigned gpio_base;
@@ -73,6 +76,7 @@ struct sx150x_platform_data { · 4 unmodified lines
7376 u16 io_polarity;
7477 int irq_summary;
7578 unsigned irq_base;
79+ bool reset_during_probe;
7680 };
7781
7882 #endif /* __LINUX_I2C_SX150X_H */
include/linux/intel-gtt.h+20−0
@@ -0,0 +1,20 @@
1+/*
2+ * Common Intel AGPGART and GTT definitions.
3+ */
4+#ifndef _INTEL_GTT_H
5+#define _INTEL_GTT_H
6+
7+#include <linux/agp_backend.h>
8+
9+/* This is for Intel only GTT controls.
10+ *
11+ * Sandybridge: AGP_USER_CACHED_MEMORY default to LLC only
12+ */
13+
14+#define AGP_USER_CACHED_MEMORY_LLC_MLC (AGP_USER_TYPES + 2)
15+#define AGP_USER_UNCACHED_MEMORY (AGP_USER_TYPES + 4)
16+
17+/* flag for GFDT type */
18+#define AGP_USER_CACHED_MEMORY_GFDT (1 << 3)
19+
20+#endif
include/linux/io-mapping.h+12−12
@@ -79,7 +79,7 @@ io_mapping_free(struct io_mapping *mapping) · 78 unmodified lines
7979 }
8080
8181 /* Atomic map/unmap */
82−static inline void *
82+static inline void __iomem *
8383 io_mapping_map_atomic_wc(struct io_mapping *mapping,
8484 unsigned long offset,
8585 int slot)
@@ -94,12 +94,12 @@ io_mapping_map_atomic_wc(struct io_mapping *mapping, · 8 unmodified lines
9494 }
9595
9696 static inline void
97−io_mapping_unmap_atomic(void *vaddr, int slot)
97+io_mapping_unmap_atomic(void __iomem *vaddr, int slot)
9898 {
9999 iounmap_atomic(vaddr, slot);
100100 }
101101
102−static inline void *
102+static inline void __iomem *
103103 io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset)
104104 {
105105 resource_size_t phys_addr;
@@ -111,7 +111,7 @@ io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset) · 5 unmodified lines
111111 }
112112
113113 static inline void
114−io_mapping_unmap(void *vaddr)
114+io_mapping_unmap(void __iomem *vaddr)
115115 {
116116 iounmap(vaddr);
117117 }
@@ -125,38 +125,38 @@ struct io_mapping; · 7 unmodified lines
125125 static inline struct io_mapping *
126126 io_mapping_create_wc(resource_size_t base, unsigned long size)
127127 {
128− return (struct io_mapping *) ioremap_wc(base, size);
128+ return (struct io_mapping __force *) ioremap_wc(base, size);
129129 }
130130
131131 static inline void
132132 io_mapping_free(struct io_mapping *mapping)
133133 {
134− iounmap(mapping);
134+ iounmap((void __force __iomem *) mapping);
135135 }
136136
137137 /* Atomic map/unmap */
138−static inline void *
138+static inline void __iomem *
139139 io_mapping_map_atomic_wc(struct io_mapping *mapping,
140140 unsigned long offset,
141141 int slot)
142142 {
143− return ((char *) mapping) + offset;
143+ return ((char __force __iomem *) mapping) + offset;
144144 }
145145
146146 static inline void
147−io_mapping_unmap_atomic(void *vaddr, int slot)
147+io_mapping_unmap_atomic(void __iomem *vaddr, int slot)
148148 {
149149 }
150150
151151 /* Non-atomic map/unmap */
152−static inline void *
152+static inline void __iomem *
153153 io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset)
154154 {
155− return ((char *) mapping) + offset;
155+ return ((char __force __iomem *) mapping) + offset;
156156 }
157157
158158 static inline void
159−io_mapping_unmap(void *vaddr)
159+io_mapping_unmap(void __iomem *vaddr)
160160 {
161161 }
162162
include/linux/kfifo.h+29−29
@@ -214,7 +214,7 @@ __kfifo_must_check_helper(unsigned int val) · 213 unmodified lines
214214 */
215215 #define kfifo_reset(fifo) \
216216 (void)({ \
217− typeof(fifo + 1) __tmp = (fifo); \
217+ typeof((fifo) + 1) __tmp = (fifo); \
218218 __tmp->kfifo.in = __tmp->kfifo.out = 0; \
219219 })
220220
@@ -228,7 +228,7 @@ __kfifo_must_check_helper(unsigned int val) · 7 unmodified lines
228228 */
229229 #define kfifo_reset_out(fifo) \
230230 (void)({ \
231− typeof(fifo + 1) __tmp = (fifo); \
231+ typeof((fifo) + 1) __tmp = (fifo); \
232232 __tmp->kfifo.out = __tmp->kfifo.in; \
233233 })
234234
@@ -238,7 +238,7 @@ __kfifo_must_check_helper(unsigned int val) · 3 unmodified lines
238238 */
239239 #define kfifo_len(fifo) \
240240 ({ \
241− typeof(fifo + 1) __tmpl = (fifo); \
241+ typeof((fifo) + 1) __tmpl = (fifo); \
242242 __tmpl->kfifo.in - __tmpl->kfifo.out; \
243243 })
244244
@@ -248,7 +248,7 @@ __kfifo_must_check_helper(unsigned int val) · 3 unmodified lines
248248 */
249249 #define kfifo_is_empty(fifo) \
250250 ({ \
251− typeof(fifo + 1) __tmpq = (fifo); \
251+ typeof((fifo) + 1) __tmpq = (fifo); \
252252 __tmpq->kfifo.in == __tmpq->kfifo.out; \
253253 })
254254
@@ -258,7 +258,7 @@ __kfifo_must_check_helper(unsigned int val) · 3 unmodified lines
258258 */
259259 #define kfifo_is_full(fifo) \
260260 ({ \
261− typeof(fifo + 1) __tmpq = (fifo); \
261+ typeof((fifo) + 1) __tmpq = (fifo); \
262262 kfifo_len(__tmpq) > __tmpq->kfifo.mask; \
263263 })
264264
@@ -269,7 +269,7 @@ __kfifo_must_check_helper(unsigned int val) · 4 unmodified lines
269269 #define kfifo_avail(fifo) \
270270 __kfifo_must_check_helper( \
271271 ({ \
272− typeof(fifo + 1) __tmpq = (fifo); \
272+ typeof((fifo) + 1) __tmpq = (fifo); \
273273 const size_t __recsize = sizeof(*__tmpq->rectype); \
274274 unsigned int __avail = kfifo_size(__tmpq) - kfifo_len(__tmpq); \
275275 (__recsize) ? ((__avail <= __recsize) ? 0 : \
@@ -284,7 +284,7 @@ __kfifo_must_check_helper( \ · 8 unmodified lines
284284 */
285285 #define kfifo_skip(fifo) \
286286 (void)({ \
287− typeof(fifo + 1) __tmp = (fifo); \
287+ typeof((fifo) + 1) __tmp = (fifo); \
288288 const size_t __recsize = sizeof(*__tmp->rectype); \
289289 struct __kfifo *__kfifo = &__tmp->kfifo; \
290290 if (__recsize) \
@@ -302,7 +302,7 @@ __kfifo_must_check_helper( \ · 11 unmodified lines
302302 #define kfifo_peek_len(fifo) \
303303 __kfifo_must_check_helper( \
304304 ({ \
305− typeof(fifo + 1) __tmp = (fifo); \
305+ typeof((fifo) + 1) __tmp = (fifo); \
306306 const size_t __recsize = sizeof(*__tmp->rectype); \
307307 struct __kfifo *__kfifo = &__tmp->kfifo; \
308308 (!__recsize) ? kfifo_len(__tmp) * sizeof(*__tmp->type) : \
@@ -325,7 +325,7 @@ __kfifo_must_check_helper( \ · 16 unmodified lines
325325 #define kfifo_alloc(fifo, size, gfp_mask) \
326326 __kfifo_must_check_helper( \
327327 ({ \
328− typeof(fifo + 1) __tmp = (fifo); \
328+ typeof((fifo) + 1) __tmp = (fifo); \
329329 struct __kfifo *__kfifo = &__tmp->kfifo; \
330330 __is_kfifo_ptr(__tmp) ? \
331331 __kfifo_alloc(__kfifo, size, sizeof(*__tmp->type), gfp_mask) : \
@@ -339,7 +339,7 @@ __kfifo_must_check_helper( \ · 7 unmodified lines
339339 */
340340 #define kfifo_free(fifo) \
341341 ({ \
342− typeof(fifo + 1) __tmp = (fifo); \
342+ typeof((fifo) + 1) __tmp = (fifo); \
343343 struct __kfifo *__kfifo = &__tmp->kfifo; \
344344 if (__is_kfifo_ptr(__tmp)) \
345345 __kfifo_free(__kfifo); \
@@ -358,7 +358,7 @@ __kfifo_must_check_helper( \ · 12 unmodified lines
358358 */
359359 #define kfifo_init(fifo, buffer, size) \
360360 ({ \
361− typeof(fifo + 1) __tmp = (fifo); \
361+ typeof((fifo) + 1) __tmp = (fifo); \
362362 struct __kfifo *__kfifo = &__tmp->kfifo; \
363363 __is_kfifo_ptr(__tmp) ? \
364364 __kfifo_init(__kfifo, buffer, size, sizeof(*__tmp->type)) : \
@@ -379,8 +379,8 @@ __kfifo_must_check_helper( \ · 14 unmodified lines
379379 */
380380 #define kfifo_put(fifo, val) \
381381 ({ \
382− typeof(fifo + 1) __tmp = (fifo); \
383− typeof(val + 1) __val = (val); \
382+ typeof((fifo) + 1) __tmp = (fifo); \
383+ typeof((val) + 1) __val = (val); \
384384 unsigned int __ret; \
385385 const size_t __recsize = sizeof(*__tmp->rectype); \
386386 struct __kfifo *__kfifo = &__tmp->kfifo; \
@@ -421,8 +421,8 @@ __kfifo_must_check_helper( \ · 34 unmodified lines
421421 #define kfifo_get(fifo, val) \
422422 __kfifo_must_check_helper( \
423423 ({ \
424− typeof(fifo + 1) __tmp = (fifo); \
425− typeof(val + 1) __val = (val); \
424+ typeof((fifo) + 1) __tmp = (fifo); \
425+ typeof((val) + 1) __val = (val); \
426426 unsigned int __ret; \
427427 const size_t __recsize = sizeof(*__tmp->rectype); \
428428 struct __kfifo *__kfifo = &__tmp->kfifo; \
@@ -462,8 +462,8 @@ __kfifo_must_check_helper( \ · 33 unmodified lines
462462 #define kfifo_peek(fifo, val) \
463463 __kfifo_must_check_helper( \
464464 ({ \
465− typeof(fifo + 1) __tmp = (fifo); \
466− typeof(val + 1) __val = (val); \
465+ typeof((fifo) + 1) __tmp = (fifo); \
466+ typeof((val) + 1) __val = (val); \
467467 unsigned int __ret; \
468468 const size_t __recsize = sizeof(*__tmp->rectype); \
469469 struct __kfifo *__kfifo = &__tmp->kfifo; \
@@ -501,8 +501,8 @@ __kfifo_must_check_helper( \ · 31 unmodified lines
501501 */
502502 #define kfifo_in(fifo, buf, n) \
503503 ({ \
504− typeof(fifo + 1) __tmp = (fifo); \
505− typeof(buf + 1) __buf = (buf); \
504+ typeof((fifo) + 1) __tmp = (fifo); \
505+ typeof((buf) + 1) __buf = (buf); \
506506 unsigned long __n = (n); \
507507 const size_t __recsize = sizeof(*__tmp->rectype); \
508508 struct __kfifo *__kfifo = &__tmp->kfifo; \
@@ -554,8 +554,8 @@ __kfifo_must_check_helper( \ · 45 unmodified lines
554554 #define kfifo_out(fifo, buf, n) \
555555 __kfifo_must_check_helper( \
556556 ({ \
557− typeof(fifo + 1) __tmp = (fifo); \
558− typeof(buf + 1) __buf = (buf); \
557+ typeof((fifo) + 1) __tmp = (fifo); \
558+ typeof((buf) + 1) __buf = (buf); \
559559 unsigned long __n = (n); \
560560 const size_t __recsize = sizeof(*__tmp->rectype); \
561561 struct __kfifo *__kfifo = &__tmp->kfifo; \
@@ -611,7 +611,7 @@ __kfifo_must_check_helper( \ · 49 unmodified lines
611611 #define kfifo_from_user(fifo, from, len, copied) \
612612 __kfifo_must_check_helper( \
613613 ({ \
614− typeof(fifo + 1) __tmp = (fifo); \
614+ typeof((fifo) + 1) __tmp = (fifo); \
615615 const void __user *__from = (from); \
616616 unsigned int __len = (len); \
617617 unsigned int *__copied = (copied); \
@@ -639,7 +639,7 @@ __kfifo_must_check_helper( \ · 21 unmodified lines
639639 #define kfifo_to_user(fifo, to, len, copied) \
640640 __kfifo_must_check_helper( \
641641 ({ \
642− typeof(fifo + 1) __tmp = (fifo); \
642+ typeof((fifo) + 1) __tmp = (fifo); \
643643 void __user *__to = (to); \
644644 unsigned int __len = (len); \
645645 unsigned int *__copied = (copied); \
@@ -666,7 +666,7 @@ __kfifo_must_check_helper( \ · 20 unmodified lines
666666 */
667667 #define kfifo_dma_in_prepare(fifo, sgl, nents, len) \
668668 ({ \
669− typeof(fifo + 1) __tmp = (fifo); \
669+ typeof((fifo) + 1) __tmp = (fifo); \
670670 struct scatterlist *__sgl = (sgl); \
671671 int __nents = (nents); \
672672 unsigned int __len = (len); \
@@ -690,7 +690,7 @@ __kfifo_must_check_helper( \ · 17 unmodified lines
690690 */
691691 #define kfifo_dma_in_finish(fifo, len) \
692692 (void)({ \
693− typeof(fifo + 1) __tmp = (fifo); \
693+ typeof((fifo) + 1) __tmp = (fifo); \
694694 unsigned int __len = (len); \
695695 const size_t __recsize = sizeof(*__tmp->rectype); \
696696 struct __kfifo *__kfifo = &__tmp->kfifo; \
@@ -717,7 +717,7 @@ __kfifo_must_check_helper( \ · 20 unmodified lines
717717 */
718718 #define kfifo_dma_out_prepare(fifo, sgl, nents, len) \
719719 ({ \
720− typeof(fifo + 1) __tmp = (fifo); \
720+ typeof((fifo) + 1) __tmp = (fifo); \
721721 struct scatterlist *__sgl = (sgl); \
722722 int __nents = (nents); \
723723 unsigned int __len = (len); \
@@ -741,7 +741,7 @@ __kfifo_must_check_helper( \ · 17 unmodified lines
741741 */
742742 #define kfifo_dma_out_finish(fifo, len) \
743743 (void)({ \
744− typeof(fifo + 1) __tmp = (fifo); \
744+ typeof((fifo) + 1) __tmp = (fifo); \
745745 unsigned int __len = (len); \
746746 const size_t __recsize = sizeof(*__tmp->rectype); \
747747 struct __kfifo *__kfifo = &__tmp->kfifo; \
@@ -766,8 +766,8 @@ __kfifo_must_check_helper( \ · 18 unmodified lines
766766 #define kfifo_out_peek(fifo, buf, n) \
767767 __kfifo_must_check_helper( \
768768 ({ \
769− typeof(fifo + 1) __tmp = (fifo); \
770− typeof(buf + 1) __buf = (buf); \
769+ typeof((fifo) + 1) __tmp = (fifo); \
770+ typeof((buf) + 1) __buf = (buf); \
771771 unsigned long __n = (n); \
772772 const size_t __recsize = sizeof(*__tmp->rectype); \
773773 struct __kfifo *__kfifo = &__tmp->kfifo; \
include/linux/ksm.h+9−11
@@ -16,6 +16,9 @@ · 15 unmodified lines
1616 struct stable_node;
1717 struct mem_cgroup;
1818
19+struct page *ksm_does_need_to_copy(struct page *page,
20+ struct vm_area_struct *vma, unsigned long address);
21+
1922 #ifdef CONFIG_KSM
2023 int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
2124 unsigned long end, int advice, unsigned long *vm_flags);
@@ -70,19 +73,14 @@ static inline void set_page_stable_node(struct page *page, · 48 unmodified lines
7073 * We'd like to make this conditional on vma->vm_flags & VM_MERGEABLE,
7174 * but what if the vma was unmerged while the page was swapped out?
7275 */
73−struct page *ksm_does_need_to_copy(struct page *page,
74− struct vm_area_struct *vma, unsigned long address);
75−static inline struct page *ksm_might_need_to_copy(struct page *page,
76+static inline int ksm_might_need_to_copy(struct page *page,
7677 struct vm_area_struct *vma, unsigned long address)
7778 {
7879 struct anon_vma *anon_vma = page_anon_vma(page);
7980
80− if (!anon_vma ||
81− (anon_vma->root == vma->anon_vma->root &&
82− page->index == linear_page_index(vma, address)))
83− return page;
84−
85− return ksm_does_need_to_copy(page, vma, address);
81+ return anon_vma &&
82+ (anon_vma->root != vma->anon_vma->root ||
83+ page->index != linear_page_index(vma, address));
8684 }
8785
8886 int page_referenced_ksm(struct page *page,
@@ -115,10 +113,10 @@ static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start, · 26 unmodified lines
115113 return 0;
116114 }
117115
118−static inline struct page *ksm_might_need_to_copy(struct page *page,
116+static inline int ksm_might_need_to_copy(struct page *page,
119117 struct vm_area_struct *vma, unsigned long address)
120118 {
121− return page;
119+ return 0;
122120 }
123121
124122 static inline int page_referenced_ksm(struct page *page,
include/linux/lglock.h+2−2
@@ -150,7 +150,7 @@ · 149 unmodified lines
150150 int i; \
151151 preempt_disable(); \
152152 rwlock_acquire(&name##_lock_dep_map, 0, 0, _RET_IP_); \
153− for_each_online_cpu(i) { \
153+ for_each_possible_cpu(i) { \
154154 arch_spinlock_t *lock; \
155155 lock = &per_cpu(name##_lock, i); \
156156 arch_spin_lock(lock); \
@@ -161,7 +161,7 @@ · 4 unmodified lines
161161 void name##_global_unlock(void) { \
162162 int i; \
163163 rwlock_release(&name##_lock_dep_map, 1, _RET_IP_); \
164− for_each_online_cpu(i) { \
164+ for_each_possible_cpu(i) { \
165165 arch_spinlock_t *lock; \
166166 lock = &per_cpu(name##_lock, i); \
167167 arch_spin_unlock(lock); \
include/linux/libata.h+3−1
@@ -335,6 +335,7 @@ enum { · 334 unmodified lines
335335 ATA_EHI_HOTPLUGGED = (1 << 0), /* could have been hotplugged */
336336 ATA_EHI_NO_AUTOPSY = (1 << 2), /* no autopsy */
337337 ATA_EHI_QUIET = (1 << 3), /* be quiet */
338+ ATA_EHI_NO_RECOVERY = (1 << 4), /* no recovery */
338339
339340 ATA_EHI_DID_SOFTRESET = (1 << 16), /* already soft-reset this port */
340341 ATA_EHI_DID_HARDRESET = (1 << 17), /* already soft-reset this port */
@@ -723,6 +724,7 @@ struct ata_port { · 382 unmodified lines
723724 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
724725 u8 ctl; /* cache of ATA control register */
725726 u8 last_ctl; /* Cache last written value */
727+ struct ata_link* sff_pio_task_link; /* link currently used */
726728 struct delayed_work sff_pio_task;
727729 #ifdef CONFIG_ATA_BMDMA
728730 struct ata_bmdma_prd *bmdma_prd; /* BMDMA SG list */
@@ -1594,7 +1596,7 @@ extern void ata_sff_irq_on(struct ata_port *ap); · 865 unmodified lines
15941596 extern void ata_sff_irq_clear(struct ata_port *ap);
15951597 extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
15961598 u8 status, int in_wq);
1597−extern void ata_sff_queue_pio_task(struct ata_port *ap, unsigned long delay);
1599+extern void ata_sff_queue_pio_task(struct ata_link *link, unsigned long delay);
15981600 extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc);
15991601 extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc);
16001602 extern unsigned int ata_sff_port_intr(struct ata_port *ap,
include/linux/miscdevice.h+1−0
@@ -33,6 +33,7 @@ · 32 unmodified lines
3333 #define MWAVE_MINOR 219 /* ACP/Mwave Modem */
3434 #define MPT_MINOR 220
3535 #define MPT2SAS_MINOR 221
36+#define UINPUT_MINOR 223
3637 #define HPET_MINOR 228
3738 #define FUSE_MINOR 229
3839 #define KVM_MINOR 232
include/linux/mm.h+14−0
@@ -864,6 +864,12 @@ int set_page_dirty(struct page *page); · 863 unmodified lines
864864 int set_page_dirty_lock(struct page *page);
865865 int clear_page_dirty_for_io(struct page *page);
866866
867+/* Is the vma a continuation of the stack vma above it? */
868+static inline int vma_stack_continue(struct vm_area_struct *vma, unsigned long addr)
869+{
870+ return vma && (vma->vm_end == addr) && (vma->vm_flags & VM_GROWSDOWN);
871+}
872+
867873 extern unsigned long move_page_tables(struct vm_area_struct *vma,
868874 unsigned long old_addr, struct vm_area_struct *new_vma,
869875 unsigned long new_addr, unsigned long len);
@@ -1363,7 +1369,15 @@ static inline unsigned long vma_pages(struct vm_area_struct *vma) · 493 unmodified lines
13631369 return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
13641370 }
13651371
1372+#ifdef CONFIG_MMU
13661373 pgprot_t vm_get_page_prot(unsigned long vm_flags);
1374+#else
1375+static inline pgprot_t vm_get_page_prot(unsigned long vm_flags)
1376+{
1377+ return __pgprot(0);
1378+}
1379+#endif
1380+
13671381 struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr);
13681382 int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
13691383 unsigned long pfn, unsigned long size, pgprot_t);
include/linux/mmc/sdio.h+2−0
@@ -38,6 +38,8 @@ · 37 unmodified lines
3838 * [8:0] Byte/block count
3939 */
4040
41+#define R4_MEMORY_PRESENT (1 << 27)
42+
4143 /*
4244 SDIO status in R5
4345 Type
include/linux/mmzone.h+13−0
@@ -283,6 +283,13 @@ struct zone { · 282 unmodified lines
283283 /* zone watermarks, access with *_wmark_pages(zone) macros */
284284 unsigned long watermark[NR_WMARK];
285285
286+ /*
287+ * When free pages are below this point, additional steps are taken
288+ * when reading the number of free pages to avoid per-cpu counter
289+ * drift allowing watermarks to be breached
290+ */
291+ unsigned long percpu_drift_mark;
292+
286293 /*
287294 * We don't know if the memory that we're going to allocate will be freeable
288295 * or/and it will be released eventually, so to avoid totally wasting several
@@ -441,6 +448,12 @@ static inline int zone_is_oom_locked(const struct zone *zone) · 152 unmodified lines
441448 return test_bit(ZONE_OOM_LOCKED, &zone->flags);
442449 }
443450
451+#ifdef CONFIG_SMP
452+unsigned long zone_nr_free_pages(struct zone *zone);
453+#else
454+#define zone_nr_free_pages(zone) zone_page_state(zone, NR_FREE_PAGES)
455+#endif /* CONFIG_SMP */
456+
444457 /*
445458 * The "priority" of VM scanning is how much of the queues we will scan in one
446459 * go. A value of 12 for DEF_PRIORITY implies that we will scan 1/4096th of the
include/linux/mutex.h+8−0
@@ -78,6 +78,14 @@ struct mutex_waiter { · 77 unmodified lines
7878 # include <linux/mutex-debug.h>
7979 #else
8080 # define __DEBUG_MUTEX_INITIALIZER(lockname)
81+/**
82+ * mutex_init - initialize the mutex
83+ * @mutex: the mutex to be initialized
84+ *
85+ * Initialize the mutex to unlocked state.
86+ *
87+ * It is not allowed to initialize an already locked mutex.
88+ */
8189 # define mutex_init(mutex) \
8290 do { \
8391 static struct lock_class_key __key; \
include/linux/pci.h+3−0
@@ -1214,6 +1214,9 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus, · 1213 unmodified lines
12141214 unsigned int devfn)
12151215 { return NULL; }
12161216
1217+static inline int pci_domain_nr(struct pci_bus *bus)
1218+{ return 0; }
1219+
12171220 #define dev_is_pci(d) (false)
12181221 #define dev_is_pf(d) (false)
12191222 #define dev_num_vf(d) (0)
include/linux/pci_ids.h+2−0
@@ -2300,6 +2300,8 @@ · 2299 unmodified lines
23002300 #define PCI_DEVICE_ID_P2010 0x0079
23012301 #define PCI_DEVICE_ID_P1020E 0x0100
23022302 #define PCI_DEVICE_ID_P1020 0x0101
2303+#define PCI_DEVICE_ID_P1021E 0x0102
2304+#define PCI_DEVICE_ID_P1021 0x0103
23032305 #define PCI_DEVICE_ID_P1011E 0x0108
23042306 #define PCI_DEVICE_ID_P1011 0x0109
23052307 #define PCI_DEVICE_ID_P1022E 0x0110
include/linux/percpu.h+1−1
@@ -149,7 +149,7 @@ extern void __init percpu_init_late(void); · 148 unmodified lines
149149
150150 #else /* CONFIG_SMP */
151151
152−#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); })
152+#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR((ptr)); })
153153
154154 /* can't distinguish from other static vars, always false */
155155 static inline bool is_kernel_percpu_address(unsigned long addr)
include/linux/quotaops.h+8−2
@@ -274,8 +274,14 @@ static inline int dquot_alloc_space(struct inode *inode, qsize_t nr) · 273 unmodified lines
274274 int ret;
275275
276276 ret = dquot_alloc_space_nodirty(inode, nr);
277− if (!ret)
278− mark_inode_dirty_sync(inode);
277+ if (!ret) {
278+ /*
279+ * Mark inode fully dirty. Since we are allocating blocks, inode
280+ * would become fully dirty soon anyway and it reportedly
281+ * reduces inode_lock contention.
282+ */
283+ mark_inode_dirty(inode);
284+ }
279285 return ret;
280286 }
281287
include/linux/semaphore.h+3−0
@@ -26,6 +26,9 @@ struct semaphore { · 25 unmodified lines
2626 .wait_list = LIST_HEAD_INIT((name).wait_list), \
2727 }
2828
29+#define DEFINE_SEMAPHORE(name) \
30+ struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
31+
2932 #define DECLARE_MUTEX(name) \
3033 struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
3134
include/linux/serial.h+1−2
@@ -77,8 +77,7 @@ struct serial_struct { · 76 unmodified lines
7777 #define PORT_16654 11
7878 #define PORT_16850 12
7979 #define PORT_RSA 13 /* RSA-DV II/S card */
80−#define PORT_U6_16550A 14
81−#define PORT_MAX 14
80+#define PORT_MAX 13
8281
8382 #define SERIAL_IO_PORT 0
8483 #define SERIAL_IO_HUB6 1
include/linux/serial_core.h+3−2
@@ -44,7 +44,8 @@ · 43 unmodified lines
4444 #define PORT_RM9000 16 /* PMC-Sierra RM9xxx internal UART */
4545 #define PORT_OCTEON 17 /* Cavium OCTEON internal UART */
4646 #define PORT_AR7 18 /* Texas Instruments AR7 internal UART */
47−#define PORT_MAX_8250 18 /* max port ID */
47+#define PORT_U6_16550A 19 /* ST-Ericsson U6xxx internal UART */
48+#define PORT_MAX_8250 19 /* max port ID */
4849
4950 /*
5051 * ARM specific type numbers. These are not currently guaranteed
@@ -465,7 +466,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) · 414 unmodified lines
465466 #ifdef SUPPORT_SYSRQ
466467 if (port->sysrq) {
467468 if (ch && time_before(jiffies, port->sysrq)) {
468− handle_sysrq(ch, port->state->port.tty);
469+ handle_sysrq(ch);
469470 port->sysrq = 0;
470471 return 1;
471472 }
include/linux/spi/dw_spi.h+2−0
@@ -14,7 +14,9 @@ · 13 unmodified lines
1414 #define SPI_MODE_OFFSET 6
1515 #define SPI_SCPH_OFFSET 6
1616 #define SPI_SCOL_OFFSET 7
17+
1718 #define SPI_TMOD_OFFSET 8
19+#define SPI_TMOD_MASK (0x3 << SPI_TMOD_OFFSET)
1820 #define SPI_TMOD_TR 0x0 /* xmit & recv */
1921 #define SPI_TMOD_TO 0x1 /* xmit only */
2022 #define SPI_TMOD_RO 0x2 /* recv only */
include/linux/swap.h+3−8
@@ -19,6 +19,7 @@ struct bio; · 18 unmodified lines
1919 #define SWAP_FLAG_PREFER 0x8000 /* set if swap priority specified */
2020 #define SWAP_FLAG_PRIO_MASK 0x7fff
2121 #define SWAP_FLAG_PRIO_SHIFT 0
22+#define SWAP_FLAG_DISCARD 0x10000 /* discard swap cluster after use */
2223
2324 static inline int current_is_kswapd(void)
2425 {
@@ -142,7 +143,7 @@ struct swap_extent { · 117 unmodified lines
142143 enum {
143144 SWP_USED = (1 << 0), /* is slot in swap_info[] used? */
144145 SWP_WRITEOK = (1 << 1), /* ok to write to this swap? */
145− SWP_DISCARDABLE = (1 << 2), /* blkdev supports discard */
146+ SWP_DISCARDABLE = (1 << 2), /* swapon+blkdev support discard */
146147 SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */
147148 SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */
148149 SWP_CONTINUED = (1 << 5), /* swap_map has count continuation */
@@ -315,6 +316,7 @@ extern long nr_swap_pages; · 166 unmodified lines
315316 extern long total_swap_pages;
316317 extern void si_swapinfo(struct sysinfo *);
317318 extern swp_entry_t get_swap_page(void);
319+extern swp_entry_t get_swap_page_of_type(int);
318320 extern int valid_swaphandles(swp_entry_t, unsigned long *);
319321 extern int add_swap_count_continuation(swp_entry_t, gfp_t);
320322 extern void swap_shmem_alloc(swp_entry_t);
@@ -331,13 +333,6 @@ extern int reuse_swap_page(struct page *); · 10 unmodified lines
331333 extern int try_to_free_swap(struct page *);
332334 struct backing_dev_info;
333335
334−#ifdef CONFIG_HIBERNATION
335−void hibernation_freeze_swap(void);
336−void hibernation_thaw_swap(void);
337−swp_entry_t get_swap_for_hibernation(int type);
338−void swap_free_for_hibernation(swp_entry_t val);
339−#endif
340−
341336 /* linux/mm/thrash.c */
342337 extern struct mm_struct *swap_token_mm;
343338 extern void grab_swap_token(struct mm_struct *);
include/linux/sysrq.h+9−7
@@ -15,9 +15,7 @@ · 14 unmodified lines
1515 #define _LINUX_SYSRQ_H
1616
1717 #include <linux/errno.h>
18−
19−struct pt_regs;
20−struct tty_struct;
18+#include <linux/types.h>
2119
2220 /* Possible values of bitmask for enabling sysrq functions */
2321 /* 0x0001 is reserved for enable everything */
@@ -31,7 +29,7 @@ struct tty_struct; · 7 unmodified lines
3129 #define SYSRQ_ENABLE_RTNICE 0x0100
3230
3331 struct sysrq_key_op {
34− void (*handler)(int, struct tty_struct *);
32+ void (*handler)(int);
3533 char *help_msg;
3634 char *action_msg;
3735 int enable_mask;
@@ -44,8 +42,8 @@ struct sysrq_key_op { · 6 unmodified lines
4442 * are available -- else NULL's).
4543 */
4644
47−void handle_sysrq(int key, struct tty_struct *tty);
48−void __handle_sysrq(int key, struct tty_struct *tty, int check_mask);
45+void handle_sysrq(int key);
46+void __handle_sysrq(int key, bool check_mask);
4947 int register_sysrq_key(int key, struct sysrq_key_op *op);
5048 int unregister_sysrq_key(int key, struct sysrq_key_op *op);
5149 struct sysrq_key_op *__sysrq_get_key_op(int key);
@@ -54,7 +52,11 @@ int sysrq_toggle_support(int enable_mask); · 2 unmodified lines
5452
5553 #else
5654
57−static inline void handle_sysrq(int key, struct tty_struct *tty)
55+static inline void handle_sysrq(int key)
56+{
57+}
58+
59+static inline void __handle_sysrq(int key, bool check_mask)
5860 {
5961 }
6062
include/linux/uinput.h+0−1
@@ -37,7 +37,6 @@ · 36 unmodified lines
3737 #define UINPUT_VERSION 3
3838
3939 #ifdef __KERNEL__
40−#define UINPUT_MINOR 223
4140 #define UINPUT_NAME "uinput"
4241 #define UINPUT_BUFFER_SIZE 16
4342 #define UINPUT_NUM_REQUESTS 16
include/linux/usb/serial.h+1−2
@@ -342,8 +342,7 @@ extern int usb_serial_generic_submit_read_urb(struct usb_serial_port *port, · 341 unmodified lines
342342 extern void usb_serial_generic_process_read_urb(struct urb *urb);
343343 extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port,
344344 void *dest, size_t size);
345−extern int usb_serial_handle_sysrq_char(struct tty_struct *tty,
346− struct usb_serial_port *port,
345+extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port,
347346 unsigned int ch);
348347 extern int usb_serial_handle_break(struct usb_serial_port *port);
349348
include/linux/vgaarb.h+13−2
@@ -93,8 +93,11 @@ extern void vga_set_legacy_decoding(struct pci_dev *pdev, · 92 unmodified lines
9393 * Nested calls are supported (a per-resource counter is maintained)
9494 */
9595
96−extern int vga_get(struct pci_dev *pdev, unsigned int rsrc,
97− int interruptible);
96+#if defined(CONFIG_VGA_ARB)
97+extern int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible);
98+#else
99+static inline int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible) { return 0; }
100+#endif
98101
99102 /**
100103 * vga_get_interruptible
@@ -131,7 +134,11 @@ static inline int vga_get_uninterruptible(struct pci_dev *pdev, · 30 unmodified lines
131134 * are already locked by another card. It can be called in any context
132135 */
133136
137+#if defined(CONFIG_VGA_ARB)
134138 extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc);
139+#else
140+static inline int vga_tryget(struct pci_dev *pdev, unsigned int rsrc) { return 0; }
141+#endif
135142
136143 /**
137144 * vga_put - release lock on legacy VGA resources
@@ -146,7 +153,11 @@ extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc); · 8 unmodified lines
146153 * released if the counter reaches 0.
147154 */
148155
156+#if defined(CONFIG_VGA_ARB)
149157 extern void vga_put(struct pci_dev *pdev, unsigned int rsrc);
158+#else
159+#define vga_put(pdev, rsrc)
160+#endif
150161
151162
152163 /**
include/linux/vmstat.h+22−0
@@ -170,6 +170,28 @@ static inline unsigned long zone_page_state(struct zone *zone, · 169 unmodified lines
170170 return x;
171171 }
172172
173+/*
174+ * More accurate version that also considers the currently pending
175+ * deltas. For that we need to loop over all cpus to find the current
176+ * deltas. There is no synchronization so the result cannot be
177+ * exactly accurate either.
178+ */
179+static inline unsigned long zone_page_state_snapshot(struct zone *zone,
180+ enum zone_stat_item item)
181+{
182+ long x = atomic_long_read(&zone->vm_stat[item]);
183+
184+#ifdef CONFIG_SMP
185+ int cpu;
186+ for_each_online_cpu(cpu)
187+ x += per_cpu_ptr(zone->pageset, cpu)->vm_stat_diff[item];
188+
189+ if (x < 0)
190+ x = 0;
191+#endif
192+ return x;
193+}
194+
173195 extern unsigned long global_reclaimable_pages(void);
174196 extern unsigned long zone_reclaimable_pages(struct zone *zone);
175197
include/linux/workqueue.h+11−7
@@ -25,18 +25,20 @@ typedef void (*work_func_t)(struct work_struct *work); · 24 unmodified lines
2525
2626 enum {
2727 WORK_STRUCT_PENDING_BIT = 0, /* work item is pending execution */
28− WORK_STRUCT_CWQ_BIT = 1, /* data points to cwq */
29− WORK_STRUCT_LINKED_BIT = 2, /* next work is linked to this one */
28+ WORK_STRUCT_DELAYED_BIT = 1, /* work item is delayed */
29+ WORK_STRUCT_CWQ_BIT = 2, /* data points to cwq */
30+ WORK_STRUCT_LINKED_BIT = 3, /* next work is linked to this one */
3031 #ifdef CONFIG_DEBUG_OBJECTS_WORK
31− WORK_STRUCT_STATIC_BIT = 3, /* static initializer (debugobjects) */
32− WORK_STRUCT_COLOR_SHIFT = 4, /* color for workqueue flushing */
32+ WORK_STRUCT_STATIC_BIT = 4, /* static initializer (debugobjects) */
33+ WORK_STRUCT_COLOR_SHIFT = 5, /* color for workqueue flushing */
3334 #else
34− WORK_STRUCT_COLOR_SHIFT = 3, /* color for workqueue flushing */
35+ WORK_STRUCT_COLOR_SHIFT = 4, /* color for workqueue flushing */
3536 #endif
3637
3738 WORK_STRUCT_COLOR_BITS = 4,
3839
3940 WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT,
41+ WORK_STRUCT_DELAYED = 1 << WORK_STRUCT_DELAYED_BIT,
4042 WORK_STRUCT_CWQ = 1 << WORK_STRUCT_CWQ_BIT,
4143 WORK_STRUCT_LINKED = 1 << WORK_STRUCT_LINKED_BIT,
4244 #ifdef CONFIG_DEBUG_OBJECTS_WORK
@@ -59,8 +61,8 @@ enum { · 16 unmodified lines
5961
6062 /*
6163 * Reserve 7 bits off of cwq pointer w/ debugobjects turned
62− * off. This makes cwqs aligned to 128 bytes which isn't too
63− * excessive while allowing 15 workqueue flush colors.
64+ * off. This makes cwqs aligned to 256 bytes and allows 15
65+ * workqueue flush colors.
6466 */
6567 WORK_STRUCT_FLAG_BITS = WORK_STRUCT_COLOR_SHIFT +
6668 WORK_STRUCT_COLOR_BITS,
@@ -241,6 +243,8 @@ enum { · 174 unmodified lines
241243 WQ_HIGHPRI = 1 << 4, /* high priority */
242244 WQ_CPU_INTENSIVE = 1 << 5, /* cpu instensive workqueue */
243245
246+ WQ_DYING = 1 << 6, /* internal: workqueue is dying */
247+
244248 WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */
245249 WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */
246250 WQ_DFL_ACTIVE = WQ_MAX_ACTIVE / 2,
include/net/cls_cgroup.h+8−2
@@ -27,11 +27,17 @@ struct cgroup_cls_state · 26 unmodified lines
2727 #ifdef CONFIG_NET_CLS_CGROUP
2828 static inline u32 task_cls_classid(struct task_struct *p)
2929 {
30+ int classid;
31+
3032 if (in_interrupt())
3133 return 0;
3234
33− return container_of(task_subsys_state(p, net_cls_subsys_id),
34− struct cgroup_cls_state, css)->classid;
35+ rcu_read_lock();
36+ classid = container_of(task_subsys_state(p, net_cls_subsys_id),
37+ struct cgroup_cls_state, css)->classid;
38+ rcu_read_unlock();
39+
40+ return classid;
3541 }
3642 #else
3743 extern int net_cls_subsys_id;
include/net/ip_vs.h+3−0
@@ -955,6 +955,9 @@ static inline __wsum ip_vs_check_diff2(__be16 old, __be16 new, __wsum oldsum) · 954 unmodified lines
955955 return csum_partial(diff, sizeof(diff), oldsum);
956956 }
957957
958+extern void ip_vs_update_conntrack(struct sk_buff *skb, struct ip_vs_conn *cp,
959+ int outin);
960+
958961 #endif /* __KERNEL__ */
959962
960963 #endif /* _NET_IP_VS_H */
include/net/sock.h+1−0
@@ -752,6 +752,7 @@ struct proto { · 751 unmodified lines
752752 /* Keeping track of sk's, looking them up, and port selection methods. */
753753 void (*hash)(struct sock *sk);
754754 void (*unhash)(struct sock *sk);
755+ void (*rehash)(struct sock *sk);
755756 int (*get_port)(struct sock *sk, unsigned short snum);
756757
757758 /* Keeping track of sockets in use */
include/net/tcp.h+14−4
@@ -268,11 +268,21 @@ static inline int between(__u32 seq1, __u32 seq2, __u32 seq3) · 267 unmodified lines
268268 return seq3 - seq2 >= seq1 - seq2;
269269 }
270270
271−static inline int tcp_too_many_orphans(struct sock *sk, int num)
271+static inline bool tcp_too_many_orphans(struct sock *sk, int shift)
272272 {
273− return (num > sysctl_tcp_max_orphans) ||
274− (sk->sk_wmem_queued > SOCK_MIN_SNDBUF &&
275− atomic_read(&tcp_memory_allocated) > sysctl_tcp_mem[2]);
273+ struct percpu_counter *ocp = sk->sk_prot->orphan_count;
274+ int orphans = percpu_counter_read_positive(ocp);
275+
276+ if (orphans << shift > sysctl_tcp_max_orphans) {
277+ orphans = percpu_counter_sum_positive(ocp);
278+ if (orphans << shift > sysctl_tcp_max_orphans)
279+ return true;
280+ }
281+
282+ if (sk->sk_wmem_queued > SOCK_MIN_SNDBUF &&
283+ atomic_read(&tcp_memory_allocated) > sysctl_tcp_mem[2])
284+ return true;
285+ return false;
276286 }
277287
278288 /* syncookies: remember time of last synqueue overflow */
include/net/udp.h+1−0
@@ -151,6 +151,7 @@ static inline void udp_lib_hash(struct sock *sk) · 150 unmodified lines
151151 }
152152
153153 extern void udp_lib_unhash(struct sock *sk);
154+extern void udp_lib_rehash(struct sock *sk, u16 new_hash);
154155
155156 static inline void udp_lib_close(struct sock *sk, long timeout)
156157 {
kernel/cgroup.c+7−6
@@ -1791,19 +1791,20 @@ out: · 1790 unmodified lines
17911791 }
17921792
17931793 /**
1794− * cgroup_attach_task_current_cg - attach task 'tsk' to current task's cgroup
1794+ * cgroup_attach_task_all - attach task 'tsk' to all cgroups of task 'from'
1795+ * @from: attach to all cgroups of a given task
17951796 * @tsk: the task to be attached
17961797 */
1797−int cgroup_attach_task_current_cg(struct task_struct *tsk)
1798+int cgroup_attach_task_all(struct task_struct *from, struct task_struct *tsk)
17981799 {
17991800 struct cgroupfs_root *root;
1800− struct cgroup *cur_cg;
18011801 int retval = 0;
18021802
18031803 cgroup_lock();
18041804 for_each_active_root(root) {
1805− cur_cg = task_cgroup_from_root(current, root);
1806− retval = cgroup_attach_task(cur_cg, tsk);
1805+ struct cgroup *from_cg = task_cgroup_from_root(from, root);
1806+
1807+ retval = cgroup_attach_task(from_cg, tsk);
18071808 if (retval)
18081809 break;
18091810 }
@@ -1811,7 +1812,7 @@ int cgroup_attach_task_current_cg(struct task_struct *tsk) · 1 unmodified line
18111812
18121813 return retval;
18131814 }
1814−EXPORT_SYMBOL_GPL(cgroup_attach_task_current_cg);
1815+EXPORT_SYMBOL_GPL(cgroup_attach_task_all);
18151816
18161817 /*
18171818 * Attach task with pid 'pid' to cgroup 'cgrp'. Call with cgroup_mutex
kernel/debug/debug_core.c+1−1
@@ -741,7 +741,7 @@ static struct console kgdbcons = { · 740 unmodified lines
741741 };
742742
743743 #ifdef CONFIG_MAGIC_SYSRQ
744−static void sysrq_handle_dbg(int key, struct tty_struct *tty)
744+static void sysrq_handle_dbg(int key)
745745 {
746746 if (!dbg_io_ops) {
747747 printk(KERN_CRIT "ERROR: No KGDB I/O module available\n");
kernel/debug/kdb/kdb_bp.c+0−2
@@ -274,7 +274,6 @@ static int kdb_bp(int argc, const char **argv) · 273 unmodified lines
274274 int i, bpno;
275275 kdb_bp_t *bp, *bp_check;
276276 int diag;
277− int free;
278277 char *symname = NULL;
279278 long offset = 0ul;
280279 int nextarg;
@@ -305,7 +304,6 @@ static int kdb_bp(int argc, const char **argv) · 24 unmodified lines
305304 /*
306305 * Find an empty bp structure to allocate
307306 */
308− free = KDB_MAXBPT;
309307 for (bpno = 0, bp = kdb_breakpoints; bpno < KDB_MAXBPT; bpno++, bp++) {
310308 if (bp->bp_free)
311309 break;
kernel/debug/kdb/kdb_main.c+1−1
@@ -1929,7 +1929,7 @@ static int kdb_sr(int argc, const char **argv) · 1928 unmodified lines
19291929 if (argc != 1)
19301930 return KDB_ARGCOUNT;
19311931 kdb_trap_printk++;
1932− __handle_sysrq(*argv[1], NULL, 0);
1932+ __handle_sysrq(*argv[1], false);
19331933 kdb_trap_printk--;
19341934
19351935 return 0;
kernel/gcov/fs.c+180−64
@@ -33,10 +33,11 @@ · 32 unmodified lines
3333 * @children: child nodes
3434 * @all: list head for list of all nodes
3535 * @parent: parent node
36− * @info: associated profiling data structure if not a directory
37− * @ghost: when an object file containing profiling data is unloaded we keep a
38− * copy of the profiling data here to allow collecting coverage data
39− * for cleanup code. Such a node is called a "ghost".
36+ * @loaded_info: array of pointers to profiling data sets for loaded object
37+ * files.
38+ * @num_loaded: number of profiling data sets for loaded object files.
39+ * @unloaded_info: accumulated copy of profiling data sets for unloaded
40+ * object files. Used only when gcov_persist=1.
4041 * @dentry: main debugfs entry, either a directory or data file
4142 * @links: associated symbolic links
4243 * @name: data file basename
@@ -51,10 +52,11 @@ struct gcov_node { · 8 unmodified lines
5152 struct list_head children;
5253 struct list_head all;
5354 struct gcov_node *parent;
54− struct gcov_info *info;
55− struct gcov_info *ghost;
55+ struct gcov_info **loaded_info;
56+ struct gcov_info *unloaded_info;
5657 struct dentry *dentry;
5758 struct dentry **links;
59+ int num_loaded;
5860 char name[0];
5961 };
6062
@@ -136,16 +138,37 @@ static const struct seq_operations gcov_seq_ops = { · 75 unmodified lines
136138 };
137139
138140 /*
139− * Return the profiling data set for a given node. This can either be the
140− * original profiling data structure or a duplicate (also called "ghost")
141− * in case the associated object file has been unloaded.
141+ * Return a profiling data set associated with the given node. This is
142+ * either a data set for a loaded object file or a data set copy in case
143+ * all associated object files have been unloaded.
142144 */
143145 static struct gcov_info *get_node_info(struct gcov_node *node)
144146 {
145− if (node->info)
146− return node->info;
147+ if (node->num_loaded > 0)
148+ return node->loaded_info[0];
147149
148− return node->ghost;
150+ return node->unloaded_info;
151+}
152+
153+/*
154+ * Return a newly allocated profiling data set which contains the sum of
155+ * all profiling data associated with the given node.
156+ */
157+static struct gcov_info *get_accumulated_info(struct gcov_node *node)
158+{
159+ struct gcov_info *info;
160+ int i = 0;
161+
162+ if (node->unloaded_info)
163+ info = gcov_info_dup(node->unloaded_info);
164+ else
165+ info = gcov_info_dup(node->loaded_info[i++]);
166+ if (!info)
167+ return NULL;
168+ for (; i < node->num_loaded; i++)
169+ gcov_info_add(info, node->loaded_info[i]);
170+
171+ return info;
149172 }
150173
151174 /*
@@ -163,9 +186,10 @@ static int gcov_seq_open(struct inode *inode, struct file *file) · 11 unmodified lines
163186 mutex_lock(&node_lock);
164187 /*
165188 * Read from a profiling data copy to minimize reference tracking
166− * complexity and concurrent access.
189+ * complexity and concurrent access and to keep accumulating multiple
190+ * profiling data sets associated with one node simple.
167191 */
168− info = gcov_info_dup(get_node_info(node));
192+ info = get_accumulated_info(node);
169193 if (!info)
170194 goto out_unlock;
171195 iter = gcov_iter_new(info);
@@ -225,12 +249,25 @@ static struct gcov_node *get_node_by_name(const char *name) · 53 unmodified lines
225249 return NULL;
226250 }
227251
252+/*
253+ * Reset all profiling data associated with the specified node.
254+ */
255+static void reset_node(struct gcov_node *node)
256+{
257+ int i;
258+
259+ if (node->unloaded_info)
260+ gcov_info_reset(node->unloaded_info);
261+ for (i = 0; i < node->num_loaded; i++)
262+ gcov_info_reset(node->loaded_info[i]);
263+}
264+
228265 static void remove_node(struct gcov_node *node);
229266
230267 /*
231268 * write() implementation for gcov data files. Reset profiling data for the
232− * associated file. If the object file has been unloaded (i.e. this is
233− * a "ghost" node), remove the debug fs node as well.
269+ * corresponding file. If all associated object files have been unloaded,
270+ * remove the debug fs node as well.
234271 */
235272 static ssize_t gcov_seq_write(struct file *file, const char __user *addr,
236273 size_t len, loff_t *pos)
@@ -245,10 +282,10 @@ static ssize_t gcov_seq_write(struct file *file, const char __user *addr, · 8 unmodified lines
245282 node = get_node_by_name(info->filename);
246283 if (node) {
247284 /* Reset counts or remove node for unloaded modules. */
248− if (node->ghost)
285+ if (node->num_loaded == 0)
249286 remove_node(node);
250287 else
251− gcov_info_reset(node->info);
288+ reset_node(node);
252289 }
253290 /* Reset counts for open file. */
254291 gcov_info_reset(info);
@@ -378,7 +415,10 @@ static void init_node(struct gcov_node *node, struct gcov_info *info, · 123 unmodified lines
378415 INIT_LIST_HEAD(&node->list);
379416 INIT_LIST_HEAD(&node->children);
380417 INIT_LIST_HEAD(&node->all);
381− node->info = info;
418+ if (node->loaded_info) {
419+ node->loaded_info[0] = info;
420+ node->num_loaded = 1;
421+ }
382422 node->parent = parent;
383423 if (name)
384424 strcpy(node->name, name);
@@ -394,9 +434,13 @@ static struct gcov_node *new_node(struct gcov_node *parent, · 9 unmodified lines
394434 struct gcov_node *node;
395435
396436 node = kzalloc(sizeof(struct gcov_node) + strlen(name) + 1, GFP_KERNEL);
397− if (!node) {
398− pr_warning("out of memory\n");
399− return NULL;
437+ if (!node)
438+ goto err_nomem;
439+ if (info) {
440+ node->loaded_info = kcalloc(1, sizeof(struct gcov_info *),
441+ GFP_KERNEL);
442+ if (!node->loaded_info)
443+ goto err_nomem;
400444 }
401445 init_node(node, info, name, parent);
402446 /* Differentiate between gcov data file nodes and directory nodes. */
@@ -416,6 +460,11 @@ static struct gcov_node *new_node(struct gcov_node *parent, · 13 unmodified lines
416460 list_add(&node->all, &all_head);
417461
418462 return node;
463+
464+err_nomem:
465+ kfree(node);
466+ pr_warning("out of memory\n");
467+ return NULL;
419468 }
420469
421470 /* Remove symbolic links associated with node. */
@@ -441,8 +490,9 @@ static void release_node(struct gcov_node *node) · 19 unmodified lines
441490 list_del(&node->all);
442491 debugfs_remove(node->dentry);
443492 remove_links(node);
444− if (node->ghost)
445− gcov_info_free(node->ghost);
493+ kfree(node->loaded_info);
494+ if (node->unloaded_info)
495+ gcov_info_free(node->unloaded_info);
446496 kfree(node);
447497 }
448498
@@ -477,7 +527,7 @@ static struct gcov_node *get_child_by_name(struct gcov_node *parent, · 28 unmodified lines
477527
478528 /*
479529 * write() implementation for reset file. Reset all profiling data to zero
480− * and remove ghost nodes.
530+ * and remove nodes for which all associated object files are unloaded.
481531 */
482532 static ssize_t reset_write(struct file *file, const char __user *addr,
483533 size_t len, loff_t *pos)
@@ -487,8 +537,8 @@ static ssize_t reset_write(struct file *file, const char __user *addr, · 3 unmodified lines
487537 mutex_lock(&node_lock);
488538 restart:
489539 list_for_each_entry(node, &all_head, all) {
490− if (node->info)
491− gcov_info_reset(node->info);
540+ if (node->num_loaded > 0)
541+ reset_node(node);
492542 else if (list_empty(&node->children)) {
493543 remove_node(node);
494544 /* Several nodes may have gone - restart loop. */
@@ -564,37 +614,115 @@ err_remove: · 69 unmodified lines
564614 }
565615
566616 /*
567− * The profiling data set associated with this node is being unloaded. Store a
568− * copy of the profiling data and turn this node into a "ghost".
617+ * Associate a profiling data set with an existing node. Needs to be called
618+ * with node_lock held.
569619 */
570−static int ghost_node(struct gcov_node *node)
620+static void add_info(struct gcov_node *node, struct gcov_info *info)
571621 {
572− node->ghost = gcov_info_dup(node->info);
573− if (!node->ghost) {
574− pr_warning("could not save data for '%s' (out of memory)\n",
575− node->info->filename);
576− return -ENOMEM;
622+ struct gcov_info **loaded_info;
623+ int num = node->num_loaded;
624+
625+ /*
626+ * Prepare new array. This is done first to simplify cleanup in
627+ * case the new data set is incompatible, the node only contains
628+ * unloaded data sets and there's not enough memory for the array.
629+ */
630+ loaded_info = kcalloc(num + 1, sizeof(struct gcov_info *), GFP_KERNEL);
631+ if (!loaded_info) {
632+ pr_warning("could not add '%s' (out of memory)\n",
633+ info->filename);
634+ return;
635+ }
636+ memcpy(loaded_info, node->loaded_info,
637+ num * sizeof(struct gcov_info *));
638+ loaded_info[num] = info;
639+ /* Check if the new data set is compatible. */
640+ if (num == 0) {
641+ /*
642+ * A module was unloaded, modified and reloaded. The new
643+ * data set replaces the copy of the last one.
644+ */
645+ if (!gcov_info_is_compatible(node->unloaded_info, info)) {
646+ pr_warning("discarding saved data for %s "
647+ "(incompatible version)\n", info->filename);
648+ gcov_info_free(node->unloaded_info);
649+ node->unloaded_info = NULL;
650+ }
651+ } else {
652+ /*
653+ * Two different versions of the same object file are loaded.
654+ * The initial one takes precedence.
655+ */
656+ if (!gcov_info_is_compatible(node->loaded_info[0], info)) {
657+ pr_warning("could not add '%s' (incompatible "
658+ "version)\n", info->filename);
659+ kfree(loaded_info);
660+ return;
661+ }
577662 }
578− node->info = NULL;
663+ /* Overwrite previous array. */
664+ kfree(node->loaded_info);
665+ node->loaded_info = loaded_info;
666+ node->num_loaded = num + 1;
667+}
579668
580− return 0;
669+/*
670+ * Return the index of a profiling data set associated with a node.
671+ */
672+static int get_info_index(struct gcov_node *node, struct gcov_info *info)
673+{
674+ int i;
675+
676+ for (i = 0; i < node->num_loaded; i++) {
677+ if (node->loaded_info[i] == info)
678+ return i;
679+ }
680+ return -ENOENT;
581681 }
582682
583683 /*
584− * Profiling data for this node has been loaded again. Add profiling data
585− * from previous instantiation and turn this node into a regular node.
684+ * Save the data of a profiling data set which is being unloaded.
586685 */
587−static void revive_node(struct gcov_node *node, struct gcov_info *info)
686+static void save_info(struct gcov_node *node, struct gcov_info *info)
588687 {
589− if (gcov_info_is_compatible(node->ghost, info))
590− gcov_info_add(info, node->ghost);
688+ if (node->unloaded_info)
689+ gcov_info_add(node->unloaded_info, info);
591690 else {
592− pr_warning("discarding saved data for '%s' (version changed)\n",
691+ node->unloaded_info = gcov_info_dup(info);
692+ if (!node->unloaded_info) {
693+ pr_warning("could not save data for '%s' "
694+ "(out of memory)\n", info->filename);
695+ }
696+ }
697+}
698+
699+/*
700+ * Disassociate a profiling data set from a node. Needs to be called with
701+ * node_lock held.
702+ */
703+static void remove_info(struct gcov_node *node, struct gcov_info *info)
704+{
705+ int i;
706+
707+ i = get_info_index(node, info);
708+ if (i < 0) {
709+ pr_warning("could not remove '%s' (not found)\n",
593710 info->filename);
711+ return;
594712 }
595− gcov_info_free(node->ghost);
596− node->ghost = NULL;
597− node->info = info;
713+ if (gcov_persist)
714+ save_info(node, info);
715+ /* Shrink array. */
716+ node->loaded_info[i] = node->loaded_info[node->num_loaded - 1];
717+ node->num_loaded--;
718+ if (node->num_loaded > 0)
719+ return;
720+ /* Last loaded data set was removed. */
721+ kfree(node->loaded_info);
722+ node->loaded_info = NULL;
723+ node->num_loaded = 0;
724+ if (!node->unloaded_info)
725+ remove_node(node);
598726 }
599727
600728 /*
@@ -609,30 +737,18 @@ void gcov_event(enum gcov_action action, struct gcov_info *info) · 8 unmodified lines
609737 node = get_node_by_name(info->filename);
610738 switch (action) {
611739 case GCOV_ADD:
612− /* Add new node or revive ghost. */
613− if (!node) {
740+ if (node)
741+ add_info(node, info);
742+ else
614743 add_node(info);
615− break;
616− }
617− if (gcov_persist)
618− revive_node(node, info);
619− else {
620− pr_warning("could not add '%s' (already exists)\n",
621− info->filename);
622− }
623744 break;
624745 case GCOV_REMOVE:
625− /* Remove node or turn into ghost. */
626− if (!node) {
746+ if (node)
747+ remove_info(node, info);
748+ else {
627749 pr_warning("could not remove '%s' (not found)\n",
628750 info->filename);
629− break;
630751 }
631− if (gcov_persist) {
632− if (!ghost_node(node))
633− break;
634− }
635− remove_node(node);
636752 break;
637753 }
638754 mutex_unlock(&node_lock);
kernel/groups.c+2−3
@@ -143,10 +143,9 @@ int groups_search(const struct group_info *group_info, gid_t grp) · 142 unmodified lines
143143 right = group_info->ngroups;
144144 while (left < right) {
145145 unsigned int mid = (left+right)/2;
146− int cmp = grp - GROUP_AT(group_info, mid);
147− if (cmp > 0)
146+ if (grp > GROUP_AT(group_info, mid))
148147 left = mid + 1;
149− else if (cmp < 0)
148+ else if (grp < GROUP_AT(group_info, mid))
150149 right = mid;
151150 else
152151 return 1;
kernel/hrtimer.c+1−2
@@ -1091,11 +1091,10 @@ EXPORT_SYMBOL_GPL(hrtimer_cancel); · 1090 unmodified lines
10911091 */
10921092 ktime_t hrtimer_get_remaining(const struct hrtimer *timer)
10931093 {
1094− struct hrtimer_clock_base *base;
10951094 unsigned long flags;
10961095 ktime_t rem;
10971096
1098− base = lock_hrtimer_base(timer, &flags);
1097+ lock_hrtimer_base(timer, &flags);
10991098 rem = hrtimer_expires_remaining(timer);
11001099 unlock_hrtimer_base(timer, &flags);
11011100
kernel/mutex.c+7−16
@@ -36,15 +36,6 @@ · 35 unmodified lines
3636 # include <asm/mutex.h>
3737 #endif
3838
39−/***
40− * mutex_init - initialize the mutex
41− * @lock: the mutex to be initialized
42− * @key: the lock_class_key for the class; used by mutex lock debugging
43− *
44− * Initialize the mutex to unlocked state.
45− *
46− * It is not allowed to initialize an already locked mutex.
47− */
4839 void
4940 __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
5041 {
@@ -68,7 +59,7 @@ EXPORT_SYMBOL(__mutex_init); · 17 unmodified lines
6859 static __used noinline void __sched
6960 __mutex_lock_slowpath(atomic_t *lock_count);
7061
71−/***
62+/**
7263 * mutex_lock - acquire the mutex
7364 * @lock: the mutex to be acquired
7465 *
@@ -105,7 +96,7 @@ EXPORT_SYMBOL(mutex_lock); · 30 unmodified lines
10596
10697 static __used noinline void __sched __mutex_unlock_slowpath(atomic_t *lock_count);
10798
108−/***
99+/**
109100 * mutex_unlock - release the mutex
110101 * @lock: the mutex to be released
111102 *
@@ -364,8 +355,8 @@ __mutex_lock_killable_slowpath(atomic_t *lock_count); · 252 unmodified lines
364355 static noinline int __sched
365356 __mutex_lock_interruptible_slowpath(atomic_t *lock_count);
366357
367−/***
368− * mutex_lock_interruptible - acquire the mutex, interruptable
358+/**
359+ * mutex_lock_interruptible - acquire the mutex, interruptible
369360 * @lock: the mutex to be acquired
370361 *
371362 * Lock the mutex like mutex_lock(), and return 0 if the mutex has
@@ -456,15 +447,15 @@ static inline int __mutex_trylock_slowpath(atomic_t *lock_count) · 84 unmodified lines
456447 return prev == 1;
457448 }
458449
459−/***
460− * mutex_trylock - try acquire the mutex, without waiting
450+/**
451+ * mutex_trylock - try to acquire the mutex, without waiting
461452 * @lock: the mutex to be acquired
462453 *
463454 * Try to acquire the mutex atomically. Returns 1 if the mutex
464455 * has been acquired successfully, and 0 on contention.
465456 *
466457 * NOTE: this function follows the spin_trylock() convention, so
467− * it is negated to the down_trylock() return values! Be careful
458+ * it is negated from the down_trylock() return values! Be careful
468459 * about this when converting semaphore users to mutexes.
469460 *
470461 * This function must not be used in interrupt context. The
kernel/pm_qos_params.c+10−6
@@ -212,15 +212,17 @@ EXPORT_SYMBOL_GPL(pm_qos_request_active); · 211 unmodified lines
212212
213213 /**
214214 * pm_qos_add_request - inserts new qos request into the list
215− * @pm_qos_class: identifies which list of qos request to us
215+ * @dep: pointer to a preallocated handle
216+ * @pm_qos_class: identifies which list of qos request to use
216217 * @value: defines the qos request
217218 *
218219 * This function inserts a new entry in the pm_qos_class list of requested qos
219220 * performance characteristics. It recomputes the aggregate QoS expectations
220− * for the pm_qos_class of parameters, and returns the pm_qos_request list
221− * element as a handle for use in updating and removal. Call needs to save
222− * this handle for later use.
221+ * for the pm_qos_class of parameters and initializes the pm_qos_request_list
222+ * handle. Caller needs to save this handle for later use in updates and
223+ * removal.
223224 */
225+
224226 void pm_qos_add_request(struct pm_qos_request_list *dep,
225227 int pm_qos_class, s32 value)
226228 {
@@ -348,7 +350,7 @@ static int pm_qos_power_open(struct inode *inode, struct file *filp) · 121 unmodified lines
348350
349351 pm_qos_class = find_pm_qos_object_by_minor(iminor(inode));
350352 if (pm_qos_class >= 0) {
351− struct pm_qos_request_list *req = kzalloc(GFP_KERNEL, sizeof(*req));
353+ struct pm_qos_request_list *req = kzalloc(sizeof(*req), GFP_KERNEL);
352354 if (!req)
353355 return -ENOMEM;
354356
@@ -387,10 +389,12 @@ static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, · 32 unmodified lines
387389 } else if (count == 11) { /* len('0x12345678/0') */
388390 if (copy_from_user(ascii_value, buf, 11))
389391 return -EFAULT;
392+ if (strlen(ascii_value) != 10)
393+ return -EINVAL;
390394 x = sscanf(ascii_value, "%x", &value);
391395 if (x != 1)
392396 return -EINVAL;
393− pr_debug(KERN_ERR "%s, %d, 0x%x\n", ascii_value, x, value);
397+ pr_debug("%s, %d, 0x%x\n", ascii_value, x, value);
394398 } else
395399 return -EINVAL;
396400
kernel/power/hibernate.c+0−1
@@ -338,7 +338,6 @@ int hibernation_snapshot(int platform_mode) · 337 unmodified lines
338338 goto Close;
339339
340340 suspend_console();
341− hibernation_freeze_swap();
342341 saved_mask = clear_gfp_allowed_mask(GFP_IOFS);
343342 error = dpm_suspend_start(PMSG_FREEZE);
344343 if (error)
kernel/power/poweroff.c+1−1
@@ -24,7 +24,7 @@ static void do_poweroff(struct work_struct *dummy) · 23 unmodified lines
2424
2525 static DECLARE_WORK(poweroff_work, do_poweroff);
2626
27−static void handle_poweroff(int key, struct tty_struct *tty)
27+static void handle_poweroff(int key)
2828 {
2929 /* run sysrq poweroff on boot cpu */
3030 schedule_work_on(cpumask_first(cpu_online_mask), &poweroff_work);
kernel/power/snapshot.c+65−21
@@ -1086,7 +1086,6 @@ void swsusp_free(void) · 1085 unmodified lines
10861086 buffer = NULL;
10871087 alloc_normal = 0;
10881088 alloc_highmem = 0;
1089− hibernation_thaw_swap();
10901089 }
10911090
10921091 /* Helper functions used for the shrinking of memory. */
@@ -1122,9 +1121,19 @@ static unsigned long preallocate_image_pages(unsigned long nr_pages, gfp_t mask) · 29 unmodified lines
11221121 return nr_alloc;
11231122 }
11241123
1125−static unsigned long preallocate_image_memory(unsigned long nr_pages)
1124+static unsigned long preallocate_image_memory(unsigned long nr_pages,
1125+ unsigned long avail_normal)
11261126 {
1127− return preallocate_image_pages(nr_pages, GFP_IMAGE);
1127+ unsigned long alloc;
1128+
1129+ if (avail_normal <= alloc_normal)
1130+ return 0;
1131+
1132+ alloc = avail_normal - alloc_normal;
1133+ if (nr_pages < alloc)
1134+ alloc = nr_pages;
1135+
1136+ return preallocate_image_pages(alloc, GFP_IMAGE);
11281137 }
11291138
11301139 #ifdef CONFIG_HIGHMEM
@@ -1170,15 +1179,22 @@ static inline unsigned long preallocate_highmem_fraction(unsigned long nr_pages, · 39 unmodified lines
11701179 */
11711180 static void free_unnecessary_pages(void)
11721181 {
1173− unsigned long save_highmem, to_free_normal, to_free_highmem;
1182+ unsigned long save, to_free_normal, to_free_highmem;
11741183
1175− to_free_normal = alloc_normal - count_data_pages();
1176− save_highmem = count_highmem_pages();
1177− if (alloc_highmem > save_highmem) {
1178− to_free_highmem = alloc_highmem - save_highmem;
1184+ save = count_data_pages();
1185+ if (alloc_normal >= save) {
1186+ to_free_normal = alloc_normal - save;
1187+ save = 0;
1188+ } else {
1189+ to_free_normal = 0;
1190+ save -= alloc_normal;
1191+ }
1192+ save += count_highmem_pages();
1193+ if (alloc_highmem >= save) {
1194+ to_free_highmem = alloc_highmem - save;
11791195 } else {
11801196 to_free_highmem = 0;
1181− to_free_normal -= save_highmem - alloc_highmem;
1197+ to_free_normal -= save - alloc_highmem;
11821198 }
11831199
11841200 memory_bm_position_reset(&copy_bm);
@@ -1259,7 +1275,7 @@ int hibernate_preallocate_memory(void) · 74 unmodified lines
12591275 {
12601276 struct zone *zone;
12611277 unsigned long saveable, size, max_size, count, highmem, pages = 0;
1262− unsigned long alloc, save_highmem, pages_highmem;
1278+ unsigned long alloc, save_highmem, pages_highmem, avail_normal;
12631279 struct timeval start, stop;
12641280 int error;
12651281
@@ -1296,6 +1312,7 @@ int hibernate_preallocate_memory(void) · 30 unmodified lines
12961312 else
12971313 count += zone_page_state(zone, NR_FREE_PAGES);
12981314 }
1315+ avail_normal = count;
12991316 count += highmem;
13001317 count -= totalreserve_pages;
13011318
@@ -1310,12 +1327,21 @@ int hibernate_preallocate_memory(void) · 8 unmodified lines
13101327 */
13111328 if (size >= saveable) {
13121329 pages = preallocate_image_highmem(save_highmem);
1313− pages += preallocate_image_memory(saveable - pages);
1330+ pages += preallocate_image_memory(saveable - pages, avail_normal);
13141331 goto out;
13151332 }
13161333
13171334 /* Estimate the minimum size of the image. */
13181335 pages = minimum_image_size(saveable);
1336+ /*
1337+ * To avoid excessive pressure on the normal zone, leave room in it to
1338+ * accommodate an image of the minimum size (unless it's already too
1339+ * small, in which case don't preallocate pages from it at all).
1340+ */
1341+ if (avail_normal > pages)
1342+ avail_normal -= pages;
1343+ else
1344+ avail_normal = 0;
13191345 if (size < pages)
13201346 size = min_t(unsigned long, pages, max_size);
13211347
@@ -1336,16 +1362,34 @@ int hibernate_preallocate_memory(void) · 14 unmodified lines
13361362 */
13371363 pages_highmem = preallocate_image_highmem(highmem / 2);
13381364 alloc = (count - max_size) - pages_highmem;
1339− pages = preallocate_image_memory(alloc);
1340− if (pages < alloc)
1341− goto err_out;
1342− size = max_size - size;
1343− alloc = size;
1344− size = preallocate_highmem_fraction(size, highmem, count);
1345− pages_highmem += size;
1346− alloc -= size;
1347− pages += preallocate_image_memory(alloc);
1348− pages += pages_highmem;
1365+ pages = preallocate_image_memory(alloc, avail_normal);
1366+ if (pages < alloc) {
1367+ /* We have exhausted non-highmem pages, try highmem. */
1368+ alloc -= pages;
1369+ pages += pages_highmem;
1370+ pages_highmem = preallocate_image_highmem(alloc);
1371+ if (pages_highmem < alloc)
1372+ goto err_out;
1373+ pages += pages_highmem;
1374+ /*
1375+ * size is the desired number of saveable pages to leave in
1376+ * memory, so try to preallocate (all memory - size) pages.
1377+ */
1378+ alloc = (count - pages) - size;
1379+ pages += preallocate_image_highmem(alloc);
1380+ } else {
1381+ /*
1382+ * There are approximately max_size saveable pages at this point
1383+ * and we want to reduce this number down to size.
1384+ */
1385+ alloc = max_size - size;
1386+ size = preallocate_highmem_fraction(alloc, highmem, count);
1387+ pages_highmem += size;
1388+ alloc -= size;
1389+ size = preallocate_image_memory(alloc, avail_normal);
1390+ pages_highmem += preallocate_image_highmem(alloc - size);
1391+ pages += pages_highmem + size;
1392+ }
13491393
13501394 /*
13511395 * We only need as many page frames for the image as there are saveable
kernel/power/swap.c+3−3
@@ -136,10 +136,10 @@ sector_t alloc_swapdev_block(int swap) · 135 unmodified lines
136136 {
137137 unsigned long offset;
138138
139− offset = swp_offset(get_swap_for_hibernation(swap));
139+ offset = swp_offset(get_swap_page_of_type(swap));
140140 if (offset) {
141141 if (swsusp_extents_insert(offset))
142− swap_free_for_hibernation(swp_entry(swap, offset));
142+ swap_free(swp_entry(swap, offset));
143143 else
144144 return swapdev_block(swap, offset);
145145 }
@@ -163,7 +163,7 @@ void free_all_swap_pages(int swap) · 17 unmodified lines
163163 ext = container_of(node, struct swsusp_extent, node);
164164 rb_erase(node, &swsusp_extents);
165165 for (offset = ext->start; offset <= ext->end; offset++)
166− swap_free_for_hibernation(swp_entry(swap, offset));
166+ swap_free(swp_entry(swap, offset));
167167
168168 kfree(ext);
169169 }
kernel/sched.c+6−0
@@ -1294,6 +1294,10 @@ static void resched_task(struct task_struct *p) · 1293 unmodified lines
12941294 static void sched_rt_avg_update(struct rq *rq, u64 rt_delta)
12951295 {
12961296 }
1297+
1298+static void sched_avg_update(struct rq *rq)
1299+{
1300+}
12971301 #endif /* CONFIG_SMP */
12981302
12991303 #if BITS_PER_LONG == 32
@@ -3182,6 +3186,8 @@ static void update_cpu_load(struct rq *this_rq) · 1882 unmodified lines
31823186
31833187 this_rq->cpu_load[i] = (old_load * (scale - 1) + new_load) >> i;
31843188 }
3189+
3190+ sched_avg_update(this_rq);
31853191 }
31863192
31873193 static void update_cpu_load_active(struct rq *this_rq)
kernel/sched_fair.c+6−7
@@ -54,13 +54,13 @@ enum sched_tunable_scaling sysctl_sched_tunable_scaling · 53 unmodified lines
5454 * Minimal preemption granularity for CPU-bound tasks:
5555 * (default: 2 msec * (1 + ilog(ncpus)), units: nanoseconds)
5656 */
57−unsigned int sysctl_sched_min_granularity = 2000000ULL;
58−unsigned int normalized_sysctl_sched_min_granularity = 2000000ULL;
57+unsigned int sysctl_sched_min_granularity = 750000ULL;
58+unsigned int normalized_sysctl_sched_min_granularity = 750000ULL;
5959
6060 /*
6161 * is kept at sysctl_sched_latency / sysctl_sched_min_granularity
6262 */
63−static unsigned int sched_nr_latency = 3;
63+static unsigned int sched_nr_latency = 8;
6464
6565 /*
6666 * After fork, child runs first. If set to 0 (default) then
@@ -1313,7 +1313,7 @@ static struct sched_group * · 1246 unmodified lines
13131313 find_idlest_group(struct sched_domain *sd, struct task_struct *p,
13141314 int this_cpu, int load_idx)
13151315 {
1316− struct sched_group *idlest = NULL, *this = NULL, *group = sd->groups;
1316+ struct sched_group *idlest = NULL, *group = sd->groups;
13171317 unsigned long min_load = ULONG_MAX, this_load = 0;
13181318 int imbalance = 100 + (sd->imbalance_pct-100)/2;
13191319
@@ -1348,7 +1348,6 @@ find_idlest_group(struct sched_domain *sd, struct task_struct *p, · 28 unmodified lines
13481348
13491349 if (local_group) {
13501350 this_load = avg_load;
1351− this = group;
13521351 } else if (avg_load < min_load) {
13531352 min_load = avg_load;
13541353 idlest = group;
@@ -2268,8 +2267,6 @@ unsigned long scale_rt_power(int cpu) · 913 unmodified lines
22682267 struct rq *rq = cpu_rq(cpu);
22692268 u64 total, available;
22702269
2271− sched_avg_update(rq);
2272−
22732270 total = sched_avg_period() + (rq->clock - rq->age_stamp);
22742271 available = total - rq->rt_avg;
22752272
@@ -3752,6 +3749,8 @@ static void task_fork_fair(struct task_struct *p) · 1476 unmodified lines
37523749
37533750 raw_spin_lock_irqsave(&rq->lock, flags);
37543751
3752+ update_rq_clock(rq);
3753+
37553754 if (unlikely(task_cpu(p) != this_cpu))
37563755 __set_task_cpu(p, this_cpu);
37573756
kernel/sys.c+2−0
@@ -931,6 +931,7 @@ SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) · 930 unmodified lines
931931 pgid = pid;
932932 if (pgid < 0)
933933 return -EINVAL;
934+ rcu_read_lock();
934935
935936 /* From this point forward we keep holding onto the tasklist lock
936937 * so that our parent does not change from under us. -DaveM
@@ -984,6 +985,7 @@ SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) · 47 unmodified lines
984985 out:
985986 /* All paths lead to here, thus we are safe. -DaveM */
986987 write_unlock_irq(&tasklist_lock);
988+ rcu_read_unlock();
987989 return err;
988990 }
989991
kernel/sysctl.c+1−4
@@ -1713,10 +1713,7 @@ static __init int sysctl_init(void) · 1712 unmodified lines
17131713 {
17141714 sysctl_set_parent(NULL, root_table);
17151715 #ifdef CONFIG_SYSCTL_SYSCALL_CHECK
1716− {
1717− int err;
1718− err = sysctl_check_table(current->nsproxy, root_table);
1719− }
1716+ sysctl_check_table(current->nsproxy, root_table);
17201717 #endif
17211718 return 0;
17221719 }
kernel/trace/ftrace.c+78−29
@@ -1358,24 +1358,29 @@ enum { · 1357 unmodified lines
13581358 #define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */
13591359
13601360 struct ftrace_iterator {
1361− struct ftrace_page *pg;
1362− int hidx;
1363− int idx;
1364− unsigned flags;
1365− struct trace_parser parser;
1361+ loff_t pos;
1362+ loff_t func_pos;
1363+ struct ftrace_page *pg;
1364+ struct dyn_ftrace *func;
1365+ struct ftrace_func_probe *probe;
1366+ struct trace_parser parser;
1367+ int hidx;
1368+ int idx;
1369+ unsigned flags;
13661370 };
13671371
13681372 static void *
1369−t_hash_next(struct seq_file *m, void *v, loff_t *pos)
1373+t_hash_next(struct seq_file *m, loff_t *pos)
13701374 {
13711375 struct ftrace_iterator *iter = m->private;
1372− struct hlist_node *hnd = v;
1376+ struct hlist_node *hnd = NULL;
13731377 struct hlist_head *hhd;
13741378
1375− WARN_ON(!(iter->flags & FTRACE_ITER_HASH));
1376−
13771379 (*pos)++;
1380+ iter->pos = *pos;
13781381
1382+ if (iter->probe)
1383+ hnd = &iter->probe->node;
13791384 retry:
13801385 if (iter->hidx >= FTRACE_FUNC_HASHSIZE)
13811386 return NULL;
@@ -1398,7 +1403,12 @@ t_hash_next(struct seq_file *m, void *v, loff_t *pos) · 16 unmodified lines
13981403 }
13991404 }
14001405
1401− return hnd;
1406+ if (WARN_ON_ONCE(!hnd))
1407+ return NULL;
1408+
1409+ iter->probe = hlist_entry(hnd, struct ftrace_func_probe, node);
1410+
1411+ return iter;
14021412 }
14031413
14041414 static void *t_hash_start(struct seq_file *m, loff_t *pos)
@@ -1407,26 +1417,32 @@ static void *t_hash_start(struct seq_file *m, loff_t *pos) · 2 unmodified lines
14071417 void *p = NULL;
14081418 loff_t l;
14091419
1410− if (!(iter->flags & FTRACE_ITER_HASH))
1411− *pos = 0;
1412−
1413− iter->flags |= FTRACE_ITER_HASH;
1420+ if (iter->func_pos > *pos)
1421+ return NULL;
14141422
14151423 iter->hidx = 0;
1416− for (l = 0; l <= *pos; ) {
1417− p = t_hash_next(m, p, &l);
1424+ for (l = 0; l <= (*pos - iter->func_pos); ) {
1425+ p = t_hash_next(m, &l);
14181426 if (!p)
14191427 break;
14201428 }
1421− return p;
1429+ if (!p)
1430+ return NULL;
1431+
1432+ /* Only set this if we have an item */
1433+ iter->flags |= FTRACE_ITER_HASH;
1434+
1435+ return iter;
14221436 }
14231437
1424−static int t_hash_show(struct seq_file *m, void *v)
1438+static int
1439+t_hash_show(struct seq_file *m, struct ftrace_iterator *iter)
14251440 {
14261441 struct ftrace_func_probe *rec;
1427− struct hlist_node *hnd = v;
14281442
1429− rec = hlist_entry(hnd, struct ftrace_func_probe, node);
1443+ rec = iter->probe;
1444+ if (WARN_ON_ONCE(!rec))
1445+ return -EIO;
14301446
14311447 if (rec->ops->print)
14321448 return rec->ops->print(m, rec->ip, rec->ops, rec->data);
@@ -1447,12 +1463,13 @@ t_next(struct seq_file *m, void *v, loff_t *pos) · 14 unmodified lines
14471463 struct dyn_ftrace *rec = NULL;
14481464
14491465 if (iter->flags & FTRACE_ITER_HASH)
1450− return t_hash_next(m, v, pos);
1466+ return t_hash_next(m, pos);
14511467
14521468 (*pos)++;
1469+ iter->pos = *pos;
14531470
14541471 if (iter->flags & FTRACE_ITER_PRINTALL)
1455− return NULL;
1472+ return t_hash_start(m, pos);
14561473
14571474 retry:
14581475 if (iter->idx >= iter->pg->index) {
@@ -1481,7 +1498,20 @@ t_next(struct seq_file *m, void *v, loff_t *pos) · 22 unmodified lines
14811498 }
14821499 }
14831500
1484− return rec;
1501+ if (!rec)
1502+ return t_hash_start(m, pos);
1503+
1504+ iter->func_pos = *pos;
1505+ iter->func = rec;
1506+
1507+ return iter;
1508+}
1509+
1510+static void reset_iter_read(struct ftrace_iterator *iter)
1511+{
1512+ iter->pos = 0;
1513+ iter->func_pos = 0;
1514+ iter->flags &= ~(FTRACE_ITER_PRINTALL & FTRACE_ITER_HASH);
14851515 }
14861516
14871517 static void *t_start(struct seq_file *m, loff_t *pos)
@@ -1491,6 +1521,12 @@ static void *t_start(struct seq_file *m, loff_t *pos) · 3 unmodified lines
14911521 loff_t l;
14921522
14931523 mutex_lock(&ftrace_lock);
1524+ /*
1525+ * If an lseek was done, then reset and start from beginning.
1526+ */
1527+ if (*pos < iter->pos)
1528+ reset_iter_read(iter);
1529+
14941530 /*
14951531 * For set_ftrace_filter reading, if we have the filter
14961532 * off, we can short cut and just print out that all
@@ -1500,12 +1536,19 @@ static void *t_start(struct seq_file *m, loff_t *pos) · 3 unmodified lines
15001536 if (*pos > 0)
15011537 return t_hash_start(m, pos);
15021538 iter->flags |= FTRACE_ITER_PRINTALL;
1539+ /* reset in case of seek/pread */
1540+ iter->flags &= ~FTRACE_ITER_HASH;
15031541 return iter;
15041542 }
15051543
15061544 if (iter->flags & FTRACE_ITER_HASH)
15071545 return t_hash_start(m, pos);
15081546
1547+ /*
1548+ * Unfortunately, we need to restart at ftrace_pages_start
1549+ * every time we let go of the ftrace_mutex. This is because
1550+ * those pointers can change without the lock.
1551+ */
15091552 iter->pg = ftrace_pages_start;
15101553 iter->idx = 0;
15111554 for (l = 0; l <= *pos; ) {
@@ -1514,10 +1557,14 @@ static void *t_start(struct seq_file *m, loff_t *pos) · 2 unmodified lines
15141557 break;
15151558 }
15161559
1517− if (!p && iter->flags & FTRACE_ITER_FILTER)
1518− return t_hash_start(m, pos);
1560+ if (!p) {
1561+ if (iter->flags & FTRACE_ITER_FILTER)
1562+ return t_hash_start(m, pos);
15191563
1520− return p;
1564+ return NULL;
1565+ }
1566+
1567+ return iter;
15211568 }
15221569
15231570 static void t_stop(struct seq_file *m, void *p)
@@ -1528,16 +1575,18 @@ static void t_stop(struct seq_file *m, void *p) · 4 unmodified lines
15281575 static int t_show(struct seq_file *m, void *v)
15291576 {
15301577 struct ftrace_iterator *iter = m->private;
1531− struct dyn_ftrace *rec = v;
1578+ struct dyn_ftrace *rec;
15321579
15331580 if (iter->flags & FTRACE_ITER_HASH)
1534− return t_hash_show(m, v);
1581+ return t_hash_show(m, iter);
15351582
15361583 if (iter->flags & FTRACE_ITER_PRINTALL) {
15371584 seq_printf(m, "#### all functions enabled ####\n");
15381585 return 0;
15391586 }
15401587
1588+ rec = iter->func;
1589+
15411590 if (!rec)
15421591 return 0;
15431592
@@ -2406,7 +2455,7 @@ static const struct file_operations ftrace_filter_fops = { · 862 unmodified lines
24062455 .open = ftrace_filter_open,
24072456 .read = seq_read,
24082457 .write = ftrace_filter_write,
2409− .llseek = no_llseek,
2458+ .llseek = ftrace_regex_lseek,
24102459 .release = ftrace_filter_release,
24112460 };
24122461
kernel/trace/ring_buffer.c+0−2
@@ -2994,13 +2994,11 @@ static void rb_advance_reader(struct ring_buffer_per_cpu *cpu_buffer) · 2993 unmodified lines
29942994
29952995 static void rb_advance_iter(struct ring_buffer_iter *iter)
29962996 {
2997− struct ring_buffer *buffer;
29982997 struct ring_buffer_per_cpu *cpu_buffer;
29992998 struct ring_buffer_event *event;
30002999 unsigned length;
30013000
30023001 cpu_buffer = iter->cpu_buffer;
3003− buffer = cpu_buffer->buffer;
30043002
30053003 /*
30063004 * Check if we are at the end of the buffer.
kernel/workqueue.c+38−15
@@ -90,7 +90,8 @@ enum { · 89 unmodified lines
9090 /*
9191 * Structure fields follow one of the following exclusion rules.
9292 *
93− * I: Set during initialization and read-only afterwards.
93+ * I: Modifiable by initialization/destruction paths and read-only for
94+ * everyone else.
9495 *
9596 * P: Preemption protected. Disabling preemption is enough and should
9697 * only be modified and accessed from the local cpu.
@@ -198,7 +199,7 @@ typedef cpumask_var_t mayday_mask_t; · 101 unmodified lines
198199 cpumask_test_and_set_cpu((cpu), (mask))
199200 #define mayday_clear_cpu(cpu, mask) cpumask_clear_cpu((cpu), (mask))
200201 #define for_each_mayday_cpu(cpu, mask) for_each_cpu((cpu), (mask))
201−#define alloc_mayday_mask(maskp, gfp) alloc_cpumask_var((maskp), (gfp))
202+#define alloc_mayday_mask(maskp, gfp) zalloc_cpumask_var((maskp), (gfp))
202203 #define free_mayday_mask(mask) free_cpumask_var((mask))
203204 #else
204205 typedef unsigned long mayday_mask_t;
@@ -943,10 +944,14 @@ static void __queue_work(unsigned int cpu, struct workqueue_struct *wq, · 738 unmodified lines
943944 struct global_cwq *gcwq;
944945 struct cpu_workqueue_struct *cwq;
945946 struct list_head *worklist;
947+ unsigned int work_flags;
946948 unsigned long flags;
947949
948950 debug_work_activate(work);
949951
952+ if (WARN_ON_ONCE(wq->flags & WQ_DYING))
953+ return;
954+
950955 /* determine gcwq to use */
951956 if (!(wq->flags & WQ_UNBOUND)) {
952957 struct global_cwq *last_gcwq;
@@ -989,14 +994,17 @@ static void __queue_work(unsigned int cpu, struct workqueue_struct *wq, · 36 unmodified lines
989994 BUG_ON(!list_empty(&work->entry));
990995
991996 cwq->nr_in_flight[cwq->work_color]++;
997+ work_flags = work_color_to_flags(cwq->work_color);
992998
993999 if (likely(cwq->nr_active < cwq->max_active)) {
9941000 cwq->nr_active++;
9951001 worklist = gcwq_determine_ins_pos(gcwq, cwq);
996− } else
1002+ } else {
1003+ work_flags |= WORK_STRUCT_DELAYED;
9971004 worklist = &cwq->delayed_works;
1005+ }
9981006
999− insert_work(cwq, work, worklist, work_color_to_flags(cwq->work_color));
1007+ insert_work(cwq, work, worklist, work_flags);
10001008
10011009 spin_unlock_irqrestore(&gcwq->lock, flags);
10021010 }
@@ -1215,6 +1223,7 @@ static void worker_leave_idle(struct worker *worker) · 212 unmodified lines
12151223 * bound), %false if offline.
12161224 */
12171225 static bool worker_maybe_bind_and_lock(struct worker *worker)
1226+__acquires(&gcwq->lock)
12181227 {
12191228 struct global_cwq *gcwq = worker->gcwq;
12201229 struct task_struct *task = worker->task;
@@ -1488,6 +1497,8 @@ static void gcwq_mayday_timeout(unsigned long __gcwq) · 267 unmodified lines
14881497 * otherwise.
14891498 */
14901499 static bool maybe_create_worker(struct global_cwq *gcwq)
1500+__releases(&gcwq->lock)
1501+__acquires(&gcwq->lock)
14911502 {
14921503 if (!need_to_create_worker(gcwq))
14931504 return false;
@@ -1662,6 +1673,7 @@ static void cwq_activate_first_delayed(struct cpu_workqueue_struct *cwq) · 168 unmodified lines
16621673 struct list_head *pos = gcwq_determine_ins_pos(cwq->gcwq, cwq);
16631674
16641675 move_linked_works(work, pos, NULL);
1676+ __clear_bit(WORK_STRUCT_DELAYED_BIT, work_data_bits(work));
16651677 cwq->nr_active++;
16661678 }
16671679
@@ -1669,6 +1681,7 @@ static void cwq_activate_first_delayed(struct cpu_workqueue_struct *cwq) · 1 unmodified line
16691681 * cwq_dec_nr_in_flight - decrement cwq's nr_in_flight
16701682 * @cwq: cwq of interest
16711683 * @color: color of work which left the queue
1684+ * @delayed: for a delayed work
16721685 *
16731686 * A work either has completed or is removed from pending queue,
16741687 * decrement nr_in_flight of its cwq and handle workqueue flushing.
@@ -1676,19 +1689,22 @@ static void cwq_activate_first_delayed(struct cpu_workqueue_struct *cwq) · 1 unmodified line
16761689 * CONTEXT:
16771690 * spin_lock_irq(gcwq->lock).
16781691 */
1679−static void cwq_dec_nr_in_flight(struct cpu_workqueue_struct *cwq, int color)
1692+static void cwq_dec_nr_in_flight(struct cpu_workqueue_struct *cwq, int color,
1693+ bool delayed)
16801694 {
16811695 /* ignore uncolored works */
16821696 if (color == WORK_NO_COLOR)
16831697 return;
16841698
16851699 cwq->nr_in_flight[color]--;
1686− cwq->nr_active--;
16871700
1688− if (!list_empty(&cwq->delayed_works)) {
1689− /* one down, submit a delayed one */
1690− if (cwq->nr_active < cwq->max_active)
1691− cwq_activate_first_delayed(cwq);
1701+ if (!delayed) {
1702+ cwq->nr_active--;
1703+ if (!list_empty(&cwq->delayed_works)) {
1704+ /* one down, submit a delayed one */
1705+ if (cwq->nr_active < cwq->max_active)
1706+ cwq_activate_first_delayed(cwq);
1707+ }
16921708 }
16931709
16941710 /* is flush in progress and are we at the flushing tip? */
@@ -1725,6 +1741,8 @@ static void cwq_dec_nr_in_flight(struct cpu_workqueue_struct *cwq, int color) · 30 unmodified lines
17251741 * spin_lock_irq(gcwq->lock) which is released and regrabbed.
17261742 */
17271743 static void process_one_work(struct worker *worker, struct work_struct *work)
1744+__releases(&gcwq->lock)
1745+__acquires(&gcwq->lock)
17281746 {
17291747 struct cpu_workqueue_struct *cwq = get_work_cwq(work);
17301748 struct global_cwq *gcwq = cwq->gcwq;
@@ -1823,7 +1841,7 @@ static void process_one_work(struct worker *worker, struct work_struct *work) · 92 unmodified lines
18231841 hlist_del_init(&worker->hentry);
18241842 worker->current_work = NULL;
18251843 worker->current_cwq = NULL;
1826− cwq_dec_nr_in_flight(cwq, work_color);
1844+ cwq_dec_nr_in_flight(cwq, work_color, false);
18271845 }
18281846
18291847 /**
@@ -2388,7 +2406,8 @@ static int try_to_grab_pending(struct work_struct *work) · 558 unmodified lines
23882406 debug_work_deactivate(work);
23892407 list_del_init(&work->entry);
23902408 cwq_dec_nr_in_flight(get_work_cwq(work),
2391− get_work_color(work));
2409+ get_work_color(work),
2410+ *work_data_bits(work) & WORK_STRUCT_DELAYED);
23922411 ret = 1;
23932412 }
23942413 }
@@ -2791,7 +2810,6 @@ struct workqueue_struct *__alloc_workqueue_key(const char *name, · 396 unmodified lines
27912810 if (IS_ERR(rescuer->task))
27922811 goto err;
27932812
2794− wq->rescuer = rescuer;
27952813 rescuer->task->flags |= PF_THREAD_BOUND;
27962814 wake_up_process(rescuer->task);
27972815 }
@@ -2833,6 +2851,7 @@ void destroy_workqueue(struct workqueue_struct *wq) · 35 unmodified lines
28332851 {
28342852 unsigned int cpu;
28352853
2854+ wq->flags |= WQ_DYING;
28362855 flush_workqueue(wq);
28372856
28382857 /*
@@ -2857,6 +2876,7 @@ void destroy_workqueue(struct workqueue_struct *wq) · 18 unmodified lines
28572876 if (wq->flags & WQ_RESCUER) {
28582877 kthread_stop(wq->rescuer->task);
28592878 free_mayday_mask(wq->mayday_mask);
2879+ kfree(wq->rescuer);
28602880 }
28612881
28622882 free_cwqs(wq);
@@ -3239,6 +3259,8 @@ static int __cpuinit trustee_thread(void *__gcwq) · 376 unmodified lines
32393259 * multiple times. To be used by cpu_callback.
32403260 */
32413261 static void __cpuinit wait_trustee_state(struct global_cwq *gcwq, int state)
3262+__releases(&gcwq->lock)
3263+__acquires(&gcwq->lock)
32423264 {
32433265 if (!(gcwq->trustee_state == state ||
32443266 gcwq->trustee_state == TRUSTEE_DONE)) {
@@ -3545,8 +3567,7 @@ static int __init init_workqueues(void) · 300 unmodified lines
35453567 spin_lock_init(&gcwq->lock);
35463568 INIT_LIST_HEAD(&gcwq->worklist);
35473569 gcwq->cpu = cpu;
3548− if (cpu == WORK_CPU_UNBOUND)
3549− gcwq->flags |= GCWQ_DISASSOCIATED;
3570+ gcwq->flags |= GCWQ_DISASSOCIATED;
35503571
35513572 INIT_LIST_HEAD(&gcwq->idle_list);
35523573 for (i = 0; i < BUSY_WORKER_HASH_SIZE; i++)
@@ -3570,6 +3591,8 @@ static int __init init_workqueues(void) · 17 unmodified lines
35703591 struct global_cwq *gcwq = get_gcwq(cpu);
35713592 struct worker *worker;
35723593
3594+ if (cpu != WORK_CPU_UNBOUND)
3595+ gcwq->flags &= ~GCWQ_DISASSOCIATED;
35733596 worker = create_worker(gcwq, true);
35743597 BUG_ON(!worker);
35753598 spin_lock_irq(&gcwq->lock);
lib/raid6/.gitignore+4−0
@@ -0,0 +1,4 @@
1+mktables
2+altivec*.c
3+int*.c
4+tables.c
lib/scatterlist.c+12−2
@@ -248,8 +248,18 @@ int __sg_alloc_table(struct sg_table *table, unsigned int nents, · 247 unmodified lines
248248 left -= sg_size;
249249
250250 sg = alloc_fn(alloc_size, gfp_mask);
251− if (unlikely(!sg))
252− return -ENOMEM;
251+ if (unlikely(!sg)) {
252+ /*
253+ * Adjust entry count to reflect that the last
254+ * entry of the previous table won't be used for
255+ * linkage. Without this, sg_kfree() may get
256+ * confused.
257+ */
258+ if (prv)
259+ table->nents = ++table->orig_nents;
260+
261+ return -ENOMEM;
262+ }
253263
254264 sg_init_table(sg, alloc_size);
255265 table->nents = table->orig_nents += sg_size;
mm/Kconfig+1−1
@@ -189,7 +189,7 @@ config COMPACTION · 188 unmodified lines
189189 config MIGRATION
190190 bool "Page migration"
191191 def_bool y
192− depends on NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE
192+ depends on NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE || COMPACTION
193193 help
194194 Allows the migration of the physical location of pages of processes
195195 while the virtual addresses are not changed. This is useful in
mm/backing-dev.c+5−2
@@ -445,8 +445,8 @@ static int bdi_forker_thread(void *ptr) · 444 unmodified lines
445445 switch (action) {
446446 case FORK_THREAD:
447447 __set_current_state(TASK_RUNNING);
448− task = kthread_run(bdi_writeback_thread, &bdi->wb, "flush-%s",
449− dev_name(bdi->dev));
448+ task = kthread_create(bdi_writeback_thread, &bdi->wb,
449+ "flush-%s", dev_name(bdi->dev));
450450 if (IS_ERR(task)) {
451451 /*
452452 * If thread creation fails, force writeout of
@@ -457,10 +457,13 @@ static int bdi_forker_thread(void *ptr) · 4 unmodified lines
457457 /*
458458 * The spinlock makes sure we do not lose
459459 * wake-ups when racing with 'bdi_queue_work()'.
460+ * And as soon as the bdi thread is visible, we
461+ * can start it.
460462 */
461463 spin_lock_bh(&bdi->wb_lock);
462464 bdi->wb.task = task;
463465 spin_unlock_bh(&bdi->wb_lock);
466+ wake_up_process(task);
464467 }
465468 break;
466469
mm/bounce.c+1−1
@@ -116,8 +116,8 @@ static void copy_to_high_bio_irq(struct bio *to, struct bio *from) · 115 unmodified lines
116116 */
117117 vfrom = page_address(fromvec->bv_page) + tovec->bv_offset;
118118
119− flush_dcache_page(tovec->bv_page);
120119 bounce_copy_vec(tovec, vfrom);
120+ flush_dcache_page(tovec->bv_page);
121121 }
122122 }
123123
mm/compaction.c+4−3
@@ -214,15 +214,16 @@ static void acct_isolated(struct zone *zone, struct compact_control *cc) · 213 unmodified lines
214214 /* Similar to reclaim, but different enough that they don't share logic */
215215 static bool too_many_isolated(struct zone *zone)
216216 {
217−
218− unsigned long inactive, isolated;
217+ unsigned long active, inactive, isolated;
219218
220219 inactive = zone_page_state(zone, NR_INACTIVE_FILE) +
221220 zone_page_state(zone, NR_INACTIVE_ANON);
221+ active = zone_page_state(zone, NR_ACTIVE_FILE) +
222+ zone_page_state(zone, NR_ACTIVE_ANON);
222223 isolated = zone_page_state(zone, NR_ISOLATED_FILE) +
223224 zone_page_state(zone, NR_ISOLATED_ANON);
224225
225− return isolated > inactive;
226+ return isolated > (inactive + active) / 2;
226227 }
227228
228229 /*
mm/ksm.c+0−3
@@ -1504,8 +1504,6 @@ struct page *ksm_does_need_to_copy(struct page *page, · 1503 unmodified lines
15041504 {
15051505 struct page *new_page;
15061506
1507− unlock_page(page); /* any racers will COW it, not modify it */
1508−
15091507 new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, address);
15101508 if (new_page) {
15111509 copy_user_highpage(new_page, page, address, vma);
@@ -1521,7 +1519,6 @@ struct page *ksm_does_need_to_copy(struct page *page, · 9 unmodified lines
15211519 add_page_to_unevictable_list(new_page);
15221520 }
15231521
1524− page_cache_release(page);
15251522 return new_page;
15261523 }
15271524
mm/memory.c+34−5
@@ -2623,7 +2623,7 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, · 2622 unmodified lines
26232623 unsigned int flags, pte_t orig_pte)
26242624 {
26252625 spinlock_t *ptl;
2626− struct page *page;
2626+ struct page *page, *swapcache = NULL;
26272627 swp_entry_t entry;
26282628 pte_t pte;
26292629 struct mem_cgroup *ptr = NULL;
@@ -2679,10 +2679,23 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, · 49 unmodified lines
26792679 lock_page(page);
26802680 delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
26812681
2682− page = ksm_might_need_to_copy(page, vma, address);
2683− if (!page) {
2684− ret = VM_FAULT_OOM;
2685− goto out;
2682+ /*
2683+ * Make sure try_to_free_swap didn't release the swapcache
2684+ * from under us. The page pin isn't enough to prevent that.
2685+ */
2686+ if (unlikely(!PageSwapCache(page)))
2687+ goto out_page;
2688+
2689+ if (ksm_might_need_to_copy(page, vma, address)) {
2690+ swapcache = page;
2691+ page = ksm_does_need_to_copy(page, vma, address);
2692+
2693+ if (unlikely(!page)) {
2694+ ret = VM_FAULT_OOM;
2695+ page = swapcache;
2696+ swapcache = NULL;
2697+ goto out_page;
2698+ }
26862699 }
26872700
26882701 if (mem_cgroup_try_charge_swapin(mm, page, GFP_KERNEL, &ptr)) {
@@ -2735,6 +2748,18 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, · 46 unmodified lines
27352748 if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
27362749 try_to_free_swap(page);
27372750 unlock_page(page);
2751+ if (swapcache) {
2752+ /*
2753+ * Hold the lock to avoid the swap entry to be reused
2754+ * until we take the PT lock for the pte_same() check
2755+ * (to avoid false positives from pte_same). For
2756+ * further safety release the lock after the swap_free
2757+ * so that the swap count won't change under a
2758+ * parallel locked swapcache.
2759+ */
2760+ unlock_page(swapcache);
2761+ page_cache_release(swapcache);
2762+ }
27382763
27392764 if (flags & FAULT_FLAG_WRITE) {
27402765 ret |= do_wp_page(mm, vma, address, page_table, pmd, ptl, pte);
@@ -2756,6 +2781,10 @@ out_page: · 15 unmodified lines
27562781 unlock_page(page);
27572782 out_release:
27582783 page_cache_release(page);
2784+ if (swapcache) {
2785+ unlock_page(swapcache);
2786+ page_cache_release(swapcache);
2787+ }
27592788 return ret;
27602789 }
27612790
mm/memory_hotplug.c+8−8
@@ -584,19 +584,19 @@ static inline int pageblock_free(struct page *page) · 583 unmodified lines
584584 /* Return the start of the next active pageblock after a given page */
585585 static struct page *next_active_pageblock(struct page *page)
586586 {
587− int pageblocks_stride;
588−
589587 /* Ensure the starting page is pageblock-aligned */
590588 BUG_ON(page_to_pfn(page) & (pageblock_nr_pages - 1));
591589
592− /* Move forward by at least 1 * pageblock_nr_pages */
593− pageblocks_stride = 1;
594−
595590 /* If the entire pageblock is free, move to the end of free page */
596− if (pageblock_free(page))
597− pageblocks_stride += page_order(page) - pageblock_order;
591+ if (pageblock_free(page)) {
592+ int order;
593+ /* be careful. we don't have locks, page_order can be changed.*/
594+ order = page_order(page);
595+ if ((order < MAX_ORDER) && (order >= pageblock_order))
596+ return page + (1 << order);
597+ }
598598
599− return page + (pageblocks_stride * pageblock_nr_pages);
599+ return page + pageblock_nr_pages;
600600 }
601601
602602 /* Checks if this range of memory is likely to be hot-removable. */
mm/mlock.c+0−6
@@ -135,12 +135,6 @@ void munlock_vma_page(struct page *page) · 134 unmodified lines
135135 }
136136 }
137137
138−/* Is the vma a continuation of the stack vma above it? */
139−static inline int vma_stack_continue(struct vm_area_struct *vma, unsigned long addr)
140−{
141− return vma && (vma->vm_end == addr) && (vma->vm_flags & VM_GROWSDOWN);
142−}
143−
144138 static inline int stack_guard_page(struct vm_area_struct *vma, unsigned long addr)
145139 {
146140 return (vma->vm_flags & VM_GROWSDOWN) &&
mm/mmzone.c+21−0
@@ -87,3 +87,24 @@ int memmap_valid_within(unsigned long pfn, · 86 unmodified lines
8787 return 1;
8888 }
8989 #endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
90+
91+#ifdef CONFIG_SMP
92+/* Called when a more accurate view of NR_FREE_PAGES is needed */
93+unsigned long zone_nr_free_pages(struct zone *zone)
94+{
95+ unsigned long nr_free_pages = zone_page_state(zone, NR_FREE_PAGES);
96+
97+ /*
98+ * While kswapd is awake, it is considered the zone is under some
99+ * memory pressure. Under pressure, there is a risk that
100+ * per-cpu-counter-drift will allow the min watermark to be breached
101+ * potentially causing a live-lock. While kswapd is awake and
102+ * free pages are low, get a better estimate for free pages
103+ */
104+ if (nr_free_pages < zone->percpu_drift_mark &&
105+ !waitqueue_active(&zone->zone_pgdat->kswapd_wait))
106+ return zone_page_state_snapshot(zone, NR_FREE_PAGES);
107+
108+ return nr_free_pages;
109+}
110+#endif /* CONFIG_SMP */
mm/page-writeback.c+11−16
@@ -985,22 +985,16 @@ continue_unlock: · 984 unmodified lines
985985 }
986986 }
987987
988− if (wbc->nr_to_write > 0) {
989− if (--wbc->nr_to_write == 0 &&
990− wbc->sync_mode == WB_SYNC_NONE) {
991− /*
992− * We stop writing back only if we are
993− * not doing integrity sync. In case of
994− * integrity sync we have to keep going
995− * because someone may be concurrently
996− * dirtying pages, and we might have
997− * synced a lot of newly appeared dirty
998− * pages, but have not synced all of the
999− * old dirty pages.
1000− */
1001− done = 1;
1002− break;
1003− }
988+ /*
989+ * We stop writing back only if we are not doing
990+ * integrity sync. In case of integrity sync we have to
991+ * keep going until we have written all the pages
992+ * we tagged for writeback prior to entering this loop.
993+ */
994+ if (--wbc->nr_to_write <= 0 &&
995+ wbc->sync_mode == WB_SYNC_NONE) {
996+ done = 1;
997+ break;
1004998 }
1005999 }
10061000 pagevec_release(&pvec);
@@ -1132,6 +1126,7 @@ void account_page_dirtied(struct page *page, struct address_space *mapping) · 125 unmodified lines
11321126 task_io_account_write(PAGE_CACHE_SIZE);
11331127 }
11341128 }
1129+EXPORT_SYMBOL(account_page_dirtied);
11351130
11361131 /*
11371132 * For address_spaces which do not use buffers. Just tag the page as dirty in
mm/page_alloc.c+23−10
@@ -588,13 +588,13 @@ static void free_pcppages_bulk(struct zone *zone, int count, · 587 unmodified lines
588588 {
589589 int migratetype = 0;
590590 int batch_free = 0;
591+ int to_free = count;
591592
592593 spin_lock(&zone->lock);
593594 zone->all_unreclaimable = 0;
594595 zone->pages_scanned = 0;
595596
596− __mod_zone_page_state(zone, NR_FREE_PAGES, count);
597− while (count) {
597+ while (to_free) {
598598 struct page *page;
599599 struct list_head *list;
600600
@@ -619,8 +619,9 @@ static void free_pcppages_bulk(struct zone *zone, int count, · 18 unmodified lines
619619 /* MIGRATE_MOVABLE list may include MIGRATE_RESERVEs */
620620 __free_one_page(page, zone, 0, page_private(page));
621621 trace_mm_page_pcpu_drain(page, 0, page_private(page));
622− } while (--count && --batch_free && !list_empty(list));
622+ } while (--to_free && --batch_free && !list_empty(list));
623623 }
624+ __mod_zone_page_state(zone, NR_FREE_PAGES, count);
624625 spin_unlock(&zone->lock);
625626 }
626627
@@ -631,8 +632,8 @@ static void free_one_page(struct zone *zone, struct page *page, int order, · 4 unmodified lines
631632 zone->all_unreclaimable = 0;
632633 zone->pages_scanned = 0;
633634
634− __mod_zone_page_state(zone, NR_FREE_PAGES, 1 << order);
635635 __free_one_page(page, zone, order, migratetype);
636+ __mod_zone_page_state(zone, NR_FREE_PAGES, 1 << order);
636637 spin_unlock(&zone->lock);
637638 }
638639
@@ -1461,7 +1462,7 @@ int zone_watermark_ok(struct zone *z, int order, unsigned long mark, · 822 unmodified lines
14611462 {
14621463 /* free_pages my go negative - that's OK */
14631464 long min = mark;
1464− long free_pages = zone_page_state(z, NR_FREE_PAGES) - (1 << order) + 1;
1465+ long free_pages = zone_nr_free_pages(z) - (1 << order) + 1;
14651466 int o;
14661467
14671468 if (alloc_flags & ALLOC_HIGH)
@@ -1846,6 +1847,7 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order, · 378 unmodified lines
18461847 struct page *page = NULL;
18471848 struct reclaim_state reclaim_state;
18481849 struct task_struct *p = current;
1850+ bool drained = false;
18491851
18501852 cond_resched();
18511853
@@ -1864,14 +1866,25 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order, · 12 unmodified lines
18641866
18651867 cond_resched();
18661868
1867− if (order != 0)
1868− drain_all_pages();
1869+ if (unlikely(!(*did_some_progress)))
1870+ return NULL;
18691871
1870− if (likely(*did_some_progress))
1871− page = get_page_from_freelist(gfp_mask, nodemask, order,
1872+retry:
1873+ page = get_page_from_freelist(gfp_mask, nodemask, order,
18721874 zonelist, high_zoneidx,
18731875 alloc_flags, preferred_zone,
18741876 migratetype);
1877+
1878+ /*
1879+ * If an allocation failed after direct reclaim, it could be because
1880+ * pages are pinned on the per-cpu lists. Drain them and try again
1881+ */
1882+ if (!page && !drained) {

17 more lines aren’t shown here.

mm/percpu.c+4−2

This diff is large: its 20 lines aren’t shown here.

mm/percpu_up.c+2−2

This diff is large: its 16 lines aren’t shown here.

mm/rmap.c+16−3

This diff is large: its 33 lines aren’t shown here.

mm/swapfile.c+46−83

This diff is large: its 199 lines aren’t shown here.

mm/vmstat.c+15−1

This diff is large: its 42 lines aren’t shown here.

net/9p/client.c+6−1

This diff is large: its 32 lines aren’t shown here.

net/ax25/ax25_ds_timer.c+1−1

This diff is large: its 10 lines aren’t shown here.

net/bridge/br_netfilter.c+5−3

This diff is large: its 24 lines aren’t shown here.

net/caif/cfrfml.c+1−1

This diff is large: its 9 lines aren’t shown here.

net/core/dev.c+8−8

This diff is large: its 25 lines aren’t shown here.

net/core/gen_estimator.c+6−6

This diff is large: its 48 lines aren’t shown here.

net/core/skbuff.c+5−1

This diff is large: its 20 lines aren’t shown here.

net/ipv4/Kconfig+1−1

This diff is large: its 9 lines aren’t shown here.

net/ipv4/datagram.c+4−1

This diff is large: its 13 lines aren’t shown here.

net/ipv4/fib_frontend.c+13−2

This diff is large: its 33 lines aren’t shown here.

net/ipv4/fib_trie.c+6−2

This diff is large: its 22 lines aren’t shown here.

net/ipv4/route.c+6−1

This diff is large: its 21 lines aren’t shown here.

net/ipv4/tcp.c+10−22

This diff is large: its 61 lines aren’t shown here.

net/ipv4/tcp_cong.c+3−2

This diff is large: its 21 lines aren’t shown here.

net/ipv4/tcp_timer.c+4−4

This diff is large: its 23 lines aren’t shown here.

net/ipv4/udp.c+44−0

This diff is large: its 58 lines aren’t shown here.

net/ipv6/datagram.c+6−1

This diff is large: its 23 lines aren’t shown here.

net/ipv6/netfilter/nf_conntrack_reasm.c+15−65

This diff is large: its 104 lines aren’t shown here.

net/ipv6/reassembly.c+15−56

This diff is large: its 95 lines aren’t shown here.

net/ipv6/udp.c+10−0

This diff is large: its 24 lines aren’t shown here.

net/irda/af_irda.c+2−2

This diff is large: its 11 lines aren’t shown here.

net/irda/irlan/irlan_common.c+1−1

This diff is large: its 9 lines aren’t shown here.

net/l2tp/l2tp_eth.c+1−1

This diff is large: its 9 lines aren’t shown here.

net/mac80211/main.c+6−0

This diff is large: its 13 lines aren’t shown here.

net/netfilter/ipvs/ip_vs_core.c+1−0

This diff is large: its 8 lines aren’t shown here.

net/netfilter/ipvs/ip_vs_ftp.c+2−7

This diff is large: its 37 lines aren’t shown here.

net/netfilter/ipvs/ip_vs_xmit.c+12−6

This diff is large: its 49 lines aren’t shown here.

net/netlink/af_netlink.c+22−0

This diff is large: its 36 lines aren’t shown here.

net/sched/act_police.c+9−12

This diff is large: its 32 lines aren’t shown here.

net/sched/sch_hfsc.c+1−1

This diff is large: its 10 lines aren’t shown here.

net/sctp/sm_statefuns.c+23−23

This diff is large: its 73 lines aren’t shown here.

net/unix/af_unix.c+12−3

This diff is large: its 29 lines aren’t shown here.

net/wireless/core.c+12−9

This diff is large: its 39 lines aren’t shown here.

net/wireless/wext-compat.c+3−0

This diff is large: its 10 lines aren’t shown here.

net/wireless/wext-core.c+16−0

This diff is large: its 23 lines aren’t shown here.

net/xfrm/xfrm_user.c+1−1

This diff is large: its 9 lines aren’t shown here.

scripts/basic/docproc.c+128−1

This diff is large: its 234 lines aren’t shown here.

scripts/kernel-doc+51−3

This diff is large: its 96 lines aren’t shown here.

security/apparmor/include/resource.h+2−2

This diff is large: its 11 lines aren’t shown here.

security/apparmor/lib.c+1−1

This diff is large: its 16 lines aren’t shown here.

security/apparmor/lsm.c+1−1

This diff is large: its 9 lines aren’t shown here.

security/apparmor/path.c+11−27

This diff is large: its 62 lines aren’t shown here.

security/apparmor/policy.c+4−2

This diff is large: its 26 lines aren’t shown here.

security/apparmor/resource.c+12−8

This diff is large: its 38 lines aren’t shown here.

security/integrity/ima/ima.h+1−0

This diff is large: its 8 lines aren’t shown here.

security/integrity/ima/ima_iint.c+3−1

This diff is large: its 20 lines aren’t shown here.

security/integrity/ima/ima_main.c+5−3

This diff is large: its 34 lines aren’t shown here.

security/keys/keyctl.c+5−1

This diff is large: its 34 lines aren’t shown here.

sound/core/pcm.c+6−0

This diff is large: its 17 lines aren’t shown here.

sound/core/rawmidi.c+2−0

This diff is large: its 9 lines aren’t shown here.

sound/core/seq/oss/seq_oss_init.c+4−5

This diff is large: its 27 lines aren’t shown here.

sound/isa/msnd/msnd_pinnacle.c+6−2

This diff is large: its 24 lines aren’t shown here.

sound/oss/sound_timer.c+1−1

This diff is large: its 9 lines aren’t shown here.

sound/pci/asihpi/hpi6205.c+5−2

This diff is large: its 21 lines aren’t shown here.

sound/pci/hda/hda_codec.c+1−1

This diff is large: its 9 lines aren’t shown here.

sound/pci/hda/patch_cirrus.c+50−0

This diff is large: its 64 lines aren’t shown here.

sound/pci/hda/patch_conexant.c+58−0

This diff is large: its 123 lines aren’t shown here.

sound/pci/hda/patch_realtek.c+2−0

This diff is large: its 16 lines aren’t shown here.

sound/pci/oxygen/oxygen.h+1−0

This diff is large: its 8 lines aren’t shown here.

sound/pci/oxygen/oxygen_lib.c+18−3

This diff is large: its 39 lines aren’t shown here.

sound/pci/oxygen/virtuoso.c+1−0

This diff is large: its 8 lines aren’t shown here.

sound/pci/oxygen/xonar_wm87x6.c+21−1

This diff is large: its 59 lines aren’t shown here.

sound/soc/soc-core.c+1−1

This diff is large: its 9 lines aren’t shown here.

sound/usb/card.c+13−6

This diff is large: its 47 lines aren’t shown here.

sound/usb/clock.c+1−2

This diff is large: its 14 lines aren’t shown here.

sound/usb/endpoint.c+6−5

This diff is large: its 25 lines aren’t shown here.

sound/usb/format.c+10−12

This diff is large: its 64 lines aren’t shown here.

sound/usb/mixer.c+9−1

This diff is large: its 17 lines aren’t shown here.

sound/usb/pcm.c+1−2

This diff is large: its 15 lines aren’t shown here.

tools/perf/util/symbol.c+7−0

This diff is large: its 33 lines aren’t shown here.

tools/perf/util/symbol.h+2−1

This diff is large: its 10 lines aren’t shown here.

virt/kvm/kvm_main.c+2−3

This diff is large: its 21 lines aren’t shown here.