History

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

Simple overlapping changes in stmmac driver. Adjust skb_gro_flush_final_remcsum function signature to make GRO list changes in net-next, as per Stephen Rothwell's example merge resolution.

David S. Miller committed 8 years ago

Commit 5cd3da42 parents f6779e4 d0fbad0471 files · +3815 −2447Browse files

Unified · Split

471 files
  1. Documentation/admin-guide/pm/intel_pstate.rst +12 −2
  2. Documentation/devicetree/bindings/input/sprd,sc27xx-vibra.txt +23 −0
  3. Documentation/filesystems/Locking +1 −6
  4. Documentation/filesystems/vfs.txt +0 −13
  5. Documentation/kbuild/kconfig-language.txt +6 −0
  6. Documentation/usb/gadget_configfs.txt +1 −1
  7. MAINTAINERS +19 −6
  8. Makefile +1 −6
  9. arch/arm/Kconfig +7 −1
  10. arch/arm/boot/dts/armada-385-synology-ds116.dts +1 −1
  11. arch/arm/boot/dts/bcm-cygnus.dtsi +12 −12
  12. arch/arm/boot/dts/bcm-hr2.dtsi +12 −12
  13. arch/arm/boot/dts/bcm-nsp.dtsi +16 −16
  14. arch/arm/boot/dts/bcm5301x.dtsi +1 −1
  15. arch/arm/boot/dts/da850.dtsi +1 −5
  16. arch/arm/boot/dts/imx6q.dtsi +1 −1
  17. arch/arm/boot/dts/imx6sx.dtsi +1 −1
  18. arch/arm/boot/dts/socfpga.dtsi +2 −2
  19. arch/arm/boot/dts/socfpga_arria10.dtsi +2 −3
  20. arch/arm/common/Makefile +1 −1
  21. arch/arm/configs/multi_v7_defconfig +155 −223
  22. arch/arm/mach-bcm/Kconfig +1 −0
  23. arch/arm/mach-davinci/board-da850-evm.c +1 −1
  24. arch/arm/mach-socfpga/Kconfig +1 −0
  25. arch/arm/net/bpf_jit_32.c +1 −1
  26. arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi +2 −4
  27. arch/arm64/boot/dts/amlogic/meson-axg-s400.dts +14 −1
  28. arch/arm64/boot/dts/amlogic/meson-axg.dtsi +2 −2
  29. arch/arm64/boot/dts/amlogic/meson-gx.dtsi +9 −3
  30. arch/arm64/boot/dts/amlogic/meson-gxl-mali.dtsi +1 −1
  31. arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts +0 −3
  32. arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi +7 −0
  33. arch/arm64/boot/dts/amlogic/meson-gxl.dtsi +0 −8
  34. arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi +4 −4
  35. arch/arm64/boot/dts/broadcom/stingray/bcm958742k.dts +4 −0
  36. arch/arm64/boot/dts/broadcom/stingray/bcm958742t.dts +4 −0
  37. arch/arm64/boot/dts/broadcom/stingray/stingray.dtsi +2 −2
  38. arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts +2 −0
  39. arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +2 −0
  40. arch/arm64/boot/dts/marvell/armada-cp110.dtsi +1 −1
  41. arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi +1 −1
  42. arch/arm64/boot/dts/qcom/msm8916.dtsi +2 −2
  43. arch/arm64/boot/dts/socionext/uniphier-ld11-global.dts +1 −1
  44. arch/arm64/boot/dts/socionext/uniphier-ld20-global.dts +1 −1
  45. arch/arm64/configs/defconfig +39 −63
  46. arch/arm64/include/asm/alternative.h +6 −1
  47. arch/arm64/include/asm/pgtable.h +1 −5
  48. arch/arm64/kernel/alternative.c +44 −7
  49. arch/arm64/kernel/module.c +2 −3
  50. arch/microblaze/Kconfig.debug +0 −7
  51. arch/microblaze/include/asm/setup.h +0 −5
  52. arch/microblaze/include/asm/unistd.h +1 −1
  53. arch/microblaze/include/uapi/asm/unistd.h +2 −0
  54. arch/microblaze/kernel/Makefile +1 −3
  55. arch/microblaze/kernel/heartbeat.c +0 −72
  56. arch/microblaze/kernel/platform.c +0 −29
  57. arch/microblaze/kernel/reset.c +6 −5
  58. arch/microblaze/kernel/syscall_table.S +2 −0
  59. arch/microblaze/kernel/timer.c +0 −7
  60. arch/mips/kernel/signal.c +2 −2
  61. arch/openrisc/include/asm/pgalloc.h +5 −1
  62. arch/openrisc/kernel/entry.S +1 −7
  63. arch/openrisc/kernel/head.S +6 −3
  64. arch/openrisc/kernel/traps.c +1 −1
  65. arch/parisc/Kconfig +3 −3
  66. arch/parisc/Makefile +0 −4
  67. arch/parisc/include/asm/signal.h +0 −8
  68. arch/parisc/include/uapi/asm/unistd.h +2 −1
  69. arch/parisc/kernel/drivers.c +9 −16
  70. arch/parisc/kernel/syscall_table.S +1 −0
  71. arch/parisc/kernel/unwind.c +2 −2
  72. arch/powerpc/include/asm/book3s/32/pgalloc.h +0 −1
  73. arch/powerpc/include/asm/nohash/32/pgalloc.h +0 −1
  74. arch/powerpc/include/asm/systbl.h +1 −0
  75. arch/powerpc/include/asm/unistd.h +1 −1
  76. arch/powerpc/include/uapi/asm/unistd.h +1 −0
  77. arch/powerpc/kernel/pci_32.c +0 −4
  78. arch/powerpc/kernel/pci_64.c +0 −4
  79. arch/powerpc/kernel/rtas.c +0 −4
  80. arch/powerpc/kernel/signal_32.c +0 −8
  81. arch/powerpc/kernel/signal_64.c +0 −4
  82. arch/powerpc/kernel/syscalls.c +0 −4
  83. arch/powerpc/mm/subpage-prot.c +0 −4
  84. arch/powerpc/platforms/powermac/time.c +20 −9
  85. arch/s390/net/bpf_jit_comp.c +1 −0
  86. arch/x86/entry/entry_32.S +1 −1
  87. arch/x86/entry/entry_64_compat.S +8 −8
  88. arch/x86/include/asm/pgalloc.h +3 −0
  89. arch/x86/include/asm/pgtable.h +1 −1
  90. arch/x86/include/asm/pgtable_64.h +2 −2
  91. arch/x86/kernel/e820.c +12 −3
  92. arch/x86/mm/fault.c +7 −14
  93. arch/x86/platform/efi/efi_64.c +2 −2
  94. block/blk-core.c +4 −0
  95. block/blk-mq.c +12 −0
  96. certs/blacklist.h +1 −1
  97. crypto/af_alg.c +10 −3
  98. crypto/algif_aead.c +2 −2
  99. crypto/algif_skcipher.c +2 −2
  100. crypto/asymmetric_keys/x509_cert_parser.c +9 −0
  101. drivers/acpi/osl.c +72 −0
  102. drivers/atm/iphase.c +1 −1
  103. drivers/atm/zatm.c +2 −0
  104. drivers/base/power/domain.c +3 −4
  105. drivers/block/drbd/drbd_req.c +2 −2
  106. drivers/char/random.c +13 −16
  107. drivers/cpufreq/qcom-cpufreq-kryo.c +4 −4
  108. drivers/dax/super.c +8 −0
  109. drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c +1 −1
  110. drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +27 −6
  111. drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +5 −3
  112. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +8 −8
  113. drivers/gpu/drm/arm/malidp_drv.c +2 −1
  114. drivers/gpu/drm/arm/malidp_hw.c +2 −1
  115. drivers/gpu/drm/arm/malidp_planes.c +6 −3
  116. drivers/gpu/drm/i915/i915_drv.h +0 −3
  117. drivers/gpu/drm/meson/meson_drv.c +8 −4
  118. drivers/i2c/algos/i2c-algo-bit.c +4 −4
  119. drivers/i2c/busses/i2c-gpio.c +2 −2
  120. drivers/i2c/i2c-core-smbus.c +9 −5
  121. drivers/iio/accel/mma8452.c +1 −1
  122. drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +2 −0
  123. drivers/iio/light/tsl2772.c +2 −0
  124. drivers/iio/pressure/bmp280-core.c +2 −3
  125. drivers/infiniband/hw/mlx5/main.c +1 −1
  126. drivers/input/input-mt.c +8 −4
  127. drivers/input/joystick/xpad.c +1 −1
  128. drivers/input/keyboard/goldfish_events.c +5 −4
  129. drivers/input/misc/Kconfig +10 −0
  130. drivers/input/misc/Makefile +1 −0
  131. drivers/input/misc/sc27xx-vibra.c +154 −0
  132. drivers/input/mouse/elan_i2c.h +2 −0
  133. drivers/input/mouse/elan_i2c_core.c +2 −1
  134. drivers/input/mouse/elan_i2c_smbus.c +8 −2
  135. drivers/input/mouse/elantech.c +9 −2
  136. drivers/input/mouse/psmouse-base.c +6 −6
  137. drivers/input/rmi4/Kconfig +1 −0
  138. drivers/input/rmi4/rmi_2d_sensor.c +16 −18
  139. drivers/input/rmi4/rmi_bus.c +49 −1
  140. drivers/input/rmi4/rmi_bus.h +9 −1
  141. drivers/input/rmi4/rmi_driver.c +20 −32
  142. drivers/input/rmi4/rmi_f01.c +5 −5
  143. drivers/input/rmi4/rmi_f03.c +5 −4
  144. drivers/input/rmi4/rmi_f11.c +16 −26
  145. drivers/input/rmi4/rmi_f12.c +4 −4
  146. drivers/input/rmi4/rmi_f30.c +5 −4
  147. drivers/input/rmi4/rmi_f34.c +3 −2
  148. drivers/input/rmi4/rmi_f54.c +0 −6
  149. drivers/input/touchscreen/silead.c +1 −0
  150. drivers/isdn/mISDN/socket.c +1 −1
  151. drivers/md/dm-raid.c +1 −1
  152. drivers/md/dm-table.c +4 −3
  153. drivers/md/dm-thin-metadata.c +0 −9
  154. drivers/md/dm-thin.c +9 −2
  155. drivers/md/dm-writecache.c +5 −5
  156. drivers/md/dm-zoned-target.c +1 −1
  157. drivers/md/dm.c +3 −5
  158. drivers/md/md.c +5 −3
  159. drivers/md/raid10.c +7 −0
  160. drivers/media/rc/bpf-lirc.c +2 −12
  161. drivers/mtd/chips/cfi_cmdset_0002.c +11 −8
  162. drivers/mtd/devices/mtd_dataflash.c +2 −2
  163. drivers/mtd/nand/raw/denali_dt.c +5 −1
  164. drivers/mtd/nand/raw/mxc_nand.c +4 −1
  165. drivers/mtd/nand/raw/nand_base.c +1 −1
  166. drivers/mtd/nand/raw/nand_macronix.c +36 −12
  167. drivers/mtd/nand/raw/nand_micron.c +2 −0
  168. drivers/net/ethernet/atheros/alx/main.c +7 −1
  169. drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +1 −0
  170. drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +6 −0
  171. drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +6 −0
  172. drivers/net/ethernet/broadcom/cnic.c +1 −1
  173. drivers/net/ethernet/cadence/macb_main.c +2 −0
  174. drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +8 −7
  175. drivers/net/ethernet/freescale/fman/fman_port.c +8 −0
  176. drivers/net/ethernet/huawei/hinic/hinic_rx.c +1 −0
  177. drivers/net/ethernet/intel/i40e/i40e_txrx.c +15 −9
  178. drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +14 −10
  179. drivers/net/ethernet/mellanox/mlx5/core/cmd.c +4 −4
  180. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +6 −6
  181. drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +6 −2
  182. drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +5 −7
  183. drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +2 −2
  184. drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +2 −1
  185. drivers/net/ethernet/mellanox/mlx5/core/fw.c +3 −2
  186. drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c +5 −4
  187. drivers/net/ethernet/mellanox/mlx5/core/port.c +2 −2
  188. drivers/net/ethernet/mellanox/mlx5/core/sriov.c +6 −1
  189. drivers/net/ethernet/mellanox/mlx5/core/vport.c +0 −2
  190. drivers/net/ethernet/netronome/nfp/bpf/main.c +6 −3
  191. drivers/net/ethernet/netronome/nfp/flower/match.c +14 −0
  192. drivers/net/ethernet/netronome/nfp/flower/offload.c +11 −0
  193. drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c +1 −1
  194. drivers/net/ethernet/qlogic/qed/qed_dcbx.c +4 −4
  195. drivers/net/ethernet/qlogic/qed/qed_dev.c +1 −1
  196. drivers/net/ethernet/qlogic/qed/qed_main.c +8 −0
  197. drivers/net/ethernet/qlogic/qed/qed_sriov.c +17 −2
  198. drivers/net/ethernet/qlogic/qede/qede_ptp.c +8 −2
  199. drivers/net/ethernet/sfc/farch.c +1 −0
  200. drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +12 −0
  201. drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.h +2 −0
  202. drivers/net/ethernet/stmicro/stmmac/hwif.h +3 −0
  203. drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +2 −0
  204. drivers/net/geneve.c +1 −1
  205. drivers/net/hyperv/hyperv_net.h +1 −1
  206. drivers/net/hyperv/netvsc.c +36 −1
  207. drivers/net/hyperv/netvsc_drv.c +16 −1
  208. drivers/net/hyperv/rndis_filter.c +12 −49
  209. drivers/net/ipvlan/ipvlan_main.c +28 −8
  210. drivers/net/phy/dp83tc811.c +1 −1
  211. drivers/net/ppp/pppoe.c +1 −1
  212. drivers/net/usb/lan78xx.c +34 −3
  213. drivers/net/usb/r8152.c +2 −1
  214. drivers/net/virtio_net.c +19 −11
  215. drivers/net/vxlan.c +1 −3
  216. drivers/nfc/pn533/usb.c +2 −2
  217. drivers/nvdimm/pmem.c +2 −1
  218. drivers/nvme/host/rdma.c +5 −2
  219. drivers/pci/Makefile +3 −3
  220. drivers/pci/controller/Kconfig +0 −3
  221. drivers/pci/hotplug/acpi_pcihp.c +9 −1
  222. drivers/perf/xgene_pmu.c +1 −1
  223. drivers/s390/net/qeth_core.h +12 −1
  224. drivers/s390/net/qeth_core_main.c +28 −19
  225. drivers/s390/net/qeth_l2_main.c +15 −9
  226. drivers/s390/net/qeth_l3_main.c +2 −1
  227. drivers/scsi/ipr.c +0 −2
  228. drivers/scsi/qla2xxx/qla_target.c +3 −4
  229. drivers/scsi/scsi_debug.c +1 −1
  230. drivers/soc/imx/gpcv2.c +9 −4
  231. drivers/soc/qcom/Kconfig +2 −1
  232. drivers/soc/renesas/rcar-sysc.c +29 −6
  233. drivers/staging/android/ion/ion_heap.c +1 −1
  234. drivers/staging/comedi/drivers/quatech_daqp_cs.c +1 −1
  235. drivers/staging/typec/Kconfig +1 −0
  236. drivers/target/target_core_user.c +36 −8
  237. drivers/tty/n_tty.c +32 −23
  238. drivers/tty/serdev/core.c +1 −0
  239. drivers/tty/serial/8250/8250_pci.c +0 −2
  240. drivers/tty/vt/vt.c +2 −2
  241. drivers/usb/chipidea/host.c +4 −1
  242. drivers/usb/class/cdc-acm.c +3 −0
  243. drivers/usb/dwc2/core.h +3 −0
  244. drivers/usb/dwc2/gadget.c +12 −8
  245. drivers/usb/dwc2/hcd.c +87 −6
  246. drivers/usb/dwc2/hcd.h +8 −0
  247. drivers/usb/dwc2/hcd_intr.c +9 −2
  248. drivers/usb/dwc2/hcd_queue.c +4 −1
  249. drivers/usb/dwc3/core.c +13 −10
  250. drivers/usb/dwc3/dwc3-of-simple.c +2 −1
  251. drivers/usb/dwc3/dwc3-pci.c +2 −0
  252. drivers/usb/dwc3/dwc3-qcom.c +5 −8
  253. drivers/usb/gadget/composite.c +3 −0
  254. drivers/usb/gadget/function/f_fs.c +18 −8
  255. drivers/usb/host/xhci-mem.c +2 −2
  256. drivers/usb/host/xhci-tegra.c +3 −3
  257. drivers/usb/host/xhci-trace.h +31 −5
  258. drivers/usb/host/xhci.c +43 −4
  259. drivers/usb/host/xhci.h +4 −0
  260. drivers/usb/serial/cp210x.c +14 −0
  261. drivers/usb/typec/tcpm.c +6 −4
  262. drivers/usb/typec/ucsi/ucsi.c +13 −0
  263. drivers/usb/typec/ucsi/ucsi_acpi.c +5 −0
  264. fs/aio.c +1 −147
  265. fs/btrfs/extent_io.c +4 −1
  266. fs/btrfs/inode.c +5 −2
  267. fs/btrfs/ioctl.c +5 −5
  268. fs/btrfs/qgroup.c +13 −4
  269. fs/ceph/inode.c +1 −0
  270. fs/eventfd.c +6 −13
  271. fs/eventpoll.c +5 −10
  272. fs/pipe.c +9 −13
  273. fs/proc/generic.c +10 −1
  274. fs/select.c +0 −23
  275. fs/timerfd.c +11 −11
  276. fs/xfs/libxfs/xfs_ag_resv.c +27 −4
  277. fs/xfs/libxfs/xfs_bmap.c +26 −0
  278. fs/xfs/libxfs/xfs_bmap.h +2 −0
  279. fs/xfs/libxfs/xfs_format.h +5 −0
  280. fs/xfs/libxfs/xfs_inode_buf.c +47 −29
  281. fs/xfs/libxfs/xfs_rtbitmap.c +2 −2
  282. fs/xfs/xfs_bmap_util.c +52 −54
  283. fs/xfs/xfs_fsmap.c +2 −2
  284. fs/xfs/xfs_fsops.c +1 −1
  285. fs/xfs/xfs_inode.c +21 −36
  286. fs/xfs/xfs_iomap.c +14 −1
  287. fs/xfs/xfs_trans.c +6 −1
  288. include/crypto/if_alg.h +2 −1
  289. include/linux/acpi.h +3 −0
  290. include/linux/blkdev.h +2 −2
  291. include/linux/bpf-cgroup.h +26 −0
  292. include/linux/bpf.h +8 −0
  293. include/linux/bpf_lirc.h +3 −2
  294. include/linux/compat.h +7 −1
  295. include/linux/compiler-gcc.h +25 −0
  296. include/linux/compiler_types.h +18 −0
  297. include/linux/dax.h +1 −1
  298. include/linux/filter.h +8 −48
  299. include/linux/fs.h +0 −2
  300. include/linux/iio/buffer-dma.h +1 −1
  301. include/linux/input/mt.h +1 −1
  302. include/linux/mlx5/eswitch.h +2 −0
  303. include/linux/mlx5/mlx5_ifc.h +1 −1
  304. include/linux/net.h +0 −1
  305. include/linux/netdevice.h +20 −0
  306. include/linux/pm_domain.h +3 −3
  307. include/linux/poll.h +6 −6
  308. include/linux/rmi.h +2 −0
  309. include/linux/scatterlist.h +0 −18
  310. include/linux/skbuff.h +2 −1
  311. include/linux/slub_def.h +4 −0
  312. include/linux/syscalls.h +4 −0
  313. include/net/bluetooth/bluetooth.h +1 −1
  314. include/net/iucv/af_iucv.h +2 −0
  315. include/net/net_namespace.h +1 −0
  316. include/net/netns/ipv6.h +0 −1
  317. include/net/pkt_cls.h +5 −0
  318. include/net/sctp/sctp.h +2 −1
  319. include/net/tcp.h +2 −1
  320. include/net/tls.h +4 −2
  321. include/net/udp.h +1 −1
  322. include/uapi/linux/aio_abi.h +4 −2
  323. include/uapi/linux/bpf.h +23 −5
  324. include/uapi/linux/target_core_user.h +3 −1
  325. init/Kconfig +3 −4
  326. kernel/bpf/cgroup.c +54 −0
  327. kernel/bpf/core.c +1 −29
  328. kernel/bpf/sockmap.c +184 −70
  329. kernel/bpf/syscall.c +21 −78
  330. kernel/dma/swiotlb.c +1 −0
  331. kernel/events/core.c +1 −1
  332. lib/Kconfig.kasan +1 −0
  333. lib/percpu_ida.c +1 −1
  334. lib/scatterlist.c +0 −6
  335. lib/test_bpf.c +20 −0
  336. lib/test_printf.c +0 −7
  337. mm/slab_common.c +4 −0
  338. mm/slub.c +6 −1
  339. mm/vmstat.c +0 −2
  340. net/8021q/vlan.c +1 −1
  341. net/Makefile +0 −4
  342. net/appletalk/ddp.c +1 −1
  343. net/atm/common.c +8 −3
  344. net/atm/common.h +1 −1
  345. net/atm/pvc.c +1 −1
  346. net/atm/svc.c +1 −1
  347. net/ax25/af_ax25.c +1 −1
  348. net/bluetooth/af_bluetooth.c +5 −2
  349. net/bluetooth/hci_sock.c +1 −1
  350. net/bluetooth/l2cap_sock.c +1 −1
  351. net/bluetooth/rfcomm/sock.c +1 −1
  352. net/bluetooth/sco.c +1 −1
  353. net/bpfilter/Kconfig +1 −1
  354. net/bpfilter/Makefile +2 −15
  355. net/bpfilter/bpfilter_kern.c +5 −6
  356. net/bpfilter/bpfilter_umh_blob.S +7 −0
  357. net/caif/caif_socket.c +8 −4
  358. net/can/bcm.c +1 −1
  359. net/can/raw.c +1 −1
  360. net/core/datagram.c +9 −4
  361. net/core/dev_ioctl.c +2 −9
  362. net/core/fib_rules.c +79 −1
  363. net/core/filter.c +54 −32
  364. net/core/skbuff.c +1 −2
  365. net/core/sock.c +5 −2
  366. net/dccp/dccp.h +2 −1
  367. net/dccp/ipv4.c +1 −1
  368. net/dccp/ipv6.c +1 −1
  369. net/dccp/proto.c +11 −2
  370. net/decnet/af_decnet.c +3 −3
  371. net/ieee802154/socket.c +2 −2
  372. net/ipv4/af_inet.c +4 −4
  373. net/ipv4/fou.c +1 −3
  374. net/ipv4/gre_offload.c +1 −1
  375. net/ipv4/sysctl_net_ipv4.c +13 −5
  376. net/ipv4/tcp.c +17 −6
  377. net/ipv4/tcp_input.c +11 −2
  378. net/ipv4/udp.c +5 −5
  379. net/ipv4/udp_offload.c +1 −1
  380. net/ipv6/addrconf.c +6 −3
  381. net/ipv6/af_inet6.c +2 −2
  382. net/ipv6/netfilter/nf_conntrack_reasm.c +3 −3
  383. net/ipv6/raw.c +2 −2
  384. net/ipv6/seg6_hmac.c +1 −1
  385. net/iucv/af_iucv.c +5 −2
  386. net/kcm/kcmsock.c +5 −5
  387. net/key/af_key.c +1 −1
  388. net/l2tp/l2tp_ip.c +1 −1
  389. net/l2tp/l2tp_ip6.c +1 −1
  390. net/l2tp/l2tp_ppp.c +1 −1
  391. net/llc/af_llc.c +1 −1
  392. net/mac80211/tx.c +2 −0
  393. net/netfilter/nf_conncount.c +47 −5
  394. net/netfilter/nf_conntrack_helper.c +5 −0
  395. net/netfilter/nf_log.c +10 −3
  396. net/netfilter/nfnetlink_queue.c +3 −0
  397. net/netlink/af_netlink.c +1 −1
  398. net/netrom/af_netrom.c +1 −1
  399. net/nfc/llcp_sock.c +6 −3
  400. net/nfc/rawsock.c +2 −2
  401. net/packet/af_packet.c +5 −4
  402. net/phonet/socket.c +6 −3
  403. net/qrtr/qrtr.c +1 −1
  404. net/rds/connection.c +10 −1
  405. net/rds/loop.c +56 −0
  406. net/rds/loop.h +2 −0
  407. net/rose/af_rose.c +1 −1
  408. net/rxrpc/af_rxrpc.c +7 −3
  409. net/sctp/ipv6.c +1 −1
  410. net/sctp/protocol.c +1 −1
  411. net/sctp/socket.c +3 −1
  412. net/smc/af_smc.c +67 −31
  413. net/smc/smc.h +8 −0
  414. net/socket.c +7 −43
  415. net/strparser/strparser.c +1 −16
  416. net/tipc/socket.c +9 −5
  417. net/tls/tls_main.c +1 −1
  418. net/tls/tls_sw.c +10 −9
  419. net/unix/af_unix.c +19 −11
  420. net/vmw_vsock/af_vsock.c +13 −6
  421. net/wireless/nl80211.c +14 −21
  422. net/x25/af_x25.c +1 −1
  423. net/xdp/xsk.c +4 −3
  424. samples/bpf/xdp_fwd_kern.c +4 −4
  425. scripts/cc-can-link.sh +1 −1
  426. scripts/checkpatch.pl +0 −6
  427. scripts/gcc-x86_64-has-stack-protector.sh +1 −1
  428. scripts/kconfig/expr.h +3 −0
  429. scripts/kconfig/preprocess.c +1 −1
  430. scripts/kconfig/zconf.y +6 −2
  431. security/keys/dh.c +4 −2
  432. security/selinux/selinuxfs.c +33 −45
  433. security/smack/smack_lsm.c +1 −0
  434. sound/core/seq/seq_clientmgr.c +2 −1
  435. sound/core/timer.c +1 −1
  436. sound/pci/hda/hda_codec.c +3 −2
  437. sound/pci/hda/hda_codec.h +1 −0
  438. sound/pci/hda/patch_ca0132.c +23 −41
  439. sound/pci/hda/patch_hdmi.c +5 −0
  440. sound/pci/hda/patch_realtek.c +17 −3
  441. sound/pci/lx6464es/lx6464es.c +1 −0
  442. tools/arch/arm/include/uapi/asm/kvm.h +1 −0
  443. tools/arch/arm64/include/uapi/asm/kvm.h +1 −0
  444. tools/arch/powerpc/include/uapi/asm/kvm.h +1 −0
  445. tools/arch/powerpc/include/uapi/asm/unistd.h +1 −0
  446. tools/arch/x86/include/asm/cpufeatures.h +2 −0
  447. tools/bpf/bpftool/prog.c +8 −4
  448. tools/include/uapi/drm/drm.h +7 −0
  449. tools/include/uapi/linux/bpf.h +1 −1
  450. tools/include/uapi/linux/if_link.h +2 −0
  451. tools/include/uapi/linux/kvm.h +1 −0
  452. tools/perf/arch/powerpc/util/skip-callchain-idx.c +1 −1
  453. tools/perf/arch/x86/entry/syscalls/syscall_64.tbl +2 −0
  454. tools/perf/bench/numa.c +3 −2
  455. tools/perf/builtin-annotate.c +10 −1
  456. tools/perf/builtin-report.c +2 −1
  457. tools/perf/builtin-script.c +27 −3
  458. tools/perf/tests/parse-events.c +20 −5
  459. tools/perf/tests/topology.c +1 −0
  460. tools/perf/util/c++/clang.cpp +9 −2
  461. tools/perf/util/header.c +10 −2
  462. tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c +1 −1
  463. tools/perf/util/pmu.c +97 −2
  464. tools/testing/selftests/bpf/config +1 −0
  465. tools/testing/selftests/bpf/test_kmod.sh +9 −0
  466. tools/testing/selftests/bpf/test_lirc_mode2.sh +9 −0
  467. tools/testing/selftests/bpf/test_lwt_seg6local.sh +9 −0
  468. tools/testing/selftests/bpf/test_sockmap.c +0 −6
  469. tools/testing/selftests/net/fib_tests.sh +0 −0
  470. tools/testing/selftests/x86/sigreturn.c +36 −23
  471. tools/virtio/linux/scatterlist.h +0 −18
Documentation/admin-guide/pm/intel_pstate.rst+12−2
@@ -324,8 +324,7 @@ Global Attributes · 323 unmodified lines
324 324
325``intel_pstate`` exposes several global attributes (files) in ``sysfs`` to325``intel_pstate`` exposes several global attributes (files) in ``sysfs`` to
326control its functionality at the system level. They are located in the326control its functionality at the system level. They are located in the
327``/sys/devices/system/cpu/cpufreq/intel_pstate/`` directory and affect all327``/sys/devices/system/cpu/intel_pstate/`` directory and affect all CPUs.
328CPUs.
329 328
330Some of them are not present if the ``intel_pstate=per_cpu_perf_limits``329Some of them are not present if the ``intel_pstate=per_cpu_perf_limits``
331argument is passed to the kernel in the command line.330argument is passed to the kernel in the command line.
@@ -379,6 +378,17 @@ argument is passed to the kernel in the command line. · 47 unmodified lines
379 but it affects the maximum possible value of per-policy P-state limits378 but it affects the maximum possible value of per-policy P-state limits
380 (see `Interpretation of Policy Attributes`_ below for details).379 (see `Interpretation of Policy Attributes`_ below for details).
381 380
381``hwp_dynamic_boost``
382 This attribute is only present if ``intel_pstate`` works in the
383 `active mode with the HWP feature enabled <Active Mode With HWP_>`_ in
384 the processor. If set (equal to 1), it causes the minimum P-state limit
385 to be increased dynamically for a short time whenever a task previously
386 waiting on I/O is selected to run on a given logical CPU (the purpose
387 of this mechanism is to improve performance).
388
389 This setting has no effect on logical CPUs whose minimum P-state limit
390 is directly set to the highest non-turbo P-state or above it.
391
382.. _status_attr:392.. _status_attr:
383 393
384``status``394``status``
Documentation/devicetree/bindings/input/sprd,sc27xx-vibra.txt+23−0
@@ -0,0 +1,23 @@
1Spreadtrum SC27xx PMIC Vibrator
2
3Required properties:
4- compatible: should be "sprd,sc2731-vibrator".
5- reg: address of vibrator control register.
6
7Example :
8
9 sc2731_pmic: pmic@0 {
10 compatible = "sprd,sc2731";
11 reg = <0>;
12 spi-max-frequency = <26000000>;
13 interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
14 interrupt-controller;
15 #interrupt-cells = <2>;
16 #address-cells = <1>;
17 #size-cells = <0>;
18
19 vibrator@eb4 {
20 compatible = "sprd,sc2731-vibrator";
21 reg = <0xeb4>;
22 };
23 };
Documentation/filesystems/Locking+1−6
@@ -441,8 +441,6 @@ prototypes: · 440 unmodified lines
441 int (*iterate) (struct file *, struct dir_context *);441 int (*iterate) (struct file *, struct dir_context *);
442 int (*iterate_shared) (struct file *, struct dir_context *);442 int (*iterate_shared) (struct file *, struct dir_context *);
443 __poll_t (*poll) (struct file *, struct poll_table_struct *);443 __poll_t (*poll) (struct file *, struct poll_table_struct *);
444 struct wait_queue_head * (*get_poll_head)(struct file *, __poll_t);
445 __poll_t (*poll_mask) (struct file *, __poll_t);
446 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);444 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
447 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);445 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
448 int (*mmap) (struct file *, struct vm_area_struct *);446 int (*mmap) (struct file *, struct vm_area_struct *);
@@ -473,7 +471,7 @@ prototypes: · 24 unmodified lines
473};471};
474 472
475locking rules:473locking rules:
476 All except for ->poll_mask may block.474 All may block.
477 475
478->llseek() locking has moved from llseek to the individual llseek476->llseek() locking has moved from llseek to the individual llseek
479implementations. If your fs is not using generic_file_llseek, you477implementations. If your fs is not using generic_file_llseek, you
@@ -505,9 +503,6 @@ in sys_read() and friends. · 25 unmodified lines
505the lease within the individual filesystem to record the result of the503the lease within the individual filesystem to record the result of the
506operation504operation
507 505
508->poll_mask can be called with or without the waitqueue lock for the waitqueue
509returned from ->get_poll_head.
510
511--------------------------- dquot_operations -------------------------------506--------------------------- dquot_operations -------------------------------
512prototypes:507prototypes:
513 int (*write_dquot) (struct dquot *);508 int (*write_dquot) (struct dquot *);
Documentation/filesystems/vfs.txt+0−13
@@ -857,8 +857,6 @@ struct file_operations { · 856 unmodified lines
857 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);857 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
858 int (*iterate) (struct file *, struct dir_context *);858 int (*iterate) (struct file *, struct dir_context *);
859 __poll_t (*poll) (struct file *, struct poll_table_struct *);859 __poll_t (*poll) (struct file *, struct poll_table_struct *);
860 struct wait_queue_head * (*get_poll_head)(struct file *, __poll_t);
861 __poll_t (*poll_mask) (struct file *, __poll_t);
862 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);860 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
863 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);861 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
864 int (*mmap) (struct file *, struct vm_area_struct *);862 int (*mmap) (struct file *, struct vm_area_struct *);
@@ -903,17 +901,6 @@ otherwise noted. · 38 unmodified lines
903 activity on this file and (optionally) go to sleep until there901 activity on this file and (optionally) go to sleep until there
904 is activity. Called by the select(2) and poll(2) system calls902 is activity. Called by the select(2) and poll(2) system calls
905 903
906 get_poll_head: Returns the struct wait_queue_head that callers can
907 wait on. Callers need to check the returned events using ->poll_mask
908 once woken. Can return NULL to indicate polling is not supported,
909 or any error code using the ERR_PTR convention to indicate that a
910 grave error occured and ->poll_mask shall not be called.
911
912 poll_mask: return the mask of EPOLL* values describing the file descriptor
913 state. Called either before going to sleep on the waitqueue returned by
914 get_poll_head, or after it has been woken. If ->get_poll_head and
915 ->poll_mask are implemented ->poll does not need to be implement.
916
917 unlocked_ioctl: called by the ioctl(2) system call.904 unlocked_ioctl: called by the ioctl(2) system call.
918 905
919 compat_ioctl: called by the ioctl(2) system call when 32 bit system calls906 compat_ioctl: called by the ioctl(2) system call when 32 bit system calls
Documentation/kbuild/kconfig-language.txt+6−0
@@ -430,6 +430,12 @@ This sets the config program's title bar if the config program chooses · 429 unmodified lines
430to use it. It should be placed at the top of the configuration, before any430to use it. It should be placed at the top of the configuration, before any
431other statement.431other statement.
432 432
433'#' Kconfig source file comment:
434
435An unquoted '#' character anywhere in a source file line indicates
436the beginning of a source file comment. The remainder of that line
437is a comment.
438
433 439
434Kconfig hints440Kconfig hints
435-------------441-------------
Documentation/usb/gadget_configfs.txt+1−1
@@ -226,7 +226,7 @@ $ rm configs/<config name>.<number>/<function> · 225 unmodified lines
226where <config name>.<number> specify the configuration and <function> is226where <config name>.<number> specify the configuration and <function> is
227a symlink to a function being removed from the configuration, e.g.:227a symlink to a function being removed from the configuration, e.g.:
228 228
229$ rm configfs/c.1/ncm.usb0229$ rm configs/c.1/ncm.usb0
230 230
231...231...
232...232...
MAINTAINERS+19−6
@@ -2971,9 +2971,13 @@ N: bcm585* · 2970 unmodified lines
2971N: bcm586*2971N: bcm586*
2972N: bcm883122972N: bcm88312
2973N: hr22973N: hr2
2974F: arch/arm64/boot/dts/broadcom/ns2*2974N: stingray
2975F: arch/arm64/boot/dts/broadcom/northstar2/*
2976F: arch/arm64/boot/dts/broadcom/stingray/*
2975F: drivers/clk/bcm/clk-ns*2977F: drivers/clk/bcm/clk-ns*
2978F: drivers/clk/bcm/clk-sr*
2976F: drivers/pinctrl/bcm/pinctrl-ns*2979F: drivers/pinctrl/bcm/pinctrl-ns*
2980F: include/dt-bindings/clock/bcm-sr*
2977 2981
2978BROADCOM KONA GPIO DRIVER2982BROADCOM KONA GPIO DRIVER
2979M: Ray Jui <rjui@broadcom.com>2983M: Ray Jui <rjui@broadcom.com>
@@ -5669,7 +5673,7 @@ F: drivers/crypto/caam/ · 2689 unmodified lines
5669F: Documentation/devicetree/bindings/crypto/fsl-sec4.txt5673F: Documentation/devicetree/bindings/crypto/fsl-sec4.txt
5670 5674
5671FREESCALE DIU FRAMEBUFFER DRIVER5675FREESCALE DIU FRAMEBUFFER DRIVER
5672M: Timur Tabi <timur@tabi.org>5676M: Timur Tabi <timur@kernel.org>
5673L: linux-fbdev@vger.kernel.org5677L: linux-fbdev@vger.kernel.org
5674S: Maintained5678S: Maintained
5675F: drivers/video/fbdev/fsl-diu-fb.*5679F: drivers/video/fbdev/fsl-diu-fb.*
@@ -5769,7 +5773,7 @@ S: Maintained · 93 unmodified lines
5769F: drivers/net/wan/fsl_ucc_hdlc*5773F: drivers/net/wan/fsl_ucc_hdlc*
5770 5774
5771FREESCALE QUICC ENGINE UCC UART DRIVER5775FREESCALE QUICC ENGINE UCC UART DRIVER
5772M: Timur Tabi <timur@tabi.org>5776M: Timur Tabi <timur@kernel.org>
5773L: linuxppc-dev@lists.ozlabs.org5777L: linuxppc-dev@lists.ozlabs.org
5774S: Maintained5778S: Maintained
5775F: drivers/tty/serial/ucc_uart.c5779F: drivers/tty/serial/ucc_uart.c
@@ -5793,7 +5797,7 @@ F: drivers/net/ethernet/freescale/fs_enet/ · 17 unmodified lines
5793F: include/linux/fs_enet_pd.h5797F: include/linux/fs_enet_pd.h
5794 5798
5795FREESCALE SOC SOUND DRIVERS5799FREESCALE SOC SOUND DRIVERS
5796M: Timur Tabi <timur@tabi.org>5800M: Timur Tabi <timur@kernel.org>
5797M: Nicolin Chen <nicoleotsuka@gmail.com>5801M: Nicolin Chen <nicoleotsuka@gmail.com>
5798M: Xiubo Li <Xiubo.Lee@gmail.com>5802M: Xiubo Li <Xiubo.Lee@gmail.com>
5799R: Fabio Estevam <fabio.estevam@nxp.com>5803R: Fabio Estevam <fabio.estevam@nxp.com>
@@ -11478,6 +11482,15 @@ W: http://wireless.kernel.org/en/users/Drivers/p54 · 5678 unmodified lines
11478S: Obsolete11482S: Obsolete
11479F: drivers/net/wireless/intersil/prism54/11483F: drivers/net/wireless/intersil/prism54/
11480 11484
11485PROC FILESYSTEM
11486R: Alexey Dobriyan <adobriyan@gmail.com>
11487L: linux-kernel@vger.kernel.org
11488L: linux-fsdevel@vger.kernel.org
11489S: Maintained
11490F: fs/proc/
11491F: include/linux/proc_fs.h
11492F: tools/testing/selftests/proc/
11493
11481PROC SYSCTL11494PROC SYSCTL
11482M: "Luis R. Rodriguez" <mcgrof@kernel.org>11495M: "Luis R. Rodriguez" <mcgrof@kernel.org>
11483M: Kees Cook <keescook@chromium.org>11496M: Kees Cook <keescook@chromium.org>
@@ -11810,9 +11823,9 @@ F: Documentation/devicetree/bindings/opp/kryo-cpufreq.txt · 326 unmodified lines
11810F: drivers/cpufreq/qcom-cpufreq-kryo.c11823F: drivers/cpufreq/qcom-cpufreq-kryo.c
11811 11824
11812QUALCOMM EMAC GIGABIT ETHERNET DRIVER11825QUALCOMM EMAC GIGABIT ETHERNET DRIVER
11813M: Timur Tabi <timur@codeaurora.org>11826M: Timur Tabi <timur@kernel.org>
11814L: netdev@vger.kernel.org11827L: netdev@vger.kernel.org
11815S: Supported11828S: Maintained
11816F: drivers/net/ethernet/qualcomm/emac/11829F: drivers/net/ethernet/qualcomm/emac/
11817 11830
11818QUALCOMM HEXAGON ARCHITECTURE11831QUALCOMM HEXAGON ARCHITECTURE
Makefile+1−6
@@ -2,7 +2,7 @@ · 1 unmodified line
2VERSION = 42VERSION = 4
3PATCHLEVEL = 183PATCHLEVEL = 18
4SUBLEVEL = 04SUBLEVEL = 0
5EXTRAVERSION = -rc25EXTRAVERSION = -rc3
6NAME = Merciless Moray6NAME = Merciless Moray
7 7
8# *DOCUMENTATION*8# *DOCUMENTATION*
@@ -507,11 +507,6 @@ ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLA · 498 unmodified lines
507 KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO507 KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
508endif508endif
509 509
510ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/cc-can-link.sh $(CC)), y)
511 CC_CAN_LINK := y
512 export CC_CAN_LINK
513endif
514
515# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.510# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
516# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.511# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
517# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),512# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
arch/arm/Kconfig+7−1
@@ -1245,8 +1245,14 @@ config PCI · 1244 unmodified lines
1245 VESA. If you have PCI, say Y, otherwise N.1245 VESA. If you have PCI, say Y, otherwise N.
1246 1246
1247config PCI_DOMAINS1247config PCI_DOMAINS
1248 bool1248 bool "Support for multiple PCI domains"
1249 depends on PCI1249 depends on PCI
1250 help
1251 Enable PCI domains kernel management. Say Y if your machine
1252 has a PCI bus hierarchy that requires more than one PCI
1253 domain (aka segment) to be correctly managed. Say N otherwise.
1254
1255 If you don't know what to do here, say N.
1250 1256
1251config PCI_DOMAINS_GENERIC1257config PCI_DOMAINS_GENERIC
1252 def_bool PCI_DOMAINS1258 def_bool PCI_DOMAINS
arch/arm/boot/dts/armada-385-synology-ds116.dts+1−1
@@ -139,7 +139,7 @@ · 138 unmodified lines
139 3700 5139 3700 5
140 3900 6140 3900 6
141 4000 7>;141 4000 7>;
142 cooling-cells = <2>;142 #cooling-cells = <2>;
143 };143 };
144 144
145 gpio-leds {145 gpio-leds {
arch/arm/boot/dts/bcm-cygnus.dtsi+12−12
@@ -216,7 +216,7 @@ · 215 unmodified lines
216 reg = <0x18008000 0x100>;216 reg = <0x18008000 0x100>;
217 #address-cells = <1>;217 #address-cells = <1>;
218 #size-cells = <0>;218 #size-cells = <0>;
219 interrupts = <GIC_SPI 85 IRQ_TYPE_NONE>;219 interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
220 clock-frequency = <100000>;220 clock-frequency = <100000>;
221 status = "disabled";221 status = "disabled";
222 };222 };
@@ -245,7 +245,7 @@ · 22 unmodified lines
245 reg = <0x1800b000 0x100>;245 reg = <0x1800b000 0x100>;
246 #address-cells = <1>;246 #address-cells = <1>;
247 #size-cells = <0>;247 #size-cells = <0>;
248 interrupts = <GIC_SPI 86 IRQ_TYPE_NONE>;248 interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
249 clock-frequency = <100000>;249 clock-frequency = <100000>;
250 status = "disabled";250 status = "disabled";
251 };251 };
@@ -256,7 +256,7 @@ · 4 unmodified lines
256 256
257 #interrupt-cells = <1>;257 #interrupt-cells = <1>;
258 interrupt-map-mask = <0 0 0 0>;258 interrupt-map-mask = <0 0 0 0>;
259 interrupt-map = <0 0 0 0 &gic GIC_SPI 100 IRQ_TYPE_NONE>;259 interrupt-map = <0 0 0 0 &gic GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
260 260
261 linux,pci-domain = <0>;261 linux,pci-domain = <0>;
262 262
@@ -278,10 +278,10 @@ · 15 unmodified lines
278 compatible = "brcm,iproc-msi";278 compatible = "brcm,iproc-msi";
279 msi-controller;279 msi-controller;
280 interrupt-parent = <&gic>;280 interrupt-parent = <&gic>;
281 interrupts = <GIC_SPI 96 IRQ_TYPE_NONE>,281 interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
282 <GIC_SPI 97 IRQ_TYPE_NONE>,282 <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
283 <GIC_SPI 98 IRQ_TYPE_NONE>,283 <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
284 <GIC_SPI 99 IRQ_TYPE_NONE>;284 <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
285 };285 };
286 };286 };
287 287
@@ -291,7 +291,7 @@ · 3 unmodified lines
291 291
292 #interrupt-cells = <1>;292 #interrupt-cells = <1>;
293 interrupt-map-mask = <0 0 0 0>;293 interrupt-map-mask = <0 0 0 0>;
294 interrupt-map = <0 0 0 0 &gic GIC_SPI 106 IRQ_TYPE_NONE>;294 interrupt-map = <0 0 0 0 &gic GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
295 295
296 linux,pci-domain = <1>;296 linux,pci-domain = <1>;
297 297
@@ -313,10 +313,10 @@ · 15 unmodified lines
313 compatible = "brcm,iproc-msi";313 compatible = "brcm,iproc-msi";
314 msi-controller;314 msi-controller;
315 interrupt-parent = <&gic>;315 interrupt-parent = <&gic>;
316 interrupts = <GIC_SPI 102 IRQ_TYPE_NONE>,316 interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
317 <GIC_SPI 103 IRQ_TYPE_NONE>,317 <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>,
318 <GIC_SPI 104 IRQ_TYPE_NONE>,318 <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
319 <GIC_SPI 105 IRQ_TYPE_NONE>;319 <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
320 };320 };
321 };321 };
322 322
arch/arm/boot/dts/bcm-hr2.dtsi+12−12
@@ -264,7 +264,7 @@ · 263 unmodified lines
264 reg = <0x38000 0x50>;264 reg = <0x38000 0x50>;
265 #address-cells = <1>;265 #address-cells = <1>;
266 #size-cells = <0>;266 #size-cells = <0>;
267 interrupts = <GIC_SPI 95 IRQ_TYPE_NONE>;267 interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
268 clock-frequency = <100000>;268 clock-frequency = <100000>;
269 };269 };
270 270
@@ -279,7 +279,7 @@ · 8 unmodified lines
279 reg = <0x3b000 0x50>;279 reg = <0x3b000 0x50>;
280 #address-cells = <1>;280 #address-cells = <1>;
281 #size-cells = <0>;281 #size-cells = <0>;
282 interrupts = <GIC_SPI 96 IRQ_TYPE_NONE>;282 interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
283 clock-frequency = <100000>;283 clock-frequency = <100000>;
284 };284 };
285 };285 };
@@ -300,7 +300,7 @@ · 14 unmodified lines
300 300
301 #interrupt-cells = <1>;301 #interrupt-cells = <1>;
302 interrupt-map-mask = <0 0 0 0>;302 interrupt-map-mask = <0 0 0 0>;
303 interrupt-map = <0 0 0 0 &gic GIC_SPI 186 IRQ_TYPE_NONE>;303 interrupt-map = <0 0 0 0 &gic GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
304 304
305 linux,pci-domain = <0>;305 linux,pci-domain = <0>;
306 306
@@ -322,10 +322,10 @@ · 15 unmodified lines
322 compatible = "brcm,iproc-msi";322 compatible = "brcm,iproc-msi";
323 msi-controller;323 msi-controller;
324 interrupt-parent = <&gic>;324 interrupt-parent = <&gic>;
325 interrupts = <GIC_SPI 182 IRQ_TYPE_NONE>,325 interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>,
326 <GIC_SPI 183 IRQ_TYPE_NONE>,326 <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>,
327 <GIC_SPI 184 IRQ_TYPE_NONE>,327 <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>,
328 <GIC_SPI 185 IRQ_TYPE_NONE>;328 <GIC_SPI 185 IRQ_TYPE_LEVEL_HIGH>;
329 brcm,pcie-msi-inten;329 brcm,pcie-msi-inten;
330 };330 };
331 };331 };
@@ -336,7 +336,7 @@ · 4 unmodified lines
336 336
337 #interrupt-cells = <1>;337 #interrupt-cells = <1>;
338 interrupt-map-mask = <0 0 0 0>;338 interrupt-map-mask = <0 0 0 0>;
339 interrupt-map = <0 0 0 0 &gic GIC_SPI 192 IRQ_TYPE_NONE>;339 interrupt-map = <0 0 0 0 &gic GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>;
340 340
341 linux,pci-domain = <1>;341 linux,pci-domain = <1>;
342 342
@@ -358,10 +358,10 @@ · 15 unmodified lines
358 compatible = "brcm,iproc-msi";358 compatible = "brcm,iproc-msi";
359 msi-controller;359 msi-controller;
360 interrupt-parent = <&gic>;360 interrupt-parent = <&gic>;
361 interrupts = <GIC_SPI 188 IRQ_TYPE_NONE>,361 interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>,
362 <GIC_SPI 189 IRQ_TYPE_NONE>,362 <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>,
363 <GIC_SPI 190 IRQ_TYPE_NONE>,363 <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>,
364 <GIC_SPI 191 IRQ_TYPE_NONE>;364 <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
365 brcm,pcie-msi-inten;365 brcm,pcie-msi-inten;
366 };366 };
367 };367 };
arch/arm/boot/dts/bcm-nsp.dtsi+16−16
@@ -391,7 +391,7 @@ · 390 unmodified lines
391 reg = <0x38000 0x50>;391 reg = <0x38000 0x50>;
392 #address-cells = <1>;392 #address-cells = <1>;
393 #size-cells = <0>;393 #size-cells = <0>;
394 interrupts = <GIC_SPI 89 IRQ_TYPE_NONE>;394 interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
395 clock-frequency = <100000>;395 clock-frequency = <100000>;
396 dma-coherent;396 dma-coherent;
397 status = "disabled";397 status = "disabled";
@@ -496,7 +496,7 @@ · 98 unmodified lines
496 496
497 #interrupt-cells = <1>;497 #interrupt-cells = <1>;
498 interrupt-map-mask = <0 0 0 0>;498 interrupt-map-mask = <0 0 0 0>;
499 interrupt-map = <0 0 0 0 &gic GIC_SPI 131 IRQ_TYPE_NONE>;499 interrupt-map = <0 0 0 0 &gic GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>;
500 500
501 linux,pci-domain = <0>;501 linux,pci-domain = <0>;
502 502
@@ -519,10 +519,10 @@ · 16 unmodified lines
519 compatible = "brcm,iproc-msi";519 compatible = "brcm,iproc-msi";
520 msi-controller;520 msi-controller;
521 interrupt-parent = <&gic>;521 interrupt-parent = <&gic>;
522 interrupts = <GIC_SPI 127 IRQ_TYPE_NONE>,522 interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>,
523 <GIC_SPI 128 IRQ_TYPE_NONE>,523 <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>,
524 <GIC_SPI 129 IRQ_TYPE_NONE>,524 <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
525 <GIC_SPI 130 IRQ_TYPE_NONE>;525 <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>;
526 brcm,pcie-msi-inten;526 brcm,pcie-msi-inten;
527 };527 };
528 };528 };
@@ -533,7 +533,7 @@ · 4 unmodified lines
533 533
534 #interrupt-cells = <1>;534 #interrupt-cells = <1>;
535 interrupt-map-mask = <0 0 0 0>;535 interrupt-map-mask = <0 0 0 0>;
536 interrupt-map = <0 0 0 0 &gic GIC_SPI 137 IRQ_TYPE_NONE>;536 interrupt-map = <0 0 0 0 &gic GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>;
537 537
538 linux,pci-domain = <1>;538 linux,pci-domain = <1>;
539 539
@@ -556,10 +556,10 @@ · 16 unmodified lines
556 compatible = "brcm,iproc-msi";556 compatible = "brcm,iproc-msi";
557 msi-controller;557 msi-controller;
558 interrupt-parent = <&gic>;558 interrupt-parent = <&gic>;
559 interrupts = <GIC_SPI 133 IRQ_TYPE_NONE>,559 interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
560 <GIC_SPI 134 IRQ_TYPE_NONE>,560 <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
561 <GIC_SPI 135 IRQ_TYPE_NONE>,561 <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
562 <GIC_SPI 136 IRQ_TYPE_NONE>;562 <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>;
563 brcm,pcie-msi-inten;563 brcm,pcie-msi-inten;
564 };564 };
565 };565 };
@@ -570,7 +570,7 @@ · 4 unmodified lines
570 570
571 #interrupt-cells = <1>;571 #interrupt-cells = <1>;
572 interrupt-map-mask = <0 0 0 0>;572 interrupt-map-mask = <0 0 0 0>;
573 interrupt-map = <0 0 0 0 &gic GIC_SPI 143 IRQ_TYPE_NONE>;573 interrupt-map = <0 0 0 0 &gic GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
574 574
575 linux,pci-domain = <2>;575 linux,pci-domain = <2>;
576 576
@@ -593,10 +593,10 @@ · 16 unmodified lines
593 compatible = "brcm,iproc-msi";593 compatible = "brcm,iproc-msi";
594 msi-controller;594 msi-controller;
595 interrupt-parent = <&gic>;595 interrupt-parent = <&gic>;
596 interrupts = <GIC_SPI 139 IRQ_TYPE_NONE>,596 interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>,
597 <GIC_SPI 140 IRQ_TYPE_NONE>,597 <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
598 <GIC_SPI 141 IRQ_TYPE_NONE>,598 <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
599 <GIC_SPI 142 IRQ_TYPE_NONE>;599 <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
600 brcm,pcie-msi-inten;600 brcm,pcie-msi-inten;
601 };601 };
602 };602 };
arch/arm/boot/dts/bcm5301x.dtsi+1−1
@@ -365,7 +365,7 @@ · 364 unmodified lines
365 i2c0: i2c@18009000 {365 i2c0: i2c@18009000 {
366 compatible = "brcm,iproc-i2c";366 compatible = "brcm,iproc-i2c";
367 reg = <0x18009000 0x50>;367 reg = <0x18009000 0x50>;
368 interrupts = <GIC_SPI 121 IRQ_TYPE_NONE>;368 interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
369 #address-cells = <1>;369 #address-cells = <1>;
370 #size-cells = <0>;370 #size-cells = <0>;
371 clock-frequency = <100000>;371 clock-frequency = <100000>;
arch/arm/boot/dts/da850.dtsi+1−5
@@ -549,11 +549,7 @@ · 548 unmodified lines
549 gpio-controller;549 gpio-controller;
550 #gpio-cells = <2>;550 #gpio-cells = <2>;
551 reg = <0x226000 0x1000>;551 reg = <0x226000 0x1000>;
552 interrupts = <42 IRQ_TYPE_EDGE_BOTH552 interrupts = <42 43 44 45 46 47 48 49 50>;
553 43 IRQ_TYPE_EDGE_BOTH 44 IRQ_TYPE_EDGE_BOTH
554 45 IRQ_TYPE_EDGE_BOTH 46 IRQ_TYPE_EDGE_BOTH
555 47 IRQ_TYPE_EDGE_BOTH 48 IRQ_TYPE_EDGE_BOTH
556 49 IRQ_TYPE_EDGE_BOTH 50 IRQ_TYPE_EDGE_BOTH>;
557 ti,ngpio = <144>;553 ti,ngpio = <144>;
558 ti,davinci-gpio-unbanked = <0>;554 ti,davinci-gpio-unbanked = <0>;
559 status = "disabled";555 status = "disabled";
arch/arm/boot/dts/imx6q.dtsi+1−1
@@ -90,7 +90,7 @@ · 89 unmodified lines
90 clocks = <&clks IMX6Q_CLK_ECSPI5>,90 clocks = <&clks IMX6Q_CLK_ECSPI5>,
91 <&clks IMX6Q_CLK_ECSPI5>;91 <&clks IMX6Q_CLK_ECSPI5>;
92 clock-names = "ipg", "per";92 clock-names = "ipg", "per";
93 dmas = <&sdma 11 7 1>, <&sdma 12 7 2>;93 dmas = <&sdma 11 8 1>, <&sdma 12 8 2>;
94 dma-names = "rx", "tx";94 dma-names = "rx", "tx";
95 status = "disabled";95 status = "disabled";
96 };96 };
arch/arm/boot/dts/imx6sx.dtsi+1−1
@@ -1344,7 +1344,7 @@ · 1343 unmodified lines
1344 ranges = <0x81000000 0 0 0x08f80000 0 0x00010000 /* downstream I/O */1344 ranges = <0x81000000 0 0 0x08f80000 0 0x00010000 /* downstream I/O */
1345 0x82000000 0 0x08000000 0x08000000 0 0x00f00000>; /* non-prefetchable memory */1345 0x82000000 0 0x08000000 0x08000000 0 0x00f00000>; /* non-prefetchable memory */
1346 num-lanes = <1>;1346 num-lanes = <1>;
1347 interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;1347 interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
1348 interrupt-names = "msi";1348 interrupt-names = "msi";
1349 #interrupt-cells = <1>;1349 #interrupt-cells = <1>;
1350 interrupt-map-mask = <0 0 0 0x7>;1350 interrupt-map-mask = <0 0 0 0x7>;
arch/arm/boot/dts/socfpga.dtsi+2−2
@@ -748,13 +748,13 @@ · 747 unmodified lines
748 nand0: nand@ff900000 {748 nand0: nand@ff900000 {
749 #address-cells = <0x1>;749 #address-cells = <0x1>;
750 #size-cells = <0x1>;750 #size-cells = <0x1>;
751 compatible = "denali,denali-nand-dt";751 compatible = "altr,socfpga-denali-nand";
752 reg = <0xff900000 0x100000>,752 reg = <0xff900000 0x100000>,
753 <0xffb80000 0x10000>;753 <0xffb80000 0x10000>;
754 reg-names = "nand_data", "denali_reg";754 reg-names = "nand_data", "denali_reg";
755 interrupts = <0x0 0x90 0x4>;755 interrupts = <0x0 0x90 0x4>;
756 dma-mask = <0xffffffff>;756 dma-mask = <0xffffffff>;
757 clocks = <&nand_clk>;757 clocks = <&nand_x_clk>;
758 status = "disabled";758 status = "disabled";
759 };759 };
760 760
arch/arm/boot/dts/socfpga_arria10.dtsi+2−3
@@ -593,8 +593,7 @@ · 592 unmodified lines
593 #size-cells = <0>;593 #size-cells = <0>;
594 reg = <0xffda5000 0x100>;594 reg = <0xffda5000 0x100>;
595 interrupts = <0 102 4>;595 interrupts = <0 102 4>;
596 num-chipselect = <4>;596 num-cs = <4>;
597 bus-num = <0>;
598 /*32bit_access;*/597 /*32bit_access;*/
599 tx-dma-channel = <&pdma 16>;598 tx-dma-channel = <&pdma 16>;
600 rx-dma-channel = <&pdma 17>;599 rx-dma-channel = <&pdma 17>;
@@ -633,7 +632,7 @@ · 32 unmodified lines
633 nand: nand@ffb90000 {632 nand: nand@ffb90000 {
634 #address-cells = <1>;633 #address-cells = <1>;
635 #size-cells = <1>;634 #size-cells = <1>;
636 compatible = "denali,denali-nand-dt", "altr,socfpga-denali-nand";635 compatible = "altr,socfpga-denali-nand";
637 reg = <0xffb90000 0x72000>,636 reg = <0xffb90000 0x72000>,
638 <0xffb80000 0x10000>;637 <0xffb80000 0x10000>;
639 reg-names = "nand_data", "denali_reg";638 reg-names = "nand_data", "denali_reg";
arch/arm/common/Makefile+1−1
@@ -10,7 +10,7 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o · 9 unmodified lines
10obj-$(CONFIG_SHARP_LOCOMO) += locomo.o10obj-$(CONFIG_SHARP_LOCOMO) += locomo.o
11obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o11obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o
12obj-$(CONFIG_SHARP_SCOOP) += scoop.o12obj-$(CONFIG_SHARP_SCOOP) += scoop.o
13obj-$(CONFIG_SMP) += secure_cntvoff.o13obj-$(CONFIG_CPU_V7) += secure_cntvoff.o
14obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o14obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o
15obj-$(CONFIG_MCPM) += mcpm_head.o mcpm_entry.o mcpm_platsmp.o vlock.o15obj-$(CONFIG_MCPM) += mcpm_head.o mcpm_entry.o mcpm_platsmp.o vlock.o
16CFLAGS_REMOVE_mcpm_entry.o = -pg16CFLAGS_REMOVE_mcpm_entry.o = -pg
arch/arm/configs/multi_v7_defconfig+155−223
@@ -1,5 +1,4 @@
1CONFIG_SYSVIPC=y1CONFIG_SYSVIPC=y
2CONFIG_FHANDLE=y
3CONFIG_NO_HZ=y2CONFIG_NO_HZ=y
4CONFIG_HIGH_RES_TIMERS=y3CONFIG_HIGH_RES_TIMERS=y
5CONFIG_CGROUPS=y4CONFIG_CGROUPS=y
@@ -10,20 +9,10 @@ CONFIG_MODULES=y · 4 unmodified lines
10CONFIG_MODULE_UNLOAD=y9CONFIG_MODULE_UNLOAD=y
11CONFIG_PARTITION_ADVANCED=y10CONFIG_PARTITION_ADVANCED=y
12CONFIG_CMDLINE_PARTITION=y11CONFIG_CMDLINE_PARTITION=y
13CONFIG_ARCH_MULTI_V7=y
14# CONFIG_ARCH_MULTI_V5 is not set
15# CONFIG_ARCH_MULTI_V4 is not set
16CONFIG_ARCH_VIRT=y12CONFIG_ARCH_VIRT=y
17CONFIG_ARCH_ALPINE=y13CONFIG_ARCH_ALPINE=y
18CONFIG_ARCH_ARTPEC=y14CONFIG_ARCH_ARTPEC=y
19CONFIG_MACH_ARTPEC6=y15CONFIG_MACH_ARTPEC6=y
20CONFIG_ARCH_MVEBU=y
21CONFIG_MACH_ARMADA_370=y
22CONFIG_MACH_ARMADA_375=y
23CONFIG_MACH_ARMADA_38X=y
24CONFIG_MACH_ARMADA_39X=y
25CONFIG_MACH_ARMADA_XP=y
26CONFIG_MACH_DOVE=y
27CONFIG_ARCH_AT91=y16CONFIG_ARCH_AT91=y
28CONFIG_SOC_SAMA5D2=y17CONFIG_SOC_SAMA5D2=y
29CONFIG_SOC_SAMA5D3=y18CONFIG_SOC_SAMA5D3=y
@@ -32,9 +21,9 @@ CONFIG_ARCH_BCM=y · 2 unmodified lines
32CONFIG_ARCH_BCM_CYGNUS=y21CONFIG_ARCH_BCM_CYGNUS=y
33CONFIG_ARCH_BCM_HR2=y22CONFIG_ARCH_BCM_HR2=y
34CONFIG_ARCH_BCM_NSP=y23CONFIG_ARCH_BCM_NSP=y
35CONFIG_ARCH_BCM_21664=y
36CONFIG_ARCH_BCM_281XX=y
37CONFIG_ARCH_BCM_5301X=y24CONFIG_ARCH_BCM_5301X=y
25CONFIG_ARCH_BCM_281XX=y
26CONFIG_ARCH_BCM_21664=y
38CONFIG_ARCH_BCM2835=y27CONFIG_ARCH_BCM2835=y
39CONFIG_ARCH_BCM_63XX=y28CONFIG_ARCH_BCM_63XX=y
40CONFIG_ARCH_BRCMSTB=y29CONFIG_ARCH_BRCMSTB=y
@@ -43,14 +32,14 @@ CONFIG_MACH_BERLIN_BG2=y · 2 unmodified lines
43CONFIG_MACH_BERLIN_BG2CD=y32CONFIG_MACH_BERLIN_BG2CD=y
44CONFIG_MACH_BERLIN_BG2Q=y33CONFIG_MACH_BERLIN_BG2Q=y
45CONFIG_ARCH_DIGICOLOR=y34CONFIG_ARCH_DIGICOLOR=y
35CONFIG_ARCH_EXYNOS=y
36CONFIG_EXYNOS5420_MCPM=y
46CONFIG_ARCH_HIGHBANK=y37CONFIG_ARCH_HIGHBANK=y
47CONFIG_ARCH_HISI=y38CONFIG_ARCH_HISI=y
48CONFIG_ARCH_HI3xxx=y39CONFIG_ARCH_HI3xxx=y
49CONFIG_ARCH_HIX5HD2=y
50CONFIG_ARCH_HIP01=y40CONFIG_ARCH_HIP01=y
51CONFIG_ARCH_HIP04=y41CONFIG_ARCH_HIP04=y
52CONFIG_ARCH_KEYSTONE=y42CONFIG_ARCH_HIX5HD2=y
53CONFIG_ARCH_MESON=y
54CONFIG_ARCH_MXC=y43CONFIG_ARCH_MXC=y
55CONFIG_SOC_IMX50=y44CONFIG_SOC_IMX50=y
56CONFIG_SOC_IMX51=y45CONFIG_SOC_IMX51=y
@@ -60,29 +49,30 @@ CONFIG_SOC_IMX6SL=y · 3 unmodified lines
60CONFIG_SOC_IMX6SX=y49CONFIG_SOC_IMX6SX=y
61CONFIG_SOC_IMX6UL=y50CONFIG_SOC_IMX6UL=y
62CONFIG_SOC_IMX7D=y51CONFIG_SOC_IMX7D=y
63CONFIG_SOC_VF610=y
64CONFIG_SOC_LS1021A=y52CONFIG_SOC_LS1021A=y
53CONFIG_SOC_VF610=y
54CONFIG_ARCH_KEYSTONE=y
55CONFIG_ARCH_MEDIATEK=y
56CONFIG_ARCH_MESON=y
57CONFIG_ARCH_MVEBU=y
58CONFIG_MACH_ARMADA_370=y
59CONFIG_MACH_ARMADA_375=y
60CONFIG_MACH_ARMADA_38X=y
61CONFIG_MACH_ARMADA_39X=y
62CONFIG_MACH_ARMADA_XP=y
63CONFIG_MACH_DOVE=y
65CONFIG_ARCH_OMAP3=y64CONFIG_ARCH_OMAP3=y
66CONFIG_ARCH_OMAP4=y65CONFIG_ARCH_OMAP4=y
67CONFIG_SOC_OMAP5=y66CONFIG_SOC_OMAP5=y
68CONFIG_SOC_AM33XX=y67CONFIG_SOC_AM33XX=y
69CONFIG_SOC_AM43XX=y68CONFIG_SOC_AM43XX=y
70CONFIG_SOC_DRA7XX=y69CONFIG_SOC_DRA7XX=y
70CONFIG_ARCH_SIRF=y
71CONFIG_ARCH_QCOM=y71CONFIG_ARCH_QCOM=y
72CONFIG_ARCH_MEDIATEK=y
73CONFIG_ARCH_MSM8X60=y72CONFIG_ARCH_MSM8X60=y
74CONFIG_ARCH_MSM8960=y73CONFIG_ARCH_MSM8960=y
75CONFIG_ARCH_MSM8974=y74CONFIG_ARCH_MSM8974=y
76CONFIG_ARCH_ROCKCHIP=y75CONFIG_ARCH_ROCKCHIP=y
77CONFIG_ARCH_SOCFPGA=y
78CONFIG_PLAT_SPEAR=y
79CONFIG_ARCH_SPEAR13XX=y
80CONFIG_MACH_SPEAR1310=y
81CONFIG_MACH_SPEAR1340=y
82CONFIG_ARCH_STI=y
83CONFIG_ARCH_STM32=y
84CONFIG_ARCH_EXYNOS=y
85CONFIG_EXYNOS5420_MCPM=y
86CONFIG_ARCH_RENESAS=y76CONFIG_ARCH_RENESAS=y
87CONFIG_ARCH_EMEV2=y77CONFIG_ARCH_EMEV2=y
88CONFIG_ARCH_R7S72100=y78CONFIG_ARCH_R7S72100=y
@@ -99,40 +89,33 @@ CONFIG_ARCH_R8A7792=y · 10 unmodified lines
99CONFIG_ARCH_R8A7793=y89CONFIG_ARCH_R8A7793=y
100CONFIG_ARCH_R8A7794=y90CONFIG_ARCH_R8A7794=y
101CONFIG_ARCH_SH73A0=y91CONFIG_ARCH_SH73A0=y
92CONFIG_ARCH_SOCFPGA=y
93CONFIG_PLAT_SPEAR=y
94CONFIG_ARCH_SPEAR13XX=y
95CONFIG_MACH_SPEAR1310=y
96CONFIG_MACH_SPEAR1340=y
97CONFIG_ARCH_STI=y
98CONFIG_ARCH_STM32=y
102CONFIG_ARCH_SUNXI=y99CONFIG_ARCH_SUNXI=y
103CONFIG_ARCH_SIRF=y
104CONFIG_ARCH_TEGRA=y100CONFIG_ARCH_TEGRA=y
105CONFIG_ARCH_TEGRA_2x_SOC=y
106CONFIG_ARCH_TEGRA_3x_SOC=y
107CONFIG_ARCH_TEGRA_114_SOC=y
108CONFIG_ARCH_TEGRA_124_SOC=y
109CONFIG_ARCH_UNIPHIER=y101CONFIG_ARCH_UNIPHIER=y
110CONFIG_ARCH_U8500=y102CONFIG_ARCH_U8500=y
111CONFIG_MACH_HREFV60=y
112CONFIG_MACH_SNOWBALL=y
113CONFIG_ARCH_VEXPRESS=y103CONFIG_ARCH_VEXPRESS=y
114CONFIG_ARCH_VEXPRESS_TC2_PM=y104CONFIG_ARCH_VEXPRESS_TC2_PM=y
115CONFIG_ARCH_WM8850=y105CONFIG_ARCH_WM8850=y
116CONFIG_ARCH_ZYNQ=y106CONFIG_ARCH_ZYNQ=y
117CONFIG_TRUSTED_FOUNDATIONS=y107CONFIG_PCIEPORTBUS=y
118CONFIG_PCI=y
119CONFIG_PCI_HOST_GENERIC=y
120CONFIG_PCI_DRA7XX=y
121CONFIG_PCI_DRA7XX_EP=y
122CONFIG_PCI_KEYSTONE=y
123CONFIG_PCI_MSI=y
124CONFIG_PCI_MVEBU=y108CONFIG_PCI_MVEBU=y
125CONFIG_PCI_TEGRA=y109CONFIG_PCI_TEGRA=y
126CONFIG_PCI_RCAR_GEN2=y110CONFIG_PCI_RCAR_GEN2=y
127CONFIG_PCIE_RCAR=y111CONFIG_PCIE_RCAR=y
128CONFIG_PCIEPORTBUS=y112CONFIG_PCI_DRA7XX_EP=y
113CONFIG_PCI_KEYSTONE=y
129CONFIG_PCI_ENDPOINT=y114CONFIG_PCI_ENDPOINT=y
130CONFIG_PCI_ENDPOINT_CONFIGFS=y115CONFIG_PCI_ENDPOINT_CONFIGFS=y
131CONFIG_PCI_EPF_TEST=m116CONFIG_PCI_EPF_TEST=m
132CONFIG_SMP=y117CONFIG_SMP=y
133CONFIG_NR_CPUS=16118CONFIG_NR_CPUS=16
134CONFIG_HIGHPTE=y
135CONFIG_CMA=y
136CONFIG_SECCOMP=y119CONFIG_SECCOMP=y
137CONFIG_ARM_APPENDED_DTB=y120CONFIG_ARM_APPENDED_DTB=y
138CONFIG_ARM_ATAG_DTB_COMPAT=y121CONFIG_ARM_ATAG_DTB_COMPAT=y
@@ -145,14 +128,14 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=m · 6 unmodified lines
145CONFIG_CPU_FREQ_GOV_USERSPACE=m128CONFIG_CPU_FREQ_GOV_USERSPACE=m
146CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m129CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
147CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y130CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
131CONFIG_CPUFREQ_DT=y
148CONFIG_ARM_IMX6Q_CPUFREQ=y132CONFIG_ARM_IMX6Q_CPUFREQ=y
149CONFIG_QORIQ_CPUFREQ=y133CONFIG_QORIQ_CPUFREQ=y
150CONFIG_CPU_IDLE=y134CONFIG_CPU_IDLE=y
151CONFIG_ARM_CPUIDLE=y135CONFIG_ARM_CPUIDLE=y
152CONFIG_NEON=y
153CONFIG_KERNEL_MODE_NEON=y
154CONFIG_ARM_ZYNQ_CPUIDLE=y136CONFIG_ARM_ZYNQ_CPUIDLE=y
155CONFIG_ARM_EXYNOS_CPUIDLE=y137CONFIG_ARM_EXYNOS_CPUIDLE=y
138CONFIG_KERNEL_MODE_NEON=y
156CONFIG_NET=y139CONFIG_NET=y
157CONFIG_PACKET=y140CONFIG_PACKET=y
158CONFIG_UNIX=y141CONFIG_UNIX=y
@@ -170,23 +153,13 @@ CONFIG_IPV6_MIP6=m · 11 unmodified lines
170CONFIG_IPV6_TUNNEL=m153CONFIG_IPV6_TUNNEL=m
171CONFIG_IPV6_MULTIPLE_TABLES=y154CONFIG_IPV6_MULTIPLE_TABLES=y
172CONFIG_NET_DSA=m155CONFIG_NET_DSA=m
173CONFIG_NET_SWITCHDEV=y
174CONFIG_CAN=y156CONFIG_CAN=y
175CONFIG_CAN_RAW=y
176CONFIG_CAN_BCM=y
177CONFIG_CAN_DEV=y
178CONFIG_CAN_AT91=m157CONFIG_CAN_AT91=m
179CONFIG_CAN_FLEXCAN=m158CONFIG_CAN_FLEXCAN=m
180CONFIG_CAN_RCAR=m159CONFIG_CAN_SUN4I=y
181CONFIG_CAN_XILINXCAN=y160CONFIG_CAN_XILINXCAN=y
161CONFIG_CAN_RCAR=m
182CONFIG_CAN_MCP251X=y162CONFIG_CAN_MCP251X=y
183CONFIG_NET_DSA_BCM_SF2=m
184CONFIG_B53=m
185CONFIG_B53_SPI_DRIVER=m
186CONFIG_B53_MDIO_DRIVER=m
187CONFIG_B53_MMAP_DRIVER=m
188CONFIG_B53_SRAB_DRIVER=m
189CONFIG_CAN_SUN4I=y
190CONFIG_BT=m163CONFIG_BT=m
191CONFIG_BT_HCIUART=m164CONFIG_BT_HCIUART=m
192CONFIG_BT_HCIUART_BCM=y165CONFIG_BT_HCIUART_BCM=y
@@ -199,11 +172,9 @@ CONFIG_RFKILL_INPUT=y · 6 unmodified lines
199CONFIG_RFKILL_GPIO=y172CONFIG_RFKILL_GPIO=y
200CONFIG_DEVTMPFS=y173CONFIG_DEVTMPFS=y
201CONFIG_DEVTMPFS_MOUNT=y174CONFIG_DEVTMPFS_MOUNT=y
202CONFIG_DMA_CMA=y
203CONFIG_CMA_SIZE_MBYTES=64175CONFIG_CMA_SIZE_MBYTES=64
204CONFIG_OMAP_OCP2SCP=y176CONFIG_OMAP_OCP2SCP=y
205CONFIG_SIMPLE_PM_BUS=y177CONFIG_SIMPLE_PM_BUS=y
206CONFIG_SUNXI_RSB=y
207CONFIG_MTD=y178CONFIG_MTD=y
208CONFIG_MTD_CMDLINE_PARTS=y179CONFIG_MTD_CMDLINE_PARTS=y
209CONFIG_MTD_BLOCK=y180CONFIG_MTD_BLOCK=y
@@ -236,7 +207,6 @@ CONFIG_PCI_ENDPOINT_TEST=m · 26 unmodified lines
236CONFIG_EEPROM_AT24=y207CONFIG_EEPROM_AT24=y
237CONFIG_BLK_DEV_SD=y208CONFIG_BLK_DEV_SD=y
238CONFIG_BLK_DEV_SR=y209CONFIG_BLK_DEV_SR=y
239CONFIG_SCSI_MULTI_LUN=y
240CONFIG_ATA=y210CONFIG_ATA=y
241CONFIG_SATA_AHCI=y211CONFIG_SATA_AHCI=y
242CONFIG_SATA_AHCI_PLATFORM=y212CONFIG_SATA_AHCI_PLATFORM=y
@@ -251,14 +221,20 @@ CONFIG_SATA_MV=y · 8 unmodified lines
251CONFIG_SATA_RCAR=y221CONFIG_SATA_RCAR=y
252CONFIG_NETDEVICES=y222CONFIG_NETDEVICES=y
253CONFIG_VIRTIO_NET=y223CONFIG_VIRTIO_NET=y
254CONFIG_HIX5HD2_GMAC=y224CONFIG_B53_SPI_DRIVER=m
225CONFIG_B53_MDIO_DRIVER=m
226CONFIG_B53_MMAP_DRIVER=m
227CONFIG_B53_SRAB_DRIVER=m
228CONFIG_NET_DSA_BCM_SF2=m
255CONFIG_SUN4I_EMAC=y229CONFIG_SUN4I_EMAC=y
256CONFIG_MACB=y
257CONFIG_BCMGENET=m230CONFIG_BCMGENET=m
258CONFIG_BGMAC_BCMA=y231CONFIG_BGMAC_BCMA=y
259CONFIG_SYSTEMPORT=m232CONFIG_SYSTEMPORT=m
233CONFIG_MACB=y
260CONFIG_NET_CALXEDA_XGMAC=y234CONFIG_NET_CALXEDA_XGMAC=y
261CONFIG_GIANFAR=y235CONFIG_GIANFAR=y
236CONFIG_HIX5HD2_GMAC=y
237CONFIG_E1000E=y
262CONFIG_IGB=y238CONFIG_IGB=y
263CONFIG_MV643XX_ETH=y239CONFIG_MV643XX_ETH=y
264CONFIG_MVNETA=y240CONFIG_MVNETA=y
@@ -268,19 +244,17 @@ CONFIG_R8169=y · 3 unmodified lines
268CONFIG_SH_ETH=y244CONFIG_SH_ETH=y
269CONFIG_SMSC911X=y245CONFIG_SMSC911X=y
270CONFIG_STMMAC_ETH=y246CONFIG_STMMAC_ETH=y
271CONFIG_STMMAC_PLATFORM=y
272CONFIG_DWMAC_DWC_QOS_ETH=y247CONFIG_DWMAC_DWC_QOS_ETH=y
273CONFIG_TI_CPSW=y248CONFIG_TI_CPSW=y
274CONFIG_XILINX_EMACLITE=y249CONFIG_XILINX_EMACLITE=y
275CONFIG_AT803X_PHY=y250CONFIG_AT803X_PHY=y
276CONFIG_MARVELL_PHY=y
277CONFIG_SMSC_PHY=y
278CONFIG_BROADCOM_PHY=y251CONFIG_BROADCOM_PHY=y
279CONFIG_ICPLUS_PHY=y252CONFIG_ICPLUS_PHY=y
280CONFIG_REALTEK_PHY=y253CONFIG_MARVELL_PHY=y
281CONFIG_MICREL_PHY=y254CONFIG_MICREL_PHY=y
282CONFIG_FIXED_PHY=y255CONFIG_REALTEK_PHY=y
283CONFIG_ROCKCHIP_PHY=y256CONFIG_ROCKCHIP_PHY=y
257CONFIG_SMSC_PHY=y
284CONFIG_USB_PEGASUS=y258CONFIG_USB_PEGASUS=y
285CONFIG_USB_RTL8152=m259CONFIG_USB_RTL8152=m
286CONFIG_USB_LAN78XX=m260CONFIG_USB_LAN78XX=m
@@ -288,29 +262,29 @@ CONFIG_USB_USBNET=y · 1 unmodified line
288CONFIG_USB_NET_SMSC75XX=y262CONFIG_USB_NET_SMSC75XX=y
289CONFIG_USB_NET_SMSC95XX=y263CONFIG_USB_NET_SMSC95XX=y
290CONFIG_BRCMFMAC=m264CONFIG_BRCMFMAC=m
291CONFIG_RT2X00=m
292CONFIG_RT2800USB=m
293CONFIG_MWIFIEX=m265CONFIG_MWIFIEX=m
294CONFIG_MWIFIEX_SDIO=m266CONFIG_MWIFIEX_SDIO=m
267CONFIG_RT2X00=m
268CONFIG_RT2800USB=m
295CONFIG_INPUT_JOYDEV=y269CONFIG_INPUT_JOYDEV=y
296CONFIG_INPUT_EVDEV=y270CONFIG_INPUT_EVDEV=y
297CONFIG_KEYBOARD_QT1070=m271CONFIG_KEYBOARD_QT1070=m
298CONFIG_KEYBOARD_GPIO=y272CONFIG_KEYBOARD_GPIO=y
299CONFIG_KEYBOARD_TEGRA=y273CONFIG_KEYBOARD_TEGRA=y
300CONFIG_KEYBOARD_SPEAR=y274CONFIG_KEYBOARD_SAMSUNG=m
301CONFIG_KEYBOARD_ST_KEYSCAN=y275CONFIG_KEYBOARD_ST_KEYSCAN=y
276CONFIG_KEYBOARD_SPEAR=y
302CONFIG_KEYBOARD_CROS_EC=m277CONFIG_KEYBOARD_CROS_EC=m
303CONFIG_KEYBOARD_SAMSUNG=m
304CONFIG_MOUSE_PS2_ELANTECH=y278CONFIG_MOUSE_PS2_ELANTECH=y
305CONFIG_MOUSE_CYAPA=m279CONFIG_MOUSE_CYAPA=m
306CONFIG_MOUSE_ELAN_I2C=y280CONFIG_MOUSE_ELAN_I2C=y
307CONFIG_INPUT_TOUCHSCREEN=y281CONFIG_INPUT_TOUCHSCREEN=y
308CONFIG_TOUCHSCREEN_ATMEL_MXT=m282CONFIG_TOUCHSCREEN_ATMEL_MXT=m
309CONFIG_TOUCHSCREEN_MMS114=m283CONFIG_TOUCHSCREEN_MMS114=m
284CONFIG_TOUCHSCREEN_WM97XX=m
310CONFIG_TOUCHSCREEN_ST1232=m285CONFIG_TOUCHSCREEN_ST1232=m
311CONFIG_TOUCHSCREEN_STMPE=y286CONFIG_TOUCHSCREEN_STMPE=y
312CONFIG_TOUCHSCREEN_SUN4I=y287CONFIG_TOUCHSCREEN_SUN4I=y
313CONFIG_TOUCHSCREEN_WM97XX=m
314CONFIG_INPUT_MISC=y288CONFIG_INPUT_MISC=y
315CONFIG_INPUT_MAX77693_HAPTIC=m289CONFIG_INPUT_MAX77693_HAPTIC=m
316CONFIG_INPUT_MAX8997_HAPTIC=m290CONFIG_INPUT_MAX8997_HAPTIC=m
@@ -327,13 +301,12 @@ CONFIG_SERIAL_8250_DW=y · 10 unmodified lines
327CONFIG_SERIAL_8250_EM=y301CONFIG_SERIAL_8250_EM=y
328CONFIG_SERIAL_8250_MT6577=y302CONFIG_SERIAL_8250_MT6577=y
329CONFIG_SERIAL_8250_UNIPHIER=y303CONFIG_SERIAL_8250_UNIPHIER=y
304CONFIG_SERIAL_OF_PLATFORM=y
330CONFIG_SERIAL_AMBA_PL011=y305CONFIG_SERIAL_AMBA_PL011=y
331CONFIG_SERIAL_AMBA_PL011_CONSOLE=y306CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
332CONFIG_SERIAL_ATMEL=y307CONFIG_SERIAL_ATMEL=y
333CONFIG_SERIAL_ATMEL_CONSOLE=y308CONFIG_SERIAL_ATMEL_CONSOLE=y
334CONFIG_SERIAL_ATMEL_TTYAT=y309CONFIG_SERIAL_ATMEL_TTYAT=y
335CONFIG_SERIAL_BCM63XX=y
336CONFIG_SERIAL_BCM63XX_CONSOLE=y
337CONFIG_SERIAL_MESON=y310CONFIG_SERIAL_MESON=y
338CONFIG_SERIAL_MESON_CONSOLE=y311CONFIG_SERIAL_MESON_CONSOLE=y
339CONFIG_SERIAL_SAMSUNG=y312CONFIG_SERIAL_SAMSUNG=y
@@ -345,15 +318,14 @@ CONFIG_SERIAL_IMX=y · 5 unmodified lines
345CONFIG_SERIAL_IMX_CONSOLE=y318CONFIG_SERIAL_IMX_CONSOLE=y
346CONFIG_SERIAL_SH_SCI=y319CONFIG_SERIAL_SH_SCI=y
347CONFIG_SERIAL_SH_SCI_NR_UARTS=20320CONFIG_SERIAL_SH_SCI_NR_UARTS=20
348CONFIG_SERIAL_SH_SCI_CONSOLE=y
349CONFIG_SERIAL_SH_SCI_DMA=y
350CONFIG_SERIAL_MSM=y321CONFIG_SERIAL_MSM=y
351CONFIG_SERIAL_MSM_CONSOLE=y322CONFIG_SERIAL_MSM_CONSOLE=y
352CONFIG_SERIAL_VT8500=y323CONFIG_SERIAL_VT8500=y
353CONFIG_SERIAL_VT8500_CONSOLE=y324CONFIG_SERIAL_VT8500_CONSOLE=y
354CONFIG_SERIAL_OF_PLATFORM=y
355CONFIG_SERIAL_OMAP=y325CONFIG_SERIAL_OMAP=y
356CONFIG_SERIAL_OMAP_CONSOLE=y326CONFIG_SERIAL_OMAP_CONSOLE=y
327CONFIG_SERIAL_BCM63XX=y
328CONFIG_SERIAL_BCM63XX_CONSOLE=y
357CONFIG_SERIAL_XILINX_PS_UART=y329CONFIG_SERIAL_XILINX_PS_UART=y
358CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y330CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
359CONFIG_SERIAL_FSL_LPUART=y331CONFIG_SERIAL_FSL_LPUART=y
@@ -365,12 +337,10 @@ CONFIG_SERIAL_ST_ASC_CONSOLE=y · 5 unmodified lines
365CONFIG_SERIAL_STM32=y337CONFIG_SERIAL_STM32=y
366CONFIG_SERIAL_STM32_CONSOLE=y338CONFIG_SERIAL_STM32_CONSOLE=y
367CONFIG_SERIAL_DEV_BUS=y339CONFIG_SERIAL_DEV_BUS=y
368CONFIG_HVC_DRIVER=y
369CONFIG_VIRTIO_CONSOLE=y340CONFIG_VIRTIO_CONSOLE=y
341CONFIG_HW_RANDOM=y
342CONFIG_HW_RANDOM_ST=y
370CONFIG_I2C_CHARDEV=y343CONFIG_I2C_CHARDEV=y
371CONFIG_I2C_DAVINCI=y
372CONFIG_I2C_MESON=y
373CONFIG_I2C_MUX=y
374CONFIG_I2C_ARB_GPIO_CHALLENGE=m344CONFIG_I2C_ARB_GPIO_CHALLENGE=m
375CONFIG_I2C_MUX_PCA954x=y345CONFIG_I2C_MUX_PCA954x=y
376CONFIG_I2C_MUX_PINCTRL=y346CONFIG_I2C_MUX_PINCTRL=y
@@ -378,12 +348,13 @@ CONFIG_I2C_DEMUX_PINCTRL=y · 1 unmodified line
378CONFIG_I2C_AT91=m348CONFIG_I2C_AT91=m
379CONFIG_I2C_BCM2835=y349CONFIG_I2C_BCM2835=y
380CONFIG_I2C_CADENCE=y350CONFIG_I2C_CADENCE=y
351CONFIG_I2C_DAVINCI=y
381CONFIG_I2C_DESIGNWARE_PLATFORM=y352CONFIG_I2C_DESIGNWARE_PLATFORM=y
382CONFIG_I2C_DIGICOLOR=m353CONFIG_I2C_DIGICOLOR=m
383CONFIG_I2C_EMEV2=m354CONFIG_I2C_EMEV2=m
384CONFIG_I2C_GPIO=m355CONFIG_I2C_GPIO=m
385CONFIG_I2C_EXYNOS5=y
386CONFIG_I2C_IMX=y356CONFIG_I2C_IMX=y
357CONFIG_I2C_MESON=y
387CONFIG_I2C_MV64XXX=y358CONFIG_I2C_MV64XXX=y
388CONFIG_I2C_RIIC=y359CONFIG_I2C_RIIC=y
389CONFIG_I2C_RK3X=y360CONFIG_I2C_RK3X=y
@@ -427,7 +398,6 @@ CONFIG_SPI_SPIDEV=y · 37 unmodified lines
427CONFIG_SPMI=y398CONFIG_SPMI=y
428CONFIG_PINCTRL_AS3722=y399CONFIG_PINCTRL_AS3722=y
429CONFIG_PINCTRL_PALMAS=y400CONFIG_PINCTRL_PALMAS=y
430CONFIG_PINCTRL_BCM2835=y
431CONFIG_PINCTRL_APQ8064=y401CONFIG_PINCTRL_APQ8064=y
432CONFIG_PINCTRL_APQ8084=y402CONFIG_PINCTRL_APQ8084=y
433CONFIG_PINCTRL_IPQ8064=y403CONFIG_PINCTRL_IPQ8064=y
@@ -437,25 +407,33 @@ CONFIG_PINCTRL_MSM8X74=y · 3 unmodified lines
437CONFIG_PINCTRL_MSM8916=y407CONFIG_PINCTRL_MSM8916=y
438CONFIG_PINCTRL_QCOM_SPMI_PMIC=y408CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
439CONFIG_PINCTRL_QCOM_SSBI_PMIC=y409CONFIG_PINCTRL_QCOM_SSBI_PMIC=y
440CONFIG_GPIO_GENERIC_PLATFORM=y
441CONFIG_GPIO_DAVINCI=y410CONFIG_GPIO_DAVINCI=y
442CONFIG_GPIO_DWAPB=y411CONFIG_GPIO_DWAPB=y
443CONFIG_GPIO_EM=y412CONFIG_GPIO_EM=y
444CONFIG_GPIO_RCAR=y413CONFIG_GPIO_RCAR=y
414CONFIG_GPIO_SYSCON=y
445CONFIG_GPIO_UNIPHIER=y415CONFIG_GPIO_UNIPHIER=y
446CONFIG_GPIO_XILINX=y416CONFIG_GPIO_XILINX=y
447CONFIG_GPIO_ZYNQ=y417CONFIG_GPIO_ZYNQ=y
448CONFIG_GPIO_PCA953X=y418CONFIG_GPIO_PCA953X=y
449CONFIG_GPIO_PCA953X_IRQ=y419CONFIG_GPIO_PCA953X_IRQ=y
450CONFIG_GPIO_PCF857X=y420CONFIG_GPIO_PCF857X=y
451CONFIG_GPIO_TWL4030=y
452CONFIG_GPIO_PALMAS=y421CONFIG_GPIO_PALMAS=y
453CONFIG_GPIO_SYSCON=y
454CONFIG_GPIO_TPS6586X=y422CONFIG_GPIO_TPS6586X=y
455CONFIG_GPIO_TPS65910=y423CONFIG_GPIO_TPS65910=y
424CONFIG_GPIO_TWL4030=y
425CONFIG_POWER_AVS=y
426CONFIG_ROCKCHIP_IODOMAIN=y
427CONFIG_POWER_RESET_AS3722=y
428CONFIG_POWER_RESET_GPIO=y
429CONFIG_POWER_RESET_GPIO_RESTART=y
430CONFIG_POWER_RESET_ST=y
431CONFIG_POWER_RESET_KEYSTONE=y
432CONFIG_POWER_RESET_RMOBILE=y
456CONFIG_BATTERY_ACT8945A=y433CONFIG_BATTERY_ACT8945A=y
457CONFIG_BATTERY_CPCAP=m434CONFIG_BATTERY_CPCAP=m
458CONFIG_BATTERY_SBS=y435CONFIG_BATTERY_SBS=y
436CONFIG_AXP20X_POWER=m
459CONFIG_BATTERY_MAX17040=m437CONFIG_BATTERY_MAX17040=m
460CONFIG_BATTERY_MAX17042=m438CONFIG_BATTERY_MAX17042=m
461CONFIG_CHARGER_CPCAP=m439CONFIG_CHARGER_CPCAP=m
@@ -464,15 +442,6 @@ CONFIG_CHARGER_MAX77693=m · 2 unmodified lines
464CONFIG_CHARGER_MAX8997=m442CONFIG_CHARGER_MAX8997=m
465CONFIG_CHARGER_MAX8998=m443CONFIG_CHARGER_MAX8998=m
466CONFIG_CHARGER_TPS65090=y444CONFIG_CHARGER_TPS65090=y
467CONFIG_AXP20X_POWER=m
468CONFIG_POWER_RESET_AS3722=y
469CONFIG_POWER_RESET_GPIO=y
470CONFIG_POWER_RESET_GPIO_RESTART=y
471CONFIG_POWER_RESET_KEYSTONE=y
472CONFIG_POWER_RESET_RMOBILE=y
473CONFIG_POWER_RESET_ST=y
474CONFIG_POWER_AVS=y
475CONFIG_ROCKCHIP_IODOMAIN=y
476CONFIG_SENSORS_IIO_HWMON=y445CONFIG_SENSORS_IIO_HWMON=y
477CONFIG_SENSORS_LM90=y446CONFIG_SENSORS_LM90=y
478CONFIG_SENSORS_LM95245=y447CONFIG_SENSORS_LM95245=y
@@ -480,14 +449,12 @@ CONFIG_SENSORS_NTC_THERMISTOR=m · 1 unmodified line
480CONFIG_SENSORS_PWM_FAN=m449CONFIG_SENSORS_PWM_FAN=m
481CONFIG_SENSORS_INA2XX=m450CONFIG_SENSORS_INA2XX=m
482CONFIG_CPU_THERMAL=y451CONFIG_CPU_THERMAL=y
483CONFIG_BCM2835_THERMAL=m
484CONFIG_BRCMSTB_THERMAL=m
485CONFIG_IMX_THERMAL=y452CONFIG_IMX_THERMAL=y
486CONFIG_ROCKCHIP_THERMAL=y453CONFIG_ROCKCHIP_THERMAL=y
487CONFIG_RCAR_THERMAL=y454CONFIG_RCAR_THERMAL=y
488CONFIG_ARMADA_THERMAL=y455CONFIG_ARMADA_THERMAL=y
489CONFIG_DAVINCI_WATCHDOG=m456CONFIG_BCM2835_THERMAL=m
490CONFIG_EXYNOS_THERMAL=m457CONFIG_BRCMSTB_THERMAL=m
491CONFIG_ST_THERMAL_MEMMAP=y458CONFIG_ST_THERMAL_MEMMAP=y
492CONFIG_WATCHDOG=y459CONFIG_WATCHDOG=y
493CONFIG_DA9063_WATCHDOG=m460CONFIG_DA9063_WATCHDOG=m
@@ -495,20 +462,24 @@ CONFIG_XILINX_WATCHDOG=y · 1 unmodified line
495CONFIG_ARM_SP805_WATCHDOG=y462CONFIG_ARM_SP805_WATCHDOG=y
496CONFIG_AT91SAM9X_WATCHDOG=y463CONFIG_AT91SAM9X_WATCHDOG=y
497CONFIG_SAMA5D4_WATCHDOG=y464CONFIG_SAMA5D4_WATCHDOG=y
465CONFIG_DW_WATCHDOG=y
466CONFIG_DAVINCI_WATCHDOG=m
498CONFIG_ORION_WATCHDOG=y467CONFIG_ORION_WATCHDOG=y
499CONFIG_RN5T618_WATCHDOG=y468CONFIG_RN5T618_WATCHDOG=y
500CONFIG_ST_LPC_WATCHDOG=y
501CONFIG_SUNXI_WATCHDOG=y469CONFIG_SUNXI_WATCHDOG=y
502CONFIG_IMX2_WDT=y470CONFIG_IMX2_WDT=y
471CONFIG_ST_LPC_WATCHDOG=y
503CONFIG_TEGRA_WATCHDOG=m472CONFIG_TEGRA_WATCHDOG=m
504CONFIG_MESON_WATCHDOG=y473CONFIG_MESON_WATCHDOG=y
505CONFIG_DW_WATCHDOG=y
506CONFIG_DIGICOLOR_WATCHDOG=y474CONFIG_DIGICOLOR_WATCHDOG=y
507CONFIG_RENESAS_WDT=m475CONFIG_RENESAS_WDT=m
508CONFIG_BCM2835_WDT=y
509CONFIG_BCM47XX_WDT=y476CONFIG_BCM47XX_WDT=y
510CONFIG_BCM7038_WDT=m477CONFIG_BCM2835_WDT=y
511CONFIG_BCM_KONA_WDT=y478CONFIG_BCM_KONA_WDT=y
479CONFIG_BCM7038_WDT=m
480CONFIG_BCMA_HOST_SOC=y
481CONFIG_BCMA_DRIVER_GMAC_CMN=y
482CONFIG_BCMA_DRIVER_GPIO=y
512CONFIG_MFD_ACT8945A=y483CONFIG_MFD_ACT8945A=y
513CONFIG_MFD_AS3711=y484CONFIG_MFD_AS3711=y
514CONFIG_MFD_AS3722=y485CONFIG_MFD_AS3722=y
@@ -516,7 +487,6 @@ CONFIG_MFD_ATMEL_FLEXCOM=y · 1 unmodified line
516CONFIG_MFD_ATMEL_HLCDC=m487CONFIG_MFD_ATMEL_HLCDC=m
517CONFIG_MFD_BCM590XX=y488CONFIG_MFD_BCM590XX=y
518CONFIG_MFD_AC100=y489CONFIG_MFD_AC100=y
519CONFIG_MFD_AXP20X=y
520CONFIG_MFD_AXP20X_I2C=y490CONFIG_MFD_AXP20X_I2C=y
521CONFIG_MFD_AXP20X_RSB=y491CONFIG_MFD_AXP20X_RSB=y
522CONFIG_MFD_CROS_EC=m492CONFIG_MFD_CROS_EC=m
@@ -529,11 +499,11 @@ CONFIG_MFD_MAX77693=m · 6 unmodified lines
529CONFIG_MFD_MAX8907=y499CONFIG_MFD_MAX8907=y
530CONFIG_MFD_MAX8997=y500CONFIG_MFD_MAX8997=y
531CONFIG_MFD_MAX8998=y501CONFIG_MFD_MAX8998=y
532CONFIG_MFD_RK808=y
533CONFIG_MFD_CPCAP=y502CONFIG_MFD_CPCAP=y
534CONFIG_MFD_PM8XXX=y503CONFIG_MFD_PM8XXX=y
535CONFIG_MFD_QCOM_RPM=y504CONFIG_MFD_QCOM_RPM=y
536CONFIG_MFD_SPMI_PMIC=y505CONFIG_MFD_SPMI_PMIC=y
506CONFIG_MFD_RK808=y
537CONFIG_MFD_RN5T618=y507CONFIG_MFD_RN5T618=y
538CONFIG_MFD_SEC_CORE=y508CONFIG_MFD_SEC_CORE=y
539CONFIG_MFD_STMPE=y509CONFIG_MFD_STMPE=y
@@ -543,10 +513,10 @@ CONFIG_MFD_TPS65217=y · 3 unmodified lines
543CONFIG_MFD_TPS65218=y513CONFIG_MFD_TPS65218=y
544CONFIG_MFD_TPS6586X=y514CONFIG_MFD_TPS6586X=y
545CONFIG_MFD_TPS65910=y515CONFIG_MFD_TPS65910=y
546CONFIG_REGULATOR_ACT8945A=y
547CONFIG_REGULATOR_AB8500=y
548CONFIG_REGULATOR_ACT8865=y516CONFIG_REGULATOR_ACT8865=y
517CONFIG_REGULATOR_ACT8945A=y
549CONFIG_REGULATOR_ANATOP=y518CONFIG_REGULATOR_ANATOP=y
519CONFIG_REGULATOR_AB8500=y
550CONFIG_REGULATOR_AS3711=y520CONFIG_REGULATOR_AS3711=y
551CONFIG_REGULATOR_AS3722=y521CONFIG_REGULATOR_AS3722=y
552CONFIG_REGULATOR_AXP20X=y522CONFIG_REGULATOR_AXP20X=y
@@ -554,10 +524,7 @@ CONFIG_REGULATOR_BCM590XX=y · 1 unmodified line
554CONFIG_REGULATOR_CPCAP=y524CONFIG_REGULATOR_CPCAP=y
555CONFIG_REGULATOR_DA9210=y525CONFIG_REGULATOR_DA9210=y
556CONFIG_REGULATOR_FAN53555=y526CONFIG_REGULATOR_FAN53555=y
557CONFIG_REGULATOR_RK808=y
558CONFIG_REGULATOR_GPIO=y527CONFIG_REGULATOR_GPIO=y
559CONFIG_MFD_SYSCON=y
560CONFIG_POWER_RESET_SYSCON=y
561CONFIG_REGULATOR_LP872X=y528CONFIG_REGULATOR_LP872X=y
562CONFIG_REGULATOR_MAX14577=m529CONFIG_REGULATOR_MAX14577=m
563CONFIG_REGULATOR_MAX8907=y530CONFIG_REGULATOR_MAX8907=y
@@ -571,7 +538,8 @@ CONFIG_REGULATOR_PALMAS=y · 7 unmodified lines
571CONFIG_REGULATOR_PBIAS=y538CONFIG_REGULATOR_PBIAS=y
572CONFIG_REGULATOR_PWM=y539CONFIG_REGULATOR_PWM=y
573CONFIG_REGULATOR_QCOM_RPM=y540CONFIG_REGULATOR_QCOM_RPM=y
574CONFIG_REGULATOR_QCOM_SMD_RPM=y541CONFIG_REGULATOR_QCOM_SMD_RPM=m
542CONFIG_REGULATOR_RK808=y
575CONFIG_REGULATOR_RN5T618=y543CONFIG_REGULATOR_RN5T618=y
576CONFIG_REGULATOR_S2MPS11=y544CONFIG_REGULATOR_S2MPS11=y
577CONFIG_REGULATOR_S5M8767=y545CONFIG_REGULATOR_S5M8767=y
@@ -592,18 +560,17 @@ CONFIG_MEDIA_CEC_SUPPORT=y · 14 unmodified lines
592CONFIG_MEDIA_CONTROLLER=y560CONFIG_MEDIA_CONTROLLER=y
593CONFIG_VIDEO_V4L2_SUBDEV_API=y561CONFIG_VIDEO_V4L2_SUBDEV_API=y
594CONFIG_MEDIA_USB_SUPPORT=y562CONFIG_MEDIA_USB_SUPPORT=y
595CONFIG_USB_VIDEO_CLASS=y563CONFIG_USB_VIDEO_CLASS=m
596CONFIG_USB_GSPCA=y
597CONFIG_V4L_PLATFORM_DRIVERS=y564CONFIG_V4L_PLATFORM_DRIVERS=y
598CONFIG_SOC_CAMERA=m565CONFIG_SOC_CAMERA=m
599CONFIG_SOC_CAMERA_PLATFORM=m566CONFIG_SOC_CAMERA_PLATFORM=m
600CONFIG_VIDEO_RCAR_VIN=m
601CONFIG_VIDEO_ATMEL_ISI=m
602CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=m567CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=m
603CONFIG_VIDEO_S5P_FIMC=m568CONFIG_VIDEO_S5P_FIMC=m
604CONFIG_VIDEO_S5P_MIPI_CSIS=m569CONFIG_VIDEO_S5P_MIPI_CSIS=m
605CONFIG_VIDEO_EXYNOS_FIMC_LITE=m570CONFIG_VIDEO_EXYNOS_FIMC_LITE=m
606CONFIG_VIDEO_EXYNOS4_FIMC_IS=m571CONFIG_VIDEO_EXYNOS4_FIMC_IS=m
572CONFIG_VIDEO_RCAR_VIN=m
573CONFIG_VIDEO_ATMEL_ISI=m
607CONFIG_V4L_MEM2MEM_DRIVERS=y574CONFIG_V4L_MEM2MEM_DRIVERS=y
608CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m575CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m
609CONFIG_VIDEO_SAMSUNG_S5P_MFC=m576CONFIG_VIDEO_SAMSUNG_S5P_MFC=m
@@ -614,19 +581,15 @@ CONFIG_VIDEO_STI_DELTA=m · 4 unmodified lines
614CONFIG_VIDEO_RENESAS_JPU=m581CONFIG_VIDEO_RENESAS_JPU=m
615CONFIG_VIDEO_RENESAS_VSP1=m582CONFIG_VIDEO_RENESAS_VSP1=m
616CONFIG_V4L_TEST_DRIVERS=y583CONFIG_V4L_TEST_DRIVERS=y
584CONFIG_VIDEO_VIVID=m
617CONFIG_CEC_PLATFORM_DRIVERS=y585CONFIG_CEC_PLATFORM_DRIVERS=y
618CONFIG_VIDEO_SAMSUNG_S5P_CEC=m586CONFIG_VIDEO_SAMSUNG_S5P_CEC=m
619# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set587# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
620CONFIG_VIDEO_ADV7180=m588CONFIG_VIDEO_ADV7180=m
621CONFIG_VIDEO_ML86V7667=m589CONFIG_VIDEO_ML86V7667=m
622CONFIG_DRM=y590CONFIG_DRM=y
623CONFIG_DRM_I2C_ADV7511=m
624CONFIG_DRM_I2C_ADV7511_AUDIO=y
625# CONFIG_DRM_I2C_CH7006 is not set591# CONFIG_DRM_I2C_CH7006 is not set
626# CONFIG_DRM_I2C_SIL164 is not set592# CONFIG_DRM_I2C_SIL164 is not set
627CONFIG_DRM_DUMB_VGA_DAC=m
628CONFIG_DRM_NXP_PTN3460=m
629CONFIG_DRM_PARADE_PS8622=m
630CONFIG_DRM_NOUVEAU=m593CONFIG_DRM_NOUVEAU=m
631CONFIG_DRM_EXYNOS=m594CONFIG_DRM_EXYNOS=m
632CONFIG_DRM_EXYNOS_FIMD=y595CONFIG_DRM_EXYNOS_FIMD=y
@@ -645,13 +608,18 @@ CONFIG_DRM_RCAR_LVDS=y · 12 unmodified lines
645CONFIG_DRM_SUN4I=m608CONFIG_DRM_SUN4I=m
646CONFIG_DRM_FSL_DCU=m609CONFIG_DRM_FSL_DCU=m
647CONFIG_DRM_TEGRA=y610CONFIG_DRM_TEGRA=y
611CONFIG_DRM_PANEL_SIMPLE=y
648CONFIG_DRM_PANEL_SAMSUNG_LD9040=m612CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
649CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m613CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
650CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m614CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
651CONFIG_DRM_PANEL_SIMPLE=y615CONFIG_DRM_DUMB_VGA_DAC=m
616CONFIG_DRM_NXP_PTN3460=m
617CONFIG_DRM_PARADE_PS8622=m
652CONFIG_DRM_SII9234=m618CONFIG_DRM_SII9234=m
619CONFIG_DRM_I2C_ADV7511=m
620CONFIG_DRM_I2C_ADV7511_AUDIO=y
653CONFIG_DRM_STI=m621CONFIG_DRM_STI=m
654CONFIG_DRM_VC4=y622CONFIG_DRM_VC4=m
655CONFIG_DRM_ETNAVIV=m623CONFIG_DRM_ETNAVIV=m
656CONFIG_DRM_MXSFB=m624CONFIG_DRM_MXSFB=m
657CONFIG_FB_ARMCLCD=y625CONFIG_FB_ARMCLCD=y
@@ -659,8 +627,6 @@ CONFIG_FB_EFI=y · 1 unmodified line
659CONFIG_FB_WM8505=y627CONFIG_FB_WM8505=y
660CONFIG_FB_SH_MOBILE_LCDC=y628CONFIG_FB_SH_MOBILE_LCDC=y
661CONFIG_FB_SIMPLE=y629CONFIG_FB_SIMPLE=y
662CONFIG_BACKLIGHT_LCD_SUPPORT=y
663CONFIG_BACKLIGHT_CLASS_DEVICE=y
664CONFIG_LCD_PLATFORM=m630CONFIG_LCD_PLATFORM=m
665CONFIG_BACKLIGHT_PWM=y631CONFIG_BACKLIGHT_PWM=y
666CONFIG_BACKLIGHT_AS3711=y632CONFIG_BACKLIGHT_AS3711=y
@@ -668,7 +634,6 @@ CONFIG_FRAMEBUFFER_CONSOLE=y · 1 unmodified line
668CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y634CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
669CONFIG_SOUND=m635CONFIG_SOUND=m
670CONFIG_SND=m636CONFIG_SND=m
671CONFIG_SND_DYNAMIC_MINORS=y
672CONFIG_SND_HDA_TEGRA=m637CONFIG_SND_HDA_TEGRA=m
673CONFIG_SND_HDA_INPUT_BEEP=y638CONFIG_SND_HDA_INPUT_BEEP=y
674CONFIG_SND_HDA_PATCH_LOADER=y639CONFIG_SND_HDA_PATCH_LOADER=y
@@ -692,7 +657,7 @@ CONFIG_SND_SOC_SNOW=m · 17 unmodified lines
692CONFIG_SND_SOC_ODROID=m657CONFIG_SND_SOC_ODROID=m
693CONFIG_SND_SOC_SH4_FSI=m658CONFIG_SND_SOC_SH4_FSI=m
694CONFIG_SND_SOC_RCAR=m659CONFIG_SND_SOC_RCAR=m
695CONFIG_SND_SIMPLE_SCU_CARD=m660CONFIG_SND_SOC_STI=m
696CONFIG_SND_SUN4I_CODEC=m661CONFIG_SND_SUN4I_CODEC=m
697CONFIG_SND_SOC_TEGRA=m662CONFIG_SND_SOC_TEGRA=m
698CONFIG_SND_SOC_TEGRA20_I2S=m663CONFIG_SND_SOC_TEGRA20_I2S=m
@@ -703,31 +668,25 @@ CONFIG_SND_SOC_TEGRA_WM8903=m · 4 unmodified lines
703CONFIG_SND_SOC_TEGRA_WM9712=m668CONFIG_SND_SOC_TEGRA_WM9712=m
704CONFIG_SND_SOC_TEGRA_TRIMSLICE=m669CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
705CONFIG_SND_SOC_TEGRA_ALC5632=m670CONFIG_SND_SOC_TEGRA_ALC5632=m
706CONFIG_SND_SOC_CPCAP=m
707CONFIG_SND_SOC_TEGRA_MAX98090=m671CONFIG_SND_SOC_TEGRA_MAX98090=m
708CONFIG_SND_SOC_AK4642=m672CONFIG_SND_SOC_AK4642=m
673CONFIG_SND_SOC_CPCAP=m
709CONFIG_SND_SOC_SGTL5000=m674CONFIG_SND_SOC_SGTL5000=m
710CONFIG_SND_SOC_SPDIF=m675CONFIG_SND_SOC_SPDIF=m
711CONFIG_SND_SOC_WM8978=m
712CONFIG_SND_SOC_STI=m
713CONFIG_SND_SOC_STI_SAS=m676CONFIG_SND_SOC_STI_SAS=m
714CONFIG_SND_SIMPLE_CARD=m677CONFIG_SND_SOC_WM8978=m
678CONFIG_SND_SIMPLE_SCU_CARD=m
715CONFIG_USB=y679CONFIG_USB=y
716CONFIG_USB_OTG=y680CONFIG_USB_OTG=y
717CONFIG_USB_XHCI_HCD=y681CONFIG_USB_XHCI_HCD=y
718CONFIG_USB_XHCI_MVEBU=y682CONFIG_USB_XHCI_MVEBU=y
719CONFIG_USB_XHCI_RCAR=m
720CONFIG_USB_XHCI_TEGRA=m683CONFIG_USB_XHCI_TEGRA=m
721CONFIG_USB_EHCI_HCD=y684CONFIG_USB_EHCI_HCD=y
722CONFIG_USB_EHCI_MSM=m
723CONFIG_USB_EHCI_EXYNOS=y
724CONFIG_USB_EHCI_TEGRA=y
725CONFIG_USB_EHCI_HCD_STI=y685CONFIG_USB_EHCI_HCD_STI=y
726CONFIG_USB_EHCI_HCD_PLATFORM=y686CONFIG_USB_EHCI_TEGRA=y
727CONFIG_USB_ISP1760=y687CONFIG_USB_EHCI_EXYNOS=y
728CONFIG_USB_OHCI_HCD=y688CONFIG_USB_OHCI_HCD=y
729CONFIG_USB_OHCI_HCD_STI=y689CONFIG_USB_OHCI_HCD_STI=y
730CONFIG_USB_OHCI_HCD_PLATFORM=y
731CONFIG_USB_OHCI_EXYNOS=m690CONFIG_USB_OHCI_EXYNOS=m
732CONFIG_USB_R8A66597_HCD=m691CONFIG_USB_R8A66597_HCD=m
733CONFIG_USB_RENESAS_USBHS=m692CONFIG_USB_RENESAS_USBHS=m
@@ -746,18 +705,18 @@ CONFIG_USB_TI_CPPI41_DMA=y · 12 unmodified lines
746CONFIG_USB_TUSB_OMAP_DMA=y705CONFIG_USB_TUSB_OMAP_DMA=y
747CONFIG_USB_DWC3=y706CONFIG_USB_DWC3=y
748CONFIG_USB_DWC2=y707CONFIG_USB_DWC2=y
749CONFIG_USB_HSIC_USB3503=y
750CONFIG_USB_CHIPIDEA=y708CONFIG_USB_CHIPIDEA=y
751CONFIG_USB_CHIPIDEA_UDC=y709CONFIG_USB_CHIPIDEA_UDC=y
752CONFIG_USB_CHIPIDEA_HOST=y710CONFIG_USB_CHIPIDEA_HOST=y
711CONFIG_USB_ISP1760=y
712CONFIG_USB_HSIC_USB3503=y
753CONFIG_AB8500_USB=y713CONFIG_AB8500_USB=y
754CONFIG_KEYSTONE_USB_PHY=y714CONFIG_KEYSTONE_USB_PHY=m
755CONFIG_NOP_USB_XCEIV=m715CONFIG_NOP_USB_XCEIV=m
756CONFIG_AM335X_PHY_USB=m716CONFIG_AM335X_PHY_USB=m
757CONFIG_TWL6030_USB=m717CONFIG_TWL6030_USB=m
758CONFIG_USB_GPIO_VBUS=y718CONFIG_USB_GPIO_VBUS=y
759CONFIG_USB_ISP1301=y719CONFIG_USB_ISP1301=y
760CONFIG_USB_MSM_OTG=m
761CONFIG_USB_MXS_PHY=y720CONFIG_USB_MXS_PHY=y
762CONFIG_USB_GADGET=y721CONFIG_USB_GADGET=y
763CONFIG_USB_FSL_USB2=y722CONFIG_USB_FSL_USB2=y
@@ -793,21 +752,20 @@ CONFIG_MMC_SDHCI_OF_ESDHC=y · 29 unmodified lines
793CONFIG_MMC_SDHCI_ESDHC_IMX=y752CONFIG_MMC_SDHCI_ESDHC_IMX=y
794CONFIG_MMC_SDHCI_DOVE=y753CONFIG_MMC_SDHCI_DOVE=y
795CONFIG_MMC_SDHCI_TEGRA=y754CONFIG_MMC_SDHCI_TEGRA=y
755CONFIG_MMC_SDHCI_S3C=y
796CONFIG_MMC_SDHCI_PXAV3=y756CONFIG_MMC_SDHCI_PXAV3=y
797CONFIG_MMC_SDHCI_SPEAR=y757CONFIG_MMC_SDHCI_SPEAR=y
798CONFIG_MMC_SDHCI_S3C=y
799CONFIG_MMC_SDHCI_S3C_DMA=y758CONFIG_MMC_SDHCI_S3C_DMA=y
800CONFIG_MMC_SDHCI_BCM_KONA=y759CONFIG_MMC_SDHCI_BCM_KONA=y
760CONFIG_MMC_MESON_MX_SDIO=y
801CONFIG_MMC_SDHCI_ST=y761CONFIG_MMC_SDHCI_ST=y
802CONFIG_MMC_OMAP=y762CONFIG_MMC_OMAP=y
803CONFIG_MMC_OMAP_HS=y763CONFIG_MMC_OMAP_HS=y
804CONFIG_MMC_ATMELMCI=y764CONFIG_MMC_ATMELMCI=y
805CONFIG_MMC_SDHCI_MSM=y765CONFIG_MMC_SDHCI_MSM=y
806CONFIG_MMC_MESON_MX_SDIO=y
807CONFIG_MMC_MVSDIO=y766CONFIG_MMC_MVSDIO=y
808CONFIG_MMC_SDHI=y767CONFIG_MMC_SDHI=y
809CONFIG_MMC_DW=y768CONFIG_MMC_DW=y
810CONFIG_MMC_DW_PLTFM=y
811CONFIG_MMC_DW_EXYNOS=y769CONFIG_MMC_DW_EXYNOS=y
812CONFIG_MMC_DW_ROCKCHIP=y770CONFIG_MMC_DW_ROCKCHIP=y
813CONFIG_MMC_SH_MMCIF=y771CONFIG_MMC_SH_MMCIF=y
@@ -847,94 +805,85 @@ CONFIG_RTC_DRV_MAX77686=y · 33 unmodified lines
847CONFIG_RTC_DRV_RK808=m805CONFIG_RTC_DRV_RK808=m
848CONFIG_RTC_DRV_RS5C372=m806CONFIG_RTC_DRV_RS5C372=m
849CONFIG_RTC_DRV_BQ32K=m807CONFIG_RTC_DRV_BQ32K=m
850CONFIG_RTC_DRV_PALMAS=y
851CONFIG_RTC_DRV_ST_LPC=y
852CONFIG_RTC_DRV_TWL4030=y808CONFIG_RTC_DRV_TWL4030=y
809CONFIG_RTC_DRV_PALMAS=y
853CONFIG_RTC_DRV_TPS6586X=y810CONFIG_RTC_DRV_TPS6586X=y
854CONFIG_RTC_DRV_TPS65910=y811CONFIG_RTC_DRV_TPS65910=y
855CONFIG_RTC_DRV_S35390A=m812CONFIG_RTC_DRV_S35390A=m
856CONFIG_RTC_DRV_RX8581=m813CONFIG_RTC_DRV_RX8581=m
857CONFIG_RTC_DRV_EM3027=y814CONFIG_RTC_DRV_EM3027=y
815CONFIG_RTC_DRV_S5M=m
858CONFIG_RTC_DRV_DA9063=m816CONFIG_RTC_DRV_DA9063=m
859CONFIG_RTC_DRV_EFI=m817CONFIG_RTC_DRV_EFI=m
860CONFIG_RTC_DRV_DIGICOLOR=m818CONFIG_RTC_DRV_DIGICOLOR=m
861CONFIG_RTC_DRV_S5M=m
862CONFIG_RTC_DRV_S3C=m819CONFIG_RTC_DRV_S3C=m
863CONFIG_RTC_DRV_PL031=y820CONFIG_RTC_DRV_PL031=y
864CONFIG_RTC_DRV_AT91RM9200=m821CONFIG_RTC_DRV_AT91RM9200=m
865CONFIG_RTC_DRV_AT91SAM9=m822CONFIG_RTC_DRV_AT91SAM9=m
866CONFIG_RTC_DRV_VT8500=y823CONFIG_RTC_DRV_VT8500=y
867CONFIG_RTC_DRV_SUN6I=y
868CONFIG_RTC_DRV_SUNXI=y824CONFIG_RTC_DRV_SUNXI=y
869CONFIG_RTC_DRV_MV=y825CONFIG_RTC_DRV_MV=y
870CONFIG_RTC_DRV_TEGRA=y826CONFIG_RTC_DRV_TEGRA=y
827CONFIG_RTC_DRV_ST_LPC=y
871CONFIG_RTC_DRV_CPCAP=m828CONFIG_RTC_DRV_CPCAP=m
872CONFIG_DMADEVICES=y829CONFIG_DMADEVICES=y
873CONFIG_DW_DMAC=y
874CONFIG_AT_HDMAC=y830CONFIG_AT_HDMAC=y
875CONFIG_AT_XDMAC=y831CONFIG_AT_XDMAC=y
832CONFIG_DMA_BCM2835=y
833CONFIG_DMA_SUN6I=y
876CONFIG_FSL_EDMA=y834CONFIG_FSL_EDMA=y
835CONFIG_IMX_DMA=y
836CONFIG_IMX_SDMA=y
877CONFIG_MV_XOR=y837CONFIG_MV_XOR=y
838CONFIG_MXS_DMA=y
839CONFIG_PL330_DMA=y
840CONFIG_SIRF_DMA=y
841CONFIG_STE_DMA40=y
842CONFIG_ST_FDMA=m
878CONFIG_TEGRA20_APB_DMA=y843CONFIG_TEGRA20_APB_DMA=y
844CONFIG_XILINX_DMA=y
845CONFIG_QCOM_BAM_DMA=y
846CONFIG_DW_DMAC=y
879CONFIG_SH_DMAE=y847CONFIG_SH_DMAE=y
880CONFIG_RCAR_DMAC=y848CONFIG_RCAR_DMAC=y
881CONFIG_RENESAS_USB_DMAC=m849CONFIG_RENESAS_USB_DMAC=m
882CONFIG_STE_DMA40=y850CONFIG_VIRTIO_PCI=y
883CONFIG_SIRF_DMA=y851CONFIG_VIRTIO_MMIO=y
884CONFIG_TI_EDMA=y
885CONFIG_PL330_DMA=y
886CONFIG_IMX_SDMA=y
887CONFIG_IMX_DMA=y
888CONFIG_MXS_DMA=y
889CONFIG_DMA_BCM2835=y
890CONFIG_DMA_OMAP=y
891CONFIG_QCOM_BAM_DMA=y
892CONFIG_XILINX_DMA=y
893CONFIG_DMA_SUN6I=y
894CONFIG_ST_FDMA=m
895CONFIG_STAGING=y852CONFIG_STAGING=y
896CONFIG_SENSORS_ISL29018=y
897CONFIG_SENSORS_ISL29028=y
898CONFIG_MFD_NVEC=y853CONFIG_MFD_NVEC=y
899CONFIG_KEYBOARD_NVEC=y854CONFIG_KEYBOARD_NVEC=y
900CONFIG_SERIO_NVEC_PS2=y855CONFIG_SERIO_NVEC_PS2=y
901CONFIG_NVEC_POWER=y856CONFIG_NVEC_POWER=y
902CONFIG_NVEC_PAZ00=y857CONFIG_NVEC_PAZ00=y
903CONFIG_BCMA=y
904CONFIG_BCMA_HOST_SOC=y
905CONFIG_BCMA_DRIVER_GMAC_CMN=y
906CONFIG_BCMA_DRIVER_GPIO=y
907CONFIG_QCOM_GSBI=y
908CONFIG_QCOM_PM=y
909CONFIG_QCOM_SMEM=y
910CONFIG_QCOM_SMD_RPM=y
911CONFIG_QCOM_SMP2P=y
912CONFIG_QCOM_SMSM=y
913CONFIG_QCOM_WCNSS_CTRL=m
914CONFIG_ROCKCHIP_PM_DOMAINS=y
915CONFIG_COMMON_CLK_QCOM=y
916CONFIG_QCOM_CLK_RPM=y
917CONFIG_CHROME_PLATFORMS=y
918CONFIG_STAGING_BOARD=y858CONFIG_STAGING_BOARD=y
919CONFIG_CROS_EC_CHARDEV=m
920CONFIG_COMMON_CLK_MAX77686=y859CONFIG_COMMON_CLK_MAX77686=y
921CONFIG_COMMON_CLK_RK808=m860CONFIG_COMMON_CLK_RK808=m
922CONFIG_COMMON_CLK_S2MPS11=m861CONFIG_COMMON_CLK_S2MPS11=m
862CONFIG_COMMON_CLK_QCOM=y
863CONFIG_QCOM_CLK_RPM=y
923CONFIG_APQ_MMCC_8084=y864CONFIG_APQ_MMCC_8084=y
924CONFIG_MSM_GCC_8660=y865CONFIG_MSM_GCC_8660=y
925CONFIG_MSM_MMCC_8960=y866CONFIG_MSM_MMCC_8960=y
926CONFIG_MSM_MMCC_8974=y867CONFIG_MSM_MMCC_8974=y
927CONFIG_HWSPINLOCK_QCOM=y868CONFIG_BCM2835_MBOX=y
928CONFIG_ROCKCHIP_IOMMU=y869CONFIG_ROCKCHIP_IOMMU=y
929CONFIG_TEGRA_IOMMU_GART=y870CONFIG_TEGRA_IOMMU_GART=y
930CONFIG_TEGRA_IOMMU_SMMU=y871CONFIG_TEGRA_IOMMU_SMMU=y
931CONFIG_REMOTEPROC=m872CONFIG_REMOTEPROC=m
932CONFIG_ST_REMOTEPROC=m873CONFIG_ST_REMOTEPROC=m
933CONFIG_RPMSG_VIRTIO=m874CONFIG_RPMSG_VIRTIO=m
875CONFIG_RASPBERRYPI_POWER=y
876CONFIG_QCOM_GSBI=y
877CONFIG_QCOM_PM=y
878CONFIG_QCOM_SMD_RPM=m
879CONFIG_QCOM_WCNSS_CTRL=m
880CONFIG_ROCKCHIP_PM_DOMAINS=y
881CONFIG_ARCH_TEGRA_2x_SOC=y
882CONFIG_ARCH_TEGRA_3x_SOC=y
883CONFIG_ARCH_TEGRA_114_SOC=y
884CONFIG_ARCH_TEGRA_124_SOC=y
934CONFIG_PM_DEVFREQ=y885CONFIG_PM_DEVFREQ=y
935CONFIG_ARM_TEGRA_DEVFREQ=m886CONFIG_ARM_TEGRA_DEVFREQ=m
936CONFIG_MEMORY=y
937CONFIG_EXTCON=y
938CONFIG_TI_AEMIF=y887CONFIG_TI_AEMIF=y
939CONFIG_IIO=y888CONFIG_IIO=y
940CONFIG_IIO_SW_TRIGGER=y889CONFIG_IIO_SW_TRIGGER=y
@@ -947,56 +896,54 @@ CONFIG_VF610_ADC=m · 6 unmodified lines
947CONFIG_XILINX_XADC=y896CONFIG_XILINX_XADC=y
948CONFIG_MPU3050_I2C=y897CONFIG_MPU3050_I2C=y
949CONFIG_CM36651=m898CONFIG_CM36651=m
899CONFIG_SENSORS_ISL29018=y
900CONFIG_SENSORS_ISL29028=y
950CONFIG_AK8975=y901CONFIG_AK8975=y
951CONFIG_RASPBERRYPI_POWER=y
952CONFIG_IIO_HRTIMER_TRIGGER=y902CONFIG_IIO_HRTIMER_TRIGGER=y
953CONFIG_PWM=y903CONFIG_PWM=y
954CONFIG_PWM_ATMEL=m904CONFIG_PWM_ATMEL=m
955CONFIG_PWM_ATMEL_HLCDC_PWM=m905CONFIG_PWM_ATMEL_HLCDC_PWM=m
956CONFIG_PWM_ATMEL_TCB=m906CONFIG_PWM_ATMEL_TCB=m
907CONFIG_PWM_BCM2835=y
908CONFIG_PWM_BRCMSTB=m
957CONFIG_PWM_FSL_FTM=m909CONFIG_PWM_FSL_FTM=m
958CONFIG_PWM_MESON=m910CONFIG_PWM_MESON=m
959CONFIG_PWM_RCAR=m911CONFIG_PWM_RCAR=m
960CONFIG_PWM_RENESAS_TPU=y912CONFIG_PWM_RENESAS_TPU=y
961CONFIG_PWM_ROCKCHIP=m913CONFIG_PWM_ROCKCHIP=m
962CONFIG_PWM_SAMSUNG=m914CONFIG_PWM_SAMSUNG=m
915CONFIG_PWM_STI=y
963CONFIG_PWM_SUN4I=y916CONFIG_PWM_SUN4I=y
964CONFIG_PWM_TEGRA=y917CONFIG_PWM_TEGRA=y
965CONFIG_PWM_VT8500=y918CONFIG_PWM_VT8500=y
919CONFIG_KEYSTONE_IRQ=y
920CONFIG_PHY_SUN4I_USB=y
921CONFIG_PHY_SUN9I_USB=y
966CONFIG_PHY_HIX5HD2_SATA=y922CONFIG_PHY_HIX5HD2_SATA=y
967CONFIG_E1000E=y923CONFIG_PHY_BERLIN_SATA=y
968CONFIG_PWM_STI=y
969CONFIG_PWM_BCM2835=y
970CONFIG_PWM_BRCMSTB=m
971CONFIG_PHY_DM816X_USB=m
972CONFIG_OMAP_USB2=y
973CONFIG_TI_PIPE3=y
974CONFIG_TWL4030_USB=m
975CONFIG_PHY_BERLIN_USB=y924CONFIG_PHY_BERLIN_USB=y
976CONFIG_PHY_CPCAP_USB=m925CONFIG_PHY_CPCAP_USB=m
977CONFIG_PHY_BERLIN_SATA=y926CONFIG_PHY_QCOM_APQ8064_SATA=m
927CONFIG_PHY_RCAR_GEN2=m
978CONFIG_PHY_ROCKCHIP_DP=m928CONFIG_PHY_ROCKCHIP_DP=m
979CONFIG_PHY_ROCKCHIP_USB=y929CONFIG_PHY_ROCKCHIP_USB=y
980CONFIG_PHY_QCOM_APQ8064_SATA=m930CONFIG_PHY_SAMSUNG_USB2=m
981CONFIG_PHY_MIPHY28LP=y931CONFIG_PHY_MIPHY28LP=y
982CONFIG_PHY_RCAR_GEN2=m
983CONFIG_PHY_STIH407_USB=y932CONFIG_PHY_STIH407_USB=y
984CONFIG_PHY_STM32_USBPHYC=y933CONFIG_PHY_STM32_USBPHYC=y
985CONFIG_PHY_SUN4I_USB=y
986CONFIG_PHY_SUN9I_USB=y
987CONFIG_PHY_SAMSUNG_USB2=m
988CONFIG_PHY_TEGRA_XUSB=y934CONFIG_PHY_TEGRA_XUSB=y
989CONFIG_PHY_BRCM_SATA=y935CONFIG_PHY_DM816X_USB=m
990CONFIG_NVMEM=y936CONFIG_OMAP_USB2=y
937CONFIG_TI_PIPE3=y
938CONFIG_TWL4030_USB=m
991CONFIG_NVMEM_IMX_OCOTP=y939CONFIG_NVMEM_IMX_OCOTP=y
992CONFIG_NVMEM_SUNXI_SID=y940CONFIG_NVMEM_SUNXI_SID=y
993CONFIG_NVMEM_VF610_OCOTP=y941CONFIG_NVMEM_VF610_OCOTP=y
994CONFIG_BCM2835_MBOX=y
995CONFIG_RASPBERRYPI_FIRMWARE=y942CONFIG_RASPBERRYPI_FIRMWARE=y
996CONFIG_EFI_VARS=m
997CONFIG_EFI_CAPSULE_LOADER=m
998CONFIG_BCM47XX_NVRAM=y943CONFIG_BCM47XX_NVRAM=y
999CONFIG_BCM47XX_SPROM=y944CONFIG_BCM47XX_SPROM=y
945CONFIG_EFI_VARS=m
946CONFIG_EFI_CAPSULE_LOADER=m
1000CONFIG_EXT4_FS=y947CONFIG_EXT4_FS=y
1001CONFIG_AUTOFS4_FS=y948CONFIG_AUTOFS4_FS=y
1002CONFIG_MSDOS_FS=y949CONFIG_MSDOS_FS=y
@@ -1004,7 +951,6 @@ CONFIG_VFAT_FS=y · 1 unmodified line
1004CONFIG_NTFS_FS=y951CONFIG_NTFS_FS=y
1005CONFIG_TMPFS_POSIX_ACL=y952CONFIG_TMPFS_POSIX_ACL=y
1006CONFIG_UBIFS_FS=y953CONFIG_UBIFS_FS=y
1007CONFIG_TMPFS=y
1008CONFIG_SQUASHFS=y954CONFIG_SQUASHFS=y
1009CONFIG_SQUASHFS_LZO=y955CONFIG_SQUASHFS_LZO=y
1010CONFIG_SQUASHFS_XZ=y956CONFIG_SQUASHFS_XZ=y
@@ -1020,13 +966,7 @@ CONFIG_NLS_CODEPAGE_437=y · 9 unmodified lines
1020CONFIG_NLS_ISO8859_1=y966CONFIG_NLS_ISO8859_1=y
1021CONFIG_NLS_UTF8=y967CONFIG_NLS_UTF8=y
1022CONFIG_PRINTK_TIME=y968CONFIG_PRINTK_TIME=y
1023CONFIG_DEBUG_FS=y
1024CONFIG_MAGIC_SYSRQ=y969CONFIG_MAGIC_SYSRQ=y
1025CONFIG_LOCKUP_DETECTOR=y
1026CONFIG_CPUFREQ_DT=y
1027CONFIG_KEYSTONE_IRQ=y
1028CONFIG_HW_RANDOM=y
1029CONFIG_HW_RANDOM_ST=y
1030CONFIG_CRYPTO_USER=m970CONFIG_CRYPTO_USER=m
1031CONFIG_CRYPTO_USER_API_HASH=m971CONFIG_CRYPTO_USER_API_HASH=m
1032CONFIG_CRYPTO_USER_API_SKCIPHER=m972CONFIG_CRYPTO_USER_API_SKCIPHER=m
@@ -1035,27 +975,19 @@ CONFIG_CRYPTO_USER_API_AEAD=m · 2 unmodified lines
1035CONFIG_CRYPTO_DEV_MARVELL_CESA=m975CONFIG_CRYPTO_DEV_MARVELL_CESA=m
1036CONFIG_CRYPTO_DEV_EXYNOS_RNG=m976CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
1037CONFIG_CRYPTO_DEV_S5P=m977CONFIG_CRYPTO_DEV_S5P=m
978CONFIG_CRYPTO_DEV_ATMEL_AES=m
979CONFIG_CRYPTO_DEV_ATMEL_TDES=m
980CONFIG_CRYPTO_DEV_ATMEL_SHA=m
1038CONFIG_CRYPTO_DEV_SUN4I_SS=m981CONFIG_CRYPTO_DEV_SUN4I_SS=m
1039CONFIG_CRYPTO_DEV_ROCKCHIP=m982CONFIG_CRYPTO_DEV_ROCKCHIP=m
1040CONFIG_ARM_CRYPTO=y983CONFIG_ARM_CRYPTO=y
1041CONFIG_CRYPTO_SHA1_ARM=m
1042CONFIG_CRYPTO_SHA1_ARM_NEON=m984CONFIG_CRYPTO_SHA1_ARM_NEON=m
1043CONFIG_CRYPTO_SHA1_ARM_CE=m985CONFIG_CRYPTO_SHA1_ARM_CE=m
1044CONFIG_CRYPTO_SHA2_ARM_CE=m986CONFIG_CRYPTO_SHA2_ARM_CE=m
1045CONFIG_CRYPTO_SHA256_ARM=m
1046CONFIG_CRYPTO_SHA512_ARM=m987CONFIG_CRYPTO_SHA512_ARM=m
1047CONFIG_CRYPTO_AES_ARM=m988CONFIG_CRYPTO_AES_ARM=m
1048CONFIG_CRYPTO_AES_ARM_BS=m989CONFIG_CRYPTO_AES_ARM_BS=m
1049CONFIG_CRYPTO_AES_ARM_CE=m990CONFIG_CRYPTO_AES_ARM_CE=m
1050CONFIG_CRYPTO_CHACHA20_NEON=m
1051CONFIG_CRYPTO_CRC32_ARM_CE=m
1052CONFIG_CRYPTO_CRCT10DIF_ARM_CE=m
1053CONFIG_CRYPTO_GHASH_ARM_CE=m991CONFIG_CRYPTO_GHASH_ARM_CE=m
1054CONFIG_CRYPTO_DEV_ATMEL_AES=m992CONFIG_CRYPTO_CRC32_ARM_CE=m
1055CONFIG_CRYPTO_DEV_ATMEL_TDES=m993CONFIG_CRYPTO_CHACHA20_NEON=m
1056CONFIG_CRYPTO_DEV_ATMEL_SHA=m
1057CONFIG_VIDEO_VIVID=m
1058CONFIG_VIRTIO=y
1059CONFIG_VIRTIO_PCI=y
1060CONFIG_VIRTIO_PCI_LEGACY=y
1061CONFIG_VIRTIO_MMIO=y
arch/arm/mach-bcm/Kconfig+1−0
@@ -20,6 +20,7 @@ config ARCH_BCM_IPROC · 19 unmodified lines
20 select GPIOLIB20 select GPIOLIB
21 select ARM_AMBA21 select ARM_AMBA
22 select PINCTRL22 select PINCTRL
23 select PCI_DOMAINS if PCI
23 help24 help
24 This enables support for systems based on Broadcom IPROC architected SoCs.25 This enables support for systems based on Broadcom IPROC architected SoCs.
25 The IPROC complex contains one or more ARM CPUs along with common26 The IPROC complex contains one or more ARM CPUs along with common
arch/arm/mach-davinci/board-da850-evm.c+1−1
@@ -774,7 +774,7 @@ static struct gpiod_lookup_table mmc_gpios_table = { · 773 unmodified lines
774 GPIO_LOOKUP("davinci_gpio.0", DA850_MMCSD_CD_PIN, "cd",774 GPIO_LOOKUP("davinci_gpio.0", DA850_MMCSD_CD_PIN, "cd",
775 GPIO_ACTIVE_LOW),775 GPIO_ACTIVE_LOW),
776 GPIO_LOOKUP("davinci_gpio.0", DA850_MMCSD_WP_PIN, "wp",776 GPIO_LOOKUP("davinci_gpio.0", DA850_MMCSD_WP_PIN, "wp",
777 GPIO_ACTIVE_LOW),777 GPIO_ACTIVE_HIGH),
778 },778 },
779};779};
780 780
arch/arm/mach-socfpga/Kconfig+1−0
@@ -10,6 +10,7 @@ menuconfig ARCH_SOCFPGA · 9 unmodified lines
10 select HAVE_ARM_SCU10 select HAVE_ARM_SCU
11 select HAVE_ARM_TWD if SMP11 select HAVE_ARM_TWD if SMP
12 select MFD_SYSCON12 select MFD_SYSCON
13 select PCI_DOMAINS if PCI
13 14
14if ARCH_SOCFPGA15if ARCH_SOCFPGA
15config SOCFPGA_SUSPEND16config SOCFPGA_SUSPEND
arch/arm/net/bpf_jit_32.c+1−1
@@ -1844,7 +1844,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog) · 1843 unmodified lines
1844 /* there are 2 passes here */1844 /* there are 2 passes here */
1845 bpf_jit_dump(prog->len, image_size, 2, ctx.target);1845 bpf_jit_dump(prog->len, image_size, 2, ctx.target);
1846 1846
1847 set_memory_ro((unsigned long)header, header->pages);1847 bpf_jit_binary_lock_ro(header);
1848 prog->bpf_func = (void *)ctx.target;1848 prog->bpf_func = (void *)ctx.target;
1849 prog->jited = 1;1849 prog->jited = 1;
1850 prog->jited_len = image_size;1850 prog->jited_len = image_size;
arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi+2−4
@@ -309,8 +309,7 @@ · 308 unmodified lines
309 interrupts = <0 99 4>;309 interrupts = <0 99 4>;
310 resets = <&rst SPIM0_RESET>;310 resets = <&rst SPIM0_RESET>;
311 reg-io-width = <4>;311 reg-io-width = <4>;
312 num-chipselect = <4>;312 num-cs = <4>;
313 bus-num = <0>;
314 status = "disabled";313 status = "disabled";
315 };314 };
316 315
@@ -322,8 +321,7 @@ · 5 unmodified lines
322 interrupts = <0 100 4>;321 interrupts = <0 100 4>;
323 resets = <&rst SPIM1_RESET>;322 resets = <&rst SPIM1_RESET>;
324 reg-io-width = <4>;323 reg-io-width = <4>;
325 num-chipselect = <4>;324 num-cs = <4>;
326 bus-num = <0>;
327 status = "disabled";325 status = "disabled";
328 };326 };
329 327
arch/arm64/boot/dts/amlogic/meson-axg-s400.dts+14−1
@@ -66,9 +66,22 @@ · 65 unmodified lines
66 66
67&ethmac {67&ethmac {
68 status = "okay";68 status = "okay";
69 phy-mode = "rgmii";
70 pinctrl-0 = <&eth_rgmii_y_pins>;69 pinctrl-0 = <&eth_rgmii_y_pins>;
71 pinctrl-names = "default";70 pinctrl-names = "default";
71 phy-handle = <&eth_phy0>;
72 phy-mode = "rgmii";
73
74 mdio {
75 compatible = "snps,dwmac-mdio";
76 #address-cells = <1>;
77 #size-cells = <0>;
78
79 eth_phy0: ethernet-phy@0 {
80 /* Realtek RTL8211F (0x001cc916) */
81 reg = <0>;
82 eee-broken-1000t;
83 };
84 };
72};85};
73 86
74&uart_A {87&uart_A {
arch/arm64/boot/dts/amlogic/meson-axg.dtsi+2−2
@@ -132,7 +132,7 @@ · 131 unmodified lines
132 132
133 sd_emmc_b: sd@5000 {133 sd_emmc_b: sd@5000 {
134 compatible = "amlogic,meson-axg-mmc";134 compatible = "amlogic,meson-axg-mmc";
135 reg = <0x0 0x5000 0x0 0x2000>;135 reg = <0x0 0x5000 0x0 0x800>;
136 interrupts = <GIC_SPI 217 IRQ_TYPE_EDGE_RISING>;136 interrupts = <GIC_SPI 217 IRQ_TYPE_EDGE_RISING>;
137 status = "disabled";137 status = "disabled";
138 clocks = <&clkc CLKID_SD_EMMC_B>,138 clocks = <&clkc CLKID_SD_EMMC_B>,
@@ -144,7 +144,7 @@ · 5 unmodified lines
144 144
145 sd_emmc_c: mmc@7000 {145 sd_emmc_c: mmc@7000 {
146 compatible = "amlogic,meson-axg-mmc";146 compatible = "amlogic,meson-axg-mmc";
147 reg = <0x0 0x7000 0x0 0x2000>;147 reg = <0x0 0x7000 0x0 0x800>;
148 interrupts = <GIC_SPI 218 IRQ_TYPE_EDGE_RISING>;148 interrupts = <GIC_SPI 218 IRQ_TYPE_EDGE_RISING>;
149 status = "disabled";149 status = "disabled";
150 clocks = <&clkc CLKID_SD_EMMC_C>,150 clocks = <&clkc CLKID_SD_EMMC_C>,
arch/arm64/boot/dts/amlogic/meson-gx.dtsi+9−3
@@ -35,6 +35,12 @@ · 34 unmodified lines
35 no-map;35 no-map;
36 };36 };
37 37
38 /* Alternate 3 MiB reserved for ARM Trusted Firmware (BL31) */
39 secmon_reserved_alt: secmon@5000000 {
40 reg = <0x0 0x05000000 0x0 0x300000>;
41 no-map;
42 };
43
38 linux,cma {44 linux,cma {
39 compatible = "shared-dma-pool";45 compatible = "shared-dma-pool";
40 reusable;46 reusable;
@@ -457,21 +463,21 @@ · 416 unmodified lines
457 463
458 sd_emmc_a: mmc@70000 {464 sd_emmc_a: mmc@70000 {
459 compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";465 compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";
460 reg = <0x0 0x70000 0x0 0x2000>;466 reg = <0x0 0x70000 0x0 0x800>;
461 interrupts = <GIC_SPI 216 IRQ_TYPE_EDGE_RISING>;467 interrupts = <GIC_SPI 216 IRQ_TYPE_EDGE_RISING>;
462 status = "disabled";468 status = "disabled";
463 };469 };
464 470
465 sd_emmc_b: mmc@72000 {471 sd_emmc_b: mmc@72000 {
466 compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";472 compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";
467 reg = <0x0 0x72000 0x0 0x2000>;473 reg = <0x0 0x72000 0x0 0x800>;
468 interrupts = <GIC_SPI 217 IRQ_TYPE_EDGE_RISING>;474 interrupts = <GIC_SPI 217 IRQ_TYPE_EDGE_RISING>;
469 status = "disabled";475 status = "disabled";
470 };476 };
471 477
472 sd_emmc_c: mmc@74000 {478 sd_emmc_c: mmc@74000 {
473 compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";479 compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";
474 reg = <0x0 0x74000 0x0 0x2000>;480 reg = <0x0 0x74000 0x0 0x800>;
475 interrupts = <GIC_SPI 218 IRQ_TYPE_EDGE_RISING>;481 interrupts = <GIC_SPI 218 IRQ_TYPE_EDGE_RISING>;
476 status = "disabled";482 status = "disabled";
477 };483 };
arch/arm64/boot/dts/amlogic/meson-gxl-mali.dtsi+1−1
@@ -6,7 +6,7 @@ · 5 unmodified lines
6 6
7&apb {7&apb {
8 mali: gpu@c0000 {8 mali: gpu@c0000 {
9 compatible = "amlogic,meson-gxbb-mali", "arm,mali-450";9 compatible = "amlogic,meson-gxl-mali", "arm,mali-450";
10 reg = <0x0 0xc0000 0x0 0x40000>;10 reg = <0x0 0xc0000 0x0 0x40000>;
11 interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,11 interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
12 <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>,12 <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>,
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts+0−3
@@ -234,9 +234,6 @@ · 233 unmodified lines
234 234
235 bus-width = <4>;235 bus-width = <4>;
236 cap-sd-highspeed;236 cap-sd-highspeed;
237 sd-uhs-sdr12;
238 sd-uhs-sdr25;
239 sd-uhs-sdr50;
240 max-frequency = <100000000>;237 max-frequency = <100000000>;
241 disable-wp;238 disable-wp;
242 239
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi+7−0
@@ -189,3 +189,10 @@ · 188 unmodified lines
189&usb0 {189&usb0 {
190 status = "okay";190 status = "okay";
191};191};
192
193&usb2_phy0 {
194 /*
195 * HDMI_5V is also used as supply for the USB VBUS.
196 */
197 phy-supply = <&hdmi_5v>;
198};
arch/arm64/boot/dts/amlogic/meson-gxl.dtsi+0−8
@@ -13,14 +13,6 @@ · 12 unmodified lines
13/ {13/ {
14 compatible = "amlogic,meson-gxl";14 compatible = "amlogic,meson-gxl";
15 15
16 reserved-memory {
17 /* Alternate 3 MiB reserved for ARM Trusted Firmware (BL31) */
18 secmon_reserved_alt: secmon@5000000 {
19 reg = <0x0 0x05000000 0x0 0x300000>;
20 no-map;
21 };
22 };
23
24 soc {16 soc {
25 usb0: usb@c9000000 {17 usb0: usb@c9000000 {
26 status = "disabled";18 status = "disabled";
arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi+4−4
@@ -118,7 +118,7 @@ · 117 unmodified lines
118 118
119 #interrupt-cells = <1>;119 #interrupt-cells = <1>;
120 interrupt-map-mask = <0 0 0 0>;120 interrupt-map-mask = <0 0 0 0>;
121 interrupt-map = <0 0 0 0 &gic 0 GIC_SPI 281 IRQ_TYPE_NONE>;121 interrupt-map = <0 0 0 0 &gic 0 GIC_SPI 281 IRQ_TYPE_LEVEL_HIGH>;
122 122
123 linux,pci-domain = <0>;123 linux,pci-domain = <0>;
124 124
@@ -149,7 +149,7 @@ · 24 unmodified lines
149 149
150 #interrupt-cells = <1>;150 #interrupt-cells = <1>;
151 interrupt-map-mask = <0 0 0 0>;151 interrupt-map-mask = <0 0 0 0>;
152 interrupt-map = <0 0 0 0 &gic 0 GIC_SPI 305 IRQ_TYPE_NONE>;152 interrupt-map = <0 0 0 0 &gic 0 GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH>;
153 153
154 linux,pci-domain = <4>;154 linux,pci-domain = <4>;
155 155
@@ -566,7 +566,7 @@ · 410 unmodified lines
566 reg = <0x66080000 0x100>;566 reg = <0x66080000 0x100>;
567 #address-cells = <1>;567 #address-cells = <1>;
568 #size-cells = <0>;568 #size-cells = <0>;
569 interrupts = <GIC_SPI 394 IRQ_TYPE_NONE>;569 interrupts = <GIC_SPI 394 IRQ_TYPE_LEVEL_HIGH>;
570 clock-frequency = <100000>;570 clock-frequency = <100000>;
571 status = "disabled";571 status = "disabled";
572 };572 };
@@ -594,7 +594,7 @@ · 21 unmodified lines
594 reg = <0x660b0000 0x100>;594 reg = <0x660b0000 0x100>;
595 #address-cells = <1>;595 #address-cells = <1>;
596 #size-cells = <0>;596 #size-cells = <0>;
597 interrupts = <GIC_SPI 395 IRQ_TYPE_NONE>;597 interrupts = <GIC_SPI 395 IRQ_TYPE_LEVEL_HIGH>;
598 clock-frequency = <100000>;598 clock-frequency = <100000>;
599 status = "disabled";599 status = "disabled";
600 };600 };
arch/arm64/boot/dts/broadcom/stingray/bcm958742k.dts+4−0
@@ -43,6 +43,10 @@ · 42 unmodified lines
43 enet-phy-lane-swap;43 enet-phy-lane-swap;
44};44};
45 45
46&sdio0 {
47 mmc-ddr-1_8v;
48};
49
46&uart2 {50&uart2 {
47 status = "okay";51 status = "okay";
48};52};
arch/arm64/boot/dts/broadcom/stingray/bcm958742t.dts+4−0
@@ -42,3 +42,7 @@ · 41 unmodified lines
42&gphy0 {42&gphy0 {
43 enet-phy-lane-swap;43 enet-phy-lane-swap;
44};44};
45
46&sdio0 {
47 mmc-ddr-1_8v;
48};
arch/arm64/boot/dts/broadcom/stingray/stingray.dtsi+2−2
@@ -409,7 +409,7 @@ · 408 unmodified lines
409 reg = <0x000b0000 0x100>;409 reg = <0x000b0000 0x100>;
410 #address-cells = <1>;410 #address-cells = <1>;
411 #size-cells = <0>;411 #size-cells = <0>;
412 interrupts = <GIC_SPI 177 IRQ_TYPE_NONE>;412 interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>;
413 clock-frequency = <100000>;413 clock-frequency = <100000>;
414 status = "disabled";414 status = "disabled";
415 };415 };
@@ -453,7 +453,7 @@ · 37 unmodified lines
453 reg = <0x000e0000 0x100>;453 reg = <0x000e0000 0x100>;
454 #address-cells = <1>;454 #address-cells = <1>;
455 #size-cells = <0>;455 #size-cells = <0>;
456 interrupts = <GIC_SPI 178 IRQ_TYPE_NONE>;456 interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>;
457 clock-frequency = <100000>;457 clock-frequency = <100000>;
458 status = "disabled";458 status = "disabled";
459 };459 };
arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts+2−0
@@ -585,6 +585,8 @@ · 584 unmodified lines
585 vmmc-supply = <&wlan_en>;585 vmmc-supply = <&wlan_en>;
586 ti,non-removable;586 ti,non-removable;
587 non-removable;587 non-removable;
588 cap-power-off-card;
589 keep-power-in-suspend;
588 #address-cells = <0x1>;590 #address-cells = <0x1>;
589 #size-cells = <0x0>;591 #size-cells = <0x0>;
590 status = "ok";592 status = "ok";
arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts+2−0
@@ -322,6 +322,8 @@ · 321 unmodified lines
322 dwmmc_2: dwmmc2@f723f000 {322 dwmmc_2: dwmmc2@f723f000 {
323 bus-width = <0x4>;323 bus-width = <0x4>;
324 non-removable;324 non-removable;
325 cap-power-off-card;
326 keep-power-in-suspend;
325 vmmc-supply = <&reg_vdd_3v3>;327 vmmc-supply = <&reg_vdd_3v3>;
326 mmc-pwrseq = <&wl1835_pwrseq>;328 mmc-pwrseq = <&wl1835_pwrseq>;
327 329
arch/arm64/boot/dts/marvell/armada-cp110.dtsi+1−1
@@ -149,7 +149,7 @@ · 148 unmodified lines
149 149
150 CP110_LABEL(icu): interrupt-controller@1e0000 {150 CP110_LABEL(icu): interrupt-controller@1e0000 {
151 compatible = "marvell,cp110-icu";151 compatible = "marvell,cp110-icu";
152 reg = <0x1e0000 0x10>;152 reg = <0x1e0000 0x440>;
153 #interrupt-cells = <3>;153 #interrupt-cells = <3>;
154 interrupt-controller;154 interrupt-controller;
155 msi-parent = <&gicp>;155 msi-parent = <&gicp>;
arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi+1−1
@@ -75,7 +75,7 @@ · 74 unmodified lines
75 75
76 serial@75b1000 {76 serial@75b1000 {
77 label = "LS-UART0";77 label = "LS-UART0";
78 status = "okay";78 status = "disabled";
79 pinctrl-names = "default", "sleep";79 pinctrl-names = "default", "sleep";
80 pinctrl-0 = <&blsp2_uart2_4pins_default>;80 pinctrl-0 = <&blsp2_uart2_4pins_default>;
81 pinctrl-1 = <&blsp2_uart2_4pins_sleep>;81 pinctrl-1 = <&blsp2_uart2_4pins_sleep>;
arch/arm64/boot/dts/qcom/msm8916.dtsi+2−2
@@ -1191,14 +1191,14 @@ · 1190 unmodified lines
1191 1191
1192 port@0 {1192 port@0 {
1193 reg = <0>;1193 reg = <0>;
1194 etf_out: endpoint {1194 etf_in: endpoint {
1195 slave-mode;1195 slave-mode;
1196 remote-endpoint = <&funnel0_out>;1196 remote-endpoint = <&funnel0_out>;
1197 };1197 };
1198 };1198 };
1199 port@1 {1199 port@1 {
1200 reg = <0>;1200 reg = <0>;
1201 etf_in: endpoint {1201 etf_out: endpoint {
1202 remote-endpoint = <&replicator_in>;1202 remote-endpoint = <&replicator_in>;
1203 };1203 };
1204 };1204 };
arch/arm64/boot/dts/socionext/uniphier-ld11-global.dts+1−1
@@ -54,7 +54,7 @@ · 53 unmodified lines
54 sound {54 sound {
55 compatible = "audio-graph-card";55 compatible = "audio-graph-card";
56 label = "UniPhier LD11";56 label = "UniPhier LD11";
57 widgets = "Headphone", "Headphone Jack";57 widgets = "Headphone", "Headphones";
58 dais = <&i2s_port258 dais = <&i2s_port2
59 &i2s_port359 &i2s_port3
60 &i2s_port460 &i2s_port4
arch/arm64/boot/dts/socionext/uniphier-ld20-global.dts+1−1
@@ -54,7 +54,7 @@ · 53 unmodified lines
54 sound {54 sound {
55 compatible = "audio-graph-card";55 compatible = "audio-graph-card";
56 label = "UniPhier LD20";56 label = "UniPhier LD20";
57 widgets = "Headphone", "Headphone Jack";57 widgets = "Headphone", "Headphones";
58 dais = <&i2s_port258 dais = <&i2s_port2
59 &i2s_port359 &i2s_port3
60 &i2s_port460 &i2s_port4
arch/arm64/configs/defconfig+39−63
@@ -47,6 +47,7 @@ CONFIG_ARCH_MVEBU=y · 46 unmodified lines
47CONFIG_ARCH_QCOM=y47CONFIG_ARCH_QCOM=y
48CONFIG_ARCH_ROCKCHIP=y48CONFIG_ARCH_ROCKCHIP=y
49CONFIG_ARCH_SEATTLE=y49CONFIG_ARCH_SEATTLE=y
50CONFIG_ARCH_SYNQUACER=y
50CONFIG_ARCH_RENESAS=y51CONFIG_ARCH_RENESAS=y
51CONFIG_ARCH_R8A7795=y52CONFIG_ARCH_R8A7795=y
52CONFIG_ARCH_R8A7796=y53CONFIG_ARCH_R8A7796=y
@@ -58,7 +59,6 @@ CONFIG_ARCH_R8A77995=y · 5 unmodified lines
58CONFIG_ARCH_STRATIX10=y59CONFIG_ARCH_STRATIX10=y
59CONFIG_ARCH_TEGRA=y60CONFIG_ARCH_TEGRA=y
60CONFIG_ARCH_SPRD=y61CONFIG_ARCH_SPRD=y
61CONFIG_ARCH_SYNQUACER=y
62CONFIG_ARCH_THUNDER=y62CONFIG_ARCH_THUNDER=y
63CONFIG_ARCH_THUNDER2=y63CONFIG_ARCH_THUNDER2=y
64CONFIG_ARCH_UNIPHIER=y64CONFIG_ARCH_UNIPHIER=y
@@ -67,25 +67,23 @@ CONFIG_ARCH_XGENE=y · 2 unmodified lines
67CONFIG_ARCH_ZX=y67CONFIG_ARCH_ZX=y
68CONFIG_ARCH_ZYNQMP=y68CONFIG_ARCH_ZYNQMP=y
69CONFIG_PCI=y69CONFIG_PCI=y
70CONFIG_HOTPLUG_PCI_PCIE=y
71CONFIG_PCI_IOV=y70CONFIG_PCI_IOV=y
72CONFIG_HOTPLUG_PCI=y71CONFIG_HOTPLUG_PCI=y
73CONFIG_HOTPLUG_PCI_ACPI=y72CONFIG_HOTPLUG_PCI_ACPI=y
74CONFIG_PCI_LAYERSCAPE=y
75CONFIG_PCI_HISI=y
76CONFIG_PCIE_QCOM=y
77CONFIG_PCIE_KIRIN=y
78CONFIG_PCIE_ARMADA_8K=y
79CONFIG_PCIE_HISI_STB=y
80CONFIG_PCI_AARDVARK=y73CONFIG_PCI_AARDVARK=y
81CONFIG_PCI_TEGRA=y74CONFIG_PCI_TEGRA=y
82CONFIG_PCIE_RCAR=y75CONFIG_PCIE_RCAR=y
83CONFIG_PCIE_ROCKCHIP=y
84CONFIG_PCIE_ROCKCHIP_HOST=m
85CONFIG_PCI_HOST_GENERIC=y76CONFIG_PCI_HOST_GENERIC=y
86CONFIG_PCI_XGENE=y77CONFIG_PCI_XGENE=y
87CONFIG_PCI_HOST_THUNDER_PEM=y78CONFIG_PCI_HOST_THUNDER_PEM=y
88CONFIG_PCI_HOST_THUNDER_ECAM=y79CONFIG_PCI_HOST_THUNDER_ECAM=y
80CONFIG_PCIE_ROCKCHIP_HOST=m
81CONFIG_PCI_LAYERSCAPE=y
82CONFIG_PCI_HISI=y
83CONFIG_PCIE_QCOM=y
84CONFIG_PCIE_ARMADA_8K=y
85CONFIG_PCIE_KIRIN=y
86CONFIG_PCIE_HISI_STB=y
89CONFIG_ARM64_VA_BITS_48=y87CONFIG_ARM64_VA_BITS_48=y
90CONFIG_SCHED_MC=y88CONFIG_SCHED_MC=y
91CONFIG_NUMA=y89CONFIG_NUMA=y
@@ -104,8 +102,6 @@ CONFIG_HIBERNATION=y · 12 unmodified lines
104CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y102CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
105CONFIG_ARM_CPUIDLE=y103CONFIG_ARM_CPUIDLE=y
106CONFIG_CPU_FREQ=y104CONFIG_CPU_FREQ=y
107CONFIG_CPU_FREQ_GOV_ATTR_SET=y
108CONFIG_CPU_FREQ_GOV_COMMON=y
109CONFIG_CPU_FREQ_STAT=y105CONFIG_CPU_FREQ_STAT=y
110CONFIG_CPU_FREQ_GOV_POWERSAVE=m106CONFIG_CPU_FREQ_GOV_POWERSAVE=m
111CONFIG_CPU_FREQ_GOV_USERSPACE=y107CONFIG_CPU_FREQ_GOV_USERSPACE=y
@@ -113,11 +109,11 @@ CONFIG_CPU_FREQ_GOV_ONDEMAND=y · 1 unmodified line
113CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m109CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
114CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y110CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
115CONFIG_CPUFREQ_DT=y111CONFIG_CPUFREQ_DT=y
112CONFIG_ACPI_CPPC_CPUFREQ=m
116CONFIG_ARM_ARMADA_37XX_CPUFREQ=y113CONFIG_ARM_ARMADA_37XX_CPUFREQ=y
117CONFIG_ARM_BIG_LITTLE_CPUFREQ=y114CONFIG_ARM_BIG_LITTLE_CPUFREQ=y
118CONFIG_ARM_SCPI_CPUFREQ=y115CONFIG_ARM_SCPI_CPUFREQ=y
119CONFIG_ARM_TEGRA186_CPUFREQ=y116CONFIG_ARM_TEGRA186_CPUFREQ=y
120CONFIG_ACPI_CPPC_CPUFREQ=m
121CONFIG_NET=y117CONFIG_NET=y
122CONFIG_PACKET=y118CONFIG_PACKET=y
123CONFIG_UNIX=y119CONFIG_UNIX=y
@@ -236,11 +232,6 @@ CONFIG_SMSC911X=y · 112 unmodified lines
236CONFIG_SNI_AVE=y232CONFIG_SNI_AVE=y
237CONFIG_SNI_NETSEC=y233CONFIG_SNI_NETSEC=y
238CONFIG_STMMAC_ETH=m234CONFIG_STMMAC_ETH=m
239CONFIG_DWMAC_IPQ806X=m
240CONFIG_DWMAC_MESON=m
241CONFIG_DWMAC_ROCKCHIP=m
242CONFIG_DWMAC_SUNXI=m
243CONFIG_DWMAC_SUN8I=m
244CONFIG_MDIO_BUS_MUX_MMIOREG=y235CONFIG_MDIO_BUS_MUX_MMIOREG=y
245CONFIG_AT803X_PHY=m236CONFIG_AT803X_PHY=m
246CONFIG_MARVELL_PHY=m237CONFIG_MARVELL_PHY=m
@@ -269,8 +260,8 @@ CONFIG_WL18XX=m · 22 unmodified lines
269CONFIG_WLCORE_SDIO=m260CONFIG_WLCORE_SDIO=m
270CONFIG_INPUT_EVDEV=y261CONFIG_INPUT_EVDEV=y
271CONFIG_KEYBOARD_ADC=m262CONFIG_KEYBOARD_ADC=m
272CONFIG_KEYBOARD_CROS_EC=y
273CONFIG_KEYBOARD_GPIO=y263CONFIG_KEYBOARD_GPIO=y
264CONFIG_KEYBOARD_CROS_EC=y
274CONFIG_INPUT_TOUCHSCREEN=y265CONFIG_INPUT_TOUCHSCREEN=y
275CONFIG_TOUCHSCREEN_ATMEL_MXT=m266CONFIG_TOUCHSCREEN_ATMEL_MXT=m
276CONFIG_INPUT_MISC=y267CONFIG_INPUT_MISC=y
@@ -296,17 +287,13 @@ CONFIG_SERIAL_SAMSUNG=y · 19 unmodified lines
296CONFIG_SERIAL_SAMSUNG_CONSOLE=y287CONFIG_SERIAL_SAMSUNG_CONSOLE=y
297CONFIG_SERIAL_TEGRA=y288CONFIG_SERIAL_TEGRA=y
298CONFIG_SERIAL_SH_SCI=y289CONFIG_SERIAL_SH_SCI=y
299CONFIG_SERIAL_SH_SCI_NR_UARTS=11
300CONFIG_SERIAL_SH_SCI_CONSOLE=y
301CONFIG_SERIAL_MSM=y290CONFIG_SERIAL_MSM=y
302CONFIG_SERIAL_MSM_CONSOLE=y291CONFIG_SERIAL_MSM_CONSOLE=y
303CONFIG_SERIAL_XILINX_PS_UART=y292CONFIG_SERIAL_XILINX_PS_UART=y
304CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y293CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
305CONFIG_SERIAL_MVEBU_UART=y294CONFIG_SERIAL_MVEBU_UART=y
306CONFIG_SERIAL_DEV_BUS=y295CONFIG_SERIAL_DEV_BUS=y
307CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
308CONFIG_VIRTIO_CONSOLE=y296CONFIG_VIRTIO_CONSOLE=y
309CONFIG_I2C_HID=m
310CONFIG_I2C_CHARDEV=y297CONFIG_I2C_CHARDEV=y
311CONFIG_I2C_MUX=y298CONFIG_I2C_MUX=y
312CONFIG_I2C_MUX_PCA954x=y299CONFIG_I2C_MUX_PCA954x=y
@@ -325,26 +312,26 @@ CONFIG_I2C_RCAR=y · 12 unmodified lines
325CONFIG_I2C_CROS_EC_TUNNEL=y312CONFIG_I2C_CROS_EC_TUNNEL=y
326CONFIG_SPI=y313CONFIG_SPI=y
327CONFIG_SPI_ARMADA_3700=y314CONFIG_SPI_ARMADA_3700=y
328CONFIG_SPI_MESON_SPICC=m
329CONFIG_SPI_MESON_SPIFC=m
330CONFIG_SPI_BCM2835=m315CONFIG_SPI_BCM2835=m
331CONFIG_SPI_BCM2835AUX=m316CONFIG_SPI_BCM2835AUX=m
317CONFIG_SPI_MESON_SPICC=m
318CONFIG_SPI_MESON_SPIFC=m
332CONFIG_SPI_ORION=y319CONFIG_SPI_ORION=y
333CONFIG_SPI_PL022=y320CONFIG_SPI_PL022=y
334CONFIG_SPI_QUP=y
335CONFIG_SPI_ROCKCHIP=y321CONFIG_SPI_ROCKCHIP=y
322CONFIG_SPI_QUP=y
336CONFIG_SPI_S3C64XX=y323CONFIG_SPI_S3C64XX=y
337CONFIG_SPI_SPIDEV=m324CONFIG_SPI_SPIDEV=m
338CONFIG_SPMI=y325CONFIG_SPMI=y
339CONFIG_PINCTRL_IPQ8074=y
340CONFIG_PINCTRL_SINGLE=y326CONFIG_PINCTRL_SINGLE=y
341CONFIG_PINCTRL_MAX77620=y327CONFIG_PINCTRL_MAX77620=y
328CONFIG_PINCTRL_IPQ8074=y
342CONFIG_PINCTRL_MSM8916=y329CONFIG_PINCTRL_MSM8916=y
343CONFIG_PINCTRL_MSM8994=y330CONFIG_PINCTRL_MSM8994=y
344CONFIG_PINCTRL_MSM8996=y331CONFIG_PINCTRL_MSM8996=y
345CONFIG_PINCTRL_MT7622=y
346CONFIG_PINCTRL_QDF2XXX=y332CONFIG_PINCTRL_QDF2XXX=y
347CONFIG_PINCTRL_QCOM_SPMI_PMIC=y333CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
334CONFIG_PINCTRL_MT7622=y
348CONFIG_GPIO_DWAPB=y335CONFIG_GPIO_DWAPB=y
349CONFIG_GPIO_MB86S7X=y336CONFIG_GPIO_MB86S7X=y
350CONFIG_GPIO_PL061=y337CONFIG_GPIO_PL061=y
@@ -368,13 +355,13 @@ CONFIG_SENSORS_INA2XX=m · 17 unmodified lines
368CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y355CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
369CONFIG_CPU_THERMAL=y356CONFIG_CPU_THERMAL=y
370CONFIG_THERMAL_EMULATION=y357CONFIG_THERMAL_EMULATION=y
358CONFIG_ROCKCHIP_THERMAL=m
359CONFIG_RCAR_GEN3_THERMAL=y
371CONFIG_ARMADA_THERMAL=y360CONFIG_ARMADA_THERMAL=y
372CONFIG_BRCMSTB_THERMAL=m361CONFIG_BRCMSTB_THERMAL=m
373CONFIG_EXYNOS_THERMAL=y362CONFIG_EXYNOS_THERMAL=y
374CONFIG_RCAR_GEN3_THERMAL=y
375CONFIG_QCOM_TSENS=y
376CONFIG_ROCKCHIP_THERMAL=m
377CONFIG_TEGRA_BPMP_THERMAL=m363CONFIG_TEGRA_BPMP_THERMAL=m
364CONFIG_QCOM_TSENS=y
378CONFIG_UNIPHIER_THERMAL=y365CONFIG_UNIPHIER_THERMAL=y
379CONFIG_WATCHDOG=y366CONFIG_WATCHDOG=y
380CONFIG_S3C2410_WATCHDOG=y367CONFIG_S3C2410_WATCHDOG=y
@@ -395,9 +382,9 @@ CONFIG_MFD_MAX77620=y · 14 unmodified lines
395CONFIG_MFD_SPMI_PMIC=y382CONFIG_MFD_SPMI_PMIC=y
396CONFIG_MFD_RK808=y383CONFIG_MFD_RK808=y
397CONFIG_MFD_SEC_CORE=y384CONFIG_MFD_SEC_CORE=y
385CONFIG_REGULATOR_FIXED_VOLTAGE=y
398CONFIG_REGULATOR_AXP20X=y386CONFIG_REGULATOR_AXP20X=y
399CONFIG_REGULATOR_FAN53555=y387CONFIG_REGULATOR_FAN53555=y
400CONFIG_REGULATOR_FIXED_VOLTAGE=y
401CONFIG_REGULATOR_GPIO=y388CONFIG_REGULATOR_GPIO=y
402CONFIG_REGULATOR_HI6421V530=y389CONFIG_REGULATOR_HI6421V530=y
403CONFIG_REGULATOR_HI655X=y390CONFIG_REGULATOR_HI655X=y
@@ -407,16 +394,15 @@ CONFIG_REGULATOR_QCOM_SMD_RPM=y · 3 unmodified lines
407CONFIG_REGULATOR_QCOM_SPMI=y394CONFIG_REGULATOR_QCOM_SPMI=y
408CONFIG_REGULATOR_RK808=y395CONFIG_REGULATOR_RK808=y
409CONFIG_REGULATOR_S2MPS11=y396CONFIG_REGULATOR_S2MPS11=y
397CONFIG_RC_CORE=m
398CONFIG_RC_DECODERS=y
399CONFIG_RC_DEVICES=y
400CONFIG_IR_MESON=m
410CONFIG_MEDIA_SUPPORT=m401CONFIG_MEDIA_SUPPORT=m
411CONFIG_MEDIA_CAMERA_SUPPORT=y402CONFIG_MEDIA_CAMERA_SUPPORT=y
412CONFIG_MEDIA_ANALOG_TV_SUPPORT=y403CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
413CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y404CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
414CONFIG_MEDIA_CONTROLLER=y405CONFIG_MEDIA_CONTROLLER=y
415CONFIG_MEDIA_RC_SUPPORT=y
416CONFIG_RC_CORE=m
417CONFIG_RC_DEVICES=y
418CONFIG_RC_DECODERS=y
419CONFIG_IR_MESON=m
420CONFIG_VIDEO_V4L2_SUBDEV_API=y406CONFIG_VIDEO_V4L2_SUBDEV_API=y
421# CONFIG_DVB_NET is not set407# CONFIG_DVB_NET is not set
422CONFIG_V4L_MEM2MEM_DRIVERS=y408CONFIG_V4L_MEM2MEM_DRIVERS=y
@@ -441,8 +427,7 @@ CONFIG_ROCKCHIP_DW_HDMI=y · 18 unmodified lines
441CONFIG_ROCKCHIP_DW_MIPI_DSI=y427CONFIG_ROCKCHIP_DW_MIPI_DSI=y
442CONFIG_ROCKCHIP_INNO_HDMI=y428CONFIG_ROCKCHIP_INNO_HDMI=y
443CONFIG_DRM_RCAR_DU=m429CONFIG_DRM_RCAR_DU=m
444CONFIG_DRM_RCAR_LVDS=y430CONFIG_DRM_RCAR_LVDS=m
445CONFIG_DRM_RCAR_VSP=y
446CONFIG_DRM_TEGRA=m431CONFIG_DRM_TEGRA=m
447CONFIG_DRM_PANEL_SIMPLE=m432CONFIG_DRM_PANEL_SIMPLE=m
448CONFIG_DRM_I2C_ADV7511=m433CONFIG_DRM_I2C_ADV7511=m
@@ -455,7 +440,6 @@ CONFIG_FB_ARMCLCD=y · 6 unmodified lines
455CONFIG_BACKLIGHT_GENERIC=m440CONFIG_BACKLIGHT_GENERIC=m
456CONFIG_BACKLIGHT_PWM=m441CONFIG_BACKLIGHT_PWM=m
457CONFIG_BACKLIGHT_LP855X=m442CONFIG_BACKLIGHT_LP855X=m
458CONFIG_FRAMEBUFFER_CONSOLE=y
459CONFIG_LOGO=y443CONFIG_LOGO=y
460# CONFIG_LOGO_LINUX_MONO is not set444# CONFIG_LOGO_LINUX_MONO is not set
461# CONFIG_LOGO_LINUX_VGA16 is not set445# CONFIG_LOGO_LINUX_VGA16 is not set
@@ -468,6 +452,7 @@ CONFIG_SND_SOC_RCAR=m · 6 unmodified lines
468CONFIG_SND_SOC_AK4613=m452CONFIG_SND_SOC_AK4613=m
469CONFIG_SND_SIMPLE_CARD=m453CONFIG_SND_SIMPLE_CARD=m
470CONFIG_SND_AUDIO_GRAPH_CARD=m454CONFIG_SND_AUDIO_GRAPH_CARD=m
455CONFIG_I2C_HID=m
471CONFIG_USB=y456CONFIG_USB=y
472CONFIG_USB_OTG=y457CONFIG_USB_OTG=y
473CONFIG_USB_XHCI_HCD=y458CONFIG_USB_XHCI_HCD=y
@@ -501,12 +486,12 @@ CONFIG_MMC_BLOCK_MINORS=32 · 27 unmodified lines
501CONFIG_MMC_ARMMMCI=y486CONFIG_MMC_ARMMMCI=y
502CONFIG_MMC_SDHCI=y487CONFIG_MMC_SDHCI=y
503CONFIG_MMC_SDHCI_ACPI=y488CONFIG_MMC_SDHCI_ACPI=y
504CONFIG_MMC_SDHCI_F_SDH30=y
505CONFIG_MMC_SDHCI_PLTFM=y489CONFIG_MMC_SDHCI_PLTFM=y
506CONFIG_MMC_SDHCI_OF_ARASAN=y490CONFIG_MMC_SDHCI_OF_ARASAN=y
507CONFIG_MMC_SDHCI_OF_ESDHC=y491CONFIG_MMC_SDHCI_OF_ESDHC=y
508CONFIG_MMC_SDHCI_CADENCE=y492CONFIG_MMC_SDHCI_CADENCE=y
509CONFIG_MMC_SDHCI_TEGRA=y493CONFIG_MMC_SDHCI_TEGRA=y
494CONFIG_MMC_SDHCI_F_SDH30=y
510CONFIG_MMC_MESON_GX=y495CONFIG_MMC_MESON_GX=y
511CONFIG_MMC_SDHCI_MSM=y496CONFIG_MMC_SDHCI_MSM=y
512CONFIG_MMC_SPI=y497CONFIG_MMC_SPI=y
@@ -524,11 +509,11 @@ CONFIG_LEDS_CLASS=y · 11 unmodified lines
524CONFIG_LEDS_GPIO=y509CONFIG_LEDS_GPIO=y
525CONFIG_LEDS_PWM=y510CONFIG_LEDS_PWM=y
526CONFIG_LEDS_SYSCON=y511CONFIG_LEDS_SYSCON=y
512CONFIG_LEDS_TRIGGER_DISK=y
527CONFIG_LEDS_TRIGGER_HEARTBEAT=y513CONFIG_LEDS_TRIGGER_HEARTBEAT=y
528CONFIG_LEDS_TRIGGER_CPU=y514CONFIG_LEDS_TRIGGER_CPU=y
529CONFIG_LEDS_TRIGGER_DEFAULT_ON=y515CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
530CONFIG_LEDS_TRIGGER_PANIC=y516CONFIG_LEDS_TRIGGER_PANIC=y
531CONFIG_LEDS_TRIGGER_DISK=y
532CONFIG_EDAC=y517CONFIG_EDAC=y
533CONFIG_EDAC_GHES=y518CONFIG_EDAC_GHES=y
534CONFIG_RTC_CLASS=y519CONFIG_RTC_CLASS=y
@@ -537,13 +522,13 @@ CONFIG_RTC_DRV_RK808=m · 2 unmodified lines
537CONFIG_RTC_DRV_S5M=y522CONFIG_RTC_DRV_S5M=y
538CONFIG_RTC_DRV_DS3232=y523CONFIG_RTC_DRV_DS3232=y
539CONFIG_RTC_DRV_EFI=y524CONFIG_RTC_DRV_EFI=y
525CONFIG_RTC_DRV_CROS_EC=y
540CONFIG_RTC_DRV_S3C=y526CONFIG_RTC_DRV_S3C=y
541CONFIG_RTC_DRV_PL031=y527CONFIG_RTC_DRV_PL031=y
542CONFIG_RTC_DRV_SUN6I=y528CONFIG_RTC_DRV_SUN6I=y
543CONFIG_RTC_DRV_ARMADA38X=y529CONFIG_RTC_DRV_ARMADA38X=y
544CONFIG_RTC_DRV_TEGRA=y530CONFIG_RTC_DRV_TEGRA=y
545CONFIG_RTC_DRV_XGENE=y531CONFIG_RTC_DRV_XGENE=y
546CONFIG_RTC_DRV_CROS_EC=y
547CONFIG_DMADEVICES=y532CONFIG_DMADEVICES=y
548CONFIG_DMA_BCM2835=m533CONFIG_DMA_BCM2835=m
549CONFIG_K3_DMA=y534CONFIG_K3_DMA=y
@@ -579,7 +564,6 @@ CONFIG_HWSPINLOCK_QCOM=y · 29 unmodified lines
579CONFIG_ARM_MHU=y564CONFIG_ARM_MHU=y
580CONFIG_PLATFORM_MHU=y565CONFIG_PLATFORM_MHU=y
581CONFIG_BCM2835_MBOX=y566CONFIG_BCM2835_MBOX=y
582CONFIG_HI6220_MBOX=y
583CONFIG_QCOM_APCS_IPC=y567CONFIG_QCOM_APCS_IPC=y
584CONFIG_ROCKCHIP_IOMMU=y568CONFIG_ROCKCHIP_IOMMU=y
585CONFIG_TEGRA_IOMMU_SMMU=y569CONFIG_TEGRA_IOMMU_SMMU=y
@@ -602,7 +586,6 @@ CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y · 16 unmodified lines
602CONFIG_EXTCON_USB_GPIO=y586CONFIG_EXTCON_USB_GPIO=y
603CONFIG_EXTCON_USBC_CROS_EC=y587CONFIG_EXTCON_USBC_CROS_EC=y
604CONFIG_MEMORY=y588CONFIG_MEMORY=y
605CONFIG_TEGRA_MC=y
606CONFIG_IIO=y589CONFIG_IIO=y
607CONFIG_EXYNOS_ADC=y590CONFIG_EXYNOS_ADC=y
608CONFIG_ROCKCHIP_SARADC=m591CONFIG_ROCKCHIP_SARADC=m
@@ -618,27 +601,27 @@ CONFIG_PWM_RCAR=m · 9 unmodified lines
618CONFIG_PWM_ROCKCHIP=y601CONFIG_PWM_ROCKCHIP=y
619CONFIG_PWM_SAMSUNG=y602CONFIG_PWM_SAMSUNG=y
620CONFIG_PWM_TEGRA=m603CONFIG_PWM_TEGRA=m
604CONFIG_PHY_XGENE=y
605CONFIG_PHY_SUN4I_USB=y
606CONFIG_PHY_HI6220_USB=y
621CONFIG_PHY_HISTB_COMBPHY=y607CONFIG_PHY_HISTB_COMBPHY=y
622CONFIG_PHY_HISI_INNO_USB2=y608CONFIG_PHY_HISI_INNO_USB2=y
623CONFIG_PHY_RCAR_GEN3_USB2=y
624CONFIG_PHY_RCAR_GEN3_USB3=m
625CONFIG_PHY_HI6220_USB=y
626CONFIG_PHY_QCOM_USB_HS=y
627CONFIG_PHY_SUN4I_USB=y
628CONFIG_PHY_MVEBU_CP110_COMPHY=y609CONFIG_PHY_MVEBU_CP110_COMPHY=y
629CONFIG_PHY_QCOM_QMP=m610CONFIG_PHY_QCOM_QMP=m
630CONFIG_PHY_ROCKCHIP_INNO_USB2=y611CONFIG_PHY_QCOM_USB_HS=y
612CONFIG_PHY_RCAR_GEN3_USB2=y
613CONFIG_PHY_RCAR_GEN3_USB3=m
631CONFIG_PHY_ROCKCHIP_EMMC=y614CONFIG_PHY_ROCKCHIP_EMMC=y
615CONFIG_PHY_ROCKCHIP_INNO_USB2=y
632CONFIG_PHY_ROCKCHIP_PCIE=m616CONFIG_PHY_ROCKCHIP_PCIE=m
633CONFIG_PHY_ROCKCHIP_TYPEC=y617CONFIG_PHY_ROCKCHIP_TYPEC=y
634CONFIG_PHY_XGENE=y
635CONFIG_PHY_TEGRA_XUSB=y618CONFIG_PHY_TEGRA_XUSB=y
636CONFIG_QCOM_L2_PMU=y619CONFIG_QCOM_L2_PMU=y
637CONFIG_QCOM_L3_PMU=y620CONFIG_QCOM_L3_PMU=y
638CONFIG_MESON_EFUSE=m
639CONFIG_QCOM_QFPROM=y621CONFIG_QCOM_QFPROM=y
640CONFIG_ROCKCHIP_EFUSE=y622CONFIG_ROCKCHIP_EFUSE=y
641CONFIG_UNIPHIER_EFUSE=y623CONFIG_UNIPHIER_EFUSE=y
624CONFIG_MESON_EFUSE=m
642CONFIG_TEE=y625CONFIG_TEE=y
643CONFIG_OPTEE=y626CONFIG_OPTEE=y
644CONFIG_ARM_SCPI_PROTOCOL=y627CONFIG_ARM_SCPI_PROTOCOL=y
@@ -647,7 +630,6 @@ CONFIG_EFI_CAPSULE_LOADER=y · 2 unmodified lines
647CONFIG_ACPI=y630CONFIG_ACPI=y
648CONFIG_ACPI_APEI=y631CONFIG_ACPI_APEI=y
649CONFIG_ACPI_APEI_GHES=y632CONFIG_ACPI_APEI_GHES=y
650CONFIG_ACPI_APEI_PCIEAER=y
651CONFIG_ACPI_APEI_MEMORY_FAILURE=y633CONFIG_ACPI_APEI_MEMORY_FAILURE=y
652CONFIG_ACPI_APEI_EINJ=y634CONFIG_ACPI_APEI_EINJ=y
653CONFIG_EXT2_FS=y635CONFIG_EXT2_FS=y
@@ -682,7 +664,6 @@ CONFIG_DEBUG_INFO=y · 28 unmodified lines
682CONFIG_DEBUG_FS=y664CONFIG_DEBUG_FS=y
683CONFIG_MAGIC_SYSRQ=y665CONFIG_MAGIC_SYSRQ=y
684CONFIG_DEBUG_KERNEL=y666CONFIG_DEBUG_KERNEL=y
685CONFIG_LOCKUP_DETECTOR=y
686# CONFIG_SCHED_DEBUG is not set667# CONFIG_SCHED_DEBUG is not set
687# CONFIG_DEBUG_PREEMPT is not set668# CONFIG_DEBUG_PREEMPT is not set
688# CONFIG_FTRACE is not set669# CONFIG_FTRACE is not set
@@ -691,20 +672,15 @@ CONFIG_SECURITY=y · 2 unmodified lines
691CONFIG_CRYPTO_ECHAINIV=y672CONFIG_CRYPTO_ECHAINIV=y
692CONFIG_CRYPTO_ANSI_CPRNG=y673CONFIG_CRYPTO_ANSI_CPRNG=y
693CONFIG_ARM64_CRYPTO=y674CONFIG_ARM64_CRYPTO=y
694CONFIG_CRYPTO_SHA256_ARM64=m
695CONFIG_CRYPTO_SHA512_ARM64=m
696CONFIG_CRYPTO_SHA1_ARM64_CE=y675CONFIG_CRYPTO_SHA1_ARM64_CE=y
697CONFIG_CRYPTO_SHA2_ARM64_CE=y676CONFIG_CRYPTO_SHA2_ARM64_CE=y
677CONFIG_CRYPTO_SHA512_ARM64_CE=m
678CONFIG_CRYPTO_SHA3_ARM64=m
679CONFIG_CRYPTO_SM3_ARM64_CE=m
698CONFIG_CRYPTO_GHASH_ARM64_CE=y680CONFIG_CRYPTO_GHASH_ARM64_CE=y
699CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m681CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m
700CONFIG_CRYPTO_CRC32_ARM64_CE=m682CONFIG_CRYPTO_CRC32_ARM64_CE=m
701CONFIG_CRYPTO_AES_ARM64=m
702CONFIG_CRYPTO_AES_ARM64_CE=m
703CONFIG_CRYPTO_AES_ARM64_CE_CCM=y683CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
704CONFIG_CRYPTO_AES_ARM64_CE_BLK=y684CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
705CONFIG_CRYPTO_AES_ARM64_NEON_BLK=m
706CONFIG_CRYPTO_CHACHA20_NEON=m685CONFIG_CRYPTO_CHACHA20_NEON=m
707CONFIG_CRYPTO_AES_ARM64_BS=m686CONFIG_CRYPTO_AES_ARM64_BS=m
708CONFIG_CRYPTO_SHA512_ARM64_CE=m
709CONFIG_CRYPTO_SHA3_ARM64=m
710CONFIG_CRYPTO_SM3_ARM64_CE=m
arch/arm64/include/asm/alternative.h+6−1
@@ -28,7 +28,12 @@ typedef void (*alternative_cb_t)(struct alt_instr *alt, · 27 unmodified lines
28 __le32 *origptr, __le32 *updptr, int nr_inst);28 __le32 *origptr, __le32 *updptr, int nr_inst);
29 29
30void __init apply_alternatives_all(void);30void __init apply_alternatives_all(void);
31void apply_alternatives(void *start, size_t length);31
32#ifdef CONFIG_MODULES
33void apply_alternatives_module(void *start, size_t length);
34#else
35static inline void apply_alternatives_module(void *start, size_t length) { }
36#endif
32 37
33#define ALTINSTR_ENTRY(feature,cb) \38#define ALTINSTR_ENTRY(feature,cb) \
34 " .word 661b - .\n" /* label */ \39 " .word 661b - .\n" /* label */ \
arch/arm64/include/asm/pgtable.h+1−5
@@ -224,10 +224,8 @@ static inline void set_pte(pte_t *ptep, pte_t pte) · 223 unmodified lines
224 * Only if the new pte is valid and kernel, otherwise TLB maintenance224 * Only if the new pte is valid and kernel, otherwise TLB maintenance
225 * or update_mmu_cache() have the necessary barriers.225 * or update_mmu_cache() have the necessary barriers.
226 */226 */
227 if (pte_valid_not_user(pte)) {227 if (pte_valid_not_user(pte))
228 dsb(ishst);228 dsb(ishst);
229 isb();
230 }
231}229}
232 230
233extern void __sync_icache_dcache(pte_t pteval);231extern void __sync_icache_dcache(pte_t pteval);
@@ -434,7 +432,6 @@ static inline void set_pmd(pmd_t *pmdp, pmd_t pmd) · 200 unmodified lines
434{432{
435 WRITE_ONCE(*pmdp, pmd);433 WRITE_ONCE(*pmdp, pmd);
436 dsb(ishst);434 dsb(ishst);
437 isb();
438}435}
439 436
440static inline void pmd_clear(pmd_t *pmdp)437static inline void pmd_clear(pmd_t *pmdp)
@@ -485,7 +482,6 @@ static inline void set_pud(pud_t *pudp, pud_t pud) · 44 unmodified lines
485{482{
486 WRITE_ONCE(*pudp, pud);483 WRITE_ONCE(*pudp, pud);
487 dsb(ishst);484 dsb(ishst);
488 isb();
489}485}
490 486
491static inline void pud_clear(pud_t *pudp)487static inline void pud_clear(pud_t *pudp)
arch/arm64/kernel/alternative.c+44−7
@@ -122,7 +122,30 @@ static void patch_alternative(struct alt_instr *alt, · 121 unmodified lines
122 }122 }
123}123}
124 124
125static void __apply_alternatives(void *alt_region, bool use_linear_alias)125/*
126 * We provide our own, private D-cache cleaning function so that we don't
127 * accidentally call into the cache.S code, which is patched by us at
128 * runtime.
129 */
130static void clean_dcache_range_nopatch(u64 start, u64 end)
131{
132 u64 cur, d_size, ctr_el0;
133
134 ctr_el0 = read_sanitised_ftr_reg(SYS_CTR_EL0);
135 d_size = 4 << cpuid_feature_extract_unsigned_field(ctr_el0,
136 CTR_DMINLINE_SHIFT);
137 cur = start & ~(d_size - 1);
138 do {
139 /*
140 * We must clean+invalidate to the PoC in order to avoid
141 * Cortex-A53 errata 826319, 827319, 824069 and 819472
142 * (this corresponds to ARM64_WORKAROUND_CLEAN_CACHE)
143 */
144 asm volatile("dc civac, %0" : : "r" (cur) : "memory");
145 } while (cur += d_size, cur < end);
146}
147
148static void __apply_alternatives(void *alt_region, bool is_module)
126{149{
127 struct alt_instr *alt;150 struct alt_instr *alt;
128 struct alt_region *region = alt_region;151 struct alt_region *region = alt_region;
@@ -145,7 +168,7 @@ static void __apply_alternatives(void *alt_region, bool use_linear_alias) · 16 unmodified lines
145 pr_info_once("patching kernel code\n");168 pr_info_once("patching kernel code\n");
146 169
147 origptr = ALT_ORIG_PTR(alt);170 origptr = ALT_ORIG_PTR(alt);
148 updptr = use_linear_alias ? lm_alias(origptr) : origptr;171 updptr = is_module ? origptr : lm_alias(origptr);
149 nr_inst = alt->orig_len / AARCH64_INSN_SIZE;172 nr_inst = alt->orig_len / AARCH64_INSN_SIZE;
150 173
151 if (alt->cpufeature < ARM64_CB_PATCH)174 if (alt->cpufeature < ARM64_CB_PATCH)
@@ -155,8 +178,20 @@ static void __apply_alternatives(void *alt_region, bool use_linear_alias) · 3 unmodified lines
155 178
156 alt_cb(alt, origptr, updptr, nr_inst);179 alt_cb(alt, origptr, updptr, nr_inst);
157 180
158 flush_icache_range((uintptr_t)origptr,181 if (!is_module) {
159 (uintptr_t)(origptr + nr_inst));182 clean_dcache_range_nopatch((u64)origptr,
183 (u64)(origptr + nr_inst));
184 }
185 }
186
187 /*
188 * The core module code takes care of cache maintenance in
189 * flush_module_icache().
190 */
191 if (!is_module) {
192 dsb(ish);
193 __flush_icache_all();
194 isb();
160 }195 }
161}196}
162 197
@@ -178,7 +213,7 @@ static int __apply_alternatives_multi_stop(void *unused) · 15 unmodified lines
178 isb();213 isb();
179 } else {214 } else {
180 BUG_ON(alternatives_applied);215 BUG_ON(alternatives_applied);
181 __apply_alternatives(&region, true);216 __apply_alternatives(&region, false);
182 /* Barriers provided by the cache flushing */217 /* Barriers provided by the cache flushing */
183 WRITE_ONCE(alternatives_applied, 1);218 WRITE_ONCE(alternatives_applied, 1);
184 }219 }
@@ -192,12 +227,14 @@ void __init apply_alternatives_all(void) · 7 unmodified lines
192 stop_machine(__apply_alternatives_multi_stop, NULL, cpu_online_mask);227 stop_machine(__apply_alternatives_multi_stop, NULL, cpu_online_mask);
193}228}
194 229
195void apply_alternatives(void *start, size_t length)230#ifdef CONFIG_MODULES
231void apply_alternatives_module(void *start, size_t length)
196{232{
197 struct alt_region region = {233 struct alt_region region = {
198 .begin = start,234 .begin = start,
199 .end = start + length,235 .end = start + length,
200 };236 };
201 237
202 __apply_alternatives(&region, false);238 __apply_alternatives(&region, true);
203}239}
240#endif
arch/arm64/kernel/module.c+2−3
@@ -448,9 +448,8 @@ int module_finalize(const Elf_Ehdr *hdr, · 447 unmodified lines
448 const char *secstrs = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;448 const char *secstrs = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
449 449
450 for (s = sechdrs, se = sechdrs + hdr->e_shnum; s < se; s++) {450 for (s = sechdrs, se = sechdrs + hdr->e_shnum; s < se; s++) {
451 if (strcmp(".altinstructions", secstrs + s->sh_name) == 0) {451 if (strcmp(".altinstructions", secstrs + s->sh_name) == 0)
452 apply_alternatives((void *)s->sh_addr, s->sh_size);452 apply_alternatives_module((void *)s->sh_addr, s->sh_size);
453 }
454#ifdef CONFIG_ARM64_MODULE_PLTS453#ifdef CONFIG_ARM64_MODULE_PLTS
455 if (IS_ENABLED(CONFIG_DYNAMIC_FTRACE) &&454 if (IS_ENABLED(CONFIG_DYNAMIC_FTRACE) &&
456 !strcmp(".text.ftrace_trampoline", secstrs + s->sh_name))455 !strcmp(".text.ftrace_trampoline", secstrs + s->sh_name))
arch/microblaze/Kconfig.debug+0−7
@@ -8,11 +8,4 @@ config TRACE_IRQFLAGS_SUPPORT · 7 unmodified lines
8 8
9source "lib/Kconfig.debug"9source "lib/Kconfig.debug"
10 10
11config HEART_BEAT
12 bool "Heart beat function for kernel"
13 default n
14 help
15 This option turns on/off heart beat kernel functionality.
16 First GPIO node is taken.
17
18endmenu11endmenu
arch/microblaze/include/asm/setup.h+0−5
@@ -19,15 +19,10 @@ extern char cmd_line[COMMAND_LINE_SIZE]; · 18 unmodified lines
19 19
20extern char *klimit;20extern char *klimit;
21 21
22void microblaze_heartbeat(void);
23void microblaze_setup_heartbeat(void);
24
25# ifdef CONFIG_MMU22# ifdef CONFIG_MMU
26extern void mmu_reset(void);23extern void mmu_reset(void);
27# endif /* CONFIG_MMU */24# endif /* CONFIG_MMU */
28 25
29extern void of_platform_reset_gpio_probe(void);
30
31void time_init(void);26void time_init(void);
32void init_IRQ(void);27void init_IRQ(void);
33void machine_early_init(const char *cmdline, unsigned int ram,28void machine_early_init(const char *cmdline, unsigned int ram,
arch/microblaze/include/asm/unistd.h+1−1
@@ -38,6 +38,6 @@ · 37 unmodified lines
38 38
39#endif /* __ASSEMBLY__ */39#endif /* __ASSEMBLY__ */
40 40
41#define __NR_syscalls 39941#define __NR_syscalls 401
42 42
43#endif /* _ASM_MICROBLAZE_UNISTD_H */43#endif /* _ASM_MICROBLAZE_UNISTD_H */
arch/microblaze/include/uapi/asm/unistd.h+2−0
@@ -415,5 +415,7 @@ · 414 unmodified lines
415#define __NR_pkey_alloc 396415#define __NR_pkey_alloc 396
416#define __NR_pkey_free 397416#define __NR_pkey_free 397
417#define __NR_statx 398417#define __NR_statx 398
418#define __NR_io_pgetevents 399
419#define __NR_rseq 400
418 420
419#endif /* _UAPI_ASM_MICROBLAZE_UNISTD_H */421#endif /* _UAPI_ASM_MICROBLAZE_UNISTD_H */
arch/microblaze/kernel/Makefile+1−3
@@ -8,7 +8,6 @@ ifdef CONFIG_FUNCTION_TRACER · 7 unmodified lines
8CFLAGS_REMOVE_timer.o = -pg8CFLAGS_REMOVE_timer.o = -pg
9CFLAGS_REMOVE_intc.o = -pg9CFLAGS_REMOVE_intc.o = -pg
10CFLAGS_REMOVE_early_printk.o = -pg10CFLAGS_REMOVE_early_printk.o = -pg
11CFLAGS_REMOVE_heartbeat.o = -pg
12CFLAGS_REMOVE_ftrace.o = -pg11CFLAGS_REMOVE_ftrace.o = -pg
13CFLAGS_REMOVE_process.o = -pg12CFLAGS_REMOVE_process.o = -pg
14endif13endif
@@ -17,12 +16,11 @@ extra-y := head.o vmlinux.lds · 2 unmodified lines
17 16
18obj-y += dma.o exceptions.o \17obj-y += dma.o exceptions.o \
19 hw_exception_handler.o irq.o \18 hw_exception_handler.o irq.o \
20 platform.o process.o prom.o ptrace.o \19 process.o prom.o ptrace.o \
21 reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o20 reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o
22 21
23obj-y += cpu/22obj-y += cpu/
24 23
25obj-$(CONFIG_HEART_BEAT) += heartbeat.o
26obj-$(CONFIG_MODULES) += microblaze_ksyms.o module.o24obj-$(CONFIG_MODULES) += microblaze_ksyms.o module.o
27obj-$(CONFIG_MMU) += misc.o25obj-$(CONFIG_MMU) += misc.o
28obj-$(CONFIG_STACKTRACE) += stacktrace.o26obj-$(CONFIG_STACKTRACE) += stacktrace.o
arch/microblaze/kernel/heartbeat.c+0−72
@@ -1,72 +0,0 @@
1/*
2 * Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu>
3 * Copyright (C) 2007-2009 PetaLogix
4 * Copyright (C) 2006 Atmark Techno, Inc.
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10
11#include <linux/sched.h>
12#include <linux/sched/loadavg.h>
13#include <linux/io.h>
14
15#include <asm/setup.h>
16#include <asm/page.h>
17#include <asm/prom.h>
18
19static unsigned int base_addr;
20
21void microblaze_heartbeat(void)
22{
23 static unsigned int cnt, period, dist;
24
25 if (base_addr) {
26 if (cnt == 0 || cnt == dist)
27 out_be32(base_addr, 1);
28 else if (cnt == 7 || cnt == dist + 7)
29 out_be32(base_addr, 0);
30
31 if (++cnt > period) {
32 cnt = 0;
33 /*
34 * The hyperbolic function below modifies the heartbeat
35 * period length in dependency of the current (5min)
36 * load. It goes through the points f(0)=126, f(1)=86,
37 * f(5)=51, f(inf)->30.
38 */
39 period = ((672 << FSHIFT) / (5 * avenrun[0] +
40 (7 << FSHIFT))) + 30;
41 dist = period / 4;
42 }
43 }
44}
45
46void microblaze_setup_heartbeat(void)
47{
48 struct device_node *gpio = NULL;
49 int *prop;
50 int j;
51 const char * const gpio_list[] = {
52 "xlnx,xps-gpio-1.00.a",
53 NULL
54 };
55
56 for (j = 0; gpio_list[j] != NULL; j++) {
57 gpio = of_find_compatible_node(NULL, NULL, gpio_list[j]);
58 if (gpio)
59 break;
60 }
61
62 if (gpio) {
63 base_addr = be32_to_cpup(of_get_property(gpio, "reg", NULL));
64 base_addr = (unsigned long) ioremap(base_addr, PAGE_SIZE);
65 pr_notice("Heartbeat GPIO at 0x%x\n", base_addr);
66
67 /* GPIO is configured as output */
68 prop = (int *) of_get_property(gpio, "xlnx,is-bidir", NULL);
69 if (prop)
70 out_be32(base_addr + 4, 0);
71 }
72}
arch/microblaze/kernel/platform.c+0−29
@@ -1,29 +0,0 @@
1/*
2 * Copyright 2008 Michal Simek <monstr@monstr.eu>
3 *
4 * based on virtex.c file
5 *
6 * Copyright 2007 Secret Lab Technologies Ltd.
7 *
8 * This file is licensed under the terms of the GNU General Public License
9 * version 2. This program is licensed "as is" without any warranty of any
10 * kind, whether express or implied.
11 */
12
13#include <linux/init.h>
14#include <linux/of_platform.h>
15#include <asm/setup.h>
16
17static struct of_device_id xilinx_of_bus_ids[] __initdata = {
18 { .compatible = "simple-bus", },
19 { .compatible = "xlnx,compound", },
20 {}
21};
22
23static int __init microblaze_device_probe(void)
24{
25 of_platform_bus_probe(NULL, xilinx_of_bus_ids, NULL);
26 of_platform_reset_gpio_probe();
27 return 0;
28}
29device_initcall(microblaze_device_probe);
arch/microblaze/kernel/reset.c+6−5
@@ -18,7 +18,7 @@ · 17 unmodified lines
18static int handle; /* reset pin handle */18static int handle; /* reset pin handle */
19static unsigned int reset_val;19static unsigned int reset_val;
20 20
21void of_platform_reset_gpio_probe(void)21static int of_platform_reset_gpio_probe(void)
22{22{
23 int ret;23 int ret;
24 handle = of_get_named_gpio(of_find_node_by_path("/"),24 handle = of_get_named_gpio(of_find_node_by_path("/"),
@@ -27,13 +27,13 @@ void of_platform_reset_gpio_probe(void) · 2 unmodified lines
27 if (!gpio_is_valid(handle)) {27 if (!gpio_is_valid(handle)) {
28 pr_info("Skipping unavailable RESET gpio %d (%s)\n",28 pr_info("Skipping unavailable RESET gpio %d (%s)\n",
29 handle, "reset");29 handle, "reset");
30 return;30 return -ENODEV;
31 }31 }
32 32
33 ret = gpio_request(handle, "reset");33 ret = gpio_request(handle, "reset");
34 if (ret < 0) {34 if (ret < 0) {
35 pr_info("GPIO pin is already allocated\n");35 pr_info("GPIO pin is already allocated\n");
36 return;36 return ret;
37 }37 }
38 38
39 /* get current setup value */39 /* get current setup value */
@@ -51,11 +51,12 @@ void of_platform_reset_gpio_probe(void) · 11 unmodified lines
51 51
52 pr_info("RESET: Registered gpio device: %d, current val: %d\n",52 pr_info("RESET: Registered gpio device: %d, current val: %d\n",
53 handle, reset_val);53 handle, reset_val);
54 return;54 return 0;
55err:55err:
56 gpio_free(handle);56 gpio_free(handle);
57 return;57 return ret;
58}58}
59device_initcall(of_platform_reset_gpio_probe);
59 60
60 61
61static void gpio_system_reset(void)62static void gpio_system_reset(void)
arch/microblaze/kernel/syscall_table.S+2−0
@@ -400,3 +400,5 @@ ENTRY(sys_call_table) · 399 unmodified lines
400 .long sys_pkey_alloc400 .long sys_pkey_alloc
401 .long sys_pkey_free401 .long sys_pkey_free
402 .long sys_statx402 .long sys_statx
403 .long sys_io_pgetevents
404 .long sys_rseq
arch/microblaze/kernel/timer.c+0−7
@@ -156,9 +156,6 @@ static inline void timer_ack(void) · 155 unmodified lines
156static irqreturn_t timer_interrupt(int irq, void *dev_id)156static irqreturn_t timer_interrupt(int irq, void *dev_id)
157{157{
158 struct clock_event_device *evt = &clockevent_xilinx_timer;158 struct clock_event_device *evt = &clockevent_xilinx_timer;
159#ifdef CONFIG_HEART_BEAT
160 microblaze_heartbeat();
161#endif
162 timer_ack();159 timer_ack();
163 evt->event_handler(evt);160 evt->event_handler(evt);
164 return IRQ_HANDLED;161 return IRQ_HANDLED;
@@ -318,10 +315,6 @@ static int __init xilinx_timer_init(struct device_node *timer) · 153 unmodified lines
318 return ret;315 return ret;
319 }316 }
320 317
321#ifdef CONFIG_HEART_BEAT
322 microblaze_setup_heartbeat();
323#endif
324
325 ret = xilinx_clocksource_init();318 ret = xilinx_clocksource_init();
326 if (ret)319 if (ret)
327 return ret;320 return ret;
arch/mips/kernel/signal.c+2−2
@@ -801,7 +801,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 800 unmodified lines
801 regs->regs[0] = 0; /* Don't deal with this again. */801 regs->regs[0] = 0; /* Don't deal with this again. */
802 }802 }
803 803
804 rseq_signal_deliver(regs);804 rseq_signal_deliver(ksig, regs);
805 805
806 if (sig_uses_siginfo(&ksig->ka, abi))806 if (sig_uses_siginfo(&ksig->ka, abi))
807 ret = abi->setup_rt_frame(vdso + abi->vdso->off_rt_sigreturn,807 ret = abi->setup_rt_frame(vdso + abi->vdso->off_rt_sigreturn,
@@ -870,7 +870,7 @@ asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused, · 62 unmodified lines
870 if (thread_info_flags & _TIF_NOTIFY_RESUME) {870 if (thread_info_flags & _TIF_NOTIFY_RESUME) {
871 clear_thread_flag(TIF_NOTIFY_RESUME);871 clear_thread_flag(TIF_NOTIFY_RESUME);
872 tracehook_notify_resume(regs);872 tracehook_notify_resume(regs);
873 rseq_handle_notify_resume(regs);873 rseq_handle_notify_resume(NULL, regs);
874 }874 }
875 875
876 user_enter();876 user_enter();
arch/openrisc/include/asm/pgalloc.h+5−1
@@ -98,8 +98,12 @@ static inline void pte_free(struct mm_struct *mm, struct page *pte) · 97 unmodified lines
98 __free_page(pte);98 __free_page(pte);
99}99}
100 100
101#define __pte_free_tlb(tlb, pte, addr) \
102do { \
103 pgtable_page_dtor(pte); \
104 tlb_remove_page((tlb), (pte)); \
105} while (0)
101 106
102#define __pte_free_tlb(tlb, pte, addr) tlb_remove_page((tlb), (pte))
103#define pmd_pgtable(pmd) pmd_page(pmd)107#define pmd_pgtable(pmd) pmd_page(pmd)
104 108
105#define check_pgt_cache() do { } while (0)109#define check_pgt_cache() do { } while (0)
arch/openrisc/kernel/entry.S+1−7
@@ -277,12 +277,6 @@ EXCEPTION_ENTRY(_data_page_fault_handler) · 276 unmodified lines
277 l.addi r3,r1,0 // pt_regs277 l.addi r3,r1,0 // pt_regs
278 /* r4 set be EXCEPTION_HANDLE */ // effective address of fault278 /* r4 set be EXCEPTION_HANDLE */ // effective address of fault
279 279
280 /*
281 * __PHX__: TODO
282 *
283 * all this can be written much simpler. look at
284 * DTLB miss handler in the CONFIG_GUARD_PROTECTED_CORE part
285 */
286#ifdef CONFIG_OPENRISC_NO_SPR_SR_DSX280#ifdef CONFIG_OPENRISC_NO_SPR_SR_DSX
287 l.lwz r6,PT_PC(r3) // address of an offending insn281 l.lwz r6,PT_PC(r3) // address of an offending insn
288 l.lwz r6,0(r6) // instruction that caused pf282 l.lwz r6,0(r6) // instruction that caused pf
@@ -314,7 +308,7 @@ EXCEPTION_ENTRY(_data_page_fault_handler) · 25 unmodified lines
314 308
315#else309#else
316 310
317 l.lwz r6,PT_SR(r3) // SR311 l.mfspr r6,r0,SPR_SR // SR
318 l.andi r6,r6,SPR_SR_DSX // check for delay slot exception312 l.andi r6,r6,SPR_SR_DSX // check for delay slot exception
319 l.sfne r6,r0 // exception happened in delay slot313 l.sfne r6,r0 // exception happened in delay slot
320 l.bnf 7f314 l.bnf 7f
arch/openrisc/kernel/head.S+6−3
@@ -210,8 +210,7 @@ · 209 unmodified lines
210 * r4 - EEAR exception EA210 * r4 - EEAR exception EA
211 * r10 - current pointing to current_thread_info struct211 * r10 - current pointing to current_thread_info struct
212 * r12 - syscall 0, since we didn't come from syscall212 * r12 - syscall 0, since we didn't come from syscall
213 * r13 - temp it actually contains new SR, not needed anymore213 * r30 - handler address of the handler we'll jump to
214 * r31 - handler address of the handler we'll jump to
215 *214 *
216 * handler has to save remaining registers to the exception215 * handler has to save remaining registers to the exception
217 * ksp frame *before* tainting them!216 * ksp frame *before* tainting them!
@@ -244,6 +243,7 @@ · 26 unmodified lines
244 /* r1 is KSP, r30 is __pa(KSP) */ ;\243 /* r1 is KSP, r30 is __pa(KSP) */ ;\
245 tophys (r30,r1) ;\244 tophys (r30,r1) ;\
246 l.sw PT_GPR12(r30),r12 ;\245 l.sw PT_GPR12(r30),r12 ;\
246 /* r4 use for tmp before EA */ ;\
247 l.mfspr r12,r0,SPR_EPCR_BASE ;\247 l.mfspr r12,r0,SPR_EPCR_BASE ;\
248 l.sw PT_PC(r30),r12 ;\248 l.sw PT_PC(r30),r12 ;\
249 l.mfspr r12,r0,SPR_ESR_BASE ;\249 l.mfspr r12,r0,SPR_ESR_BASE ;\
@@ -263,7 +263,10 @@ · 13 unmodified lines
263 /* r12 == 1 if we come from syscall */ ;\263 /* r12 == 1 if we come from syscall */ ;\
264 CLEAR_GPR(r12) ;\264 CLEAR_GPR(r12) ;\
265 /* ----- turn on MMU ----- */ ;\265 /* ----- turn on MMU ----- */ ;\
266 l.ori r30,r0,(EXCEPTION_SR) ;\266 /* Carry DSX into exception SR */ ;\
267 l.mfspr r30,r0,SPR_SR ;\
268 l.andi r30,r30,SPR_SR_DSX ;\
269 l.ori r30,r30,(EXCEPTION_SR) ;\
267 l.mtspr r0,r30,SPR_ESR_BASE ;\270 l.mtspr r0,r30,SPR_ESR_BASE ;\
268 /* r30: EA address of handler */ ;\271 /* r30: EA address of handler */ ;\
269 LOAD_SYMBOL_2_GPR(r30,handler) ;\272 LOAD_SYMBOL_2_GPR(r30,handler) ;\
arch/openrisc/kernel/traps.c+1−1
@@ -300,7 +300,7 @@ static inline int in_delay_slot(struct pt_regs *regs) · 299 unmodified lines
300 return 0;300 return 0;
301 }301 }
302#else302#else
303 return regs->sr & SPR_SR_DSX;303 return mfspr(SPR_SR) & SPR_SR_DSX;
304#endif304#endif
305}305}
306 306
arch/parisc/Kconfig+3−3
@@ -244,11 +244,11 @@ config PARISC_PAGE_SIZE_4KB · 243 unmodified lines
244 244
245config PARISC_PAGE_SIZE_16KB245config PARISC_PAGE_SIZE_16KB
246 bool "16KB"246 bool "16KB"
247 depends on PA8X00247 depends on PA8X00 && BROKEN
248 248
249config PARISC_PAGE_SIZE_64KB249config PARISC_PAGE_SIZE_64KB
250 bool "64KB"250 bool "64KB"
251 depends on PA8X00251 depends on PA8X00 && BROKEN
252 252
253endchoice253endchoice
254 254
@@ -347,7 +347,7 @@ config NR_CPUS · 92 unmodified lines
347 int "Maximum number of CPUs (2-32)"347 int "Maximum number of CPUs (2-32)"
348 range 2 32348 range 2 32
349 depends on SMP349 depends on SMP
350 default "32"350 default "4"
351 351
352endmenu352endmenu
353 353
arch/parisc/Makefile+0−4
@@ -65,10 +65,6 @@ endif · 64 unmodified lines
65# kernel.65# kernel.
66cflags-y += -mdisable-fpregs66cflags-y += -mdisable-fpregs
67 67
68# Without this, "ld -r" results in .text sections that are too big
69# (> 0x40000) for branches to reach stubs.
70cflags-y += -ffunction-sections
71
72# Use long jumps instead of long branches (needed if your linker fails to68# Use long jumps instead of long branches (needed if your linker fails to
73# link a too big vmlinux executable). Not enabled for building modules.69# link a too big vmlinux executable). Not enabled for building modules.
74ifdef CONFIG_MLONGCALLS70ifdef CONFIG_MLONGCALLS
arch/parisc/include/asm/signal.h+0−8
@@ -21,14 +21,6 @@ typedef struct { · 20 unmodified lines
21 unsigned long sig[_NSIG_WORDS];21 unsigned long sig[_NSIG_WORDS];
22} sigset_t;22} sigset_t;
23 23
24#ifndef __KERNEL__
25struct sigaction {
26 __sighandler_t sa_handler;
27 unsigned long sa_flags;
28 sigset_t sa_mask; /* mask last for extensibility */
29};
30#endif
31
32#include <asm/sigcontext.h>24#include <asm/sigcontext.h>
33 25
34#endif /* !__ASSEMBLY */26#endif /* !__ASSEMBLY */
arch/parisc/include/uapi/asm/unistd.h+2−1
@@ -364,8 +364,9 @@ · 363 unmodified lines
364#define __NR_preadv2 (__NR_Linux + 347)364#define __NR_preadv2 (__NR_Linux + 347)
365#define __NR_pwritev2 (__NR_Linux + 348)365#define __NR_pwritev2 (__NR_Linux + 348)
366#define __NR_statx (__NR_Linux + 349)366#define __NR_statx (__NR_Linux + 349)
367#define __NR_io_pgetevents (__NR_Linux + 350)
367 368
368#define __NR_Linux_syscalls (__NR_statx + 1)369#define __NR_Linux_syscalls (__NR_io_pgetevents + 1)
369 370
370 371
371#define __IGNORE_select /* newselect */372#define __IGNORE_select /* newselect */
arch/parisc/kernel/drivers.c+9−16
@@ -154,17 +154,14 @@ int register_parisc_driver(struct parisc_driver *driver) · 153 unmodified lines
154{154{
155 /* FIXME: we need this because apparently the sti155 /* FIXME: we need this because apparently the sti
156 * driver can be registered twice */156 * driver can be registered twice */
157 if(driver->drv.name) {157 if (driver->drv.name) {
158 printk(KERN_WARNING 158 pr_warn("BUG: skipping previously registered driver %s\n",
159 "BUG: skipping previously registered driver %s\n",159 driver->name);
160 driver->name);
161 return 1;160 return 1;
162 }161 }
163 162
164 if (!driver->probe) {163 if (!driver->probe) {
165 printk(KERN_WARNING 164 pr_warn("BUG: driver %s has no probe routine\n", driver->name);
166 "BUG: driver %s has no probe routine\n",
167 driver->name);
168 return 1;165 return 1;
169 }166 }
170 167
@@ -491,12 +488,9 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path) · 320 unmodified lines
491 488
492 dev = create_parisc_device(mod_path);489 dev = create_parisc_device(mod_path);
493 if (dev->id.hw_type != HPHW_FAULTY) {490 if (dev->id.hw_type != HPHW_FAULTY) {
494 printk(KERN_ERR "Two devices have hardware path [%s]. "491 pr_err("Two devices have hardware path [%s]. IODC data for second device: %7phN\n"
495 "IODC data for second device: "492 "Rearranging GSC cards sometimes helps\n",
496 "%02x%02x%02x%02x%02x%02x\n"493 parisc_pathname(dev), iodc_data);
497 "Rearranging GSC cards sometimes helps\n",
498 parisc_pathname(dev), iodc_data[0], iodc_data[1],
499 iodc_data[3], iodc_data[4], iodc_data[5], iodc_data[6]);
500 return NULL;494 return NULL;
501 }495 }
502 496
@@ -528,8 +522,7 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path) · 25 unmodified lines
528 * the keyboard controller522 * the keyboard controller
529 */523 */
530 if ((hpa & 0xfff) == 0 && insert_resource(&iomem_resource, &dev->hpa))524 if ((hpa & 0xfff) == 0 && insert_resource(&iomem_resource, &dev->hpa))
531 printk("Unable to claim HPA %lx for device %s\n",525 pr_warn("Unable to claim HPA %lx for device %s\n", hpa, name);
532 hpa, name);
533 526
534 return dev;527 return dev;
535}528}
@@ -875,7 +868,7 @@ static void print_parisc_device(struct parisc_device *dev) · 339 unmodified lines
875 static int count;868 static int count;
876 869
877 print_pa_hwpath(dev, hw_path);870 print_pa_hwpath(dev, hw_path);
878 printk(KERN_INFO "%d. %s at 0x%px [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }",871 pr_info("%d. %s at 0x%px [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }",
879 ++count, dev->name, (void*) dev->hpa.start, hw_path, dev->id.hw_type,872 ++count, dev->name, (void*) dev->hpa.start, hw_path, dev->id.hw_type,
880 dev->id.hversion_rev, dev->id.hversion, dev->id.sversion);873 dev->id.hversion_rev, dev->id.hversion, dev->id.sversion);
881 874
arch/parisc/kernel/syscall_table.S+1−0
@@ -445,6 +445,7 @@ · 444 unmodified lines
445 ENTRY_COMP(preadv2)445 ENTRY_COMP(preadv2)
446 ENTRY_COMP(pwritev2)446 ENTRY_COMP(pwritev2)
447 ENTRY_SAME(statx)447 ENTRY_SAME(statx)
448 ENTRY_COMP(io_pgetevents) /* 350 */
448 449
449 450
450.ifne (. - 90b) - (__NR_Linux_syscalls * (91b - 90b))451.ifne (. - 90b) - (__NR_Linux_syscalls * (91b - 90b))
arch/parisc/kernel/unwind.c+2−2
@@ -25,7 +25,7 @@ · 24 unmodified lines
25 25
26/* #define DEBUG 1 */26/* #define DEBUG 1 */
27#ifdef DEBUG27#ifdef DEBUG
28#define dbg(x...) printk(x)28#define dbg(x...) pr_debug(x)
29#else29#else
30#define dbg(x...)30#define dbg(x...)
31#endif31#endif
@@ -182,7 +182,7 @@ int __init unwind_init(void) · 150 unmodified lines
182 start = (long)&__start___unwind[0];182 start = (long)&__start___unwind[0];
183 stop = (long)&__stop___unwind[0];183 stop = (long)&__stop___unwind[0];
184 184
185 printk("unwind_init: start = 0x%lx, end = 0x%lx, entries = %lu\n", 185 dbg("unwind_init: start = 0x%lx, end = 0x%lx, entries = %lu\n",
186 start, stop,186 start, stop,
187 (stop - start) / sizeof(struct unwind_table_entry));187 (stop - start) / sizeof(struct unwind_table_entry));
188 188
arch/powerpc/include/asm/book3s/32/pgalloc.h+0−1
@@ -138,7 +138,6 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb, · 137 unmodified lines
138static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,138static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
139 unsigned long address)139 unsigned long address)
140{140{
141 pgtable_page_dtor(table);
142 pgtable_free_tlb(tlb, page_address(table), 0);141 pgtable_free_tlb(tlb, page_address(table), 0);
143}142}
144#endif /* _ASM_POWERPC_BOOK3S_32_PGALLOC_H */143#endif /* _ASM_POWERPC_BOOK3S_32_PGALLOC_H */
arch/powerpc/include/asm/nohash/32/pgalloc.h+0−1
@@ -140,7 +140,6 @@ static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, · 139 unmodified lines
140 unsigned long address)140 unsigned long address)
141{141{
142 tlb_flush_pgtable(tlb, address);142 tlb_flush_pgtable(tlb, address);
143 pgtable_page_dtor(table);
144 pgtable_free_tlb(tlb, page_address(table), 0);143 pgtable_free_tlb(tlb, page_address(table), 0);
145}144}
146#endif /* _ASM_POWERPC_PGALLOC_32_H */145#endif /* _ASM_POWERPC_PGALLOC_32_H */
arch/powerpc/include/asm/systbl.h+1−0
@@ -393,3 +393,4 @@ SYSCALL(pkey_alloc) · 392 unmodified lines
393SYSCALL(pkey_free)393SYSCALL(pkey_free)
394SYSCALL(pkey_mprotect)394SYSCALL(pkey_mprotect)
395SYSCALL(rseq)395SYSCALL(rseq)
396COMPAT_SYS(io_pgetevents)
arch/powerpc/include/asm/unistd.h+1−1
@@ -12,7 +12,7 @@ · 11 unmodified lines
12#include <uapi/asm/unistd.h>12#include <uapi/asm/unistd.h>
13 13
14 14
15#define NR_syscalls 38815#define NR_syscalls 389
16 16
17#define __NR__exit __NR_exit17#define __NR__exit __NR_exit
18 18
arch/powerpc/include/uapi/asm/unistd.h+1−0
@@ -399,5 +399,6 @@ · 398 unmodified lines
399#define __NR_pkey_free 385399#define __NR_pkey_free 385
400#define __NR_pkey_mprotect 386400#define __NR_pkey_mprotect 386
401#define __NR_rseq 387401#define __NR_rseq 387
402#define __NR_io_pgetevents 388
402 403
403#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */404#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
arch/powerpc/kernel/pci_32.c+0−4
@@ -285,9 +285,6 @@ pci_bus_to_hose(int bus) · 284 unmodified lines
285 * Note that the returned IO or memory base is a physical address285 * Note that the returned IO or memory base is a physical address
286 */286 */
287 287
288#pragma GCC diagnostic push
289#pragma GCC diagnostic ignored "-Wpragmas"
290#pragma GCC diagnostic ignored "-Wattribute-alias"
291SYSCALL_DEFINE3(pciconfig_iobase, long, which,288SYSCALL_DEFINE3(pciconfig_iobase, long, which,
292 unsigned long, bus, unsigned long, devfn)289 unsigned long, bus, unsigned long, devfn)
293{290{
@@ -313,4 +310,3 @@ SYSCALL_DEFINE3(pciconfig_iobase, long, which, · 19 unmodified lines
313 310
314 return result;311 return result;
315}312}
316#pragma GCC diagnostic pop
arch/powerpc/kernel/pci_64.c+0−4
@@ -203,9 +203,6 @@ void pcibios_setup_phb_io_space(struct pci_controller *hose) · 202 unmodified lines
203#define IOBASE_ISA_IO 3203#define IOBASE_ISA_IO 3
204#define IOBASE_ISA_MEM 4204#define IOBASE_ISA_MEM 4
205 205
206#pragma GCC diagnostic push
207#pragma GCC diagnostic ignored "-Wpragmas"
208#pragma GCC diagnostic ignored "-Wattribute-alias"
209SYSCALL_DEFINE3(pciconfig_iobase, long, which, unsigned long, in_bus,206SYSCALL_DEFINE3(pciconfig_iobase, long, which, unsigned long, in_bus,
210 unsigned long, in_devfn)207 unsigned long, in_devfn)
211{208{
@@ -259,7 +256,6 @@ SYSCALL_DEFINE3(pciconfig_iobase, long, which, unsigned long, in_bus, · 47 unmodified lines
259 256
260 return -EOPNOTSUPP;257 return -EOPNOTSUPP;
261}258}
262#pragma GCC diagnostic pop
263 259
264#ifdef CONFIG_NUMA260#ifdef CONFIG_NUMA
265int pcibus_to_node(struct pci_bus *bus)261int pcibus_to_node(struct pci_bus *bus)
arch/powerpc/kernel/rtas.c+0−4
@@ -1051,9 +1051,6 @@ struct pseries_errorlog *get_pseries_errorlog(struct rtas_error_log *log, · 1050 unmodified lines
1051}1051}
1052 1052
1053/* We assume to be passed big endian arguments */1053/* We assume to be passed big endian arguments */
1054#pragma GCC diagnostic push
1055#pragma GCC diagnostic ignored "-Wpragmas"
1056#pragma GCC diagnostic ignored "-Wattribute-alias"
1057SYSCALL_DEFINE1(rtas, struct rtas_args __user *, uargs)1054SYSCALL_DEFINE1(rtas, struct rtas_args __user *, uargs)
1058{1055{
1059 struct rtas_args args;1056 struct rtas_args args;
@@ -1140,7 +1137,6 @@ SYSCALL_DEFINE1(rtas, struct rtas_args __user *, uargs) · 80 unmodified lines
1140 1137
1141 return 0;1138 return 0;
1142}1139}
1143#pragma GCC diagnostic pop
1144 1140
1145/*1141/*
1146 * Call early during boot, before mem init, to retrieve the RTAS1142 * Call early during boot, before mem init, to retrieve the RTAS
arch/powerpc/kernel/signal_32.c+0−8
@@ -1038,9 +1038,6 @@ static int do_setcontext_tm(struct ucontext __user *ucp, · 1037 unmodified lines
1038}1038}
1039#endif1039#endif
1040 1040
1041#pragma GCC diagnostic push
1042#pragma GCC diagnostic ignored "-Wpragmas"
1043#pragma GCC diagnostic ignored "-Wattribute-alias"
1044#ifdef CONFIG_PPC641041#ifdef CONFIG_PPC64
1045COMPAT_SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,1042COMPAT_SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
1046 struct ucontext __user *, new_ctx, int, ctx_size)1043 struct ucontext __user *, new_ctx, int, ctx_size)
@@ -1134,7 +1131,6 @@ SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx, · 87 unmodified lines
1134 set_thread_flag(TIF_RESTOREALL);1131 set_thread_flag(TIF_RESTOREALL);
1135 return 0;1132 return 0;
1136}1133}
1137#pragma GCC diagnostic pop
1138 1134
1139#ifdef CONFIG_PPC641135#ifdef CONFIG_PPC64
1140COMPAT_SYSCALL_DEFINE0(rt_sigreturn)1136COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
@@ -1231,9 +1227,6 @@ SYSCALL_DEFINE0(rt_sigreturn) · 90 unmodified lines
1231 return 0;1227 return 0;
1232}1228}
1233 1229
1234#pragma GCC diagnostic push
1235#pragma GCC diagnostic ignored "-Wpragmas"
1236#pragma GCC diagnostic ignored "-Wattribute-alias"
1237#ifdef CONFIG_PPC321230#ifdef CONFIG_PPC32
1238SYSCALL_DEFINE3(debug_setcontext, struct ucontext __user *, ctx,1231SYSCALL_DEFINE3(debug_setcontext, struct ucontext __user *, ctx,
1239 int, ndbg, struct sig_dbg_op __user *, dbg)1232 int, ndbg, struct sig_dbg_op __user *, dbg)
@@ -1337,7 +1330,6 @@ SYSCALL_DEFINE3(debug_setcontext, struct ucontext __user *, ctx, · 97 unmodified lines
1337 return 0;1330 return 0;
1338}1331}
1339#endif1332#endif
1340#pragma GCC diagnostic pop
1341 1333
1342/*1334/*
1343 * OK, we're invoking a handler1335 * OK, we're invoking a handler
arch/powerpc/kernel/signal_64.c+0−4
@@ -625,9 +625,6 @@ static long setup_trampoline(unsigned int syscall, unsigned int __user *tramp) · 624 unmodified lines
625/*625/*
626 * Handle {get,set,swap}_context operations626 * Handle {get,set,swap}_context operations
627 */627 */
628#pragma GCC diagnostic push
629#pragma GCC diagnostic ignored "-Wpragmas"
630#pragma GCC diagnostic ignored "-Wattribute-alias"
631SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,628SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
632 struct ucontext __user *, new_ctx, long, ctx_size)629 struct ucontext __user *, new_ctx, long, ctx_size)
633{630{
@@ -693,7 +690,6 @@ SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx, · 59 unmodified lines
693 set_thread_flag(TIF_RESTOREALL);690 set_thread_flag(TIF_RESTOREALL);
694 return 0;691 return 0;
695}692}
696#pragma GCC diagnostic pop
697 693
698 694
699/*695/*
arch/powerpc/kernel/syscalls.c+0−4
@@ -62,9 +62,6 @@ out: · 61 unmodified lines
62 return ret;62 return ret;
63}63}
64 64
65#pragma GCC diagnostic push
66#pragma GCC diagnostic ignored "-Wpragmas"
67#pragma GCC diagnostic ignored "-Wattribute-alias"
68SYSCALL_DEFINE6(mmap2, unsigned long, addr, size_t, len,65SYSCALL_DEFINE6(mmap2, unsigned long, addr, size_t, len,
69 unsigned long, prot, unsigned long, flags,66 unsigned long, prot, unsigned long, flags,
70 unsigned long, fd, unsigned long, pgoff)67 unsigned long, fd, unsigned long, pgoff)
@@ -78,7 +75,6 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, size_t, len, · 7 unmodified lines
78{75{
79 return do_mmap2(addr, len, prot, flags, fd, offset, PAGE_SHIFT);76 return do_mmap2(addr, len, prot, flags, fd, offset, PAGE_SHIFT);
80}77}
81#pragma GCC diagnostic pop
82 78
83#ifdef CONFIG_PPC3279#ifdef CONFIG_PPC32
84/*80/*
arch/powerpc/mm/subpage-prot.c+0−4
@@ -186,9 +186,6 @@ static void subpage_mark_vma_nohuge(struct mm_struct *mm, unsigned long addr, · 185 unmodified lines
186 * in a 2-bit field won't allow writes to a page that is otherwise186 * in a 2-bit field won't allow writes to a page that is otherwise
187 * write-protected.187 * write-protected.
188 */188 */
189#pragma GCC diagnostic push
190#pragma GCC diagnostic ignored "-Wpragmas"
191#pragma GCC diagnostic ignored "-Wattribute-alias"
192SYSCALL_DEFINE3(subpage_prot, unsigned long, addr,189SYSCALL_DEFINE3(subpage_prot, unsigned long, addr,
193 unsigned long, len, u32 __user *, map)190 unsigned long, len, u32 __user *, map)
194{191{
@@ -272,4 +269,3 @@ SYSCALL_DEFINE3(subpage_prot, unsigned long, addr, · 77 unmodified lines
272 up_write(&mm->mmap_sem);269 up_write(&mm->mmap_sem);
273 return err;270 return err;
274}271}
275#pragma GCC diagnostic pop
arch/powerpc/platforms/powermac/time.c+20−9
@@ -42,7 +42,11 @@ · 41 unmodified lines
42#define DBG(x...)42#define DBG(x...)
43#endif43#endif
44 44
45/* Apparently the RTC stores seconds since 1 Jan 1904 */45/*
46 * Offset between Unix time (1970-based) and Mac time (1904-based). Cuda and PMU
47 * times wrap in 2040. If we need to handle later times, the read_time functions
48 * need to be changed to interpret wrapped times as post-2040.
49 */
46#define RTC_OFFSET 208284480050#define RTC_OFFSET 2082844800
47 51
48/*52/*
@@ -97,8 +101,11 @@ static time64_t cuda_get_time(void) · 48 unmodified lines
97 if (req.reply_len != 7)101 if (req.reply_len != 7)
98 printk(KERN_ERR "cuda_get_time: got %d byte reply\n",102 printk(KERN_ERR "cuda_get_time: got %d byte reply\n",
99 req.reply_len);103 req.reply_len);
100 now = (req.reply[3] << 24) + (req.reply[4] << 16)104 now = (u32)((req.reply[3] << 24) + (req.reply[4] << 16) +
101 + (req.reply[5] << 8) + req.reply[6];105 (req.reply[5] << 8) + req.reply[6]);
106 /* it's either after year 2040, or the RTC has gone backwards */
107 WARN_ON(now < RTC_OFFSET);
108
102 return now - RTC_OFFSET;109 return now - RTC_OFFSET;
103}110}
104 111
@@ -106,10 +113,10 @@ static time64_t cuda_get_time(void) · 1 unmodified line
106 113
107static int cuda_set_rtc_time(struct rtc_time *tm)114static int cuda_set_rtc_time(struct rtc_time *tm)
108{115{
109 time64_t nowtime;116 u32 nowtime;
110 struct adb_request req;117 struct adb_request req;
111 118
112 nowtime = rtc_tm_to_time64(tm) + RTC_OFFSET;119 nowtime = lower_32_bits(rtc_tm_to_time64(tm) + RTC_OFFSET);
113 if (cuda_request(&req, NULL, 6, CUDA_PACKET, CUDA_SET_TIME,120 if (cuda_request(&req, NULL, 6, CUDA_PACKET, CUDA_SET_TIME,
114 nowtime >> 24, nowtime >> 16, nowtime >> 8,121 nowtime >> 24, nowtime >> 16, nowtime >> 8,
115 nowtime) < 0)122 nowtime) < 0)
@@ -140,8 +147,12 @@ static time64_t pmu_get_time(void) · 24 unmodified lines
140 if (req.reply_len != 4)147 if (req.reply_len != 4)
141 printk(KERN_ERR "pmu_get_time: got %d byte reply from PMU\n",148 printk(KERN_ERR "pmu_get_time: got %d byte reply from PMU\n",
142 req.reply_len);149 req.reply_len);
143 now = (req.reply[0] << 24) + (req.reply[1] << 16)150 now = (u32)((req.reply[0] << 24) + (req.reply[1] << 16) +
144 + (req.reply[2] << 8) + req.reply[3];151 (req.reply[2] << 8) + req.reply[3]);
152
153 /* it's either after year 2040, or the RTC has gone backwards */
154 WARN_ON(now < RTC_OFFSET);
155
145 return now - RTC_OFFSET;156 return now - RTC_OFFSET;
146}157}
147 158
@@ -149,10 +160,10 @@ static time64_t pmu_get_time(void) · 1 unmodified line
149 160
150static int pmu_set_rtc_time(struct rtc_time *tm)161static int pmu_set_rtc_time(struct rtc_time *tm)
151{162{
152 time64_t nowtime;163 u32 nowtime;
153 struct adb_request req;164 struct adb_request req;
154 165
155 nowtime = rtc_tm_to_time64(tm) + RTC_OFFSET;166 nowtime = lower_32_bits(rtc_tm_to_time64(tm) + RTC_OFFSET);
156 if (pmu_request(&req, NULL, 5, PMU_SET_RTC, nowtime >> 24,167 if (pmu_request(&req, NULL, 5, PMU_SET_RTC, nowtime >> 24,
157 nowtime >> 16, nowtime >> 8, nowtime) < 0)168 nowtime >> 16, nowtime >> 8, nowtime) < 0)
158 return -ENXIO;169 return -ENXIO;
arch/s390/net/bpf_jit_comp.c+1−0
@@ -1286,6 +1286,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp) · 1285 unmodified lines
1286 goto free_addrs;1286 goto free_addrs;
1287 }1287 }
1288 if (bpf_jit_prog(&jit, fp)) {1288 if (bpf_jit_prog(&jit, fp)) {
1289 bpf_jit_binary_free(header);
1289 fp = orig_fp;1290 fp = orig_fp;
1290 goto free_addrs;1291 goto free_addrs;
1291 }1292 }
arch/x86/entry/entry_32.S+1−1
@@ -477,7 +477,7 @@ ENTRY(entry_SYSENTER_32) · 476 unmodified lines
477 * whereas POPF does not.)477 * whereas POPF does not.)
478 */478 */
479 addl $PT_EFLAGS-PT_DS, %esp /* point esp at pt_regs->flags */479 addl $PT_EFLAGS-PT_DS, %esp /* point esp at pt_regs->flags */
480 btr $X86_EFLAGS_IF_BIT, (%esp)480 btrl $X86_EFLAGS_IF_BIT, (%esp)
481 popfl481 popfl
482 482
483 /*483 /*
arch/x86/entry/entry_64_compat.S+8−8
@@ -84,13 +84,13 @@ ENTRY(entry_SYSENTER_compat) · 83 unmodified lines
84 pushq %rdx /* pt_regs->dx */84 pushq %rdx /* pt_regs->dx */
85 pushq %rcx /* pt_regs->cx */85 pushq %rcx /* pt_regs->cx */
86 pushq $-ENOSYS /* pt_regs->ax */86 pushq $-ENOSYS /* pt_regs->ax */
87 pushq %r8 /* pt_regs->r8 */87 pushq $0 /* pt_regs->r8 = 0 */
88 xorl %r8d, %r8d /* nospec r8 */88 xorl %r8d, %r8d /* nospec r8 */
89 pushq %r9 /* pt_regs->r9 */89 pushq $0 /* pt_regs->r9 = 0 */
90 xorl %r9d, %r9d /* nospec r9 */90 xorl %r9d, %r9d /* nospec r9 */
91 pushq %r10 /* pt_regs->r10 */91 pushq $0 /* pt_regs->r10 = 0 */
92 xorl %r10d, %r10d /* nospec r10 */92 xorl %r10d, %r10d /* nospec r10 */
93 pushq %r11 /* pt_regs->r11 */93 pushq $0 /* pt_regs->r11 = 0 */
94 xorl %r11d, %r11d /* nospec r11 */94 xorl %r11d, %r11d /* nospec r11 */
95 pushq %rbx /* pt_regs->rbx */95 pushq %rbx /* pt_regs->rbx */
96 xorl %ebx, %ebx /* nospec rbx */96 xorl %ebx, %ebx /* nospec rbx */
@@ -374,13 +374,13 @@ ENTRY(entry_INT80_compat) · 277 unmodified lines
374 pushq %rcx /* pt_regs->cx */374 pushq %rcx /* pt_regs->cx */
375 xorl %ecx, %ecx /* nospec cx */375 xorl %ecx, %ecx /* nospec cx */
376 pushq $-ENOSYS /* pt_regs->ax */376 pushq $-ENOSYS /* pt_regs->ax */
377 pushq $0 /* pt_regs->r8 = 0 */377 pushq %r8 /* pt_regs->r8 */
378 xorl %r8d, %r8d /* nospec r8 */378 xorl %r8d, %r8d /* nospec r8 */
379 pushq $0 /* pt_regs->r9 = 0 */379 pushq %r9 /* pt_regs->r9 */
380 xorl %r9d, %r9d /* nospec r9 */380 xorl %r9d, %r9d /* nospec r9 */
381 pushq $0 /* pt_regs->r10 = 0 */381 pushq %r10 /* pt_regs->r10*/
382 xorl %r10d, %r10d /* nospec r10 */382 xorl %r10d, %r10d /* nospec r10 */
383 pushq $0 /* pt_regs->r11 = 0 */383 pushq %r11 /* pt_regs->r11 */
384 xorl %r11d, %r11d /* nospec r11 */384 xorl %r11d, %r11d /* nospec r11 */
385 pushq %rbx /* pt_regs->rbx */385 pushq %rbx /* pt_regs->rbx */
386 xorl %ebx, %ebx /* nospec rbx */386 xorl %ebx, %ebx /* nospec rbx */
arch/x86/include/asm/pgalloc.h+3−0
@@ -184,6 +184,9 @@ static inline p4d_t *p4d_alloc_one(struct mm_struct *mm, unsigned long addr) · 183 unmodified lines
184 184
185static inline void p4d_free(struct mm_struct *mm, p4d_t *p4d)185static inline void p4d_free(struct mm_struct *mm, p4d_t *p4d)
186{186{
187 if (!pgtable_l5_enabled())
188 return;
189
187 BUG_ON((unsigned long)p4d & (PAGE_SIZE-1));190 BUG_ON((unsigned long)p4d & (PAGE_SIZE-1));
188 free_page((unsigned long)p4d);191 free_page((unsigned long)p4d);
189}192}
arch/x86/include/asm/pgtable.h+1−1
@@ -898,7 +898,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd) · 897 unmodified lines
898#define pgd_page(pgd) pfn_to_page(pgd_pfn(pgd))898#define pgd_page(pgd) pfn_to_page(pgd_pfn(pgd))
899 899
900/* to find an entry in a page-table-directory. */900/* to find an entry in a page-table-directory. */
901static __always_inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)901static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
902{902{
903 if (!pgtable_l5_enabled())903 if (!pgtable_l5_enabled())
904 return (p4d_t *)pgd;904 return (p4d_t *)pgd;
arch/x86/include/asm/pgtable_64.h+2−2
@@ -216,7 +216,7 @@ static inline pgd_t pti_set_user_pgd(pgd_t *pgdp, pgd_t pgd) · 215 unmodified lines
216}216}
217#endif217#endif
218 218
219static __always_inline void native_set_p4d(p4d_t *p4dp, p4d_t p4d)219static inline void native_set_p4d(p4d_t *p4dp, p4d_t p4d)
220{220{
221 pgd_t pgd;221 pgd_t pgd;
222 222
@@ -230,7 +230,7 @@ static __always_inline void native_set_p4d(p4d_t *p4dp, p4d_t p4d) · 7 unmodified lines
230 *p4dp = native_make_p4d(native_pgd_val(pgd));230 *p4dp = native_make_p4d(native_pgd_val(pgd));
231}231}
232 232
233static __always_inline void native_p4d_clear(p4d_t *p4d)233static inline void native_p4d_clear(p4d_t *p4d)
234{234{
235 native_set_p4d(p4d, native_make_p4d(0));235 native_set_p4d(p4d, native_make_p4d(0));
236}236}
arch/x86/kernel/e820.c+12−3
@@ -1248,6 +1248,7 @@ void __init e820__memblock_setup(void) · 1247 unmodified lines
1248{1248{
1249 int i;1249 int i;
1250 u64 end;1250 u64 end;
1251 u64 addr = 0;
1251 1252
1252 /*1253 /*
1253 * The bootstrap memblock region count maximum is 128 entries1254 * The bootstrap memblock region count maximum is 128 entries
@@ -1264,13 +1265,21 @@ void __init e820__memblock_setup(void) · 10 unmodified lines
1264 struct e820_entry *entry = &e820_table->entries[i];1265 struct e820_entry *entry = &e820_table->entries[i];
1265 1266
1266 end = entry->addr + entry->size;1267 end = entry->addr + entry->size;
1268 if (addr < entry->addr)
1269 memblock_reserve(addr, entry->addr - addr);
1270 addr = end;
1267 if (end != (resource_size_t)end)1271 if (end != (resource_size_t)end)
1268 continue;1272 continue;
1269 1273
1274 /*
1275 * all !E820_TYPE_RAM ranges (including gap ranges) are put
1276 * into memblock.reserved to make sure that struct pages in
1277 * such regions are not left uninitialized after bootup.
1278 */
1270 if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN)1279 if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN)
1271 continue;1280 memblock_reserve(entry->addr, entry->size);
1272 1281 else
1273 memblock_add(entry->addr, entry->size);1282 memblock_add(entry->addr, entry->size);
1274 }1283 }
1275 1284
1276 /* Throw away partial pages: */1285 /* Throw away partial pages: */
arch/x86/mm/fault.c+7−14
@@ -641,11 +641,6 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address) · 640 unmodified lines
641 return 0;641 return 0;
642}642}
643 643
644static const char nx_warning[] = KERN_CRIT
645"kernel tried to execute NX-protected page - exploit attempt? (uid: %d)\n";
646static const char smep_warning[] = KERN_CRIT
647"unable to execute userspace code (SMEP?) (uid: %d)\n";
648
649static void644static void
650show_fault_oops(struct pt_regs *regs, unsigned long error_code,645show_fault_oops(struct pt_regs *regs, unsigned long error_code,
651 unsigned long address)646 unsigned long address)
@@ -664,20 +659,18 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, · 12 unmodified lines
664 pte = lookup_address_in_pgd(pgd, address, &level);659 pte = lookup_address_in_pgd(pgd, address, &level);
665 660
666 if (pte && pte_present(*pte) && !pte_exec(*pte))661 if (pte && pte_present(*pte) && !pte_exec(*pte))
667 printk(nx_warning, from_kuid(&init_user_ns, current_uid()));662 pr_crit("kernel tried to execute NX-protected page - exploit attempt? (uid: %d)\n",
663 from_kuid(&init_user_ns, current_uid()));
668 if (pte && pte_present(*pte) && pte_exec(*pte) &&664 if (pte && pte_present(*pte) && pte_exec(*pte) &&
669 (pgd_flags(*pgd) & _PAGE_USER) &&665 (pgd_flags(*pgd) & _PAGE_USER) &&
670 (__read_cr4() & X86_CR4_SMEP))666 (__read_cr4() & X86_CR4_SMEP))
671 printk(smep_warning, from_kuid(&init_user_ns, current_uid()));667 pr_crit("unable to execute userspace code (SMEP?) (uid: %d)\n",
668 from_kuid(&init_user_ns, current_uid()));
672 }669 }
673 670
674 printk(KERN_ALERT "BUG: unable to handle kernel ");671 pr_alert("BUG: unable to handle kernel %s at %px\n",
675 if (address < PAGE_SIZE)672 address < PAGE_SIZE ? "NULL pointer dereference" : "paging request",
676 printk(KERN_CONT "NULL pointer dereference");673 (void *)address);
677 else
678 printk(KERN_CONT "paging request");
679
680 printk(KERN_CONT " at %px\n", (void *) address);
681 674
682 dump_pagetable(address);675 dump_pagetable(address);
683}676}
arch/x86/platform/efi/efi_64.c+2−2
@@ -166,14 +166,14 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd) · 165 unmodified lines
166 pgd = pgd_offset_k(pgd_idx * PGDIR_SIZE);166 pgd = pgd_offset_k(pgd_idx * PGDIR_SIZE);
167 set_pgd(pgd_offset_k(pgd_idx * PGDIR_SIZE), save_pgd[pgd_idx]);167 set_pgd(pgd_offset_k(pgd_idx * PGDIR_SIZE), save_pgd[pgd_idx]);
168 168
169 if (!(pgd_val(*pgd) & _PAGE_PRESENT))169 if (!pgd_present(*pgd))
170 continue;170 continue;
171 171
172 for (i = 0; i < PTRS_PER_P4D; i++) {172 for (i = 0; i < PTRS_PER_P4D; i++) {
173 p4d = p4d_offset(pgd,173 p4d = p4d_offset(pgd,
174 pgd_idx * PGDIR_SIZE + i * P4D_SIZE);174 pgd_idx * PGDIR_SIZE + i * P4D_SIZE);
175 175
176 if (!(p4d_val(*p4d) & _PAGE_PRESENT))176 if (!p4d_present(*p4d))
177 continue;177 continue;
178 178
179 pud = (pud_t *)p4d_page_vaddr(*p4d);179 pud = (pud_t *)p4d_page_vaddr(*p4d);
block/blk-core.c+4−0
@@ -3473,6 +3473,10 @@ static void __blk_rq_prep_clone(struct request *dst, struct request *src) · 3472 unmodified lines
3473 dst->cpu = src->cpu;3473 dst->cpu = src->cpu;
3474 dst->__sector = blk_rq_pos(src);3474 dst->__sector = blk_rq_pos(src);
3475 dst->__data_len = blk_rq_bytes(src);3475 dst->__data_len = blk_rq_bytes(src);
3476 if (src->rq_flags & RQF_SPECIAL_PAYLOAD) {
3477 dst->rq_flags |= RQF_SPECIAL_PAYLOAD;
3478 dst->special_vec = src->special_vec;
3479 }
3476 dst->nr_phys_segments = src->nr_phys_segments;3480 dst->nr_phys_segments = src->nr_phys_segments;
3477 dst->ioprio = src->ioprio;3481 dst->ioprio = src->ioprio;
3478 dst->extra_len = src->extra_len;3482 dst->extra_len = src->extra_len;
block/blk-mq.c+12−0
@@ -1075,6 +1075,9 @@ static bool blk_mq_mark_tag_wait(struct blk_mq_hw_ctx **hctx, · 1074 unmodified lines
1075 1075
1076#define BLK_MQ_RESOURCE_DELAY 3 /* ms units */1076#define BLK_MQ_RESOURCE_DELAY 3 /* ms units */
1077 1077
1078/*
1079 * Returns true if we did some work AND can potentially do more.
1080 */
1078bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list,1081bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list,
1079 bool got_budget)1082 bool got_budget)
1080{1083{
@@ -1205,8 +1208,17 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list, · 124 unmodified lines
1205 blk_mq_run_hw_queue(hctx, true);1208 blk_mq_run_hw_queue(hctx, true);
1206 else if (needs_restart && (ret == BLK_STS_RESOURCE))1209 else if (needs_restart && (ret == BLK_STS_RESOURCE))
1207 blk_mq_delay_run_hw_queue(hctx, BLK_MQ_RESOURCE_DELAY);1210 blk_mq_delay_run_hw_queue(hctx, BLK_MQ_RESOURCE_DELAY);
1211
1212 return false;
1208 }1213 }
1209 1214
1215 /*
1216 * If the host/device is unable to accept more work, inform the
1217 * caller of that.
1218 */
1219 if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE)
1220 return false;
1221
1210 return (queued + errors) != 0;1222 return (queued + errors) != 0;
1211}1223}
1212 1224
certs/blacklist.h+1−1
@@ -1,3 +1,3 @@
1#include <linux/kernel.h>1#include <linux/kernel.h>
2 2
3extern const char __initdata *const blacklist_hashes[];3extern const char __initconst *const blacklist_hashes[];
crypto/af_alg.c+10−3
@@ -1060,12 +1060,19 @@ void af_alg_async_cb(struct crypto_async_request *_req, int err) · 1059 unmodified lines
1060}1060}
1061EXPORT_SYMBOL_GPL(af_alg_async_cb);1061EXPORT_SYMBOL_GPL(af_alg_async_cb);
1062 1062
1063__poll_t af_alg_poll_mask(struct socket *sock, __poll_t events)1063/**
1064 * af_alg_poll - poll system call handler
1065 */
1066__poll_t af_alg_poll(struct file *file, struct socket *sock,
1067 poll_table *wait)
1064{1068{
1065 struct sock *sk = sock->sk;1069 struct sock *sk = sock->sk;
1066 struct alg_sock *ask = alg_sk(sk);1070 struct alg_sock *ask = alg_sk(sk);
1067 struct af_alg_ctx *ctx = ask->private;1071 struct af_alg_ctx *ctx = ask->private;
1068 __poll_t mask = 0;1072 __poll_t mask;
1073
1074 sock_poll_wait(file, sk_sleep(sk), wait);
1075 mask = 0;
1069 1076
1070 if (!ctx->more || ctx->used)1077 if (!ctx->more || ctx->used)
1071 mask |= EPOLLIN | EPOLLRDNORM;1078 mask |= EPOLLIN | EPOLLRDNORM;
@@ -1075,7 +1082,7 @@ __poll_t af_alg_poll_mask(struct socket *sock, __poll_t events) · 3 unmodified lines
1075 1082
1076 return mask;1083 return mask;
1077}1084}
1078EXPORT_SYMBOL_GPL(af_alg_poll_mask);1085EXPORT_SYMBOL_GPL(af_alg_poll);
1079 1086
1080/**1087/**
1081 * af_alg_alloc_areq - allocate struct af_alg_async_req1088 * af_alg_alloc_areq - allocate struct af_alg_async_req
crypto/algif_aead.c+2−2
@@ -375,7 +375,7 @@ static struct proto_ops algif_aead_ops = { · 374 unmodified lines
375 .sendmsg = aead_sendmsg,375 .sendmsg = aead_sendmsg,
376 .sendpage = af_alg_sendpage,376 .sendpage = af_alg_sendpage,
377 .recvmsg = aead_recvmsg,377 .recvmsg = aead_recvmsg,
378 .poll_mask = af_alg_poll_mask,378 .poll = af_alg_poll,
379};379};
380 380
381static int aead_check_key(struct socket *sock)381static int aead_check_key(struct socket *sock)
@@ -471,7 +471,7 @@ static struct proto_ops algif_aead_ops_nokey = { · 89 unmodified lines
471 .sendmsg = aead_sendmsg_nokey,471 .sendmsg = aead_sendmsg_nokey,
472 .sendpage = aead_sendpage_nokey,472 .sendpage = aead_sendpage_nokey,
473 .recvmsg = aead_recvmsg_nokey,473 .recvmsg = aead_recvmsg_nokey,
474 .poll_mask = af_alg_poll_mask,474 .poll = af_alg_poll,
475};475};
476 476
477static void *aead_bind(const char *name, u32 type, u32 mask)477static void *aead_bind(const char *name, u32 type, u32 mask)
crypto/algif_skcipher.c+2−2
@@ -206,7 +206,7 @@ static struct proto_ops algif_skcipher_ops = { · 205 unmodified lines
206 .sendmsg = skcipher_sendmsg,206 .sendmsg = skcipher_sendmsg,
207 .sendpage = af_alg_sendpage,207 .sendpage = af_alg_sendpage,
208 .recvmsg = skcipher_recvmsg,208 .recvmsg = skcipher_recvmsg,
209 .poll_mask = af_alg_poll_mask,209 .poll = af_alg_poll,
210};210};
211 211
212static int skcipher_check_key(struct socket *sock)212static int skcipher_check_key(struct socket *sock)
@@ -302,7 +302,7 @@ static struct proto_ops algif_skcipher_ops_nokey = { · 89 unmodified lines
302 .sendmsg = skcipher_sendmsg_nokey,302 .sendmsg = skcipher_sendmsg_nokey,
303 .sendpage = skcipher_sendpage_nokey,303 .sendpage = skcipher_sendpage_nokey,
304 .recvmsg = skcipher_recvmsg_nokey,304 .recvmsg = skcipher_recvmsg_nokey,
305 .poll_mask = af_alg_poll_mask,305 .poll = af_alg_poll,
306};306};
307 307
308static void *skcipher_bind(const char *name, u32 type, u32 mask)308static void *skcipher_bind(const char *name, u32 type, u32 mask)
crypto/asymmetric_keys/x509_cert_parser.c+9−0
@@ -249,6 +249,15 @@ int x509_note_signature(void *context, size_t hdrlen, · 248 unmodified lines
249 return -EINVAL;249 return -EINVAL;
250 }250 }
251 251
252 if (strcmp(ctx->cert->sig->pkey_algo, "rsa") == 0) {
253 /* Discard the BIT STRING metadata */
254 if (vlen < 1 || *(const u8 *)value != 0)
255 return -EBADMSG;
256
257 value++;
258 vlen--;
259 }
260
252 ctx->cert->raw_sig = value;261 ctx->cert->raw_sig = value;
253 ctx->cert->raw_sig_size = vlen;262 ctx->cert->raw_sig_size = vlen;
254 return 0;263 return 0;
drivers/acpi/osl.c+72−0
@@ -45,6 +45,8 @@ · 44 unmodified lines
45#include <linux/uaccess.h>45#include <linux/uaccess.h>
46#include <linux/io-64-nonatomic-lo-hi.h>46#include <linux/io-64-nonatomic-lo-hi.h>
47 47
48#include "acpica/accommon.h"
49#include "acpica/acnamesp.h"
48#include "internal.h"50#include "internal.h"
49 51
50#define _COMPONENT ACPI_OS_SERVICES52#define _COMPONENT ACPI_OS_SERVICES
@@ -1490,6 +1492,76 @@ int acpi_check_region(resource_size_t start, resource_size_t n, · 1439 unmodified lines
1490}1492}
1491EXPORT_SYMBOL(acpi_check_region);1493EXPORT_SYMBOL(acpi_check_region);
1492 1494
1495static acpi_status acpi_deactivate_mem_region(acpi_handle handle, u32 level,
1496 void *_res, void **return_value)
1497{
1498 struct acpi_mem_space_context **mem_ctx;
1499 union acpi_operand_object *handler_obj;
1500 union acpi_operand_object *region_obj2;
1501 union acpi_operand_object *region_obj;
1502 struct resource *res = _res;
1503 acpi_status status;
1504
1505 region_obj = acpi_ns_get_attached_object(handle);
1506 if (!region_obj)
1507 return AE_OK;
1508
1509 handler_obj = region_obj->region.handler;
1510 if (!handler_obj)
1511 return AE_OK;
1512
1513 if (region_obj->region.space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY)
1514 return AE_OK;
1515
1516 if (!(region_obj->region.flags & AOPOBJ_SETUP_COMPLETE))
1517 return AE_OK;
1518
1519 region_obj2 = acpi_ns_get_secondary_object(region_obj);
1520 if (!region_obj2)
1521 return AE_OK;
1522
1523 mem_ctx = (void *)&region_obj2->extra.region_context;
1524
1525 if (!(mem_ctx[0]->address >= res->start &&
1526 mem_ctx[0]->address < res->end))
1527 return AE_OK;
1528
1529 status = handler_obj->address_space.setup(region_obj,
1530 ACPI_REGION_DEACTIVATE,
1531 NULL, (void **)mem_ctx);
1532 if (ACPI_SUCCESS(status))
1533 region_obj->region.flags &= ~(AOPOBJ_SETUP_COMPLETE);
1534
1535 return status;
1536}
1537
1538/**
1539 * acpi_release_memory - Release any mappings done to a memory region
1540 * @handle: Handle to namespace node
1541 * @res: Memory resource
1542 * @level: A level that terminates the search
1543 *
1544 * Walks through @handle and unmaps all SystemMemory Operation Regions that
1545 * overlap with @res and that have already been activated (mapped).
1546 *
1547 * This is a helper that allows drivers to place special requirements on memory
1548 * region that may overlap with operation regions, primarily allowing them to
1549 * safely map the region as non-cached memory.
1550 *
1551 * The unmapped Operation Regions will be automatically remapped next time they
1552 * are called, so the drivers do not need to do anything else.
1553 */
1554acpi_status acpi_release_memory(acpi_handle handle, struct resource *res,
1555 u32 level)
1556{
1557 if (!(res->flags & IORESOURCE_MEM))
1558 return AE_TYPE;
1559
1560 return acpi_walk_namespace(ACPI_TYPE_REGION, handle, level,
1561 acpi_deactivate_mem_region, NULL, res, NULL);
1562}
1563EXPORT_SYMBOL_GPL(acpi_release_memory);
1564
1493/*1565/*
1494 * Let drivers know whether the resource checks are effective1566 * Let drivers know whether the resource checks are effective
1495 */1567 */
drivers/atm/iphase.c+1−1
@@ -1618,7 +1618,7 @@ static int rx_init(struct atm_dev *dev) · 1617 unmodified lines
1618 skb_queue_head_init(&iadev->rx_dma_q); 1618 skb_queue_head_init(&iadev->rx_dma_q);
1619 iadev->rx_free_desc_qhead = NULL; 1619 iadev->rx_free_desc_qhead = NULL;
1620 1620
1621 iadev->rx_open = kcalloc(4, iadev->num_vc, GFP_KERNEL);1621 iadev->rx_open = kcalloc(iadev->num_vc, sizeof(void *), GFP_KERNEL);
1622 if (!iadev->rx_open) {1622 if (!iadev->rx_open) {
1623 printk(KERN_ERR DEV_LABEL "itf %d couldn't get free page\n",1623 printk(KERN_ERR DEV_LABEL "itf %d couldn't get free page\n",
1624 dev->number); 1624 dev->number);
drivers/atm/zatm.c+2−0
@@ -1481,6 +1481,8 @@ static int zatm_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg) · 1480 unmodified lines
1481 return -EFAULT;1481 return -EFAULT;
1482 if (pool < 0 || pool > ZATM_LAST_POOL)1482 if (pool < 0 || pool > ZATM_LAST_POOL)
1483 return -EINVAL;1483 return -EINVAL;
1484 pool = array_index_nospec(pool,
1485 ZATM_LAST_POOL + 1);
1484 if (copy_from_user(&info,1486 if (copy_from_user(&info,
1485 &((struct zatm_pool_req __user *) arg)->info,1487 &((struct zatm_pool_req __user *) arg)->info,
1486 sizeof(info))) return -EFAULT;1488 sizeof(info))) return -EFAULT;
drivers/base/power/domain.c+3−4
@@ -2487,10 +2487,9 @@ EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states); · 2486 unmodified lines
2487 * power domain corresponding to a DT node's "required-opps" property.2487 * power domain corresponding to a DT node's "required-opps" property.
2488 *2488 *
2489 * @dev: Device for which the performance-state needs to be found.2489 * @dev: Device for which the performance-state needs to be found.
2490 * @opp_node: DT node where the "required-opps" property is present. This can be2490 * @np: DT node where the "required-opps" property is present. This can be
2491 * the device node itself (if it doesn't have an OPP table) or a node2491 * the device node itself (if it doesn't have an OPP table) or a node
2492 * within the OPP table of a device (if device has an OPP table).2492 * within the OPP table of a device (if device has an OPP table).
2493 * @state: Pointer to return performance state.
2494 *2493 *
2495 * Returns performance state corresponding to the "required-opps" property of2494 * Returns performance state corresponding to the "required-opps" property of
2496 * a DT node. This calls platform specific genpd->opp_to_performance_state()2495 * a DT node. This calls platform specific genpd->opp_to_performance_state()
@@ -2499,7 +2498,7 @@ EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states); · 2 unmodified lines
2499 * Returns performance state on success and 0 on failure.2498 * Returns performance state on success and 0 on failure.
2500 */2499 */
2501unsigned int of_genpd_opp_to_performance_state(struct device *dev,2500unsigned int of_genpd_opp_to_performance_state(struct device *dev,
2502 struct device_node *opp_node)2501 struct device_node *np)
2503{2502{
2504 struct generic_pm_domain *genpd;2503 struct generic_pm_domain *genpd;
2505 struct dev_pm_opp *opp;2504 struct dev_pm_opp *opp;
@@ -2514,7 +2513,7 @@ unsigned int of_genpd_opp_to_performance_state(struct device *dev, · 8 unmodified lines
2514 2513
2515 genpd_lock(genpd);2514 genpd_lock(genpd);
2516 2515
2517 opp = of_dev_pm_opp_find_required_opp(&genpd->dev, opp_node);2516 opp = of_dev_pm_opp_find_required_opp(&genpd->dev, np);
2518 if (IS_ERR(opp)) {2517 if (IS_ERR(opp)) {
2519 dev_err(dev, "Failed to find required OPP: %ld\n",2518 dev_err(dev, "Failed to find required OPP: %ld\n",
2520 PTR_ERR(opp));2519 PTR_ERR(opp));
drivers/block/drbd/drbd_req.c+2−2
@@ -1244,8 +1244,8 @@ drbd_request_prepare(struct drbd_device *device, struct bio *bio, unsigned long · 1243 unmodified lines
1244 _drbd_start_io_acct(device, req);1244 _drbd_start_io_acct(device, req);
1245 1245
1246 /* process discards always from our submitter thread */1246 /* process discards always from our submitter thread */
1247 if ((bio_op(bio) & REQ_OP_WRITE_ZEROES) ||1247 if (bio_op(bio) == REQ_OP_WRITE_ZEROES ||
1248 (bio_op(bio) & REQ_OP_DISCARD))1248 bio_op(bio) == REQ_OP_DISCARD)
1249 goto queue_for_submitter_thread;1249 goto queue_for_submitter_thread;
1250 1250
1251 if (rw == WRITE && req->private_bio && req->i.size1251 if (rw == WRITE && req->private_bio && req->i.size
drivers/char/random.c+13−16
@@ -402,7 +402,8 @@ static struct poolinfo { · 401 unmodified lines
402/*402/*
403 * Static global variables403 * Static global variables
404 */404 */
405static DECLARE_WAIT_QUEUE_HEAD(random_wait);405static DECLARE_WAIT_QUEUE_HEAD(random_read_wait);
406static DECLARE_WAIT_QUEUE_HEAD(random_write_wait);
406static struct fasync_struct *fasync;407static struct fasync_struct *fasync;
407 408
408static DEFINE_SPINLOCK(random_ready_list_lock);409static DEFINE_SPINLOCK(random_ready_list_lock);
@@ -721,8 +722,8 @@ retry: · 312 unmodified lines
721 722
722 /* should we wake readers? */723 /* should we wake readers? */
723 if (entropy_bits >= random_read_wakeup_bits &&724 if (entropy_bits >= random_read_wakeup_bits &&
724 wq_has_sleeper(&random_wait)) {725 wq_has_sleeper(&random_read_wait)) {
725 wake_up_interruptible_poll(&random_wait, POLLIN);726 wake_up_interruptible(&random_read_wait);
726 kill_fasync(&fasync, SIGIO, POLL_IN);727 kill_fasync(&fasync, SIGIO, POLL_IN);
727 }728 }
728 /* If the input pool is getting full, send some729 /* If the input pool is getting full, send some
@@ -1396,7 +1397,7 @@ retry: · 667 unmodified lines
1396 trace_debit_entropy(r->name, 8 * ibytes);1397 trace_debit_entropy(r->name, 8 * ibytes);
1397 if (ibytes &&1398 if (ibytes &&
1398 (r->entropy_count >> ENTROPY_SHIFT) < random_write_wakeup_bits) {1399 (r->entropy_count >> ENTROPY_SHIFT) < random_write_wakeup_bits) {
1399 wake_up_interruptible_poll(&random_wait, POLLOUT);1400 wake_up_interruptible(&random_write_wait);
1400 kill_fasync(&fasync, SIGIO, POLL_OUT);1401 kill_fasync(&fasync, SIGIO, POLL_OUT);
1401 }1402 }
1402 1403
@@ -1838,7 +1839,7 @@ _random_read(int nonblock, char __user *buf, size_t nbytes) · 435 unmodified lines
1838 if (nonblock)1839 if (nonblock)
1839 return -EAGAIN;1840 return -EAGAIN;
1840 1841
1841 wait_event_interruptible(random_wait,1842 wait_event_interruptible(random_read_wait,
1842 ENTROPY_BITS(&input_pool) >=1843 ENTROPY_BITS(&input_pool) >=
1843 random_read_wakeup_bits);1844 random_read_wakeup_bits);
1844 if (signal_pending(current))1845 if (signal_pending(current))
@@ -1875,17 +1876,14 @@ urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) · 30 unmodified lines
1875 return ret;1876 return ret;
1876}1877}
1877 1878
1878static struct wait_queue_head *
1879random_get_poll_head(struct file *file, __poll_t events)
1880{
1881 return &random_wait;
1882}
1883
1884static __poll_t1879static __poll_t
1885random_poll_mask(struct file *file, __poll_t events)1880random_poll(struct file *file, poll_table * wait)
1886{1881{
1887 __poll_t mask = 0;1882 __poll_t mask;
1888 1883
1884 poll_wait(file, &random_read_wait, wait);
1885 poll_wait(file, &random_write_wait, wait);
1886 mask = 0;
1889 if (ENTROPY_BITS(&input_pool) >= random_read_wakeup_bits)1887 if (ENTROPY_BITS(&input_pool) >= random_read_wakeup_bits)
1890 mask |= EPOLLIN | EPOLLRDNORM;1888 mask |= EPOLLIN | EPOLLRDNORM;
1891 if (ENTROPY_BITS(&input_pool) < random_write_wakeup_bits)1889 if (ENTROPY_BITS(&input_pool) < random_write_wakeup_bits)
@@ -1992,8 +1990,7 @@ static int random_fasync(int fd, struct file *filp, int on) · 100 unmodified lines
1992const struct file_operations random_fops = {1990const struct file_operations random_fops = {
1993 .read = random_read,1991 .read = random_read,
1994 .write = random_write,1992 .write = random_write,
1995 .get_poll_head = random_get_poll_head,1993 .poll = random_poll,
1996 .poll_mask = random_poll_mask,
1997 .unlocked_ioctl = random_ioctl,1994 .unlocked_ioctl = random_ioctl,
1998 .fasync = random_fasync,1995 .fasync = random_fasync,
1999 .llseek = noop_llseek,1996 .llseek = noop_llseek,
@@ -2326,7 +2323,7 @@ void add_hwgenerator_randomness(const char *buffer, size_t count, · 326 unmodified lines
2326 * We'll be woken up again once below random_write_wakeup_thresh,2323 * We'll be woken up again once below random_write_wakeup_thresh,
2327 * or when the calling thread is about to terminate.2324 * or when the calling thread is about to terminate.
2328 */2325 */
2329 wait_event_interruptible(random_wait, kthread_should_stop() ||2326 wait_event_interruptible(random_write_wait, kthread_should_stop() ||
2330 ENTROPY_BITS(&input_pool) <= random_write_wakeup_bits);2327 ENTROPY_BITS(&input_pool) <= random_write_wakeup_bits);
2331 mix_pool_bytes(poolp, buffer, count);2328 mix_pool_bytes(poolp, buffer, count);
2332 credit_entropy_bits(poolp, entropy);2329 credit_entropy_bits(poolp, entropy);
drivers/cpufreq/qcom-cpufreq-kryo.c+4−4
@@ -87,8 +87,8 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) · 86 unmodified lines
87 int ret;87 int ret;
88 88
89 cpu_dev = get_cpu_device(0);89 cpu_dev = get_cpu_device(0);
90 if (NULL == cpu_dev)90 if (!cpu_dev)
91 ret = -ENODEV;91 return -ENODEV;
92 92
93 msm8996_version = qcom_cpufreq_kryo_get_msm_id();93 msm8996_version = qcom_cpufreq_kryo_get_msm_id();
94 if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {94 if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {
@@ -97,8 +97,8 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) · 2 unmodified lines
97 }97 }
98 98
99 np = dev_pm_opp_of_get_opp_desc_node(cpu_dev);99 np = dev_pm_opp_of_get_opp_desc_node(cpu_dev);
100 if (IS_ERR(np))100 if (!np)
101 return PTR_ERR(np);101 return -ENOENT;
102 102
103 ret = of_device_is_compatible(np, "operating-points-v2-kryo-cpu");103 ret = of_device_is_compatible(np, "operating-points-v2-kryo-cpu");
104 if (!ret) {104 if (!ret) {
drivers/dax/super.c+8−0
@@ -86,6 +86,7 @@ bool __bdev_dax_supported(struct block_device *bdev, int blocksize) · 85 unmodified lines
86{86{
87 struct dax_device *dax_dev;87 struct dax_device *dax_dev;
88 bool dax_enabled = false;88 bool dax_enabled = false;
89 struct request_queue *q;
89 pgoff_t pgoff;90 pgoff_t pgoff;
90 int err, id;91 int err, id;
91 void *kaddr;92 void *kaddr;
@@ -99,6 +100,13 @@ bool __bdev_dax_supported(struct block_device *bdev, int blocksize) · 7 unmodified lines
99 return false;100 return false;
100 }101 }
101 102
103 q = bdev_get_queue(bdev);
104 if (!q || !blk_queue_dax(q)) {
105 pr_debug("%s: error: request queue doesn't support dax\n",
106 bdevname(bdev, buf));
107 return false;
108 }
109
102 err = bdev_dax_pgoff(bdev, 0, PAGE_SIZE, &pgoff);110 err = bdev_dax_pgoff(bdev, 0, PAGE_SIZE, &pgoff);
103 if (err) {111 if (err) {
104 pr_debug("%s: error: unaligned partition for dax\n",112 pr_debug("%s: error: unaligned partition for dax\n",
drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c+1−1
@@ -376,7 +376,7 @@ int amdgpu_fence_driver_start_ring(struct amdgpu_ring *ring, · 375 unmodified lines
376 struct amdgpu_device *adev = ring->adev;376 struct amdgpu_device *adev = ring->adev;
377 uint64_t index;377 uint64_t index;
378 378
379 if (ring != &adev->uvd.inst[ring->me].ring) {379 if (ring->funcs->type != AMDGPU_RING_TYPE_UVD) {
380 ring->fence_drv.cpu_addr = &adev->wb.wb[ring->fence_offs];380 ring->fence_drv.cpu_addr = &adev->wb.wb[ring->fence_offs];
381 ring->fence_drv.gpu_addr = adev->wb.gpu_addr + (ring->fence_offs * 4);381 ring->fence_drv.gpu_addr = adev->wb.gpu_addr + (ring->fence_offs * 4);
382 } else {382 } else {
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c+27−6
@@ -52,7 +52,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) · 51 unmodified lines
52 unsigned long bo_size;52 unsigned long bo_size;
53 const char *fw_name;53 const char *fw_name;
54 const struct common_firmware_header *hdr;54 const struct common_firmware_header *hdr;
55 unsigned version_major, version_minor, family_id;55 unsigned char fw_check;
56 int r;56 int r;
57 57
58 INIT_DELAYED_WORK(&adev->vcn.idle_work, amdgpu_vcn_idle_work_handler);58 INIT_DELAYED_WORK(&adev->vcn.idle_work, amdgpu_vcn_idle_work_handler);
@@ -83,12 +83,33 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) · 24 unmodified lines
83 83
84 hdr = (const struct common_firmware_header *)adev->vcn.fw->data;84 hdr = (const struct common_firmware_header *)adev->vcn.fw->data;
85 adev->vcn.fw_version = le32_to_cpu(hdr->ucode_version);85 adev->vcn.fw_version = le32_to_cpu(hdr->ucode_version);
86 family_id = le32_to_cpu(hdr->ucode_version) & 0xff;
87 version_major = (le32_to_cpu(hdr->ucode_version) >> 24) & 0xff;
88 version_minor = (le32_to_cpu(hdr->ucode_version) >> 8) & 0xff;
89 DRM_INFO("Found VCN firmware Version: %hu.%hu Family ID: %hu\n",
90 version_major, version_minor, family_id);
91 86
87 /* Bit 20-23, it is encode major and non-zero for new naming convention.
88 * This field is part of version minor and DRM_DISABLED_FLAG in old naming
89 * convention. Since the l:wq!atest version minor is 0x5B and DRM_DISABLED_FLAG
90 * is zero in old naming convention, this field is always zero so far.
91 * These four bits are used to tell which naming convention is present.
92 */
93 fw_check = (le32_to_cpu(hdr->ucode_version) >> 20) & 0xf;
94 if (fw_check) {
95 unsigned int dec_ver, enc_major, enc_minor, vep, fw_rev;
96
97 fw_rev = le32_to_cpu(hdr->ucode_version) & 0xfff;
98 enc_minor = (le32_to_cpu(hdr->ucode_version) >> 12) & 0xff;
99 enc_major = fw_check;
100 dec_ver = (le32_to_cpu(hdr->ucode_version) >> 24) & 0xf;
101 vep = (le32_to_cpu(hdr->ucode_version) >> 28) & 0xf;
102 DRM_INFO("Found VCN firmware Version ENC: %hu.%hu DEC: %hu VEP: %hu Revision: %hu\n",
103 enc_major, enc_minor, dec_ver, vep, fw_rev);
104 } else {
105 unsigned int version_major, version_minor, family_id;
106
107 family_id = le32_to_cpu(hdr->ucode_version) & 0xff;
108 version_major = (le32_to_cpu(hdr->ucode_version) >> 24) & 0xff;
109 version_minor = (le32_to_cpu(hdr->ucode_version) >> 8) & 0xff;
110 DRM_INFO("Found VCN firmware Version: %hu.%hu Family ID: %hu\n",
111 version_major, version_minor, family_id);
112 }
92 113
93 bo_size = AMDGPU_GPU_PAGE_ALIGN(le32_to_cpu(hdr->ucode_size_bytes) + 8)114 bo_size = AMDGPU_GPU_PAGE_ALIGN(le32_to_cpu(hdr->ucode_size_bytes) + 8)
94 + AMDGPU_VCN_STACK_SIZE + AMDGPU_VCN_HEAP_SIZE115 + AMDGPU_VCN_STACK_SIZE + AMDGPU_VCN_HEAP_SIZE
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c+5−3
@@ -1463,7 +1463,9 @@ static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev, · 1462 unmodified lines
1463 uint64_t count;1463 uint64_t count;
1464 1464
1465 max_entries = min(max_entries, 16ull * 1024ull);1465 max_entries = min(max_entries, 16ull * 1024ull);
1466 for (count = 1; count < max_entries; ++count) {1466 for (count = 1;
1467 count < max_entries / (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE);
1468 ++count) {
1467 uint64_t idx = pfn + count;1469 uint64_t idx = pfn + count;
1468 1470
1469 if (pages_addr[idx] !=1471 if (pages_addr[idx] !=
@@ -1476,7 +1478,7 @@ static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev, · 6 unmodified lines
1476 dma_addr = pages_addr;1478 dma_addr = pages_addr;
1477 } else {1479 } else {
1478 addr = pages_addr[pfn];1480 addr = pages_addr[pfn];
1479 max_entries = count;1481 max_entries = count * (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE);
1480 }1482 }
1481 1483
1482 } else if (flags & AMDGPU_PTE_VALID) {1484 } else if (flags & AMDGPU_PTE_VALID) {
@@ -1491,7 +1493,7 @@ static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev, · 8 unmodified lines
1491 if (r)1493 if (r)
1492 return r;1494 return r;
1493 1495
1494 pfn += last - start + 1;1496 pfn += (last - start + 1) / (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE);
1495 if (nodes && nodes->size == pfn) {1497 if (nodes && nodes->size == pfn) {
1496 pfn = 0;1498 pfn = 0;
1497 ++nodes;1499 ++nodes;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c+8−8
@@ -3928,10 +3928,11 @@ static void amdgpu_dm_do_flip(struct drm_crtc *crtc, · 3927 unmodified lines
3928 if (acrtc->base.state->event)3928 if (acrtc->base.state->event)
3929 prepare_flip_isr(acrtc);3929 prepare_flip_isr(acrtc);
3930 3930
3931 spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
3932
3931 surface_updates->surface = dc_stream_get_status(acrtc_state->stream)->plane_states[0];3933 surface_updates->surface = dc_stream_get_status(acrtc_state->stream)->plane_states[0];
3932 surface_updates->flip_addr = &addr;3934 surface_updates->flip_addr = &addr;
3933 3935
3934
3935 dc_commit_updates_for_stream(adev->dm.dc,3936 dc_commit_updates_for_stream(adev->dm.dc,
3936 surface_updates,3937 surface_updates,
3937 1,3938 1,
@@ -3944,9 +3945,6 @@ static void amdgpu_dm_do_flip(struct drm_crtc *crtc, · 6 unmodified lines
3944 __func__,3945 __func__,
3945 addr.address.grph.addr.high_part,3946 addr.address.grph.addr.high_part,
3946 addr.address.grph.addr.low_part);3947 addr.address.grph.addr.low_part);
3947
3948
3949 spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
3950}3948}
3951 3949
3952/*3950/*
@@ -4206,6 +4204,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) · 253 unmodified lines
4206 struct drm_connector *connector;4204 struct drm_connector *connector;
4207 struct drm_connector_state *old_con_state, *new_con_state;4205 struct drm_connector_state *old_con_state, *new_con_state;
4208 struct dm_crtc_state *dm_old_crtc_state, *dm_new_crtc_state;4206 struct dm_crtc_state *dm_old_crtc_state, *dm_new_crtc_state;
4207 int crtc_disable_count = 0;
4209 4208
4210 drm_atomic_helper_update_legacy_modeset_state(dev, state);4209 drm_atomic_helper_update_legacy_modeset_state(dev, state);
4211 4210
@@ -4410,6 +4409,9 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) · 198 unmodified lines
4410 struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);4409 struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
4411 bool modeset_needed;4410 bool modeset_needed;
4412 4411
4412 if (old_crtc_state->active && !new_crtc_state->active)
4413 crtc_disable_count++;
4414
4413 dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);4415 dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
4414 dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);4416 dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
4415 modeset_needed = modeset_required(4417 modeset_needed = modeset_required(
@@ -4463,11 +4465,9 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) · 47 unmodified lines
4463 * so we can put the GPU into runtime suspend if we're not driving any4465 * so we can put the GPU into runtime suspend if we're not driving any
4464 * displays anymore4466 * displays anymore
4465 */4467 */
4468 for (i = 0; i < crtc_disable_count; i++)
4469 pm_runtime_put_autosuspend(dev->dev);
4466 pm_runtime_mark_last_busy(dev->dev);4470 pm_runtime_mark_last_busy(dev->dev);
4467 for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
4468 if (old_crtc_state->active && !new_crtc_state->active)
4469 pm_runtime_put_autosuspend(dev->dev);
4470 }
4471}4471}
4472 4472
4473 4473
drivers/gpu/drm/arm/malidp_drv.c+2−1
@@ -278,7 +278,6 @@ static int malidp_init(struct drm_device *drm) · 277 unmodified lines
278 278
279static void malidp_fini(struct drm_device *drm)279static void malidp_fini(struct drm_device *drm)
280{280{
281 drm_atomic_helper_shutdown(drm);
282 drm_mode_config_cleanup(drm);281 drm_mode_config_cleanup(drm);
283}282}
284 283
@@ -646,6 +645,7 @@ vblank_fail: · 361 unmodified lines
646 malidp_de_irq_fini(drm);645 malidp_de_irq_fini(drm);
647 drm->irq_enabled = false;646 drm->irq_enabled = false;
648irq_init_fail:647irq_init_fail:
648 drm_atomic_helper_shutdown(drm);
649 component_unbind_all(dev, drm);649 component_unbind_all(dev, drm);
650bind_fail:650bind_fail:
651 of_node_put(malidp->crtc.port);651 of_node_put(malidp->crtc.port);
@@ -681,6 +681,7 @@ static void malidp_unbind(struct device *dev) · 29 unmodified lines
681 malidp_se_irq_fini(drm);681 malidp_se_irq_fini(drm);
682 malidp_de_irq_fini(drm);682 malidp_de_irq_fini(drm);
683 drm->irq_enabled = false;683 drm->irq_enabled = false;
684 drm_atomic_helper_shutdown(drm);
684 component_unbind_all(dev, drm);685 component_unbind_all(dev, drm);
685 of_node_put(malidp->crtc.port);686 of_node_put(malidp->crtc.port);
686 malidp->crtc.port = NULL;687 malidp->crtc.port = NULL;
drivers/gpu/drm/arm/malidp_hw.c+2−1
@@ -634,7 +634,8 @@ const struct malidp_hw malidp_device[MALIDP_MAX_DEVICES] = { · 633 unmodified lines
634 .vsync_irq = MALIDP500_DE_IRQ_VSYNC,634 .vsync_irq = MALIDP500_DE_IRQ_VSYNC,
635 },635 },
636 .se_irq_map = {636 .se_irq_map = {
637 .irq_mask = MALIDP500_SE_IRQ_CONF_MODE,637 .irq_mask = MALIDP500_SE_IRQ_CONF_MODE |
638 MALIDP500_SE_IRQ_GLOBAL,
638 .vsync_irq = 0,639 .vsync_irq = 0,
639 },640 },
640 .dc_irq_map = {641 .dc_irq_map = {
drivers/gpu/drm/arm/malidp_planes.c+6−3
@@ -23,6 +23,7 @@ · 22 unmodified lines
23 23
24/* Layer specific register offsets */24/* Layer specific register offsets */
25#define MALIDP_LAYER_FORMAT 0x00025#define MALIDP_LAYER_FORMAT 0x000
26#define LAYER_FORMAT_MASK 0x3f
26#define MALIDP_LAYER_CONTROL 0x00427#define MALIDP_LAYER_CONTROL 0x004
27#define LAYER_ENABLE (1 << 0)28#define LAYER_ENABLE (1 << 0)
28#define LAYER_FLOWCFG_MASK 729#define LAYER_FLOWCFG_MASK 7
@@ -235,8 +236,8 @@ static int malidp_de_plane_check(struct drm_plane *plane, · 206 unmodified lines
235 if (state->rotation & MALIDP_ROTATED_MASK) {236 if (state->rotation & MALIDP_ROTATED_MASK) {
236 int val;237 int val;
237 238
238 val = mp->hwdev->hw->rotmem_required(mp->hwdev, state->crtc_h,239 val = mp->hwdev->hw->rotmem_required(mp->hwdev, state->crtc_w,
239 state->crtc_w,240 state->crtc_h,
240 fb->format->format);241 fb->format->format);
241 if (val < 0)242 if (val < 0)
242 return val;243 return val;
@@ -337,7 +338,9 @@ static void malidp_de_plane_update(struct drm_plane *plane, · 94 unmodified lines
337 dest_w = plane->state->crtc_w;338 dest_w = plane->state->crtc_w;
338 dest_h = plane->state->crtc_h;339 dest_h = plane->state->crtc_h;
339 340
340 malidp_hw_write(mp->hwdev, ms->format, mp->layer->base);341 val = malidp_hw_read(mp->hwdev, mp->layer->base);
342 val = (val & ~LAYER_FORMAT_MASK) | ms->format;
343 malidp_hw_write(mp->hwdev, val, mp->layer->base);
341 344
342 for (i = 0; i < ms->n_planes; i++) {345 for (i = 0; i < ms->n_planes; i++) {
343 /* calculate the offset for the layer's plane registers */346 /* calculate the offset for the layer's plane registers */
drivers/gpu/drm/i915/i915_drv.h+0−3
@@ -2245,9 +2245,6 @@ static inline struct scatterlist *____sg_next(struct scatterlist *sg) · 2244 unmodified lines
2245 **/2245 **/
2246static inline struct scatterlist *__sg_next(struct scatterlist *sg)2246static inline struct scatterlist *__sg_next(struct scatterlist *sg)
2247{2247{
2248#ifdef CONFIG_DEBUG_SG
2249 BUG_ON(sg->sg_magic != SG_MAGIC);
2250#endif
2251 return sg_is_last(sg) ? NULL : ____sg_next(sg);2248 return sg_is_last(sg) ? NULL : ____sg_next(sg);
2252}2249}
2253 2250
drivers/gpu/drm/meson/meson_drv.c+8−4
@@ -197,8 +197,10 @@ static int meson_drv_bind_master(struct device *dev, bool has_components) · 196 unmodified lines
197 priv->io_base = regs;197 priv->io_base = regs;
198 198
199 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hhi");199 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hhi");
200 if (!res)200 if (!res) {
201 return -EINVAL;201 ret = -EINVAL;
202 goto free_drm;
203 }
202 /* Simply ioremap since it may be a shared register zone */204 /* Simply ioremap since it may be a shared register zone */
203 regs = devm_ioremap(dev, res->start, resource_size(res));205 regs = devm_ioremap(dev, res->start, resource_size(res));
204 if (!regs) {206 if (!regs) {
@@ -215,8 +217,10 @@ static int meson_drv_bind_master(struct device *dev, bool has_components) · 10 unmodified lines
215 }217 }
216 218
217 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dmc");219 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dmc");
218 if (!res)220 if (!res) {
219 return -EINVAL;221 ret = -EINVAL;
222 goto free_drm;
223 }
220 /* Simply ioremap since it may be a shared register zone */224 /* Simply ioremap since it may be a shared register zone */
221 regs = devm_ioremap(dev, res->start, resource_size(res));225 regs = devm_ioremap(dev, res->start, resource_size(res));
222 if (!regs) {226 if (!regs) {
drivers/i2c/algos/i2c-algo-bit.c+4−4
@@ -647,10 +647,10 @@ static int __i2c_bit_add_bus(struct i2c_adapter *adap, · 646 unmodified lines
647 if (bit_adap->getscl == NULL)647 if (bit_adap->getscl == NULL)
648 adap->quirks = &i2c_bit_quirk_no_clk_stretch;648 adap->quirks = &i2c_bit_quirk_no_clk_stretch;
649 649
650 /* Bring bus to a known state. Looks like STOP if bus is not free yet */650 /*
651 setscl(bit_adap, 1);651 * We tried forcing SCL/SDA to an initial state here. But that caused a
652 udelay(bit_adap->udelay);652 * regression, sadly. Check Bugzilla #200045 for details.
653 setsda(bit_adap, 1);653 */
654 654
655 ret = add_adapter(adap);655 ret = add_adapter(adap);
656 if (ret < 0)656 if (ret < 0)
drivers/i2c/busses/i2c-gpio.c+2−2
@@ -279,9 +279,9 @@ static int i2c_gpio_probe(struct platform_device *pdev) · 278 unmodified lines
279 * required for an I2C bus.279 * required for an I2C bus.
280 */280 */
281 if (pdata->scl_is_open_drain)281 if (pdata->scl_is_open_drain)
282 gflags = GPIOD_OUT_LOW;282 gflags = GPIOD_OUT_HIGH;
283 else283 else
284 gflags = GPIOD_OUT_LOW_OPEN_DRAIN;284 gflags = GPIOD_OUT_HIGH_OPEN_DRAIN;
285 priv->scl = i2c_gpio_get_desc(dev, "scl", 1, gflags);285 priv->scl = i2c_gpio_get_desc(dev, "scl", 1, gflags);
286 if (IS_ERR(priv->scl))286 if (IS_ERR(priv->scl))
287 return PTR_ERR(priv->scl);287 return PTR_ERR(priv->scl);
drivers/i2c/i2c-core-smbus.c+9−5
@@ -465,15 +465,18 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr, · 464 unmodified lines
465 465
466 status = i2c_transfer(adapter, msg, num);466 status = i2c_transfer(adapter, msg, num);
467 if (status < 0)467 if (status < 0)
468 return status;468 goto cleanup;
469 if (status != num)469 if (status != num) {
470 return -EIO;470 status = -EIO;
471 goto cleanup;
472 }
473 status = 0;
471 474
472 /* Check PEC if last message is a read */475 /* Check PEC if last message is a read */
473 if (i && (msg[num-1].flags & I2C_M_RD)) {476 if (i && (msg[num-1].flags & I2C_M_RD)) {
474 status = i2c_smbus_check_pec(partial_pec, &msg[num-1]);477 status = i2c_smbus_check_pec(partial_pec, &msg[num-1]);
475 if (status < 0)478 if (status < 0)
476 return status;479 goto cleanup;
477 }480 }
478 481
479 if (read_write == I2C_SMBUS_READ)482 if (read_write == I2C_SMBUS_READ)
@@ -499,12 +502,13 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr, · 19 unmodified lines
499 break;502 break;
500 }503 }
501 504
505cleanup:
502 if (msg[0].flags & I2C_M_DMA_SAFE)506 if (msg[0].flags & I2C_M_DMA_SAFE)
503 kfree(msg[0].buf);507 kfree(msg[0].buf);
504 if (msg[1].flags & I2C_M_DMA_SAFE)508 if (msg[1].flags & I2C_M_DMA_SAFE)
505 kfree(msg[1].buf);509 kfree(msg[1].buf);
506 510
507 return 0;511 return status;
508}512}
509 513
510/**514/**
drivers/iio/accel/mma8452.c+1−1
@@ -1053,7 +1053,7 @@ static irqreturn_t mma8452_interrupt(int irq, void *p) · 1052 unmodified lines
1053 if (src < 0)1053 if (src < 0)
1054 return IRQ_NONE;1054 return IRQ_NONE;
1055 1055
1056 if (!(src & data->chip_info->enabled_events))1056 if (!(src & (data->chip_info->enabled_events | MMA8452_INT_DRDY)))
1057 return IRQ_NONE;1057 return IRQ_NONE;
1058 1058
1059 if (src & MMA8452_INT_DRDY) {1059 if (src & MMA8452_INT_DRDY) {
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c+2−0
@@ -959,6 +959,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name, · 958 unmodified lines
959 }959 }
960 960
961 irq_type = irqd_get_trigger_type(desc);961 irq_type = irqd_get_trigger_type(desc);
962 if (!irq_type)
963 irq_type = IRQF_TRIGGER_RISING;
962 if (irq_type == IRQF_TRIGGER_RISING)964 if (irq_type == IRQF_TRIGGER_RISING)
963 st->irq_mask = INV_MPU6050_ACTIVE_HIGH;965 st->irq_mask = INV_MPU6050_ACTIVE_HIGH;
964 else if (irq_type == IRQF_TRIGGER_FALLING)966 else if (irq_type == IRQF_TRIGGER_FALLING)
drivers/iio/light/tsl2772.c+2−0
@@ -582,6 +582,8 @@ static int tsl2772_als_calibrate(struct iio_dev *indio_dev) · 581 unmodified lines
582 "%s: failed to get lux\n", __func__);582 "%s: failed to get lux\n", __func__);
583 return lux_val;583 return lux_val;
584 }584 }
585 if (lux_val == 0)
586 return -ERANGE;
585 587
586 ret = (chip->settings.als_cal_target * chip->settings.als_gain_trim) /588 ret = (chip->settings.als_cal_target * chip->settings.als_gain_trim) /
587 lux_val;589 lux_val;
drivers/iio/pressure/bmp280-core.c+2−3
@@ -415,10 +415,9 @@ static int bmp280_read_humid(struct bmp280_data *data, int *val, int *val2) · 414 unmodified lines
415 }415 }
416 comp_humidity = bmp280_compensate_humidity(data, adc_humidity);416 comp_humidity = bmp280_compensate_humidity(data, adc_humidity);
417 417
418 *val = comp_humidity;418 *val = comp_humidity * 1000 / 1024;
419 *val2 = 1024;
420 419
421 return IIO_VAL_FRACTIONAL;420 return IIO_VAL_INT;
422}421}
423 422
424static int bmp280_read_raw(struct iio_dev *indio_dev,423static int bmp280_read_raw(struct iio_dev *indio_dev,
drivers/infiniband/hw/mlx5/main.c+1−1
@@ -6113,7 +6113,7 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev) · 6112 unmodified lines
6113 dev->num_ports = max(MLX5_CAP_GEN(mdev, num_ports),6113 dev->num_ports = max(MLX5_CAP_GEN(mdev, num_ports),
6114 MLX5_CAP_GEN(mdev, num_vhca_ports));6114 MLX5_CAP_GEN(mdev, num_vhca_ports));
6115 6115
6116 if (MLX5_VPORT_MANAGER(mdev) &&6116 if (MLX5_ESWITCH_MANAGER(mdev) &&
6117 mlx5_ib_eswitch_mode(mdev->priv.eswitch) == SRIOV_OFFLOADS) {6117 mlx5_ib_eswitch_mode(mdev->priv.eswitch) == SRIOV_OFFLOADS) {
6118 dev->rep = mlx5_ib_vport_rep(mdev->priv.eswitch, 0);6118 dev->rep = mlx5_ib_vport_rep(mdev->priv.eswitch, 0);
6119 6119
drivers/input/input-mt.c+8−4
@@ -131,8 +131,10 @@ EXPORT_SYMBOL(input_mt_destroy_slots); · 130 unmodified lines
131 * inactive, or if the tool type is changed, a new tracking id is131 * inactive, or if the tool type is changed, a new tracking id is
132 * assigned to the slot. The tool type is only reported if the132 * assigned to the slot. The tool type is only reported if the
133 * corresponding absbit field is set.133 * corresponding absbit field is set.
134 *
135 * Returns true if contact is active.
134 */136 */
135void input_mt_report_slot_state(struct input_dev *dev,137bool input_mt_report_slot_state(struct input_dev *dev,
136 unsigned int tool_type, bool active)138 unsigned int tool_type, bool active)
137{139{
138 struct input_mt *mt = dev->mt;140 struct input_mt *mt = dev->mt;
@@ -140,22 +142,24 @@ void input_mt_report_slot_state(struct input_dev *dev, · 1 unmodified line
140 int id;142 int id;
141 143
142 if (!mt)144 if (!mt)
143 return;145 return false;
144 146
145 slot = &mt->slots[mt->slot];147 slot = &mt->slots[mt->slot];
146 slot->frame = mt->frame;148 slot->frame = mt->frame;
147 149
148 if (!active) {150 if (!active) {
149 input_event(dev, EV_ABS, ABS_MT_TRACKING_ID, -1);151 input_event(dev, EV_ABS, ABS_MT_TRACKING_ID, -1);
150 return;152 return false;
151 }153 }
152 154
153 id = input_mt_get_value(slot, ABS_MT_TRACKING_ID);155 id = input_mt_get_value(slot, ABS_MT_TRACKING_ID);
154 if (id < 0 || input_mt_get_value(slot, ABS_MT_TOOL_TYPE) != tool_type)156 if (id < 0)
155 id = input_mt_new_trkid(mt);157 id = input_mt_new_trkid(mt);
156 158
157 input_event(dev, EV_ABS, ABS_MT_TRACKING_ID, id);159 input_event(dev, EV_ABS, ABS_MT_TRACKING_ID, id);
158 input_event(dev, EV_ABS, ABS_MT_TOOL_TYPE, tool_type);160 input_event(dev, EV_ABS, ABS_MT_TOOL_TYPE, tool_type);
161
162 return true;
159}163}
160EXPORT_SYMBOL(input_mt_report_slot_state);164EXPORT_SYMBOL(input_mt_report_slot_state);
161 165
drivers/input/joystick/xpad.c+1−1
@@ -125,7 +125,7 @@ static const struct xpad_device { · 124 unmodified lines
125 u8 mapping;125 u8 mapping;
126 u8 xtype;126 u8 xtype;
127} xpad_device[] = {127} xpad_device[] = {
128 { 0x0079, 0x18d4, "GPD Win 2 Controller", 0, XTYPE_XBOX360 },128 { 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 },
129 { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },129 { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },
130 { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },130 { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },
131 { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },131 { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
drivers/input/keyboard/goldfish_events.c+5−4
@@ -45,7 +45,7 @@ struct event_dev { · 44 unmodified lines
45static irqreturn_t events_interrupt(int irq, void *dev_id)45static irqreturn_t events_interrupt(int irq, void *dev_id)
46{46{
47 struct event_dev *edev = dev_id;47 struct event_dev *edev = dev_id;
48 unsigned type, code, value;48 unsigned int type, code, value;
49 49
50 type = __raw_readl(edev->addr + REG_READ);50 type = __raw_readl(edev->addr + REG_READ);
51 code = __raw_readl(edev->addr + REG_READ);51 code = __raw_readl(edev->addr + REG_READ);
@@ -57,7 +57,7 @@ static irqreturn_t events_interrupt(int irq, void *dev_id) · 5 unmodified lines
57}57}
58 58
59static void events_import_bits(struct event_dev *edev,59static void events_import_bits(struct event_dev *edev,
60 unsigned long bits[], unsigned type, size_t count)60 unsigned long bits[], unsigned int type, size_t count)
61{61{
62 void __iomem *addr = edev->addr;62 void __iomem *addr = edev->addr;
63 int i, j;63 int i, j;
@@ -99,6 +99,7 @@ static void events_import_abs_params(struct event_dev *edev) · 35 unmodified lines
99 99
100 for (j = 0; j < ARRAY_SIZE(val); j++) {100 for (j = 0; j < ARRAY_SIZE(val); j++) {
101 int offset = (i * ARRAY_SIZE(val) + j) * sizeof(u32);101 int offset = (i * ARRAY_SIZE(val) + j) * sizeof(u32);
102
102 val[j] = __raw_readl(edev->addr + REG_DATA + offset);103 val[j] = __raw_readl(edev->addr + REG_DATA + offset);
103 }104 }
104 105
@@ -112,7 +113,7 @@ static int events_probe(struct platform_device *pdev) · 7 unmodified lines
112 struct input_dev *input_dev;113 struct input_dev *input_dev;
113 struct event_dev *edev;114 struct event_dev *edev;
114 struct resource *res;115 struct resource *res;
115 unsigned keymapnamelen;116 unsigned int keymapnamelen;
116 void __iomem *addr;117 void __iomem *addr;
117 int irq;118 int irq;
118 int i;119 int i;
@@ -150,7 +151,7 @@ static int events_probe(struct platform_device *pdev) · 31 unmodified lines
150 for (i = 0; i < keymapnamelen; i++)151 for (i = 0; i < keymapnamelen; i++)
151 edev->name[i] = __raw_readb(edev->addr + REG_DATA + i);152 edev->name[i] = __raw_readb(edev->addr + REG_DATA + i);
152 153
153 pr_debug("events_probe() keymap=%s\n", edev->name);154 pr_debug("%s: keymap=%s\n", __func__, edev->name);
154 155
155 input_dev->name = edev->name;156 input_dev->name = edev->name;
156 input_dev->id.bustype = BUS_HOST;157 input_dev->id.bustype = BUS_HOST;
drivers/input/misc/Kconfig+10−0
@@ -841,4 +841,14 @@ config INPUT_RAVE_SP_PWRBUTTON · 840 unmodified lines
841 To compile this driver as a module, choose M here: the841 To compile this driver as a module, choose M here: the
842 module will be called rave-sp-pwrbutton.842 module will be called rave-sp-pwrbutton.
843 843
844config INPUT_SC27XX_VIBRA
845 tristate "Spreadtrum sc27xx vibrator support"
846 depends on MFD_SC27XX_PMIC || COMPILE_TEST
847 select INPUT_FF_MEMLESS
848 help
849 This option enables support for Spreadtrum sc27xx vibrator driver.
850
851 To compile this driver as a module, choose M here. The module will
852 be called sc27xx_vibra.
853
844endif854endif
drivers/input/misc/Makefile+1−0
@@ -66,6 +66,7 @@ obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o · 65 unmodified lines
66obj-$(CONFIG_INPUT_AXP20X_PEK) += axp20x-pek.o66obj-$(CONFIG_INPUT_AXP20X_PEK) += axp20x-pek.o
67obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER) += rotary_encoder.o67obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER) += rotary_encoder.o
68obj-$(CONFIG_INPUT_RK805_PWRKEY) += rk805-pwrkey.o68obj-$(CONFIG_INPUT_RK805_PWRKEY) += rk805-pwrkey.o
69obj-$(CONFIG_INPUT_SC27XX_VIBRA) += sc27xx-vibra.o
69obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o70obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o
70obj-$(CONFIG_INPUT_SIRFSOC_ONKEY) += sirfsoc-onkey.o71obj-$(CONFIG_INPUT_SIRFSOC_ONKEY) += sirfsoc-onkey.o
71obj-$(CONFIG_INPUT_SOC_BUTTON_ARRAY) += soc_button_array.o72obj-$(CONFIG_INPUT_SOC_BUTTON_ARRAY) += soc_button_array.o
drivers/input/misc/sc27xx-vibra.c+154−0
@@ -0,0 +1,154 @@
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2018 Spreadtrum Communications Inc.
4 */
5
6#include <linux/module.h>
7#include <linux/of_address.h>
8#include <linux/platform_device.h>
9#include <linux/regmap.h>
10#include <linux/input.h>
11#include <linux/workqueue.h>
12
13#define CUR_DRV_CAL_SEL GENMASK(13, 12)
14#define SLP_LDOVIBR_PD_EN BIT(9)
15#define LDO_VIBR_PD BIT(8)
16
17struct vibra_info {
18 struct input_dev *input_dev;
19 struct work_struct play_work;
20 struct regmap *regmap;
21 u32 base;
22 u32 strength;
23 bool enabled;
24};
25
26static void sc27xx_vibra_set(struct vibra_info *info, bool on)
27{
28 if (on) {
29 regmap_update_bits(info->regmap, info->base, LDO_VIBR_PD, 0);
30 regmap_update_bits(info->regmap, info->base,
31 SLP_LDOVIBR_PD_EN, 0);
32 info->enabled = true;
33 } else {
34 regmap_update_bits(info->regmap, info->base, LDO_VIBR_PD,
35 LDO_VIBR_PD);
36 regmap_update_bits(info->regmap, info->base,
37 SLP_LDOVIBR_PD_EN, SLP_LDOVIBR_PD_EN);
38 info->enabled = false;
39 }
40}
41
42static int sc27xx_vibra_hw_init(struct vibra_info *info)
43{
44 return regmap_update_bits(info->regmap, info->base, CUR_DRV_CAL_SEL, 0);
45}
46
47static void sc27xx_vibra_play_work(struct work_struct *work)
48{
49 struct vibra_info *info = container_of(work, struct vibra_info,
50 play_work);
51
52 if (info->strength && !info->enabled)
53 sc27xx_vibra_set(info, true);
54 else if (info->strength == 0 && info->enabled)
55 sc27xx_vibra_set(info, false);
56}
57
58static int sc27xx_vibra_play(struct input_dev *input, void *data,
59 struct ff_effect *effect)
60{
61 struct vibra_info *info = input_get_drvdata(input);
62
63 info->strength = effect->u.rumble.weak_magnitude;
64 schedule_work(&info->play_work);
65
66 return 0;
67}
68
69static void sc27xx_vibra_close(struct input_dev *input)
70{
71 struct vibra_info *info = input_get_drvdata(input);
72
73 cancel_work_sync(&info->play_work);
74 if (info->enabled)
75 sc27xx_vibra_set(info, false);
76}
77
78static int sc27xx_vibra_probe(struct platform_device *pdev)
79{
80 struct vibra_info *info;
81 int error;
82
83 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
84 if (!info)
85 return -ENOMEM;
86
87 info->regmap = dev_get_regmap(pdev->dev.parent, NULL);
88 if (!info->regmap) {
89 dev_err(&pdev->dev, "failed to get vibrator regmap.\n");
90 return -ENODEV;
91 }
92
93 error = device_property_read_u32(&pdev->dev, "reg", &info->base);
94 if (error) {
95 dev_err(&pdev->dev, "failed to get vibrator base address.\n");
96 return error;
97 }
98
99 info->input_dev = devm_input_allocate_device(&pdev->dev);
100 if (!info->input_dev) {
101 dev_err(&pdev->dev, "failed to allocate input device.\n");
102 return -ENOMEM;
103 }
104
105 info->input_dev->name = "sc27xx:vibrator";
106 info->input_dev->id.version = 0;
107 info->input_dev->close = sc27xx_vibra_close;
108
109 input_set_drvdata(info->input_dev, info);
110 input_set_capability(info->input_dev, EV_FF, FF_RUMBLE);
111 INIT_WORK(&info->play_work, sc27xx_vibra_play_work);
112 info->enabled = false;
113
114 error = sc27xx_vibra_hw_init(info);
115 if (error) {
116 dev_err(&pdev->dev, "failed to initialize the vibrator.\n");
117 return error;
118 }
119
120 error = input_ff_create_memless(info->input_dev, NULL,
121 sc27xx_vibra_play);
122 if (error) {
123 dev_err(&pdev->dev, "failed to register vibrator to FF.\n");
124 return error;
125 }
126
127 error = input_register_device(info->input_dev);
128 if (error) {
129 dev_err(&pdev->dev, "failed to register input device.\n");
130 return error;
131 }
132
133 return 0;
134}
135
136static const struct of_device_id sc27xx_vibra_of_match[] = {
137 { .compatible = "sprd,sc2731-vibrator", },
138 {}
139};
140MODULE_DEVICE_TABLE(of, sc27xx_vibra_of_match);
141
142static struct platform_driver sc27xx_vibra_driver = {
143 .driver = {
144 .name = "sc27xx-vibrator",
145 .of_match_table = sc27xx_vibra_of_match,
146 },
147 .probe = sc27xx_vibra_probe,
148};
149
150module_platform_driver(sc27xx_vibra_driver);
151
152MODULE_DESCRIPTION("Spreadtrum SC27xx Vibrator Driver");
153MODULE_LICENSE("GPL v2");
154MODULE_AUTHOR("Xiaotong Lu <xiaotong.lu@spreadtrum.com>");
drivers/input/mouse/elan_i2c.h+2−0
@@ -27,6 +27,8 @@ · 26 unmodified lines
27#define ETP_DISABLE_POWER 0x000127#define ETP_DISABLE_POWER 0x0001
28#define ETP_PRESSURE_OFFSET 2528#define ETP_PRESSURE_OFFSET 25
29 29
30#define ETP_CALIBRATE_MAX_LEN 3
31
30/* IAP Firmware handling */32/* IAP Firmware handling */
31#define ETP_PRODUCT_ID_FORMAT_STRING "%d.0"33#define ETP_PRODUCT_ID_FORMAT_STRING "%d.0"
32#define ETP_FW_NAME "elan_i2c_" ETP_PRODUCT_ID_FORMAT_STRING ".bin"34#define ETP_FW_NAME "elan_i2c_" ETP_PRODUCT_ID_FORMAT_STRING ".bin"
drivers/input/mouse/elan_i2c_core.c+2−1
@@ -613,7 +613,7 @@ static ssize_t calibrate_store(struct device *dev, · 612 unmodified lines
613 int tries = 20;613 int tries = 20;
614 int retval;614 int retval;
615 int error;615 int error;
616 u8 val[3];616 u8 val[ETP_CALIBRATE_MAX_LEN];
617 617
618 retval = mutex_lock_interruptible(&data->sysfs_mutex);618 retval = mutex_lock_interruptible(&data->sysfs_mutex);
619 if (retval)619 if (retval)
@@ -1345,6 +1345,7 @@ static const struct acpi_device_id elan_acpi_id[] = { · 725 unmodified lines
1345 { "ELAN060C", 0 },1345 { "ELAN060C", 0 },
1346 { "ELAN0611", 0 },1346 { "ELAN0611", 0 },
1347 { "ELAN0612", 0 },1347 { "ELAN0612", 0 },
1348 { "ELAN0618", 0 },
1348 { "ELAN1000", 0 },1349 { "ELAN1000", 0 },
1349 { }1350 { }
1350};1351};
drivers/input/mouse/elan_i2c_smbus.c+8−2
@@ -56,7 +56,7 @@ · 55 unmodified lines
56static int elan_smbus_initialize(struct i2c_client *client)56static int elan_smbus_initialize(struct i2c_client *client)
57{57{
58 u8 check[ETP_SMBUS_HELLOPACKET_LEN] = { 0x55, 0x55, 0x55, 0x55, 0x55 };58 u8 check[ETP_SMBUS_HELLOPACKET_LEN] = { 0x55, 0x55, 0x55, 0x55, 0x55 };
59 u8 values[ETP_SMBUS_HELLOPACKET_LEN] = { 0, 0, 0, 0, 0 };59 u8 values[I2C_SMBUS_BLOCK_MAX] = {0};
60 int len, error;60 int len, error;
61 61
62 /* Get hello packet */62 /* Get hello packet */
@@ -117,12 +117,16 @@ static int elan_smbus_calibrate(struct i2c_client *client) · 54 unmodified lines
117static int elan_smbus_calibrate_result(struct i2c_client *client, u8 *val)117static int elan_smbus_calibrate_result(struct i2c_client *client, u8 *val)
118{118{
119 int error;119 int error;
120 u8 buf[I2C_SMBUS_BLOCK_MAX] = {0};
121
122 BUILD_BUG_ON(ETP_CALIBRATE_MAX_LEN > sizeof(buf));
120 123
121 error = i2c_smbus_read_block_data(client,124 error = i2c_smbus_read_block_data(client,
122 ETP_SMBUS_CALIBRATE_QUERY, val);125 ETP_SMBUS_CALIBRATE_QUERY, buf);
123 if (error < 0)126 if (error < 0)
124 return error;127 return error;
125 128
129 memcpy(val, buf, ETP_CALIBRATE_MAX_LEN);
126 return 0;130 return 0;
127}131}
128 132
@@ -472,6 +476,8 @@ static int elan_smbus_get_report(struct i2c_client *client, u8 *report) · 343 unmodified lines
472{476{
473 int len;477 int len;
474 478
479 BUILD_BUG_ON(I2C_SMBUS_BLOCK_MAX > ETP_SMBUS_REPORT_LEN);
480
475 len = i2c_smbus_read_block_data(client,481 len = i2c_smbus_read_block_data(client,
476 ETP_SMBUS_PACKET_QUERY,482 ETP_SMBUS_PACKET_QUERY,
477 &report[ETP_SMBUS_REPORT_OFFSET]);483 &report[ETP_SMBUS_REPORT_OFFSET]);
drivers/input/mouse/elantech.c+9−2
@@ -799,7 +799,7 @@ static int elantech_packet_check_v4(struct psmouse *psmouse) · 798 unmodified lines
799 else if (ic_version == 7 && etd->info.samples[1] == 0x2A)799 else if (ic_version == 7 && etd->info.samples[1] == 0x2A)
800 sanity_check = ((packet[3] & 0x1c) == 0x10);800 sanity_check = ((packet[3] & 0x1c) == 0x10);
801 else801 else
802 sanity_check = ((packet[0] & 0x0c) == 0x04 &&802 sanity_check = ((packet[0] & 0x08) == 0x00 &&
803 (packet[3] & 0x1c) == 0x10);803 (packet[3] & 0x1c) == 0x10);
804 804
805 if (!sanity_check)805 if (!sanity_check)
@@ -1175,6 +1175,12 @@ static const struct dmi_system_id elantech_dmi_has_middle_button[] = { · 369 unmodified lines
1175 { }1175 { }
1176};1176};
1177 1177
1178static const char * const middle_button_pnp_ids[] = {
1179 "LEN2131", /* ThinkPad P52 w/ NFC */
1180 "LEN2132", /* ThinkPad P52 */
1181 NULL
1182};
1183
1178/*1184/*
1179 * Set the appropriate event bits for the input subsystem1185 * Set the appropriate event bits for the input subsystem
1180 */1186 */
@@ -1194,7 +1200,8 @@ static int elantech_set_input_params(struct psmouse *psmouse) · 13 unmodified lines
1194 __clear_bit(EV_REL, dev->evbit);1200 __clear_bit(EV_REL, dev->evbit);
1195 1201
1196 __set_bit(BTN_LEFT, dev->keybit);1202 __set_bit(BTN_LEFT, dev->keybit);
1197 if (dmi_check_system(elantech_dmi_has_middle_button))1203 if (dmi_check_system(elantech_dmi_has_middle_button) ||
1204 psmouse_matches_pnp_id(psmouse, middle_button_pnp_ids))
1198 __set_bit(BTN_MIDDLE, dev->keybit);1205 __set_bit(BTN_MIDDLE, dev->keybit);
1199 __set_bit(BTN_RIGHT, dev->keybit);1206 __set_bit(BTN_RIGHT, dev->keybit);
1200 1207
drivers/input/mouse/psmouse-base.c+6−6
@@ -192,8 +192,8 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse) · 191 unmodified lines
192 else192 else
193 input_report_rel(dev, REL_WHEEL, -wheel);193 input_report_rel(dev, REL_WHEEL, -wheel);
194 194
195 input_report_key(dev, BTN_SIDE, BIT(4));195 input_report_key(dev, BTN_SIDE, packet[3] & BIT(4));
196 input_report_key(dev, BTN_EXTRA, BIT(5));196 input_report_key(dev, BTN_EXTRA, packet[3] & BIT(5));
197 break;197 break;
198 }198 }
199 break;199 break;
@@ -203,13 +203,13 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse) · 3 unmodified lines
203 input_report_rel(dev, REL_WHEEL, -(s8) packet[3]);203 input_report_rel(dev, REL_WHEEL, -(s8) packet[3]);
204 204
205 /* Extra buttons on Genius NewNet 3D */205 /* Extra buttons on Genius NewNet 3D */
206 input_report_key(dev, BTN_SIDE, BIT(6));206 input_report_key(dev, BTN_SIDE, packet[0] & BIT(6));
207 input_report_key(dev, BTN_EXTRA, BIT(7));207 input_report_key(dev, BTN_EXTRA, packet[0] & BIT(7));
208 break;208 break;
209 209
210 case PSMOUSE_THINKPS:210 case PSMOUSE_THINKPS:
211 /* Extra button on ThinkingMouse */211 /* Extra button on ThinkingMouse */
212 input_report_key(dev, BTN_EXTRA, BIT(3));212 input_report_key(dev, BTN_EXTRA, packet[0] & BIT(3));
213 213
214 /*214 /*
215 * Without this bit of weirdness moving up gives wildly215 * Without this bit of weirdness moving up gives wildly
@@ -223,7 +223,7 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse) · 7 unmodified lines
223 * Cortron PS2 Trackball reports SIDE button in the223 * Cortron PS2 Trackball reports SIDE button in the
224 * 4th bit of the first byte.224 * 4th bit of the first byte.
225 */225 */
226 input_report_key(dev, BTN_SIDE, BIT(3));226 input_report_key(dev, BTN_SIDE, packet[0] & BIT(3));
227 packet[0] |= BIT(3);227 packet[0] |= BIT(3);
228 break;228 break;
229 229
drivers/input/rmi4/Kconfig+1−0
@@ -3,6 +3,7 @@ · 2 unmodified lines
3#3#
4config RMI4_CORE4config RMI4_CORE
5 tristate "Synaptics RMI4 bus support"5 tristate "Synaptics RMI4 bus support"
6 select IRQ_DOMAIN
6 help7 help
7 Say Y here if you want to support the Synaptics RMI4 bus. This is8 Say Y here if you want to support the Synaptics RMI4 bus. This is
8 required for all RMI4 device support.9 required for all RMI4 device support.
drivers/input/rmi4/rmi_2d_sensor.c+16−18
@@ -32,15 +32,15 @@ void rmi_2d_sensor_abs_process(struct rmi_2d_sensor *sensor, · 31 unmodified lines
32 if (obj->type == RMI_2D_OBJECT_NONE)32 if (obj->type == RMI_2D_OBJECT_NONE)
33 return;33 return;
34 34
35 if (axis_align->swap_axes)
36 swap(obj->x, obj->y);
37
38 if (axis_align->flip_x)35 if (axis_align->flip_x)
39 obj->x = sensor->max_x - obj->x;36 obj->x = sensor->max_x - obj->x;
40 37
41 if (axis_align->flip_y)38 if (axis_align->flip_y)
42 obj->y = sensor->max_y - obj->y;39 obj->y = sensor->max_y - obj->y;
43 40
41 if (axis_align->swap_axes)
42 swap(obj->x, obj->y);
43
44 /*44 /*
45 * Here checking if X offset or y offset are specified is45 * Here checking if X offset or y offset are specified is
46 * redundant. We just add the offsets or clip the values.46 * redundant. We just add the offsets or clip the values.
@@ -120,15 +120,15 @@ void rmi_2d_sensor_rel_report(struct rmi_2d_sensor *sensor, int x, int y) · 73 unmodified lines
120 x = min(RMI_2D_REL_POS_MAX, max(RMI_2D_REL_POS_MIN, (int)x));120 x = min(RMI_2D_REL_POS_MAX, max(RMI_2D_REL_POS_MIN, (int)x));
121 y = min(RMI_2D_REL_POS_MAX, max(RMI_2D_REL_POS_MIN, (int)y));121 y = min(RMI_2D_REL_POS_MAX, max(RMI_2D_REL_POS_MIN, (int)y));
122 122
123 if (axis_align->swap_axes)
124 swap(x, y);
125
126 if (axis_align->flip_x)123 if (axis_align->flip_x)
127 x = min(RMI_2D_REL_POS_MAX, -x);124 x = min(RMI_2D_REL_POS_MAX, -x);
128 125
129 if (axis_align->flip_y)126 if (axis_align->flip_y)
130 y = min(RMI_2D_REL_POS_MAX, -y);127 y = min(RMI_2D_REL_POS_MAX, -y);
131 128
129 if (axis_align->swap_axes)
130 swap(x, y);
131
132 if (x || y) {132 if (x || y) {
133 input_report_rel(sensor->input, REL_X, x);133 input_report_rel(sensor->input, REL_X, x);
134 input_report_rel(sensor->input, REL_Y, y);134 input_report_rel(sensor->input, REL_Y, y);
@@ -141,17 +141,10 @@ static void rmi_2d_sensor_set_input_params(struct rmi_2d_sensor *sensor) · 6 unmodified lines
141 struct input_dev *input = sensor->input;141 struct input_dev *input = sensor->input;
142 int res_x;142 int res_x;
143 int res_y;143 int res_y;
144 int max_x, max_y;
144 int input_flags = 0;145 int input_flags = 0;
145 146
146 if (sensor->report_abs) {147 if (sensor->report_abs) {
147 if (sensor->axis_align.swap_axes) {
148 swap(sensor->max_x, sensor->max_y);
149 swap(sensor->axis_align.clip_x_low,
150 sensor->axis_align.clip_y_low);
151 swap(sensor->axis_align.clip_x_high,
152 sensor->axis_align.clip_y_high);
153 }
154
155 sensor->min_x = sensor->axis_align.clip_x_low;148 sensor->min_x = sensor->axis_align.clip_x_low;
156 if (sensor->axis_align.clip_x_high)149 if (sensor->axis_align.clip_x_high)
157 sensor->max_x = min(sensor->max_x,150 sensor->max_x = min(sensor->max_x,
@@ -163,14 +156,19 @@ static void rmi_2d_sensor_set_input_params(struct rmi_2d_sensor *sensor) · 5 unmodified lines
163 sensor->axis_align.clip_y_high);156 sensor->axis_align.clip_y_high);
164 157
165 set_bit(EV_ABS, input->evbit);158 set_bit(EV_ABS, input->evbit);
166 input_set_abs_params(input, ABS_MT_POSITION_X, 0, sensor->max_x,159
167 0, 0);160 max_x = sensor->max_x;
168 input_set_abs_params(input, ABS_MT_POSITION_Y, 0, sensor->max_y,161 max_y = sensor->max_y;
169 0, 0);162 if (sensor->axis_align.swap_axes)
163 swap(max_x, max_y);
164 input_set_abs_params(input, ABS_MT_POSITION_X, 0, max_x, 0, 0);
165 input_set_abs_params(input, ABS_MT_POSITION_Y, 0, max_y, 0, 0);
170 166
171 if (sensor->x_mm && sensor->y_mm) {167 if (sensor->x_mm && sensor->y_mm) {
172 res_x = (sensor->max_x - sensor->min_x) / sensor->x_mm;168 res_x = (sensor->max_x - sensor->min_x) / sensor->x_mm;
173 res_y = (sensor->max_y - sensor->min_y) / sensor->y_mm;169 res_y = (sensor->max_y - sensor->min_y) / sensor->y_mm;
170 if (sensor->axis_align.swap_axes)
171 swap(res_x, res_y);
174 172
175 input_abs_set_res(input, ABS_X, res_x);173 input_abs_set_res(input, ABS_X, res_x);
176 input_abs_set_res(input, ABS_Y, res_y);174 input_abs_set_res(input, ABS_Y, res_y);
drivers/input/rmi4/rmi_bus.c+49−1
@@ -9,6 +9,8 @@ · 8 unmodified lines
9 9
10#include <linux/kernel.h>10#include <linux/kernel.h>
11#include <linux/device.h>11#include <linux/device.h>
12#include <linux/irq.h>
13#include <linux/irqdomain.h>
12#include <linux/list.h>14#include <linux/list.h>
13#include <linux/pm.h>15#include <linux/pm.h>
14#include <linux/rmi.h>16#include <linux/rmi.h>
@@ -167,6 +169,39 @@ static inline void rmi_function_of_probe(struct rmi_function *fn) · 152 unmodified lines
167{}169{}
168#endif170#endif
169 171
172static struct irq_chip rmi_irq_chip = {
173 .name = "rmi4",
174};
175
176static int rmi_create_function_irq(struct rmi_function *fn,
177 struct rmi_function_handler *handler)
178{
179 struct rmi_driver_data *drvdata = dev_get_drvdata(&fn->rmi_dev->dev);
180 int i, error;
181
182 for (i = 0; i < fn->num_of_irqs; i++) {
183 set_bit(fn->irq_pos + i, fn->irq_mask);
184
185 fn->irq[i] = irq_create_mapping(drvdata->irqdomain,
186 fn->irq_pos + i);
187
188 irq_set_chip_data(fn->irq[i], fn);
189 irq_set_chip_and_handler(fn->irq[i], &rmi_irq_chip,
190 handle_simple_irq);
191 irq_set_nested_thread(fn->irq[i], 1);
192
193 error = devm_request_threaded_irq(&fn->dev, fn->irq[i], NULL,
194 handler->attention, IRQF_ONESHOT,
195 dev_name(&fn->dev), fn);
196 if (error) {
197 dev_err(&fn->dev, "Error %d registering IRQ\n", error);
198 return error;
199 }
200 }
201
202 return 0;
203}
204
170static int rmi_function_probe(struct device *dev)205static int rmi_function_probe(struct device *dev)
171{206{
172 struct rmi_function *fn = to_rmi_function(dev);207 struct rmi_function *fn = to_rmi_function(dev);
@@ -178,7 +213,14 @@ static int rmi_function_probe(struct device *dev) · 5 unmodified lines
178 213
179 if (handler->probe) {214 if (handler->probe) {
180 error = handler->probe(fn);215 error = handler->probe(fn);
181 return error;216 if (error)
217 return error;
218 }
219
220 if (fn->num_of_irqs && handler->attention) {
221 error = rmi_create_function_irq(fn, handler);
222 if (error)
223 return error;
182 }224 }
183 225
184 return 0;226 return 0;
@@ -230,12 +272,18 @@ err_put_device: · 45 unmodified lines
230 272
231void rmi_unregister_function(struct rmi_function *fn)273void rmi_unregister_function(struct rmi_function *fn)
232{274{
275 int i;
276
233 rmi_dbg(RMI_DEBUG_CORE, &fn->dev, "Unregistering F%02X.\n",277 rmi_dbg(RMI_DEBUG_CORE, &fn->dev, "Unregistering F%02X.\n",
234 fn->fd.function_number);278 fn->fd.function_number);
235 279
236 device_del(&fn->dev);280 device_del(&fn->dev);
237 of_node_put(fn->dev.of_node);281 of_node_put(fn->dev.of_node);
238 put_device(&fn->dev);282 put_device(&fn->dev);
283
284 for (i = 0; i < fn->num_of_irqs; i++)
285 irq_dispose_mapping(fn->irq[i]);
286
239}287}
240 288
241/**289/**
drivers/input/rmi4/rmi_bus.h+9−1
@@ -14,6 +14,12 @@ · 13 unmodified lines
14 14
15struct rmi_device;15struct rmi_device;
16 16
17/*
18 * The interrupt source count in the function descriptor can represent up to
19 * 6 interrupt sources in the normal manner.
20 */
21#define RMI_FN_MAX_IRQS 6
22
17/**23/**
18 * struct rmi_function - represents the implementation of an RMI424 * struct rmi_function - represents the implementation of an RMI4
19 * function for a particular device (basically, a driver for that RMI4 function)25 * function for a particular device (basically, a driver for that RMI4 function)
@@ -26,6 +32,7 @@ struct rmi_device; · 6 unmodified lines
26 * @irq_pos: The position in the irq bitfield this function holds32 * @irq_pos: The position in the irq bitfield this function holds
27 * @irq_mask: For convenience, can be used to mask IRQ bits off during ATTN33 * @irq_mask: For convenience, can be used to mask IRQ bits off during ATTN
28 * interrupt handling.34 * interrupt handling.
35 * @irqs: assigned virq numbers (up to num_of_irqs)
29 *36 *
30 * @node: entry in device's list of functions37 * @node: entry in device's list of functions
31 */38 */
@@ -36,6 +43,7 @@ struct rmi_function { · 4 unmodified lines
36 struct list_head node;43 struct list_head node;
37 44
38 unsigned int num_of_irqs;45 unsigned int num_of_irqs;
46 int irq[RMI_FN_MAX_IRQS];
39 unsigned int irq_pos;47 unsigned int irq_pos;
40 unsigned long irq_mask[];48 unsigned long irq_mask[];
41};49};
@@ -76,7 +84,7 @@ struct rmi_function_handler { · 34 unmodified lines
76 void (*remove)(struct rmi_function *fn);84 void (*remove)(struct rmi_function *fn);
77 int (*config)(struct rmi_function *fn);85 int (*config)(struct rmi_function *fn);
78 int (*reset)(struct rmi_function *fn);86 int (*reset)(struct rmi_function *fn);
79 int (*attention)(struct rmi_function *fn, unsigned long *irq_bits);87 irqreturn_t (*attention)(int irq, void *ctx);
80 int (*suspend)(struct rmi_function *fn);88 int (*suspend)(struct rmi_function *fn);
81 int (*resume)(struct rmi_function *fn);89 int (*resume)(struct rmi_function *fn);
82};90};
drivers/input/rmi4/rmi_driver.c+20−32
@@ -21,6 +21,7 @@ · 20 unmodified lines
21#include <linux/pm.h>21#include <linux/pm.h>
22#include <linux/slab.h>22#include <linux/slab.h>
23#include <linux/of.h>23#include <linux/of.h>
24#include <linux/irqdomain.h>
24#include <uapi/linux/input.h>25#include <uapi/linux/input.h>
25#include <linux/rmi.h>26#include <linux/rmi.h>
26#include "rmi_bus.h"27#include "rmi_bus.h"
@@ -127,28 +128,11 @@ static int rmi_driver_process_config_requests(struct rmi_device *rmi_dev) · 100 unmodified lines
127 return 0;128 return 0;
128}129}
129 130
130static void process_one_interrupt(struct rmi_driver_data *data,
131 struct rmi_function *fn)
132{
133 struct rmi_function_handler *fh;
134
135 if (!fn || !fn->dev.driver)
136 return;
137
138 fh = to_rmi_function_handler(fn->dev.driver);
139 if (fh->attention) {
140 bitmap_and(data->fn_irq_bits, data->irq_status, fn->irq_mask,
141 data->irq_count);
142 if (!bitmap_empty(data->fn_irq_bits, data->irq_count))
143 fh->attention(fn, data->fn_irq_bits);
144 }
145}
146
147static int rmi_process_interrupt_requests(struct rmi_device *rmi_dev)131static int rmi_process_interrupt_requests(struct rmi_device *rmi_dev)
148{132{
149 struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);133 struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
150 struct device *dev = &rmi_dev->dev;134 struct device *dev = &rmi_dev->dev;
151 struct rmi_function *entry;135 int i;
152 int error;136 int error;
153 137
154 if (!data)138 if (!data)
@@ -173,16 +157,8 @@ static int rmi_process_interrupt_requests(struct rmi_device *rmi_dev) · 18 unmodified lines
173 */157 */
174 mutex_unlock(&data->irq_mutex);158 mutex_unlock(&data->irq_mutex);
175 159
176 /*160 for_each_set_bit(i, data->irq_status, data->irq_count)
177 * It would be nice to be able to use irq_chip to handle these161 handle_nested_irq(irq_find_mapping(data->irqdomain, i));
178 * nested IRQs. Unfortunately, most of the current customers for
179 * this driver are using older kernels (3.0.x) that don't support
180 * the features required for that. Once they've shifted to more
181 * recent kernels (say, 3.3 and higher), this should be switched to
182 * use irq_chip.
183 */
184 list_for_each_entry(entry, &data->function_list, node)
185 process_one_interrupt(data, entry);
186 162
187 if (data->input)163 if (data->input)
188 input_sync(data->input);164 input_sync(data->input);
@@ -1001,9 +977,13 @@ EXPORT_SYMBOL_GPL(rmi_driver_resume); · 812 unmodified lines
1001static int rmi_driver_remove(struct device *dev)977static int rmi_driver_remove(struct device *dev)
1002{978{
1003 struct rmi_device *rmi_dev = to_rmi_device(dev);979 struct rmi_device *rmi_dev = to_rmi_device(dev);
980 struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
1004 981
1005 rmi_disable_irq(rmi_dev, false);982 rmi_disable_irq(rmi_dev, false);
1006 983
984 irq_domain_remove(data->irqdomain);
985 data->irqdomain = NULL;
986
1007 rmi_f34_remove_sysfs(rmi_dev);987 rmi_f34_remove_sysfs(rmi_dev);
1008 rmi_free_function_list(rmi_dev);988 rmi_free_function_list(rmi_dev);
1009 989
@@ -1035,7 +1015,8 @@ int rmi_probe_interrupts(struct rmi_driver_data *data) · 25 unmodified lines
1035{1015{
1036 struct rmi_device *rmi_dev = data->rmi_dev;1016 struct rmi_device *rmi_dev = data->rmi_dev;
1037 struct device *dev = &rmi_dev->dev;1017 struct device *dev = &rmi_dev->dev;
1038 int irq_count;1018 struct fwnode_handle *fwnode = rmi_dev->xport->dev->fwnode;
1019 int irq_count = 0;
1039 size_t size;1020 size_t size;
1040 int retval;1021 int retval;
1041 1022
@@ -1046,7 +1027,6 @@ int rmi_probe_interrupts(struct rmi_driver_data *data) · 4 unmodified lines
1046 * being accessed.1027 * being accessed.
1047 */1028 */
1048 rmi_dbg(RMI_DEBUG_CORE, dev, "%s: Counting IRQs.\n", __func__);1029 rmi_dbg(RMI_DEBUG_CORE, dev, "%s: Counting IRQs.\n", __func__);
1049 irq_count = 0;
1050 data->bootloader_mode = false;1030 data->bootloader_mode = false;
1051 1031
1052 retval = rmi_scan_pdt(rmi_dev, &irq_count, rmi_count_irqs);1032 retval = rmi_scan_pdt(rmi_dev, &irq_count, rmi_count_irqs);
@@ -1058,6 +1038,15 @@ int rmi_probe_interrupts(struct rmi_driver_data *data) · 5 unmodified lines
1058 if (data->bootloader_mode)1038 if (data->bootloader_mode)
1059 dev_warn(dev, "Device in bootloader mode.\n");1039 dev_warn(dev, "Device in bootloader mode.\n");
1060 1040
1041 /* Allocate and register a linear revmap irq_domain */
1042 data->irqdomain = irq_domain_create_linear(fwnode, irq_count,
1043 &irq_domain_simple_ops,
1044 data);
1045 if (!data->irqdomain) {
1046 dev_err(&rmi_dev->dev, "Failed to create IRQ domain\n");
1047 return -ENOMEM;
1048 }
1049
1061 data->irq_count = irq_count;1050 data->irq_count = irq_count;
1062 data->num_of_irq_regs = (data->irq_count + 7) / 8;1051 data->num_of_irq_regs = (data->irq_count + 7) / 8;
1063 1052
@@ -1080,10 +1069,9 @@ int rmi_init_functions(struct rmi_driver_data *data) · 16 unmodified lines
1080{1069{
1081 struct rmi_device *rmi_dev = data->rmi_dev;1070 struct rmi_device *rmi_dev = data->rmi_dev;
1082 struct device *dev = &rmi_dev->dev;1071 struct device *dev = &rmi_dev->dev;
1083 int irq_count;1072 int irq_count = 0;
1084 int retval;1073 int retval;
1085 1074
1086 irq_count = 0;
1087 rmi_dbg(RMI_DEBUG_CORE, dev, "%s: Creating functions.\n", __func__);1075 rmi_dbg(RMI_DEBUG_CORE, dev, "%s: Creating functions.\n", __func__);
1088 retval = rmi_scan_pdt(rmi_dev, &irq_count, rmi_create_function);1076 retval = rmi_scan_pdt(rmi_dev, &irq_count, rmi_create_function);
1089 if (retval < 0) {1077 if (retval < 0) {
drivers/input/rmi4/rmi_f01.c+5−5
@@ -681,9 +681,9 @@ static int rmi_f01_resume(struct rmi_function *fn) · 680 unmodified lines
681 return 0;681 return 0;
682}682}
683 683
684static int rmi_f01_attention(struct rmi_function *fn,684static irqreturn_t rmi_f01_attention(int irq, void *ctx)
685 unsigned long *irq_bits)
686{685{
686 struct rmi_function *fn = ctx;
687 struct rmi_device *rmi_dev = fn->rmi_dev;687 struct rmi_device *rmi_dev = fn->rmi_dev;
688 int error;688 int error;
689 u8 device_status;689 u8 device_status;
@@ -692,7 +692,7 @@ static int rmi_f01_attention(struct rmi_function *fn, · 2 unmodified lines
692 if (error) {692 if (error) {
693 dev_err(&fn->dev,693 dev_err(&fn->dev,
694 "Failed to read device status: %d.\n", error);694 "Failed to read device status: %d.\n", error);
695 return error;695 return IRQ_RETVAL(error);
696 }696 }
697 697
698 if (RMI_F01_STATUS_BOOTLOADER(device_status))698 if (RMI_F01_STATUS_BOOTLOADER(device_status))
@@ -704,11 +704,11 @@ static int rmi_f01_attention(struct rmi_function *fn, · 5 unmodified lines
704 error = rmi_dev->driver->reset_handler(rmi_dev);704 error = rmi_dev->driver->reset_handler(rmi_dev);
705 if (error) {705 if (error) {
706 dev_err(&fn->dev, "Device reset failed: %d\n", error);706 dev_err(&fn->dev, "Device reset failed: %d\n", error);
707 return error;707 return IRQ_RETVAL(error);
708 }708 }
709 }709 }
710 710
711 return 0;711 return IRQ_HANDLED;
712}712}
713 713
714struct rmi_function_handler rmi_f01_handler = {714struct rmi_function_handler rmi_f01_handler = {
drivers/input/rmi4/rmi_f03.c+5−4
@@ -244,8 +244,9 @@ static int rmi_f03_config(struct rmi_function *fn) · 243 unmodified lines
244 return 0;244 return 0;
245}245}
246 246
247static int rmi_f03_attention(struct rmi_function *fn, unsigned long *irq_bits)247static irqreturn_t rmi_f03_attention(int irq, void *ctx)
248{248{
249 struct rmi_function *fn = ctx;
249 struct rmi_device *rmi_dev = fn->rmi_dev;250 struct rmi_device *rmi_dev = fn->rmi_dev;
250 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);251 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);
251 struct f03_data *f03 = dev_get_drvdata(&fn->dev);252 struct f03_data *f03 = dev_get_drvdata(&fn->dev);
@@ -262,7 +263,7 @@ static int rmi_f03_attention(struct rmi_function *fn, unsigned long *irq_bits) · 10 unmodified lines
262 /* First grab the data passed by the transport device */263 /* First grab the data passed by the transport device */
263 if (drvdata->attn_data.size < ob_len) {264 if (drvdata->attn_data.size < ob_len) {
264 dev_warn(&fn->dev, "F03 interrupted, but data is missing!\n");265 dev_warn(&fn->dev, "F03 interrupted, but data is missing!\n");
265 return 0;266 return IRQ_HANDLED;
266 }267 }
267 268
268 memcpy(obs, drvdata->attn_data.data, ob_len);269 memcpy(obs, drvdata->attn_data.data, ob_len);
@@ -277,7 +278,7 @@ static int rmi_f03_attention(struct rmi_function *fn, unsigned long *irq_bits) · 8 unmodified lines
277 "%s: Failed to read F03 output buffers: %d\n",278 "%s: Failed to read F03 output buffers: %d\n",
278 __func__, error);279 __func__, error);
279 serio_interrupt(f03->serio, 0, SERIO_TIMEOUT);280 serio_interrupt(f03->serio, 0, SERIO_TIMEOUT);
280 return error;281 return IRQ_RETVAL(error);
281 }282 }
282 }283 }
283 284
@@ -303,7 +304,7 @@ static int rmi_f03_attention(struct rmi_function *fn, unsigned long *irq_bits) · 19 unmodified lines
303 serio_interrupt(f03->serio, ob_data, serio_flags);304 serio_interrupt(f03->serio, ob_data, serio_flags);
304 }305 }
305 306
306 return 0;307 return IRQ_HANDLED;
307}308}
308 309
309static void rmi_f03_remove(struct rmi_function *fn)310static void rmi_f03_remove(struct rmi_function *fn)
drivers/input/rmi4/rmi_f11.c+16−26
@@ -570,9 +570,7 @@ static inline u8 rmi_f11_parse_finger_state(const u8 *f_state, u8 n_finger) · 569 unmodified lines
570}570}
571 571
572static void rmi_f11_finger_handler(struct f11_data *f11,572static void rmi_f11_finger_handler(struct f11_data *f11,
573 struct rmi_2d_sensor *sensor,573 struct rmi_2d_sensor *sensor, int size)
574 unsigned long *irq_bits, int num_irq_regs,
575 int size)
576{574{
577 const u8 *f_state = f11->data.f_state;575 const u8 *f_state = f11->data.f_state;
578 u8 finger_state;576 u8 finger_state;
@@ -581,12 +579,7 @@ static void rmi_f11_finger_handler(struct f11_data *f11, · 2 unmodified lines
581 int rel_fingers;579 int rel_fingers;
582 int abs_size = sensor->nbr_fingers * RMI_F11_ABS_BYTES;580 int abs_size = sensor->nbr_fingers * RMI_F11_ABS_BYTES;
583 581
584 int abs_bits = bitmap_and(f11->result_bits, irq_bits, f11->abs_mask,582 if (sensor->report_abs) {
585 num_irq_regs * 8);
586 int rel_bits = bitmap_and(f11->result_bits, irq_bits, f11->rel_mask,
587 num_irq_regs * 8);
588
589 if (abs_bits) {
590 if (abs_size > size)583 if (abs_size > size)
591 abs_fingers = size / RMI_F11_ABS_BYTES;584 abs_fingers = size / RMI_F11_ABS_BYTES;
592 else585 else
@@ -604,19 +597,7 @@ static void rmi_f11_finger_handler(struct f11_data *f11, · 11 unmodified lines
604 rmi_f11_abs_pos_process(f11, sensor, &sensor->objs[i],597 rmi_f11_abs_pos_process(f11, sensor, &sensor->objs[i],
605 finger_state, i);598 finger_state, i);
606 }599 }
607 }
608 600
609 if (rel_bits) {
610 if ((abs_size + sensor->nbr_fingers * RMI_F11_REL_BYTES) > size)
611 rel_fingers = (size - abs_size) / RMI_F11_REL_BYTES;
612 else
613 rel_fingers = sensor->nbr_fingers;
614
615 for (i = 0; i < rel_fingers; i++)
616 rmi_f11_rel_pos_report(f11, i);
617 }
618
619 if (abs_bits) {
620 /*601 /*
621 * the absolute part is made in 2 parts to allow the kernel602 * the absolute part is made in 2 parts to allow the kernel
622 * tracking to take place.603 * tracking to take place.
@@ -638,7 +619,16 @@ static void rmi_f11_finger_handler(struct f11_data *f11, · 15 unmodified lines
638 }619 }
639 620
640 input_mt_sync_frame(sensor->input);621 input_mt_sync_frame(sensor->input);
622 } else if (sensor->report_rel) {
623 if ((abs_size + sensor->nbr_fingers * RMI_F11_REL_BYTES) > size)
624 rel_fingers = (size - abs_size) / RMI_F11_REL_BYTES;
625 else
626 rel_fingers = sensor->nbr_fingers;
627
628 for (i = 0; i < rel_fingers; i++)
629 rmi_f11_rel_pos_report(f11, i);
641 }630 }
631
642}632}
643 633
644static int f11_2d_construct_data(struct f11_data *f11)634static int f11_2d_construct_data(struct f11_data *f11)
@@ -1276,8 +1266,9 @@ static int rmi_f11_config(struct rmi_function *fn) · 631 unmodified lines
1276 return 0;1266 return 0;
1277}1267}
1278 1268
1279static int rmi_f11_attention(struct rmi_function *fn, unsigned long *irq_bits)1269static irqreturn_t rmi_f11_attention(int irq, void *ctx)
1280{1270{
1271 struct rmi_function *fn = ctx;
1281 struct rmi_device *rmi_dev = fn->rmi_dev;1272 struct rmi_device *rmi_dev = fn->rmi_dev;
1282 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);1273 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);
1283 struct f11_data *f11 = dev_get_drvdata(&fn->dev);1274 struct f11_data *f11 = dev_get_drvdata(&fn->dev);
@@ -1303,13 +1294,12 @@ static int rmi_f11_attention(struct rmi_function *fn, unsigned long *irq_bits) · 19 unmodified lines
1303 data_base_addr, f11->sensor.data_pkt,1294 data_base_addr, f11->sensor.data_pkt,
1304 f11->sensor.pkt_size);1295 f11->sensor.pkt_size);
1305 if (error < 0)1296 if (error < 0)
1306 return error;1297 return IRQ_RETVAL(error);
1307 }1298 }
1308 1299
1309 rmi_f11_finger_handler(f11, &f11->sensor, irq_bits,1300 rmi_f11_finger_handler(f11, &f11->sensor, valid_bytes);
1310 drvdata->num_of_irq_regs, valid_bytes);
1311 1301
1312 return 0;1302 return IRQ_HANDLED;
1313}1303}
1314 1304
1315static int rmi_f11_resume(struct rmi_function *fn)1305static int rmi_f11_resume(struct rmi_function *fn)
drivers/input/rmi4/rmi_f12.c+4−4
@@ -197,10 +197,10 @@ static void rmi_f12_process_objects(struct f12_data *f12, u8 *data1, int size) · 196 unmodified lines
197 rmi_2d_sensor_abs_report(sensor, &sensor->objs[i], i);197 rmi_2d_sensor_abs_report(sensor, &sensor->objs[i], i);
198}198}
199 199
200static int rmi_f12_attention(struct rmi_function *fn,200static irqreturn_t rmi_f12_attention(int irq, void *ctx)
201 unsigned long *irq_nr_regs)
202{201{
203 int retval;202 int retval;
203 struct rmi_function *fn = ctx;
204 struct rmi_device *rmi_dev = fn->rmi_dev;204 struct rmi_device *rmi_dev = fn->rmi_dev;
205 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);205 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);
206 struct f12_data *f12 = dev_get_drvdata(&fn->dev);206 struct f12_data *f12 = dev_get_drvdata(&fn->dev);
@@ -222,7 +222,7 @@ static int rmi_f12_attention(struct rmi_function *fn, · 15 unmodified lines
222 if (retval < 0) {222 if (retval < 0) {
223 dev_err(&fn->dev, "Failed to read object data. Code: %d.\n",223 dev_err(&fn->dev, "Failed to read object data. Code: %d.\n",
224 retval);224 retval);
225 return retval;225 return IRQ_RETVAL(retval);
226 }226 }
227 }227 }
228 228
@@ -232,7 +232,7 @@ static int rmi_f12_attention(struct rmi_function *fn, · 3 unmodified lines
232 232
233 input_mt_sync_frame(sensor->input);233 input_mt_sync_frame(sensor->input);
234 234
235 return 0;235 return IRQ_HANDLED;
236}236}
237 237
238static int rmi_f12_write_control_regs(struct rmi_function *fn)238static int rmi_f12_write_control_regs(struct rmi_function *fn)
drivers/input/rmi4/rmi_f30.c+5−4
@@ -122,8 +122,9 @@ static void rmi_f30_report_button(struct rmi_function *fn, · 121 unmodified lines
122 }122 }
123}123}
124 124
125static int rmi_f30_attention(struct rmi_function *fn, unsigned long *irq_bits)125static irqreturn_t rmi_f30_attention(int irq, void *ctx)
126{126{
127 struct rmi_function *fn = ctx;
127 struct f30_data *f30 = dev_get_drvdata(&fn->dev);128 struct f30_data *f30 = dev_get_drvdata(&fn->dev);
128 struct rmi_driver_data *drvdata = dev_get_drvdata(&fn->rmi_dev->dev);129 struct rmi_driver_data *drvdata = dev_get_drvdata(&fn->rmi_dev->dev);
129 int error;130 int error;
@@ -134,7 +135,7 @@ static int rmi_f30_attention(struct rmi_function *fn, unsigned long *irq_bits) · 4 unmodified lines
134 if (drvdata->attn_data.size < f30->register_count) {135 if (drvdata->attn_data.size < f30->register_count) {
135 dev_warn(&fn->dev,136 dev_warn(&fn->dev,
136 "F30 interrupted, but data is missing\n");137 "F30 interrupted, but data is missing\n");
137 return 0;138 return IRQ_HANDLED;
138 }139 }
139 memcpy(f30->data_regs, drvdata->attn_data.data,140 memcpy(f30->data_regs, drvdata->attn_data.data,
140 f30->register_count);141 f30->register_count);
@@ -147,7 +148,7 @@ static int rmi_f30_attention(struct rmi_function *fn, unsigned long *irq_bits) · 6 unmodified lines
147 dev_err(&fn->dev,148 dev_err(&fn->dev,
148 "%s: Failed to read F30 data registers: %d\n",149 "%s: Failed to read F30 data registers: %d\n",
149 __func__, error);150 __func__, error);
150 return error;151 return IRQ_RETVAL(error);
151 }152 }
152 }153 }
153 154
@@ -159,7 +160,7 @@ static int rmi_f30_attention(struct rmi_function *fn, unsigned long *irq_bits) · 5 unmodified lines
159 rmi_f03_commit_buttons(f30->f03);160 rmi_f03_commit_buttons(f30->f03);
160 }161 }
161 162
162 return 0;163 return IRQ_HANDLED;
163}164}
164 165
165static int rmi_f30_config(struct rmi_function *fn)166static int rmi_f30_config(struct rmi_function *fn)
drivers/input/rmi4/rmi_f34.c+3−2
@@ -100,8 +100,9 @@ static int rmi_f34_command(struct f34_data *f34, u8 command, · 99 unmodified lines
100 return 0;100 return 0;
101}101}
102 102
103static int rmi_f34_attention(struct rmi_function *fn, unsigned long *irq_bits)103static irqreturn_t rmi_f34_attention(int irq, void *ctx)
104{104{
105 struct rmi_function *fn = ctx;
105 struct f34_data *f34 = dev_get_drvdata(&fn->dev);106 struct f34_data *f34 = dev_get_drvdata(&fn->dev);
106 int ret;107 int ret;
107 u8 status;108 u8 status;
@@ -126,7 +127,7 @@ static int rmi_f34_attention(struct rmi_function *fn, unsigned long *irq_bits) · 18 unmodified lines
126 complete(&f34->v7.cmd_done);127 complete(&f34->v7.cmd_done);
127 }128 }
128 129
129 return 0;130 return IRQ_HANDLED;
130}131}
131 132
132static int rmi_f34_write_blocks(struct f34_data *f34, const void *data,133static int rmi_f34_write_blocks(struct f34_data *f34, const void *data,
drivers/input/rmi4/rmi_f54.c+0−6
@@ -610,11 +610,6 @@ error: · 609 unmodified lines
610 mutex_unlock(&f54->data_mutex);610 mutex_unlock(&f54->data_mutex);
611}611}
612 612
613static int rmi_f54_attention(struct rmi_function *fn, unsigned long *irqbits)
614{
615 return 0;
616}
617
618static int rmi_f54_config(struct rmi_function *fn)613static int rmi_f54_config(struct rmi_function *fn)
619{614{
620 struct rmi_driver *drv = fn->rmi_dev->driver;615 struct rmi_driver *drv = fn->rmi_dev->driver;
@@ -756,6 +751,5 @@ struct rmi_function_handler rmi_f54_handler = { · 135 unmodified lines
756 .func = 0x54,751 .func = 0x54,
757 .probe = rmi_f54_probe,752 .probe = rmi_f54_probe,
758 .config = rmi_f54_config,753 .config = rmi_f54_config,
759 .attention = rmi_f54_attention,
760 .remove = rmi_f54_remove,754 .remove = rmi_f54_remove,
761};755};
drivers/input/touchscreen/silead.c+1−0
@@ -603,6 +603,7 @@ static const struct acpi_device_id silead_ts_acpi_match[] = { · 602 unmodified lines
603 { "GSL3692", 0 },603 { "GSL3692", 0 },
604 { "MSSL1680", 0 },604 { "MSSL1680", 0 },
605 { "MSSL0001", 0 },605 { "MSSL0001", 0 },
606 { "MSSL0002", 0 },
606 { }607 { }
607};608};
608MODULE_DEVICE_TABLE(acpi, silead_ts_acpi_match);609MODULE_DEVICE_TABLE(acpi, silead_ts_acpi_match);
drivers/isdn/mISDN/socket.c+1−1
@@ -588,7 +588,7 @@ static const struct proto_ops data_sock_ops = { · 587 unmodified lines
588 .getname = data_sock_getname,588 .getname = data_sock_getname,
589 .sendmsg = mISDN_sock_sendmsg,589 .sendmsg = mISDN_sock_sendmsg,
590 .recvmsg = mISDN_sock_recvmsg,590 .recvmsg = mISDN_sock_recvmsg,
591 .poll_mask = datagram_poll_mask,591 .poll = datagram_poll,
592 .listen = sock_no_listen,592 .listen = sock_no_listen,
593 .shutdown = sock_no_shutdown,593 .shutdown = sock_no_shutdown,
594 .setsockopt = data_sock_setsockopt,594 .setsockopt = data_sock_setsockopt,
drivers/md/dm-raid.c+1−1
@@ -588,7 +588,7 @@ static const char *raid10_md_layout_to_format(int layout) · 587 unmodified lines
588}588}
589 589
590/* Return md raid10 algorithm for @name */590/* Return md raid10 algorithm for @name */
591static const int raid10_name_to_format(const char *name)591static int raid10_name_to_format(const char *name)
592{592{
593 if (!strcasecmp(name, "near"))593 if (!strcasecmp(name, "near"))
594 return ALGORITHM_RAID10_NEAR;594 return ALGORITHM_RAID10_NEAR;
drivers/md/dm-table.c+4−3
@@ -885,9 +885,7 @@ EXPORT_SYMBOL_GPL(dm_table_set_type); · 884 unmodified lines
885static int device_supports_dax(struct dm_target *ti, struct dm_dev *dev,885static int device_supports_dax(struct dm_target *ti, struct dm_dev *dev,
886 sector_t start, sector_t len, void *data)886 sector_t start, sector_t len, void *data)
887{887{
888 struct request_queue *q = bdev_get_queue(dev->bdev);888 return bdev_dax_supported(dev->bdev, PAGE_SIZE);
889
890 return q && blk_queue_dax(q);
891}889}
892 890
893static bool dm_table_supports_dax(struct dm_table *t)891static bool dm_table_supports_dax(struct dm_table *t)
@@ -1907,6 +1905,9 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q, · 1013 unmodified lines
1907 1905
1908 if (dm_table_supports_dax(t))1906 if (dm_table_supports_dax(t))
1909 blk_queue_flag_set(QUEUE_FLAG_DAX, q);1907 blk_queue_flag_set(QUEUE_FLAG_DAX, q);
1908 else
1909 blk_queue_flag_clear(QUEUE_FLAG_DAX, q);
1910
1910 if (dm_table_supports_dax_write_cache(t))1911 if (dm_table_supports_dax_write_cache(t))
1911 dax_write_cache(t->md->dax_dev, true);1912 dax_write_cache(t->md->dax_dev, true);
1912 1913
drivers/md/dm-thin-metadata.c+0−9
@@ -776,7 +776,6 @@ static int __write_changed_details(struct dm_pool_metadata *pmd) · 775 unmodified lines
776static int __commit_transaction(struct dm_pool_metadata *pmd)776static int __commit_transaction(struct dm_pool_metadata *pmd)
777{777{
778 int r;778 int r;
779 size_t metadata_len, data_len;
780 struct thin_disk_superblock *disk_super;779 struct thin_disk_superblock *disk_super;
781 struct dm_block *sblock;780 struct dm_block *sblock;
782 781
@@ -797,14 +796,6 @@ static int __commit_transaction(struct dm_pool_metadata *pmd) · 14 unmodified lines
797 if (r < 0)796 if (r < 0)
798 return r;797 return r;
799 798
800 r = dm_sm_root_size(pmd->metadata_sm, &metadata_len);
801 if (r < 0)
802 return r;
803
804 r = dm_sm_root_size(pmd->data_sm, &data_len);
805 if (r < 0)
806 return r;
807
808 r = save_sm_roots(pmd);799 r = save_sm_roots(pmd);
809 if (r < 0)800 if (r < 0)
810 return r;801 return r;
drivers/md/dm-thin.c+9−2
@@ -1386,6 +1386,8 @@ static void schedule_external_copy(struct thin_c *tc, dm_block_t virt_block, · 1385 unmodified lines
1386 1386
1387static void set_pool_mode(struct pool *pool, enum pool_mode new_mode);1387static void set_pool_mode(struct pool *pool, enum pool_mode new_mode);
1388 1388
1389static void requeue_bios(struct pool *pool);
1390
1389static void check_for_space(struct pool *pool)1391static void check_for_space(struct pool *pool)
1390{1392{
1391 int r;1393 int r;
@@ -1398,8 +1400,10 @@ static void check_for_space(struct pool *pool) · 6 unmodified lines
1398 if (r)1400 if (r)
1399 return;1401 return;
1400 1402
1401 if (nr_free)1403 if (nr_free) {
1402 set_pool_mode(pool, PM_WRITE);1404 set_pool_mode(pool, PM_WRITE);
1405 requeue_bios(pool);
1406 }
1403}1407}
1404 1408
1405/*1409/*
@@ -1476,7 +1480,10 @@ static int alloc_data_block(struct thin_c *tc, dm_block_t *result) · 70 unmodified lines
1476 1480
1477 r = dm_pool_alloc_data_block(pool->pmd, result);1481 r = dm_pool_alloc_data_block(pool->pmd, result);
1478 if (r) {1482 if (r) {
1479 metadata_operation_failed(pool, "dm_pool_alloc_data_block", r);1483 if (r == -ENOSPC)
1484 set_pool_mode(pool, PM_OUT_OF_DATA_SPACE);
1485 else
1486 metadata_operation_failed(pool, "dm_pool_alloc_data_block", r);
1480 return r;1487 return r;
1481 }1488 }
1482 1489
drivers/md/dm-writecache.c+5−5
@@ -259,7 +259,7 @@ static int persistent_memory_claim(struct dm_writecache *wc) · 258 unmodified lines
259 if (da != p) {259 if (da != p) {
260 long i;260 long i;
261 wc->memory_map = NULL;261 wc->memory_map = NULL;
262 pages = kvmalloc(p * sizeof(struct page *), GFP_KERNEL);262 pages = kvmalloc_array(p, sizeof(struct page *), GFP_KERNEL);
263 if (!pages) {263 if (!pages) {
264 r = -ENOMEM;264 r = -ENOMEM;
265 goto err2;265 goto err2;
@@ -859,7 +859,7 @@ static int writecache_alloc_entries(struct dm_writecache *wc) · 593 unmodified lines
859 859
860 if (wc->entries)860 if (wc->entries)
861 return 0;861 return 0;
862 wc->entries = vmalloc(sizeof(struct wc_entry) * wc->n_blocks);862 wc->entries = vmalloc(array_size(sizeof(struct wc_entry), wc->n_blocks));
863 if (!wc->entries)863 if (!wc->entries)
864 return -ENOMEM;864 return -ENOMEM;
865 for (b = 0; b < wc->n_blocks; b++) {865 for (b = 0; b < wc->n_blocks; b++) {
@@ -1481,9 +1481,9 @@ static void __writecache_writeback_pmem(struct dm_writecache *wc, struct writeba · 615 unmodified lines
1481 wb->bio.bi_iter.bi_sector = read_original_sector(wc, e);1481 wb->bio.bi_iter.bi_sector = read_original_sector(wc, e);
1482 wb->page_offset = PAGE_SIZE;1482 wb->page_offset = PAGE_SIZE;
1483 if (max_pages <= WB_LIST_INLINE ||1483 if (max_pages <= WB_LIST_INLINE ||
1484 unlikely(!(wb->wc_list = kmalloc(max_pages * sizeof(struct wc_entry *),1484 unlikely(!(wb->wc_list = kmalloc_array(max_pages, sizeof(struct wc_entry *),
1485 GFP_NOIO | __GFP_NORETRY |1485 GFP_NOIO | __GFP_NORETRY |
1486 __GFP_NOMEMALLOC | __GFP_NOWARN)))) {1486 __GFP_NOMEMALLOC | __GFP_NOWARN)))) {
1487 wb->wc_list = wb->wc_list_inline;1487 wb->wc_list = wb->wc_list_inline;
1488 max_pages = WB_LIST_INLINE;1488 max_pages = WB_LIST_INLINE;
1489 }1489 }
drivers/md/dm-zoned-target.c+1−1
@@ -787,7 +787,7 @@ static int dmz_ctr(struct dm_target *ti, unsigned int argc, char **argv) · 786 unmodified lines
787 787
788 /* Chunk BIO work */788 /* Chunk BIO work */
789 mutex_init(&dmz->chunk_lock);789 mutex_init(&dmz->chunk_lock);
790 INIT_RADIX_TREE(&dmz->chunk_rxtree, GFP_KERNEL);790 INIT_RADIX_TREE(&dmz->chunk_rxtree, GFP_NOIO);
791 dmz->chunk_wq = alloc_workqueue("dmz_cwq_%s", WQ_MEM_RECLAIM | WQ_UNBOUND,791 dmz->chunk_wq = alloc_workqueue("dmz_cwq_%s", WQ_MEM_RECLAIM | WQ_UNBOUND,
792 0, dev->name);792 0, dev->name);
793 if (!dmz->chunk_wq) {793 if (!dmz->chunk_wq) {
drivers/md/dm.c+3−5
@@ -1056,8 +1056,7 @@ static long dm_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff, · 1055 unmodified lines
1056 if (len < 1)1056 if (len < 1)
1057 goto out;1057 goto out;
1058 nr_pages = min(len, nr_pages);1058 nr_pages = min(len, nr_pages);
1059 if (ti->type->direct_access)1059 ret = ti->type->direct_access(ti, pgoff, nr_pages, kaddr, pfn);
1060 ret = ti->type->direct_access(ti, pgoff, nr_pages, kaddr, pfn);
1061 1060
1062 out:1061 out:
1063 dm_put_live_table(md, srcu_idx);1062 dm_put_live_table(md, srcu_idx);
@@ -1606,10 +1605,9 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md, · 542 unmodified lines
1606 * the usage of io->orig_bio in dm_remap_zone_report()1605 * the usage of io->orig_bio in dm_remap_zone_report()
1607 * won't be affected by this reassignment.1606 * won't be affected by this reassignment.
1608 */1607 */
1609 struct bio *b = bio_clone_bioset(bio, GFP_NOIO,1608 struct bio *b = bio_split(bio, bio_sectors(bio) - ci.sector_count,
1610 &md->queue->bio_split);1609 GFP_NOIO, &md->queue->bio_split);
1611 ci.io->orig_bio = b;1610 ci.io->orig_bio = b;
1612 bio_advance(bio, (bio_sectors(bio) - ci.sector_count) << 9);
1613 bio_chain(b, bio);1611 bio_chain(b, bio);
1614 ret = generic_make_request(bio);1612 ret = generic_make_request(bio);
1615 break;1613 break;
drivers/md/md.c+5−3
@@ -5547,7 +5547,8 @@ int md_run(struct mddev *mddev) · 5546 unmodified lines
5547 else5547 else
5548 pr_warn("md: personality for level %s is not loaded!\n",5548 pr_warn("md: personality for level %s is not loaded!\n",
5549 mddev->clevel);5549 mddev->clevel);
5550 return -EINVAL;5550 err = -EINVAL;
5551 goto abort;
5551 }5552 }
5552 spin_unlock(&pers_lock);5553 spin_unlock(&pers_lock);
5553 if (mddev->level != pers->level) {5554 if (mddev->level != pers->level) {
@@ -5560,7 +5561,8 @@ int md_run(struct mddev *mddev) · 6 unmodified lines
5560 pers->start_reshape == NULL) {5561 pers->start_reshape == NULL) {
5561 /* This personality cannot handle reshaping... */5562 /* This personality cannot handle reshaping... */
5562 module_put(pers->owner);5563 module_put(pers->owner);
5563 return -EINVAL;5564 err = -EINVAL;
5565 goto abort;
5564 }5566 }
5565 5567
5566 if (pers->sync_request) {5568 if (pers->sync_request) {
@@ -5629,7 +5631,7 @@ int md_run(struct mddev *mddev) · 62 unmodified lines
5629 mddev->private = NULL;5631 mddev->private = NULL;
5630 module_put(pers->owner);5632 module_put(pers->owner);
5631 bitmap_destroy(mddev);5633 bitmap_destroy(mddev);
5632 return err;5634 goto abort;
5633 }5635 }
5634 if (mddev->queue) {5636 if (mddev->queue) {
5635 bool nonrot = true;5637 bool nonrot = true;
drivers/md/raid10.c+7−0
@@ -3893,6 +3893,13 @@ static int raid10_run(struct mddev *mddev) · 3892 unmodified lines
3893 disk->rdev->saved_raid_disk < 0)3893 disk->rdev->saved_raid_disk < 0)
3894 conf->fullsync = 1;3894 conf->fullsync = 1;
3895 }3895 }
3896
3897 if (disk->replacement &&
3898 !test_bit(In_sync, &disk->replacement->flags) &&
3899 disk->replacement->saved_raid_disk < 0) {
3900 conf->fullsync = 1;
3901 }
3902
3896 disk->recovery_disabled = mddev->recovery_disabled - 1;3903 disk->recovery_disabled = mddev->recovery_disabled - 1;
3897 }3904 }
3898 3905
drivers/media/rc/bpf-lirc.c+2−12
@@ -207,29 +207,19 @@ void lirc_bpf_free(struct rc_dev *rcdev) · 206 unmodified lines
207 bpf_prog_array_free(rcdev->raw->progs);207 bpf_prog_array_free(rcdev->raw->progs);
208}208}
209 209
210int lirc_prog_attach(const union bpf_attr *attr)210int lirc_prog_attach(const union bpf_attr *attr, struct bpf_prog *prog)
211{211{
212 struct bpf_prog *prog;
213 struct rc_dev *rcdev;212 struct rc_dev *rcdev;
214 int ret;213 int ret;
215 214
216 if (attr->attach_flags)215 if (attr->attach_flags)
217 return -EINVAL;216 return -EINVAL;
218 217
219 prog = bpf_prog_get_type(attr->attach_bpf_fd,
220 BPF_PROG_TYPE_LIRC_MODE2);
221 if (IS_ERR(prog))
222 return PTR_ERR(prog);
223
224 rcdev = rc_dev_get_from_fd(attr->target_fd);218 rcdev = rc_dev_get_from_fd(attr->target_fd);
225 if (IS_ERR(rcdev)) {219 if (IS_ERR(rcdev))
226 bpf_prog_put(prog);
227 return PTR_ERR(rcdev);220 return PTR_ERR(rcdev);
228 }
229 221
230 ret = lirc_bpf_attach(rcdev, prog);222 ret = lirc_bpf_attach(rcdev, prog);
231 if (ret)
232 bpf_prog_put(prog);
233 223
234 put_device(&rcdev->dev);224 put_device(&rcdev->dev);
235 225
drivers/mtd/chips/cfi_cmdset_0002.c+11−8
@@ -2526,7 +2526,7 @@ static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) · 2525 unmodified lines
2526 2526
2527struct ppb_lock {2527struct ppb_lock {
2528 struct flchip *chip;2528 struct flchip *chip;
2529 loff_t offset;2529 unsigned long adr;
2530 int locked;2530 int locked;
2531};2531};
2532 2532
@@ -2544,8 +2544,9 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map, · 11 unmodified lines
2544 unsigned long timeo;2544 unsigned long timeo;
2545 int ret;2545 int ret;
2546 2546
2547 adr += chip->start;
2547 mutex_lock(&chip->mutex);2548 mutex_lock(&chip->mutex);
2548 ret = get_chip(map, chip, adr + chip->start, FL_LOCKING);2549 ret = get_chip(map, chip, adr, FL_LOCKING);
2549 if (ret) {2550 if (ret) {
2550 mutex_unlock(&chip->mutex);2551 mutex_unlock(&chip->mutex);
2551 return ret;2552 return ret;
@@ -2563,8 +2564,8 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map, · 11 unmodified lines
2563 2564
2564 if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {2565 if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {
2565 chip->state = FL_LOCKING;2566 chip->state = FL_LOCKING;
2566 map_write(map, CMD(0xA0), chip->start + adr);2567 map_write(map, CMD(0xA0), adr);
2567 map_write(map, CMD(0x00), chip->start + adr);2568 map_write(map, CMD(0x00), adr);
2568 } else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {2569 } else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {
2569 /*2570 /*
2570 * Unlocking of one specific sector is not supported, so we2571 * Unlocking of one specific sector is not supported, so we
@@ -2602,7 +2603,7 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map, · 31 unmodified lines
2602 map_write(map, CMD(0x00), chip->start);2603 map_write(map, CMD(0x00), chip->start);
2603 2604
2604 chip->state = FL_READY;2605 chip->state = FL_READY;
2605 put_chip(map, chip, adr + chip->start);2606 put_chip(map, chip, adr);
2606 mutex_unlock(&chip->mutex);2607 mutex_unlock(&chip->mutex);
2607 2608
2608 return ret;2609 return ret;
@@ -2659,9 +2660,9 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs, · 50 unmodified lines
2659 * sectors shall be unlocked, so lets keep their locking2660 * sectors shall be unlocked, so lets keep their locking
2660 * status at "unlocked" (locked=0) for the final re-locking.2661 * status at "unlocked" (locked=0) for the final re-locking.
2661 */2662 */
2662 if ((adr < ofs) || (adr >= (ofs + len))) {2663 if ((offset < ofs) || (offset >= (ofs + len))) {
2663 sect[sectors].chip = &cfi->chips[chipnum];2664 sect[sectors].chip = &cfi->chips[chipnum];
2664 sect[sectors].offset = offset;2665 sect[sectors].adr = adr;
2665 sect[sectors].locked = do_ppb_xxlock(2666 sect[sectors].locked = do_ppb_xxlock(
2666 map, &cfi->chips[chipnum], adr, 0,2667 map, &cfi->chips[chipnum], adr, 0,
2667 DO_XXLOCK_ONEBLOCK_GETLOCK);2668 DO_XXLOCK_ONEBLOCK_GETLOCK);
@@ -2675,6 +2676,8 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs, · 7 unmodified lines
2675 i++;2676 i++;
2676 2677
2677 if (adr >> cfi->chipshift) {2678 if (adr >> cfi->chipshift) {
2679 if (offset >= (ofs + len))
2680 break;
2678 adr = 0;2681 adr = 0;
2679 chipnum++;2682 chipnum++;
2680 2683
@@ -2705,7 +2708,7 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs, · 24 unmodified lines
2705 */2708 */
2706 for (i = 0; i < sectors; i++) {2709 for (i = 0; i < sectors; i++) {
2707 if (sect[i].locked)2710 if (sect[i].locked)
2708 do_ppb_xxlock(map, sect[i].chip, sect[i].offset, 0,2711 do_ppb_xxlock(map, sect[i].chip, sect[i].adr, 0,
2709 DO_XXLOCK_ONEBLOCK_LOCK);2712 DO_XXLOCK_ONEBLOCK_LOCK);
2710 }2713 }
2711 2714
drivers/mtd/devices/mtd_dataflash.c+2−2
@@ -733,8 +733,8 @@ static struct flash_info dataflash_data[] = { · 732 unmodified lines
733 { "AT45DB642x", 0x1f2800, 8192, 1056, 11, SUP_POW2PS},733 { "AT45DB642x", 0x1f2800, 8192, 1056, 11, SUP_POW2PS},
734 { "at45db642d", 0x1f2800, 8192, 1024, 10, SUP_POW2PS | IS_POW2PS},734 { "at45db642d", 0x1f2800, 8192, 1024, 10, SUP_POW2PS | IS_POW2PS},
735 735
736 { "AT45DB641E", 0x1f28000100, 32768, 264, 9, SUP_EXTID | SUP_POW2PS},736 { "AT45DB641E", 0x1f28000100ULL, 32768, 264, 9, SUP_EXTID | SUP_POW2PS},
737 { "at45db641e", 0x1f28000100, 32768, 256, 8, SUP_EXTID | SUP_POW2PS | IS_POW2PS},737 { "at45db641e", 0x1f28000100ULL, 32768, 256, 8, SUP_EXTID | SUP_POW2PS | IS_POW2PS},
738};738};
739 739
740static struct flash_info *jedec_lookup(struct spi_device *spi,740static struct flash_info *jedec_lookup(struct spi_device *spi,
drivers/mtd/nand/raw/denali_dt.c+5−1
@@ -123,7 +123,11 @@ static int denali_dt_probe(struct platform_device *pdev) · 122 unmodified lines
123 if (ret)123 if (ret)
124 return ret;124 return ret;
125 125
126 denali->clk_x_rate = clk_get_rate(dt->clk);126 /*
127 * Hardcode the clock rate for the backward compatibility.
128 * This works for both SOCFPGA and UniPhier.
129 */
130 denali->clk_x_rate = 200000000;
127 131
128 ret = denali_init(denali);132 ret = denali_init(denali);
129 if (ret)133 if (ret)
drivers/mtd/nand/raw/mxc_nand.c+4−1
@@ -48,7 +48,7 @@ · 47 unmodified lines
48#define NFC_V1_V2_CONFIG (host->regs + 0x0a)48#define NFC_V1_V2_CONFIG (host->regs + 0x0a)
49#define NFC_V1_V2_ECC_STATUS_RESULT (host->regs + 0x0c)49#define NFC_V1_V2_ECC_STATUS_RESULT (host->regs + 0x0c)
50#define NFC_V1_V2_RSLTMAIN_AREA (host->regs + 0x0e)50#define NFC_V1_V2_RSLTMAIN_AREA (host->regs + 0x0e)
51#define NFC_V1_V2_RSLTSPARE_AREA (host->regs + 0x10)51#define NFC_V21_RSLTSPARE_AREA (host->regs + 0x10)
52#define NFC_V1_V2_WRPROT (host->regs + 0x12)52#define NFC_V1_V2_WRPROT (host->regs + 0x12)
53#define NFC_V1_UNLOCKSTART_BLKADDR (host->regs + 0x14)53#define NFC_V1_UNLOCKSTART_BLKADDR (host->regs + 0x14)
54#define NFC_V1_UNLOCKEND_BLKADDR (host->regs + 0x16)54#define NFC_V1_UNLOCKEND_BLKADDR (host->regs + 0x16)
@@ -1274,6 +1274,9 @@ static void preset_v2(struct mtd_info *mtd) · 1219 unmodified lines
1274 writew(config1, NFC_V1_V2_CONFIG1);1274 writew(config1, NFC_V1_V2_CONFIG1);
1275 /* preset operation */1275 /* preset operation */
1276 1276
1277 /* spare area size in 16-bit half-words */
1278 writew(mtd->oobsize / 2, NFC_V21_RSLTSPARE_AREA);
1279
1277 /* Unlock the internal RAM Buffer */1280 /* Unlock the internal RAM Buffer */
1278 writew(0x2, NFC_V1_V2_CONFIG);1281 writew(0x2, NFC_V1_V2_CONFIG);
1279 1282
drivers/mtd/nand/raw/nand_base.c+1−1
@@ -440,7 +440,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs) · 439 unmodified lines
440 440
441 for (; page < page_end; page++) {441 for (; page < page_end; page++) {
442 res = chip->ecc.read_oob(mtd, chip, page);442 res = chip->ecc.read_oob(mtd, chip, page);
443 if (res)443 if (res < 0)
444 return res;444 return res;
445 445
446 bad = chip->oob_poi[chip->badblockpos];446 bad = chip->oob_poi[chip->badblockpos];
drivers/mtd/nand/raw/nand_macronix.c+36−12
@@ -17,23 +17,47 @@ · 16 unmodified lines
17 17
18#include <linux/mtd/rawnand.h>18#include <linux/mtd/rawnand.h>
19 19
20/*
21 * Macronix AC series does not support using SET/GET_FEATURES to change
22 * the timings unlike what is declared in the parameter page. Unflag
23 * this feature to avoid unnecessary downturns.
24 */
25static void macronix_nand_fix_broken_get_timings(struct nand_chip *chip)
26{
27 unsigned int i;
28 static const char * const broken_get_timings[] = {
29 "MX30LF1G18AC",
30 "MX30LF1G28AC",
31 "MX30LF2G18AC",
32 "MX30LF2G28AC",
33 "MX30LF4G18AC",
34 "MX30LF4G28AC",
35 "MX60LF8G18AC",
36 };
37
38 if (!chip->parameters.supports_set_get_features)
39 return;
40
41 for (i = 0; i < ARRAY_SIZE(broken_get_timings); i++) {
42 if (!strcmp(broken_get_timings[i], chip->parameters.model))
43 break;
44 }
45
46 if (i == ARRAY_SIZE(broken_get_timings))
47 return;
48
49 bitmap_clear(chip->parameters.get_feature_list,
50 ONFI_FEATURE_ADDR_TIMING_MODE, 1);
51 bitmap_clear(chip->parameters.set_feature_list,
52 ONFI_FEATURE_ADDR_TIMING_MODE, 1);
53}
54
20static int macronix_nand_init(struct nand_chip *chip)55static int macronix_nand_init(struct nand_chip *chip)
21{56{
22 if (nand_is_slc(chip))57 if (nand_is_slc(chip))
23 chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;58 chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;
24 59
25 /*60 macronix_nand_fix_broken_get_timings(chip);
26 * MX30LF2G18AC chip does not support using SET/GET_FEATURES to change
27 * the timings unlike what is declared in the parameter page. Unflag
28 * this feature to avoid unnecessary downturns.
29 */
30 if (chip->parameters.supports_set_get_features &&
31 !strcmp("MX30LF2G18AC", chip->parameters.model)) {
32 bitmap_clear(chip->parameters.get_feature_list,
33 ONFI_FEATURE_ADDR_TIMING_MODE, 1);
34 bitmap_clear(chip->parameters.set_feature_list,
35 ONFI_FEATURE_ADDR_TIMING_MODE, 1);
36 }
37 61
38 return 0;62 return 0;
39}63}
drivers/mtd/nand/raw/nand_micron.c+2−0
@@ -66,7 +66,9 @@ static int micron_nand_onfi_init(struct nand_chip *chip) · 65 unmodified lines
66 66
67 if (p->supports_set_get_features) {67 if (p->supports_set_get_features) {
68 set_bit(ONFI_FEATURE_ADDR_READ_RETRY, p->set_feature_list);68 set_bit(ONFI_FEATURE_ADDR_READ_RETRY, p->set_feature_list);
69 set_bit(ONFI_FEATURE_ON_DIE_ECC, p->set_feature_list);
69 set_bit(ONFI_FEATURE_ADDR_READ_RETRY, p->get_feature_list);70 set_bit(ONFI_FEATURE_ADDR_READ_RETRY, p->get_feature_list);
71 set_bit(ONFI_FEATURE_ON_DIE_ECC, p->get_feature_list);
70 }72 }
71 73
72 return 0;74 return 0;
drivers/net/ethernet/atheros/alx/main.c+7−1
@@ -1897,13 +1897,19 @@ static int alx_resume(struct device *dev) · 1896 unmodified lines
1897 struct pci_dev *pdev = to_pci_dev(dev);1897 struct pci_dev *pdev = to_pci_dev(dev);
1898 struct alx_priv *alx = pci_get_drvdata(pdev);1898 struct alx_priv *alx = pci_get_drvdata(pdev);
1899 struct alx_hw *hw = &alx->hw;1899 struct alx_hw *hw = &alx->hw;
1900 int err;
1900 1901
1901 alx_reset_phy(hw);1902 alx_reset_phy(hw);
1902 1903
1903 if (!netif_running(alx->dev))1904 if (!netif_running(alx->dev))
1904 return 0;1905 return 0;
1905 netif_device_attach(alx->dev);1906 netif_device_attach(alx->dev);
1906 return __alx_open(alx, true);1907
1908 rtnl_lock();
1909 err = __alx_open(alx, true);
1910 rtnl_unlock();
1911
1912 return err;
1907}1913}
1908 1914
1909static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume);1915static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume);
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h+1−0
@@ -1533,6 +1533,7 @@ struct bnx2x { · 1532 unmodified lines
1533 struct link_vars link_vars;1533 struct link_vars link_vars;
1534 u32 link_cnt;1534 u32 link_cnt;
1535 struct bnx2x_link_report_data last_reported_link;1535 struct bnx2x_link_report_data last_reported_link;
1536 bool force_link_down;
1536 1537
1537 struct mdio_if_info mdio;1538 struct mdio_if_info mdio;
1538 1539
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c+6−0
@@ -1261,6 +1261,11 @@ void __bnx2x_link_report(struct bnx2x *bp) · 1260 unmodified lines
1261{1261{
1262 struct bnx2x_link_report_data cur_data;1262 struct bnx2x_link_report_data cur_data;
1263 1263
1264 if (bp->force_link_down) {
1265 bp->link_vars.link_up = 0;
1266 return;
1267 }
1268
1264 /* reread mf_cfg */1269 /* reread mf_cfg */
1265 if (IS_PF(bp) && !CHIP_IS_E1(bp))1270 if (IS_PF(bp) && !CHIP_IS_E1(bp))
1266 bnx2x_read_mf_cfg(bp);1271 bnx2x_read_mf_cfg(bp);
@@ -2817,6 +2822,7 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode) · 1550 unmodified lines
2817 bp->pending_max = 0;2822 bp->pending_max = 0;
2818 }2823 }
2819 2824
2825 bp->force_link_down = false;
2820 if (bp->port.pmf) {2826 if (bp->port.pmf) {
2821 rc = bnx2x_initial_phy_init(bp, load_mode);2827 rc = bnx2x_initial_phy_init(bp, load_mode);
2822 if (rc)2828 if (rc)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c+6−0
@@ -10279,6 +10279,12 @@ static void bnx2x_sp_rtnl_task(struct work_struct *work) · 10278 unmodified lines
10279 bp->sp_rtnl_state = 0;10279 bp->sp_rtnl_state = 0;
10280 smp_mb();10280 smp_mb();
10281 10281
10282 /* Immediately indicate link as down */
10283 bp->link_vars.link_up = 0;
10284 bp->force_link_down = true;
10285 netif_carrier_off(bp->dev);
10286 BNX2X_ERR("Indicating link is down due to Tx-timeout\n");
10287
10282 bnx2x_nic_unload(bp, UNLOAD_NORMAL, true);10288 bnx2x_nic_unload(bp, UNLOAD_NORMAL, true);
10283 /* When ret value shows failure of allocation failure,10289 /* When ret value shows failure of allocation failure,
10284 * the nic is rebooted again. If open still fails, a error10290 * the nic is rebooted again. If open still fails, a error
drivers/net/ethernet/broadcom/cnic.c+1−1
@@ -660,7 +660,7 @@ static int cnic_init_id_tbl(struct cnic_id_tbl *id_tbl, u32 size, u32 start_id, · 659 unmodified lines
660 id_tbl->max = size;660 id_tbl->max = size;
661 id_tbl->next = next;661 id_tbl->next = next;
662 spin_lock_init(&id_tbl->lock);662 spin_lock_init(&id_tbl->lock);
663 id_tbl->table = kcalloc(DIV_ROUND_UP(size, 32), 4, GFP_KERNEL);663 id_tbl->table = kcalloc(BITS_TO_LONGS(size), sizeof(long), GFP_KERNEL);
664 if (!id_tbl->table)664 if (!id_tbl->table)
665 return -ENOMEM;665 return -ENOMEM;
666 666
drivers/net/ethernet/cadence/macb_main.c+2−0
@@ -3726,6 +3726,8 @@ static int at91ether_init(struct platform_device *pdev) · 3725 unmodified lines
3726 int err;3726 int err;
3727 u32 reg;3727 u32 reg;
3728 3728
3729 bp->queues[0].bp = bp;
3730
3729 dev->netdev_ops = &at91ether_netdev_ops;3731 dev->netdev_ops = &at91ether_netdev_ops;
3730 dev->ethtool_ops = &macb_ethtool_ops;3732 dev->ethtool_ops = &macb_ethtool_ops;
3731 3733
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c+8−7
@@ -125,6 +125,9 @@ MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms"); · 124 unmodified lines
125/* Default alignment for start of data in an Rx FD */125/* Default alignment for start of data in an Rx FD */
126#define DPAA_FD_DATA_ALIGNMENT 16126#define DPAA_FD_DATA_ALIGNMENT 16
127 127
128/* The DPAA requires 256 bytes reserved and mapped for the SGT */
129#define DPAA_SGT_SIZE 256
130
128/* Values for the L3R field of the FM Parse Results131/* Values for the L3R field of the FM Parse Results
129 */132 */
130/* L3 Type field: First IP Present IPv4 */133/* L3 Type field: First IP Present IPv4 */
@@ -1631,8 +1634,8 @@ static struct sk_buff *dpaa_cleanup_tx_fd(const struct dpaa_priv *priv, · 1500 unmodified lines
1631 1634
1632 if (unlikely(qm_fd_get_format(fd) == qm_fd_sg)) {1635 if (unlikely(qm_fd_get_format(fd) == qm_fd_sg)) {
1633 nr_frags = skb_shinfo(skb)->nr_frags;1636 nr_frags = skb_shinfo(skb)->nr_frags;
1634 dma_unmap_single(dev, addr, qm_fd_get_offset(fd) +1637 dma_unmap_single(dev, addr,
1635 sizeof(struct qm_sg_entry) * (1 + nr_frags),1638 qm_fd_get_offset(fd) + DPAA_SGT_SIZE,
1636 dma_dir);1639 dma_dir);
1637 1640
1638 /* The sgt buffer has been allocated with netdev_alloc_frag(),1641 /* The sgt buffer has been allocated with netdev_alloc_frag(),
@@ -1917,8 +1920,7 @@ static int skb_to_sg_fd(struct dpaa_priv *priv, · 278 unmodified lines
1917 void *sgt_buf;1920 void *sgt_buf;
1918 1921
1919 /* get a page frag to store the SGTable */1922 /* get a page frag to store the SGTable */
1920 sz = SKB_DATA_ALIGN(priv->tx_headroom +1923 sz = SKB_DATA_ALIGN(priv->tx_headroom + DPAA_SGT_SIZE);
1921 sizeof(struct qm_sg_entry) * (1 + nr_frags));
1922 sgt_buf = netdev_alloc_frag(sz);1924 sgt_buf = netdev_alloc_frag(sz);
1923 if (unlikely(!sgt_buf)) {1925 if (unlikely(!sgt_buf)) {
1924 netdev_err(net_dev, "netdev_alloc_frag() failed for size %d\n",1926 netdev_err(net_dev, "netdev_alloc_frag() failed for size %d\n",
@@ -1986,9 +1988,8 @@ static int skb_to_sg_fd(struct dpaa_priv *priv, · 61 unmodified lines
1986 skbh = (struct sk_buff **)buffer_start;1988 skbh = (struct sk_buff **)buffer_start;
1987 *skbh = skb;1989 *skbh = skb;
1988 1990
1989 addr = dma_map_single(dev, buffer_start, priv->tx_headroom +1991 addr = dma_map_single(dev, buffer_start,
1990 sizeof(struct qm_sg_entry) * (1 + nr_frags),1992 priv->tx_headroom + DPAA_SGT_SIZE, dma_dir);
1991 dma_dir);
1992 if (unlikely(dma_mapping_error(dev, addr))) {1993 if (unlikely(dma_mapping_error(dev, addr))) {
1993 dev_err(dev, "DMA mapping failed");1994 dev_err(dev, "DMA mapping failed");
1994 err = -EINVAL;1995 err = -EINVAL;
drivers/net/ethernet/freescale/fman/fman_port.c+8−0
@@ -324,6 +324,10 @@ struct fman_port_qmi_regs { · 323 unmodified lines
324#define HWP_HXS_PHE_REPORT 0x00000800324#define HWP_HXS_PHE_REPORT 0x00000800
325#define HWP_HXS_PCAC_PSTAT 0x00000100325#define HWP_HXS_PCAC_PSTAT 0x00000100
326#define HWP_HXS_PCAC_PSTOP 0x00000001326#define HWP_HXS_PCAC_PSTOP 0x00000001
327#define HWP_HXS_TCP_OFFSET 0xA
328#define HWP_HXS_UDP_OFFSET 0xB
329#define HWP_HXS_SH_PAD_REM 0x80000000
330
327struct fman_port_hwp_regs {331struct fman_port_hwp_regs {
328 struct {332 struct {
329 u32 ssa; /* Soft Sequence Attachment */333 u32 ssa; /* Soft Sequence Attachment */
@@ -728,6 +732,10 @@ static void init_hwp(struct fman_port *port) · 398 unmodified lines
728 iowrite32be(0xffffffff, &regs->pmda[i].lcv);732 iowrite32be(0xffffffff, &regs->pmda[i].lcv);
729 }733 }
730 734
735 /* Short packet padding removal from checksum calculation */
736 iowrite32be(HWP_HXS_SH_PAD_REM, &regs->pmda[HWP_HXS_TCP_OFFSET].ssa);
737 iowrite32be(HWP_HXS_SH_PAD_REM, &regs->pmda[HWP_HXS_UDP_OFFSET].ssa);
738
731 start_port_hwp(port);739 start_port_hwp(port);
732}740}
733 741
drivers/net/ethernet/huawei/hinic/hinic_rx.c+1−0
@@ -439,6 +439,7 @@ static void rx_free_irq(struct hinic_rxq *rxq) · 438 unmodified lines
439{439{
440 struct hinic_rq *rq = rxq->rq;440 struct hinic_rq *rq = rxq->rq;
441 441
442 irq_set_affinity_hint(rq->irq, NULL);
442 free_irq(rq->irq, rxq);443 free_irq(rq->irq, rxq);
443 rx_del_napi(rxq);444 rx_del_napi(rxq);
444}445}
drivers/net/ethernet/intel/i40e/i40e_txrx.c+15−9
@@ -2199,9 +2199,10 @@ static bool i40e_is_non_eop(struct i40e_ring *rx_ring, · 2198 unmodified lines
2199 return true;2199 return true;
2200}2200}
2201 2201
2202#define I40E_XDP_PASS 02202#define I40E_XDP_PASS 0
2203#define I40E_XDP_CONSUMED 12203#define I40E_XDP_CONSUMED BIT(0)
2204#define I40E_XDP_TX 22204#define I40E_XDP_TX BIT(1)
2205#define I40E_XDP_REDIR BIT(2)
2205 2206
2206static int i40e_xmit_xdp_ring(struct xdp_frame *xdpf,2207static int i40e_xmit_xdp_ring(struct xdp_frame *xdpf,
2207 struct i40e_ring *xdp_ring);2208 struct i40e_ring *xdp_ring);
@@ -2248,7 +2249,7 @@ static struct sk_buff *i40e_run_xdp(struct i40e_ring *rx_ring, · 40 unmodified lines
2248 break;2249 break;
2249 case XDP_REDIRECT:2250 case XDP_REDIRECT:
2250 err = xdp_do_redirect(rx_ring->netdev, xdp, xdp_prog);2251 err = xdp_do_redirect(rx_ring->netdev, xdp, xdp_prog);
2251 result = !err ? I40E_XDP_TX : I40E_XDP_CONSUMED;2252 result = !err ? I40E_XDP_REDIR : I40E_XDP_CONSUMED;
2252 break;2253 break;
2253 default:2254 default:
2254 bpf_warn_invalid_xdp_action(act);2255 bpf_warn_invalid_xdp_action(act);
@@ -2311,7 +2312,8 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) · 56 unmodified lines
2311 unsigned int total_rx_bytes = 0, total_rx_packets = 0;2312 unsigned int total_rx_bytes = 0, total_rx_packets = 0;
2312 struct sk_buff *skb = rx_ring->skb;2313 struct sk_buff *skb = rx_ring->skb;
2313 u16 cleaned_count = I40E_DESC_UNUSED(rx_ring);2314 u16 cleaned_count = I40E_DESC_UNUSED(rx_ring);
2314 bool failure = false, xdp_xmit = false;2315 unsigned int xdp_xmit = 0;
2316 bool failure = false;
2315 struct xdp_buff xdp;2317 struct xdp_buff xdp;
2316 2318
2317 xdp.rxq = &rx_ring->xdp_rxq;2319 xdp.rxq = &rx_ring->xdp_rxq;
@@ -2372,8 +2374,10 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) · 54 unmodified lines
2372 }2374 }
2373 2375
2374 if (IS_ERR(skb)) {2376 if (IS_ERR(skb)) {
2375 if (PTR_ERR(skb) == -I40E_XDP_TX) {2377 unsigned int xdp_res = -PTR_ERR(skb);
2376 xdp_xmit = true;2378
2379 if (xdp_res & (I40E_XDP_TX | I40E_XDP_REDIR)) {
2380 xdp_xmit |= xdp_res;
2377 i40e_rx_buffer_flip(rx_ring, rx_buffer, size);2381 i40e_rx_buffer_flip(rx_ring, rx_buffer, size);
2378 } else {2382 } else {
2379 rx_buffer->pagecnt_bias++;2383 rx_buffer->pagecnt_bias++;
@@ -2427,12 +2431,14 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) · 47 unmodified lines
2427 total_rx_packets++;2431 total_rx_packets++;
2428 }2432 }
2429 2433
2430 if (xdp_xmit) {2434 if (xdp_xmit & I40E_XDP_REDIR)
2435 xdp_do_flush_map();
2436
2437 if (xdp_xmit & I40E_XDP_TX) {
2431 struct i40e_ring *xdp_ring =2438 struct i40e_ring *xdp_ring =
2432 rx_ring->vsi->xdp_rings[rx_ring->queue_index];2439 rx_ring->vsi->xdp_rings[rx_ring->queue_index];
2433 2440
2434 i40e_xdp_ring_update_tail(xdp_ring);2441 i40e_xdp_ring_update_tail(xdp_ring);
2435 xdp_do_flush_map();
2436 }2442 }
2437 2443
2438 rx_ring->skb = skb;2444 rx_ring->skb = skb;
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c+14−10
@@ -2186,9 +2186,10 @@ static struct sk_buff *ixgbe_build_skb(struct ixgbe_ring *rx_ring, · 2185 unmodified lines
2186 return skb;2186 return skb;
2187}2187}
2188 2188
2189#define IXGBE_XDP_PASS 02189#define IXGBE_XDP_PASS 0
2190#define IXGBE_XDP_CONSUMED 12190#define IXGBE_XDP_CONSUMED BIT(0)
2191#define IXGBE_XDP_TX 22191#define IXGBE_XDP_TX BIT(1)
2192#define IXGBE_XDP_REDIR BIT(2)
2192 2193
2193static int ixgbe_xmit_xdp_ring(struct ixgbe_adapter *adapter,2194static int ixgbe_xmit_xdp_ring(struct ixgbe_adapter *adapter,
2194 struct xdp_frame *xdpf);2195 struct xdp_frame *xdpf);
@@ -2225,7 +2226,7 @@ static struct sk_buff *ixgbe_run_xdp(struct ixgbe_adapter *adapter, · 30 unmodified lines
2225 case XDP_REDIRECT:2226 case XDP_REDIRECT:
2226 err = xdp_do_redirect(adapter->netdev, xdp, xdp_prog);2227 err = xdp_do_redirect(adapter->netdev, xdp, xdp_prog);
2227 if (!err)2228 if (!err)
2228 result = IXGBE_XDP_TX;2229 result = IXGBE_XDP_REDIR;
2229 else2230 else
2230 result = IXGBE_XDP_CONSUMED;2231 result = IXGBE_XDP_CONSUMED;
2231 break;2232 break;
@@ -2285,7 +2286,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, · 53 unmodified lines
2285 unsigned int mss = 0;2286 unsigned int mss = 0;
2286#endif /* IXGBE_FCOE */2287#endif /* IXGBE_FCOE */
2287 u16 cleaned_count = ixgbe_desc_unused(rx_ring);2288 u16 cleaned_count = ixgbe_desc_unused(rx_ring);
2288 bool xdp_xmit = false;2289 unsigned int xdp_xmit = 0;
2289 struct xdp_buff xdp;2290 struct xdp_buff xdp;
2290 2291
2291 xdp.rxq = &rx_ring->xdp_rxq;2292 xdp.rxq = &rx_ring->xdp_rxq;
@@ -2328,8 +2329,10 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, · 36 unmodified lines
2328 }2329 }
2329 2330
2330 if (IS_ERR(skb)) {2331 if (IS_ERR(skb)) {
2331 if (PTR_ERR(skb) == -IXGBE_XDP_TX) {2332 unsigned int xdp_res = -PTR_ERR(skb);
2332 xdp_xmit = true;2333
2334 if (xdp_res & (IXGBE_XDP_TX | IXGBE_XDP_REDIR)) {
2335 xdp_xmit |= xdp_res;
2333 ixgbe_rx_buffer_flip(rx_ring, rx_buffer, size);2336 ixgbe_rx_buffer_flip(rx_ring, rx_buffer, size);
2334 } else {2337 } else {
2335 rx_buffer->pagecnt_bias++;2338 rx_buffer->pagecnt_bias++;
@@ -2401,7 +2404,10 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, · 65 unmodified lines
2401 total_rx_packets++;2404 total_rx_packets++;
2402 }2405 }
2403 2406
2404 if (xdp_xmit) {2407 if (xdp_xmit & IXGBE_XDP_REDIR)
2408 xdp_do_flush_map();
2409
2410 if (xdp_xmit & IXGBE_XDP_TX) {
2405 struct ixgbe_ring *ring = adapter->xdp_ring[smp_processor_id()];2411 struct ixgbe_ring *ring = adapter->xdp_ring[smp_processor_id()];
2406 2412
2407 /* Force memory writes to complete before letting h/w2413 /* Force memory writes to complete before letting h/w
@@ -2409,8 +2415,6 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, · 1 unmodified line
2409 */2415 */
2410 wmb();2416 wmb();
2411 writel(ring->next_to_use, ring->tail);2417 writel(ring->next_to_use, ring->tail);
2412
2413 xdp_do_flush_map();
2414 }2418 }
2415 2419
2416 u64_stats_update_begin(&rx_ring->syncp);2420 u64_stats_update_begin(&rx_ring->syncp);
drivers/net/ethernet/mellanox/mlx5/core/cmd.c+4−4
@@ -807,6 +807,7 @@ static void cmd_work_handler(struct work_struct *work) · 806 unmodified lines
807 unsigned long flags;807 unsigned long flags;
808 bool poll_cmd = ent->polling;808 bool poll_cmd = ent->polling;
809 int alloc_ret;809 int alloc_ret;
810 int cmd_mode;
810 811
811 sem = ent->page_queue ? &cmd->pages_sem : &cmd->sem;812 sem = ent->page_queue ? &cmd->pages_sem : &cmd->sem;
812 down(sem);813 down(sem);
@@ -853,6 +854,7 @@ static void cmd_work_handler(struct work_struct *work) · 40 unmodified lines
853 set_signature(ent, !cmd->checksum_disabled);854 set_signature(ent, !cmd->checksum_disabled);
854 dump_command(dev, ent, 1);855 dump_command(dev, ent, 1);
855 ent->ts1 = ktime_get_ns();856 ent->ts1 = ktime_get_ns();
857 cmd_mode = cmd->mode;
856 858
857 if (ent->callback)859 if (ent->callback)
858 schedule_delayed_work(&ent->cb_timeout_work, cb_timeout);860 schedule_delayed_work(&ent->cb_timeout_work, cb_timeout);
@@ -877,7 +879,7 @@ static void cmd_work_handler(struct work_struct *work) · 18 unmodified lines
877 iowrite32be(1 << ent->idx, &dev->iseg->cmd_dbell);879 iowrite32be(1 << ent->idx, &dev->iseg->cmd_dbell);
878 mmiowb();880 mmiowb();
879 /* if not in polling don't use ent after this point */881 /* if not in polling don't use ent after this point */
880 if (cmd->mode == CMD_MODE_POLLING || poll_cmd) {882 if (cmd_mode == CMD_MODE_POLLING || poll_cmd) {
881 poll_timeout(ent);883 poll_timeout(ent);
882 /* make sure we read the descriptor after ownership is SW */884 /* make sure we read the descriptor after ownership is SW */
883 rmb();885 rmb();
@@ -1276,7 +1278,7 @@ static ssize_t outlen_write(struct file *filp, const char __user *buf, · 392 unmodified lines
1276{1278{
1277 struct mlx5_core_dev *dev = filp->private_data;1279 struct mlx5_core_dev *dev = filp->private_data;
1278 struct mlx5_cmd_debug *dbg = &dev->cmd.dbg;1280 struct mlx5_cmd_debug *dbg = &dev->cmd.dbg;
1279 char outlen_str[8];1281 char outlen_str[8] = {0};
1280 int outlen;1282 int outlen;
1281 void *ptr;1283 void *ptr;
1282 int err;1284 int err;
@@ -1291,8 +1293,6 @@ static ssize_t outlen_write(struct file *filp, const char __user *buf, · 8 unmodified lines
1291 if (copy_from_user(outlen_str, buf, count))1293 if (copy_from_user(outlen_str, buf, count))
1292 return -EFAULT;1294 return -EFAULT;
1293 1295
1294 outlen_str[7] = 0;
1295
1296 err = sscanf(outlen_str, "%d", &outlen);1296 err = sscanf(outlen_str, "%d", &outlen);
1297 if (err < 0)1297 if (err < 0)
1298 return err;1298 return err;
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+6−6
@@ -2843,7 +2843,7 @@ void mlx5e_activate_priv_channels(struct mlx5e_priv *priv) · 2842 unmodified lines
2843 mlx5e_activate_channels(&priv->channels);2843 mlx5e_activate_channels(&priv->channels);
2844 netif_tx_start_all_queues(priv->netdev);2844 netif_tx_start_all_queues(priv->netdev);
2845 2845
2846 if (MLX5_VPORT_MANAGER(priv->mdev))2846 if (MLX5_ESWITCH_MANAGER(priv->mdev))
2847 mlx5e_add_sqs_fwd_rules(priv);2847 mlx5e_add_sqs_fwd_rules(priv);
2848 2848
2849 mlx5e_wait_channels_min_rx_wqes(&priv->channels);2849 mlx5e_wait_channels_min_rx_wqes(&priv->channels);
@@ -2854,7 +2854,7 @@ void mlx5e_deactivate_priv_channels(struct mlx5e_priv *priv) · 4 unmodified lines
2854{2854{
2855 mlx5e_redirect_rqts_to_drop(priv);2855 mlx5e_redirect_rqts_to_drop(priv);
2856 2856
2857 if (MLX5_VPORT_MANAGER(priv->mdev))2857 if (MLX5_ESWITCH_MANAGER(priv->mdev))
2858 mlx5e_remove_sqs_fwd_rules(priv);2858 mlx5e_remove_sqs_fwd_rules(priv);
2859 2859
2860 /* FIXME: This is a W/A only for tx timeout watch dog false alarm when2860 /* FIXME: This is a W/A only for tx timeout watch dog false alarm when
@@ -4600,7 +4600,7 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev) · 1739 unmodified lines
4600 mlx5e_set_netdev_dev_addr(netdev);4600 mlx5e_set_netdev_dev_addr(netdev);
4601 4601
4602#if IS_ENABLED(CONFIG_MLX5_ESWITCH)4602#if IS_ENABLED(CONFIG_MLX5_ESWITCH)
4603 if (MLX5_VPORT_MANAGER(mdev))4603 if (MLX5_ESWITCH_MANAGER(mdev))
4604 netdev->switchdev_ops = &mlx5e_switchdev_ops;4604 netdev->switchdev_ops = &mlx5e_switchdev_ops;
4605#endif4605#endif
4606 4606
@@ -4756,7 +4756,7 @@ static void mlx5e_nic_enable(struct mlx5e_priv *priv) · 149 unmodified lines
4756 4756
4757 mlx5e_enable_async_events(priv);4757 mlx5e_enable_async_events(priv);
4758 4758
4759 if (MLX5_VPORT_MANAGER(priv->mdev))4759 if (MLX5_ESWITCH_MANAGER(priv->mdev))
4760 mlx5e_register_vport_reps(priv);4760 mlx5e_register_vport_reps(priv);
4761 4761
4762 if (netdev->reg_state != NETREG_REGISTERED)4762 if (netdev->reg_state != NETREG_REGISTERED)
@@ -4791,7 +4791,7 @@ static void mlx5e_nic_disable(struct mlx5e_priv *priv) · 28 unmodified lines
4791 4791
4792 queue_work(priv->wq, &priv->set_rx_mode_work);4792 queue_work(priv->wq, &priv->set_rx_mode_work);
4793 4793
4794 if (MLX5_VPORT_MANAGER(priv->mdev))4794 if (MLX5_ESWITCH_MANAGER(priv->mdev))
4795 mlx5e_unregister_vport_reps(priv);4795 mlx5e_unregister_vport_reps(priv);
4796 4796
4797 mlx5e_disable_async_events(priv);4797 mlx5e_disable_async_events(priv);
@@ -4975,7 +4975,7 @@ static void *mlx5e_add(struct mlx5_core_dev *mdev) · 177 unmodified lines
4975 return NULL;4975 return NULL;
4976 4976
4977#ifdef CONFIG_MLX5_ESWITCH4977#ifdef CONFIG_MLX5_ESWITCH
4978 if (MLX5_VPORT_MANAGER(mdev)) {4978 if (MLX5_ESWITCH_MANAGER(mdev)) {
4979 rpriv = mlx5e_alloc_nic_rep_priv(mdev);4979 rpriv = mlx5e_alloc_nic_rep_priv(mdev);
4980 if (!rpriv) {4980 if (!rpriv) {
4981 mlx5_core_warn(mdev, "Failed to alloc NIC rep priv data\n");4981 mlx5_core_warn(mdev, "Failed to alloc NIC rep priv data\n");
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c+6−2
@@ -823,7 +823,7 @@ bool mlx5e_is_uplink_rep(struct mlx5e_priv *priv) · 822 unmodified lines
823 struct mlx5e_rep_priv *rpriv = priv->ppriv;823 struct mlx5e_rep_priv *rpriv = priv->ppriv;
824 struct mlx5_eswitch_rep *rep;824 struct mlx5_eswitch_rep *rep;
825 825
826 if (!MLX5_CAP_GEN(priv->mdev, vport_group_manager))826 if (!MLX5_ESWITCH_MANAGER(priv->mdev))
827 return false;827 return false;
828 828
829 rep = rpriv->rep;829 rep = rpriv->rep;
@@ -837,8 +837,12 @@ bool mlx5e_is_uplink_rep(struct mlx5e_priv *priv) · 7 unmodified lines
837static bool mlx5e_is_vf_vport_rep(struct mlx5e_priv *priv)837static bool mlx5e_is_vf_vport_rep(struct mlx5e_priv *priv)
838{838{
839 struct mlx5e_rep_priv *rpriv = priv->ppriv;839 struct mlx5e_rep_priv *rpriv = priv->ppriv;
840 struct mlx5_eswitch_rep *rep = rpriv->rep;840 struct mlx5_eswitch_rep *rep;
841 841
842 if (!MLX5_ESWITCH_MANAGER(priv->mdev))
843 return false;
844
845 rep = rpriv->rep;
842 if (rep && rep->vport != FDB_UPLINK_VPORT)846 if (rep && rep->vport != FDB_UPLINK_VPORT)
843 return true;847 return true;
844 848
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c+5−7
@@ -1594,17 +1594,15 @@ static void esw_disable_vport(struct mlx5_eswitch *esw, int vport_num) · 1593 unmodified lines
1594}1594}
1595 1595
1596/* Public E-Switch API */1596/* Public E-Switch API */
1597#define ESW_ALLOWED(esw) ((esw) && MLX5_VPORT_MANAGER((esw)->dev))1597#define ESW_ALLOWED(esw) ((esw) && MLX5_ESWITCH_MANAGER((esw)->dev))
1598
1598 1599
1599int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)1600int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)
1600{1601{
1601 int err;1602 int err;
1602 int i, enabled_events;1603 int i, enabled_events;
1603 1604
1604 if (!ESW_ALLOWED(esw))1605 if (!ESW_ALLOWED(esw) ||
1605 return 0;
1606
1607 if (!MLX5_CAP_GEN(esw->dev, eswitch_flow_table) ||
1608 !MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, ft_support)) {1606 !MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, ft_support)) {
1609 esw_warn(esw->dev, "E-Switch FDB is not supported, aborting ...\n");1607 esw_warn(esw->dev, "E-Switch FDB is not supported, aborting ...\n");
1610 return -EOPNOTSUPP;1608 return -EOPNOTSUPP;
@@ -1806,7 +1804,7 @@ int mlx5_eswitch_set_vport_mac(struct mlx5_eswitch *esw, · 195 unmodified lines
1806 u64 node_guid;1804 u64 node_guid;
1807 int err = 0;1805 int err = 0;
1808 1806
1809 if (!ESW_ALLOWED(esw))1807 if (!MLX5_CAP_GEN(esw->dev, vport_group_manager))
1810 return -EPERM;1808 return -EPERM;
1811 if (!LEGAL_VPORT(esw, vport) || is_multicast_ether_addr(mac))1809 if (!LEGAL_VPORT(esw, vport) || is_multicast_ether_addr(mac))
1812 return -EINVAL;1810 return -EINVAL;
@@ -1883,7 +1881,7 @@ int mlx5_eswitch_get_vport_config(struct mlx5_eswitch *esw, · 70 unmodified lines
1883{1881{
1884 struct mlx5_vport *evport;1882 struct mlx5_vport *evport;
1885 1883
1886 if (!ESW_ALLOWED(esw))1884 if (!MLX5_CAP_GEN(esw->dev, vport_group_manager))
1887 return -EPERM;1885 return -EPERM;
1888 if (!LEGAL_VPORT(esw, vport))1886 if (!LEGAL_VPORT(esw, vport))
1889 return -EINVAL;1887 return -EINVAL;
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c+2−2
@@ -1079,8 +1079,8 @@ static int mlx5_devlink_eswitch_check(struct devlink *devlink) · 1078 unmodified lines
1079 if (MLX5_CAP_GEN(dev, port_type) != MLX5_CAP_PORT_TYPE_ETH)1079 if (MLX5_CAP_GEN(dev, port_type) != MLX5_CAP_PORT_TYPE_ETH)
1080 return -EOPNOTSUPP;1080 return -EOPNOTSUPP;
1081 1081
1082 if (!MLX5_CAP_GEN(dev, vport_group_manager))1082 if(!MLX5_ESWITCH_MANAGER(dev))
1083 return -EOPNOTSUPP;1083 return -EPERM;
1084 1084
1085 if (dev->priv.eswitch->mode == SRIOV_NONE)1085 if (dev->priv.eswitch->mode == SRIOV_NONE)
1086 return -EOPNOTSUPP;1086 return -EOPNOTSUPP;
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c+2−1
@@ -32,6 +32,7 @@ · 31 unmodified lines
32 32
33#include <linux/mutex.h>33#include <linux/mutex.h>
34#include <linux/mlx5/driver.h>34#include <linux/mlx5/driver.h>
35#include <linux/mlx5/eswitch.h>
35 36
36#include "mlx5_core.h"37#include "mlx5_core.h"
37#include "fs_core.h"38#include "fs_core.h"
@@ -2652,7 +2653,7 @@ int mlx5_init_fs(struct mlx5_core_dev *dev) · 2614 unmodified lines
2652 goto err;2653 goto err;
2653 }2654 }
2654 2655
2655 if (MLX5_CAP_GEN(dev, eswitch_flow_table)) {2656 if (MLX5_ESWITCH_MANAGER(dev)) {
2656 if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev, ft_support)) {2657 if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev, ft_support)) {
2657 err = init_fdb_root_ns(steering);2658 err = init_fdb_root_ns(steering);
2658 if (err)2659 if (err)
drivers/net/ethernet/mellanox/mlx5/core/fw.c+3−2
@@ -32,6 +32,7 @@ · 31 unmodified lines
32 32
33#include <linux/mlx5/driver.h>33#include <linux/mlx5/driver.h>
34#include <linux/mlx5/cmd.h>34#include <linux/mlx5/cmd.h>
35#include <linux/mlx5/eswitch.h>
35#include <linux/module.h>36#include <linux/module.h>
36#include "mlx5_core.h"37#include "mlx5_core.h"
37#include "../../mlxfw/mlxfw.h"38#include "../../mlxfw/mlxfw.h"
@@ -159,13 +160,13 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev) · 121 unmodified lines
159 }160 }
160 161
161 if (MLX5_CAP_GEN(dev, vport_group_manager) &&162 if (MLX5_CAP_GEN(dev, vport_group_manager) &&
162 MLX5_CAP_GEN(dev, eswitch_flow_table)) {163 MLX5_ESWITCH_MANAGER(dev)) {
163 err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH_FLOW_TABLE);164 err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH_FLOW_TABLE);
164 if (err)165 if (err)
165 return err;166 return err;
166 }167 }
167 168
168 if (MLX5_CAP_GEN(dev, eswitch_flow_table)) {169 if (MLX5_ESWITCH_MANAGER(dev)) {
169 err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH);170 err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH);
170 if (err)171 if (err)
171 return err;172 return err;
drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c+5−4
@@ -33,6 +33,7 @@ · 32 unmodified lines
33#include <linux/etherdevice.h>33#include <linux/etherdevice.h>
34#include <linux/mlx5/driver.h>34#include <linux/mlx5/driver.h>
35#include <linux/mlx5/mlx5_ifc.h>35#include <linux/mlx5/mlx5_ifc.h>
36#include <linux/mlx5/eswitch.h>
36#include "mlx5_core.h"37#include "mlx5_core.h"
37#include "lib/mpfs.h"38#include "lib/mpfs.h"
38 39
@@ -98,7 +99,7 @@ int mlx5_mpfs_init(struct mlx5_core_dev *dev) · 59 unmodified lines
98 int l2table_size = 1 << MLX5_CAP_GEN(dev, log_max_l2_table);99 int l2table_size = 1 << MLX5_CAP_GEN(dev, log_max_l2_table);
99 struct mlx5_mpfs *mpfs;100 struct mlx5_mpfs *mpfs;
100 101
101 if (!MLX5_VPORT_MANAGER(dev))102 if (!MLX5_ESWITCH_MANAGER(dev))
102 return 0;103 return 0;
103 104
104 mpfs = kzalloc(sizeof(*mpfs), GFP_KERNEL);105 mpfs = kzalloc(sizeof(*mpfs), GFP_KERNEL);
@@ -122,7 +123,7 @@ void mlx5_mpfs_cleanup(struct mlx5_core_dev *dev) · 17 unmodified lines
122{123{
123 struct mlx5_mpfs *mpfs = dev->priv.mpfs;124 struct mlx5_mpfs *mpfs = dev->priv.mpfs;
124 125
125 if (!MLX5_VPORT_MANAGER(dev))126 if (!MLX5_ESWITCH_MANAGER(dev))
126 return;127 return;
127 128
128 WARN_ON(!hlist_empty(mpfs->hash));129 WARN_ON(!hlist_empty(mpfs->hash));
@@ -137,7 +138,7 @@ int mlx5_mpfs_add_mac(struct mlx5_core_dev *dev, u8 *mac) · 8 unmodified lines
137 u32 index;138 u32 index;
138 int err;139 int err;
139 140
140 if (!MLX5_VPORT_MANAGER(dev))141 if (!MLX5_ESWITCH_MANAGER(dev))
141 return 0;142 return 0;
142 143
143 mutex_lock(&mpfs->lock);144 mutex_lock(&mpfs->lock);
@@ -179,7 +180,7 @@ int mlx5_mpfs_del_mac(struct mlx5_core_dev *dev, u8 *mac) · 35 unmodified lines
179 int err = 0;180 int err = 0;
180 u32 index;181 u32 index;
181 182
182 if (!MLX5_VPORT_MANAGER(dev))183 if (!MLX5_ESWITCH_MANAGER(dev))
183 return 0;184 return 0;
184 185
185 mutex_lock(&mpfs->lock);186 mutex_lock(&mpfs->lock);
drivers/net/ethernet/mellanox/mlx5/core/port.c+2−2
@@ -701,7 +701,7 @@ EXPORT_SYMBOL_GPL(mlx5_query_port_prio_tc); · 700 unmodified lines
701static int mlx5_set_port_qetcr_reg(struct mlx5_core_dev *mdev, u32 *in,701static int mlx5_set_port_qetcr_reg(struct mlx5_core_dev *mdev, u32 *in,
702 int inlen)702 int inlen)
703{703{
704 u32 out[MLX5_ST_SZ_DW(qtct_reg)];704 u32 out[MLX5_ST_SZ_DW(qetc_reg)];
705 705
706 if (!MLX5_CAP_GEN(mdev, ets))706 if (!MLX5_CAP_GEN(mdev, ets))
707 return -EOPNOTSUPP;707 return -EOPNOTSUPP;
@@ -713,7 +713,7 @@ static int mlx5_set_port_qetcr_reg(struct mlx5_core_dev *mdev, u32 *in, · 5 unmodified lines
713static int mlx5_query_port_qetcr_reg(struct mlx5_core_dev *mdev, u32 *out,713static int mlx5_query_port_qetcr_reg(struct mlx5_core_dev *mdev, u32 *out,
714 int outlen)714 int outlen)
715{715{
716 u32 in[MLX5_ST_SZ_DW(qtct_reg)];716 u32 in[MLX5_ST_SZ_DW(qetc_reg)];
717 717
718 if (!MLX5_CAP_GEN(mdev, ets))718 if (!MLX5_CAP_GEN(mdev, ets))
719 return -EOPNOTSUPP;719 return -EOPNOTSUPP;
drivers/net/ethernet/mellanox/mlx5/core/sriov.c+6−1
@@ -88,6 +88,9 @@ static int mlx5_device_enable_sriov(struct mlx5_core_dev *dev, int num_vfs) · 87 unmodified lines
88 return -EBUSY;88 return -EBUSY;
89 }89 }
90 90
91 if (!MLX5_ESWITCH_MANAGER(dev))
92 goto enable_vfs_hca;
93
91 err = mlx5_eswitch_enable_sriov(dev->priv.eswitch, num_vfs, SRIOV_LEGACY);94 err = mlx5_eswitch_enable_sriov(dev->priv.eswitch, num_vfs, SRIOV_LEGACY);
92 if (err) {95 if (err) {
93 mlx5_core_warn(dev,96 mlx5_core_warn(dev,
@@ -95,6 +98,7 @@ static int mlx5_device_enable_sriov(struct mlx5_core_dev *dev, int num_vfs) · 1 unmodified line
95 return err;98 return err;
96 }99 }
97 100
101enable_vfs_hca:
98 for (vf = 0; vf < num_vfs; vf++) {102 for (vf = 0; vf < num_vfs; vf++) {
99 err = mlx5_core_enable_hca(dev, vf + 1);103 err = mlx5_core_enable_hca(dev, vf + 1);
100 if (err) {104 if (err) {
@@ -140,7 +144,8 @@ static void mlx5_device_disable_sriov(struct mlx5_core_dev *dev) · 39 unmodified lines
140 }144 }
141 145
142out:146out:
143 mlx5_eswitch_disable_sriov(dev->priv.eswitch);147 if (MLX5_ESWITCH_MANAGER(dev))
148 mlx5_eswitch_disable_sriov(dev->priv.eswitch);
144 149
145 if (mlx5_wait_for_vf_pages(dev))150 if (mlx5_wait_for_vf_pages(dev))
146 mlx5_core_warn(dev, "timeout reclaiming VFs pages\n");151 mlx5_core_warn(dev, "timeout reclaiming VFs pages\n");
drivers/net/ethernet/mellanox/mlx5/core/vport.c+0−2
@@ -549,8 +549,6 @@ int mlx5_modify_nic_vport_node_guid(struct mlx5_core_dev *mdev, · 548 unmodified lines
549 return -EINVAL;549 return -EINVAL;
550 if (!MLX5_CAP_GEN(mdev, vport_group_manager))550 if (!MLX5_CAP_GEN(mdev, vport_group_manager))
551 return -EACCES;551 return -EACCES;
552 if (!MLX5_CAP_ESW(mdev, nic_vport_node_guid_modify))
553 return -EOPNOTSUPP;
554 552
555 in = kvzalloc(inlen, GFP_KERNEL);553 in = kvzalloc(inlen, GFP_KERNEL);
556 if (!in)554 if (!in)
drivers/net/ethernet/netronome/nfp/bpf/main.c+6−3
@@ -81,10 +81,10 @@ nfp_bpf_xdp_offload(struct nfp_app *app, struct nfp_net *nn, · 80 unmodified lines
81 81
82 ret = nfp_net_bpf_offload(nn, prog, running, extack);82 ret = nfp_net_bpf_offload(nn, prog, running, extack);
83 /* Stop offload if replace not possible */83 /* Stop offload if replace not possible */
84 if (ret && prog)84 if (ret)
85 nfp_bpf_xdp_offload(app, nn, NULL, extack);85 return ret;
86 86
87 nn->dp.bpf_offload_xdp = prog && !ret;87 nn->dp.bpf_offload_xdp = !!prog;
88 return ret;88 return ret;
89}89}
90 90
@@ -202,6 +202,9 @@ static int nfp_bpf_setup_tc_block(struct net_device *netdev, · 111 unmodified lines
202 if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS)202 if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS)
203 return -EOPNOTSUPP;203 return -EOPNOTSUPP;
204 204
205 if (tcf_block_shared(f->block))
206 return -EOPNOTSUPP;
207
205 switch (f->command) {208 switch (f->command) {
206 case TC_BLOCK_BIND:209 case TC_BLOCK_BIND:
207 return tcf_block_cb_register(f->block,210 return tcf_block_cb_register(f->block,
drivers/net/ethernet/netronome/nfp/flower/match.c+14−0
@@ -123,6 +123,20 @@ nfp_flower_compile_mac(struct nfp_flower_mac_mpls *frame, · 122 unmodified lines
123 NFP_FLOWER_MASK_MPLS_Q;123 NFP_FLOWER_MASK_MPLS_Q;
124 124
125 frame->mpls_lse = cpu_to_be32(t_mpls);125 frame->mpls_lse = cpu_to_be32(t_mpls);
126 } else if (dissector_uses_key(flow->dissector,
127 FLOW_DISSECTOR_KEY_BASIC)) {
128 /* Check for mpls ether type and set NFP_FLOWER_MASK_MPLS_Q
129 * bit, which indicates an mpls ether type but without any
130 * mpls fields.
131 */
132 struct flow_dissector_key_basic *key_basic;
133
134 key_basic = skb_flow_dissector_target(flow->dissector,
135 FLOW_DISSECTOR_KEY_BASIC,
136 flow->key);
137 if (key_basic->n_proto == cpu_to_be16(ETH_P_MPLS_UC) ||
138 key_basic->n_proto == cpu_to_be16(ETH_P_MPLS_MC))
139 frame->mpls_lse = cpu_to_be32(NFP_FLOWER_MASK_MPLS_Q);
126 }140 }
127}141}
128 142
drivers/net/ethernet/netronome/nfp/flower/offload.c+11−0
@@ -264,6 +264,14 @@ nfp_flower_calculate_key_layers(struct nfp_app *app, · 263 unmodified lines
264 case cpu_to_be16(ETH_P_ARP):264 case cpu_to_be16(ETH_P_ARP):
265 return -EOPNOTSUPP;265 return -EOPNOTSUPP;
266 266
267 case cpu_to_be16(ETH_P_MPLS_UC):
268 case cpu_to_be16(ETH_P_MPLS_MC):
269 if (!(key_layer & NFP_FLOWER_LAYER_MAC)) {
270 key_layer |= NFP_FLOWER_LAYER_MAC;
271 key_size += sizeof(struct nfp_flower_mac_mpls);
272 }
273 break;
274
267 /* Will be included in layer 2. */275 /* Will be included in layer 2. */
268 case cpu_to_be16(ETH_P_8021Q):276 case cpu_to_be16(ETH_P_8021Q):
269 break;277 break;
@@ -623,6 +631,9 @@ static int nfp_flower_setup_tc_block(struct net_device *netdev, · 353 unmodified lines
623 if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS)631 if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS)
624 return -EOPNOTSUPP;632 return -EOPNOTSUPP;
625 633
634 if (tcf_block_shared(f->block))
635 return -EOPNOTSUPP;
636
626 switch (f->command) {637 switch (f->command) {
627 case TC_BLOCK_BIND:638 case TC_BLOCK_BIND:
628 return tcf_block_cb_register(f->block,639 return tcf_block_cb_register(f->block,
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c+1−1
@@ -232,7 +232,7 @@ struct nfp_nffw_info *nfp_nffw_info_open(struct nfp_cpp *cpp) · 231 unmodified lines
232 err = nfp_cpp_read(cpp, nfp_resource_cpp_id(state->res),232 err = nfp_cpp_read(cpp, nfp_resource_cpp_id(state->res),
233 nfp_resource_address(state->res),233 nfp_resource_address(state->res),
234 fwinf, sizeof(*fwinf));234 fwinf, sizeof(*fwinf));
235 if (err < sizeof(*fwinf))235 if (err < (int)sizeof(*fwinf))
236 goto err_release;236 goto err_release;
237 237
238 if (!nffw_res_flg_init_get(fwinf))238 if (!nffw_res_flg_init_get(fwinf))
drivers/net/ethernet/qlogic/qed/qed_dcbx.c+4−4
@@ -709,9 +709,9 @@ qed_dcbx_get_local_lldp_params(struct qed_hwfn *p_hwfn, · 708 unmodified lines
709 p_local = &p_hwfn->p_dcbx_info->lldp_local[LLDP_NEAREST_BRIDGE];709 p_local = &p_hwfn->p_dcbx_info->lldp_local[LLDP_NEAREST_BRIDGE];
710 710
711 memcpy(params->lldp_local.local_chassis_id, p_local->local_chassis_id,711 memcpy(params->lldp_local.local_chassis_id, p_local->local_chassis_id,
712 ARRAY_SIZE(p_local->local_chassis_id));712 sizeof(p_local->local_chassis_id));
713 memcpy(params->lldp_local.local_port_id, p_local->local_port_id,713 memcpy(params->lldp_local.local_port_id, p_local->local_port_id,
714 ARRAY_SIZE(p_local->local_port_id));714 sizeof(p_local->local_port_id));
715}715}
716 716
717static void717static void
@@ -723,9 +723,9 @@ qed_dcbx_get_remote_lldp_params(struct qed_hwfn *p_hwfn, · 5 unmodified lines
723 p_remote = &p_hwfn->p_dcbx_info->lldp_remote[LLDP_NEAREST_BRIDGE];723 p_remote = &p_hwfn->p_dcbx_info->lldp_remote[LLDP_NEAREST_BRIDGE];
724 724
725 memcpy(params->lldp_remote.peer_chassis_id, p_remote->peer_chassis_id,725 memcpy(params->lldp_remote.peer_chassis_id, p_remote->peer_chassis_id,
726 ARRAY_SIZE(p_remote->peer_chassis_id));726 sizeof(p_remote->peer_chassis_id));
727 memcpy(params->lldp_remote.peer_port_id, p_remote->peer_port_id,727 memcpy(params->lldp_remote.peer_port_id, p_remote->peer_port_id,
728 ARRAY_SIZE(p_remote->peer_port_id));728 sizeof(p_remote->peer_port_id));
729}729}
730 730
731static int731static int
drivers/net/ethernet/qlogic/qed/qed_dev.c+1−1
@@ -1804,7 +1804,7 @@ int qed_hw_init(struct qed_dev *cdev, struct qed_hw_init_params *p_params) · 1803 unmodified lines
1804 DP_INFO(p_hwfn, "Failed to update driver state\n");1804 DP_INFO(p_hwfn, "Failed to update driver state\n");
1805 1805
1806 rc = qed_mcp_ov_update_eswitch(p_hwfn, p_hwfn->p_main_ptt,1806 rc = qed_mcp_ov_update_eswitch(p_hwfn, p_hwfn->p_main_ptt,
1807 QED_OV_ESWITCH_VEB);1807 QED_OV_ESWITCH_NONE);
1808 if (rc)1808 if (rc)
1809 DP_INFO(p_hwfn, "Failed to update eswitch mode\n");1809 DP_INFO(p_hwfn, "Failed to update eswitch mode\n");
1810 }1810 }
drivers/net/ethernet/qlogic/qed/qed_main.c+8−0
@@ -789,6 +789,14 @@ static int qed_slowpath_setup_int(struct qed_dev *cdev, · 788 unmodified lines
789 /* We want a minimum of one slowpath and one fastpath vector per hwfn */789 /* We want a minimum of one slowpath and one fastpath vector per hwfn */
790 cdev->int_params.in.min_msix_cnt = cdev->num_hwfns * 2;790 cdev->int_params.in.min_msix_cnt = cdev->num_hwfns * 2;
791 791
792 if (is_kdump_kernel()) {
793 DP_INFO(cdev,
794 "Kdump kernel: Limit the max number of requested MSI-X vectors to %hd\n",
795 cdev->int_params.in.min_msix_cnt);
796 cdev->int_params.in.num_vectors =
797 cdev->int_params.in.min_msix_cnt;
798 }
799
792 rc = qed_set_int_mode(cdev, false);800 rc = qed_set_int_mode(cdev, false);
793 if (rc) {801 if (rc) {
794 DP_ERR(cdev, "qed_slowpath_setup_int ERR\n");802 DP_ERR(cdev, "qed_slowpath_setup_int ERR\n");
drivers/net/ethernet/qlogic/qed/qed_sriov.c+17−2
@@ -4513,6 +4513,8 @@ static void qed_sriov_enable_qid_config(struct qed_hwfn *hwfn, · 4512 unmodified lines
4513static int qed_sriov_enable(struct qed_dev *cdev, int num)4513static int qed_sriov_enable(struct qed_dev *cdev, int num)
4514{4514{
4515 struct qed_iov_vf_init_params params;4515 struct qed_iov_vf_init_params params;
4516 struct qed_hwfn *hwfn;
4517 struct qed_ptt *ptt;
4516 int i, j, rc;4518 int i, j, rc;
4517 4519
4518 if (num >= RESC_NUM(&cdev->hwfns[0], QED_VPORT)) {4520 if (num >= RESC_NUM(&cdev->hwfns[0], QED_VPORT)) {
@@ -4525,8 +4527,8 @@ static int qed_sriov_enable(struct qed_dev *cdev, int num) · 6 unmodified lines
4525 4527
4526 /* Initialize HW for VF access */4528 /* Initialize HW for VF access */
4527 for_each_hwfn(cdev, j) {4529 for_each_hwfn(cdev, j) {
4528 struct qed_hwfn *hwfn = &cdev->hwfns[j];4530 hwfn = &cdev->hwfns[j];
4529 struct qed_ptt *ptt = qed_ptt_acquire(hwfn);4531 ptt = qed_ptt_acquire(hwfn);
4530 4532
4531 /* Make sure not to use more than 16 queues per VF */4533 /* Make sure not to use more than 16 queues per VF */
4532 params.num_queues = min_t(int,4534 params.num_queues = min_t(int,
@@ -4562,6 +4564,19 @@ static int qed_sriov_enable(struct qed_dev *cdev, int num) · 29 unmodified lines
4562 goto err;4564 goto err;
4563 }4565 }
4564 4566
4567 hwfn = QED_LEADING_HWFN(cdev);
4568 ptt = qed_ptt_acquire(hwfn);
4569 if (!ptt) {
4570 DP_ERR(hwfn, "Failed to acquire ptt\n");
4571 rc = -EBUSY;
4572 goto err;
4573 }
4574
4575 rc = qed_mcp_ov_update_eswitch(hwfn, ptt, QED_OV_ESWITCH_VEB);
4576 if (rc)
4577 DP_INFO(cdev, "Failed to update eswitch mode\n");
4578 qed_ptt_release(hwfn, ptt);
4579
4565 return num;4580 return num;
4566 4581
4567err:4582err:
drivers/net/ethernet/qlogic/qede/qede_ptp.c+8−2
@@ -337,8 +337,14 @@ int qede_ptp_get_ts_info(struct qede_dev *edev, struct ethtool_ts_info *info) · 336 unmodified lines
337{337{
338 struct qede_ptp *ptp = edev->ptp;338 struct qede_ptp *ptp = edev->ptp;
339 339
340 if (!ptp)340 if (!ptp) {
341 return -EIO;341 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
342 SOF_TIMESTAMPING_RX_SOFTWARE |
343 SOF_TIMESTAMPING_SOFTWARE;
344 info->phc_index = -1;
345
346 return 0;
347 }
342 348
343 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |349 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
344 SOF_TIMESTAMPING_RX_SOFTWARE |350 SOF_TIMESTAMPING_RX_SOFTWARE |
drivers/net/ethernet/sfc/farch.c+1−0
@@ -2794,6 +2794,7 @@ int efx_farch_filter_table_probe(struct efx_nic *efx) · 2793 unmodified lines
2794 if (!state)2794 if (!state)
2795 return -ENOMEM;2795 return -ENOMEM;
2796 efx->filter_state = state;2796 efx->filter_state = state;
2797 init_rwsem(&state->lock);
2797 2798
2798 table = &state->table[EFX_FARCH_FILTER_TABLE_RX_IP];2799 table = &state->table[EFX_FARCH_FILTER_TABLE_RX_IP];
2799 table->id = EFX_FARCH_FILTER_TABLE_RX_IP;2800 table->id = EFX_FARCH_FILTER_TABLE_RX_IP;
drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c+12−0
@@ -420,6 +420,16 @@ static void dwmac4_qmode(void __iomem *ioaddr, u32 channel, u8 qmode) · 419 unmodified lines
420 writel(mtl_tx_op, ioaddr + MTL_CHAN_TX_OP_MODE(channel));420 writel(mtl_tx_op, ioaddr + MTL_CHAN_TX_OP_MODE(channel));
421}421}
422 422
423static void dwmac4_set_bfsize(void __iomem *ioaddr, int bfsize, u32 chan)
424{
425 u32 value = readl(ioaddr + DMA_CHAN_RX_CONTROL(chan));
426
427 value &= ~DMA_RBSZ_MASK;
428 value |= (bfsize << DMA_RBSZ_SHIFT) & DMA_RBSZ_MASK;
429
430 writel(value, ioaddr + DMA_CHAN_RX_CONTROL(chan));
431}
432
423const struct stmmac_dma_ops dwmac4_dma_ops = {433const struct stmmac_dma_ops dwmac4_dma_ops = {
424 .reset = dwmac4_dma_reset,434 .reset = dwmac4_dma_reset,
425 .init = dwmac4_dma_init,435 .init = dwmac4_dma_init,
@@ -445,6 +455,7 @@ const struct stmmac_dma_ops dwmac4_dma_ops = { · 19 unmodified lines
445 .set_tx_tail_ptr = dwmac4_set_tx_tail_ptr,455 .set_tx_tail_ptr = dwmac4_set_tx_tail_ptr,
446 .enable_tso = dwmac4_enable_tso,456 .enable_tso = dwmac4_enable_tso,
447 .qmode = dwmac4_qmode,457 .qmode = dwmac4_qmode,
458 .set_bfsize = dwmac4_set_bfsize,
448};459};
449 460
450const struct stmmac_dma_ops dwmac410_dma_ops = {461const struct stmmac_dma_ops dwmac410_dma_ops = {
@@ -472,4 +483,5 @@ const struct stmmac_dma_ops dwmac410_dma_ops = { · 21 unmodified lines
472 .set_tx_tail_ptr = dwmac4_set_tx_tail_ptr,483 .set_tx_tail_ptr = dwmac4_set_tx_tail_ptr,
473 .enable_tso = dwmac4_enable_tso,484 .enable_tso = dwmac4_enable_tso,
474 .qmode = dwmac4_qmode,485 .qmode = dwmac4_qmode,
486 .set_bfsize = dwmac4_set_bfsize,
475};487};
drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.h+2−0
@@ -120,6 +120,8 @@ · 119 unmodified lines
120 120
121/* DMA Rx Channel X Control register defines */121/* DMA Rx Channel X Control register defines */
122#define DMA_CONTROL_SR BIT(0)122#define DMA_CONTROL_SR BIT(0)
123#define DMA_RBSZ_MASK GENMASK(14, 1)
124#define DMA_RBSZ_SHIFT 1
123 125
124/* Interrupt status per channel */126/* Interrupt status per channel */
125#define DMA_CHAN_STATUS_REB GENMASK(21, 19)127#define DMA_CHAN_STATUS_REB GENMASK(21, 19)
drivers/net/ethernet/stmicro/stmmac/hwif.h+3−0
@@ -184,6 +184,7 @@ struct stmmac_dma_ops { · 183 unmodified lines
184 void (*set_tx_tail_ptr)(void __iomem *ioaddr, u32 tail_ptr, u32 chan);184 void (*set_tx_tail_ptr)(void __iomem *ioaddr, u32 tail_ptr, u32 chan);
185 void (*enable_tso)(void __iomem *ioaddr, bool en, u32 chan);185 void (*enable_tso)(void __iomem *ioaddr, bool en, u32 chan);
186 void (*qmode)(void __iomem *ioaddr, u32 channel, u8 qmode);186 void (*qmode)(void __iomem *ioaddr, u32 channel, u8 qmode);
187 void (*set_bfsize)(void __iomem *ioaddr, int bfsize, u32 chan);
187};188};
188 189
189#define stmmac_reset(__priv, __args...) \190#define stmmac_reset(__priv, __args...) \
@@ -238,6 +239,8 @@ struct stmmac_dma_ops { · 48 unmodified lines
238 stmmac_do_void_callback(__priv, dma, enable_tso, __args)239 stmmac_do_void_callback(__priv, dma, enable_tso, __args)
239#define stmmac_dma_qmode(__priv, __args...) \240#define stmmac_dma_qmode(__priv, __args...) \
240 stmmac_do_void_callback(__priv, dma, qmode, __args)241 stmmac_do_void_callback(__priv, dma, qmode, __args)
242#define stmmac_set_dma_bfsize(__priv, __args...) \
243 stmmac_do_void_callback(__priv, dma, set_bfsize, __args)
241 244
242struct mac_device_info;245struct mac_device_info;
243struct net_device;246struct net_device;
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c+2−0
@@ -1804,6 +1804,8 @@ static void stmmac_dma_operation_mode(struct stmmac_priv *priv) · 1803 unmodified lines
1804 1804
1805 stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan,1805 stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan,
1806 rxfifosz, qmode);1806 rxfifosz, qmode);
1807 stmmac_set_dma_bfsize(priv, priv->ioaddr, priv->dma_buf_sz,
1808 chan);
1807 }1809 }
1808 1810
1809 for (chan = 0; chan < tx_channels_count; chan++) {1811 for (chan = 0; chan < tx_channels_count; chan++) {
drivers/net/geneve.c+1−1
@@ -478,7 +478,7 @@ static struct sk_buff *geneve_gro_receive(struct sock *sk, · 477 unmodified lines
478out_unlock:478out_unlock:
479 rcu_read_unlock();479 rcu_read_unlock();
480out:480out:
481 NAPI_GRO_CB(skb)->flush |= flush;481 skb_gro_flush_final(skb, pp, flush);
482 482
483 return pp;483 return pp;
484}484}
drivers/net/hyperv/hyperv_net.h+1−1
@@ -210,7 +210,7 @@ int netvsc_recv_callback(struct net_device *net, · 209 unmodified lines
210void netvsc_channel_cb(void *context);210void netvsc_channel_cb(void *context);
211int netvsc_poll(struct napi_struct *napi, int budget);211int netvsc_poll(struct napi_struct *napi, int budget);
212 212
213void rndis_set_subchannel(struct work_struct *w);213int rndis_set_subchannel(struct net_device *ndev, struct netvsc_device *nvdev);
214int rndis_filter_open(struct netvsc_device *nvdev);214int rndis_filter_open(struct netvsc_device *nvdev);
215int rndis_filter_close(struct netvsc_device *nvdev);215int rndis_filter_close(struct netvsc_device *nvdev);
216struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,216struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
drivers/net/hyperv/netvsc.c+36−1
@@ -65,6 +65,41 @@ void netvsc_switch_datapath(struct net_device *ndev, bool vf) · 64 unmodified lines
65 VM_PKT_DATA_INBAND, 0);65 VM_PKT_DATA_INBAND, 0);
66}66}
67 67
68/* Worker to setup sub channels on initial setup
69 * Initial hotplug event occurs in softirq context
70 * and can't wait for channels.
71 */
72static void netvsc_subchan_work(struct work_struct *w)
73{
74 struct netvsc_device *nvdev =
75 container_of(w, struct netvsc_device, subchan_work);
76 struct rndis_device *rdev;
77 int i, ret;
78
79 /* Avoid deadlock with device removal already under RTNL */
80 if (!rtnl_trylock()) {
81 schedule_work(w);
82 return;
83 }
84
85 rdev = nvdev->extension;
86 if (rdev) {
87 ret = rndis_set_subchannel(rdev->ndev, nvdev);
88 if (ret == 0) {
89 netif_device_attach(rdev->ndev);
90 } else {
91 /* fallback to only primary channel */
92 for (i = 1; i < nvdev->num_chn; i++)
93 netif_napi_del(&nvdev->chan_table[i].napi);
94
95 nvdev->max_chn = 1;
96 nvdev->num_chn = 1;
97 }
98 }
99
100 rtnl_unlock();
101}
102
68static struct netvsc_device *alloc_net_device(void)103static struct netvsc_device *alloc_net_device(void)
69{104{
70 struct netvsc_device *net_device;105 struct netvsc_device *net_device;
@@ -81,7 +116,7 @@ static struct netvsc_device *alloc_net_device(void) · 10 unmodified lines
81 116
82 init_completion(&net_device->channel_init_wait);117 init_completion(&net_device->channel_init_wait);
83 init_waitqueue_head(&net_device->subchan_open);118 init_waitqueue_head(&net_device->subchan_open);
84 INIT_WORK(&net_device->subchan_work, rndis_set_subchannel);119 INIT_WORK(&net_device->subchan_work, netvsc_subchan_work);
85 120
86 return net_device;121 return net_device;
87}122}
drivers/net/hyperv/netvsc_drv.c+16−1
@@ -905,8 +905,20 @@ static int netvsc_attach(struct net_device *ndev, · 904 unmodified lines
905 if (IS_ERR(nvdev))905 if (IS_ERR(nvdev))
906 return PTR_ERR(nvdev);906 return PTR_ERR(nvdev);
907 907
908 /* Note: enable and attach happen when sub-channels setup */908 if (nvdev->num_chn > 1) {
909 ret = rndis_set_subchannel(ndev, nvdev);
910
911 /* if unavailable, just proceed with one queue */
912 if (ret) {
913 nvdev->max_chn = 1;
914 nvdev->num_chn = 1;
915 }
916 }
917
918 /* In any case device is now ready */
919 netif_device_attach(ndev);
909 920
921 /* Note: enable and attach happen when sub-channels setup */
910 netif_carrier_off(ndev);922 netif_carrier_off(ndev);
911 923
912 if (netif_running(ndev)) {924 if (netif_running(ndev)) {
@@ -2089,6 +2101,9 @@ static int netvsc_probe(struct hv_device *dev, · 1176 unmodified lines
2089 2101
2090 memcpy(net->dev_addr, device_info.mac_adr, ETH_ALEN);2102 memcpy(net->dev_addr, device_info.mac_adr, ETH_ALEN);
2091 2103
2104 if (nvdev->num_chn > 1)
2105 schedule_work(&nvdev->subchan_work);
2106
2092 /* hw_features computed in rndis_netdev_set_hwcaps() */2107 /* hw_features computed in rndis_netdev_set_hwcaps() */
2093 net->features = net->hw_features |2108 net->features = net->hw_features |
2094 NETIF_F_HIGHDMA | NETIF_F_SG |2109 NETIF_F_HIGHDMA | NETIF_F_SG |
drivers/net/hyperv/rndis_filter.c+12−49
@@ -1062,29 +1062,15 @@ static void netvsc_sc_open(struct vmbus_channel *new_sc) · 1061 unmodified lines
1062 * This breaks overlap of processing the host message for the1062 * This breaks overlap of processing the host message for the
1063 * new primary channel with the initialization of sub-channels.1063 * new primary channel with the initialization of sub-channels.
1064 */1064 */
1065void rndis_set_subchannel(struct work_struct *w)1065int rndis_set_subchannel(struct net_device *ndev, struct netvsc_device *nvdev)
1066{1066{
1067 struct netvsc_device *nvdev
1068 = container_of(w, struct netvsc_device, subchan_work);
1069 struct nvsp_message *init_packet = &nvdev->channel_init_pkt;1067 struct nvsp_message *init_packet = &nvdev->channel_init_pkt;
1070 struct net_device_context *ndev_ctx;1068 struct net_device_context *ndev_ctx = netdev_priv(ndev);
1071 struct rndis_device *rdev;1069 struct hv_device *hv_dev = ndev_ctx->device_ctx;
1072 struct net_device *ndev;1070 struct rndis_device *rdev = nvdev->extension;
1073 struct hv_device *hv_dev;
1074 int i, ret;1071 int i, ret;
1075 1072
1076 if (!rtnl_trylock()) {1073 ASSERT_RTNL();
1077 schedule_work(w);
1078 return;
1079 }
1080
1081 rdev = nvdev->extension;
1082 if (!rdev)
1083 goto unlock; /* device was removed */
1084
1085 ndev = rdev->ndev;
1086 ndev_ctx = netdev_priv(ndev);
1087 hv_dev = ndev_ctx->device_ctx;
1088 1074
1089 memset(init_packet, 0, sizeof(struct nvsp_message));1075 memset(init_packet, 0, sizeof(struct nvsp_message));
1090 init_packet->hdr.msg_type = NVSP_MSG5_TYPE_SUBCHANNEL;1076 init_packet->hdr.msg_type = NVSP_MSG5_TYPE_SUBCHANNEL;
@@ -1100,13 +1086,13 @@ void rndis_set_subchannel(struct work_struct *w) · 9 unmodified lines
1100 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);1086 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
1101 if (ret) {1087 if (ret) {
1102 netdev_err(ndev, "sub channel allocate send failed: %d\n", ret);1088 netdev_err(ndev, "sub channel allocate send failed: %d\n", ret);
1103 goto failed;1089 return ret;
1104 }1090 }
1105 1091
1106 wait_for_completion(&nvdev->channel_init_wait);1092 wait_for_completion(&nvdev->channel_init_wait);
1107 if (init_packet->msg.v5_msg.subchn_comp.status != NVSP_STAT_SUCCESS) {1093 if (init_packet->msg.v5_msg.subchn_comp.status != NVSP_STAT_SUCCESS) {
1108 netdev_err(ndev, "sub channel request failed\n");1094 netdev_err(ndev, "sub channel request failed\n");
1109 goto failed;1095 return -EIO;
1110 }1096 }
1111 1097
1112 nvdev->num_chn = 1 +1098 nvdev->num_chn = 1 +
@@ -1125,21 +1111,7 @@ void rndis_set_subchannel(struct work_struct *w) · 12 unmodified lines
1125 for (i = 0; i < VRSS_SEND_TAB_SIZE; i++)1111 for (i = 0; i < VRSS_SEND_TAB_SIZE; i++)
1126 ndev_ctx->tx_table[i] = i % nvdev->num_chn;1112 ndev_ctx->tx_table[i] = i % nvdev->num_chn;
1127 1113
1128 netif_device_attach(ndev);1114 return 0;
1129 rtnl_unlock();
1130 return;
1131
1132failed:
1133 /* fallback to only primary channel */
1134 for (i = 1; i < nvdev->num_chn; i++)
1135 netif_napi_del(&nvdev->chan_table[i].napi);
1136
1137 nvdev->max_chn = 1;
1138 nvdev->num_chn = 1;
1139
1140 netif_device_attach(ndev);
1141unlock:
1142 rtnl_unlock();
1143}1115}
1144 1116
1145static int rndis_netdev_set_hwcaps(struct rndis_device *rndis_device,1117static int rndis_netdev_set_hwcaps(struct rndis_device *rndis_device,
@@ -1360,21 +1332,12 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev, · 214 unmodified lines
1360 netif_napi_add(net, &net_device->chan_table[i].napi,1332 netif_napi_add(net, &net_device->chan_table[i].napi,
1361 netvsc_poll, NAPI_POLL_WEIGHT);1333 netvsc_poll, NAPI_POLL_WEIGHT);
1362 1334
1363 if (net_device->num_chn > 1)1335 return net_device;
1364 schedule_work(&net_device->subchan_work);
1365 1336
1366out:1337out:
1367 /* if unavailable, just proceed with one queue */1338 /* setting up multiple channels failed */
1368 if (ret) {1339 net_device->max_chn = 1;
1369 net_device->max_chn = 1;1340 net_device->num_chn = 1;
1370 net_device->num_chn = 1;
1371 }
1372
1373 /* No sub channels, device is ready */
1374 if (net_device->num_chn == 1)
1375 netif_device_attach(net);
1376
1377 return net_device;
1378 1341
1379err_dev_remv:1342err_dev_remv:
1380 rndis_filter_device_remove(dev, net_device);1343 rndis_filter_device_remove(dev, net_device);
drivers/net/ipvlan/ipvlan_main.c+28−8
@@ -75,10 +75,23 @@ static int ipvlan_set_port_mode(struct ipvl_port *port, u16 nval) · 74 unmodified lines
75{75{
76 struct ipvl_dev *ipvlan;76 struct ipvl_dev *ipvlan;
77 struct net_device *mdev = port->dev;77 struct net_device *mdev = port->dev;
78 int err = 0;78 unsigned int flags;
79 int err;
79 80
80 ASSERT_RTNL();81 ASSERT_RTNL();
81 if (port->mode != nval) {82 if (port->mode != nval) {
83 list_for_each_entry(ipvlan, &port->ipvlans, pnode) {
84 flags = ipvlan->dev->flags;
85 if (nval == IPVLAN_MODE_L3 || nval == IPVLAN_MODE_L3S) {
86 err = dev_change_flags(ipvlan->dev,
87 flags | IFF_NOARP);
88 } else {
89 err = dev_change_flags(ipvlan->dev,
90 flags & ~IFF_NOARP);
91 }
92 if (unlikely(err))
93 goto fail;
94 }
82 if (nval == IPVLAN_MODE_L3S) {95 if (nval == IPVLAN_MODE_L3S) {
83 /* New mode is L3S */96 /* New mode is L3S */
84 err = ipvlan_register_nf_hook(read_pnet(&port->pnet));97 err = ipvlan_register_nf_hook(read_pnet(&port->pnet));
@@ -86,21 +99,28 @@ static int ipvlan_set_port_mode(struct ipvl_port *port, u16 nval) · 1 unmodified line
86 mdev->l3mdev_ops = &ipvl_l3mdev_ops;99 mdev->l3mdev_ops = &ipvl_l3mdev_ops;
87 mdev->priv_flags |= IFF_L3MDEV_MASTER;100 mdev->priv_flags |= IFF_L3MDEV_MASTER;
88 } else101 } else
89 return err;102 goto fail;
90 } else if (port->mode == IPVLAN_MODE_L3S) {103 } else if (port->mode == IPVLAN_MODE_L3S) {
91 /* Old mode was L3S */104 /* Old mode was L3S */
92 mdev->priv_flags &= ~IFF_L3MDEV_MASTER;105 mdev->priv_flags &= ~IFF_L3MDEV_MASTER;
93 ipvlan_unregister_nf_hook(read_pnet(&port->pnet));106 ipvlan_unregister_nf_hook(read_pnet(&port->pnet));
94 mdev->l3mdev_ops = NULL;107 mdev->l3mdev_ops = NULL;
95 }108 }
96 list_for_each_entry(ipvlan, &port->ipvlans, pnode) {
97 if (nval == IPVLAN_MODE_L3 || nval == IPVLAN_MODE_L3S)
98 ipvlan->dev->flags |= IFF_NOARP;
99 else
100 ipvlan->dev->flags &= ~IFF_NOARP;
101 }
102 port->mode = nval;109 port->mode = nval;
103 }110 }
111 return 0;
112
113fail:
114 /* Undo the flags changes that have been done so far. */
115 list_for_each_entry_continue_reverse(ipvlan, &port->ipvlans, pnode) {
116 flags = ipvlan->dev->flags;
117 if (port->mode == IPVLAN_MODE_L3 ||
118 port->mode == IPVLAN_MODE_L3S)
119 dev_change_flags(ipvlan->dev, flags | IFF_NOARP);
120 else
121 dev_change_flags(ipvlan->dev, flags & ~IFF_NOARP);
122 }
123
104 return err;124 return err;
105}125}
106 126
drivers/net/phy/dp83tc811.c+1−1
@@ -222,7 +222,7 @@ static int dp83811_config_intr(struct phy_device *phydev) · 221 unmodified lines
222 if (err < 0)222 if (err < 0)
223 return err;223 return err;
224 224
225 err = phy_write(phydev, MII_DP83811_INT_STAT1, 0);225 err = phy_write(phydev, MII_DP83811_INT_STAT2, 0);
226 }226 }
227 227
228 return err;228 return err;
drivers/net/ppp/pppoe.c+1−1
@@ -1107,7 +1107,7 @@ static const struct proto_ops pppoe_ops = { · 1106 unmodified lines
1107 .socketpair = sock_no_socketpair,1107 .socketpair = sock_no_socketpair,
1108 .accept = sock_no_accept,1108 .accept = sock_no_accept,
1109 .getname = pppoe_getname,1109 .getname = pppoe_getname,
1110 .poll_mask = datagram_poll_mask,1110 .poll = datagram_poll,
1111 .listen = sock_no_listen,1111 .listen = sock_no_listen,
1112 .shutdown = sock_no_shutdown,1112 .shutdown = sock_no_shutdown,
1113 .setsockopt = sock_no_setsockopt,1113 .setsockopt = sock_no_setsockopt,
drivers/net/usb/lan78xx.c+34−3
@@ -64,6 +64,7 @@ · 63 unmodified lines
64#define DEFAULT_RX_CSUM_ENABLE (true)64#define DEFAULT_RX_CSUM_ENABLE (true)
65#define DEFAULT_TSO_CSUM_ENABLE (true)65#define DEFAULT_TSO_CSUM_ENABLE (true)
66#define DEFAULT_VLAN_FILTER_ENABLE (true)66#define DEFAULT_VLAN_FILTER_ENABLE (true)
67#define DEFAULT_VLAN_RX_OFFLOAD (true)
67#define TX_OVERHEAD (8)68#define TX_OVERHEAD (8)
68#define RXW_PADDING 269#define RXW_PADDING 2
69 70
@@ -2298,7 +2299,7 @@ static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu) · 2228 unmodified lines
2298 if ((ll_mtu % dev->maxpacket) == 0)2299 if ((ll_mtu % dev->maxpacket) == 0)
2299 return -EDOM;2300 return -EDOM;
2300 2301
2301 ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN);2302 ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + VLAN_ETH_HLEN);
2302 2303
2303 netdev->mtu = new_mtu;2304 netdev->mtu = new_mtu;
2304 2305
@@ -2364,6 +2365,11 @@ static int lan78xx_set_features(struct net_device *netdev, · 59 unmodified lines
2364 }2365 }
2365 2366
2366 if (features & NETIF_F_HW_VLAN_CTAG_RX)2367 if (features & NETIF_F_HW_VLAN_CTAG_RX)
2368 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_;
2369 else
2370 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_;
2371
2372 if (features & NETIF_F_HW_VLAN_CTAG_FILTER)
2367 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;2373 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;
2368 else2374 else
2369 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_;2375 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_;
@@ -2587,7 +2593,8 @@ static int lan78xx_reset(struct lan78xx_net *dev) · 217 unmodified lines
2587 buf |= FCT_TX_CTL_EN_;2593 buf |= FCT_TX_CTL_EN_;
2588 ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf);2594 ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf);
2589 2595
2590 ret = lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN);2596 ret = lan78xx_set_rx_max_frame_length(dev,
2597 dev->net->mtu + VLAN_ETH_HLEN);
2591 2598
2592 ret = lan78xx_read_reg(dev, MAC_RX, &buf);2599 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
2593 buf |= MAC_RX_RXEN_;2600 buf |= MAC_RX_RXEN_;
@@ -2975,6 +2982,12 @@ static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf) · 381 unmodified lines
2975 if (DEFAULT_TSO_CSUM_ENABLE)2982 if (DEFAULT_TSO_CSUM_ENABLE)
2976 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;2983 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;
2977 2984
2985 if (DEFAULT_VLAN_RX_OFFLOAD)
2986 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX;
2987
2988 if (DEFAULT_VLAN_FILTER_ENABLE)
2989 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
2990
2978 dev->net->hw_features = dev->net->features;2991 dev->net->hw_features = dev->net->features;
2979 2992
2980 ret = lan78xx_setup_irq_domain(dev);2993 ret = lan78xx_setup_irq_domain(dev);
@@ -3039,8 +3052,13 @@ static void lan78xx_rx_csum_offload(struct lan78xx_net *dev, · 58 unmodified lines
3039 struct sk_buff *skb,3052 struct sk_buff *skb,
3040 u32 rx_cmd_a, u32 rx_cmd_b)3053 u32 rx_cmd_a, u32 rx_cmd_b)
3041{3054{
3055 /* HW Checksum offload appears to be flawed if used when not stripping
3056 * VLAN headers. Drop back to S/W checksums under these conditions.
3057 */
3042 if (!(dev->net->features & NETIF_F_RXCSUM) ||3058 if (!(dev->net->features & NETIF_F_RXCSUM) ||
3043 unlikely(rx_cmd_a & RX_CMD_A_ICSM_)) {3059 unlikely(rx_cmd_a & RX_CMD_A_ICSM_) ||
3060 ((rx_cmd_a & RX_CMD_A_FVTG_) &&
3061 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) {
3044 skb->ip_summed = CHECKSUM_NONE;3062 skb->ip_summed = CHECKSUM_NONE;
3045 } else {3063 } else {
3046 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));3064 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));
@@ -3048,6 +3066,16 @@ static void lan78xx_rx_csum_offload(struct lan78xx_net *dev, · 1 unmodified line
3048 }3066 }
3049}3067}
3050 3068
3069static void lan78xx_rx_vlan_offload(struct lan78xx_net *dev,
3070 struct sk_buff *skb,
3071 u32 rx_cmd_a, u32 rx_cmd_b)
3072{
3073 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) &&
3074 (rx_cmd_a & RX_CMD_A_FVTG_))
3075 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
3076 (rx_cmd_b & 0xffff));
3077}
3078
3051static void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb)3079static void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb)
3052{3080{
3053 int status;3081 int status;
@@ -3112,6 +3140,8 @@ static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb) · 58 unmodified lines
3112 if (skb->len == size) {3140 if (skb->len == size) {
3113 lan78xx_rx_csum_offload(dev, skb,3141 lan78xx_rx_csum_offload(dev, skb,
3114 rx_cmd_a, rx_cmd_b);3142 rx_cmd_a, rx_cmd_b);
3143 lan78xx_rx_vlan_offload(dev, skb,
3144 rx_cmd_a, rx_cmd_b);
3115 3145
3116 skb_trim(skb, skb->len - 4); /* remove fcs */3146 skb_trim(skb, skb->len - 4); /* remove fcs */
3117 skb->truesize = size + sizeof(struct sk_buff);3147 skb->truesize = size + sizeof(struct sk_buff);
@@ -3130,6 +3160,7 @@ static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb) · 12 unmodified lines
3130 skb_set_tail_pointer(skb2, size);3160 skb_set_tail_pointer(skb2, size);
3131 3161
3132 lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b);3162 lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
3163 lan78xx_rx_vlan_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
3133 3164
3134 skb_trim(skb2, skb2->len - 4); /* remove fcs */3165 skb_trim(skb2, skb2->len - 4); /* remove fcs */
3135 skb2->truesize = size + sizeof(struct sk_buff);3166 skb2->truesize = size + sizeof(struct sk_buff);
drivers/net/usb/r8152.c+2−1
@@ -3966,7 +3966,8 @@ static int rtl8152_close(struct net_device *netdev) · 3965 unmodified lines
3966#ifdef CONFIG_PM_SLEEP3966#ifdef CONFIG_PM_SLEEP
3967 unregister_pm_notifier(&tp->pm_notifier);3967 unregister_pm_notifier(&tp->pm_notifier);
3968#endif3968#endif
3969 napi_disable(&tp->napi);3969 if (!test_bit(RTL8152_UNPLUG, &tp->flags))
3970 napi_disable(&tp->napi);
3970 clear_bit(WORK_ENABLE, &tp->flags);3971 clear_bit(WORK_ENABLE, &tp->flags);
3971 usb_kill_urb(tp->intr_urb);3972 usb_kill_urb(tp->intr_urb);
3972 cancel_delayed_work_sync(&tp->schedule);3973 cancel_delayed_work_sync(&tp->schedule);
drivers/net/virtio_net.c+19−11
@@ -53,6 +53,10 @@ module_param(napi_tx, bool, 0644); · 52 unmodified lines
53/* Amount of XDP headroom to prepend to packets for use by xdp_adjust_head */53/* Amount of XDP headroom to prepend to packets for use by xdp_adjust_head */
54#define VIRTIO_XDP_HEADROOM 25654#define VIRTIO_XDP_HEADROOM 256
55 55
56/* Separating two types of XDP xmit */
57#define VIRTIO_XDP_TX BIT(0)
58#define VIRTIO_XDP_REDIR BIT(1)
59
56/* RX packet size EWMA. The average packet size is used to determine the packet60/* RX packet size EWMA. The average packet size is used to determine the packet
57 * buffer size when refilling RX rings. As the entire RX ring may be refilled61 * buffer size when refilling RX rings. As the entire RX ring may be refilled
58 * at once, the weight is chosen so that the EWMA will be insensitive to short-62 * at once, the weight is chosen so that the EWMA will be insensitive to short-
@@ -582,7 +586,7 @@ static struct sk_buff *receive_small(struct net_device *dev, · 523 unmodified lines
582 struct receive_queue *rq,586 struct receive_queue *rq,
583 void *buf, void *ctx,587 void *buf, void *ctx,
584 unsigned int len,588 unsigned int len,
585 bool *xdp_xmit)589 unsigned int *xdp_xmit)
586{590{
587 struct sk_buff *skb;591 struct sk_buff *skb;
588 struct bpf_prog *xdp_prog;592 struct bpf_prog *xdp_prog;
@@ -654,14 +658,14 @@ static struct sk_buff *receive_small(struct net_device *dev, · 65 unmodified lines
654 trace_xdp_exception(vi->dev, xdp_prog, act);658 trace_xdp_exception(vi->dev, xdp_prog, act);
655 goto err_xdp;659 goto err_xdp;
656 }660 }
657 *xdp_xmit = true;661 *xdp_xmit |= VIRTIO_XDP_TX;
658 rcu_read_unlock();662 rcu_read_unlock();
659 goto xdp_xmit;663 goto xdp_xmit;
660 case XDP_REDIRECT:664 case XDP_REDIRECT:
661 err = xdp_do_redirect(dev, &xdp, xdp_prog);665 err = xdp_do_redirect(dev, &xdp, xdp_prog);
662 if (err)666 if (err)
663 goto err_xdp;667 goto err_xdp;
664 *xdp_xmit = true;668 *xdp_xmit |= VIRTIO_XDP_REDIR;
665 rcu_read_unlock();669 rcu_read_unlock();
666 goto xdp_xmit;670 goto xdp_xmit;
667 default:671 default:
@@ -723,7 +727,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, · 55 unmodified lines
723 void *buf,727 void *buf,
724 void *ctx,728 void *ctx,
725 unsigned int len,729 unsigned int len,
726 bool *xdp_xmit)730 unsigned int *xdp_xmit)
727{731{
728 struct virtio_net_hdr_mrg_rxbuf *hdr = buf;732 struct virtio_net_hdr_mrg_rxbuf *hdr = buf;
729 u16 num_buf = virtio16_to_cpu(vi->vdev, hdr->num_buffers);733 u16 num_buf = virtio16_to_cpu(vi->vdev, hdr->num_buffers);
@@ -818,7 +822,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, · 88 unmodified lines
818 put_page(xdp_page);822 put_page(xdp_page);
819 goto err_xdp;823 goto err_xdp;
820 }824 }
821 *xdp_xmit = true;825 *xdp_xmit |= VIRTIO_XDP_TX;
822 if (unlikely(xdp_page != page))826 if (unlikely(xdp_page != page))
823 put_page(page);827 put_page(page);
824 rcu_read_unlock();828 rcu_read_unlock();
@@ -830,7 +834,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, · 5 unmodified lines
830 put_page(xdp_page);834 put_page(xdp_page);
831 goto err_xdp;835 goto err_xdp;
832 }836 }
833 *xdp_xmit = true;837 *xdp_xmit |= VIRTIO_XDP_REDIR;
834 if (unlikely(xdp_page != page))838 if (unlikely(xdp_page != page))
835 put_page(page);839 put_page(page);
836 rcu_read_unlock();840 rcu_read_unlock();
@@ -939,7 +943,8 @@ xdp_xmit: · 102 unmodified lines
939}943}
940 944
941static int receive_buf(struct virtnet_info *vi, struct receive_queue *rq,945static int receive_buf(struct virtnet_info *vi, struct receive_queue *rq,
942 void *buf, unsigned int len, void **ctx, bool *xdp_xmit)946 void *buf, unsigned int len, void **ctx,
947 unsigned int *xdp_xmit)
943{948{
944 struct net_device *dev = vi->dev;949 struct net_device *dev = vi->dev;
945 struct sk_buff *skb;950 struct sk_buff *skb;
@@ -1232,7 +1237,8 @@ static void refill_work(struct work_struct *work) · 286 unmodified lines
1232 }1237 }
1233}1238}
1234 1239
1235static int virtnet_receive(struct receive_queue *rq, int budget, bool *xdp_xmit)1240static int virtnet_receive(struct receive_queue *rq, int budget,
1241 unsigned int *xdp_xmit)
1236{1242{
1237 struct virtnet_info *vi = rq->vq->vdev->priv;1243 struct virtnet_info *vi = rq->vq->vdev->priv;
1238 unsigned int len, received = 0, bytes = 0;1244 unsigned int len, received = 0, bytes = 0;
@@ -1321,7 +1327,7 @@ static int virtnet_poll(struct napi_struct *napi, int budget) · 82 unmodified lines
1321 struct virtnet_info *vi = rq->vq->vdev->priv;1327 struct virtnet_info *vi = rq->vq->vdev->priv;
1322 struct send_queue *sq;1328 struct send_queue *sq;
1323 unsigned int received, qp;1329 unsigned int received, qp;
1324 bool xdp_xmit = false;1330 unsigned int xdp_xmit = 0;
1325 1331
1326 virtnet_poll_cleantx(rq);1332 virtnet_poll_cleantx(rq);
1327 1333
@@ -1331,12 +1337,14 @@ static int virtnet_poll(struct napi_struct *napi, int budget) · 3 unmodified lines
1331 if (received < budget)1337 if (received < budget)
1332 virtqueue_napi_complete(napi, rq->vq, received);1338 virtqueue_napi_complete(napi, rq->vq, received);
1333 1339
1334 if (xdp_xmit) {1340 if (xdp_xmit & VIRTIO_XDP_REDIR)
1341 xdp_do_flush_map();
1342
1343 if (xdp_xmit & VIRTIO_XDP_TX) {
1335 qp = vi->curr_queue_pairs - vi->xdp_queue_pairs +1344 qp = vi->curr_queue_pairs - vi->xdp_queue_pairs +
1336 smp_processor_id();1345 smp_processor_id();
1337 sq = &vi->sq[qp];1346 sq = &vi->sq[qp];
1338 virtqueue_kick(sq->vq);1347 virtqueue_kick(sq->vq);
1339 xdp_do_flush_map();
1340 }1348 }
1341 1349
1342 return received;1350 return received;
drivers/net/vxlan.c+1−3
@@ -624,9 +624,7 @@ static struct sk_buff *vxlan_gro_receive(struct sock *sk, · 623 unmodified lines
624 flush = 0;624 flush = 0;
625 625
626out:626out:
627 skb_gro_remcsum_cleanup(skb, &grc);627 skb_gro_flush_final_remcsum(skb, pp, flush, &grc);
628 skb->remcsum_offload = 0;
629 NAPI_GRO_CB(skb)->flush |= flush;
630 628
631 return pp;629 return pp;
632}630}
drivers/nfc/pn533/usb.c+2−2
@@ -74,7 +74,7 @@ static void pn533_recv_response(struct urb *urb) · 73 unmodified lines
74 struct sk_buff *skb = NULL;74 struct sk_buff *skb = NULL;
75 75
76 if (!urb->status) {76 if (!urb->status) {
77 skb = alloc_skb(urb->actual_length, GFP_KERNEL);77 skb = alloc_skb(urb->actual_length, GFP_ATOMIC);
78 if (!skb) {78 if (!skb) {
79 nfc_err(&phy->udev->dev, "failed to alloc memory\n");79 nfc_err(&phy->udev->dev, "failed to alloc memory\n");
80 } else {80 } else {
@@ -186,7 +186,7 @@ static int pn533_usb_send_frame(struct pn533 *dev, · 105 unmodified lines
186 186
187 if (dev->protocol_type == PN533_PROTO_REQ_RESP) {187 if (dev->protocol_type == PN533_PROTO_REQ_RESP) {
188 /* request for response for sent packet directly */188 /* request for response for sent packet directly */
189 rc = pn533_submit_urb_for_response(phy, GFP_ATOMIC);189 rc = pn533_submit_urb_for_response(phy, GFP_KERNEL);
190 if (rc)190 if (rc)
191 goto error;191 goto error;
192 } else if (dev->protocol_type == PN533_PROTO_REQ_ACK_RESP) {192 } else if (dev->protocol_type == PN533_PROTO_REQ_ACK_RESP) {
drivers/nvdimm/pmem.c+2−1
@@ -414,7 +414,8 @@ static int pmem_attach_disk(struct device *dev, · 413 unmodified lines
414 blk_queue_logical_block_size(q, pmem_sector_size(ndns));414 blk_queue_logical_block_size(q, pmem_sector_size(ndns));
415 blk_queue_max_hw_sectors(q, UINT_MAX);415 blk_queue_max_hw_sectors(q, UINT_MAX);
416 blk_queue_flag_set(QUEUE_FLAG_NONROT, q);416 blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
417 blk_queue_flag_set(QUEUE_FLAG_DAX, q);417 if (pmem->pfn_flags & PFN_MAP)
418 blk_queue_flag_set(QUEUE_FLAG_DAX, q);
418 q->queuedata = pmem;419 q->queuedata = pmem;
419 420
420 disk = alloc_disk_node(0, nid);421 disk = alloc_disk_node(0, nid);
drivers/nvme/host/rdma.c+5−2
@@ -732,8 +732,11 @@ static void nvme_rdma_destroy_admin_queue(struct nvme_rdma_ctrl *ctrl, · 731 unmodified lines
732 blk_cleanup_queue(ctrl->ctrl.admin_q);732 blk_cleanup_queue(ctrl->ctrl.admin_q);
733 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset);733 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset);
734 }734 }
735 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,735 if (ctrl->async_event_sqe.data) {
736 sizeof(struct nvme_command), DMA_TO_DEVICE);736 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
737 sizeof(struct nvme_command), DMA_TO_DEVICE);
738 ctrl->async_event_sqe.data = NULL;
739 }
737 nvme_rdma_free_queue(&ctrl->queues[0]);740 nvme_rdma_free_queue(&ctrl->queues[0]);
738}741}
739 742
drivers/pci/Makefile+3−3
@@ -28,10 +28,10 @@ obj-$(CONFIG_PCI_PF_STUB) += pci-pf-stub.o · 27 unmodified lines
28obj-$(CONFIG_PCI_ECAM) += ecam.o28obj-$(CONFIG_PCI_ECAM) += ecam.o
29obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += xen-pcifront.o29obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += xen-pcifront.o
30 30
31obj-y += controller/
32obj-y += switch/
33
34# Endpoint library must be initialized before its users31# Endpoint library must be initialized before its users
35obj-$(CONFIG_PCI_ENDPOINT) += endpoint/32obj-$(CONFIG_PCI_ENDPOINT) += endpoint/
36 33
34obj-y += controller/
35obj-y += switch/
36
37ccflags-$(CONFIG_PCI_DEBUG) := -DDEBUG37ccflags-$(CONFIG_PCI_DEBUG) := -DDEBUG
drivers/pci/controller/Kconfig+0−3
@@ -96,7 +96,6 @@ config PCI_HOST_GENERIC · 95 unmodified lines
96 depends on OF96 depends on OF
97 select PCI_HOST_COMMON97 select PCI_HOST_COMMON
98 select IRQ_DOMAIN98 select IRQ_DOMAIN
99 select PCI_DOMAINS
100 help99 help
101 Say Y here if you want to support a simple generic PCI host100 Say Y here if you want to support a simple generic PCI host
102 controller, such as the one emulated by kvmtool.101 controller, such as the one emulated by kvmtool.
@@ -138,7 +137,6 @@ config PCI_VERSATILE · 35 unmodified lines
138 137
139config PCIE_IPROC138config PCIE_IPROC
140 tristate139 tristate
141 select PCI_DOMAINS
142 help140 help
143 This enables the iProc PCIe core controller support for Broadcom's141 This enables the iProc PCIe core controller support for Broadcom's
144 iProc family of SoCs. An appropriate bus interface driver needs142 iProc family of SoCs. An appropriate bus interface driver needs
@@ -176,7 +174,6 @@ config PCIE_IPROC_MSI · 31 unmodified lines
176config PCIE_ALTERA174config PCIE_ALTERA
177 bool "Altera PCIe controller"175 bool "Altera PCIe controller"
178 depends on ARM || NIOS2 || COMPILE_TEST176 depends on ARM || NIOS2 || COMPILE_TEST
179 select PCI_DOMAINS
180 help177 help
181 Say Y here if you want to enable PCIe controller support on Altera178 Say Y here if you want to enable PCIe controller support on Altera
182 FPGA.179 FPGA.
drivers/pci/hotplug/acpi_pcihp.c+9−1
@@ -7,7 +7,6 @@ · 6 unmodified lines
7 * All rights reserved.7 * All rights reserved.
8 *8 *
9 * Send feedback to <kristen.c.accardi@intel.com>9 * Send feedback to <kristen.c.accardi@intel.com>
10 *
11 */10 */
12 11
13#include <linux/module.h>12#include <linux/module.h>
@@ -87,8 +86,17 @@ int acpi_get_hp_hw_control_from_firmware(struct pci_dev *pdev) · 73 unmodified lines
87 return 0;86 return 0;
88 87
89 /* If _OSC exists, we should not evaluate OSHP */88 /* If _OSC exists, we should not evaluate OSHP */
89
90 /*
91 * If there's no ACPI host bridge (i.e., ACPI support is compiled
92 * into the kernel but the hardware platform doesn't support ACPI),
93 * there's nothing to do here.
94 */
90 host = pci_find_host_bridge(pdev->bus);95 host = pci_find_host_bridge(pdev->bus);
91 root = acpi_pci_find_root(ACPI_HANDLE(&host->dev));96 root = acpi_pci_find_root(ACPI_HANDLE(&host->dev));
97 if (!root)
98 return 0;
99
92 if (root->osc_support_set)100 if (root->osc_support_set)
93 goto no_control;101 goto no_control;
94 102
drivers/perf/xgene_pmu.c+1−1
@@ -1463,7 +1463,7 @@ static char *xgene_pmu_dev_name(struct device *dev, u32 type, int id) · 1462 unmodified lines
1463 case PMU_TYPE_IOB:1463 case PMU_TYPE_IOB:
1464 return devm_kasprintf(dev, GFP_KERNEL, "iob%d", id);1464 return devm_kasprintf(dev, GFP_KERNEL, "iob%d", id);
1465 case PMU_TYPE_IOB_SLOW:1465 case PMU_TYPE_IOB_SLOW:
1466 return devm_kasprintf(dev, GFP_KERNEL, "iob-slow%d", id);1466 return devm_kasprintf(dev, GFP_KERNEL, "iob_slow%d", id);
1467 case PMU_TYPE_MCB:1467 case PMU_TYPE_MCB:
1468 return devm_kasprintf(dev, GFP_KERNEL, "mcb%d", id);1468 return devm_kasprintf(dev, GFP_KERNEL, "mcb%d", id);
1469 case PMU_TYPE_MC:1469 case PMU_TYPE_MC:
drivers/s390/net/qeth_core.h+12−1
@@ -829,6 +829,17 @@ struct qeth_trap_id { · 828 unmodified lines
829/*some helper functions*/829/*some helper functions*/
830#define QETH_CARD_IFNAME(card) (((card)->dev)? (card)->dev->name : "")830#define QETH_CARD_IFNAME(card) (((card)->dev)? (card)->dev->name : "")
831 831
832static inline void qeth_scrub_qdio_buffer(struct qdio_buffer *buf,
833 unsigned int elements)
834{
835 unsigned int i;
836
837 for (i = 0; i < elements; i++)
838 memset(&buf->element[i], 0, sizeof(struct qdio_buffer_element));
839 buf->element[14].sflags = 0;
840 buf->element[15].sflags = 0;
841}
842
832/**843/**
833 * qeth_get_elements_for_range() - find number of SBALEs to cover range.844 * qeth_get_elements_for_range() - find number of SBALEs to cover range.
834 * @start: Start of the address range.845 * @start: Start of the address range.
@@ -1029,7 +1040,7 @@ struct qeth_cmd_buffer *qeth_get_setassparms_cmd(struct qeth_card *, · 194 unmodified lines
1029 __u16, __u16,1040 __u16, __u16,
1030 enum qeth_prot_versions);1041 enum qeth_prot_versions);
1031int qeth_set_features(struct net_device *, netdev_features_t);1042int qeth_set_features(struct net_device *, netdev_features_t);
1032void qeth_recover_features(struct net_device *dev);1043void qeth_enable_hw_features(struct net_device *dev);
1033netdev_features_t qeth_fix_features(struct net_device *, netdev_features_t);1044netdev_features_t qeth_fix_features(struct net_device *, netdev_features_t);
1034netdev_features_t qeth_features_check(struct sk_buff *skb,1045netdev_features_t qeth_features_check(struct sk_buff *skb,
1035 struct net_device *dev,1046 struct net_device *dev,
drivers/s390/net/qeth_core_main.c+28−19
@@ -73,9 +73,6 @@ static void qeth_notify_skbs(struct qeth_qdio_out_q *queue, · 72 unmodified lines
73 struct qeth_qdio_out_buffer *buf,73 struct qeth_qdio_out_buffer *buf,
74 enum iucv_tx_notify notification);74 enum iucv_tx_notify notification);
75static void qeth_release_skbs(struct qeth_qdio_out_buffer *buf);75static void qeth_release_skbs(struct qeth_qdio_out_buffer *buf);
76static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue,
77 struct qeth_qdio_out_buffer *buf,
78 enum qeth_qdio_buffer_states newbufstate);
79static int qeth_init_qdio_out_buf(struct qeth_qdio_out_q *, int);76static int qeth_init_qdio_out_buf(struct qeth_qdio_out_q *, int);
80 77
81struct workqueue_struct *qeth_wq;78struct workqueue_struct *qeth_wq;
@@ -489,6 +486,7 @@ static void qeth_qdio_handle_aob(struct qeth_card *card, · 407 unmodified lines
489 struct qaob *aob;486 struct qaob *aob;
490 struct qeth_qdio_out_buffer *buffer;487 struct qeth_qdio_out_buffer *buffer;
491 enum iucv_tx_notify notification;488 enum iucv_tx_notify notification;
489 unsigned int i;
492 490
493 aob = (struct qaob *) phys_to_virt(phys_aob_addr);491 aob = (struct qaob *) phys_to_virt(phys_aob_addr);
494 QETH_CARD_TEXT(card, 5, "haob");492 QETH_CARD_TEXT(card, 5, "haob");
@@ -513,10 +511,18 @@ static void qeth_qdio_handle_aob(struct qeth_card *card, · 18 unmodified lines
513 qeth_notify_skbs(buffer->q, buffer, notification);511 qeth_notify_skbs(buffer->q, buffer, notification);
514 512
515 buffer->aob = NULL;513 buffer->aob = NULL;
516 qeth_clear_output_buffer(buffer->q, buffer,514 /* Free dangling allocations. The attached skbs are handled by
517 QETH_QDIO_BUF_HANDLED_DELAYED);515 * qeth_cleanup_handled_pending().
516 */
517 for (i = 0;
518 i < aob->sb_count && i < QETH_MAX_BUFFER_ELEMENTS(card);
519 i++) {
520 if (aob->sba[i] && buffer->is_header[i])
521 kmem_cache_free(qeth_core_header_cache,
522 (void *) aob->sba[i]);
523 }
524 atomic_set(&buffer->state, QETH_QDIO_BUF_HANDLED_DELAYED);
518 525
519 /* from here on: do not touch buffer anymore */
520 qdio_release_aob(aob);526 qdio_release_aob(aob);
521}527}
522 528
@@ -3759,6 +3765,10 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev, · 3236 unmodified lines
3759 QETH_CARD_TEXT(queue->card, 5, "aob");3765 QETH_CARD_TEXT(queue->card, 5, "aob");
3760 QETH_CARD_TEXT_(queue->card, 5, "%lx",3766 QETH_CARD_TEXT_(queue->card, 5, "%lx",
3761 virt_to_phys(buffer->aob));3767 virt_to_phys(buffer->aob));
3768
3769 /* prepare the queue slot for re-use: */
3770 qeth_scrub_qdio_buffer(buffer->buffer,
3771 QETH_MAX_BUFFER_ELEMENTS(card));
3762 if (qeth_init_qdio_out_buf(queue, bidx)) {3772 if (qeth_init_qdio_out_buf(queue, bidx)) {
3763 QETH_CARD_TEXT(card, 2, "outofbuf");3773 QETH_CARD_TEXT(card, 2, "outofbuf");
3764 qeth_schedule_recovery(card);3774 qeth_schedule_recovery(card);
@@ -4834,7 +4844,7 @@ int qeth_vm_request_mac(struct qeth_card *card) · 1069 unmodified lines
4834 goto out;4844 goto out;
4835 }4845 }
4836 4846
4837 ccw_device_get_id(CARD_RDEV(card), &id);4847 ccw_device_get_id(CARD_DDEV(card), &id);
4838 request->resp_buf_len = sizeof(*response);4848 request->resp_buf_len = sizeof(*response);
4839 request->resp_version = DIAG26C_VERSION2;4849 request->resp_version = DIAG26C_VERSION2;
4840 request->op_code = DIAG26C_GET_MAC;4850 request->op_code = DIAG26C_GET_MAC;
@@ -6459,28 +6469,27 @@ static int qeth_set_ipa_rx_csum(struct qeth_card *card, bool on) · 1618 unmodified lines
6459#define QETH_HW_FEATURES (NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_TSO | \6469#define QETH_HW_FEATURES (NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_TSO | \
6460 NETIF_F_IPV6_CSUM)6470 NETIF_F_IPV6_CSUM)
6461/**6471/**
6462 * qeth_recover_features() - Restore device features after recovery6472 * qeth_enable_hw_features() - (Re-)Enable HW functions for device features
6463 * @dev: the recovering net_device6473 * @dev: a net_device
6464 *
6465 * Caller must hold rtnl lock.
6466 */6474 */
6467void qeth_recover_features(struct net_device *dev)6475void qeth_enable_hw_features(struct net_device *dev)
6468{6476{
6469 netdev_features_t features = dev->features;
6470 struct qeth_card *card = dev->ml_priv;6477 struct qeth_card *card = dev->ml_priv;
6478 netdev_features_t features;
6471 6479
6480 rtnl_lock();
6481 features = dev->features;
6472 /* force-off any feature that needs an IPA sequence.6482 /* force-off any feature that needs an IPA sequence.
6473 * netdev_update_features() will restart them.6483 * netdev_update_features() will restart them.
6474 */6484 */
6475 dev->features &= ~QETH_HW_FEATURES;6485 dev->features &= ~QETH_HW_FEATURES;
6476 netdev_update_features(dev);6486 netdev_update_features(dev);
6477 6487 if (features != dev->features)
6478 if (features == dev->features)6488 dev_warn(&card->gdev->dev,
6479 return;6489 "Device recovery failed to restore all offload features\n");
6480 dev_warn(&card->gdev->dev,6490 rtnl_unlock();
6481 "Device recovery failed to restore all offload features\n");
6482}6491}
6483EXPORT_SYMBOL_GPL(qeth_recover_features);6492EXPORT_SYMBOL_GPL(qeth_enable_hw_features);
6484 6493
6485int qeth_set_features(struct net_device *dev, netdev_features_t features)6494int qeth_set_features(struct net_device *dev, netdev_features_t features)
6486{6495{
drivers/s390/net/qeth_l2_main.c+15−9
@@ -140,7 +140,7 @@ static int qeth_l2_send_setmac(struct qeth_card *card, __u8 *mac) · 139 unmodified lines
140 140
141static int qeth_l2_write_mac(struct qeth_card *card, u8 *mac)141static int qeth_l2_write_mac(struct qeth_card *card, u8 *mac)
142{142{
143 enum qeth_ipa_cmds cmd = is_multicast_ether_addr_64bits(mac) ?143 enum qeth_ipa_cmds cmd = is_multicast_ether_addr(mac) ?
144 IPA_CMD_SETGMAC : IPA_CMD_SETVMAC;144 IPA_CMD_SETGMAC : IPA_CMD_SETVMAC;
145 int rc;145 int rc;
146 146
@@ -157,7 +157,7 @@ static int qeth_l2_write_mac(struct qeth_card *card, u8 *mac) · 10 unmodified lines
157 157
158static int qeth_l2_remove_mac(struct qeth_card *card, u8 *mac)158static int qeth_l2_remove_mac(struct qeth_card *card, u8 *mac)
159{159{
160 enum qeth_ipa_cmds cmd = is_multicast_ether_addr_64bits(mac) ?160 enum qeth_ipa_cmds cmd = is_multicast_ether_addr(mac) ?
161 IPA_CMD_DELGMAC : IPA_CMD_DELVMAC;161 IPA_CMD_DELGMAC : IPA_CMD_DELVMAC;
162 int rc;162 int rc;
163 163
@@ -501,27 +501,34 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p) · 337 unmodified lines
501 return -ERESTARTSYS;501 return -ERESTARTSYS;
502 }502 }
503 503
504 /* avoid racing against concurrent state change: */
505 if (!mutex_trylock(&card->conf_mutex))
506 return -EAGAIN;
507
504 if (!qeth_card_hw_is_reachable(card)) {508 if (!qeth_card_hw_is_reachable(card)) {
505 ether_addr_copy(dev->dev_addr, addr->sa_data);509 ether_addr_copy(dev->dev_addr, addr->sa_data);
506 return 0;510 goto out_unlock;
507 }511 }
508 512
509 /* don't register the same address twice */513 /* don't register the same address twice */
510 if (ether_addr_equal_64bits(dev->dev_addr, addr->sa_data) &&514 if (ether_addr_equal_64bits(dev->dev_addr, addr->sa_data) &&
511 (card->info.mac_bits & QETH_LAYER2_MAC_REGISTERED))515 (card->info.mac_bits & QETH_LAYER2_MAC_REGISTERED))
512 return 0;516 goto out_unlock;
513 517
514 /* add the new address, switch over, drop the old */518 /* add the new address, switch over, drop the old */
515 rc = qeth_l2_send_setmac(card, addr->sa_data);519 rc = qeth_l2_send_setmac(card, addr->sa_data);
516 if (rc)520 if (rc)
517 return rc;521 goto out_unlock;
518 ether_addr_copy(old_addr, dev->dev_addr);522 ether_addr_copy(old_addr, dev->dev_addr);
519 ether_addr_copy(dev->dev_addr, addr->sa_data);523 ether_addr_copy(dev->dev_addr, addr->sa_data);
520 524
521 if (card->info.mac_bits & QETH_LAYER2_MAC_REGISTERED)525 if (card->info.mac_bits & QETH_LAYER2_MAC_REGISTERED)
522 qeth_l2_remove_mac(card, old_addr);526 qeth_l2_remove_mac(card, old_addr);
523 card->info.mac_bits |= QETH_LAYER2_MAC_REGISTERED;527 card->info.mac_bits |= QETH_LAYER2_MAC_REGISTERED;
524 return 0;528
529out_unlock:
530 mutex_unlock(&card->conf_mutex);
531 return rc;
525}532}
526 533
527static void qeth_promisc_to_bridge(struct qeth_card *card)534static void qeth_promisc_to_bridge(struct qeth_card *card)
@@ -1112,6 +1119,8 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode) · 584 unmodified lines
1112 netif_carrier_off(card->dev);1119 netif_carrier_off(card->dev);
1113 1120
1114 qeth_set_allowed_threads(card, 0xffffffff, 0);1121 qeth_set_allowed_threads(card, 0xffffffff, 0);
1122
1123 qeth_enable_hw_features(card->dev);
1115 if (recover_flag == CARD_STATE_RECOVER) {1124 if (recover_flag == CARD_STATE_RECOVER) {
1116 if (recovery_mode &&1125 if (recovery_mode &&
1117 card->info.type != QETH_CARD_TYPE_OSN) {1126 card->info.type != QETH_CARD_TYPE_OSN) {
@@ -1123,9 +1132,6 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode) · 5 unmodified lines
1123 }1132 }
1124 /* this also sets saved unicast addresses */1133 /* this also sets saved unicast addresses */
1125 qeth_l2_set_rx_mode(card->dev);1134 qeth_l2_set_rx_mode(card->dev);
1126 rtnl_lock();
1127 qeth_recover_features(card->dev);
1128 rtnl_unlock();
1129 }1135 }
1130 /* let user_space know that device is online */1136 /* let user_space know that device is online */
1131 kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE);1137 kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE);
drivers/s390/net/qeth_l3_main.c+2−1
@@ -2662,6 +2662,8 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode) · 2661 unmodified lines
2662 netif_carrier_on(card->dev);2662 netif_carrier_on(card->dev);
2663 else2663 else
2664 netif_carrier_off(card->dev);2664 netif_carrier_off(card->dev);
2665
2666 qeth_enable_hw_features(card->dev);
2665 if (recover_flag == CARD_STATE_RECOVER) {2667 if (recover_flag == CARD_STATE_RECOVER) {
2666 rtnl_lock();2668 rtnl_lock();
2667 if (recovery_mode)2669 if (recovery_mode)
@@ -2669,7 +2671,6 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode) · 1 unmodified line
2669 else2671 else
2670 dev_open(card->dev);2672 dev_open(card->dev);
2671 qeth_l3_set_rx_mode(card->dev);2673 qeth_l3_set_rx_mode(card->dev);
2672 qeth_recover_features(card->dev);
2673 rtnl_unlock();2674 rtnl_unlock();
2674 }2675 }
2675 qeth_trace_features(card);2676 qeth_trace_features(card);
drivers/scsi/ipr.c+0−2
@@ -760,7 +760,6 @@ static void ipr_mask_and_clear_interrupts(struct ipr_ioa_cfg *ioa_cfg, · 759 unmodified lines
760 ioa_cfg->hrrq[i].allow_interrupts = 0;760 ioa_cfg->hrrq[i].allow_interrupts = 0;
761 spin_unlock(&ioa_cfg->hrrq[i]._lock);761 spin_unlock(&ioa_cfg->hrrq[i]._lock);
762 }762 }
763 wmb();
764 763
765 /* Set interrupt mask to stop all new interrupts */764 /* Set interrupt mask to stop all new interrupts */
766 if (ioa_cfg->sis64)765 if (ioa_cfg->sis64)
@@ -8403,7 +8402,6 @@ static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) · 7636 unmodified lines
8403 ioa_cfg->hrrq[i].allow_interrupts = 1;8402 ioa_cfg->hrrq[i].allow_interrupts = 1;
8404 spin_unlock(&ioa_cfg->hrrq[i]._lock);8403 spin_unlock(&ioa_cfg->hrrq[i]._lock);
8405 }8404 }
8406 wmb();
8407 if (ioa_cfg->sis64) {8405 if (ioa_cfg->sis64) {
8408 /* Set the adapter to the correct endian mode. */8406 /* Set the adapter to the correct endian mode. */
8409 writel(IPR_ENDIAN_SWAP_KEY, ioa_cfg->regs.endian_swap_reg);8407 writel(IPR_ENDIAN_SWAP_KEY, ioa_cfg->regs.endian_swap_reg);
drivers/scsi/qla2xxx/qla_target.c+3−4
@@ -1224,7 +1224,6 @@ static void qla24xx_chk_fcp_state(struct fc_port *sess) · 1223 unmodified lines
1224void qlt_schedule_sess_for_deletion(struct fc_port *sess)1224void qlt_schedule_sess_for_deletion(struct fc_port *sess)
1225{1225{
1226 struct qla_tgt *tgt = sess->tgt;1226 struct qla_tgt *tgt = sess->tgt;
1227 struct qla_hw_data *ha = sess->vha->hw;
1228 unsigned long flags;1227 unsigned long flags;
1229 1228
1230 if (sess->disc_state == DSC_DELETE_PEND)1229 if (sess->disc_state == DSC_DELETE_PEND)
@@ -1241,16 +1240,16 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess) · 10 unmodified lines
1241 return;1240 return;
1242 }1241 }
1243 1242
1244 spin_lock_irqsave(&ha->tgt.sess_lock, flags);
1245 if (sess->deleted == QLA_SESS_DELETED)1243 if (sess->deleted == QLA_SESS_DELETED)
1246 sess->logout_on_delete = 0;1244 sess->logout_on_delete = 0;
1247 1245
1246 spin_lock_irqsave(&sess->vha->work_lock, flags);
1248 if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) {1247 if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) {
1249 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);1248 spin_unlock_irqrestore(&sess->vha->work_lock, flags);
1250 return;1249 return;
1251 }1250 }
1252 sess->deleted = QLA_SESS_DELETION_IN_PROGRESS;1251 sess->deleted = QLA_SESS_DELETION_IN_PROGRESS;
1253 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);1252 spin_unlock_irqrestore(&sess->vha->work_lock, flags);
1254 1253
1255 sess->disc_state = DSC_DELETE_PEND;1254 sess->disc_state = DSC_DELETE_PEND;
1256 1255
drivers/scsi/scsi_debug.c+1−1
@@ -5507,9 +5507,9 @@ static void __exit scsi_debug_exit(void) · 5506 unmodified lines
5507 int k = sdebug_add_host;5507 int k = sdebug_add_host;
5508 5508
5509 stop_all_queued();5509 stop_all_queued();
5510 free_all_queued();
5511 for (; k; k--)5510 for (; k; k--)
5512 sdebug_remove_adapter();5511 sdebug_remove_adapter();
5512 free_all_queued();
5513 driver_unregister(&sdebug_driverfs_driver);5513 driver_unregister(&sdebug_driverfs_driver);
5514 bus_unregister(&pseudo_lld_bus);5514 bus_unregister(&pseudo_lld_bus);
5515 root_device_unregister(pseudo_primary);5515 root_device_unregister(pseudo_primary);
drivers/soc/imx/gpcv2.c+9−4
@@ -39,10 +39,15 @@ · 38 unmodified lines
39 39
40#define GPC_M4_PU_PDN_FLG 0x1bc40#define GPC_M4_PU_PDN_FLG 0x1bc
41 41
42 42/*
43#define PGC_MIPI 443 * The PGC offset values in Reference Manual
44#define PGC_PCIE 544 * (Rev. 1, 01/2018 and the older ones) GPC chapter's
45#define PGC_USB_HSIC 845 * GPC_PGC memory map are incorrect, below offset
46 * values are from design RTL.
47 */
48#define PGC_MIPI 16
49#define PGC_PCIE 17
50#define PGC_USB_HSIC 20
46#define GPC_PGC_CTRL(n) (0x800 + (n) * 0x40)51#define GPC_PGC_CTRL(n) (0x800 + (n) * 0x40)
47#define GPC_PGC_SR(n) (GPC_PGC_CTRL(n) + 0xc)52#define GPC_PGC_SR(n) (GPC_PGC_CTRL(n) + 0xc)
48 53
drivers/soc/qcom/Kconfig+2−1
@@ -5,7 +5,8 @@ menu "Qualcomm SoC drivers" · 4 unmodified lines
5 5
6config QCOM_COMMAND_DB6config QCOM_COMMAND_DB
7 bool "Qualcomm Command DB"7 bool "Qualcomm Command DB"
8 depends on (ARCH_QCOM && OF) || COMPILE_TEST8 depends on ARCH_QCOM || COMPILE_TEST
9 depends on OF_RESERVED_MEM
9 help10 help
10 Command DB queries shared memory by key string for shared system11 Command DB queries shared memory by key string for shared system
11 resources. Platform drivers that require to set state of a shared12 resources. Platform drivers that require to set state of a shared
drivers/soc/renesas/rcar-sysc.c+29−6
@@ -194,11 +194,12 @@ static int rcar_sysc_pd_power_on(struct generic_pm_domain *genpd) · 193 unmodified lines
194 194
195static bool has_cpg_mstp;195static bool has_cpg_mstp;
196 196
197static void __init rcar_sysc_pd_setup(struct rcar_sysc_pd *pd)197static int __init rcar_sysc_pd_setup(struct rcar_sysc_pd *pd)
198{198{
199 struct generic_pm_domain *genpd = &pd->genpd;199 struct generic_pm_domain *genpd = &pd->genpd;
200 const char *name = pd->genpd.name;200 const char *name = pd->genpd.name;
201 struct dev_power_governor *gov = &simple_qos_governor;201 struct dev_power_governor *gov = &simple_qos_governor;
202 int error;
202 203
203 if (pd->flags & PD_CPU) {204 if (pd->flags & PD_CPU) {
204 /*205 /*
@@ -251,7 +252,11 @@ static void __init rcar_sysc_pd_setup(struct rcar_sysc_pd *pd) · 46 unmodified lines
251 rcar_sysc_power_up(&pd->ch);252 rcar_sysc_power_up(&pd->ch);
252 253
253finalize:254finalize:
254 pm_genpd_init(genpd, gov, false);255 error = pm_genpd_init(genpd, gov, false);
256 if (error)
257 pr_err("Failed to init PM domain %s: %d\n", name, error);
258
259 return error;
255}260}
256 261
257static const struct of_device_id rcar_sysc_matches[] __initconst = {262static const struct of_device_id rcar_sysc_matches[] __initconst = {
@@ -375,6 +380,9 @@ static int __init rcar_sysc_pd_init(void) · 117 unmodified lines
375 pr_debug("%pOF: syscier = 0x%08x\n", np, syscier);380 pr_debug("%pOF: syscier = 0x%08x\n", np, syscier);
376 iowrite32(syscier, base + SYSCIER);381 iowrite32(syscier, base + SYSCIER);
377 382
383 /*
384 * First, create all PM domains
385 */
378 for (i = 0; i < info->num_areas; i++) {386 for (i = 0; i < info->num_areas; i++) {
379 const struct rcar_sysc_area *area = &info->areas[i];387 const struct rcar_sysc_area *area = &info->areas[i];
380 struct rcar_sysc_pd *pd;388 struct rcar_sysc_pd *pd;
@@ -397,14 +405,29 @@ static int __init rcar_sysc_pd_init(void) · 16 unmodified lines
397 pd->ch.isr_bit = area->isr_bit;405 pd->ch.isr_bit = area->isr_bit;
398 pd->flags = area->flags;406 pd->flags = area->flags;
399 407
400 rcar_sysc_pd_setup(pd);408 error = rcar_sysc_pd_setup(pd);
401 if (area->parent >= 0)409 if (error)
402 pm_genpd_add_subdomain(domains->domains[area->parent],410 goto out_put;
403 &pd->genpd);
404 411
405 domains->domains[area->isr_bit] = &pd->genpd;412 domains->domains[area->isr_bit] = &pd->genpd;
406 }413 }
407 414
415 /*
416 * Second, link all PM domains to their parents
417 */
418 for (i = 0; i < info->num_areas; i++) {
419 const struct rcar_sysc_area *area = &info->areas[i];
420
421 if (!area->name || area->parent < 0)
422 continue;
423
424 error = pm_genpd_add_subdomain(domains->domains[area->parent],
425 domains->domains[area->isr_bit]);
426 if (error)
427 pr_warn("Failed to add PM subdomain %s to parent %u\n",
428 area->name, area->parent);
429 }
430
408 error = of_genpd_add_provider_onecell(np, &domains->onecell_data);431 error = of_genpd_add_provider_onecell(np, &domains->onecell_data);
409 432
410out_put:433out_put:
drivers/staging/android/ion/ion_heap.c+1−1
@@ -30,7 +30,7 @@ void *ion_heap_map_kernel(struct ion_heap *heap, · 29 unmodified lines
30 struct page **tmp = pages;30 struct page **tmp = pages;
31 31
32 if (!pages)32 if (!pages)
33 return NULL;33 return ERR_PTR(-ENOMEM);
34 34
35 if (buffer->flags & ION_FLAG_CACHED)35 if (buffer->flags & ION_FLAG_CACHED)
36 pgprot = PAGE_KERNEL;36 pgprot = PAGE_KERNEL;
drivers/staging/comedi/drivers/quatech_daqp_cs.c+1−1
@@ -642,7 +642,7 @@ static int daqp_ao_insn_write(struct comedi_device *dev, · 641 unmodified lines
642 /* Make sure D/A update mode is direct update */642 /* Make sure D/A update mode is direct update */
643 outb(0, dev->iobase + DAQP_AUX_REG);643 outb(0, dev->iobase + DAQP_AUX_REG);
644 644
645 for (i = 0; i > insn->n; i++) {645 for (i = 0; i < insn->n; i++) {
646 unsigned int val = data[i];646 unsigned int val = data[i];
647 int ret;647 int ret;
648 648
drivers/staging/typec/Kconfig+1−0
@@ -11,6 +11,7 @@ config TYPEC_TCPCI · 10 unmodified lines
11 11
12config TYPEC_RT1711H12config TYPEC_RT1711H
13 tristate "Richtek RT1711H Type-C chip driver"13 tristate "Richtek RT1711H Type-C chip driver"
14 depends on I2C
14 select TYPEC_TCPCI15 select TYPEC_TCPCI
15 help16 help
16 Richtek RT1711H Type-C chip driver that works with17 Richtek RT1711H Type-C chip driver that works with
drivers/target/target_core_user.c+36−8
@@ -656,7 +656,7 @@ static void scatter_data_area(struct tcmu_dev *udev, · 655 unmodified lines
656}656}
657 657
658static void gather_data_area(struct tcmu_dev *udev, struct tcmu_cmd *cmd,658static void gather_data_area(struct tcmu_dev *udev, struct tcmu_cmd *cmd,
659 bool bidi)659 bool bidi, uint32_t read_len)
660{660{
661 struct se_cmd *se_cmd = cmd->se_cmd;661 struct se_cmd *se_cmd = cmd->se_cmd;
662 int i, dbi;662 int i, dbi;
@@ -689,7 +689,7 @@ static void gather_data_area(struct tcmu_dev *udev, struct tcmu_cmd *cmd, · 26 unmodified lines
689 for_each_sg(data_sg, sg, data_nents, i) {689 for_each_sg(data_sg, sg, data_nents, i) {
690 int sg_remaining = sg->length;690 int sg_remaining = sg->length;
691 to = kmap_atomic(sg_page(sg)) + sg->offset;691 to = kmap_atomic(sg_page(sg)) + sg->offset;
692 while (sg_remaining > 0) {692 while (sg_remaining > 0 && read_len > 0) {
693 if (block_remaining == 0) {693 if (block_remaining == 0) {
694 if (from)694 if (from)
695 kunmap_atomic(from);695 kunmap_atomic(from);
@@ -701,6 +701,8 @@ static void gather_data_area(struct tcmu_dev *udev, struct tcmu_cmd *cmd, · 5 unmodified lines
701 }701 }
702 copy_bytes = min_t(size_t, sg_remaining,702 copy_bytes = min_t(size_t, sg_remaining,
703 block_remaining);703 block_remaining);
704 if (read_len < copy_bytes)
705 copy_bytes = read_len;
704 offset = DATA_BLOCK_SIZE - block_remaining;706 offset = DATA_BLOCK_SIZE - block_remaining;
705 tcmu_flush_dcache_range(from, copy_bytes);707 tcmu_flush_dcache_range(from, copy_bytes);
706 memcpy(to + sg->length - sg_remaining, from + offset,708 memcpy(to + sg->length - sg_remaining, from + offset,
@@ -708,8 +710,11 @@ static void gather_data_area(struct tcmu_dev *udev, struct tcmu_cmd *cmd, · 1 unmodified line
708 710
709 sg_remaining -= copy_bytes;711 sg_remaining -= copy_bytes;
710 block_remaining -= copy_bytes;712 block_remaining -= copy_bytes;
713 read_len -= copy_bytes;
711 }714 }
712 kunmap_atomic(to - sg->offset);715 kunmap_atomic(to - sg->offset);
716 if (read_len == 0)
717 break;
713 }718 }
714 if (from)719 if (from)
715 kunmap_atomic(from);720 kunmap_atomic(from);
@@ -1042,6 +1047,8 @@ static void tcmu_handle_completion(struct tcmu_cmd *cmd, struct tcmu_cmd_entry * · 326 unmodified lines
1042{1047{
1043 struct se_cmd *se_cmd = cmd->se_cmd;1048 struct se_cmd *se_cmd = cmd->se_cmd;
1044 struct tcmu_dev *udev = cmd->tcmu_dev;1049 struct tcmu_dev *udev = cmd->tcmu_dev;
1050 bool read_len_valid = false;
1051 uint32_t read_len = se_cmd->data_length;
1045 1052
1046 /*1053 /*
1047 * cmd has been completed already from timeout, just reclaim1054 * cmd has been completed already from timeout, just reclaim
@@ -1056,13 +1063,28 @@ static void tcmu_handle_completion(struct tcmu_cmd *cmd, struct tcmu_cmd_entry * · 8 unmodified lines
1056 pr_warn("TCMU: Userspace set UNKNOWN_OP flag on se_cmd %p\n",1063 pr_warn("TCMU: Userspace set UNKNOWN_OP flag on se_cmd %p\n",
1057 cmd->se_cmd);1064 cmd->se_cmd);
1058 entry->rsp.scsi_status = SAM_STAT_CHECK_CONDITION;1065 entry->rsp.scsi_status = SAM_STAT_CHECK_CONDITION;
1059 } else if (entry->rsp.scsi_status == SAM_STAT_CHECK_CONDITION) {1066 goto done;
1067 }
1068
1069 if (se_cmd->data_direction == DMA_FROM_DEVICE &&
1070 (entry->hdr.uflags & TCMU_UFLAG_READ_LEN) && entry->rsp.read_len) {
1071 read_len_valid = true;
1072 if (entry->rsp.read_len < read_len)
1073 read_len = entry->rsp.read_len;
1074 }
1075
1076 if (entry->rsp.scsi_status == SAM_STAT_CHECK_CONDITION) {
1060 transport_copy_sense_to_cmd(se_cmd, entry->rsp.sense_buffer);1077 transport_copy_sense_to_cmd(se_cmd, entry->rsp.sense_buffer);
1061 } else if (se_cmd->se_cmd_flags & SCF_BIDI) {1078 if (!read_len_valid )
1079 goto done;
1080 else
1081 se_cmd->se_cmd_flags |= SCF_TREAT_READ_AS_NORMAL;
1082 }
1083 if (se_cmd->se_cmd_flags & SCF_BIDI) {
1062 /* Get Data-In buffer before clean up */1084 /* Get Data-In buffer before clean up */
1063 gather_data_area(udev, cmd, true);1085 gather_data_area(udev, cmd, true, read_len);
1064 } else if (se_cmd->data_direction == DMA_FROM_DEVICE) {1086 } else if (se_cmd->data_direction == DMA_FROM_DEVICE) {
1065 gather_data_area(udev, cmd, false);1087 gather_data_area(udev, cmd, false, read_len);
1066 } else if (se_cmd->data_direction == DMA_TO_DEVICE) {1088 } else if (se_cmd->data_direction == DMA_TO_DEVICE) {
1067 /* TODO: */1089 /* TODO: */
1068 } else if (se_cmd->data_direction != DMA_NONE) {1090 } else if (se_cmd->data_direction != DMA_NONE) {
@@ -1070,7 +1092,13 @@ static void tcmu_handle_completion(struct tcmu_cmd *cmd, struct tcmu_cmd_entry * · 1 unmodified line
1070 se_cmd->data_direction);1092 se_cmd->data_direction);
1071 }1093 }
1072 1094
1073 target_complete_cmd(cmd->se_cmd, entry->rsp.scsi_status);1095done:
1096 if (read_len_valid) {
1097 pr_debug("read_len = %d\n", read_len);
1098 target_complete_cmd_with_length(cmd->se_cmd,
1099 entry->rsp.scsi_status, read_len);
1100 } else
1101 target_complete_cmd(cmd->se_cmd, entry->rsp.scsi_status);
1074 1102
1075out:1103out:
1076 cmd->se_cmd = NULL;1104 cmd->se_cmd = NULL;
@@ -1740,7 +1768,7 @@ static int tcmu_configure_device(struct se_device *dev) · 663 unmodified lines
1740 /* Initialise the mailbox of the ring buffer */1768 /* Initialise the mailbox of the ring buffer */
1741 mb = udev->mb_addr;1769 mb = udev->mb_addr;
1742 mb->version = TCMU_MAILBOX_VERSION;1770 mb->version = TCMU_MAILBOX_VERSION;
1743 mb->flags = TCMU_MAILBOX_FLAG_CAP_OOOC;1771 mb->flags = TCMU_MAILBOX_FLAG_CAP_OOOC | TCMU_MAILBOX_FLAG_CAP_READ_LEN;
1744 mb->cmdr_off = CMDR_OFF;1772 mb->cmdr_off = CMDR_OFF;
1745 mb->cmdr_size = udev->cmdr_size;1773 mb->cmdr_size = udev->cmdr_size;
1746 1774
drivers/tty/n_tty.c+32−23
@@ -124,6 +124,8 @@ struct n_tty_data { · 123 unmodified lines
124 struct mutex output_lock;124 struct mutex output_lock;
125};125};
126 126
127#define MASK(x) ((x) & (N_TTY_BUF_SIZE - 1))
128
127static inline size_t read_cnt(struct n_tty_data *ldata)129static inline size_t read_cnt(struct n_tty_data *ldata)
128{130{
129 return ldata->read_head - ldata->read_tail;131 return ldata->read_head - ldata->read_tail;
@@ -141,6 +143,7 @@ static inline unsigned char *read_buf_addr(struct n_tty_data *ldata, size_t i) · 11 unmodified lines
141 143
142static inline unsigned char echo_buf(struct n_tty_data *ldata, size_t i)144static inline unsigned char echo_buf(struct n_tty_data *ldata, size_t i)
143{145{
146 smp_rmb(); /* Matches smp_wmb() in add_echo_byte(). */
144 return ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)];147 return ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)];
145}148}
146 149
@@ -316,9 +319,7 @@ static inline void put_tty_queue(unsigned char c, struct n_tty_data *ldata) · 169 unmodified lines
316static void reset_buffer_flags(struct n_tty_data *ldata)319static void reset_buffer_flags(struct n_tty_data *ldata)
317{320{
318 ldata->read_head = ldata->canon_head = ldata->read_tail = 0;321 ldata->read_head = ldata->canon_head = ldata->read_tail = 0;
319 ldata->echo_head = ldata->echo_tail = ldata->echo_commit = 0;
320 ldata->commit_head = 0;322 ldata->commit_head = 0;
321 ldata->echo_mark = 0;
322 ldata->line_start = 0;323 ldata->line_start = 0;
323 324
324 ldata->erasing = 0;325 ldata->erasing = 0;
@@ -617,12 +618,19 @@ static size_t __process_echoes(struct tty_struct *tty) · 292 unmodified lines
617 old_space = space = tty_write_room(tty);618 old_space = space = tty_write_room(tty);
618 619
619 tail = ldata->echo_tail;620 tail = ldata->echo_tail;
620 while (ldata->echo_commit != tail) {621 while (MASK(ldata->echo_commit) != MASK(tail)) {
621 c = echo_buf(ldata, tail);622 c = echo_buf(ldata, tail);
622 if (c == ECHO_OP_START) {623 if (c == ECHO_OP_START) {
623 unsigned char op;624 unsigned char op;
624 int no_space_left = 0;625 int no_space_left = 0;
625 626
627 /*
628 * Since add_echo_byte() is called without holding
629 * output_lock, we might see only portion of multi-byte
630 * operation.
631 */
632 if (MASK(ldata->echo_commit) == MASK(tail + 1))
633 goto not_yet_stored;
626 /*634 /*
627 * If the buffer byte is the start of a multi-byte635 * If the buffer byte is the start of a multi-byte
628 * operation, get the next byte, which is either the636 * operation, get the next byte, which is either the
@@ -634,6 +642,8 @@ static size_t __process_echoes(struct tty_struct *tty) · 5 unmodified lines
634 unsigned int num_chars, num_bs;642 unsigned int num_chars, num_bs;
635 643
636 case ECHO_OP_ERASE_TAB:644 case ECHO_OP_ERASE_TAB:
645 if (MASK(ldata->echo_commit) == MASK(tail + 2))
646 goto not_yet_stored;
637 num_chars = echo_buf(ldata, tail + 2);647 num_chars = echo_buf(ldata, tail + 2);
638 648
639 /*649 /*
@@ -728,7 +738,8 @@ static size_t __process_echoes(struct tty_struct *tty) · 88 unmodified lines
728 /* If the echo buffer is nearly full (so that the possibility exists738 /* If the echo buffer is nearly full (so that the possibility exists
729 * of echo overrun before the next commit), then discard enough739 * of echo overrun before the next commit), then discard enough
730 * data at the tail to prevent a subsequent overrun */740 * data at the tail to prevent a subsequent overrun */
731 while (ldata->echo_commit - tail >= ECHO_DISCARD_WATERMARK) {741 while (ldata->echo_commit > tail &&
742 ldata->echo_commit - tail >= ECHO_DISCARD_WATERMARK) {
732 if (echo_buf(ldata, tail) == ECHO_OP_START) {743 if (echo_buf(ldata, tail) == ECHO_OP_START) {
733 if (echo_buf(ldata, tail + 1) == ECHO_OP_ERASE_TAB)744 if (echo_buf(ldata, tail + 1) == ECHO_OP_ERASE_TAB)
734 tail += 3;745 tail += 3;
@@ -738,6 +749,7 @@ static size_t __process_echoes(struct tty_struct *tty) · 3 unmodified lines
738 tail++;749 tail++;
739 }750 }
740 751
752 not_yet_stored:
741 ldata->echo_tail = tail;753 ldata->echo_tail = tail;
742 return old_space - space;754 return old_space - space;
743}755}
@@ -748,6 +760,7 @@ static void commit_echoes(struct tty_struct *tty) · 4 unmodified lines
748 size_t nr, old, echoed;760 size_t nr, old, echoed;
749 size_t head;761 size_t head;
750 762
763 mutex_lock(&ldata->output_lock);
751 head = ldata->echo_head;764 head = ldata->echo_head;
752 ldata->echo_mark = head;765 ldata->echo_mark = head;
753 old = ldata->echo_commit - ldata->echo_tail;766 old = ldata->echo_commit - ldata->echo_tail;
@@ -756,10 +769,12 @@ static void commit_echoes(struct tty_struct *tty) · 2 unmodified lines
756 * is over the threshold (and try again each time another769 * is over the threshold (and try again each time another
757 * block is accumulated) */770 * block is accumulated) */
758 nr = head - ldata->echo_tail;771 nr = head - ldata->echo_tail;
759 if (nr < ECHO_COMMIT_WATERMARK || (nr % ECHO_BLOCK > old % ECHO_BLOCK))772 if (nr < ECHO_COMMIT_WATERMARK ||
773 (nr % ECHO_BLOCK > old % ECHO_BLOCK)) {
774 mutex_unlock(&ldata->output_lock);
760 return;775 return;
776 }
761 777
762 mutex_lock(&ldata->output_lock);
763 ldata->echo_commit = head;778 ldata->echo_commit = head;
764 echoed = __process_echoes(tty);779 echoed = __process_echoes(tty);
765 mutex_unlock(&ldata->output_lock);780 mutex_unlock(&ldata->output_lock);
@@ -810,7 +825,9 @@ static void flush_echoes(struct tty_struct *tty) · 44 unmodified lines
810 825
811static inline void add_echo_byte(unsigned char c, struct n_tty_data *ldata)826static inline void add_echo_byte(unsigned char c, struct n_tty_data *ldata)
812{827{
813 *echo_buf_addr(ldata, ldata->echo_head++) = c;828 *echo_buf_addr(ldata, ldata->echo_head) = c;
829 smp_wmb(); /* Matches smp_rmb() in echo_buf(). */
830 ldata->echo_head++;
814}831}
815 832
816/**833/**
@@ -978,14 +995,15 @@ static void eraser(unsigned char c, struct tty_struct *tty) · 161 unmodified lines
978 }995 }
979 996
980 seen_alnums = 0;997 seen_alnums = 0;
981 while (ldata->read_head != ldata->canon_head) {998 while (MASK(ldata->read_head) != MASK(ldata->canon_head)) {
982 head = ldata->read_head;999 head = ldata->read_head;
983 1000
984 /* erase a single possibly multibyte character */1001 /* erase a single possibly multibyte character */
985 do {1002 do {
986 head--;1003 head--;
987 c = read_buf(ldata, head);1004 c = read_buf(ldata, head);
988 } while (is_continuation(c, tty) && head != ldata->canon_head);1005 } while (is_continuation(c, tty) &&
1006 MASK(head) != MASK(ldata->canon_head));
989 1007
990 /* do not partially erase */1008 /* do not partially erase */
991 if (is_continuation(c, tty))1009 if (is_continuation(c, tty))
@@ -1027,7 +1045,7 @@ static void eraser(unsigned char c, struct tty_struct *tty) · 35 unmodified lines
1027 * This info is used to go back the correct1045 * This info is used to go back the correct
1028 * number of columns.1046 * number of columns.
1029 */1047 */
1030 while (tail != ldata->canon_head) {1048 while (MASK(tail) != MASK(ldata->canon_head)) {
1031 tail--;1049 tail--;
1032 c = read_buf(ldata, tail);1050 c = read_buf(ldata, tail);
1033 if (c == '\t') {1051 if (c == '\t') {
@@ -1302,7 +1320,7 @@ n_tty_receive_char_special(struct tty_struct *tty, unsigned char c) · 268 unmodified lines
1302 finish_erasing(ldata);1320 finish_erasing(ldata);
1303 echo_char(c, tty);1321 echo_char(c, tty);
1304 echo_char_raw('\n', ldata);1322 echo_char_raw('\n', ldata);
1305 while (tail != ldata->read_head) {1323 while (MASK(tail) != MASK(ldata->read_head)) {
1306 echo_char(read_buf(ldata, tail), tty);1324 echo_char(read_buf(ldata, tail), tty);
1307 tail++;1325 tail++;
1308 }1326 }
@@ -1878,30 +1896,21 @@ static int n_tty_open(struct tty_struct *tty) · 569 unmodified lines
1878 struct n_tty_data *ldata;1896 struct n_tty_data *ldata;
1879 1897
1880 /* Currently a malloc failure here can panic */1898 /* Currently a malloc failure here can panic */
1881 ldata = vmalloc(sizeof(*ldata));1899 ldata = vzalloc(sizeof(*ldata));
1882 if (!ldata)1900 if (!ldata)
1883 goto err;1901 return -ENOMEM;
1884 1902
1885 ldata->overrun_time = jiffies;1903 ldata->overrun_time = jiffies;
1886 mutex_init(&ldata->atomic_read_lock);1904 mutex_init(&ldata->atomic_read_lock);
1887 mutex_init(&ldata->output_lock);1905 mutex_init(&ldata->output_lock);
1888 1906
1889 tty->disc_data = ldata;1907 tty->disc_data = ldata;
1890 reset_buffer_flags(tty->disc_data);
1891 ldata->column = 0;
1892 ldata->canon_column = 0;
1893 ldata->num_overrun = 0;
1894 ldata->no_room = 0;
1895 ldata->lnext = 0;
1896 tty->closing = 0;1908 tty->closing = 0;
1897 /* indicate buffer work may resume */1909 /* indicate buffer work may resume */
1898 clear_bit(TTY_LDISC_HALTED, &tty->flags);1910 clear_bit(TTY_LDISC_HALTED, &tty->flags);
1899 n_tty_set_termios(tty, NULL);1911 n_tty_set_termios(tty, NULL);
1900 tty_unthrottle(tty);1912 tty_unthrottle(tty);
1901
1902 return 0;1913 return 0;
1903err:
1904 return -ENOMEM;
1905}1914}
1906 1915
1907static inline int input_available_p(struct tty_struct *tty, int poll)1916static inline int input_available_p(struct tty_struct *tty, int poll)
@@ -2411,7 +2420,7 @@ static unsigned long inq_canon(struct n_tty_data *ldata) · 503 unmodified lines
2411 tail = ldata->read_tail;2420 tail = ldata->read_tail;
2412 nr = head - tail;2421 nr = head - tail;
2413 /* Skip EOF-chars.. */2422 /* Skip EOF-chars.. */
2414 while (head != tail) {2423 while (MASK(head) != MASK(tail)) {
2415 if (test_bit(tail & (N_TTY_BUF_SIZE - 1), ldata->read_flags) &&2424 if (test_bit(tail & (N_TTY_BUF_SIZE - 1), ldata->read_flags) &&
2416 read_buf(ldata, tail) == __DISABLED_CHAR)2425 read_buf(ldata, tail) == __DISABLED_CHAR)
2417 nr--;2426 nr--;
drivers/tty/serdev/core.c+1−0
@@ -617,6 +617,7 @@ EXPORT_SYMBOL_GPL(__serdev_device_driver_register); · 616 unmodified lines
617static void __exit serdev_exit(void)617static void __exit serdev_exit(void)
618{618{
619 bus_unregister(&serdev_bus_type);619 bus_unregister(&serdev_bus_type);
620 ida_destroy(&ctrl_ida);
620}621}
621module_exit(serdev_exit);622module_exit(serdev_exit);
622 623
drivers/tty/serial/8250/8250_pci.c+0−2
@@ -3339,9 +3339,7 @@ static const struct pci_device_id blacklist[] = { · 3338 unmodified lines
3339 /* multi-io cards handled by parport_serial */3339 /* multi-io cards handled by parport_serial */
3340 { PCI_DEVICE(0x4348, 0x7053), }, /* WCH CH353 2S1P */3340 { PCI_DEVICE(0x4348, 0x7053), }, /* WCH CH353 2S1P */
3341 { PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */3341 { PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */
3342 { PCI_DEVICE(0x4348, 0x7173), }, /* WCH CH355 4S */
3343 { PCI_DEVICE(0x1c00, 0x3250), }, /* WCH CH382 2S1P */3342 { PCI_DEVICE(0x1c00, 0x3250), }, /* WCH CH382 2S1P */
3344 { PCI_DEVICE(0x1c00, 0x3470), }, /* WCH CH384 4S */
3345 3343
3346 /* Moxa Smartio MUE boards handled by 8250_moxa */3344 /* Moxa Smartio MUE boards handled by 8250_moxa */
3347 { PCI_VDEVICE(MOXA, 0x1024), },3345 { PCI_VDEVICE(MOXA, 0x1024), },
drivers/tty/vt/vt.c+2−2
@@ -784,7 +784,7 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ · 783 unmodified lines
784 if (!*vc->vc_uni_pagedir_loc)784 if (!*vc->vc_uni_pagedir_loc)
785 con_set_default_unimap(vc);785 con_set_default_unimap(vc);
786 786
787 vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL);787 vc->vc_screenbuf = kzalloc(vc->vc_screenbuf_size, GFP_KERNEL);
788 if (!vc->vc_screenbuf)788 if (!vc->vc_screenbuf)
789 goto err_free;789 goto err_free;
790 790
@@ -871,7 +871,7 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc, · 80 unmodified lines
871 871
872 if (new_screen_size > (4 << 20))872 if (new_screen_size > (4 << 20))
873 return -EINVAL;873 return -EINVAL;
874 newscreen = kmalloc(new_screen_size, GFP_USER);874 newscreen = kzalloc(new_screen_size, GFP_USER);
875 if (!newscreen)875 if (!newscreen)
876 return -ENOMEM;876 return -ENOMEM;
877 877
drivers/usb/chipidea/host.c+4−1
@@ -124,8 +124,11 @@ static int host_start(struct ci_hdrc *ci) · 123 unmodified lines
124 124
125 hcd->power_budget = ci->platdata->power_budget;125 hcd->power_budget = ci->platdata->power_budget;
126 hcd->tpl_support = ci->platdata->tpl_support;126 hcd->tpl_support = ci->platdata->tpl_support;
127 if (ci->phy || ci->usb_phy)127 if (ci->phy || ci->usb_phy) {
128 hcd->skip_phy_initialization = 1;128 hcd->skip_phy_initialization = 1;
129 if (ci->usb_phy)
130 hcd->usb_phy = ci->usb_phy;
131 }
129 132
130 ehci = hcd_to_ehci(hcd);133 ehci = hcd_to_ehci(hcd);
131 ehci->caps = ci->hw_bank.cap;134 ehci->caps = ci->hw_bank.cap;
drivers/usb/class/cdc-acm.c+3−0
@@ -1758,6 +1758,9 @@ static const struct usb_device_id acm_ids[] = { · 1757 unmodified lines
1758 { USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */1758 { USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */
1759 .driver_info = SINGLE_RX_URB,1759 .driver_info = SINGLE_RX_URB,
1760 },1760 },
1761 { USB_DEVICE(0x1965, 0x0018), /* Uniden UBC125XLT */
1762 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1763 },
1761 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */1764 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1762 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */1765 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1763 },1766 },
drivers/usb/dwc2/core.h+3−0
@@ -1004,6 +1004,7 @@ struct dwc2_hregs_backup { · 1003 unmodified lines
1004 * @frame_list_sz: Frame list size1004 * @frame_list_sz: Frame list size
1005 * @desc_gen_cache: Kmem cache for generic descriptors1005 * @desc_gen_cache: Kmem cache for generic descriptors
1006 * @desc_hsisoc_cache: Kmem cache for hs isochronous descriptors1006 * @desc_hsisoc_cache: Kmem cache for hs isochronous descriptors
1007 * @unaligned_cache: Kmem cache for DMA mode to handle non-aligned buf
1007 *1008 *
1008 * These are for peripheral mode:1009 * These are for peripheral mode:
1009 *1010 *
@@ -1177,6 +1178,8 @@ struct dwc2_hsotg { · 167 unmodified lines
1177 u32 frame_list_sz;1178 u32 frame_list_sz;
1178 struct kmem_cache *desc_gen_cache;1179 struct kmem_cache *desc_gen_cache;
1179 struct kmem_cache *desc_hsisoc_cache;1180 struct kmem_cache *desc_hsisoc_cache;
1181 struct kmem_cache *unaligned_cache;
1182#define DWC2_KMEM_UNALIGNED_BUF_SIZE 1024
1180 1183
1181#endif /* CONFIG_USB_DWC2_HOST || CONFIG_USB_DWC2_DUAL_ROLE */1184#endif /* CONFIG_USB_DWC2_HOST || CONFIG_USB_DWC2_DUAL_ROLE */
1182 1185
drivers/usb/dwc2/gadget.c+12−8
@@ -812,6 +812,7 @@ static int dwc2_gadget_fill_isoc_desc(struct dwc2_hsotg_ep *hs_ep, · 811 unmodified lines
812 u32 index;812 u32 index;
813 u32 maxsize = 0;813 u32 maxsize = 0;
814 u32 mask = 0;814 u32 mask = 0;
815 u8 pid = 0;
815 816
816 maxsize = dwc2_gadget_get_desc_params(hs_ep, &mask);817 maxsize = dwc2_gadget_get_desc_params(hs_ep, &mask);
817 818
@@ -840,7 +841,11 @@ static int dwc2_gadget_fill_isoc_desc(struct dwc2_hsotg_ep *hs_ep, · 22 unmodified lines
840 ((len << DEV_DMA_NBYTES_SHIFT) & mask));841 ((len << DEV_DMA_NBYTES_SHIFT) & mask));
841 842
842 if (hs_ep->dir_in) {843 if (hs_ep->dir_in) {
843 desc->status |= ((hs_ep->mc << DEV_DMA_ISOC_PID_SHIFT) &844 if (len)
845 pid = DIV_ROUND_UP(len, hs_ep->ep.maxpacket);
846 else
847 pid = 1;
848 desc->status |= ((pid << DEV_DMA_ISOC_PID_SHIFT) &
844 DEV_DMA_ISOC_PID_MASK) |849 DEV_DMA_ISOC_PID_MASK) |
845 ((len % hs_ep->ep.maxpacket) ?850 ((len % hs_ep->ep.maxpacket) ?
846 DEV_DMA_SHORT : 0) |851 DEV_DMA_SHORT : 0) |
@@ -884,6 +889,7 @@ static void dwc2_gadget_start_isoc_ddma(struct dwc2_hsotg_ep *hs_ep) · 37 unmodified lines
884 struct dwc2_dma_desc *desc;889 struct dwc2_dma_desc *desc;
885 890
886 if (list_empty(&hs_ep->queue)) {891 if (list_empty(&hs_ep->queue)) {
892 hs_ep->target_frame = TARGET_FRAME_INITIAL;
887 dev_dbg(hsotg->dev, "%s: No requests in queue\n", __func__);893 dev_dbg(hsotg->dev, "%s: No requests in queue\n", __func__);
888 return;894 return;
889 }895 }
@@ -2755,8 +2761,6 @@ static void dwc2_gadget_handle_out_token_ep_disabled(struct dwc2_hsotg_ep *ep) · 1865 unmodified lines
2755 */2761 */
2756 tmp = dwc2_hsotg_read_frameno(hsotg);2762 tmp = dwc2_hsotg_read_frameno(hsotg);
2757 2763
2758 dwc2_hsotg_complete_request(hsotg, ep, get_ep_head(ep), 0);
2759
2760 if (using_desc_dma(hsotg)) {2764 if (using_desc_dma(hsotg)) {
2761 if (ep->target_frame == TARGET_FRAME_INITIAL) {2765 if (ep->target_frame == TARGET_FRAME_INITIAL) {
2762 /* Start first ISO Out */2766 /* Start first ISO Out */
@@ -2817,9 +2821,6 @@ static void dwc2_gadget_handle_nak(struct dwc2_hsotg_ep *hs_ep) · 54 unmodified lines
2817 2821
2818 tmp = dwc2_hsotg_read_frameno(hsotg);2822 tmp = dwc2_hsotg_read_frameno(hsotg);
2819 if (using_desc_dma(hsotg)) {2823 if (using_desc_dma(hsotg)) {
2820 dwc2_hsotg_complete_request(hsotg, hs_ep,
2821 get_ep_head(hs_ep), 0);
2822
2823 hs_ep->target_frame = tmp;2824 hs_ep->target_frame = tmp;
2824 dwc2_gadget_incr_frame_num(hs_ep);2825 dwc2_gadget_incr_frame_num(hs_ep);
2825 dwc2_gadget_start_isoc_ddma(hs_ep);2826 dwc2_gadget_start_isoc_ddma(hs_ep);
@@ -4739,9 +4740,11 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg) · 1913 unmodified lines
4739 }4740 }
4740 4741
4741 ret = usb_add_gadget_udc(dev, &hsotg->gadget);4742 ret = usb_add_gadget_udc(dev, &hsotg->gadget);
4742 if (ret)4743 if (ret) {
4744 dwc2_hsotg_ep_free_request(&hsotg->eps_out[0]->ep,
4745 hsotg->ctrl_req);
4743 return ret;4746 return ret;
4744 4747 }
4745 dwc2_hsotg_dump(hsotg);4748 dwc2_hsotg_dump(hsotg);
4746 4749
4747 return 0;4750 return 0;
@@ -4755,6 +4758,7 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg) · 7 unmodified lines
4755int dwc2_hsotg_remove(struct dwc2_hsotg *hsotg)4758int dwc2_hsotg_remove(struct dwc2_hsotg *hsotg)
4756{4759{
4757 usb_del_gadget_udc(&hsotg->gadget);4760 usb_del_gadget_udc(&hsotg->gadget);
4761 dwc2_hsotg_ep_free_request(&hsotg->eps_out[0]->ep, hsotg->ctrl_req);
4758 4762
4759 return 0;4763 return 0;
4760}4764}
drivers/usb/dwc2/hcd.c+87−6
@@ -1567,11 +1567,20 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg, · 1566 unmodified lines
1567 }1567 }
1568 1568
1569 if (hsotg->params.host_dma) {1569 if (hsotg->params.host_dma) {
1570 dwc2_writel((u32)chan->xfer_dma,1570 dma_addr_t dma_addr;
1571 hsotg->regs + HCDMA(chan->hc_num));1571
1572 if (chan->align_buf) {
1573 if (dbg_hc(chan))
1574 dev_vdbg(hsotg->dev, "align_buf\n");
1575 dma_addr = chan->align_buf;
1576 } else {
1577 dma_addr = chan->xfer_dma;
1578 }
1579 dwc2_writel((u32)dma_addr, hsotg->regs + HCDMA(chan->hc_num));
1580
1572 if (dbg_hc(chan))1581 if (dbg_hc(chan))
1573 dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n",1582 dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n",
1574 (unsigned long)chan->xfer_dma, chan->hc_num);1583 (unsigned long)dma_addr, chan->hc_num);
1575 }1584 }
1576 1585
1577 /* Start the split */1586 /* Start the split */
@@ -2625,6 +2634,35 @@ static void dwc2_hc_init_xfer(struct dwc2_hsotg *hsotg, · 1047 unmodified lines
2625 }2634 }
2626}2635}
2627 2636
2637static int dwc2_alloc_split_dma_aligned_buf(struct dwc2_hsotg *hsotg,
2638 struct dwc2_qh *qh,
2639 struct dwc2_host_chan *chan)
2640{
2641 if (!hsotg->unaligned_cache ||
2642 chan->max_packet > DWC2_KMEM_UNALIGNED_BUF_SIZE)
2643 return -ENOMEM;
2644
2645 if (!qh->dw_align_buf) {
2646 qh->dw_align_buf = kmem_cache_alloc(hsotg->unaligned_cache,
2647 GFP_ATOMIC | GFP_DMA);
2648 if (!qh->dw_align_buf)
2649 return -ENOMEM;
2650 }
2651
2652 qh->dw_align_buf_dma = dma_map_single(hsotg->dev, qh->dw_align_buf,
2653 DWC2_KMEM_UNALIGNED_BUF_SIZE,
2654 DMA_FROM_DEVICE);
2655
2656 if (dma_mapping_error(hsotg->dev, qh->dw_align_buf_dma)) {
2657 dev_err(hsotg->dev, "can't map align_buf\n");
2658 chan->align_buf = 0;
2659 return -EINVAL;
2660 }
2661
2662 chan->align_buf = qh->dw_align_buf_dma;
2663 return 0;
2664}
2665
2628#define DWC2_USB_DMA_ALIGN 42666#define DWC2_USB_DMA_ALIGN 4
2629 2667
2630struct dma_aligned_buffer {2668struct dma_aligned_buffer {
@@ -2802,6 +2840,32 @@ static int dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) · 171 unmodified lines
2802 /* Set the transfer attributes */2840 /* Set the transfer attributes */
2803 dwc2_hc_init_xfer(hsotg, chan, qtd);2841 dwc2_hc_init_xfer(hsotg, chan, qtd);
2804 2842
2843 /* For non-dword aligned buffers */
2844 if (hsotg->params.host_dma && qh->do_split &&
2845 chan->ep_is_in && (chan->xfer_dma & 0x3)) {
2846 dev_vdbg(hsotg->dev, "Non-aligned buffer\n");
2847 if (dwc2_alloc_split_dma_aligned_buf(hsotg, qh, chan)) {
2848 dev_err(hsotg->dev,
2849 "Failed to allocate memory to handle non-aligned buffer\n");
2850 /* Add channel back to free list */
2851 chan->align_buf = 0;
2852 chan->multi_count = 0;
2853 list_add_tail(&chan->hc_list_entry,
2854 &hsotg->free_hc_list);
2855 qtd->in_process = 0;
2856 qh->channel = NULL;
2857 return -ENOMEM;
2858 }
2859 } else {
2860 /*
2861 * We assume that DMA is always aligned in non-split
2862 * case or split out case. Warn if not.
2863 */
2864 WARN_ON_ONCE(hsotg->params.host_dma &&
2865 (chan->xfer_dma & 0x3));
2866 chan->align_buf = 0;
2867 }
2868
2805 if (chan->ep_type == USB_ENDPOINT_XFER_INT ||2869 if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
2806 chan->ep_type == USB_ENDPOINT_XFER_ISOC)2870 chan->ep_type == USB_ENDPOINT_XFER_ISOC)
2807 /*2871 /*
@@ -5246,6 +5310,19 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg) · 2438 unmodified lines
5246 }5310 }
5247 }5311 }
5248 5312
5313 if (hsotg->params.host_dma) {
5314 /*
5315 * Create kmem caches to handle non-aligned buffer
5316 * in Buffer DMA mode.
5317 */
5318 hsotg->unaligned_cache = kmem_cache_create("dwc2-unaligned-dma",
5319 DWC2_KMEM_UNALIGNED_BUF_SIZE, 4,
5320 SLAB_CACHE_DMA, NULL);
5321 if (!hsotg->unaligned_cache)
5322 dev_err(hsotg->dev,
5323 "unable to create dwc2 unaligned cache\n");
5324 }
5325
5249 hsotg->otg_port = 1;5326 hsotg->otg_port = 1;
5250 hsotg->frame_list = NULL;5327 hsotg->frame_list = NULL;
5251 hsotg->frame_list_dma = 0;5328 hsotg->frame_list_dma = 0;
@@ -5280,8 +5357,9 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg) · 28 unmodified lines
5280 return 0;5357 return 0;
5281 5358
5282error4:5359error4:
5283 kmem_cache_destroy(hsotg->desc_gen_cache);5360 kmem_cache_destroy(hsotg->unaligned_cache);
5284 kmem_cache_destroy(hsotg->desc_hsisoc_cache);5361 kmem_cache_destroy(hsotg->desc_hsisoc_cache);
5362 kmem_cache_destroy(hsotg->desc_gen_cache);
5285error3:5363error3:
5286 dwc2_hcd_release(hsotg);5364 dwc2_hcd_release(hsotg);
5287error2:5365error2:
@@ -5322,8 +5400,9 @@ void dwc2_hcd_remove(struct dwc2_hsotg *hsotg) · 34 unmodified lines
5322 usb_remove_hcd(hcd);5400 usb_remove_hcd(hcd);
5323 hsotg->priv = NULL;5401 hsotg->priv = NULL;
5324 5402
5325 kmem_cache_destroy(hsotg->desc_gen_cache);5403 kmem_cache_destroy(hsotg->unaligned_cache);
5326 kmem_cache_destroy(hsotg->desc_hsisoc_cache);5404 kmem_cache_destroy(hsotg->desc_hsisoc_cache);
5405 kmem_cache_destroy(hsotg->desc_gen_cache);
5327 5406
5328 dwc2_hcd_release(hsotg);5407 dwc2_hcd_release(hsotg);
5329 usb_put_hcd(hcd);5408 usb_put_hcd(hcd);
@@ -5435,7 +5514,7 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg) · 105 unmodified lines
5435 dwc2_writel(hprt0, hsotg->regs + HPRT0);5514 dwc2_writel(hprt0, hsotg->regs + HPRT0);
5436 5515
5437 /* Wait for the HPRT0.PrtSusp register field to be set */5516 /* Wait for the HPRT0.PrtSusp register field to be set */
5438 if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 300))5517 if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 3000))
5439 dev_warn(hsotg->dev, "Suspend wasn't generated\n");5518 dev_warn(hsotg->dev, "Suspend wasn't generated\n");
5440 5519
5441 /*5520 /*
@@ -5616,6 +5695,8 @@ int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, · 174 unmodified lines
5616 return ret;5695 return ret;
5617 }5696 }
5618 5697
5698 dwc2_hcd_rem_wakeup(hsotg);
5699
5619 hsotg->hibernated = 0;5700 hsotg->hibernated = 0;
5620 hsotg->bus_suspended = 0;5701 hsotg->bus_suspended = 0;
5621 hsotg->lx_state = DWC2_L0;5702 hsotg->lx_state = DWC2_L0;
drivers/usb/dwc2/hcd.h+8−0
@@ -76,6 +76,8 @@ struct dwc2_qh; · 75 unmodified lines
76 * (micro)frame76 * (micro)frame
77 * @xfer_buf: Pointer to current transfer buffer position77 * @xfer_buf: Pointer to current transfer buffer position
78 * @xfer_dma: DMA address of xfer_buf78 * @xfer_dma: DMA address of xfer_buf
79 * @align_buf: In Buffer DMA mode this will be used if xfer_buf is not
80 * DWORD aligned
79 * @xfer_len: Total number of bytes to transfer81 * @xfer_len: Total number of bytes to transfer
80 * @xfer_count: Number of bytes transferred so far82 * @xfer_count: Number of bytes transferred so far
81 * @start_pkt_count: Packet count at start of transfer83 * @start_pkt_count: Packet count at start of transfer
@@ -133,6 +135,7 @@ struct dwc2_host_chan { · 51 unmodified lines
133 135
134 u8 *xfer_buf;136 u8 *xfer_buf;
135 dma_addr_t xfer_dma;137 dma_addr_t xfer_dma;
138 dma_addr_t align_buf;
136 u32 xfer_len;139 u32 xfer_len;
137 u32 xfer_count;140 u32 xfer_count;
138 u16 start_pkt_count;141 u16 start_pkt_count;
@@ -302,6 +305,9 @@ struct dwc2_hs_transfer_time { · 163 unmodified lines
302 * speed. Note that this is in "schedule slice" which305 * speed. Note that this is in "schedule slice" which
303 * is tightly packed.306 * is tightly packed.
304 * @ntd: Actual number of transfer descriptors in a list307 * @ntd: Actual number of transfer descriptors in a list
308 * @dw_align_buf: Used instead of original buffer if its physical address
309 * is not dword-aligned
310 * @dw_align_buf_dma: DMA address for dw_align_buf
305 * @qtd_list: List of QTDs for this QH311 * @qtd_list: List of QTDs for this QH
306 * @channel: Host channel currently processing transfers for this QH312 * @channel: Host channel currently processing transfers for this QH
307 * @qh_list_entry: Entry for QH in either the periodic or non-periodic313 * @qh_list_entry: Entry for QH in either the periodic or non-periodic
@@ -350,6 +356,8 @@ struct dwc2_qh { · 42 unmodified lines
350 struct dwc2_hs_transfer_time hs_transfers[DWC2_HS_SCHEDULE_UFRAMES];356 struct dwc2_hs_transfer_time hs_transfers[DWC2_HS_SCHEDULE_UFRAMES];
351 u32 ls_start_schedule_slice;357 u32 ls_start_schedule_slice;
352 u16 ntd;358 u16 ntd;
359 u8 *dw_align_buf;
360 dma_addr_t dw_align_buf_dma;
353 struct list_head qtd_list;361 struct list_head qtd_list;
354 struct dwc2_host_chan *channel;362 struct dwc2_host_chan *channel;
355 struct list_head qh_list_entry;363 struct list_head qh_list_entry;
drivers/usb/dwc2/hcd_intr.c+9−2
@@ -942,14 +942,21 @@ static int dwc2_xfercomp_isoc_split_in(struct dwc2_hsotg *hsotg, · 941 unmodified lines
942 frame_desc = &qtd->urb->iso_descs[qtd->isoc_frame_index];942 frame_desc = &qtd->urb->iso_descs[qtd->isoc_frame_index];
943 len = dwc2_get_actual_xfer_length(hsotg, chan, chnum, qtd,943 len = dwc2_get_actual_xfer_length(hsotg, chan, chnum, qtd,
944 DWC2_HC_XFER_COMPLETE, NULL);944 DWC2_HC_XFER_COMPLETE, NULL);
945 if (!len) {945 if (!len && !qtd->isoc_split_offset) {
946 qtd->complete_split = 0;946 qtd->complete_split = 0;
947 qtd->isoc_split_offset = 0;
948 return 0;947 return 0;
949 }948 }
950 949
951 frame_desc->actual_length += len;950 frame_desc->actual_length += len;
952 951
952 if (chan->align_buf) {
953 dev_vdbg(hsotg->dev, "non-aligned buffer\n");
954 dma_unmap_single(hsotg->dev, chan->qh->dw_align_buf_dma,
955 DWC2_KMEM_UNALIGNED_BUF_SIZE, DMA_FROM_DEVICE);
956 memcpy(qtd->urb->buf + (chan->xfer_dma - qtd->urb->dma),
957 chan->qh->dw_align_buf, len);
958 }
959
953 qtd->isoc_split_offset += len;960 qtd->isoc_split_offset += len;
954 961
955 hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));962 hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
drivers/usb/dwc2/hcd_queue.c+4−1
@@ -383,7 +383,7 @@ static unsigned long *dwc2_get_ls_map(struct dwc2_hsotg *hsotg, · 382 unmodified lines
383 /* Get the map and adjust if this is a multi_tt hub */383 /* Get the map and adjust if this is a multi_tt hub */
384 map = qh->dwc_tt->periodic_bitmaps;384 map = qh->dwc_tt->periodic_bitmaps;
385 if (qh->dwc_tt->usb_tt->multi)385 if (qh->dwc_tt->usb_tt->multi)
386 map += DWC2_ELEMENTS_PER_LS_BITMAP * qh->ttport;386 map += DWC2_ELEMENTS_PER_LS_BITMAP * (qh->ttport - 1);
387 387
388 return map;388 return map;
389}389}
@@ -1696,6 +1696,9 @@ void dwc2_hcd_qh_free(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) · 1306 unmodified lines
1696 1696
1697 if (qh->desc_list)1697 if (qh->desc_list)
1698 dwc2_hcd_qh_free_ddma(hsotg, qh);1698 dwc2_hcd_qh_free_ddma(hsotg, qh);
1699 else if (hsotg->unaligned_cache && qh->dw_align_buf)
1700 kmem_cache_free(hsotg->unaligned_cache, qh->dw_align_buf);
1701
1699 kfree(qh);1702 kfree(qh);
1700}1703}
1701 1704
drivers/usb/dwc3/core.c+13−10
@@ -1272,7 +1272,6 @@ static int dwc3_probe(struct platform_device *pdev) · 1271 unmodified lines
1272 if (!dwc->clks)1272 if (!dwc->clks)
1273 return -ENOMEM;1273 return -ENOMEM;
1274 1274
1275 dwc->num_clks = ARRAY_SIZE(dwc3_core_clks);
1276 dwc->dev = dev;1275 dwc->dev = dev;
1277 1276
1278 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);1277 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -1307,15 +1306,19 @@ static int dwc3_probe(struct platform_device *pdev) · 28 unmodified lines
1307 if (IS_ERR(dwc->reset))1306 if (IS_ERR(dwc->reset))
1308 return PTR_ERR(dwc->reset);1307 return PTR_ERR(dwc->reset);
1309 1308
1310 ret = clk_bulk_get(dev, dwc->num_clks, dwc->clks);1309 if (dev->of_node) {
1311 if (ret == -EPROBE_DEFER)1310 dwc->num_clks = ARRAY_SIZE(dwc3_core_clks);
1312 return ret;1311
1313 /*1312 ret = clk_bulk_get(dev, dwc->num_clks, dwc->clks);
1314 * Clocks are optional, but new DT platforms should support all clocks1313 if (ret == -EPROBE_DEFER)
1315 * as required by the DT-binding.1314 return ret;
1316 */1315 /*
1317 if (ret)1316 * Clocks are optional, but new DT platforms should support all
1318 dwc->num_clks = 0;1317 * clocks as required by the DT-binding.
1318 */
1319 if (ret)
1320 dwc->num_clks = 0;
1321 }
1319 1322
1320 ret = reset_control_deassert(dwc->reset);1323 ret = reset_control_deassert(dwc->reset);
1321 if (ret)1324 if (ret)
drivers/usb/dwc3/dwc3-of-simple.c+2−1
@@ -165,8 +165,9 @@ static int dwc3_of_simple_remove(struct platform_device *pdev) · 164 unmodified lines
165 165
166 reset_control_put(simple->resets);166 reset_control_put(simple->resets);
167 167
168 pm_runtime_put_sync(dev);
169 pm_runtime_disable(dev);168 pm_runtime_disable(dev);
169 pm_runtime_put_noidle(dev);
170 pm_runtime_set_suspended(dev);
170 171
171 return 0;172 return 0;
172}173}
drivers/usb/dwc3/dwc3-pci.c+2−0
@@ -34,6 +34,7 @@ · 33 unmodified lines
34#define PCI_DEVICE_ID_INTEL_GLK 0x31aa34#define PCI_DEVICE_ID_INTEL_GLK 0x31aa
35#define PCI_DEVICE_ID_INTEL_CNPLP 0x9dee35#define PCI_DEVICE_ID_INTEL_CNPLP 0x9dee
36#define PCI_DEVICE_ID_INTEL_CNPH 0xa36e36#define PCI_DEVICE_ID_INTEL_CNPH 0xa36e
37#define PCI_DEVICE_ID_INTEL_ICLLP 0x34ee
37 38
38#define PCI_INTEL_BXT_DSM_GUID "732b85d5-b7a7-4a1b-9ba0-4bbd00ffd511"39#define PCI_INTEL_BXT_DSM_GUID "732b85d5-b7a7-4a1b-9ba0-4bbd00ffd511"
39#define PCI_INTEL_BXT_FUNC_PMU_PWR 440#define PCI_INTEL_BXT_FUNC_PMU_PWR 4
@@ -289,6 +290,7 @@ static const struct pci_device_id dwc3_pci_id_table[] = { · 249 unmodified lines
289 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_GLK), },290 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_GLK), },
290 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CNPLP), },291 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CNPLP), },
291 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CNPH), },292 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CNPH), },
293 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICLLP), },
292 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB), },294 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB), },
293 { } /* Terminating Entry */295 { } /* Terminating Entry */
294};296};
drivers/usb/dwc3/dwc3-qcom.c+5−8
@@ -490,6 +490,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev) · 489 unmodified lines
490 qcom->dwc3 = of_find_device_by_node(dwc3_np);490 qcom->dwc3 = of_find_device_by_node(dwc3_np);
491 if (!qcom->dwc3) {491 if (!qcom->dwc3) {
492 dev_err(&pdev->dev, "failed to get dwc3 platform device\n");492 dev_err(&pdev->dev, "failed to get dwc3 platform device\n");
493 ret = -ENODEV;
493 goto depopulate;494 goto depopulate;
494 }495 }
495 496
@@ -547,8 +548,7 @@ static int dwc3_qcom_remove(struct platform_device *pdev) · 51 unmodified lines
547 return 0;548 return 0;
548}549}
549 550
550#ifdef CONFIG_PM_SLEEP551static int __maybe_unused dwc3_qcom_pm_suspend(struct device *dev)
551static int dwc3_qcom_pm_suspend(struct device *dev)
552{552{
553 struct dwc3_qcom *qcom = dev_get_drvdata(dev);553 struct dwc3_qcom *qcom = dev_get_drvdata(dev);
554 int ret = 0;554 int ret = 0;
@@ -560,7 +560,7 @@ static int dwc3_qcom_pm_suspend(struct device *dev) · 5 unmodified lines
560 return ret;560 return ret;
561}561}
562 562
563static int dwc3_qcom_pm_resume(struct device *dev)563static int __maybe_unused dwc3_qcom_pm_resume(struct device *dev)
564{564{
565 struct dwc3_qcom *qcom = dev_get_drvdata(dev);565 struct dwc3_qcom *qcom = dev_get_drvdata(dev);
566 int ret;566 int ret;
@@ -571,23 +571,20 @@ static int dwc3_qcom_pm_resume(struct device *dev) · 4 unmodified lines
571 571
572 return ret;572 return ret;
573}573}
574#endif
575 574
576#ifdef CONFIG_PM575static int __maybe_unused dwc3_qcom_runtime_suspend(struct device *dev)
577static int dwc3_qcom_runtime_suspend(struct device *dev)
578{576{
579 struct dwc3_qcom *qcom = dev_get_drvdata(dev);577 struct dwc3_qcom *qcom = dev_get_drvdata(dev);
580 578
581 return dwc3_qcom_suspend(qcom);579 return dwc3_qcom_suspend(qcom);
582}580}
583 581
584static int dwc3_qcom_runtime_resume(struct device *dev)582static int __maybe_unused dwc3_qcom_runtime_resume(struct device *dev)
585{583{
586 struct dwc3_qcom *qcom = dev_get_drvdata(dev);584 struct dwc3_qcom *qcom = dev_get_drvdata(dev);
587 585
588 return dwc3_qcom_resume(qcom);586 return dwc3_qcom_resume(qcom);
589}587}
590#endif
591 588
592static const struct dev_pm_ops dwc3_qcom_dev_pm_ops = {589static const struct dev_pm_ops dwc3_qcom_dev_pm_ops = {
593 SET_SYSTEM_SLEEP_PM_OPS(dwc3_qcom_pm_suspend, dwc3_qcom_pm_resume)590 SET_SYSTEM_SLEEP_PM_OPS(dwc3_qcom_pm_suspend, dwc3_qcom_pm_resume)
drivers/usb/gadget/composite.c+3−0
@@ -1719,6 +1719,8 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) · 1718 unmodified lines
1719 */1719 */
1720 if (w_value && !f->get_alt)1720 if (w_value && !f->get_alt)
1721 break;1721 break;
1722
1723 spin_lock(&cdev->lock);
1722 value = f->set_alt(f, w_index, w_value);1724 value = f->set_alt(f, w_index, w_value);
1723 if (value == USB_GADGET_DELAYED_STATUS) {1725 if (value == USB_GADGET_DELAYED_STATUS) {
1724 DBG(cdev,1726 DBG(cdev,
@@ -1728,6 +1730,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) · 3 unmodified lines
1728 DBG(cdev, "delayed_status count %d\n",1730 DBG(cdev, "delayed_status count %d\n",
1729 cdev->delayed_status);1731 cdev->delayed_status);
1730 }1732 }
1733 spin_unlock(&cdev->lock);
1731 break;1734 break;
1732 case USB_REQ_GET_INTERFACE:1735 case USB_REQ_GET_INTERFACE:
1733 if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))1736 if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))
drivers/usb/gadget/function/f_fs.c+18−8
@@ -215,6 +215,7 @@ struct ffs_io_data { · 214 unmodified lines
215 215
216 struct mm_struct *mm;216 struct mm_struct *mm;
217 struct work_struct work;217 struct work_struct work;
218 struct work_struct cancellation_work;
218 219
219 struct usb_ep *ep;220 struct usb_ep *ep;
220 struct usb_request *req;221 struct usb_request *req;
@@ -1072,22 +1073,31 @@ ffs_epfile_open(struct inode *inode, struct file *file) · 851 unmodified lines
1072 return 0;1073 return 0;
1073}1074}
1074 1075
1076static void ffs_aio_cancel_worker(struct work_struct *work)
1077{
1078 struct ffs_io_data *io_data = container_of(work, struct ffs_io_data,
1079 cancellation_work);
1080
1081 ENTER();
1082
1083 usb_ep_dequeue(io_data->ep, io_data->req);
1084}
1085
1075static int ffs_aio_cancel(struct kiocb *kiocb)1086static int ffs_aio_cancel(struct kiocb *kiocb)
1076{1087{
1077 struct ffs_io_data *io_data = kiocb->private;1088 struct ffs_io_data *io_data = kiocb->private;
1078 struct ffs_epfile *epfile = kiocb->ki_filp->private_data;1089 struct ffs_data *ffs = io_data->ffs;
1079 int value;1090 int value;
1080 1091
1081 ENTER();1092 ENTER();
1082 1093
1083 spin_lock_irq(&epfile->ffs->eps_lock);1094 if (likely(io_data && io_data->ep && io_data->req)) {
1084 1095 INIT_WORK(&io_data->cancellation_work, ffs_aio_cancel_worker);
1085 if (likely(io_data && io_data->ep && io_data->req))1096 queue_work(ffs->io_completion_wq, &io_data->cancellation_work);
1086 value = usb_ep_dequeue(io_data->ep, io_data->req);1097 value = -EINPROGRESS;
1087 else1098 } else {
1088 value = -EINVAL;1099 value = -EINVAL;
1089 1100 }
1090 spin_unlock_irq(&epfile->ffs->eps_lock);
1091 1101
1092 return value;1102 return value;
1093}1103}
drivers/usb/host/xhci-mem.c+2−2
@@ -886,12 +886,12 @@ void xhci_free_virt_device(struct xhci_hcd *xhci, int slot_id) · 885 unmodified lines
886 886
887 dev = xhci->devs[slot_id];887 dev = xhci->devs[slot_id];
888 888
889 trace_xhci_free_virt_device(dev);
890
891 xhci->dcbaa->dev_context_ptrs[slot_id] = 0;889 xhci->dcbaa->dev_context_ptrs[slot_id] = 0;
892 if (!dev)890 if (!dev)
893 return;891 return;
894 892
893 trace_xhci_free_virt_device(dev);
894
895 if (dev->tt_info)895 if (dev->tt_info)
896 old_active_eps = dev->tt_info->active_eps;896 old_active_eps = dev->tt_info->active_eps;
897 897
drivers/usb/host/xhci-tegra.c+3−3
@@ -481,7 +481,7 @@ static void tegra_xusb_mbox_handle(struct tegra_xusb *tegra, · 480 unmodified lines
481 unsigned long mask;481 unsigned long mask;
482 unsigned int port;482 unsigned int port;
483 bool idle, enable;483 bool idle, enable;
484 int err;484 int err = 0;
485 485
486 memset(&rsp, 0, sizeof(rsp));486 memset(&rsp, 0, sizeof(rsp));
487 487
@@ -1223,10 +1223,10 @@ disable_rpm: · 735 unmodified lines
1223 pm_runtime_disable(&pdev->dev);1223 pm_runtime_disable(&pdev->dev);
1224 usb_put_hcd(tegra->hcd);1224 usb_put_hcd(tegra->hcd);
1225disable_xusbc:1225disable_xusbc:
1226 if (!&pdev->dev.pm_domain)1226 if (!pdev->dev.pm_domain)
1227 tegra_powergate_power_off(TEGRA_POWERGATE_XUSBC);1227 tegra_powergate_power_off(TEGRA_POWERGATE_XUSBC);
1228disable_xusba:1228disable_xusba:
1229 if (!&pdev->dev.pm_domain)1229 if (!pdev->dev.pm_domain)
1230 tegra_powergate_power_off(TEGRA_POWERGATE_XUSBA);1230 tegra_powergate_power_off(TEGRA_POWERGATE_XUSBA);
1231put_padctl:1231put_padctl:
1232 tegra_xusb_padctl_put(tegra->padctl);1232 tegra_xusb_padctl_put(tegra->padctl);
drivers/usb/host/xhci-trace.h+31−5
@@ -171,6 +171,37 @@ DEFINE_EVENT(xhci_log_trb, xhci_dbc_gadget_ep_queue, · 170 unmodified lines
171 TP_ARGS(ring, trb)171 TP_ARGS(ring, trb)
172);172);
173 173
174DECLARE_EVENT_CLASS(xhci_log_free_virt_dev,
175 TP_PROTO(struct xhci_virt_device *vdev),
176 TP_ARGS(vdev),
177 TP_STRUCT__entry(
178 __field(void *, vdev)
179 __field(unsigned long long, out_ctx)
180 __field(unsigned long long, in_ctx)
181 __field(u8, fake_port)
182 __field(u8, real_port)
183 __field(u16, current_mel)
184
185 ),
186 TP_fast_assign(
187 __entry->vdev = vdev;
188 __entry->in_ctx = (unsigned long long) vdev->in_ctx->dma;
189 __entry->out_ctx = (unsigned long long) vdev->out_ctx->dma;
190 __entry->fake_port = (u8) vdev->fake_port;
191 __entry->real_port = (u8) vdev->real_port;
192 __entry->current_mel = (u16) vdev->current_mel;
193 ),
194 TP_printk("vdev %p ctx %llx | %llx fake_port %d real_port %d current_mel %d",
195 __entry->vdev, __entry->in_ctx, __entry->out_ctx,
196 __entry->fake_port, __entry->real_port, __entry->current_mel
197 )
198);
199
200DEFINE_EVENT(xhci_log_free_virt_dev, xhci_free_virt_device,
201 TP_PROTO(struct xhci_virt_device *vdev),
202 TP_ARGS(vdev)
203);
204
174DECLARE_EVENT_CLASS(xhci_log_virt_dev,205DECLARE_EVENT_CLASS(xhci_log_virt_dev,
175 TP_PROTO(struct xhci_virt_device *vdev),206 TP_PROTO(struct xhci_virt_device *vdev),
176 TP_ARGS(vdev),207 TP_ARGS(vdev),
@@ -208,11 +239,6 @@ DEFINE_EVENT(xhci_log_virt_dev, xhci_alloc_virt_device, · 31 unmodified lines
208 TP_ARGS(vdev)239 TP_ARGS(vdev)
209);240);
210 241
211DEFINE_EVENT(xhci_log_virt_dev, xhci_free_virt_device,
212 TP_PROTO(struct xhci_virt_device *vdev),
213 TP_ARGS(vdev)
214);
215
216DEFINE_EVENT(xhci_log_virt_dev, xhci_setup_device,242DEFINE_EVENT(xhci_log_virt_dev, xhci_setup_device,
217 TP_PROTO(struct xhci_virt_device *vdev),243 TP_PROTO(struct xhci_virt_device *vdev),
218 TP_ARGS(vdev)244 TP_ARGS(vdev)
drivers/usb/host/xhci.c+43−4
@@ -908,6 +908,41 @@ static void xhci_disable_port_wake_on_bits(struct xhci_hcd *xhci) · 907 unmodified lines
908 spin_unlock_irqrestore(&xhci->lock, flags);908 spin_unlock_irqrestore(&xhci->lock, flags);
909}909}
910 910
911static bool xhci_pending_portevent(struct xhci_hcd *xhci)
912{
913 struct xhci_port **ports;
914 int port_index;
915 u32 status;
916 u32 portsc;
917
918 status = readl(&xhci->op_regs->status);
919 if (status & STS_EINT)
920 return true;
921 /*
922 * Checking STS_EINT is not enough as there is a lag between a change
923 * bit being set and the Port Status Change Event that it generated
924 * being written to the Event Ring. See note in xhci 1.1 section 4.19.2.
925 */
926
927 port_index = xhci->usb2_rhub.num_ports;
928 ports = xhci->usb2_rhub.ports;
929 while (port_index--) {
930 portsc = readl(ports[port_index]->addr);
931 if (portsc & PORT_CHANGE_MASK ||
932 (portsc & PORT_PLS_MASK) == XDEV_RESUME)
933 return true;
934 }
935 port_index = xhci->usb3_rhub.num_ports;
936 ports = xhci->usb3_rhub.ports;
937 while (port_index--) {
938 portsc = readl(ports[port_index]->addr);
939 if (portsc & PORT_CHANGE_MASK ||
940 (portsc & PORT_PLS_MASK) == XDEV_RESUME)
941 return true;
942 }
943 return false;
944}
945
911/*946/*
912 * Stop HC (not bus-specific)947 * Stop HC (not bus-specific)
913 *948 *
@@ -1009,7 +1044,7 @@ EXPORT_SYMBOL_GPL(xhci_suspend); · 95 unmodified lines
1009 */1044 */
1010int xhci_resume(struct xhci_hcd *xhci, bool hibernated)1045int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
1011{1046{
1012 u32 command, temp = 0, status;1047 u32 command, temp = 0;
1013 struct usb_hcd *hcd = xhci_to_hcd(xhci);1048 struct usb_hcd *hcd = xhci_to_hcd(xhci);
1014 struct usb_hcd *secondary_hcd;1049 struct usb_hcd *secondary_hcd;
1015 int retval = 0;1050 int retval = 0;
@@ -1043,8 +1078,13 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) · 27 unmodified lines
1043 command = readl(&xhci->op_regs->command);1078 command = readl(&xhci->op_regs->command);
1044 command |= CMD_CRS;1079 command |= CMD_CRS;
1045 writel(command, &xhci->op_regs->command);1080 writel(command, &xhci->op_regs->command);
1081 /*
1082 * Some controllers take up to 55+ ms to complete the controller
1083 * restore so setting the timeout to 100ms. Xhci specification
1084 * doesn't mention any timeout value.
1085 */
1046 if (xhci_handshake(&xhci->op_regs->status,1086 if (xhci_handshake(&xhci->op_regs->status,
1047 STS_RESTORE, 0, 10 * 1000)) {1087 STS_RESTORE, 0, 100 * 1000)) {
1048 xhci_warn(xhci, "WARN: xHC restore state timeout\n");1088 xhci_warn(xhci, "WARN: xHC restore state timeout\n");
1049 spin_unlock_irq(&xhci->lock);1089 spin_unlock_irq(&xhci->lock);
1050 return -ETIMEDOUT;1090 return -ETIMEDOUT;
@@ -1134,8 +1174,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) · 83 unmodified lines
1134 done:1174 done:
1135 if (retval == 0) {1175 if (retval == 0) {
1136 /* Resume root hubs only when have pending events. */1176 /* Resume root hubs only when have pending events. */
1137 status = readl(&xhci->op_regs->status);1177 if (xhci_pending_portevent(xhci)) {
1138 if (status & STS_EINT) {
1139 usb_hcd_resume_root_hub(xhci->shared_hcd);1178 usb_hcd_resume_root_hub(xhci->shared_hcd);
1140 usb_hcd_resume_root_hub(hcd);1179 usb_hcd_resume_root_hub(hcd);
1141 }1180 }
drivers/usb/host/xhci.h+4−0
@@ -382,6 +382,10 @@ struct xhci_op_regs { · 381 unmodified lines
382#define PORT_PLC (1 << 22)382#define PORT_PLC (1 << 22)
383/* port configure error change - port failed to configure its link partner */383/* port configure error change - port failed to configure its link partner */
384#define PORT_CEC (1 << 23)384#define PORT_CEC (1 << 23)
385#define PORT_CHANGE_MASK (PORT_CSC | PORT_PEC | PORT_WRC | PORT_OCC | \
386 PORT_RC | PORT_PLC | PORT_CEC)
387
388
385/* Cold Attach Status - xHC can set this bit to report device attached during389/* Cold Attach Status - xHC can set this bit to report device attached during
386 * Sx state. Warm port reset should be perfomed to clear this bit and move port390 * Sx state. Warm port reset should be perfomed to clear this bit and move port
387 * to connected state.391 * to connected state.
drivers/usb/serial/cp210x.c+14−0
@@ -95,6 +95,9 @@ static const struct usb_device_id id_table[] = { · 94 unmodified lines
95 { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */95 { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */
96 { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */96 { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
97 { USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */97 { USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */
98 { USB_DEVICE(0x10C4, 0x817C) }, /* CESINEL MEDCAL N Power Quality Monitor */
99 { USB_DEVICE(0x10C4, 0x817D) }, /* CESINEL MEDCAL NT Power Quality Monitor */
100 { USB_DEVICE(0x10C4, 0x817E) }, /* CESINEL MEDCAL S Power Quality Monitor */
98 { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */101 { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */
99 { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */102 { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
100 { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */103 { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
@@ -112,6 +115,9 @@ static const struct usb_device_id id_table[] = { · 11 unmodified lines
112 { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */115 { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
113 { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */116 { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
114 { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */117 { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
118 { USB_DEVICE(0x10C4, 0x82EF) }, /* CESINEL FALCO 6105 AC Power Supply */
119 { USB_DEVICE(0x10C4, 0x82F1) }, /* CESINEL MEDCAL EFD Earth Fault Detector */
120 { USB_DEVICE(0x10C4, 0x82F2) }, /* CESINEL MEDCAL ST Network Analyzer */
115 { USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */121 { USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */
116 { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */122 { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
117 { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */123 { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
@@ -124,7 +130,9 @@ static const struct usb_device_id id_table[] = { · 6 unmodified lines
124 { USB_DEVICE(0x10C4, 0x8470) }, /* Juniper Networks BX Series System Console */130 { USB_DEVICE(0x10C4, 0x8470) }, /* Juniper Networks BX Series System Console */
125 { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */131 { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
126 { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */132 { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */
133 { USB_DEVICE(0x10C4, 0x851E) }, /* CESINEL MEDCAL PT Network Analyzer */
127 { USB_DEVICE(0x10C4, 0x85A7) }, /* LifeScan OneTouch Verio IQ */134 { USB_DEVICE(0x10C4, 0x85A7) }, /* LifeScan OneTouch Verio IQ */
135 { USB_DEVICE(0x10C4, 0x85B8) }, /* CESINEL ReCon T Energy Logger */
128 { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */136 { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
129 { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */137 { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
130 { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */138 { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
@@ -134,17 +142,23 @@ static const struct usb_device_id id_table[] = { · 3 unmodified lines
134 { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */142 { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */
135 { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */143 { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
136 { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */144 { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
145 { USB_DEVICE(0x10C4, 0x88FB) }, /* CESINEL MEDCAL STII Network Analyzer */
146 { USB_DEVICE(0x10C4, 0x8938) }, /* CESINEL MEDCAL S II Network Analyzer */
137 { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */147 { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
138 { USB_DEVICE(0x10C4, 0x8962) }, /* Brim Brothers charging dock */148 { USB_DEVICE(0x10C4, 0x8962) }, /* Brim Brothers charging dock */
139 { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */149 { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
140 { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */150 { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
151 { USB_DEVICE(0x10C4, 0x89A4) }, /* CESINEL FTBC Flexible Thyristor Bridge Controller */
141 { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */152 { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */
142 { USB_DEVICE(0x10C4, 0x8A5E) }, /* CEL EM3588 ZigBee USB Stick Long Range */153 { USB_DEVICE(0x10C4, 0x8A5E) }, /* CEL EM3588 ZigBee USB Stick Long Range */
143 { USB_DEVICE(0x10C4, 0x8B34) }, /* Qivicon ZigBee USB Radio Stick */154 { USB_DEVICE(0x10C4, 0x8B34) }, /* Qivicon ZigBee USB Radio Stick */
144 { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */155 { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
145 { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */156 { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
157 { USB_DEVICE(0x10C4, 0xEA63) }, /* Silicon Labs Windows Update (CP2101-4/CP2102N) */
146 { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */158 { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
147 { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */159 { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */
160 { USB_DEVICE(0x10C4, 0xEA7A) }, /* Silicon Labs Windows Update (CP2105) */
161 { USB_DEVICE(0x10C4, 0xEA7B) }, /* Silicon Labs Windows Update (CP2108) */
148 { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */162 { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */
149 { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */163 { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */
150 { USB_DEVICE(0x10C4, 0xF003) }, /* Elan Digital Systems USBpulse100 */164 { USB_DEVICE(0x10C4, 0xF003) }, /* Elan Digital Systems USBpulse100 */
drivers/usb/typec/tcpm.c+6−4
@@ -418,17 +418,18 @@ static void _tcpm_log(struct tcpm_port *port, const char *fmt, va_list args) · 417 unmodified lines
418 u64 ts_nsec = local_clock();418 u64 ts_nsec = local_clock();
419 unsigned long rem_nsec;419 unsigned long rem_nsec;
420 420
421 mutex_lock(&port->logbuffer_lock);
421 if (!port->logbuffer[port->logbuffer_head]) {422 if (!port->logbuffer[port->logbuffer_head]) {
422 port->logbuffer[port->logbuffer_head] =423 port->logbuffer[port->logbuffer_head] =
423 kzalloc(LOG_BUFFER_ENTRY_SIZE, GFP_KERNEL);424 kzalloc(LOG_BUFFER_ENTRY_SIZE, GFP_KERNEL);
424 if (!port->logbuffer[port->logbuffer_head])425 if (!port->logbuffer[port->logbuffer_head]) {
426 mutex_unlock(&port->logbuffer_lock);
425 return;427 return;
428 }
426 }429 }
427 430
428 vsnprintf(tmpbuffer, sizeof(tmpbuffer), fmt, args);431 vsnprintf(tmpbuffer, sizeof(tmpbuffer), fmt, args);
429 432
430 mutex_lock(&port->logbuffer_lock);
431
432 if (tcpm_log_full(port)) {433 if (tcpm_log_full(port)) {
433 port->logbuffer_head = max(port->logbuffer_head - 1, 0);434 port->logbuffer_head = max(port->logbuffer_head - 1, 0);
434 strcpy(tmpbuffer, "overflow");435 strcpy(tmpbuffer, "overflow");
@@ -3043,7 +3044,8 @@ static void run_state_machine(struct tcpm_port *port) · 2608 unmodified lines
3043 tcpm_port_is_sink(port) &&3044 tcpm_port_is_sink(port) &&
3044 time_is_after_jiffies(port->delayed_runtime)) {3045 time_is_after_jiffies(port->delayed_runtime)) {
3045 tcpm_set_state(port, SNK_DISCOVERY,3046 tcpm_set_state(port, SNK_DISCOVERY,
3046 port->delayed_runtime - jiffies);3047 jiffies_to_msecs(port->delayed_runtime -
3048 jiffies));
3047 break;3049 break;
3048 }3050 }
3049 tcpm_set_state(port, unattached_state(port), 0);3051 tcpm_set_state(port, unattached_state(port), 0);
drivers/usb/typec/ucsi/ucsi.c+13−0
@@ -350,6 +350,19 @@ static void ucsi_connector_change(struct work_struct *work) · 349 unmodified lines
350 }350 }
351 351
352 if (con->status.change & UCSI_CONSTAT_CONNECT_CHANGE) {352 if (con->status.change & UCSI_CONSTAT_CONNECT_CHANGE) {
353 typec_set_pwr_role(con->port, con->status.pwr_dir);
354
355 switch (con->status.partner_type) {
356 case UCSI_CONSTAT_PARTNER_TYPE_UFP:
357 typec_set_data_role(con->port, TYPEC_HOST);
358 break;
359 case UCSI_CONSTAT_PARTNER_TYPE_DFP:
360 typec_set_data_role(con->port, TYPEC_DEVICE);
361 break;
362 default:
363 break;
364 }
365
353 if (con->status.connected)366 if (con->status.connected)
354 ucsi_register_partner(con);367 ucsi_register_partner(con);
355 else368 else
drivers/usb/typec/ucsi/ucsi_acpi.c+5−0
@@ -79,6 +79,11 @@ static int ucsi_acpi_probe(struct platform_device *pdev) · 78 unmodified lines
79 return -ENODEV;79 return -ENODEV;
80 }80 }
81 81
82 /* This will make sure we can use ioremap_nocache() */
83 status = acpi_release_memory(ACPI_HANDLE(&pdev->dev), res, 1);
84 if (ACPI_FAILURE(status))
85 return -ENOMEM;
86
82 /*87 /*
83 * NOTE: The memory region for the data structures is used also in an88 * NOTE: The memory region for the data structures is used also in an
84 * operation region, which means ACPI has already reserved it. Therefore89 * operation region, which means ACPI has already reserved it. Therefore
fs/aio.c+1−147
@@ -5,7 +5,6 @@ · 4 unmodified lines
5 * Implements an efficient asynchronous io interface.5 * Implements an efficient asynchronous io interface.
6 *6 *
7 * Copyright 2000, 2001, 2002 Red Hat, Inc. All Rights Reserved.7 * Copyright 2000, 2001, 2002 Red Hat, Inc. All Rights Reserved.
8 * Copyright 2018 Christoph Hellwig.
9 *8 *
10 * See ../COPYING for licensing terms.9 * See ../COPYING for licensing terms.
11 */10 */
@@ -165,22 +164,10 @@ struct fsync_iocb { · 153 unmodified lines
165 bool datasync;164 bool datasync;
166};165};
167 166
168struct poll_iocb {
169 struct file *file;
170 __poll_t events;
171 struct wait_queue_head *head;
172
173 union {
174 struct wait_queue_entry wait;
175 struct work_struct work;
176 };
177};
178
179struct aio_kiocb {167struct aio_kiocb {
180 union {168 union {
181 struct kiocb rw;169 struct kiocb rw;
182 struct fsync_iocb fsync;170 struct fsync_iocb fsync;
183 struct poll_iocb poll;
184 };171 };
185 172
186 struct kioctx *ki_ctx;173 struct kioctx *ki_ctx;
@@ -1590,6 +1577,7 @@ static int aio_fsync(struct fsync_iocb *req, struct iocb *iocb, bool datasync) · 1403 unmodified lines
1590 if (unlikely(iocb->aio_buf || iocb->aio_offset || iocb->aio_nbytes ||1577 if (unlikely(iocb->aio_buf || iocb->aio_offset || iocb->aio_nbytes ||
1591 iocb->aio_rw_flags))1578 iocb->aio_rw_flags))
1592 return -EINVAL;1579 return -EINVAL;
1580
1593 req->file = fget(iocb->aio_fildes);1581 req->file = fget(iocb->aio_fildes);
1594 if (unlikely(!req->file))1582 if (unlikely(!req->file))
1595 return -EBADF;1583 return -EBADF;
@@ -1604,137 +1592,6 @@ static int aio_fsync(struct fsync_iocb *req, struct iocb *iocb, bool datasync) · 8 unmodified lines
1604 return 0;1592 return 0;
1605}1593}
1606 1594
1607/* need to use list_del_init so we can check if item was present */
1608static inline bool __aio_poll_remove(struct poll_iocb *req)
1609{
1610 if (list_empty(&req->wait.entry))
1611 return false;
1612 list_del_init(&req->wait.entry);
1613 return true;
1614}
1615
1616static inline void __aio_poll_complete(struct aio_kiocb *iocb, __poll_t mask)
1617{
1618 fput(iocb->poll.file);
1619 aio_complete(iocb, mangle_poll(mask), 0);
1620}
1621
1622static void aio_poll_work(struct work_struct *work)
1623{
1624 struct aio_kiocb *iocb = container_of(work, struct aio_kiocb, poll.work);
1625
1626 if (!list_empty_careful(&iocb->ki_list))
1627 aio_remove_iocb(iocb);
1628 __aio_poll_complete(iocb, iocb->poll.events);
1629}
1630
1631static int aio_poll_cancel(struct kiocb *iocb)
1632{
1633 struct aio_kiocb *aiocb = container_of(iocb, struct aio_kiocb, rw);
1634 struct poll_iocb *req = &aiocb->poll;
1635 struct wait_queue_head *head = req->head;
1636 bool found = false;
1637
1638 spin_lock(&head->lock);
1639 found = __aio_poll_remove(req);
1640 spin_unlock(&head->lock);
1641
1642 if (found) {
1643 req->events = 0;
1644 INIT_WORK(&req->work, aio_poll_work);
1645 schedule_work(&req->work);
1646 }
1647 return 0;
1648}
1649
1650static int aio_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,
1651 void *key)
1652{
1653 struct poll_iocb *req = container_of(wait, struct poll_iocb, wait);
1654 struct aio_kiocb *iocb = container_of(req, struct aio_kiocb, poll);
1655 struct file *file = req->file;
1656 __poll_t mask = key_to_poll(key);
1657
1658 assert_spin_locked(&req->head->lock);
1659
1660 /* for instances that support it check for an event match first: */
1661 if (mask && !(mask & req->events))
1662 return 0;
1663
1664 mask = file->f_op->poll_mask(file, req->events) & req->events;
1665 if (!mask)
1666 return 0;
1667
1668 __aio_poll_remove(req);
1669
1670 /*
1671 * Try completing without a context switch if we can acquire ctx_lock
1672 * without spinning. Otherwise we need to defer to a workqueue to
1673 * avoid a deadlock due to the lock order.
1674 */
1675 if (spin_trylock(&iocb->ki_ctx->ctx_lock)) {
1676 list_del_init(&iocb->ki_list);
1677 spin_unlock(&iocb->ki_ctx->ctx_lock);
1678
1679 __aio_poll_complete(iocb, mask);
1680 } else {
1681 req->events = mask;
1682 INIT_WORK(&req->work, aio_poll_work);
1683 schedule_work(&req->work);
1684 }
1685
1686 return 1;
1687}
1688
1689static ssize_t aio_poll(struct aio_kiocb *aiocb, struct iocb *iocb)
1690{
1691 struct kioctx *ctx = aiocb->ki_ctx;
1692 struct poll_iocb *req = &aiocb->poll;
1693 __poll_t mask;
1694
1695 /* reject any unknown events outside the normal event mask. */
1696 if ((u16)iocb->aio_buf != iocb->aio_buf)
1697 return -EINVAL;
1698 /* reject fields that are not defined for poll */
1699 if (iocb->aio_offset || iocb->aio_nbytes || iocb->aio_rw_flags)
1700 return -EINVAL;
1701
1702 req->events = demangle_poll(iocb->aio_buf) | EPOLLERR | EPOLLHUP;
1703 req->file = fget(iocb->aio_fildes);
1704 if (unlikely(!req->file))
1705 return -EBADF;
1706 if (!file_has_poll_mask(req->file))
1707 goto out_fail;
1708
1709 req->head = req->file->f_op->get_poll_head(req->file, req->events);
1710 if (!req->head)
1711 goto out_fail;
1712 if (IS_ERR(req->head)) {
1713 mask = EPOLLERR;
1714 goto done;
1715 }
1716
1717 init_waitqueue_func_entry(&req->wait, aio_poll_wake);
1718 aiocb->ki_cancel = aio_poll_cancel;
1719
1720 spin_lock_irq(&ctx->ctx_lock);
1721 spin_lock(&req->head->lock);
1722 mask = req->file->f_op->poll_mask(req->file, req->events) & req->events;
1723 if (!mask) {
1724 __add_wait_queue(req->head, &req->wait);
1725 list_add_tail(&aiocb->ki_list, &ctx->active_reqs);
1726 }
1727 spin_unlock(&req->head->lock);
1728 spin_unlock_irq(&ctx->ctx_lock);
1729done:
1730 if (mask)
1731 __aio_poll_complete(aiocb, mask);
1732 return 0;
1733out_fail:
1734 fput(req->file);
1735 return -EINVAL; /* same as no support for IOCB_CMD_POLL */
1736}
1737
1738static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,1595static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
1739 bool compat)1596 bool compat)
1740{1597{
@@ -1808,9 +1665,6 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, · 67 unmodified lines
1808 case IOCB_CMD_FDSYNC:1665 case IOCB_CMD_FDSYNC:
1809 ret = aio_fsync(&req->fsync, &iocb, true);1666 ret = aio_fsync(&req->fsync, &iocb, true);
1810 break;1667 break;
1811 case IOCB_CMD_POLL:
1812 ret = aio_poll(req, &iocb);
1813 break;
1814 default:1668 default:
1815 pr_debug("invalid aio operation %d\n", iocb.aio_lio_opcode);1669 pr_debug("invalid aio operation %d\n", iocb.aio_lio_opcode);
1816 ret = -EINVAL;1670 ret = -EINVAL;
fs/btrfs/extent_io.c+4−1
@@ -4542,8 +4542,11 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, · 4541 unmodified lines
4542 offset_in_extent = em_start - em->start;4542 offset_in_extent = em_start - em->start;
4543 em_end = extent_map_end(em);4543 em_end = extent_map_end(em);
4544 em_len = em_end - em_start;4544 em_len = em_end - em_start;
4545 disko = em->block_start + offset_in_extent;
4546 flags = 0;4545 flags = 0;
4546 if (em->block_start < EXTENT_MAP_LAST_BYTE)
4547 disko = em->block_start + offset_in_extent;
4548 else
4549 disko = 0;
4547 4550
4548 /*4551 /*
4549 * bump off for our next call to get_extent4552 * bump off for our next call to get_extent
fs/btrfs/inode.c+5−2
@@ -9005,13 +9005,14 @@ again: · 9004 unmodified lines
9005 9005
9006 unlock_extent_cached(io_tree, page_start, page_end, &cached_state);9006 unlock_extent_cached(io_tree, page_start, page_end, &cached_state);
9007 9007
9008out_unlock:
9009 if (!ret2) {9008 if (!ret2) {
9010 btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE, true);9009 btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE, true);
9011 sb_end_pagefault(inode->i_sb);9010 sb_end_pagefault(inode->i_sb);
9012 extent_changeset_free(data_reserved);9011 extent_changeset_free(data_reserved);
9013 return VM_FAULT_LOCKED;9012 return VM_FAULT_LOCKED;
9014 }9013 }
9014
9015out_unlock:
9015 unlock_page(page);9016 unlock_page(page);
9016out:9017out:
9017 btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE, (ret != 0));9018 btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE, (ret != 0));
@@ -9443,6 +9444,7 @@ static int btrfs_rename_exchange(struct inode *old_dir, · 425 unmodified lines
9443 u64 new_idx = 0;9444 u64 new_idx = 0;
9444 u64 root_objectid;9445 u64 root_objectid;
9445 int ret;9446 int ret;
9447 int ret2;
9446 bool root_log_pinned = false;9448 bool root_log_pinned = false;
9447 bool dest_log_pinned = false;9449 bool dest_log_pinned = false;
9448 9450
@@ -9639,7 +9641,8 @@ out_fail: · 190 unmodified lines
9639 dest_log_pinned = false;9641 dest_log_pinned = false;
9640 }9642 }
9641 }9643 }
9642 ret = btrfs_end_transaction(trans);9644 ret2 = btrfs_end_transaction(trans);
9645 ret = ret ? ret : ret2;
9643out_notrans:9646out_notrans:
9644 if (new_ino == BTRFS_FIRST_FREE_OBJECTID)9647 if (new_ino == BTRFS_FIRST_FREE_OBJECTID)
9645 up_read(&fs_info->subvol_sem);9648 up_read(&fs_info->subvol_sem);
fs/btrfs/ioctl.c+5−5
@@ -3577,7 +3577,7 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen, · 3576 unmodified lines
3577 ret = btrfs_extent_same_range(src, loff, BTRFS_MAX_DEDUPE_LEN,3577 ret = btrfs_extent_same_range(src, loff, BTRFS_MAX_DEDUPE_LEN,
3578 dst, dst_loff, &cmp);3578 dst, dst_loff, &cmp);
3579 if (ret)3579 if (ret)
3580 goto out_unlock;3580 goto out_free;
3581 3581
3582 loff += BTRFS_MAX_DEDUPE_LEN;3582 loff += BTRFS_MAX_DEDUPE_LEN;
3583 dst_loff += BTRFS_MAX_DEDUPE_LEN;3583 dst_loff += BTRFS_MAX_DEDUPE_LEN;
@@ -3587,16 +3587,16 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen, · 3 unmodified lines
3587 ret = btrfs_extent_same_range(src, loff, tail_len, dst,3587 ret = btrfs_extent_same_range(src, loff, tail_len, dst,
3588 dst_loff, &cmp);3588 dst_loff, &cmp);
3589 3589
3590out_free:
3591 kvfree(cmp.src_pages);
3592 kvfree(cmp.dst_pages);
3593
3590out_unlock:3594out_unlock:
3591 if (same_inode)3595 if (same_inode)
3592 inode_unlock(src);3596 inode_unlock(src);
3593 else3597 else
3594 btrfs_double_inode_unlock(src, dst);3598 btrfs_double_inode_unlock(src, dst);
3595 3599
3596out_free:
3597 kvfree(cmp.src_pages);
3598 kvfree(cmp.dst_pages);
3599
3600 return ret;3600 return ret;
3601}3601}
3602 3602
fs/btrfs/qgroup.c+13−4
@@ -2680,8 +2680,10 @@ out: · 2679 unmodified lines
2680 free_extent_buffer(scratch_leaf);2680 free_extent_buffer(scratch_leaf);
2681 }2681 }
2682 2682
2683 if (done && !ret)2683 if (done && !ret) {
2684 ret = 1;2684 ret = 1;
2685 fs_info->qgroup_rescan_progress.objectid = (u64)-1;
2686 }
2685 return ret;2687 return ret;
2686}2688}
2687 2689
@@ -2784,13 +2786,20 @@ qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid, · 96 unmodified lines
2784 2786
2785 if (!init_flags) {2787 if (!init_flags) {
2786 /* we're resuming qgroup rescan at mount time */2788 /* we're resuming qgroup rescan at mount time */
2787 if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN))2789 if (!(fs_info->qgroup_flags &
2790 BTRFS_QGROUP_STATUS_FLAG_RESCAN)) {
2788 btrfs_warn(fs_info,2791 btrfs_warn(fs_info,
2789 "qgroup rescan init failed, qgroup is not enabled");2792 "qgroup rescan init failed, qgroup is not enabled");
2790 else if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON))2793 ret = -EINVAL;
2794 } else if (!(fs_info->qgroup_flags &
2795 BTRFS_QGROUP_STATUS_FLAG_ON)) {
2791 btrfs_warn(fs_info,2796 btrfs_warn(fs_info,
2792 "qgroup rescan init failed, qgroup rescan is not queued");2797 "qgroup rescan init failed, qgroup rescan is not queued");
2793 return -EINVAL;2798 ret = -EINVAL;
2799 }
2800
2801 if (ret)
2802 return ret;
2794 }2803 }
2795 2804
2796 mutex_lock(&fs_info->qgroup_rescan_lock);2805 mutex_lock(&fs_info->qgroup_rescan_lock);
fs/ceph/inode.c+1−0
@@ -1135,6 +1135,7 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in) · 1134 unmodified lines
1135 if (IS_ERR(realdn)) {1135 if (IS_ERR(realdn)) {
1136 pr_err("splice_dentry error %ld %p inode %p ino %llx.%llx\n",1136 pr_err("splice_dentry error %ld %p inode %p ino %llx.%llx\n",
1137 PTR_ERR(realdn), dn, in, ceph_vinop(in));1137 PTR_ERR(realdn), dn, in, ceph_vinop(in));
1138 dput(dn);
1138 dn = realdn; /* note realdn contains the error */1139 dn = realdn; /* note realdn contains the error */
1139 goto out;1140 goto out;
1140 } else if (realdn) {1141 } else if (realdn) {
fs/eventfd.c+6−13
@@ -101,20 +101,14 @@ static int eventfd_release(struct inode *inode, struct file *file) · 100 unmodified lines
101 return 0;101 return 0;
102}102}
103 103
104static struct wait_queue_head *104static __poll_t eventfd_poll(struct file *file, poll_table *wait)
105eventfd_get_poll_head(struct file *file, __poll_t events)
106{
107 struct eventfd_ctx *ctx = file->private_data;
108
109 return &ctx->wqh;
110}
111
112static __poll_t eventfd_poll_mask(struct file *file, __poll_t eventmask)
113{105{
114 struct eventfd_ctx *ctx = file->private_data;106 struct eventfd_ctx *ctx = file->private_data;
115 __poll_t events = 0;107 __poll_t events = 0;
116 u64 count;108 u64 count;
117 109
110 poll_wait(file, &ctx->wqh, wait);
111
118 /*112 /*
119 * All writes to ctx->count occur within ctx->wqh.lock. This read113 * All writes to ctx->count occur within ctx->wqh.lock. This read
120 * can be done outside ctx->wqh.lock because we know that poll_wait114 * can be done outside ctx->wqh.lock because we know that poll_wait
@@ -156,11 +150,11 @@ static __poll_t eventfd_poll_mask(struct file *file, __poll_t eventmask) · 35 unmodified lines
156 count = READ_ONCE(ctx->count);150 count = READ_ONCE(ctx->count);
157 151
158 if (count > 0)152 if (count > 0)
159 events |= (EPOLLIN & eventmask);153 events |= EPOLLIN;
160 if (count == ULLONG_MAX)154 if (count == ULLONG_MAX)
161 events |= EPOLLERR;155 events |= EPOLLERR;
162 if (ULLONG_MAX - 1 > count)156 if (ULLONG_MAX - 1 > count)
163 events |= (EPOLLOUT & eventmask);157 events |= EPOLLOUT;
164 158
165 return events;159 return events;
166}160}
@@ -311,8 +305,7 @@ static const struct file_operations eventfd_fops = { · 144 unmodified lines
311 .show_fdinfo = eventfd_show_fdinfo,305 .show_fdinfo = eventfd_show_fdinfo,
312#endif306#endif
313 .release = eventfd_release,307 .release = eventfd_release,
314 .get_poll_head = eventfd_get_poll_head,308 .poll = eventfd_poll,
315 .poll_mask = eventfd_poll_mask,
316 .read = eventfd_read,309 .read = eventfd_read,
317 .write = eventfd_write,310 .write = eventfd_write,
318 .llseek = noop_llseek,311 .llseek = noop_llseek,
fs/eventpoll.c+5−10
@@ -922,18 +922,14 @@ static __poll_t ep_read_events_proc(struct eventpoll *ep, struct list_head *head · 921 unmodified lines
922 return 0;922 return 0;
923}923}
924 924
925static struct wait_queue_head *ep_eventpoll_get_poll_head(struct file *file,925static __poll_t ep_eventpoll_poll(struct file *file, poll_table *wait)
926 __poll_t eventmask)
927{
928 struct eventpoll *ep = file->private_data;
929 return &ep->poll_wait;
930}
931
932static __poll_t ep_eventpoll_poll_mask(struct file *file, __poll_t eventmask)
933{926{
934 struct eventpoll *ep = file->private_data;927 struct eventpoll *ep = file->private_data;
935 int depth = 0;928 int depth = 0;
936 929
930 /* Insert inside our poll wait queue */
931 poll_wait(file, &ep->poll_wait, wait);
932
937 /*933 /*
938 * Proceed to find out if wanted events are really available inside934 * Proceed to find out if wanted events are really available inside
939 * the ready list.935 * the ready list.
@@ -972,8 +968,7 @@ static const struct file_operations eventpoll_fops = { · 32 unmodified lines
972 .show_fdinfo = ep_show_fdinfo,968 .show_fdinfo = ep_show_fdinfo,
973#endif969#endif
974 .release = ep_eventpoll_release,970 .release = ep_eventpoll_release,
975 .get_poll_head = ep_eventpoll_get_poll_head,971 .poll = ep_eventpoll_poll,
976 .poll_mask = ep_eventpoll_poll_mask,
977 .llseek = noop_llseek,972 .llseek = noop_llseek,
978};973};
979 974
fs/pipe.c+9−13
@@ -509,22 +509,19 @@ static long pipe_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) · 508 unmodified lines
509 }509 }
510}510}
511 511
512static struct wait_queue_head *
513pipe_get_poll_head(struct file *filp, __poll_t events)
514{
515 struct pipe_inode_info *pipe = filp->private_data;
516
517 return &pipe->wait;
518}
519
520/* No kernel lock held - fine */512/* No kernel lock held - fine */
521static __poll_t pipe_poll_mask(struct file *filp, __poll_t events)513static __poll_t
514pipe_poll(struct file *filp, poll_table *wait)
522{515{
516 __poll_t mask;
523 struct pipe_inode_info *pipe = filp->private_data;517 struct pipe_inode_info *pipe = filp->private_data;
524 int nrbufs = pipe->nrbufs;518 int nrbufs;
525 __poll_t mask = 0;519
520 poll_wait(filp, &pipe->wait, wait);
526 521
527 /* Reading only -- no need for acquiring the semaphore. */522 /* Reading only -- no need for acquiring the semaphore. */
523 nrbufs = pipe->nrbufs;
524 mask = 0;
528 if (filp->f_mode & FMODE_READ) {525 if (filp->f_mode & FMODE_READ) {
529 mask = (nrbufs > 0) ? EPOLLIN | EPOLLRDNORM : 0;526 mask = (nrbufs > 0) ? EPOLLIN | EPOLLRDNORM : 0;
530 if (!pipe->writers && filp->f_version != pipe->w_counter)527 if (!pipe->writers && filp->f_version != pipe->w_counter)
@@ -1023,8 +1020,7 @@ const struct file_operations pipefifo_fops = { · 492 unmodified lines
1023 .llseek = no_llseek,1020 .llseek = no_llseek,
1024 .read_iter = pipe_read,1021 .read_iter = pipe_read,
1025 .write_iter = pipe_write,1022 .write_iter = pipe_write,
1026 .get_poll_head = pipe_get_poll_head,1023 .poll = pipe_poll,
1027 .poll_mask = pipe_poll_mask,
1028 .unlocked_ioctl = pipe_ioctl,1024 .unlocked_ioctl = pipe_ioctl,
1029 .release = pipe_release,1025 .release = pipe_release,
1030 .fasync = pipe_fasync,1026 .fasync = pipe_fasync,
fs/proc/generic.c+10−1
@@ -564,11 +564,20 @@ static int proc_seq_open(struct inode *inode, struct file *file) · 563 unmodified lines
564 return seq_open(file, de->seq_ops);564 return seq_open(file, de->seq_ops);
565}565}
566 566
567static int proc_seq_release(struct inode *inode, struct file *file)
568{
569 struct proc_dir_entry *de = PDE(inode);
570
571 if (de->state_size)
572 return seq_release_private(inode, file);
573 return seq_release(inode, file);
574}
575
567static const struct file_operations proc_seq_fops = {576static const struct file_operations proc_seq_fops = {
568 .open = proc_seq_open,577 .open = proc_seq_open,
569 .read = seq_read,578 .read = seq_read,
570 .llseek = seq_lseek,579 .llseek = seq_lseek,
571 .release = seq_release,580 .release = proc_seq_release,
572};581};
573 582
574struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode,583struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode,
fs/select.c+0−23
@@ -34,29 +34,6 @@ · 33 unmodified lines
34 34
35#include <linux/uaccess.h>35#include <linux/uaccess.h>
36 36
37__poll_t vfs_poll(struct file *file, struct poll_table_struct *pt)
38{
39 if (file->f_op->poll) {
40 return file->f_op->poll(file, pt);
41 } else if (file_has_poll_mask(file)) {
42 unsigned int events = poll_requested_events(pt);
43 struct wait_queue_head *head;
44
45 if (pt && pt->_qproc) {
46 head = file->f_op->get_poll_head(file, events);
47 if (!head)
48 return DEFAULT_POLLMASK;
49 if (IS_ERR(head))
50 return EPOLLERR;
51 pt->_qproc(file, head, pt);
52 }
53
54 return file->f_op->poll_mask(file, events);
55 } else {
56 return DEFAULT_POLLMASK;
57 }
58}
59EXPORT_SYMBOL_GPL(vfs_poll);
60 37
61/*38/*
62 * Estimate expected accuracy in ns from a timeval.39 * Estimate expected accuracy in ns from a timeval.
fs/timerfd.c+11−11
@@ -226,20 +226,21 @@ static int timerfd_release(struct inode *inode, struct file *file) · 225 unmodified lines
226 kfree_rcu(ctx, rcu);226 kfree_rcu(ctx, rcu);
227 return 0;227 return 0;
228}228}
229 229
230static struct wait_queue_head *timerfd_get_poll_head(struct file *file,230static __poll_t timerfd_poll(struct file *file, poll_table *wait)
231 __poll_t eventmask)
232{231{
233 struct timerfd_ctx *ctx = file->private_data;232 struct timerfd_ctx *ctx = file->private_data;
233 __poll_t events = 0;
234 unsigned long flags;
234 235
235 return &ctx->wqh;236 poll_wait(file, &ctx->wqh, wait);
236}
237 237
238static __poll_t timerfd_poll_mask(struct file *file, __poll_t eventmask)238 spin_lock_irqsave(&ctx->wqh.lock, flags);
239{239 if (ctx->ticks)
240 struct timerfd_ctx *ctx = file->private_data;240 events |= EPOLLIN;
241 spin_unlock_irqrestore(&ctx->wqh.lock, flags);
241 242
242 return ctx->ticks ? EPOLLIN : 0;243 return events;
243}244}
244 245
245static ssize_t timerfd_read(struct file *file, char __user *buf, size_t count,246static ssize_t timerfd_read(struct file *file, char __user *buf, size_t count,
@@ -363,8 +364,7 @@ static long timerfd_ioctl(struct file *file, unsigned int cmd, unsigned long arg · 117 unmodified lines
363 364
364static const struct file_operations timerfd_fops = {365static const struct file_operations timerfd_fops = {
365 .release = timerfd_release,366 .release = timerfd_release,
366 .get_poll_head = timerfd_get_poll_head,367 .poll = timerfd_poll,
367 .poll_mask = timerfd_poll_mask,
368 .read = timerfd_read,368 .read = timerfd_read,
369 .llseek = noop_llseek,369 .llseek = noop_llseek,
370 .show_fdinfo = timerfd_show,370 .show_fdinfo = timerfd_show,
fs/xfs/libxfs/xfs_ag_resv.c+27−4
@@ -157,6 +157,7 @@ __xfs_ag_resv_free( · 156 unmodified lines
157 error = xfs_mod_fdblocks(pag->pag_mount, oldresv, true);157 error = xfs_mod_fdblocks(pag->pag_mount, oldresv, true);
158 resv->ar_reserved = 0;158 resv->ar_reserved = 0;
159 resv->ar_asked = 0;159 resv->ar_asked = 0;
160 resv->ar_orig_reserved = 0;
160 161
161 if (error)162 if (error)
162 trace_xfs_ag_resv_free_error(pag->pag_mount, pag->pag_agno,163 trace_xfs_ag_resv_free_error(pag->pag_mount, pag->pag_agno,
@@ -189,13 +190,34 @@ __xfs_ag_resv_init( · 26 unmodified lines
189 struct xfs_mount *mp = pag->pag_mount;190 struct xfs_mount *mp = pag->pag_mount;
190 struct xfs_ag_resv *resv;191 struct xfs_ag_resv *resv;
191 int error;192 int error;
192 xfs_extlen_t reserved;193 xfs_extlen_t hidden_space;
193 194
194 if (used > ask)195 if (used > ask)
195 ask = used;196 ask = used;
196 reserved = ask - used;
197 197
198 error = xfs_mod_fdblocks(mp, -(int64_t)reserved, true);198 switch (type) {
199 case XFS_AG_RESV_RMAPBT:
200 /*
201 * Space taken by the rmapbt is not subtracted from fdblocks
202 * because the rmapbt lives in the free space. Here we must
203 * subtract the entire reservation from fdblocks so that we
204 * always have blocks available for rmapbt expansion.
205 */
206 hidden_space = ask;
207 break;
208 case XFS_AG_RESV_METADATA:
209 /*
210 * Space taken by all other metadata btrees are accounted
211 * on-disk as used space. We therefore only hide the space
212 * that is reserved but not used by the trees.
213 */
214 hidden_space = ask - used;
215 break;
216 default:
217 ASSERT(0);
218 return -EINVAL;
219 }
220 error = xfs_mod_fdblocks(mp, -(int64_t)hidden_space, true);
199 if (error) {221 if (error) {
200 trace_xfs_ag_resv_init_error(pag->pag_mount, pag->pag_agno,222 trace_xfs_ag_resv_init_error(pag->pag_mount, pag->pag_agno,
201 error, _RET_IP_);223 error, _RET_IP_);
@@ -216,7 +238,8 @@ __xfs_ag_resv_init( · 14 unmodified lines
216 238
217 resv = xfs_perag_resv(pag, type);239 resv = xfs_perag_resv(pag, type);
218 resv->ar_asked = ask;240 resv->ar_asked = ask;
219 resv->ar_reserved = resv->ar_orig_reserved = reserved;241 resv->ar_orig_reserved = hidden_space;
242 resv->ar_reserved = ask - used;
220 243
221 trace_xfs_ag_resv_init(pag, type, ask);244 trace_xfs_ag_resv_init(pag, type, ask);
222 return 0;245 return 0;
fs/xfs/libxfs/xfs_bmap.c+26−0
@@ -5780,6 +5780,32 @@ del_cursor: · 5779 unmodified lines
5780 return error;5780 return error;
5781}5781}
5782 5782
5783/* Make sure we won't be right-shifting an extent past the maximum bound. */
5784int
5785xfs_bmap_can_insert_extents(
5786 struct xfs_inode *ip,
5787 xfs_fileoff_t off,
5788 xfs_fileoff_t shift)
5789{
5790 struct xfs_bmbt_irec got;
5791 int is_empty;
5792 int error = 0;
5793
5794 ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
5795
5796 if (XFS_FORCED_SHUTDOWN(ip->i_mount))
5797 return -EIO;
5798
5799 xfs_ilock(ip, XFS_ILOCK_EXCL);
5800 error = xfs_bmap_last_extent(NULL, ip, XFS_DATA_FORK, &got, &is_empty);
5801 if (!error && !is_empty && got.br_startoff >= off &&
5802 ((got.br_startoff + shift) & BMBT_STARTOFF_MASK) < got.br_startoff)
5803 error = -EINVAL;
5804 xfs_iunlock(ip, XFS_ILOCK_EXCL);
5805
5806 return error;
5807}
5808
5783int5809int
5784xfs_bmap_insert_extents(5810xfs_bmap_insert_extents(
5785 struct xfs_trans *tp,5811 struct xfs_trans *tp,
fs/xfs/libxfs/xfs_bmap.h+2−0
@@ -227,6 +227,8 @@ int xfs_bmap_collapse_extents(struct xfs_trans *tp, struct xfs_inode *ip, · 226 unmodified lines
227 xfs_fileoff_t *next_fsb, xfs_fileoff_t offset_shift_fsb,227 xfs_fileoff_t *next_fsb, xfs_fileoff_t offset_shift_fsb,
228 bool *done, xfs_fsblock_t *firstblock,228 bool *done, xfs_fsblock_t *firstblock,
229 struct xfs_defer_ops *dfops);229 struct xfs_defer_ops *dfops);
230int xfs_bmap_can_insert_extents(struct xfs_inode *ip, xfs_fileoff_t off,
231 xfs_fileoff_t shift);
230int xfs_bmap_insert_extents(struct xfs_trans *tp, struct xfs_inode *ip,232int xfs_bmap_insert_extents(struct xfs_trans *tp, struct xfs_inode *ip,
231 xfs_fileoff_t *next_fsb, xfs_fileoff_t offset_shift_fsb,233 xfs_fileoff_t *next_fsb, xfs_fileoff_t offset_shift_fsb,
232 bool *done, xfs_fileoff_t stop_fsb, xfs_fsblock_t *firstblock,234 bool *done, xfs_fileoff_t stop_fsb, xfs_fsblock_t *firstblock,
fs/xfs/libxfs/xfs_format.h+5−0
@@ -962,6 +962,9 @@ typedef enum xfs_dinode_fmt { · 961 unmodified lines
962 XFS_DFORK_DSIZE(dip, mp) : \962 XFS_DFORK_DSIZE(dip, mp) : \
963 XFS_DFORK_ASIZE(dip, mp))963 XFS_DFORK_ASIZE(dip, mp))
964 964
965#define XFS_DFORK_MAXEXT(dip, mp, w) \
966 (XFS_DFORK_SIZE(dip, mp, w) / sizeof(struct xfs_bmbt_rec))
967
965/*968/*
966 * Return pointers to the data or attribute forks.969 * Return pointers to the data or attribute forks.
967 */970 */
@@ -1526,6 +1529,8 @@ typedef struct xfs_bmdr_block { · 558 unmodified lines
1526#define BMBT_STARTBLOCK_BITLEN 521529#define BMBT_STARTBLOCK_BITLEN 52
1527#define BMBT_BLOCKCOUNT_BITLEN 211530#define BMBT_BLOCKCOUNT_BITLEN 21
1528 1531
1532#define BMBT_STARTOFF_MASK ((1ULL << BMBT_STARTOFF_BITLEN) - 1)
1533
1529typedef struct xfs_bmbt_rec {1534typedef struct xfs_bmbt_rec {
1530 __be64 l0, l1;1535 __be64 l0, l1;
1531} xfs_bmbt_rec_t;1536} xfs_bmbt_rec_t;
fs/xfs/libxfs/xfs_inode_buf.c+47−29
@@ -374,6 +374,47 @@ xfs_log_dinode_to_disk( · 373 unmodified lines
374 }374 }
375}375}
376 376
377static xfs_failaddr_t
378xfs_dinode_verify_fork(
379 struct xfs_dinode *dip,
380 struct xfs_mount *mp,
381 int whichfork)
382{
383 uint32_t di_nextents = XFS_DFORK_NEXTENTS(dip, whichfork);
384
385 switch (XFS_DFORK_FORMAT(dip, whichfork)) {
386 case XFS_DINODE_FMT_LOCAL:
387 /*
388 * no local regular files yet
389 */
390 if (whichfork == XFS_DATA_FORK) {
391 if (S_ISREG(be16_to_cpu(dip->di_mode)))
392 return __this_address;
393 if (be64_to_cpu(dip->di_size) >
394 XFS_DFORK_SIZE(dip, mp, whichfork))
395 return __this_address;
396 }
397 if (di_nextents)
398 return __this_address;
399 break;
400 case XFS_DINODE_FMT_EXTENTS:
401 if (di_nextents > XFS_DFORK_MAXEXT(dip, mp, whichfork))
402 return __this_address;
403 break;
404 case XFS_DINODE_FMT_BTREE:
405 if (whichfork == XFS_ATTR_FORK) {
406 if (di_nextents > MAXAEXTNUM)
407 return __this_address;
408 } else if (di_nextents > MAXEXTNUM) {
409 return __this_address;
410 }
411 break;
412 default:
413 return __this_address;
414 }
415 return NULL;
416}
417
377xfs_failaddr_t418xfs_failaddr_t
378xfs_dinode_verify(419xfs_dinode_verify(
379 struct xfs_mount *mp,420 struct xfs_mount *mp,
@@ -441,24 +482,9 @@ xfs_dinode_verify( · 61 unmodified lines
441 case S_IFREG:482 case S_IFREG:
442 case S_IFLNK:483 case S_IFLNK:
443 case S_IFDIR:484 case S_IFDIR:
444 switch (dip->di_format) {485 fa = xfs_dinode_verify_fork(dip, mp, XFS_DATA_FORK);
445 case XFS_DINODE_FMT_LOCAL:486 if (fa)
446 /*487 return fa;
447 * no local regular files yet
448 */
449 if (S_ISREG(mode))
450 return __this_address;
451 if (di_size > XFS_DFORK_DSIZE(dip, mp))
452 return __this_address;
453 if (dip->di_nextents)
454 return __this_address;
455 /* fall through */
456 case XFS_DINODE_FMT_EXTENTS:
457 case XFS_DINODE_FMT_BTREE:
458 break;
459 default:
460 return __this_address;
461 }
462 break;488 break;
463 case 0:489 case 0:
464 /* Uninitialized inode ok. */490 /* Uninitialized inode ok. */
@@ -468,17 +494,9 @@ xfs_dinode_verify( · 3 unmodified lines
468 }494 }
469 495
470 if (XFS_DFORK_Q(dip)) {496 if (XFS_DFORK_Q(dip)) {
471 switch (dip->di_aformat) {497 fa = xfs_dinode_verify_fork(dip, mp, XFS_ATTR_FORK);
472 case XFS_DINODE_FMT_LOCAL:498 if (fa)
473 if (dip->di_anextents)499 return fa;
474 return __this_address;
475 /* fall through */
476 case XFS_DINODE_FMT_EXTENTS:
477 case XFS_DINODE_FMT_BTREE:
478 break;
479 default:
480 return __this_address;
481 }
482 } else {500 } else {
483 /*501 /*
484 * If there is no fork offset, this may be a freshly-made inode502 * If there is no fork offset, this may be a freshly-made inode
fs/xfs/libxfs/xfs_rtbitmap.c+2−2
@@ -1029,8 +1029,8 @@ xfs_rtalloc_query_range( · 1028 unmodified lines
1029 if (low_rec->ar_startext >= mp->m_sb.sb_rextents ||1029 if (low_rec->ar_startext >= mp->m_sb.sb_rextents ||
1030 low_rec->ar_startext == high_rec->ar_startext)1030 low_rec->ar_startext == high_rec->ar_startext)
1031 return 0;1031 return 0;
1032 if (high_rec->ar_startext >= mp->m_sb.sb_rextents)1032 if (high_rec->ar_startext > mp->m_sb.sb_rextents)
1033 high_rec->ar_startext = mp->m_sb.sb_rextents - 1;1033 high_rec->ar_startext = mp->m_sb.sb_rextents;
1034 1034
1035 /* Iterate the bitmap, looking for discrepancies. */1035 /* Iterate the bitmap, looking for discrepancies. */
1036 rtstart = low_rec->ar_startext;1036 rtstart = low_rec->ar_startext;
fs/xfs/xfs_bmap_util.c+52−54
@@ -685,12 +685,10 @@ out_unlock_iolock: · 684 unmodified lines
685}685}
686 686
687/*687/*
688 * dead simple method of punching delalyed allocation blocks from a range in688 * Dead simple method of punching delalyed allocation blocks from a range in
689 * the inode. Walks a block at a time so will be slow, but is only executed in689 * the inode. This will always punch out both the start and end blocks, even
690 * rare error cases so the overhead is not critical. This will always punch out690 * if the ranges only partially overlap them, so it is up to the caller to
691 * both the start and end blocks, even if the ranges only partially overlap691 * ensure that partial blocks are not passed in.
692 * them, so it is up to the caller to ensure that partial blocks are not
693 * passed in.
694 */692 */
695int693int
696xfs_bmap_punch_delalloc_range(694xfs_bmap_punch_delalloc_range(
@@ -698,63 +696,44 @@ xfs_bmap_punch_delalloc_range( · 1 unmodified line
698 xfs_fileoff_t start_fsb,696 xfs_fileoff_t start_fsb,
699 xfs_fileoff_t length)697 xfs_fileoff_t length)
700{698{
701 xfs_fileoff_t remaining = length;699 struct xfs_ifork *ifp = &ip->i_df;
700 xfs_fileoff_t end_fsb = start_fsb + length;
701 struct xfs_bmbt_irec got, del;
702 struct xfs_iext_cursor icur;
702 int error = 0;703 int error = 0;
703 704
704 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));705 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
705 706
706 do {707 if (!(ifp->if_flags & XFS_IFEXTENTS)) {
707 int done;708 error = xfs_iread_extents(NULL, ip, XFS_DATA_FORK);
708 xfs_bmbt_irec_t imap;709 if (error)
709 int nimaps = 1;710 return error;
710 xfs_fsblock_t firstblock;711 }
711 struct xfs_defer_ops dfops;
712 712
713 /*713 if (!xfs_iext_lookup_extent_before(ip, ifp, &end_fsb, &icur, &got))
714 * Map the range first and check that it is a delalloc extent714 return 0;
715 * before trying to unmap the range. Otherwise we will be
716 * trying to remove a real extent (which requires a
717 * transaction) or a hole, which is probably a bad idea...
718 */
719 error = xfs_bmapi_read(ip, start_fsb, 1, &imap, &nimaps,
720 XFS_BMAPI_ENTIRE);
721 715
722 if (error) {716 while (got.br_startoff + got.br_blockcount > start_fsb) {
723 /* something screwed, just bail */717 del = got;
724 if (!XFS_FORCED_SHUTDOWN(ip->i_mount)) {718 xfs_trim_extent(&del, start_fsb, length);
725 xfs_alert(ip->i_mount,
726 "Failed delalloc mapping lookup ino %lld fsb %lld.",
727 ip->i_ino, start_fsb);
728 }
729 break;
730 }
731 if (!nimaps) {
732 /* nothing there */
733 goto next_block;
734 }
735 if (imap.br_startblock != DELAYSTARTBLOCK) {
736 /* been converted, ignore */
737 goto next_block;
738 }
739 WARN_ON(imap.br_blockcount == 0);
740 719
741 /*720 /*
742 * Note: while we initialise the firstblock/dfops pair, they721 * A delete can push the cursor forward. Step back to the
743 * should never be used because blocks should never be722 * previous extent on non-delalloc or extents outside the
744 * allocated or freed for a delalloc extent and hence we need723 * target range.
745 * don't cancel or finish them after the xfs_bunmapi() call.
746 */724 */
747 xfs_defer_init(&dfops, &firstblock);725 if (!del.br_blockcount ||
748 error = xfs_bunmapi(NULL, ip, start_fsb, 1, 0, 1, &firstblock,726 !isnullstartblock(del.br_startblock)) {
749 &dfops, &done);727 if (!xfs_iext_prev_extent(ifp, &icur, &got))
750 if (error)728 break;
751 break;729 continue;
730 }
752 731
753 ASSERT(!xfs_defer_has_unfinished_work(&dfops));732 error = xfs_bmap_del_extent_delay(ip, XFS_DATA_FORK, &icur,
754next_block:733 &got, &del);
755 start_fsb++;734 if (error || !xfs_iext_get_extent(ifp, &icur, &got))
756 remaining--;735 break;
757 } while(remaining > 0);736 }
758 737
759 return error;738 return error;
760}739}
@@ -1208,7 +1187,22 @@ xfs_free_file_space( · 447 unmodified lines
1208 return 0;1187 return 0;
1209 if (offset + len > XFS_ISIZE(ip))1188 if (offset + len > XFS_ISIZE(ip))
1210 len = XFS_ISIZE(ip) - offset;1189 len = XFS_ISIZE(ip) - offset;
1211 return iomap_zero_range(VFS_I(ip), offset, len, NULL, &xfs_iomap_ops);1190 error = iomap_zero_range(VFS_I(ip), offset, len, NULL, &xfs_iomap_ops);
1191 if (error)
1192 return error;
1193
1194 /*
1195 * If we zeroed right up to EOF and EOF straddles a page boundary we
1196 * must make sure that the post-EOF area is also zeroed because the
1197 * page could be mmap'd and iomap_zero_range doesn't do that for us.
1198 * Writeback of the eof page will do this, albeit clumsily.
1199 */
1200 if (offset + len >= XFS_ISIZE(ip) && ((offset + len) & PAGE_MASK)) {
1201 error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
1202 (offset + len) & ~PAGE_MASK, LLONG_MAX);
1203 }
1204
1205 return error;
1212}1206}
1213 1207
1214/*1208/*
@@ -1404,6 +1398,10 @@ xfs_insert_file_space( · 189 unmodified lines
1404 1398
1405 trace_xfs_insert_file_space(ip);1399 trace_xfs_insert_file_space(ip);
1406 1400
1401 error = xfs_bmap_can_insert_extents(ip, stop_fsb, shift_fsb);
1402 if (error)
1403 return error;
1404
1407 error = xfs_prepare_shift(ip, offset);1405 error = xfs_prepare_shift(ip, offset);
1408 if (error)1406 if (error)
1409 return error;1407 return error;
fs/xfs/xfs_fsmap.c+2−2
@@ -513,8 +513,8 @@ xfs_getfsmap_rtdev_rtbitmap_query( · 512 unmodified lines
513 struct xfs_trans *tp,513 struct xfs_trans *tp,
514 struct xfs_getfsmap_info *info)514 struct xfs_getfsmap_info *info)
515{515{
516 struct xfs_rtalloc_rec alow;516 struct xfs_rtalloc_rec alow = { 0 };
517 struct xfs_rtalloc_rec ahigh;517 struct xfs_rtalloc_rec ahigh = { 0 };
518 int error;518 int error;
519 519
520 xfs_ilock(tp->t_mountp->m_rbmip, XFS_ILOCK_SHARED);520 xfs_ilock(tp->t_mountp->m_rbmip, XFS_ILOCK_SHARED);
fs/xfs/xfs_fsops.c+1−1
@@ -387,7 +387,7 @@ xfs_reserve_blocks( · 386 unmodified lines
387 do {387 do {
388 free = percpu_counter_sum(&mp->m_fdblocks) -388 free = percpu_counter_sum(&mp->m_fdblocks) -
389 mp->m_alloc_set_aside;389 mp->m_alloc_set_aside;
390 if (!free)390 if (free <= 0)
391 break;391 break;
392 392
393 delta = request - mp->m_resblks;393 delta = request - mp->m_resblks;
fs/xfs/xfs_inode.c+21−36
@@ -3236,7 +3236,6 @@ xfs_iflush_cluster( · 3235 unmodified lines
3236 struct xfs_inode *cip;3236 struct xfs_inode *cip;
3237 int nr_found;3237 int nr_found;
3238 int clcount = 0;3238 int clcount = 0;
3239 int bufwasdelwri;
3240 int i;3239 int i;
3241 3240
3242 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino));3241 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino));
@@ -3360,37 +3359,22 @@ cluster_corrupt_out: · 117 unmodified lines
3360 * inode buffer and shut down the filesystem.3359 * inode buffer and shut down the filesystem.
3361 */3360 */
3362 rcu_read_unlock();3361 rcu_read_unlock();
3363 /*
3364 * Clean up the buffer. If it was delwri, just release it --
3365 * brelse can handle it with no problems. If not, shut down the
3366 * filesystem before releasing the buffer.
3367 */
3368 bufwasdelwri = (bp->b_flags & _XBF_DELWRI_Q);
3369 if (bufwasdelwri)
3370 xfs_buf_relse(bp);
3371
3372 xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);3362 xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
3373 3363
3374 if (!bufwasdelwri) {
3375 /*
3376 * Just like incore_relse: if we have b_iodone functions,
3377 * mark the buffer as an error and call them. Otherwise
3378 * mark it as stale and brelse.
3379 */
3380 if (bp->b_iodone) {
3381 bp->b_flags &= ~XBF_DONE;
3382 xfs_buf_stale(bp);
3383 xfs_buf_ioerror(bp, -EIO);
3384 xfs_buf_ioend(bp);
3385 } else {
3386 xfs_buf_stale(bp);
3387 xfs_buf_relse(bp);
3388 }
3389 }
3390
3391 /*3364 /*
3392 * Unlocks the flush lock3365 * We'll always have an inode attached to the buffer for completion
3366 * process by the time we are called from xfs_iflush(). Hence we have
3367 * always need to do IO completion processing to abort the inodes
3368 * attached to the buffer. handle them just like the shutdown case in
3369 * xfs_buf_submit().
3393 */3370 */
3371 ASSERT(bp->b_iodone);
3372 bp->b_flags &= ~XBF_DONE;
3373 xfs_buf_stale(bp);
3374 xfs_buf_ioerror(bp, -EIO);
3375 xfs_buf_ioend(bp);
3376
3377 /* abort the corrupt inode, as it was not attached to the buffer */
3394 xfs_iflush_abort(cip, false);3378 xfs_iflush_abort(cip, false);
3395 kmem_free(cilist);3379 kmem_free(cilist);
3396 xfs_perag_put(pag);3380 xfs_perag_put(pag);
@@ -3486,12 +3470,17 @@ xfs_iflush( · 89 unmodified lines
3486 xfs_log_force(mp, 0);3470 xfs_log_force(mp, 0);
3487 3471
3488 /*3472 /*
3489 * inode clustering:3473 * inode clustering: try to gather other inodes into this write
3490 * see if other inodes can be gathered into this write3474 *
3475 * Note: Any error during clustering will result in the filesystem
3476 * being shut down and completion callbacks run on the cluster buffer.
3477 * As we have already flushed and attached this inode to the buffer,
3478 * it has already been aborted and released by xfs_iflush_cluster() and
3479 * so we have no further error handling to do here.
3491 */3480 */
3492 error = xfs_iflush_cluster(ip, bp);3481 error = xfs_iflush_cluster(ip, bp);
3493 if (error)3482 if (error)
3494 goto cluster_corrupt_out;3483 return error;
3495 3484
3496 *bpp = bp;3485 *bpp = bp;
3497 return 0;3486 return 0;
@@ -3500,12 +3489,8 @@ corrupt_out: · 2 unmodified lines
3500 if (bp)3489 if (bp)
3501 xfs_buf_relse(bp);3490 xfs_buf_relse(bp);
3502 xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);3491 xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
3503cluster_corrupt_out:
3504 error = -EFSCORRUPTED;
3505abort_out:3492abort_out:
3506 /*3493 /* abort the corrupt inode, as it was not attached to the buffer */
3507 * Unlocks the flush lock
3508 */
3509 xfs_iflush_abort(ip, false);3494 xfs_iflush_abort(ip, false);
3510 return error;3495 return error;
3511}3496}
fs/xfs/xfs_iomap.c+14−1
@@ -963,12 +963,13 @@ xfs_ilock_for_iomap( · 962 unmodified lines
963 unsigned *lockmode)963 unsigned *lockmode)
964{964{
965 unsigned mode = XFS_ILOCK_SHARED;965 unsigned mode = XFS_ILOCK_SHARED;
966 bool is_write = flags & (IOMAP_WRITE | IOMAP_ZERO);
966 967
967 /*968 /*
968 * COW writes may allocate delalloc space or convert unwritten COW969 * COW writes may allocate delalloc space or convert unwritten COW
969 * extents, so we need to make sure to take the lock exclusively here.970 * extents, so we need to make sure to take the lock exclusively here.
970 */971 */
971 if (xfs_is_reflink_inode(ip) && (flags & (IOMAP_WRITE | IOMAP_ZERO))) {972 if (xfs_is_reflink_inode(ip) && is_write) {
972 /*973 /*
973 * FIXME: It could still overwrite on unshared extents and not974 * FIXME: It could still overwrite on unshared extents and not
974 * need allocation.975 * need allocation.
@@ -989,6 +990,7 @@ xfs_ilock_for_iomap( · 14 unmodified lines
989 mode = XFS_ILOCK_EXCL;990 mode = XFS_ILOCK_EXCL;
990 }991 }
991 992
993relock:
992 if (flags & IOMAP_NOWAIT) {994 if (flags & IOMAP_NOWAIT) {
993 if (!xfs_ilock_nowait(ip, mode))995 if (!xfs_ilock_nowait(ip, mode))
994 return -EAGAIN;996 return -EAGAIN;
@@ -996,6 +998,17 @@ xfs_ilock_for_iomap( · 1 unmodified line
996 xfs_ilock(ip, mode);998 xfs_ilock(ip, mode);
997 }999 }
998 1000
1001 /*
1002 * The reflink iflag could have changed since the earlier unlocked
1003 * check, so if we got ILOCK_SHARED for a write and but we're now a
1004 * reflink inode we have to switch to ILOCK_EXCL and relock.
1005 */
1006 if (mode == XFS_ILOCK_SHARED && is_write && xfs_is_reflink_inode(ip)) {
1007 xfs_iunlock(ip, mode);
1008 mode = XFS_ILOCK_EXCL;
1009 goto relock;
1010 }
1011
999 *lockmode = mode;1012 *lockmode = mode;
1000 return 0;1013 return 0;
1001}1014}
fs/xfs/xfs_trans.c+6−1
@@ -258,7 +258,12 @@ xfs_trans_alloc( · 257 unmodified lines
258 if (!(flags & XFS_TRANS_NO_WRITECOUNT))258 if (!(flags & XFS_TRANS_NO_WRITECOUNT))
259 sb_start_intwrite(mp->m_super);259 sb_start_intwrite(mp->m_super);
260 260
261 WARN_ON(mp->m_super->s_writers.frozen == SB_FREEZE_COMPLETE);261 /*
262 * Zero-reservation ("empty") transactions can't modify anything, so
263 * they're allowed to run while we're frozen.
264 */
265 WARN_ON(resp->tr_logres > 0 &&
266 mp->m_super->s_writers.frozen == SB_FREEZE_COMPLETE);
262 atomic_inc(&mp->m_active_trans);267 atomic_inc(&mp->m_active_trans);
263 268
264 tp = kmem_zone_zalloc(xfs_trans_zone,269 tp = kmem_zone_zalloc(xfs_trans_zone,
include/crypto/if_alg.h+2−1
@@ -245,7 +245,8 @@ ssize_t af_alg_sendpage(struct socket *sock, struct page *page, · 244 unmodified lines
245 int offset, size_t size, int flags);245 int offset, size_t size, int flags);
246void af_alg_free_resources(struct af_alg_async_req *areq);246void af_alg_free_resources(struct af_alg_async_req *areq);
247void af_alg_async_cb(struct crypto_async_request *_req, int err);247void af_alg_async_cb(struct crypto_async_request *_req, int err);
248__poll_t af_alg_poll_mask(struct socket *sock, __poll_t events);248__poll_t af_alg_poll(struct file *file, struct socket *sock,
249 poll_table *wait);
249struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk,250struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk,
250 unsigned int areqlen);251 unsigned int areqlen);
251int af_alg_get_rsgl(struct sock *sk, struct msghdr *msg, int flags,252int af_alg_get_rsgl(struct sock *sk, struct msghdr *msg, int flags,
include/linux/acpi.h+3−0
@@ -443,6 +443,9 @@ int acpi_check_resource_conflict(const struct resource *res); · 442 unmodified lines
443int acpi_check_region(resource_size_t start, resource_size_t n,443int acpi_check_region(resource_size_t start, resource_size_t n,
444 const char *name);444 const char *name);
445 445
446acpi_status acpi_release_memory(acpi_handle handle, struct resource *res,
447 u32 level);
448
446int acpi_resources_are_enforced(void);449int acpi_resources_are_enforced(void);
447 450
448#ifdef CONFIG_HIBERNATION451#ifdef CONFIG_HIBERNATION
include/linux/blkdev.h+2−2
@@ -1119,8 +1119,8 @@ static inline unsigned int blk_max_size_offset(struct request_queue *q, · 1118 unmodified lines
1119 if (!q->limits.chunk_sectors)1119 if (!q->limits.chunk_sectors)
1120 return q->limits.max_sectors;1120 return q->limits.max_sectors;
1121 1121
1122 return q->limits.chunk_sectors -1122 return min(q->limits.max_sectors, (unsigned int)(q->limits.chunk_sectors -
1123 (offset & (q->limits.chunk_sectors - 1));1123 (offset & (q->limits.chunk_sectors - 1))));
1124}1124}
1125 1125
1126static inline unsigned int blk_rq_get_max_sectors(struct request *rq,1126static inline unsigned int blk_rq_get_max_sectors(struct request *rq,
include/linux/bpf-cgroup.h+26−0
@@ -188,12 +188,38 @@ int __cgroup_bpf_check_dev_permission(short dev_type, u32 major, u32 minor, · 187 unmodified lines
188 \188 \
189 __ret; \189 __ret; \
190})190})
191int cgroup_bpf_prog_attach(const union bpf_attr *attr,
192 enum bpf_prog_type ptype, struct bpf_prog *prog);
193int cgroup_bpf_prog_detach(const union bpf_attr *attr,
194 enum bpf_prog_type ptype);
195int cgroup_bpf_prog_query(const union bpf_attr *attr,
196 union bpf_attr __user *uattr);
191#else197#else
192 198
199struct bpf_prog;
193struct cgroup_bpf {};200struct cgroup_bpf {};
194static inline void cgroup_bpf_put(struct cgroup *cgrp) {}201static inline void cgroup_bpf_put(struct cgroup *cgrp) {}
195static inline int cgroup_bpf_inherit(struct cgroup *cgrp) { return 0; }202static inline int cgroup_bpf_inherit(struct cgroup *cgrp) { return 0; }
196 203
204static inline int cgroup_bpf_prog_attach(const union bpf_attr *attr,
205 enum bpf_prog_type ptype,
206 struct bpf_prog *prog)
207{
208 return -EINVAL;
209}
210
211static inline int cgroup_bpf_prog_detach(const union bpf_attr *attr,
212 enum bpf_prog_type ptype)
213{
214 return -EINVAL;
215}
216
217static inline int cgroup_bpf_prog_query(const union bpf_attr *attr,
218 union bpf_attr __user *uattr)
219{
220 return -EINVAL;
221}
222
197#define cgroup_bpf_enabled (0)223#define cgroup_bpf_enabled (0)
198#define BPF_CGROUP_PRE_CONNECT_ENABLED(sk) (0)224#define BPF_CGROUP_PRE_CONNECT_ENABLED(sk) (0)
199#define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk,skb) ({ 0; })225#define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk,skb) ({ 0; })
include/linux/bpf.h+8−0
@@ -696,6 +696,8 @@ static inline void bpf_map_offload_map_free(struct bpf_map *map) · 695 unmodified lines
696struct sock *__sock_map_lookup_elem(struct bpf_map *map, u32 key);696struct sock *__sock_map_lookup_elem(struct bpf_map *map, u32 key);
697struct sock *__sock_hash_lookup_elem(struct bpf_map *map, void *key);697struct sock *__sock_hash_lookup_elem(struct bpf_map *map, void *key);
698int sock_map_prog(struct bpf_map *map, struct bpf_prog *prog, u32 type);698int sock_map_prog(struct bpf_map *map, struct bpf_prog *prog, u32 type);
699int sockmap_get_from_fd(const union bpf_attr *attr, int type,
700 struct bpf_prog *prog);
699#else701#else
700static inline struct sock *__sock_map_lookup_elem(struct bpf_map *map, u32 key)702static inline struct sock *__sock_map_lookup_elem(struct bpf_map *map, u32 key)
701{703{
@@ -714,6 +716,12 @@ static inline int sock_map_prog(struct bpf_map *map, · 12 unmodified lines
714{716{
715 return -EOPNOTSUPP;717 return -EOPNOTSUPP;
716}718}
719
720static inline int sockmap_get_from_fd(const union bpf_attr *attr, int type,
721 struct bpf_prog *prog)
722{
723 return -EINVAL;
724}
717#endif725#endif
718 726
719#if defined(CONFIG_XDP_SOCKETS)727#if defined(CONFIG_XDP_SOCKETS)
include/linux/bpf_lirc.h+3−2
@@ -5,11 +5,12 @@ · 4 unmodified lines
5#include <uapi/linux/bpf.h>5#include <uapi/linux/bpf.h>
6 6
7#ifdef CONFIG_BPF_LIRC_MODE27#ifdef CONFIG_BPF_LIRC_MODE2
8int lirc_prog_attach(const union bpf_attr *attr);8int lirc_prog_attach(const union bpf_attr *attr, struct bpf_prog *prog);
9int lirc_prog_detach(const union bpf_attr *attr);9int lirc_prog_detach(const union bpf_attr *attr);
10int lirc_prog_query(const union bpf_attr *attr, union bpf_attr __user *uattr);10int lirc_prog_query(const union bpf_attr *attr, union bpf_attr __user *uattr);
11#else11#else
12static inline int lirc_prog_attach(const union bpf_attr *attr)12static inline int lirc_prog_attach(const union bpf_attr *attr,
13 struct bpf_prog *prog)
13{14{
14 return -EINVAL;15 return -EINVAL;
15}16}
include/linux/compat.h+7−1
@@ -72,6 +72,9 @@ · 71 unmodified lines
72 */72 */
73#ifndef COMPAT_SYSCALL_DEFINEx73#ifndef COMPAT_SYSCALL_DEFINEx
74#define COMPAT_SYSCALL_DEFINEx(x, name, ...) \74#define COMPAT_SYSCALL_DEFINEx(x, name, ...) \
75 __diag_push(); \
76 __diag_ignore(GCC, 8, "-Wattribute-alias", \
77 "Type aliasing is used to sanitize syscall arguments");\
75 asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \78 asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \
76 asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \79 asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \
77 __attribute__((alias(__stringify(__se_compat_sys##name)))); \80 __attribute__((alias(__stringify(__se_compat_sys##name)))); \
@@ -80,8 +83,11 @@ · 2 unmodified lines
80 asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \83 asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
81 asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \84 asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
82 { \85 { \
83 return __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));\86 long ret = __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));\
87 __MAP(x,__SC_TEST,__VA_ARGS__); \
88 return ret; \
84 } \89 } \
90 __diag_pop(); \
85 static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))91 static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
86#endif /* COMPAT_SYSCALL_DEFINEx */92#endif /* COMPAT_SYSCALL_DEFINEx */
87 93
include/linux/compiler-gcc.h+25−0
@@ -347,3 +347,28 @@ · 346 unmodified lines
347#if GCC_VERSION >= 50100347#if GCC_VERSION >= 50100
348#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1348#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
349#endif349#endif
350
351/*
352 * Turn individual warnings and errors on and off locally, depending
353 * on version.
354 */
355#define __diag_GCC(version, severity, s) \
356 __diag_GCC_ ## version(__diag_GCC_ ## severity s)
357
358/* Severity used in pragma directives */
359#define __diag_GCC_ignore ignored
360#define __diag_GCC_warn warning
361#define __diag_GCC_error error
362
363/* Compilers before gcc-4.6 do not understand "#pragma GCC diagnostic push" */
364#if GCC_VERSION >= 40600
365#define __diag_str1(s) #s
366#define __diag_str(s) __diag_str1(s)
367#define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
368#endif
369
370#if GCC_VERSION >= 80000
371#define __diag_GCC_8(s) __diag(s)
372#else
373#define __diag_GCC_8(s)
374#endif
include/linux/compiler_types.h+18−0
@@ -271,4 +271,22 @@ struct ftrace_likely_data { · 270 unmodified lines
271# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))271# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
272#endif272#endif
273 273
274#ifndef __diag
275#define __diag(string)
276#endif
277
278#ifndef __diag_GCC
279#define __diag_GCC(version, severity, string)
280#endif
281
282#define __diag_push() __diag(push)
283#define __diag_pop() __diag(pop)
284
285#define __diag_ignore(compiler, version, option, comment) \
286 __diag_ ## compiler(version, ignore, option)
287#define __diag_warn(compiler, version, option, comment) \
288 __diag_ ## compiler(version, warn, option)
289#define __diag_error(compiler, version, option, comment) \
290 __diag_ ## compiler(version, error, option)
291
274#endif /* __LINUX_COMPILER_TYPES_H */292#endif /* __LINUX_COMPILER_TYPES_H */
include/linux/dax.h+1−1
@@ -135,7 +135,7 @@ void dax_flush(struct dax_device *dax_dev, void *addr, size_t size); · 134 unmodified lines
135 135
136ssize_t dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,136ssize_t dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
137 const struct iomap_ops *ops);137 const struct iomap_ops *ops);
138int dax_iomap_fault(struct vm_fault *vmf, enum page_entry_size pe_size,138vm_fault_t dax_iomap_fault(struct vm_fault *vmf, enum page_entry_size pe_size,
139 pfn_t *pfnp, int *errp, const struct iomap_ops *ops);139 pfn_t *pfnp, int *errp, const struct iomap_ops *ops);
140vm_fault_t dax_finish_sync_fault(struct vm_fault *vmf,140vm_fault_t dax_finish_sync_fault(struct vm_fault *vmf,
141 enum page_entry_size pe_size, pfn_t pfn);141 enum page_entry_size pe_size, pfn_t pfn);
include/linux/filter.h+8−48
@@ -470,9 +470,7 @@ struct sock_fprog_kern { · 469 unmodified lines
470};470};
471 471
472struct bpf_binary_header {472struct bpf_binary_header {
473 u16 pages;473 u32 pages;
474 u16 locked:1;
475
476 /* Some arches need word alignment for their instructions */474 /* Some arches need word alignment for their instructions */
477 u8 image[] __aligned(4);475 u8 image[] __aligned(4);
478};476};
@@ -481,7 +479,7 @@ struct bpf_prog { · 2 unmodified lines
481 u16 pages; /* Number of allocated pages */479 u16 pages; /* Number of allocated pages */
482 u16 jited:1, /* Is our filter JIT'ed? */480 u16 jited:1, /* Is our filter JIT'ed? */
483 jit_requested:1,/* archs need to JIT the prog */481 jit_requested:1,/* archs need to JIT the prog */
484 locked:1, /* Program image locked? */482 undo_set_mem:1, /* Passed set_memory_ro() checkpoint */
485 gpl_compatible:1, /* Is filter GPL compatible? */483 gpl_compatible:1, /* Is filter GPL compatible? */
486 cb_access:1, /* Is control block accessed? */484 cb_access:1, /* Is control block accessed? */
487 dst_needed:1, /* Do we need dst entry? */485 dst_needed:1, /* Do we need dst entry? */
@@ -677,46 +675,24 @@ bpf_ctx_narrow_access_ok(u32 off, u32 size, u32 size_default) · 189 unmodified lines
677 675
678static inline void bpf_prog_lock_ro(struct bpf_prog *fp)676static inline void bpf_prog_lock_ro(struct bpf_prog *fp)
679{677{
680#ifdef CONFIG_ARCH_HAS_SET_MEMORY678 fp->undo_set_mem = 1;
681 fp->locked = 1;679 set_memory_ro((unsigned long)fp, fp->pages);
682 if (set_memory_ro((unsigned long)fp, fp->pages))
683 fp->locked = 0;
684#endif
685}680}
686 681
687static inline void bpf_prog_unlock_ro(struct bpf_prog *fp)682static inline void bpf_prog_unlock_ro(struct bpf_prog *fp)
688{683{
689#ifdef CONFIG_ARCH_HAS_SET_MEMORY684 if (fp->undo_set_mem)
690 if (fp->locked) {685 set_memory_rw((unsigned long)fp, fp->pages);
691 WARN_ON_ONCE(set_memory_rw((unsigned long)fp, fp->pages));
692 /* In case set_memory_rw() fails, we want to be the first
693 * to crash here instead of some random place later on.
694 */
695 fp->locked = 0;
696 }
697#endif
698}686}
699 687
700static inline void bpf_jit_binary_lock_ro(struct bpf_binary_header *hdr)688static inline void bpf_jit_binary_lock_ro(struct bpf_binary_header *hdr)
701{689{
702#ifdef CONFIG_ARCH_HAS_SET_MEMORY690 set_memory_ro((unsigned long)hdr, hdr->pages);
703 hdr->locked = 1;
704 if (set_memory_ro((unsigned long)hdr, hdr->pages))
705 hdr->locked = 0;
706#endif
707}691}
708 692
709static inline void bpf_jit_binary_unlock_ro(struct bpf_binary_header *hdr)693static inline void bpf_jit_binary_unlock_ro(struct bpf_binary_header *hdr)
710{694{
711#ifdef CONFIG_ARCH_HAS_SET_MEMORY695 set_memory_rw((unsigned long)hdr, hdr->pages);
712 if (hdr->locked) {
713 WARN_ON_ONCE(set_memory_rw((unsigned long)hdr, hdr->pages));
714 /* In case set_memory_rw() fails, we want to be the first
715 * to crash here instead of some random place later on.
716 */
717 hdr->locked = 0;
718 }
719#endif
720}696}
721 697
722static inline struct bpf_binary_header *698static inline struct bpf_binary_header *
@@ -728,22 +704,6 @@ bpf_jit_binary_hdr(const struct bpf_prog *fp) · 5 unmodified lines
728 return (void *)addr;704 return (void *)addr;
729}705}
730 706
731#ifdef CONFIG_ARCH_HAS_SET_MEMORY
732static inline int bpf_prog_check_pages_ro_single(const struct bpf_prog *fp)
733{
734 if (!fp->locked)
735 return -ENOLCK;
736 if (fp->jited) {
737 const struct bpf_binary_header *hdr = bpf_jit_binary_hdr(fp);
738
739 if (!hdr->locked)
740 return -ENOLCK;
741 }
742
743 return 0;
744}
745#endif
746
747int sk_filter_trim_cap(struct sock *sk, struct sk_buff *skb, unsigned int cap);707int sk_filter_trim_cap(struct sock *sk, struct sk_buff *skb, unsigned int cap);
748static inline int sk_filter(struct sock *sk, struct sk_buff *skb)708static inline int sk_filter(struct sock *sk, struct sk_buff *skb)
749{709{
include/linux/fs.h+0−2
@@ -1720,8 +1720,6 @@ struct file_operations { · 1719 unmodified lines
1720 int (*iterate) (struct file *, struct dir_context *);1720 int (*iterate) (struct file *, struct dir_context *);
1721 int (*iterate_shared) (struct file *, struct dir_context *);1721 int (*iterate_shared) (struct file *, struct dir_context *);
1722 __poll_t (*poll) (struct file *, struct poll_table_struct *);1722 __poll_t (*poll) (struct file *, struct poll_table_struct *);
1723 struct wait_queue_head * (*get_poll_head)(struct file *, __poll_t);
1724 __poll_t (*poll_mask) (struct file *, __poll_t);
1725 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);1723 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
1726 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);1724 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
1727 int (*mmap) (struct file *, struct vm_area_struct *);1725 int (*mmap) (struct file *, struct vm_area_struct *);
include/linux/iio/buffer-dma.h+1−1
@@ -141,7 +141,7 @@ int iio_dma_buffer_read(struct iio_buffer *buffer, size_t n, · 140 unmodified lines
141 char __user *user_buffer);141 char __user *user_buffer);
142size_t iio_dma_buffer_data_available(struct iio_buffer *buffer);142size_t iio_dma_buffer_data_available(struct iio_buffer *buffer);
143int iio_dma_buffer_set_bytes_per_datum(struct iio_buffer *buffer, size_t bpd);143int iio_dma_buffer_set_bytes_per_datum(struct iio_buffer *buffer, size_t bpd);
144int iio_dma_buffer_set_length(struct iio_buffer *buffer, int length);144int iio_dma_buffer_set_length(struct iio_buffer *buffer, unsigned int length);
145int iio_dma_buffer_request_update(struct iio_buffer *buffer);145int iio_dma_buffer_request_update(struct iio_buffer *buffer);
146 146
147int iio_dma_buffer_init(struct iio_dma_buffer_queue *queue,147int iio_dma_buffer_init(struct iio_dma_buffer_queue *queue,
include/linux/input/mt.h+1−1
@@ -100,7 +100,7 @@ static inline bool input_is_mt_axis(int axis) · 99 unmodified lines
100 return axis == ABS_MT_SLOT || input_is_mt_value(axis);100 return axis == ABS_MT_SLOT || input_is_mt_value(axis);
101}101}
102 102
103void input_mt_report_slot_state(struct input_dev *dev,103bool input_mt_report_slot_state(struct input_dev *dev,
104 unsigned int tool_type, bool active);104 unsigned int tool_type, bool active);
105 105
106void input_mt_report_finger_count(struct input_dev *dev, int count);106void input_mt_report_finger_count(struct input_dev *dev, int count);
include/linux/mlx5/eswitch.h+2−0
@@ -8,6 +8,8 @@ · 7 unmodified lines
8 8
9#include <linux/mlx5/driver.h>9#include <linux/mlx5/driver.h>
10 10
11#define MLX5_ESWITCH_MANAGER(mdev) MLX5_CAP_GEN(mdev, eswitch_manager)
12
11enum {13enum {
12 SRIOV_NONE,14 SRIOV_NONE,
13 SRIOV_LEGACY,15 SRIOV_LEGACY,
include/linux/mlx5/mlx5_ifc.h+1−1
@@ -922,7 +922,7 @@ struct mlx5_ifc_cmd_hca_cap_bits { · 921 unmodified lines
922 u8 vnic_env_queue_counters[0x1];922 u8 vnic_env_queue_counters[0x1];
923 u8 ets[0x1];923 u8 ets[0x1];
924 u8 nic_flow_table[0x1];924 u8 nic_flow_table[0x1];
925 u8 eswitch_flow_table[0x1];925 u8 eswitch_manager[0x1];
926 u8 device_memory[0x1];926 u8 device_memory[0x1];
927 u8 mcam_reg[0x1];927 u8 mcam_reg[0x1];
928 u8 pcam_reg[0x1];928 u8 pcam_reg[0x1];
include/linux/net.h+0−1
@@ -147,7 +147,6 @@ struct proto_ops { · 146 unmodified lines
147 int (*getname) (struct socket *sock,147 int (*getname) (struct socket *sock,
148 struct sockaddr *addr,148 struct sockaddr *addr,
149 int peer);149 int peer);
150 __poll_t (*poll_mask) (struct socket *sock, __poll_t events);
151 __poll_t (*poll) (struct file *file, struct socket *sock,150 __poll_t (*poll) (struct file *file, struct socket *sock,
152 struct poll_table_struct *wait);151 struct poll_table_struct *wait);
153 int (*ioctl) (struct socket *sock, unsigned int cmd,152 int (*ioctl) (struct socket *sock, unsigned int cmd,
include/linux/netdevice.h+20−0
@@ -2796,11 +2796,31 @@ static inline void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff *pp, · 2795 unmodified lines
2796 if (PTR_ERR(pp) != -EINPROGRESS)2796 if (PTR_ERR(pp) != -EINPROGRESS)
2797 NAPI_GRO_CB(skb)->flush |= flush;2797 NAPI_GRO_CB(skb)->flush |= flush;
2798}2798}
2799static inline void skb_gro_flush_final_remcsum(struct sk_buff *skb,
2800 struct sk_buff *pp,
2801 int flush,
2802 struct gro_remcsum *grc)
2803{
2804 if (PTR_ERR(pp) != -EINPROGRESS) {
2805 NAPI_GRO_CB(skb)->flush |= flush;
2806 skb_gro_remcsum_cleanup(skb, grc);
2807 skb->remcsum_offload = 0;
2808 }
2809}
2799#else2810#else
2800static inline void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff *pp, int flush)2811static inline void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff *pp, int flush)
2801{2812{
2802 NAPI_GRO_CB(skb)->flush |= flush;2813 NAPI_GRO_CB(skb)->flush |= flush;
2803}2814}
2815static inline void skb_gro_flush_final_remcsum(struct sk_buff *skb,
2816 struct sk_buff *pp,
2817 int flush,
2818 struct gro_remcsum *grc)
2819{
2820 NAPI_GRO_CB(skb)->flush |= flush;
2821 skb_gro_remcsum_cleanup(skb, grc);
2822 skb->remcsum_offload = 0;
2823}
2804#endif2824#endif
2805 2825
2806static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,2826static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,
include/linux/pm_domain.h+3−3
@@ -234,7 +234,7 @@ struct generic_pm_domain *of_genpd_remove_last(struct device_node *np); · 233 unmodified lines
234int of_genpd_parse_idle_states(struct device_node *dn,234int of_genpd_parse_idle_states(struct device_node *dn,
235 struct genpd_power_state **states, int *n);235 struct genpd_power_state **states, int *n);
236unsigned int of_genpd_opp_to_performance_state(struct device *dev,236unsigned int of_genpd_opp_to_performance_state(struct device *dev,
237 struct device_node *opp_node);237 struct device_node *np);
238 238
239int genpd_dev_pm_attach(struct device *dev);239int genpd_dev_pm_attach(struct device *dev);
240struct device *genpd_dev_pm_attach_by_id(struct device *dev,240struct device *genpd_dev_pm_attach_by_id(struct device *dev,
@@ -274,9 +274,9 @@ static inline int of_genpd_parse_idle_states(struct device_node *dn, · 33 unmodified lines
274 274
275static inline unsigned int275static inline unsigned int
276of_genpd_opp_to_performance_state(struct device *dev,276of_genpd_opp_to_performance_state(struct device *dev,
277 struct device_node *opp_node)277 struct device_node *np)
278{278{
279 return -ENODEV;279 return 0;
280}280}
281 281
282static inline int genpd_dev_pm_attach(struct device *dev)282static inline int genpd_dev_pm_attach(struct device *dev)
include/linux/poll.h+6−6
@@ -74,18 +74,18 @@ static inline void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc) · 73 unmodified lines
74 pt->_key = ~(__poll_t)0; /* all events enabled */74 pt->_key = ~(__poll_t)0; /* all events enabled */
75}75}
76 76
77static inline bool file_has_poll_mask(struct file *file)77static inline bool file_can_poll(struct file *file)
78{78{
79 return file->f_op->get_poll_head && file->f_op->poll_mask;79 return file->f_op->poll;
80}80}
81 81
82static inline bool file_can_poll(struct file *file)82static inline __poll_t vfs_poll(struct file *file, struct poll_table_struct *pt)
83{83{
84 return file->f_op->poll || file_has_poll_mask(file);84 if (unlikely(!file->f_op->poll))
85 return DEFAULT_POLLMASK;
86 return file->f_op->poll(file, pt);
85}87}
86 88
87__poll_t vfs_poll(struct file *file, struct poll_table_struct *pt);
88
89struct poll_table_entry {89struct poll_table_entry {
90 struct file *filp;90 struct file *filp;
91 __poll_t key;91 __poll_t key;
include/linux/rmi.h+2−0
@@ -354,6 +354,8 @@ struct rmi_driver_data { · 353 unmodified lines
354 struct mutex irq_mutex;354 struct mutex irq_mutex;
355 struct input_dev *input;355 struct input_dev *input;
356 356
357 struct irq_domain *irqdomain;
358
357 u8 pdt_props;359 u8 pdt_props;
358 360
359 u8 num_rx_electrodes;361 u8 num_rx_electrodes;
include/linux/scatterlist.h+0−18
@@ -9,9 +9,6 @@ · 8 unmodified lines
9#include <asm/io.h>9#include <asm/io.h>
10 10
11struct scatterlist {11struct scatterlist {
12#ifdef CONFIG_DEBUG_SG
13 unsigned long sg_magic;
14#endif
15 unsigned long page_link;12 unsigned long page_link;
16 unsigned int offset;13 unsigned int offset;
17 unsigned int length;14 unsigned int length;
@@ -64,7 +61,6 @@ struct sg_table { · 46 unmodified lines
64 *61 *
65 */62 */
66 63
67#define SG_MAGIC 0x87654321
68#define SG_CHAIN 0x01UL64#define SG_CHAIN 0x01UL
69#define SG_END 0x02UL65#define SG_END 0x02UL
70 66
@@ -98,7 +94,6 @@ static inline void sg_assign_page(struct scatterlist *sg, struct page *page) · 27 unmodified lines
98 */94 */
99 BUG_ON((unsigned long) page & (SG_CHAIN | SG_END));95 BUG_ON((unsigned long) page & (SG_CHAIN | SG_END));
100#ifdef CONFIG_DEBUG_SG96#ifdef CONFIG_DEBUG_SG
101 BUG_ON(sg->sg_magic != SG_MAGIC);
102 BUG_ON(sg_is_chain(sg));97 BUG_ON(sg_is_chain(sg));
103#endif98#endif
104 sg->page_link = page_link | (unsigned long) page;99 sg->page_link = page_link | (unsigned long) page;
@@ -129,7 +124,6 @@ static inline void sg_set_page(struct scatterlist *sg, struct page *page, · 24 unmodified lines
129static inline struct page *sg_page(struct scatterlist *sg)124static inline struct page *sg_page(struct scatterlist *sg)
130{125{
131#ifdef CONFIG_DEBUG_SG126#ifdef CONFIG_DEBUG_SG
132 BUG_ON(sg->sg_magic != SG_MAGIC);
133 BUG_ON(sg_is_chain(sg));127 BUG_ON(sg_is_chain(sg));
134#endif128#endif
135 return (struct page *)((sg)->page_link & ~(SG_CHAIN | SG_END));129 return (struct page *)((sg)->page_link & ~(SG_CHAIN | SG_END));
@@ -195,9 +189,6 @@ static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents, · 59 unmodified lines
195 **/189 **/
196static inline void sg_mark_end(struct scatterlist *sg)190static inline void sg_mark_end(struct scatterlist *sg)
197{191{
198#ifdef CONFIG_DEBUG_SG
199 BUG_ON(sg->sg_magic != SG_MAGIC);
200#endif
201 /*192 /*
202 * Set termination bit, clear potential chain bit193 * Set termination bit, clear potential chain bit
203 */194 */
@@ -215,9 +206,6 @@ static inline void sg_mark_end(struct scatterlist *sg) · 11 unmodified lines
215 **/206 **/
216static inline void sg_unmark_end(struct scatterlist *sg)207static inline void sg_unmark_end(struct scatterlist *sg)
217{208{
218#ifdef CONFIG_DEBUG_SG
219 BUG_ON(sg->sg_magic != SG_MAGIC);
220#endif
221 sg->page_link &= ~SG_END;209 sg->page_link &= ~SG_END;
222}210}
223 211
@@ -260,12 +248,6 @@ static inline void *sg_virt(struct scatterlist *sg) · 36 unmodified lines
260static inline void sg_init_marker(struct scatterlist *sgl,248static inline void sg_init_marker(struct scatterlist *sgl,
261 unsigned int nents)249 unsigned int nents)
262{250{
263#ifdef CONFIG_DEBUG_SG
264 unsigned int i;
265
266 for (i = 0; i < nents; i++)
267 sgl[i].sg_magic = SG_MAGIC;
268#endif
269 sg_mark_end(&sgl[nents - 1]);251 sg_mark_end(&sgl[nents - 1]);
270}252}
271 253
include/linux/skbuff.h+2−1
@@ -3253,7 +3253,8 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags, · 3252 unmodified lines
3253 int *peeked, int *off, int *err);3253 int *peeked, int *off, int *err);
3254struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,3254struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
3255 int *err);3255 int *err);
3256__poll_t datagram_poll_mask(struct socket *sock, __poll_t events);3256__poll_t datagram_poll(struct file *file, struct socket *sock,
3257 struct poll_table_struct *wait);
3257int skb_copy_datagram_iter(const struct sk_buff *from, int offset,3258int skb_copy_datagram_iter(const struct sk_buff *from, int offset,
3258 struct iov_iter *to, int size);3259 struct iov_iter *to, int size);
3259static inline int skb_copy_datagram_msg(const struct sk_buff *from, int offset,3260static inline int skb_copy_datagram_msg(const struct sk_buff *from, int offset,
include/linux/slub_def.h+4−0
@@ -155,8 +155,12 @@ struct kmem_cache { · 154 unmodified lines
155 155
156#ifdef CONFIG_SYSFS156#ifdef CONFIG_SYSFS
157#define SLAB_SUPPORTS_SYSFS157#define SLAB_SUPPORTS_SYSFS
158void sysfs_slab_unlink(struct kmem_cache *);
158void sysfs_slab_release(struct kmem_cache *);159void sysfs_slab_release(struct kmem_cache *);
159#else160#else
161static inline void sysfs_slab_unlink(struct kmem_cache *s)
162{
163}
160static inline void sysfs_slab_release(struct kmem_cache *s)164static inline void sysfs_slab_release(struct kmem_cache *s)
161{165{
162}166}
include/linux/syscalls.h+4−0
@@ -231,6 +231,9 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event) · 230 unmodified lines
231 */231 */
232#ifndef __SYSCALL_DEFINEx232#ifndef __SYSCALL_DEFINEx
233#define __SYSCALL_DEFINEx(x, name, ...) \233#define __SYSCALL_DEFINEx(x, name, ...) \
234 __diag_push(); \
235 __diag_ignore(GCC, 8, "-Wattribute-alias", \
236 "Type aliasing is used to sanitize syscall arguments");\
234 asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \237 asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \
235 __attribute__((alias(__stringify(__se_sys##name)))); \238 __attribute__((alias(__stringify(__se_sys##name)))); \
236 ALLOW_ERROR_INJECTION(sys##name, ERRNO); \239 ALLOW_ERROR_INJECTION(sys##name, ERRNO); \
@@ -243,6 +246,7 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event) · 6 unmodified lines
243 __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \246 __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \
244 return ret; \247 return ret; \
245 } \248 } \
249 __diag_pop(); \
246 static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))250 static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
247#endif /* __SYSCALL_DEFINEx */251#endif /* __SYSCALL_DEFINEx */
248 252
include/net/bluetooth/bluetooth.h+1−1
@@ -271,7 +271,7 @@ int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, · 270 unmodified lines
271 int flags);271 int flags);
272int bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,272int bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,
273 size_t len, int flags);273 size_t len, int flags);
274__poll_t bt_sock_poll_mask(struct socket *sock, __poll_t events);274__poll_t bt_sock_poll(struct file *file, struct socket *sock, poll_table *wait);
275int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);275int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
276int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);276int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
277int bt_sock_wait_ready(struct sock *sk, unsigned long flags);277int bt_sock_wait_ready(struct sock *sk, unsigned long flags);
include/net/iucv/af_iucv.h+2−0
@@ -153,6 +153,8 @@ struct iucv_sock_list { · 152 unmodified lines
153 atomic_t autobind_name;153 atomic_t autobind_name;
154};154};
155 155
156__poll_t iucv_sock_poll(struct file *file, struct socket *sock,
157 poll_table *wait);
156void iucv_sock_link(struct iucv_sock_list *l, struct sock *s);158void iucv_sock_link(struct iucv_sock_list *l, struct sock *s);
157void iucv_sock_unlink(struct iucv_sock_list *l, struct sock *s);159void iucv_sock_unlink(struct iucv_sock_list *l, struct sock *s);
158void iucv_accept_enqueue(struct sock *parent, struct sock *sk);160void iucv_accept_enqueue(struct sock *parent, struct sock *sk);
include/net/net_namespace.h+1−0
@@ -128,6 +128,7 @@ struct net { · 127 unmodified lines
128#endif128#endif
129#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)129#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
130 struct netns_nf_frag nf_frag;130 struct netns_nf_frag nf_frag;
131 struct ctl_table_header *nf_frag_frags_hdr;
131#endif132#endif
132 struct sock *nfnl;133 struct sock *nfnl;
133 struct sock *nfnl_stash;134 struct sock *nfnl_stash;
include/net/netns/ipv6.h+0−1
@@ -109,7 +109,6 @@ struct netns_ipv6 { · 108 unmodified lines
109 109
110#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)110#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
111struct netns_nf_frag {111struct netns_nf_frag {
112 struct netns_sysctl_ipv6 sysctl;
113 struct netns_frags frags;112 struct netns_frags frags;
114};113};
115#endif114#endif
include/net/pkt_cls.h+5−0
@@ -113,6 +113,11 @@ void tcf_block_put_ext(struct tcf_block *block, struct Qdisc *q, · 112 unmodified lines
113{113{
114}114}
115 115
116static inline bool tcf_block_shared(struct tcf_block *block)
117{
118 return false;
119}
120
116static inline struct Qdisc *tcf_block_q(struct tcf_block *block)121static inline struct Qdisc *tcf_block_q(struct tcf_block *block)
117{122{
118 return NULL;123 return NULL;
include/net/sctp/sctp.h+2−1
@@ -109,7 +109,8 @@ int sctp_backlog_rcv(struct sock *sk, struct sk_buff *skb); · 108 unmodified lines
109int sctp_inet_listen(struct socket *sock, int backlog);109int sctp_inet_listen(struct socket *sock, int backlog);
110void sctp_write_space(struct sock *sk);110void sctp_write_space(struct sock *sk);
111void sctp_data_ready(struct sock *sk);111void sctp_data_ready(struct sock *sk);
112__poll_t sctp_poll_mask(struct socket *sock, __poll_t events);112__poll_t sctp_poll(struct file *file, struct socket *sock,
113 poll_table *wait);
113void sctp_sock_rfree(struct sk_buff *skb);114void sctp_sock_rfree(struct sk_buff *skb);
114void sctp_copy_sock(struct sock *newsk, struct sock *sk,115void sctp_copy_sock(struct sock *newsk, struct sock *sk,
115 struct sctp_association *asoc);116 struct sctp_association *asoc);
include/net/tcp.h+2−1
@@ -388,7 +388,8 @@ bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst); · 387 unmodified lines
388void tcp_close(struct sock *sk, long timeout);388void tcp_close(struct sock *sk, long timeout);
389void tcp_init_sock(struct sock *sk);389void tcp_init_sock(struct sock *sk);
390void tcp_init_transfer(struct sock *sk, int bpf_op);390void tcp_init_transfer(struct sock *sk, int bpf_op);
391__poll_t tcp_poll_mask(struct socket *sock, __poll_t events);391__poll_t tcp_poll(struct file *file, struct socket *sock,
392 struct poll_table_struct *wait);
392int tcp_getsockopt(struct sock *sk, int level, int optname,393int tcp_getsockopt(struct sock *sk, int level, int optname,
393 char __user *optval, int __user *optlen);394 char __user *optval, int __user *optlen);
394int tcp_setsockopt(struct sock *sk, int level, int optname,395int tcp_setsockopt(struct sock *sk, int level, int optname,
include/net/tls.h+4−2
@@ -109,7 +109,8 @@ struct tls_sw_context_rx { · 108 unmodified lines
109 109
110 struct strparser strp;110 struct strparser strp;
111 void (*saved_data_ready)(struct sock *sk);111 void (*saved_data_ready)(struct sock *sk);
112 __poll_t (*sk_poll_mask)(struct socket *sock, __poll_t events);112 unsigned int (*sk_poll)(struct file *file, struct socket *sock,
113 struct poll_table_struct *wait);
113 struct sk_buff *recv_pkt;114 struct sk_buff *recv_pkt;
114 u8 control;115 u8 control;
115 bool decrypted;116 bool decrypted;
@@ -224,7 +225,8 @@ void tls_sw_free_resources_tx(struct sock *sk); · 108 unmodified lines
224void tls_sw_free_resources_rx(struct sock *sk);225void tls_sw_free_resources_rx(struct sock *sk);
225int tls_sw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,226int tls_sw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
226 int nonblock, int flags, int *addr_len);227 int nonblock, int flags, int *addr_len);
227__poll_t tls_sw_poll_mask(struct socket *sock, __poll_t events);228unsigned int tls_sw_poll(struct file *file, struct socket *sock,
229 struct poll_table_struct *wait);
228ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,230ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,
229 struct pipe_inode_info *pipe,231 struct pipe_inode_info *pipe,
230 size_t len, unsigned int flags);232 size_t len, unsigned int flags);
include/net/udp.h+1−1
@@ -285,7 +285,7 @@ int udp_init_sock(struct sock *sk); · 284 unmodified lines
285int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);285int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);
286int __udp_disconnect(struct sock *sk, int flags);286int __udp_disconnect(struct sock *sk, int flags);
287int udp_disconnect(struct sock *sk, int flags);287int udp_disconnect(struct sock *sk, int flags);
288__poll_t udp_poll_mask(struct socket *sock, __poll_t events);288__poll_t udp_poll(struct file *file, struct socket *sock, poll_table *wait);
289struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,289struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
290 netdev_features_t features,290 netdev_features_t features,
291 bool is_ipv6);291 bool is_ipv6);
include/uapi/linux/aio_abi.h+4−2
@@ -39,8 +39,10 @@ enum { · 38 unmodified lines
39 IOCB_CMD_PWRITE = 1,39 IOCB_CMD_PWRITE = 1,
40 IOCB_CMD_FSYNC = 2,40 IOCB_CMD_FSYNC = 2,
41 IOCB_CMD_FDSYNC = 3,41 IOCB_CMD_FDSYNC = 3,
42 /* 4 was the experimental IOCB_CMD_PREADX */42 /* These two are experimental.
43 IOCB_CMD_POLL = 5,43 * IOCB_CMD_PREADX = 4,
44 * IOCB_CMD_POLL = 5,
45 */
44 IOCB_CMD_NOOP = 6,46 IOCB_CMD_NOOP = 6,
45 IOCB_CMD_PREADV = 7,47 IOCB_CMD_PREADV = 7,
46 IOCB_CMD_PWRITEV = 8,48 IOCB_CMD_PWRITEV = 8,
include/uapi/linux/bpf.h+23−5
@@ -1857,7 +1857,8 @@ union bpf_attr { · 1856 unmodified lines
1857 * is resolved), the nexthop address is returned in ipv4_dst1857 * is resolved), the nexthop address is returned in ipv4_dst
1858 * or ipv6_dst based on family, smac is set to mac address of1858 * or ipv6_dst based on family, smac is set to mac address of
1859 * egress device, dmac is set to nexthop mac address, rt_metric1859 * egress device, dmac is set to nexthop mac address, rt_metric
1860 * is set to metric from route (IPv4/IPv6 only).1860 * is set to metric from route (IPv4/IPv6 only), and ifindex
1861 * is set to the device index of the nexthop from the FIB lookup.
1861 *1862 *
1862 * *plen* argument is the size of the passed in struct.1863 * *plen* argument is the size of the passed in struct.
1863 * *flags* argument can be a combination of one or more of the1864 * *flags* argument can be a combination of one or more of the
@@ -1873,9 +1874,10 @@ union bpf_attr { · 9 unmodified lines
1873 * *ctx* is either **struct xdp_md** for XDP programs or1874 * *ctx* is either **struct xdp_md** for XDP programs or
1874 * **struct sk_buff** tc cls_act programs.1875 * **struct sk_buff** tc cls_act programs.
1875 * Return1876 * Return
1876 * Egress device index on success, 0 if packet needs to continue1877 * * < 0 if any input argument is invalid
1877 * up the stack for further processing or a negative error in case1878 * * 0 on success (packet is forwarded, nexthop neighbor exists)
1878 * of failure.1879 * * > 0 one of **BPF_FIB_LKUP_RET_** codes explaining why the
1880 * * packet is not forwarded or needs assist from full stack
1879 *1881 *
1880 * int bpf_sock_hash_update(struct bpf_sock_ops_kern *skops, struct bpf_map *map, void *key, u64 flags)1882 * int bpf_sock_hash_update(struct bpf_sock_ops_kern *skops, struct bpf_map *map, void *key, u64 flags)
1881 * Description1883 * Description
@@ -2612,6 +2614,18 @@ struct bpf_raw_tracepoint_args { · 730 unmodified lines
2612#define BPF_FIB_LOOKUP_DIRECT BIT(0)2614#define BPF_FIB_LOOKUP_DIRECT BIT(0)
2613#define BPF_FIB_LOOKUP_OUTPUT BIT(1)2615#define BPF_FIB_LOOKUP_OUTPUT BIT(1)
2614 2616
2617enum {
2618 BPF_FIB_LKUP_RET_SUCCESS, /* lookup successful */
2619 BPF_FIB_LKUP_RET_BLACKHOLE, /* dest is blackholed; can be dropped */
2620 BPF_FIB_LKUP_RET_UNREACHABLE, /* dest is unreachable; can be dropped */
2621 BPF_FIB_LKUP_RET_PROHIBIT, /* dest not allowed; can be dropped */
2622 BPF_FIB_LKUP_RET_NOT_FWDED, /* packet is not forwarded */
2623 BPF_FIB_LKUP_RET_FWD_DISABLED, /* fwding is not enabled on ingress */
2624 BPF_FIB_LKUP_RET_UNSUPP_LWT, /* fwd requires encapsulation */
2625 BPF_FIB_LKUP_RET_NO_NEIGH, /* no neighbor entry for nh */
2626 BPF_FIB_LKUP_RET_FRAG_NEEDED, /* fragmentation required to fwd */
2627};
2628
2615struct bpf_fib_lookup {2629struct bpf_fib_lookup {
2616 /* input: network family for lookup (AF_INET, AF_INET6)2630 /* input: network family for lookup (AF_INET, AF_INET6)
2617 * output: network family of egress nexthop2631 * output: network family of egress nexthop
@@ -2625,7 +2639,11 @@ struct bpf_fib_lookup { · 7 unmodified lines
2625 2639
2626 /* total length of packet from network header - used for MTU check */2640 /* total length of packet from network header - used for MTU check */
2627 __u16 tot_len;2641 __u16 tot_len;
2628 __u32 ifindex; /* L3 device index for lookup */2642
2643 /* input: L3 device index for lookup
2644 * output: device index from FIB lookup
2645 */
2646 __u32 ifindex;
2629 2647
2630 union {2648 union {
2631 /* inputs to lookup */2649 /* inputs to lookup */
include/uapi/linux/target_core_user.h+3−1
@@ -44,6 +44,7 @@ · 43 unmodified lines
44#define TCMU_MAILBOX_VERSION 244#define TCMU_MAILBOX_VERSION 2
45#define ALIGN_SIZE 64 /* Should be enough for most CPUs */45#define ALIGN_SIZE 64 /* Should be enough for most CPUs */
46#define TCMU_MAILBOX_FLAG_CAP_OOOC (1 << 0) /* Out-of-order completions */46#define TCMU_MAILBOX_FLAG_CAP_OOOC (1 << 0) /* Out-of-order completions */
47#define TCMU_MAILBOX_FLAG_CAP_READ_LEN (1 << 1) /* Read data length */
47 48
48struct tcmu_mailbox {49struct tcmu_mailbox {
49 __u16 version;50 __u16 version;
@@ -71,6 +72,7 @@ struct tcmu_cmd_entry_hdr { · 21 unmodified lines
71 __u16 cmd_id;72 __u16 cmd_id;
72 __u8 kflags;73 __u8 kflags;
73#define TCMU_UFLAG_UNKNOWN_OP 0x174#define TCMU_UFLAG_UNKNOWN_OP 0x1
75#define TCMU_UFLAG_READ_LEN 0x2
74 __u8 uflags;76 __u8 uflags;
75 77
76} __packed;78} __packed;
@@ -119,7 +121,7 @@ struct tcmu_cmd_entry { · 42 unmodified lines
119 __u8 scsi_status;121 __u8 scsi_status;
120 __u8 __pad1;122 __u8 __pad1;
121 __u16 __pad2;123 __u16 __pad2;
122 __u32 __pad3;124 __u32 read_len;
123 char sense_buffer[TCMU_SENSE_BUFFERSIZE];125 char sense_buffer[TCMU_SENSE_BUFFERSIZE];
124 } rsp;126 } rsp;
125 };127 };
init/Kconfig+3−4
@@ -1051,10 +1051,9 @@ config LD_DEAD_CODE_DATA_ELIMINATION · 1050 unmodified lines
1051 depends on HAVE_LD_DEAD_CODE_DATA_ELIMINATION1051 depends on HAVE_LD_DEAD_CODE_DATA_ELIMINATION
1052 depends on EXPERT1052 depends on EXPERT
1053 help1053 help
1054 Select this if the architecture wants to do dead code and1054 Enable this if you want to do dead code and data elimination with
1055 data elimination with the linker by compiling with1055 the linker by compiling with -ffunction-sections -fdata-sections,
1056 -ffunction-sections -fdata-sections, and linking with1056 and linking with --gc-sections.
1057 --gc-sections.
1058 1057
1059 This can reduce on disk and in-memory size of the kernel1058 This can reduce on disk and in-memory size of the kernel
1060 code and static data, particularly for small configs and1059 code and static data, particularly for small configs and
kernel/bpf/cgroup.c+54−0
@@ -428,6 +428,60 @@ int __cgroup_bpf_query(struct cgroup *cgrp, const union bpf_attr *attr, · 427 unmodified lines
428 return ret;428 return ret;
429}429}
430 430
431int cgroup_bpf_prog_attach(const union bpf_attr *attr,
432 enum bpf_prog_type ptype, struct bpf_prog *prog)
433{
434 struct cgroup *cgrp;
435 int ret;
436
437 cgrp = cgroup_get_from_fd(attr->target_fd);
438 if (IS_ERR(cgrp))
439 return PTR_ERR(cgrp);
440
441 ret = cgroup_bpf_attach(cgrp, prog, attr->attach_type,
442 attr->attach_flags);
443 cgroup_put(cgrp);
444 return ret;
445}
446
447int cgroup_bpf_prog_detach(const union bpf_attr *attr, enum bpf_prog_type ptype)
448{
449 struct bpf_prog *prog;
450 struct cgroup *cgrp;
451 int ret;
452
453 cgrp = cgroup_get_from_fd(attr->target_fd);
454 if (IS_ERR(cgrp))
455 return PTR_ERR(cgrp);
456
457 prog = bpf_prog_get_type(attr->attach_bpf_fd, ptype);
458 if (IS_ERR(prog))
459 prog = NULL;
460
461 ret = cgroup_bpf_detach(cgrp, prog, attr->attach_type, 0);
462 if (prog)
463 bpf_prog_put(prog);
464
465 cgroup_put(cgrp);
466 return ret;
467}
468
469int cgroup_bpf_prog_query(const union bpf_attr *attr,
470 union bpf_attr __user *uattr)
471{
472 struct cgroup *cgrp;
473 int ret;
474
475 cgrp = cgroup_get_from_fd(attr->query.target_fd);
476 if (IS_ERR(cgrp))
477 return PTR_ERR(cgrp);
478
479 ret = cgroup_bpf_query(cgrp, attr, uattr);
480
481 cgroup_put(cgrp);
482 return ret;
483}
484
431/**485/**
432 * __cgroup_bpf_run_filter_skb() - Run a program for packet filtering486 * __cgroup_bpf_run_filter_skb() - Run a program for packet filtering
433 * @sk: The socket sending or receiving traffic487 * @sk: The socket sending or receiving traffic
kernel/bpf/core.c+1−29
@@ -598,8 +598,6 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr, · 597 unmodified lines
598 bpf_fill_ill_insns(hdr, size);598 bpf_fill_ill_insns(hdr, size);
599 599
600 hdr->pages = size / PAGE_SIZE;600 hdr->pages = size / PAGE_SIZE;
601 hdr->locked = 0;
602
603 hole = min_t(unsigned int, size - (proglen + sizeof(*hdr)),601 hole = min_t(unsigned int, size - (proglen + sizeof(*hdr)),
604 PAGE_SIZE - sizeof(*hdr));602 PAGE_SIZE - sizeof(*hdr));
605 start = (get_random_int() % hole) & ~(alignment - 1);603 start = (get_random_int() % hole) & ~(alignment - 1);
@@ -1450,22 +1448,6 @@ static int bpf_check_tail_call(const struct bpf_prog *fp) · 844 unmodified lines
1450 return 0;1448 return 0;
1451}1449}
1452 1450
1453static int bpf_prog_check_pages_ro_locked(const struct bpf_prog *fp)
1454{
1455#ifdef CONFIG_ARCH_HAS_SET_MEMORY
1456 int i, err;
1457
1458 for (i = 0; i < fp->aux->func_cnt; i++) {
1459 err = bpf_prog_check_pages_ro_single(fp->aux->func[i]);
1460 if (err)
1461 return err;
1462 }
1463
1464 return bpf_prog_check_pages_ro_single(fp);
1465#endif
1466 return 0;
1467}
1468
1469static void bpf_prog_select_func(struct bpf_prog *fp)1451static void bpf_prog_select_func(struct bpf_prog *fp)
1470{1452{
1471#ifndef CONFIG_BPF_JIT_ALWAYS_ON1453#ifndef CONFIG_BPF_JIT_ALWAYS_ON
@@ -1524,17 +1506,7 @@ finalize: · 52 unmodified lines
1524 * all eBPF JITs might immediately support all features.1506 * all eBPF JITs might immediately support all features.
1525 */1507 */
1526 *err = bpf_check_tail_call(fp);1508 *err = bpf_check_tail_call(fp);
1527 if (*err)1509
1528 return fp;
1529
1530 /* Checkpoint: at this point onwards any cBPF -> eBPF or
1531 * native eBPF program is read-only. If we failed to change
1532 * the page attributes (e.g. allocation failure from
1533 * splitting large pages), then reject the whole program
1534 * in order to guarantee not ending up with any W+X pages
1535 * from BPF side in kernel.
1536 */
1537 *err = bpf_prog_check_pages_ro_locked(fp);
1538 return fp;1510 return fp;
1539}1511}
1540EXPORT_SYMBOL_GPL(bpf_prog_select_runtime);1512EXPORT_SYMBOL_GPL(bpf_prog_select_runtime);
kernel/bpf/sockmap.c+184−70
@@ -72,6 +72,7 @@ struct bpf_htab { · 71 unmodified lines
72 u32 n_buckets;72 u32 n_buckets;
73 u32 elem_size;73 u32 elem_size;
74 struct bpf_sock_progs progs;74 struct bpf_sock_progs progs;
75 struct rcu_head rcu;
75};76};
76 77
77struct htab_elem {78struct htab_elem {
@@ -89,8 +90,8 @@ enum smap_psock_state { · 11 unmodified lines
89struct smap_psock_map_entry {90struct smap_psock_map_entry {
90 struct list_head list;91 struct list_head list;
91 struct sock **entry;92 struct sock **entry;
92 struct htab_elem *hash_link;93 struct htab_elem __rcu *hash_link;
93 struct bpf_htab *htab;94 struct bpf_htab __rcu *htab;
94};95};
95 96
96struct smap_psock {97struct smap_psock {
@@ -120,6 +121,7 @@ struct smap_psock { · 23 unmodified lines
120 struct bpf_prog *bpf_parse;121 struct bpf_prog *bpf_parse;
121 struct bpf_prog *bpf_verdict;122 struct bpf_prog *bpf_verdict;
122 struct list_head maps;123 struct list_head maps;
124 spinlock_t maps_lock;
123 125
124 /* Back reference used when sock callback trigger sockmap operations */126 /* Back reference used when sock callback trigger sockmap operations */
125 struct sock *sock;127 struct sock *sock;
@@ -140,6 +142,7 @@ static int bpf_tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, · 14 unmodified lines
140static int bpf_tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);142static int bpf_tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);
141static int bpf_tcp_sendpage(struct sock *sk, struct page *page,143static int bpf_tcp_sendpage(struct sock *sk, struct page *page,
142 int offset, size_t size, int flags);144 int offset, size_t size, int flags);
145static void bpf_tcp_close(struct sock *sk, long timeout);
143 146
144static inline struct smap_psock *smap_psock_sk(const struct sock *sk)147static inline struct smap_psock *smap_psock_sk(const struct sock *sk)
145{148{
@@ -161,7 +164,42 @@ out: · 15 unmodified lines
161 return !empty;164 return !empty;
162}165}
163 166
164static struct proto tcp_bpf_proto;167enum {
168 SOCKMAP_IPV4,
169 SOCKMAP_IPV6,
170 SOCKMAP_NUM_PROTS,
171};
172
173enum {
174 SOCKMAP_BASE,
175 SOCKMAP_TX,
176 SOCKMAP_NUM_CONFIGS,
177};
178
179static struct proto *saved_tcpv6_prot __read_mostly;
180static DEFINE_SPINLOCK(tcpv6_prot_lock);
181static struct proto bpf_tcp_prots[SOCKMAP_NUM_PROTS][SOCKMAP_NUM_CONFIGS];
182static void build_protos(struct proto prot[SOCKMAP_NUM_CONFIGS],
183 struct proto *base)
184{
185 prot[SOCKMAP_BASE] = *base;
186 prot[SOCKMAP_BASE].close = bpf_tcp_close;
187 prot[SOCKMAP_BASE].recvmsg = bpf_tcp_recvmsg;
188 prot[SOCKMAP_BASE].stream_memory_read = bpf_tcp_stream_read;
189
190 prot[SOCKMAP_TX] = prot[SOCKMAP_BASE];
191 prot[SOCKMAP_TX].sendmsg = bpf_tcp_sendmsg;
192 prot[SOCKMAP_TX].sendpage = bpf_tcp_sendpage;
193}
194
195static void update_sk_prot(struct sock *sk, struct smap_psock *psock)
196{
197 int family = sk->sk_family == AF_INET6 ? SOCKMAP_IPV6 : SOCKMAP_IPV4;
198 int conf = psock->bpf_tx_msg ? SOCKMAP_TX : SOCKMAP_BASE;
199
200 sk->sk_prot = &bpf_tcp_prots[family][conf];
201}
202
165static int bpf_tcp_init(struct sock *sk)203static int bpf_tcp_init(struct sock *sk)
166{204{
167 struct smap_psock *psock;205 struct smap_psock *psock;
@@ -181,14 +219,17 @@ static int bpf_tcp_init(struct sock *sk) · 13 unmodified lines
181 psock->save_close = sk->sk_prot->close;219 psock->save_close = sk->sk_prot->close;
182 psock->sk_proto = sk->sk_prot;220 psock->sk_proto = sk->sk_prot;
183 221
184 if (psock->bpf_tx_msg) {222 /* Build IPv6 sockmap whenever the address of tcpv6_prot changes */
185 tcp_bpf_proto.sendmsg = bpf_tcp_sendmsg;223 if (sk->sk_family == AF_INET6 &&
186 tcp_bpf_proto.sendpage = bpf_tcp_sendpage;224 unlikely(sk->sk_prot != smp_load_acquire(&saved_tcpv6_prot))) {
187 tcp_bpf_proto.recvmsg = bpf_tcp_recvmsg;225 spin_lock_bh(&tcpv6_prot_lock);
188 tcp_bpf_proto.stream_memory_read = bpf_tcp_stream_read;226 if (likely(sk->sk_prot != saved_tcpv6_prot)) {
227 build_protos(bpf_tcp_prots[SOCKMAP_IPV6], sk->sk_prot);
228 smp_store_release(&saved_tcpv6_prot, sk->sk_prot);
229 }
230 spin_unlock_bh(&tcpv6_prot_lock);
189 }231 }
190 232 update_sk_prot(sk, psock);
191 sk->sk_prot = &tcp_bpf_proto;
192 rcu_read_unlock();233 rcu_read_unlock();
193 return 0;234 return 0;
194}235}
@@ -219,16 +260,54 @@ out: · 24 unmodified lines
219 rcu_read_unlock();260 rcu_read_unlock();
220}261}
221 262
263static struct htab_elem *lookup_elem_raw(struct hlist_head *head,
264 u32 hash, void *key, u32 key_size)
265{
266 struct htab_elem *l;
267
268 hlist_for_each_entry_rcu(l, head, hash_node) {
269 if (l->hash == hash && !memcmp(&l->key, key, key_size))
270 return l;
271 }
272
273 return NULL;
274}
275
276static inline struct bucket *__select_bucket(struct bpf_htab *htab, u32 hash)
277{
278 return &htab->buckets[hash & (htab->n_buckets - 1)];
279}
280
281static inline struct hlist_head *select_bucket(struct bpf_htab *htab, u32 hash)
282{
283 return &__select_bucket(htab, hash)->head;
284}
285
222static void free_htab_elem(struct bpf_htab *htab, struct htab_elem *l)286static void free_htab_elem(struct bpf_htab *htab, struct htab_elem *l)
223{287{
224 atomic_dec(&htab->count);288 atomic_dec(&htab->count);
225 kfree_rcu(l, rcu);289 kfree_rcu(l, rcu);
226}290}
227 291
292static struct smap_psock_map_entry *psock_map_pop(struct sock *sk,
293 struct smap_psock *psock)
294{
295 struct smap_psock_map_entry *e;
296
297 spin_lock_bh(&psock->maps_lock);
298 e = list_first_entry_or_null(&psock->maps,
299 struct smap_psock_map_entry,
300 list);
301 if (e)
302 list_del(&e->list);
303 spin_unlock_bh(&psock->maps_lock);
304 return e;
305}
306
228static void bpf_tcp_close(struct sock *sk, long timeout)307static void bpf_tcp_close(struct sock *sk, long timeout)
229{308{
230 void (*close_fun)(struct sock *sk, long timeout);309 void (*close_fun)(struct sock *sk, long timeout);
231 struct smap_psock_map_entry *e, *tmp;310 struct smap_psock_map_entry *e;
232 struct sk_msg_buff *md, *mtmp;311 struct sk_msg_buff *md, *mtmp;
233 struct smap_psock *psock;312 struct smap_psock *psock;
234 struct sock *osk;313 struct sock *osk;
@@ -247,7 +326,6 @@ static void bpf_tcp_close(struct sock *sk, long timeout) · 12 unmodified lines
247 */326 */
248 close_fun = psock->save_close;327 close_fun = psock->save_close;
249 328
250 write_lock_bh(&sk->sk_callback_lock);
251 if (psock->cork) {329 if (psock->cork) {
252 free_start_sg(psock->sock, psock->cork);330 free_start_sg(psock->sock, psock->cork);
253 kfree(psock->cork);331 kfree(psock->cork);
@@ -260,20 +338,38 @@ static void bpf_tcp_close(struct sock *sk, long timeout) · 6 unmodified lines
260 kfree(md);338 kfree(md);
261 }339 }
262 340
263 list_for_each_entry_safe(e, tmp, &psock->maps, list) {341 e = psock_map_pop(sk, psock);
342 while (e) {
264 if (e->entry) {343 if (e->entry) {
265 osk = cmpxchg(e->entry, sk, NULL);344 osk = cmpxchg(e->entry, sk, NULL);
266 if (osk == sk) {345 if (osk == sk) {
267 list_del(&e->list);
268 smap_release_sock(psock, sk);346 smap_release_sock(psock, sk);
269 }347 }
270 } else {348 } else {
271 hlist_del_rcu(&e->hash_link->hash_node);349 struct htab_elem *link = rcu_dereference(e->hash_link);
272 smap_release_sock(psock, e->hash_link->sk);350 struct bpf_htab *htab = rcu_dereference(e->htab);
273 free_htab_elem(e->htab, e->hash_link);351 struct hlist_head *head;
352 struct htab_elem *l;
353 struct bucket *b;
354
355 b = __select_bucket(htab, link->hash);
356 head = &b->head;
357 raw_spin_lock_bh(&b->lock);
358 l = lookup_elem_raw(head,
359 link->hash, link->key,
360 htab->map.key_size);
361 /* If another thread deleted this object skip deletion.
362 * The refcnt on psock may or may not be zero.
363 */
364 if (l) {
365 hlist_del_rcu(&link->hash_node);
366 smap_release_sock(psock, link->sk);
367 free_htab_elem(htab, link);
368 }
369 raw_spin_unlock_bh(&b->lock);
274 }370 }
371 e = psock_map_pop(sk, psock);
275 }372 }
276 write_unlock_bh(&sk->sk_callback_lock);
277 rcu_read_unlock();373 rcu_read_unlock();
278 close_fun(sk, timeout);374 close_fun(sk, timeout);
279}375}
@@ -1111,8 +1207,7 @@ static void bpf_tcp_msg_add(struct smap_psock *psock, · 831 unmodified lines
1111 1207
1112static int bpf_tcp_ulp_register(void)1208static int bpf_tcp_ulp_register(void)
1113{1209{
1114 tcp_bpf_proto = tcp_prot;1210 build_protos(bpf_tcp_prots[SOCKMAP_IPV4], &tcp_prot);
1115 tcp_bpf_proto.close = bpf_tcp_close;
1116 /* Once BPF TX ULP is registered it is never unregistered. It1211 /* Once BPF TX ULP is registered it is never unregistered. It
1117 * will be in the ULP list for the lifetime of the system. Doing1212 * will be in the ULP list for the lifetime of the system. Doing
1118 * duplicate registers is not a problem.1213 * duplicate registers is not a problem.
@@ -1357,7 +1452,9 @@ static void smap_release_sock(struct smap_psock *psock, struct sock *sock) · 238 unmodified lines
1357{1452{
1358 if (refcount_dec_and_test(&psock->refcnt)) {1453 if (refcount_dec_and_test(&psock->refcnt)) {
1359 tcp_cleanup_ulp(sock);1454 tcp_cleanup_ulp(sock);
1455 write_lock_bh(&sock->sk_callback_lock);
1360 smap_stop_sock(psock, sock);1456 smap_stop_sock(psock, sock);
1457 write_unlock_bh(&sock->sk_callback_lock);
1361 clear_bit(SMAP_TX_RUNNING, &psock->state);1458 clear_bit(SMAP_TX_RUNNING, &psock->state);
1362 rcu_assign_sk_user_data(sock, NULL);1459 rcu_assign_sk_user_data(sock, NULL);
1363 call_rcu_sched(&psock->rcu, smap_destroy_psock);1460 call_rcu_sched(&psock->rcu, smap_destroy_psock);
@@ -1508,6 +1605,7 @@ static struct smap_psock *smap_init_psock(struct sock *sock, int node) · 144 unmodified lines
1508 INIT_LIST_HEAD(&psock->maps);1605 INIT_LIST_HEAD(&psock->maps);
1509 INIT_LIST_HEAD(&psock->ingress);1606 INIT_LIST_HEAD(&psock->ingress);
1510 refcount_set(&psock->refcnt, 1);1607 refcount_set(&psock->refcnt, 1);
1608 spin_lock_init(&psock->maps_lock);
1511 1609
1512 rcu_assign_sk_user_data(sock, psock);1610 rcu_assign_sk_user_data(sock, psock);
1513 sock_hold(sock);1611 sock_hold(sock);
@@ -1564,18 +1662,32 @@ free_stab: · 50 unmodified lines
1564 return ERR_PTR(err);1662 return ERR_PTR(err);
1565}1663}
1566 1664
1567static void smap_list_remove(struct smap_psock *psock,1665static void smap_list_map_remove(struct smap_psock *psock,
1568 struct sock **entry,1666 struct sock **entry)
1569 struct htab_elem *hash_link)
1570{1667{
1571 struct smap_psock_map_entry *e, *tmp;1668 struct smap_psock_map_entry *e, *tmp;
1572 1669
1670 spin_lock_bh(&psock->maps_lock);
1573 list_for_each_entry_safe(e, tmp, &psock->maps, list) {1671 list_for_each_entry_safe(e, tmp, &psock->maps, list) {
1574 if (e->entry == entry || e->hash_link == hash_link) {1672 if (e->entry == entry)
1575 list_del(&e->list);1673 list_del(&e->list);
1576 break;
1577 }
1578 }1674 }
1675 spin_unlock_bh(&psock->maps_lock);
1676}
1677
1678static void smap_list_hash_remove(struct smap_psock *psock,
1679 struct htab_elem *hash_link)
1680{
1681 struct smap_psock_map_entry *e, *tmp;
1682
1683 spin_lock_bh(&psock->maps_lock);
1684 list_for_each_entry_safe(e, tmp, &psock->maps, list) {
1685 struct htab_elem *c = rcu_dereference(e->hash_link);
1686
1687 if (c == hash_link)
1688 list_del(&e->list);
1689 }
1690 spin_unlock_bh(&psock->maps_lock);
1579}1691}
1580 1692
1581static void sock_map_free(struct bpf_map *map)1693static void sock_map_free(struct bpf_map *map)
@@ -1601,7 +1713,6 @@ static void sock_map_free(struct bpf_map *map) · 19 unmodified lines
1601 if (!sock)1713 if (!sock)
1602 continue;1714 continue;
1603 1715
1604 write_lock_bh(&sock->sk_callback_lock);
1605 psock = smap_psock_sk(sock);1716 psock = smap_psock_sk(sock);
1606 /* This check handles a racing sock event that can get the1717 /* This check handles a racing sock event that can get the
1607 * sk_callback_lock before this case but after xchg happens1718 * sk_callback_lock before this case but after xchg happens
@@ -1609,10 +1720,9 @@ static void sock_map_free(struct bpf_map *map) · 1 unmodified line
1609 * to be null and queued for garbage collection.1720 * to be null and queued for garbage collection.
1610 */1721 */
1611 if (likely(psock)) {1722 if (likely(psock)) {
1612 smap_list_remove(psock, &stab->sock_map[i], NULL);1723 smap_list_map_remove(psock, &stab->sock_map[i]);
1613 smap_release_sock(psock, sock);1724 smap_release_sock(psock, sock);
1614 }1725 }
1615 write_unlock_bh(&sock->sk_callback_lock);
1616 }1726 }
1617 rcu_read_unlock();1727 rcu_read_unlock();
1618 1728
@@ -1661,17 +1771,15 @@ static int sock_map_delete_elem(struct bpf_map *map, void *key) · 42 unmodified lines
1661 if (!sock)1771 if (!sock)
1662 return -EINVAL;1772 return -EINVAL;
1663 1773
1664 write_lock_bh(&sock->sk_callback_lock);
1665 psock = smap_psock_sk(sock);1774 psock = smap_psock_sk(sock);
1666 if (!psock)1775 if (!psock)
1667 goto out;1776 goto out;
1668 1777
1669 if (psock->bpf_parse)1778 if (psock->bpf_parse)
1670 smap_stop_sock(psock, sock);1779 smap_stop_sock(psock, sock);
1671 smap_list_remove(psock, &stab->sock_map[k], NULL);1780 smap_list_map_remove(psock, &stab->sock_map[k]);
1672 smap_release_sock(psock, sock);1781 smap_release_sock(psock, sock);
1673out:1782out:
1674 write_unlock_bh(&sock->sk_callback_lock);
1675 return 0;1783 return 0;
1676}1784}
1677 1785
@@ -1752,7 +1860,6 @@ static int __sock_map_ctx_update_elem(struct bpf_map *map, · 74 unmodified lines
1752 }1860 }
1753 }1861 }
1754 1862
1755 write_lock_bh(&sock->sk_callback_lock);
1756 psock = smap_psock_sk(sock);1863 psock = smap_psock_sk(sock);
1757 1864
1758 /* 2. Do not allow inheriting programs if psock exists and has1865 /* 2. Do not allow inheriting programs if psock exists and has
@@ -1809,7 +1916,9 @@ static int __sock_map_ctx_update_elem(struct bpf_map *map, · 50 unmodified lines
1809 if (err)1916 if (err)
1810 goto out_free;1917 goto out_free;
1811 smap_init_progs(psock, verdict, parse);1918 smap_init_progs(psock, verdict, parse);
1919 write_lock_bh(&sock->sk_callback_lock);
1812 smap_start_sock(psock, sock);1920 smap_start_sock(psock, sock);
1921 write_unlock_bh(&sock->sk_callback_lock);
1813 }1922 }
1814 1923
1815 /* 4. Place psock in sockmap for use and stop any programs on1924 /* 4. Place psock in sockmap for use and stop any programs on
@@ -1819,9 +1928,10 @@ static int __sock_map_ctx_update_elem(struct bpf_map *map, · 3 unmodified lines
1819 */1928 */
1820 if (map_link) {1929 if (map_link) {
1821 e->entry = map_link;1930 e->entry = map_link;
1931 spin_lock_bh(&psock->maps_lock);
1822 list_add_tail(&e->list, &psock->maps);1932 list_add_tail(&e->list, &psock->maps);
1933 spin_unlock_bh(&psock->maps_lock);
1823 }1934 }
1824 write_unlock_bh(&sock->sk_callback_lock);
1825 return err;1935 return err;
1826out_free:1936out_free:
1827 smap_release_sock(psock, sock);1937 smap_release_sock(psock, sock);
@@ -1832,7 +1942,6 @@ out_progs: · 4 unmodified lines
1832 }1942 }
1833 if (tx_msg)1943 if (tx_msg)
1834 bpf_prog_put(tx_msg);1944 bpf_prog_put(tx_msg);
1835 write_unlock_bh(&sock->sk_callback_lock);
1836 kfree(e);1945 kfree(e);
1837 return err;1946 return err;
1838}1947}
@@ -1869,10 +1978,8 @@ static int sock_map_ctx_update_elem(struct bpf_sock_ops_kern *skops, · 30 unmodified lines
1869 if (osock) {1978 if (osock) {
1870 struct smap_psock *opsock = smap_psock_sk(osock);1979 struct smap_psock *opsock = smap_psock_sk(osock);
1871 1980
1872 write_lock_bh(&osock->sk_callback_lock);1981 smap_list_map_remove(opsock, &stab->sock_map[i]);
1873 smap_list_remove(opsock, &stab->sock_map[i], NULL);
1874 smap_release_sock(opsock, osock);1982 smap_release_sock(opsock, osock);
1875 write_unlock_bh(&osock->sk_callback_lock);
1876 }1983 }
1877out:1984out:
1878 return err;1985 return err;
@@ -1915,6 +2022,24 @@ int sock_map_prog(struct bpf_map *map, struct bpf_prog *prog, u32 type) · 36 unmodified lines
1915 return 0;2022 return 0;
1916}2023}
1917 2024
2025int sockmap_get_from_fd(const union bpf_attr *attr, int type,
2026 struct bpf_prog *prog)
2027{
2028 int ufd = attr->target_fd;
2029 struct bpf_map *map;
2030 struct fd f;
2031 int err;
2032
2033 f = fdget(ufd);
2034 map = __bpf_map_get(f);
2035 if (IS_ERR(map))
2036 return PTR_ERR(map);
2037
2038 err = sock_map_prog(map, prog, attr->attach_type);
2039 fdput(f);
2040 return err;
2041}
2042
1918static void *sock_map_lookup(struct bpf_map *map, void *key)2043static void *sock_map_lookup(struct bpf_map *map, void *key)
1919{2044{
1920 return NULL;2045 return NULL;
@@ -2043,14 +2168,13 @@ free_htab: · 122 unmodified lines
2043 return ERR_PTR(err);2168 return ERR_PTR(err);
2044}2169}
2045 2170
2046static inline struct bucket *__select_bucket(struct bpf_htab *htab, u32 hash)2171static void __bpf_htab_free(struct rcu_head *rcu)
2047{2172{
2048 return &htab->buckets[hash & (htab->n_buckets - 1)];2173 struct bpf_htab *htab;
2049}
2050 2174
2051static inline struct hlist_head *select_bucket(struct bpf_htab *htab, u32 hash)2175 htab = container_of(rcu, struct bpf_htab, rcu);
2052{2176 bpf_map_area_free(htab->buckets);
2053 return &__select_bucket(htab, hash)->head;2177 kfree(htab);
2054}2178}
2055 2179
2056static void sock_hash_free(struct bpf_map *map)2180static void sock_hash_free(struct bpf_map *map)
@@ -2069,16 +2193,18 @@ static void sock_hash_free(struct bpf_map *map) · 12 unmodified lines
2069 */2193 */
2070 rcu_read_lock();2194 rcu_read_lock();
2071 for (i = 0; i < htab->n_buckets; i++) {2195 for (i = 0; i < htab->n_buckets; i++) {
2072 struct hlist_head *head = select_bucket(htab, i);2196 struct bucket *b = __select_bucket(htab, i);
2197 struct hlist_head *head;
2073 struct hlist_node *n;2198 struct hlist_node *n;
2074 struct htab_elem *l;2199 struct htab_elem *l;
2075 2200
2201 raw_spin_lock_bh(&b->lock);
2202 head = &b->head;
2076 hlist_for_each_entry_safe(l, n, head, hash_node) {2203 hlist_for_each_entry_safe(l, n, head, hash_node) {
2077 struct sock *sock = l->sk;2204 struct sock *sock = l->sk;
2078 struct smap_psock *psock;2205 struct smap_psock *psock;
2079 2206
2080 hlist_del_rcu(&l->hash_node);2207 hlist_del_rcu(&l->hash_node);
2081 write_lock_bh(&sock->sk_callback_lock);
2082 psock = smap_psock_sk(sock);2208 psock = smap_psock_sk(sock);
2083 /* This check handles a racing sock event that can get2209 /* This check handles a racing sock event that can get
2084 * the sk_callback_lock before this case but after xchg2210 * the sk_callback_lock before this case but after xchg
@@ -2086,16 +2212,15 @@ static void sock_hash_free(struct bpf_map *map) · 1 unmodified line
2086 * (psock) to be null and queued for garbage collection.2212 * (psock) to be null and queued for garbage collection.
2087 */2213 */
2088 if (likely(psock)) {2214 if (likely(psock)) {
2089 smap_list_remove(psock, NULL, l);2215 smap_list_hash_remove(psock, l);
2090 smap_release_sock(psock, sock);2216 smap_release_sock(psock, sock);
2091 }2217 }
2092 write_unlock_bh(&sock->sk_callback_lock);2218 free_htab_elem(htab, l);
2093 kfree(l);
2094 }2219 }
2220 raw_spin_unlock_bh(&b->lock);
2095 }2221 }
2096 rcu_read_unlock();2222 rcu_read_unlock();
2097 bpf_map_area_free(htab->buckets);2223 call_rcu(&htab->rcu, __bpf_htab_free);
2098 kfree(htab);
2099}2224}
2100 2225
2101static struct htab_elem *alloc_sock_hash_elem(struct bpf_htab *htab,2226static struct htab_elem *alloc_sock_hash_elem(struct bpf_htab *htab,
@@ -2122,19 +2247,6 @@ static struct htab_elem *alloc_sock_hash_elem(struct bpf_htab *htab, · 20 unmodified lines
2122 return l_new;2247 return l_new;
2123}2248}
2124 2249
2125static struct htab_elem *lookup_elem_raw(struct hlist_head *head,
2126 u32 hash, void *key, u32 key_size)
2127{
2128 struct htab_elem *l;
2129
2130 hlist_for_each_entry_rcu(l, head, hash_node) {
2131 if (l->hash == hash && !memcmp(&l->key, key, key_size))
2132 return l;
2133 }
2134
2135 return NULL;
2136}
2137
2138static inline u32 htab_map_hash(const void *key, u32 key_len)2250static inline u32 htab_map_hash(const void *key, u32 key_len)
2139{2251{
2140 return jhash(key, key_len, 0);2252 return jhash(key, key_len, 0);
@@ -2254,9 +2366,12 @@ static int sock_hash_ctx_update_elem(struct bpf_sock_ops_kern *skops, · 113 unmodified lines
2254 goto bucket_err;2366 goto bucket_err;
2255 }2367 }
2256 2368
2257 e->hash_link = l_new;2369 rcu_assign_pointer(e->hash_link, l_new);
2258 e->htab = container_of(map, struct bpf_htab, map);2370 rcu_assign_pointer(e->htab,
2371 container_of(map, struct bpf_htab, map));
2372 spin_lock_bh(&psock->maps_lock);
2259 list_add_tail(&e->list, &psock->maps);2373 list_add_tail(&e->list, &psock->maps);
2374 spin_unlock_bh(&psock->maps_lock);
2260 2375
2261 /* add new element to the head of the list, so that2376 /* add new element to the head of the list, so that
2262 * concurrent search will find it before old elem2377 * concurrent search will find it before old elem
@@ -2266,7 +2381,7 @@ static int sock_hash_ctx_update_elem(struct bpf_sock_ops_kern *skops, · 3 unmodified lines
2266 psock = smap_psock_sk(l_old->sk);2381 psock = smap_psock_sk(l_old->sk);
2267 2382
2268 hlist_del_rcu(&l_old->hash_node);2383 hlist_del_rcu(&l_old->hash_node);
2269 smap_list_remove(psock, NULL, l_old);2384 smap_list_hash_remove(psock, l_old);
2270 smap_release_sock(psock, l_old->sk);2385 smap_release_sock(psock, l_old->sk);
2271 free_htab_elem(htab, l_old);2386 free_htab_elem(htab, l_old);
2272 }2387 }
@@ -2326,7 +2441,6 @@ static int sock_hash_delete_elem(struct bpf_map *map, void *key) · 53 unmodified lines
2326 struct smap_psock *psock;2441 struct smap_psock *psock;
2327 2442
2328 hlist_del_rcu(&l->hash_node);2443 hlist_del_rcu(&l->hash_node);
2329 write_lock_bh(&sock->sk_callback_lock);
2330 psock = smap_psock_sk(sock);2444 psock = smap_psock_sk(sock);
2331 /* This check handles a racing sock event that can get the2445 /* This check handles a racing sock event that can get the
2332 * sk_callback_lock before this case but after xchg happens2446 * sk_callback_lock before this case but after xchg happens
@@ -2334,10 +2448,9 @@ static int sock_hash_delete_elem(struct bpf_map *map, void *key) · 1 unmodified line
2334 * to be null and queued for garbage collection.2448 * to be null and queued for garbage collection.
2335 */2449 */
2336 if (likely(psock)) {2450 if (likely(psock)) {
2337 smap_list_remove(psock, NULL, l);2451 smap_list_hash_remove(psock, l);
2338 smap_release_sock(psock, sock);2452 smap_release_sock(psock, sock);
2339 }2453 }
2340 write_unlock_bh(&sock->sk_callback_lock);
2341 free_htab_elem(htab, l);2454 free_htab_elem(htab, l);
2342 ret = 0;2455 ret = 0;
2343 }2456 }
@@ -2383,6 +2496,7 @@ const struct bpf_map_ops sock_hash_ops = { · 39 unmodified lines
2383 .map_get_next_key = sock_hash_get_next_key,2496 .map_get_next_key = sock_hash_get_next_key,
2384 .map_update_elem = sock_hash_update_elem,2497 .map_update_elem = sock_hash_update_elem,
2385 .map_delete_elem = sock_hash_delete_elem,2498 .map_delete_elem = sock_hash_delete_elem,
2499 .map_release_uref = sock_map_release,
2386};2500};
2387 2501
2388BPF_CALL_4(bpf_sock_map_update, struct bpf_sock_ops_kern *, bpf_sock,2502BPF_CALL_4(bpf_sock_map_update, struct bpf_sock_ops_kern *, bpf_sock,
kernel/bpf/syscall.c+21−78
@@ -1483,8 +1483,6 @@ out_free_tp: · 1482 unmodified lines
1483 return err;1483 return err;
1484}1484}
1485 1485
1486#ifdef CONFIG_CGROUP_BPF
1487
1488static int bpf_prog_attach_check_attach_type(const struct bpf_prog *prog,1486static int bpf_prog_attach_check_attach_type(const struct bpf_prog *prog,
1489 enum bpf_attach_type attach_type)1487 enum bpf_attach_type attach_type)
1490{1488{
@@ -1499,40 +1497,6 @@ static int bpf_prog_attach_check_attach_type(const struct bpf_prog *prog, · 8 unmodified lines
1499 1497
1500#define BPF_PROG_ATTACH_LAST_FIELD attach_flags1498#define BPF_PROG_ATTACH_LAST_FIELD attach_flags
1501 1499
1502static int sockmap_get_from_fd(const union bpf_attr *attr,
1503 int type, bool attach)
1504{
1505 struct bpf_prog *prog = NULL;
1506 int ufd = attr->target_fd;
1507 struct bpf_map *map;
1508 struct fd f;
1509 int err;
1510
1511 f = fdget(ufd);
1512 map = __bpf_map_get(f);
1513 if (IS_ERR(map))
1514 return PTR_ERR(map);
1515
1516 if (attach) {
1517 prog = bpf_prog_get_type(attr->attach_bpf_fd, type);
1518 if (IS_ERR(prog)) {
1519 fdput(f);
1520 return PTR_ERR(prog);
1521 }
1522 }
1523
1524 err = sock_map_prog(map, prog, attr->attach_type);
1525 if (err) {
1526 fdput(f);
1527 if (prog)
1528 bpf_prog_put(prog);
1529 return err;
1530 }
1531
1532 fdput(f);
1533 return 0;
1534}
1535
1536#define BPF_F_ATTACH_MASK \1500#define BPF_F_ATTACH_MASK \
1537 (BPF_F_ALLOW_OVERRIDE | BPF_F_ALLOW_MULTI)1501 (BPF_F_ALLOW_OVERRIDE | BPF_F_ALLOW_MULTI)
1538 1502
@@ -1540,7 +1504,6 @@ static int bpf_prog_attach(const union bpf_attr *attr) · 1 unmodified line
1540{1504{
1541 enum bpf_prog_type ptype;1505 enum bpf_prog_type ptype;
1542 struct bpf_prog *prog;1506 struct bpf_prog *prog;
1543 struct cgroup *cgrp;
1544 int ret;1507 int ret;
1545 1508
1546 if (!capable(CAP_NET_ADMIN))1509 if (!capable(CAP_NET_ADMIN))
@@ -1577,12 +1540,15 @@ static int bpf_prog_attach(const union bpf_attr *attr) · 30 unmodified lines
1577 ptype = BPF_PROG_TYPE_CGROUP_DEVICE;1540 ptype = BPF_PROG_TYPE_CGROUP_DEVICE;
1578 break;1541 break;
1579 case BPF_SK_MSG_VERDICT:1542 case BPF_SK_MSG_VERDICT:
1580 return sockmap_get_from_fd(attr, BPF_PROG_TYPE_SK_MSG, true);1543 ptype = BPF_PROG_TYPE_SK_MSG;
1544 break;
1581 case BPF_SK_SKB_STREAM_PARSER:1545 case BPF_SK_SKB_STREAM_PARSER:
1582 case BPF_SK_SKB_STREAM_VERDICT:1546 case BPF_SK_SKB_STREAM_VERDICT:
1583 return sockmap_get_from_fd(attr, BPF_PROG_TYPE_SK_SKB, true);1547 ptype = BPF_PROG_TYPE_SK_SKB;
1548 break;
1584 case BPF_LIRC_MODE2:1549 case BPF_LIRC_MODE2:
1585 return lirc_prog_attach(attr);1550 ptype = BPF_PROG_TYPE_LIRC_MODE2;
1551 break;
1586 default:1552 default:
1587 return -EINVAL;1553 return -EINVAL;
1588 }1554 }
@@ -1596,18 +1562,20 @@ static int bpf_prog_attach(const union bpf_attr *attr) · 7 unmodified lines
1596 return -EINVAL;1562 return -EINVAL;
1597 }1563 }
1598 1564
1599 cgrp = cgroup_get_from_fd(attr->target_fd);1565 switch (ptype) {
1600 if (IS_ERR(cgrp)) {1566 case BPF_PROG_TYPE_SK_SKB:
1601 bpf_prog_put(prog);1567 case BPF_PROG_TYPE_SK_MSG:
1602 return PTR_ERR(cgrp);1568 ret = sockmap_get_from_fd(attr, ptype, prog);
1569 break;
1570 case BPF_PROG_TYPE_LIRC_MODE2:
1571 ret = lirc_prog_attach(attr, prog);
1572 break;
1573 default:
1574 ret = cgroup_bpf_prog_attach(attr, ptype, prog);
1603 }1575 }
1604 1576
1605 ret = cgroup_bpf_attach(cgrp, prog, attr->attach_type,
1606 attr->attach_flags);
1607 if (ret)1577 if (ret)
1608 bpf_prog_put(prog);1578 bpf_prog_put(prog);
1609 cgroup_put(cgrp);
1610
1611 return ret;1579 return ret;
1612}1580}
1613 1581
@@ -1616,9 +1584,6 @@ static int bpf_prog_attach(const union bpf_attr *attr) · 2 unmodified lines
1616static int bpf_prog_detach(const union bpf_attr *attr)1584static int bpf_prog_detach(const union bpf_attr *attr)
1617{1585{
1618 enum bpf_prog_type ptype;1586 enum bpf_prog_type ptype;
1619 struct bpf_prog *prog;
1620 struct cgroup *cgrp;
1621 int ret;
1622 1587
1623 if (!capable(CAP_NET_ADMIN))1588 if (!capable(CAP_NET_ADMIN))
1624 return -EPERM;1589 return -EPERM;
@@ -1651,29 +1616,17 @@ static int bpf_prog_detach(const union bpf_attr *attr) · 26 unmodified lines
1651 ptype = BPF_PROG_TYPE_CGROUP_DEVICE;1616 ptype = BPF_PROG_TYPE_CGROUP_DEVICE;
1652 break;1617 break;
1653 case BPF_SK_MSG_VERDICT:1618 case BPF_SK_MSG_VERDICT:
1654 return sockmap_get_from_fd(attr, BPF_PROG_TYPE_SK_MSG, false);1619 return sockmap_get_from_fd(attr, BPF_PROG_TYPE_SK_MSG, NULL);
1655 case BPF_SK_SKB_STREAM_PARSER:1620 case BPF_SK_SKB_STREAM_PARSER:
1656 case BPF_SK_SKB_STREAM_VERDICT:1621 case BPF_SK_SKB_STREAM_VERDICT:
1657 return sockmap_get_from_fd(attr, BPF_PROG_TYPE_SK_SKB, false);1622 return sockmap_get_from_fd(attr, BPF_PROG_TYPE_SK_SKB, NULL);
1658 case BPF_LIRC_MODE2:1623 case BPF_LIRC_MODE2:
1659 return lirc_prog_detach(attr);1624 return lirc_prog_detach(attr);
1660 default:1625 default:
1661 return -EINVAL;1626 return -EINVAL;
1662 }1627 }
1663 1628
1664 cgrp = cgroup_get_from_fd(attr->target_fd);1629 return cgroup_bpf_prog_detach(attr, ptype);
1665 if (IS_ERR(cgrp))
1666 return PTR_ERR(cgrp);
1667
1668 prog = bpf_prog_get_type(attr->attach_bpf_fd, ptype);
1669 if (IS_ERR(prog))
1670 prog = NULL;
1671
1672 ret = cgroup_bpf_detach(cgrp, prog, attr->attach_type, 0);
1673 if (prog)
1674 bpf_prog_put(prog);
1675 cgroup_put(cgrp);
1676 return ret;
1677}1630}
1678 1631
1679#define BPF_PROG_QUERY_LAST_FIELD query.prog_cnt1632#define BPF_PROG_QUERY_LAST_FIELD query.prog_cnt
@@ -1681,9 +1634,6 @@ static int bpf_prog_detach(const union bpf_attr *attr) · 1 unmodified line
1681static int bpf_prog_query(const union bpf_attr *attr,1634static int bpf_prog_query(const union bpf_attr *attr,
1682 union bpf_attr __user *uattr)1635 union bpf_attr __user *uattr)
1683{1636{
1684 struct cgroup *cgrp;
1685 int ret;
1686
1687 if (!capable(CAP_NET_ADMIN))1637 if (!capable(CAP_NET_ADMIN))
1688 return -EPERM;1638 return -EPERM;
1689 if (CHECK_ATTR(BPF_PROG_QUERY))1639 if (CHECK_ATTR(BPF_PROG_QUERY))
@@ -1711,14 +1661,9 @@ static int bpf_prog_query(const union bpf_attr *attr, · 21 unmodified lines
1711 default:1661 default:
1712 return -EINVAL;1662 return -EINVAL;
1713 }1663 }
1714 cgrp = cgroup_get_from_fd(attr->query.target_fd);1664
1715 if (IS_ERR(cgrp))1665 return cgroup_bpf_prog_query(attr, uattr);
1716 return PTR_ERR(cgrp);
1717 ret = cgroup_bpf_query(cgrp, attr, uattr);
1718 cgroup_put(cgrp);
1719 return ret;
1720}1666}
1721#endif /* CONFIG_CGROUP_BPF */
1722 1667
1723#define BPF_PROG_TEST_RUN_LAST_FIELD test.duration1668#define BPF_PROG_TEST_RUN_LAST_FIELD test.duration
1724 1669
@@ -2365,7 +2310,6 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz · 640 unmodified lines
2365 case BPF_OBJ_GET:2310 case BPF_OBJ_GET:
2366 err = bpf_obj_get(&attr);2311 err = bpf_obj_get(&attr);
2367 break;2312 break;
2368#ifdef CONFIG_CGROUP_BPF
2369 case BPF_PROG_ATTACH:2313 case BPF_PROG_ATTACH:
2370 err = bpf_prog_attach(&attr);2314 err = bpf_prog_attach(&attr);
2371 break;2315 break;
@@ -2375,7 +2319,6 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz · 3 unmodified lines
2375 case BPF_PROG_QUERY:2319 case BPF_PROG_QUERY:
2376 err = bpf_prog_query(&attr, uattr);2320 err = bpf_prog_query(&attr, uattr);
2377 break;2321 break;
2378#endif
2379 case BPF_PROG_TEST_RUN:2322 case BPF_PROG_TEST_RUN:
2380 err = bpf_prog_test_run(&attr, uattr);2323 err = bpf_prog_test_run(&attr, uattr);
2381 break;2324 break;
kernel/dma/swiotlb.c+1−0
@@ -1085,3 +1085,4 @@ const struct dma_map_ops swiotlb_dma_ops = { · 1084 unmodified lines
1085 .unmap_page = swiotlb_unmap_page,1085 .unmap_page = swiotlb_unmap_page,
1086 .dma_supported = dma_direct_supported,1086 .dma_supported = dma_direct_supported,
1087};1087};
1088EXPORT_SYMBOL(swiotlb_dma_ops);
kernel/events/core.c+1−1
@@ -6482,7 +6482,7 @@ void perf_prepare_sample(struct perf_event_header *header, · 6481 unmodified lines
6482 data->phys_addr = perf_virt_to_phys(data->addr);6482 data->phys_addr = perf_virt_to_phys(data->addr);
6483}6483}
6484 6484
6485static void __always_inline6485static __always_inline void
6486__perf_event_output(struct perf_event *event,6486__perf_event_output(struct perf_event *event,
6487 struct perf_sample_data *data,6487 struct perf_sample_data *data,
6488 struct pt_regs *regs,6488 struct pt_regs *regs,
lib/Kconfig.kasan+1−0
@@ -6,6 +6,7 @@ if HAVE_ARCH_KASAN · 5 unmodified lines
6config KASAN6config KASAN
7 bool "KASan: runtime memory debugger"7 bool "KASan: runtime memory debugger"
8 depends on SLUB || (SLAB && !DEBUG_SLAB)8 depends on SLUB || (SLAB && !DEBUG_SLAB)
9 select SLUB_DEBUG if SLUB
9 select CONSTRUCTORS10 select CONSTRUCTORS
10 select STACKDEPOT11 select STACKDEPOT
11 help12 help
lib/percpu_ida.c+1−1
@@ -141,7 +141,7 @@ int percpu_ida_alloc(struct percpu_ida *pool, int state) · 140 unmodified lines
141 spin_lock_irqsave(&tags->lock, flags);141 spin_lock_irqsave(&tags->lock, flags);
142 142
143 /* Fastpath */143 /* Fastpath */
144 if (likely(tags->nr_free >= 0)) {144 if (likely(tags->nr_free)) {
145 tag = tags->freelist[--tags->nr_free];145 tag = tags->freelist[--tags->nr_free];
146 spin_unlock_irqrestore(&tags->lock, flags);146 spin_unlock_irqrestore(&tags->lock, flags);
147 return tag;147 return tag;
lib/scatterlist.c+0−6
@@ -24,9 +24,6 @@ · 23 unmodified lines
24 **/24 **/
25struct scatterlist *sg_next(struct scatterlist *sg)25struct scatterlist *sg_next(struct scatterlist *sg)
26{26{
27#ifdef CONFIG_DEBUG_SG
28 BUG_ON(sg->sg_magic != SG_MAGIC);
29#endif
30 if (sg_is_last(sg))27 if (sg_is_last(sg))
31 return NULL;28 return NULL;
32 29
@@ -111,10 +108,7 @@ struct scatterlist *sg_last(struct scatterlist *sgl, unsigned int nents) · 78 unmodified lines
111 for_each_sg(sgl, sg, nents, i)108 for_each_sg(sgl, sg, nents, i)
112 ret = sg;109 ret = sg;
113 110
114#ifdef CONFIG_DEBUG_SG
115 BUG_ON(sgl[0].sg_magic != SG_MAGIC);
116 BUG_ON(!sg_is_last(ret));111 BUG_ON(!sg_is_last(ret));
117#endif
118 return ret;112 return ret;
119}113}
120EXPORT_SYMBOL(sg_last);114EXPORT_SYMBOL(sg_last);
lib/test_bpf.c+20−0
@@ -5282,21 +5282,31 @@ static struct bpf_test tests[] = { · 5281 unmodified lines
5282 { /* Mainly checking JIT here. */5282 { /* Mainly checking JIT here. */
5283 "BPF_MAXINSNS: Ctx heavy transformations",5283 "BPF_MAXINSNS: Ctx heavy transformations",
5284 { },5284 { },
5285#if defined(CONFIG_BPF_JIT_ALWAYS_ON) && defined(CONFIG_S390)
5286 CLASSIC | FLAG_EXPECTED_FAIL,
5287#else
5285 CLASSIC,5288 CLASSIC,
5289#endif
5286 { },5290 { },
5287 {5291 {
5288 { 1, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) },5292 { 1, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) },
5289 { 10, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) }5293 { 10, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) }
5290 },5294 },
5291 .fill_helper = bpf_fill_maxinsns6,5295 .fill_helper = bpf_fill_maxinsns6,
5296 .expected_errcode = -ENOTSUPP,
5292 },5297 },
5293 { /* Mainly checking JIT here. */5298 { /* Mainly checking JIT here. */
5294 "BPF_MAXINSNS: Call heavy transformations",5299 "BPF_MAXINSNS: Call heavy transformations",
5295 { },5300 { },
5301#if defined(CONFIG_BPF_JIT_ALWAYS_ON) && defined(CONFIG_S390)
5302 CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
5303#else
5296 CLASSIC | FLAG_NO_DATA,5304 CLASSIC | FLAG_NO_DATA,
5305#endif
5297 { },5306 { },
5298 { { 1, 0 }, { 10, 0 } },5307 { { 1, 0 }, { 10, 0 } },
5299 .fill_helper = bpf_fill_maxinsns7,5308 .fill_helper = bpf_fill_maxinsns7,
5309 .expected_errcode = -ENOTSUPP,
5300 },5310 },
5301 { /* Mainly checking JIT here. */5311 { /* Mainly checking JIT here. */
5302 "BPF_MAXINSNS: Jump heavy test",5312 "BPF_MAXINSNS: Jump heavy test",
@@ -5347,18 +5357,28 @@ static struct bpf_test tests[] = { · 44 unmodified lines
5347 {5357 {
5348 "BPF_MAXINSNS: exec all MSH",5358 "BPF_MAXINSNS: exec all MSH",
5349 { },5359 { },
5360#if defined(CONFIG_BPF_JIT_ALWAYS_ON) && defined(CONFIG_S390)
5361 CLASSIC | FLAG_EXPECTED_FAIL,
5362#else
5350 CLASSIC,5363 CLASSIC,
5364#endif
5351 { 0xfa, 0xfb, 0xfc, 0xfd, },5365 { 0xfa, 0xfb, 0xfc, 0xfd, },
5352 { { 4, 0xababab83 } },5366 { { 4, 0xababab83 } },
5353 .fill_helper = bpf_fill_maxinsns13,5367 .fill_helper = bpf_fill_maxinsns13,
5368 .expected_errcode = -ENOTSUPP,
5354 },5369 },
5355 {5370 {
5356 "BPF_MAXINSNS: ld_abs+get_processor_id",5371 "BPF_MAXINSNS: ld_abs+get_processor_id",
5357 { },5372 { },
5373#if defined(CONFIG_BPF_JIT_ALWAYS_ON) && defined(CONFIG_S390)
5374 CLASSIC | FLAG_EXPECTED_FAIL,
5375#else
5358 CLASSIC,5376 CLASSIC,
5377#endif
5359 { },5378 { },
5360 { { 1, 0xbee } },5379 { { 1, 0xbee } },
5361 .fill_helper = bpf_fill_ld_abs_get_processor_id,5380 .fill_helper = bpf_fill_ld_abs_get_processor_id,
5381 .expected_errcode = -ENOTSUPP,
5362 },5382 },
5363 /*5383 /*
5364 * LD_IND / LD_ABS on fragmented SKBs5384 * LD_IND / LD_ABS on fragmented SKBs
lib/test_printf.c+0−7
@@ -260,13 +260,6 @@ plain(void) · 259 unmodified lines
260{260{
261 int err;261 int err;
262 262
263 /*
264 * Make sure crng is ready. Otherwise we get "(ptrval)" instead
265 * of a hashed address when printing '%p' in plain_hash() and
266 * plain_format().
267 */
268 wait_for_random_bytes();
269
270 err = plain_hash();263 err = plain_hash();
271 if (err) {264 if (err) {
272 pr_warn("plain 'p' does not appear to be hashed\n");265 pr_warn("plain 'p' does not appear to be hashed\n");
mm/slab_common.c+4−0
@@ -567,10 +567,14 @@ static int shutdown_cache(struct kmem_cache *s) · 566 unmodified lines
567 list_del(&s->list);567 list_del(&s->list);
568 568
569 if (s->flags & SLAB_TYPESAFE_BY_RCU) {569 if (s->flags & SLAB_TYPESAFE_BY_RCU) {
570#ifdef SLAB_SUPPORTS_SYSFS
571 sysfs_slab_unlink(s);
572#endif
570 list_add_tail(&s->list, &slab_caches_to_rcu_destroy);573 list_add_tail(&s->list, &slab_caches_to_rcu_destroy);
571 schedule_work(&slab_caches_to_rcu_destroy_work);574 schedule_work(&slab_caches_to_rcu_destroy_work);
572 } else {575 } else {
573#ifdef SLAB_SUPPORTS_SYSFS576#ifdef SLAB_SUPPORTS_SYSFS
577 sysfs_slab_unlink(s);
574 sysfs_slab_release(s);578 sysfs_slab_release(s);
575#else579#else
576 slab_kmem_cache_release(s);580 slab_kmem_cache_release(s);
mm/slub.c+6−1
@@ -5667,7 +5667,6 @@ static void sysfs_slab_remove_workfn(struct work_struct *work) · 5666 unmodified lines
5667 kset_unregister(s->memcg_kset);5667 kset_unregister(s->memcg_kset);
5668#endif5668#endif
5669 kobject_uevent(&s->kobj, KOBJ_REMOVE);5669 kobject_uevent(&s->kobj, KOBJ_REMOVE);
5670 kobject_del(&s->kobj);
5671out:5670out:
5672 kobject_put(&s->kobj);5671 kobject_put(&s->kobj);
5673}5672}
@@ -5752,6 +5751,12 @@ static void sysfs_slab_remove(struct kmem_cache *s) · 78 unmodified lines
5752 schedule_work(&s->kobj_remove_work);5751 schedule_work(&s->kobj_remove_work);
5753}5752}
5754 5753
5754void sysfs_slab_unlink(struct kmem_cache *s)
5755{
5756 if (slab_state >= FULL)
5757 kobject_del(&s->kobj);
5758}
5759
5755void sysfs_slab_release(struct kmem_cache *s)5760void sysfs_slab_release(struct kmem_cache *s)
5756{5761{
5757 if (slab_state >= FULL)5762 if (slab_state >= FULL)
mm/vmstat.c+0−2
@@ -1796,11 +1796,9 @@ static void vmstat_update(struct work_struct *w) · 1795 unmodified lines
1796 * to occur in the future. Keep on running the1796 * to occur in the future. Keep on running the
1797 * update worker thread.1797 * update worker thread.
1798 */1798 */
1799 preempt_disable();
1800 queue_delayed_work_on(smp_processor_id(), mm_percpu_wq,1799 queue_delayed_work_on(smp_processor_id(), mm_percpu_wq,
1801 this_cpu_ptr(&vmstat_work),1800 this_cpu_ptr(&vmstat_work),
1802 round_jiffies_relative(sysctl_stat_interval));1801 round_jiffies_relative(sysctl_stat_interval));
1803 preempt_enable();
1804 }1802 }
1805}1803}
1806 1804
net/8021q/vlan.c+1−1
@@ -694,7 +694,7 @@ static struct sk_buff *vlan_gro_receive(struct list_head *head, · 693 unmodified lines
694out_unlock:694out_unlock:
695 rcu_read_unlock();695 rcu_read_unlock();
696out:696out:
697 NAPI_GRO_CB(skb)->flush |= flush;697 skb_gro_flush_final(skb, pp, flush);
698 698
699 return pp;699 return pp;
700}700}
net/Makefile+0−4
@@ -20,11 +20,7 @@ obj-$(CONFIG_TLS) += tls/ · 19 unmodified lines
20obj-$(CONFIG_XFRM) += xfrm/20obj-$(CONFIG_XFRM) += xfrm/
21obj-$(CONFIG_UNIX) += unix/21obj-$(CONFIG_UNIX) += unix/
22obj-$(CONFIG_NET) += ipv6/22obj-$(CONFIG_NET) += ipv6/
23ifneq ($(CC_CAN_LINK),y)
24$(warning CC cannot link executables. Skipping bpfilter.)
25else
26obj-$(CONFIG_BPFILTER) += bpfilter/23obj-$(CONFIG_BPFILTER) += bpfilter/
27endif
28obj-$(CONFIG_PACKET) += packet/24obj-$(CONFIG_PACKET) += packet/
29obj-$(CONFIG_NET_KEY) += key/25obj-$(CONFIG_NET_KEY) += key/
30obj-$(CONFIG_BRIDGE) += bridge/26obj-$(CONFIG_BRIDGE) += bridge/
net/appletalk/ddp.c+1−1
@@ -1869,7 +1869,7 @@ static const struct proto_ops atalk_dgram_ops = { · 1868 unmodified lines
1869 .socketpair = sock_no_socketpair,1869 .socketpair = sock_no_socketpair,
1870 .accept = sock_no_accept,1870 .accept = sock_no_accept,
1871 .getname = atalk_getname,1871 .getname = atalk_getname,
1872 .poll_mask = datagram_poll_mask,1872 .poll = datagram_poll,
1873 .ioctl = atalk_ioctl,1873 .ioctl = atalk_ioctl,
1874#ifdef CONFIG_COMPAT1874#ifdef CONFIG_COMPAT
1875 .compat_ioctl = atalk_compat_ioctl,1875 .compat_ioctl = atalk_compat_ioctl,
net/atm/common.c+8−3
@@ -647,11 +647,16 @@ out: · 646 unmodified lines
647 return error;647 return error;
648}648}
649 649
650__poll_t vcc_poll_mask(struct socket *sock, __poll_t events)650__poll_t vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
651{651{
652 struct sock *sk = sock->sk;652 struct sock *sk = sock->sk;
653 struct atm_vcc *vcc = ATM_SD(sock);653 struct atm_vcc *vcc;
654 __poll_t mask = 0;654 __poll_t mask;
655
656 sock_poll_wait(file, sk_sleep(sk), wait);
657 mask = 0;
658
659 vcc = ATM_SD(sock);
655 660
656 /* exceptional events */661 /* exceptional events */
657 if (sk->sk_err)662 if (sk->sk_err)
net/atm/common.h+1−1
@@ -17,7 +17,7 @@ int vcc_connect(struct socket *sock, int itf, short vpi, int vci); · 16 unmodified lines
17int vcc_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,17int vcc_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
18 int flags);18 int flags);
19int vcc_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len);19int vcc_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len);
20__poll_t vcc_poll_mask(struct socket *sock, __poll_t events);20__poll_t vcc_poll(struct file *file, struct socket *sock, poll_table *wait);
21int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);21int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
22int vcc_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);22int vcc_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
23int vcc_setsockopt(struct socket *sock, int level, int optname,23int vcc_setsockopt(struct socket *sock, int level, int optname,
net/atm/pvc.c+1−1
@@ -113,7 +113,7 @@ static const struct proto_ops pvc_proto_ops = { · 112 unmodified lines
113 .socketpair = sock_no_socketpair,113 .socketpair = sock_no_socketpair,
114 .accept = sock_no_accept,114 .accept = sock_no_accept,
115 .getname = pvc_getname,115 .getname = pvc_getname,
116 .poll_mask = vcc_poll_mask,116 .poll = vcc_poll,
117 .ioctl = vcc_ioctl,117 .ioctl = vcc_ioctl,
118#ifdef CONFIG_COMPAT118#ifdef CONFIG_COMPAT
119 .compat_ioctl = vcc_compat_ioctl,119 .compat_ioctl = vcc_compat_ioctl,
net/atm/svc.c+1−1
@@ -636,7 +636,7 @@ static const struct proto_ops svc_proto_ops = { · 635 unmodified lines
636 .socketpair = sock_no_socketpair,636 .socketpair = sock_no_socketpair,
637 .accept = svc_accept,637 .accept = svc_accept,
638 .getname = svc_getname,638 .getname = svc_getname,
639 .poll_mask = vcc_poll_mask,639 .poll = vcc_poll,
640 .ioctl = svc_ioctl,640 .ioctl = svc_ioctl,
641#ifdef CONFIG_COMPAT641#ifdef CONFIG_COMPAT
642 .compat_ioctl = svc_compat_ioctl,642 .compat_ioctl = svc_compat_ioctl,
net/ax25/af_ax25.c+1−1
@@ -1941,7 +1941,7 @@ static const struct proto_ops ax25_proto_ops = { · 1940 unmodified lines
1941 .socketpair = sock_no_socketpair,1941 .socketpair = sock_no_socketpair,
1942 .accept = ax25_accept,1942 .accept = ax25_accept,
1943 .getname = ax25_getname,1943 .getname = ax25_getname,
1944 .poll_mask = datagram_poll_mask,1944 .poll = datagram_poll,
1945 .ioctl = ax25_ioctl,1945 .ioctl = ax25_ioctl,
1946 .listen = ax25_listen,1946 .listen = ax25_listen,
1947 .shutdown = ax25_shutdown,1947 .shutdown = ax25_shutdown,
net/bluetooth/af_bluetooth.c+5−2
@@ -437,13 +437,16 @@ static inline __poll_t bt_accept_poll(struct sock *parent) · 436 unmodified lines
437 return 0;437 return 0;
438}438}
439 439
440__poll_t bt_sock_poll_mask(struct socket *sock, __poll_t events)440__poll_t bt_sock_poll(struct file *file, struct socket *sock,
441 poll_table *wait)
441{442{
442 struct sock *sk = sock->sk;443 struct sock *sk = sock->sk;
443 __poll_t mask = 0;444 __poll_t mask = 0;
444 445
445 BT_DBG("sock %p, sk %p", sock, sk);446 BT_DBG("sock %p, sk %p", sock, sk);
446 447
448 poll_wait(file, sk_sleep(sk), wait);
449
447 if (sk->sk_state == BT_LISTEN)450 if (sk->sk_state == BT_LISTEN)
448 return bt_accept_poll(sk);451 return bt_accept_poll(sk);
449 452
@@ -475,7 +478,7 @@ __poll_t bt_sock_poll_mask(struct socket *sock, __poll_t events) · 25 unmodified lines
475 478
476 return mask;479 return mask;
477}480}
478EXPORT_SYMBOL(bt_sock_poll_mask);481EXPORT_SYMBOL(bt_sock_poll);
479 482
480int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)483int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
481{484{
net/bluetooth/hci_sock.c+1−1
@@ -1975,7 +1975,7 @@ static const struct proto_ops hci_sock_ops = { · 1974 unmodified lines
1975 .sendmsg = hci_sock_sendmsg,1975 .sendmsg = hci_sock_sendmsg,
1976 .recvmsg = hci_sock_recvmsg,1976 .recvmsg = hci_sock_recvmsg,
1977 .ioctl = hci_sock_ioctl,1977 .ioctl = hci_sock_ioctl,
1978 .poll_mask = datagram_poll_mask,1978 .poll = datagram_poll,
1979 .listen = sock_no_listen,1979 .listen = sock_no_listen,
1980 .shutdown = sock_no_shutdown,1980 .shutdown = sock_no_shutdown,
1981 .setsockopt = hci_sock_setsockopt,1981 .setsockopt = hci_sock_setsockopt,
net/bluetooth/l2cap_sock.c+1−1
@@ -1653,7 +1653,7 @@ static const struct proto_ops l2cap_sock_ops = { · 1652 unmodified lines
1653 .getname = l2cap_sock_getname,1653 .getname = l2cap_sock_getname,
1654 .sendmsg = l2cap_sock_sendmsg,1654 .sendmsg = l2cap_sock_sendmsg,
1655 .recvmsg = l2cap_sock_recvmsg,1655 .recvmsg = l2cap_sock_recvmsg,
1656 .poll_mask = bt_sock_poll_mask,1656 .poll = bt_sock_poll,
1657 .ioctl = bt_sock_ioctl,1657 .ioctl = bt_sock_ioctl,
1658 .mmap = sock_no_mmap,1658 .mmap = sock_no_mmap,
1659 .socketpair = sock_no_socketpair,1659 .socketpair = sock_no_socketpair,
net/bluetooth/rfcomm/sock.c+1−1
@@ -1049,7 +1049,7 @@ static const struct proto_ops rfcomm_sock_ops = { · 1048 unmodified lines
1049 .setsockopt = rfcomm_sock_setsockopt,1049 .setsockopt = rfcomm_sock_setsockopt,
1050 .getsockopt = rfcomm_sock_getsockopt,1050 .getsockopt = rfcomm_sock_getsockopt,
1051 .ioctl = rfcomm_sock_ioctl,1051 .ioctl = rfcomm_sock_ioctl,
1052 .poll_mask = bt_sock_poll_mask,1052 .poll = bt_sock_poll,
1053 .socketpair = sock_no_socketpair,1053 .socketpair = sock_no_socketpair,
1054 .mmap = sock_no_mmap1054 .mmap = sock_no_mmap
1055};1055};
net/bluetooth/sco.c+1−1
@@ -1197,7 +1197,7 @@ static const struct proto_ops sco_sock_ops = { · 1196 unmodified lines
1197 .getname = sco_sock_getname,1197 .getname = sco_sock_getname,
1198 .sendmsg = sco_sock_sendmsg,1198 .sendmsg = sco_sock_sendmsg,
1199 .recvmsg = sco_sock_recvmsg,1199 .recvmsg = sco_sock_recvmsg,
1200 .poll_mask = bt_sock_poll_mask,1200 .poll = bt_sock_poll,
1201 .ioctl = bt_sock_ioctl,1201 .ioctl = bt_sock_ioctl,
1202 .mmap = sock_no_mmap,1202 .mmap = sock_no_mmap,
1203 .socketpair = sock_no_socketpair,1203 .socketpair = sock_no_socketpair,
net/bpfilter/Kconfig+1−1
@@ -1,6 +1,5 @@
1menuconfig BPFILTER1menuconfig BPFILTER
2 bool "BPF based packet filtering framework (BPFILTER)"2 bool "BPF based packet filtering framework (BPFILTER)"
3 default n
4 depends on NET && BPF && INET3 depends on NET && BPF && INET
5 help4 help
6 This builds experimental bpfilter framework that is aiming to5 This builds experimental bpfilter framework that is aiming to
@@ -9,6 +8,7 @@ menuconfig BPFILTER · 2 unmodified lines
9if BPFILTER8if BPFILTER
10config BPFILTER_UMH9config BPFILTER_UMH
11 tristate "bpfilter kernel module with user mode helper"10 tristate "bpfilter kernel module with user mode helper"
11 depends on $(success,$(srctree)/scripts/cc-can-link.sh $(CC))
12 default m12 default m
13 help13 help
14 This builds bpfilter kernel module with embedded user mode helper14 This builds bpfilter kernel module with embedded user mode helper
net/bpfilter/Makefile+2−15
@@ -15,20 +15,7 @@ ifeq ($(CONFIG_BPFILTER_UMH), y) · 14 unmodified lines
15HOSTLDFLAGS += -static15HOSTLDFLAGS += -static
16endif16endif
17 17
18# a bit of elf magic to convert bpfilter_umh binary into a binary blob18$(obj)/bpfilter_umh_blob.o: $(obj)/bpfilter_umh
19# inside bpfilter_umh.o elf file referenced by
20# _binary_net_bpfilter_bpfilter_umh_start symbol
21# which bpfilter_kern.c passes further into umh blob loader at run-time
22quiet_cmd_copy_umh = GEN $@
23 cmd_copy_umh = echo ':' > $(obj)/.bpfilter_umh.o.cmd; \
24 $(OBJCOPY) -I binary \
25 `LC_ALL=C $(OBJDUMP) -f net/bpfilter/bpfilter_umh \
26 |awk -F' |,' '/file format/{print "-O",$$NF} \
27 /^architecture:/{print "-B",$$2}'` \
28 --rename-section .data=.init.rodata $< $@
29
30$(obj)/bpfilter_umh.o: $(obj)/bpfilter_umh
31 $(call cmd,copy_umh)
32 19
33obj-$(CONFIG_BPFILTER_UMH) += bpfilter.o20obj-$(CONFIG_BPFILTER_UMH) += bpfilter.o
34bpfilter-objs += bpfilter_kern.o bpfilter_umh.o21bpfilter-objs += bpfilter_kern.o bpfilter_umh_blob.o
net/bpfilter/bpfilter_kern.c+5−6
@@ -10,11 +10,8 @@ · 9 unmodified lines
10#include <linux/file.h>10#include <linux/file.h>
11#include "msgfmt.h"11#include "msgfmt.h"
12 12
13#define UMH_start _binary_net_bpfilter_bpfilter_umh_start13extern char bpfilter_umh_start;
14#define UMH_end _binary_net_bpfilter_bpfilter_umh_end14extern char bpfilter_umh_end;
15
16extern char UMH_start;
17extern char UMH_end;
18 15
19static struct umh_info info;16static struct umh_info info;
20/* since ip_getsockopt() can run in parallel, serialize access to umh */17/* since ip_getsockopt() can run in parallel, serialize access to umh */
@@ -93,7 +90,9 @@ static int __init load_umh(void) · 72 unmodified lines
93 int err;90 int err;
94 91
95 /* fork usermode process */92 /* fork usermode process */
96 err = fork_usermode_blob(&UMH_start, &UMH_end - &UMH_start, &info);93 err = fork_usermode_blob(&bpfilter_umh_start,
94 &bpfilter_umh_end - &bpfilter_umh_start,
95 &info);
97 if (err)96 if (err)
98 return err;97 return err;
99 pr_info("Loaded bpfilter_umh pid %d\n", info.pid);98 pr_info("Loaded bpfilter_umh pid %d\n", info.pid);
net/bpfilter/bpfilter_umh_blob.S+7−0
@@ -0,0 +1,7 @@
1/* SPDX-License-Identifier: GPL-2.0 */
2 .section .init.rodata, "a"
3 .global bpfilter_umh_start
4bpfilter_umh_start:
5 .incbin "net/bpfilter/bpfilter_umh"
6 .global bpfilter_umh_end
7bpfilter_umh_end:
net/caif/caif_socket.c+8−4
@@ -934,11 +934,15 @@ static int caif_release(struct socket *sock) · 933 unmodified lines
934}934}
935 935
936/* Copied from af_unix.c:unix_poll(), added CAIF tx_flow handling */936/* Copied from af_unix.c:unix_poll(), added CAIF tx_flow handling */
937static __poll_t caif_poll_mask(struct socket *sock, __poll_t events)937static __poll_t caif_poll(struct file *file,
938 struct socket *sock, poll_table *wait)
938{939{
939 struct sock *sk = sock->sk;940 struct sock *sk = sock->sk;
941 __poll_t mask;
940 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);942 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
941 __poll_t mask = 0;943
944 sock_poll_wait(file, sk_sleep(sk), wait);
945 mask = 0;
942 946
943 /* exceptional events? */947 /* exceptional events? */
944 if (sk->sk_err)948 if (sk->sk_err)
@@ -972,7 +976,7 @@ static const struct proto_ops caif_seqpacket_ops = { · 27 unmodified lines
972 .socketpair = sock_no_socketpair,976 .socketpair = sock_no_socketpair,
973 .accept = sock_no_accept,977 .accept = sock_no_accept,
974 .getname = sock_no_getname,978 .getname = sock_no_getname,
975 .poll_mask = caif_poll_mask,979 .poll = caif_poll,
976 .ioctl = sock_no_ioctl,980 .ioctl = sock_no_ioctl,
977 .listen = sock_no_listen,981 .listen = sock_no_listen,
978 .shutdown = sock_no_shutdown,982 .shutdown = sock_no_shutdown,
@@ -993,7 +997,7 @@ static const struct proto_ops caif_stream_ops = { · 14 unmodified lines
993 .socketpair = sock_no_socketpair,997 .socketpair = sock_no_socketpair,
994 .accept = sock_no_accept,998 .accept = sock_no_accept,
995 .getname = sock_no_getname,999 .getname = sock_no_getname,
996 .poll_mask = caif_poll_mask,1000 .poll = caif_poll,
997 .ioctl = sock_no_ioctl,1001 .ioctl = sock_no_ioctl,
998 .listen = sock_no_listen,1002 .listen = sock_no_listen,
999 .shutdown = sock_no_shutdown,1003 .shutdown = sock_no_shutdown,
net/can/bcm.c+1−1
@@ -1660,7 +1660,7 @@ static const struct proto_ops bcm_ops = { · 1659 unmodified lines
1660 .socketpair = sock_no_socketpair,1660 .socketpair = sock_no_socketpair,
1661 .accept = sock_no_accept,1661 .accept = sock_no_accept,
1662 .getname = sock_no_getname,1662 .getname = sock_no_getname,
1663 .poll_mask = datagram_poll_mask,1663 .poll = datagram_poll,
1664 .ioctl = can_ioctl, /* use can_ioctl() from af_can.c */1664 .ioctl = can_ioctl, /* use can_ioctl() from af_can.c */
1665 .listen = sock_no_listen,1665 .listen = sock_no_listen,
1666 .shutdown = sock_no_shutdown,1666 .shutdown = sock_no_shutdown,
net/can/raw.c+1−1
@@ -843,7 +843,7 @@ static const struct proto_ops raw_ops = { · 842 unmodified lines
843 .socketpair = sock_no_socketpair,843 .socketpair = sock_no_socketpair,
844 .accept = sock_no_accept,844 .accept = sock_no_accept,
845 .getname = raw_getname,845 .getname = raw_getname,
846 .poll_mask = datagram_poll_mask,846 .poll = datagram_poll,
847 .ioctl = can_ioctl, /* use can_ioctl() from af_can.c */847 .ioctl = can_ioctl, /* use can_ioctl() from af_can.c */
848 .listen = sock_no_listen,848 .listen = sock_no_listen,
849 .shutdown = sock_no_shutdown,849 .shutdown = sock_no_shutdown,
net/core/datagram.c+9−4
@@ -819,8 +819,9 @@ EXPORT_SYMBOL(skb_copy_and_csum_datagram_msg); · 818 unmodified lines
819 819
820/**820/**
821 * datagram_poll - generic datagram poll821 * datagram_poll - generic datagram poll
822 * @file: file struct
822 * @sock: socket823 * @sock: socket
823 * @events to wait for824 * @wait: poll table
824 *825 *
825 * Datagram poll: Again totally generic. This also handles826 * Datagram poll: Again totally generic. This also handles
826 * sequenced packet sockets providing the socket receive queue827 * sequenced packet sockets providing the socket receive queue
@@ -830,10 +831,14 @@ EXPORT_SYMBOL(skb_copy_and_csum_datagram_msg); · 3 unmodified lines
830 * and you use a different write policy from sock_writeable()831 * and you use a different write policy from sock_writeable()
831 * then please supply your own write_space callback.832 * then please supply your own write_space callback.
832 */833 */
833__poll_t datagram_poll_mask(struct socket *sock, __poll_t events)834__poll_t datagram_poll(struct file *file, struct socket *sock,
835 poll_table *wait)
834{836{
835 struct sock *sk = sock->sk;837 struct sock *sk = sock->sk;
836 __poll_t mask = 0;838 __poll_t mask;
839
840 sock_poll_wait(file, sk_sleep(sk), wait);
841 mask = 0;
837 842
838 /* exceptional events? */843 /* exceptional events? */
839 if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))844 if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
@@ -866,4 +871,4 @@ __poll_t datagram_poll_mask(struct socket *sock, __poll_t events) · 26 unmodified lines
866 871
867 return mask;872 return mask;
868}873}
869EXPORT_SYMBOL(datagram_poll_mask);874EXPORT_SYMBOL(datagram_poll);
net/core/dev_ioctl.c+2−9
@@ -285,16 +285,9 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd) · 284 unmodified lines
285 if (ifr->ifr_qlen < 0)285 if (ifr->ifr_qlen < 0)
286 return -EINVAL;286 return -EINVAL;
287 if (dev->tx_queue_len ^ ifr->ifr_qlen) {287 if (dev->tx_queue_len ^ ifr->ifr_qlen) {
288 unsigned int orig_len = dev->tx_queue_len;288 err = dev_change_tx_queue_len(dev, ifr->ifr_qlen);
289 289 if (err)
290 dev->tx_queue_len = ifr->ifr_qlen;
291 err = call_netdevice_notifiers(
292 NETDEV_CHANGE_TX_QUEUE_LEN, dev);
293 err = notifier_to_errno(err);
294 if (err) {
295 dev->tx_queue_len = orig_len;
296 return err;290 return err;
297 }
298 }291 }
299 return 0;292 return 0;
300 293
net/core/fib_rules.c+79−1
@@ -416,6 +416,14 @@ static struct fib_rule *rule_find(struct fib_rules_ops *ops, · 415 unmodified lines
416 if (rule->mark && r->mark != rule->mark)416 if (rule->mark && r->mark != rule->mark)
417 continue;417 continue;
418 418
419 if (rule->suppress_ifgroup != -1 &&
420 r->suppress_ifgroup != rule->suppress_ifgroup)
421 continue;
422
423 if (rule->suppress_prefixlen != -1 &&
424 r->suppress_prefixlen != rule->suppress_prefixlen)
425 continue;
426
419 if (rule->mark_mask && r->mark_mask != rule->mark_mask)427 if (rule->mark_mask && r->mark_mask != rule->mark_mask)
420 continue;428 continue;
421 429
@@ -436,6 +444,9 @@ static struct fib_rule *rule_find(struct fib_rules_ops *ops, · 14 unmodified lines
436 if (rule->ip_proto && r->ip_proto != rule->ip_proto)444 if (rule->ip_proto && r->ip_proto != rule->ip_proto)
437 continue;445 continue;
438 446
447 if (rule->proto && r->proto != rule->proto)
448 continue;
449
439 if (fib_rule_port_range_set(&rule->sport_range) &&450 if (fib_rule_port_range_set(&rule->sport_range) &&
440 !fib_rule_port_range_compare(&r->sport_range,451 !fib_rule_port_range_compare(&r->sport_range,
441 &rule->sport_range))452 &rule->sport_range))
@@ -645,6 +656,73 @@ errout: · 203 unmodified lines
645 return err;656 return err;
646}657}
647 658
659static int rule_exists(struct fib_rules_ops *ops, struct fib_rule_hdr *frh,
660 struct nlattr **tb, struct fib_rule *rule)
661{
662 struct fib_rule *r;
663
664 list_for_each_entry(r, &ops->rules_list, list) {
665 if (r->action != rule->action)
666 continue;
667
668 if (r->table != rule->table)
669 continue;
670
671 if (r->pref != rule->pref)
672 continue;
673
674 if (memcmp(r->iifname, rule->iifname, IFNAMSIZ))
675 continue;
676
677 if (memcmp(r->oifname, rule->oifname, IFNAMSIZ))
678 continue;
679
680 if (r->mark != rule->mark)
681 continue;
682
683 if (r->suppress_ifgroup != rule->suppress_ifgroup)
684 continue;
685
686 if (r->suppress_prefixlen != rule->suppress_prefixlen)
687 continue;
688
689 if (r->mark_mask != rule->mark_mask)
690 continue;
691
692 if (r->tun_id != rule->tun_id)
693 continue;
694
695 if (r->fr_net != rule->fr_net)
696 continue;
697
698 if (r->l3mdev != rule->l3mdev)
699 continue;
700
701 if (!uid_eq(r->uid_range.start, rule->uid_range.start) ||
702 !uid_eq(r->uid_range.end, rule->uid_range.end))
703 continue;
704
705 if (r->ip_proto != rule->ip_proto)
706 continue;
707
708 if (r->proto != rule->proto)
709 continue;
710
711 if (!fib_rule_port_range_compare(&r->sport_range,
712 &rule->sport_range))
713 continue;
714
715 if (!fib_rule_port_range_compare(&r->dport_range,
716 &rule->dport_range))
717 continue;
718
719 if (!ops->compare(r, frh, tb))
720 continue;
721 return 1;
722 }
723 return 0;
724}
725
648int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh,726int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh,
649 struct netlink_ext_ack *extack)727 struct netlink_ext_ack *extack)
650{728{
@@ -679,7 +757,7 @@ int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh, · 28 unmodified lines
679 goto errout;757 goto errout;
680 758
681 if ((nlh->nlmsg_flags & NLM_F_EXCL) &&759 if ((nlh->nlmsg_flags & NLM_F_EXCL) &&
682 rule_find(ops, frh, tb, rule, user_priority)) {760 rule_exists(ops, frh, tb, rule)) {
683 err = -EEXIST;761 err = -EEXIST;
684 goto errout_free;762 goto errout_free;
685 }763 }
net/core/filter.c+54−32
@@ -4073,8 +4073,9 @@ static int bpf_fib_set_fwd_params(struct bpf_fib_lookup *params, · 4072 unmodified lines
4073 memcpy(params->smac, dev->dev_addr, ETH_ALEN);4073 memcpy(params->smac, dev->dev_addr, ETH_ALEN);
4074 params->h_vlan_TCI = 0;4074 params->h_vlan_TCI = 0;
4075 params->h_vlan_proto = 0;4075 params->h_vlan_proto = 0;
4076 params->ifindex = dev->ifindex;
4076 4077
4077 return dev->ifindex;4078 return 0;
4078}4079}
4079#endif4080#endif
4080 4081
@@ -4098,7 +4099,7 @@ static int bpf_ipv4_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 17 unmodified lines
4098 /* verify forwarding is enabled on this interface */4099 /* verify forwarding is enabled on this interface */
4099 in_dev = __in_dev_get_rcu(dev);4100 in_dev = __in_dev_get_rcu(dev);
4100 if (unlikely(!in_dev || !IN_DEV_FORWARD(in_dev)))4101 if (unlikely(!in_dev || !IN_DEV_FORWARD(in_dev)))
4101 return 0;4102 return BPF_FIB_LKUP_RET_FWD_DISABLED;
4102 4103
4103 if (flags & BPF_FIB_LOOKUP_OUTPUT) {4104 if (flags & BPF_FIB_LOOKUP_OUTPUT) {
4104 fl4.flowi4_iif = 1;4105 fl4.flowi4_iif = 1;
@@ -4123,7 +4124,7 @@ static int bpf_ipv4_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 18 unmodified lines
4123 4124
4124 tb = fib_get_table(net, tbid);4125 tb = fib_get_table(net, tbid);
4125 if (unlikely(!tb))4126 if (unlikely(!tb))
4126 return 0;4127 return BPF_FIB_LKUP_RET_NOT_FWDED;
4127 4128
4128 err = fib_table_lookup(tb, &fl4, &res, FIB_LOOKUP_NOREF);4129 err = fib_table_lookup(tb, &fl4, &res, FIB_LOOKUP_NOREF);
4129 } else {4130 } else {
@@ -4135,8 +4136,20 @@ static int bpf_ipv4_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 5 unmodified lines
4135 err = fib_lookup(net, &fl4, &res, FIB_LOOKUP_NOREF);4136 err = fib_lookup(net, &fl4, &res, FIB_LOOKUP_NOREF);
4136 }4137 }
4137 4138
4138 if (err || res.type != RTN_UNICAST)4139 if (err) {
4139 return 0;4140 /* map fib lookup errors to RTN_ type */
4141 if (err == -EINVAL)
4142 return BPF_FIB_LKUP_RET_BLACKHOLE;
4143 if (err == -EHOSTUNREACH)
4144 return BPF_FIB_LKUP_RET_UNREACHABLE;
4145 if (err == -EACCES)
4146 return BPF_FIB_LKUP_RET_PROHIBIT;
4147
4148 return BPF_FIB_LKUP_RET_NOT_FWDED;
4149 }
4150
4151 if (res.type != RTN_UNICAST)
4152 return BPF_FIB_LKUP_RET_NOT_FWDED;
4140 4153
4141 if (res.fi->fib_nhs > 1)4154 if (res.fi->fib_nhs > 1)
4142 fib_select_path(net, &res, &fl4, NULL);4155 fib_select_path(net, &res, &fl4, NULL);
@@ -4144,19 +4157,16 @@ static int bpf_ipv4_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 1 unmodified line
4144 if (check_mtu) {4157 if (check_mtu) {
4145 mtu = ip_mtu_from_fib_result(&res, params->ipv4_dst);4158 mtu = ip_mtu_from_fib_result(&res, params->ipv4_dst);
4146 if (params->tot_len > mtu)4159 if (params->tot_len > mtu)
4147 return 0;4160 return BPF_FIB_LKUP_RET_FRAG_NEEDED;
4148 }4161 }
4149 4162
4150 nh = &res.fi->fib_nh[res.nh_sel];4163 nh = &res.fi->fib_nh[res.nh_sel];
4151 4164
4152 /* do not handle lwt encaps right now */4165 /* do not handle lwt encaps right now */
4153 if (nh->nh_lwtstate)4166 if (nh->nh_lwtstate)
4154 return 0;4167 return BPF_FIB_LKUP_RET_UNSUPP_LWT;
4155 4168
4156 dev = nh->nh_dev;4169 dev = nh->nh_dev;
4157 if (unlikely(!dev))
4158 return 0;
4159
4160 if (nh->nh_gw)4170 if (nh->nh_gw)
4161 params->ipv4_dst = nh->nh_gw;4171 params->ipv4_dst = nh->nh_gw;
4162 4172
@@ -4166,10 +4176,10 @@ static int bpf_ipv4_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 3 unmodified lines
4166 * rcu_read_lock_bh is not needed here4176 * rcu_read_lock_bh is not needed here
4167 */4177 */
4168 neigh = __ipv4_neigh_lookup_noref(dev, (__force u32)params->ipv4_dst);4178 neigh = __ipv4_neigh_lookup_noref(dev, (__force u32)params->ipv4_dst);
4169 if (neigh)4179 if (!neigh)
4170 return bpf_fib_set_fwd_params(params, neigh, dev);4180 return BPF_FIB_LKUP_RET_NO_NEIGH;
4171 4181
4172 return 0;4182 return bpf_fib_set_fwd_params(params, neigh, dev);
4173}4183}
4174#endif4184#endif
4175 4185
@@ -4190,7 +4200,7 @@ static int bpf_ipv6_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 14 unmodified lines
4190 4200
4191 /* link local addresses are never forwarded */4201 /* link local addresses are never forwarded */
4192 if (rt6_need_strict(dst) || rt6_need_strict(src))4202 if (rt6_need_strict(dst) || rt6_need_strict(src))
4193 return 0;4203 return BPF_FIB_LKUP_RET_NOT_FWDED;
4194 4204
4195 dev = dev_get_by_index_rcu(net, params->ifindex);4205 dev = dev_get_by_index_rcu(net, params->ifindex);
4196 if (unlikely(!dev))4206 if (unlikely(!dev))
@@ -4198,7 +4208,7 @@ static int bpf_ipv6_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 1 unmodified line
4198 4208
4199 idev = __in6_dev_get_safely(dev);4209 idev = __in6_dev_get_safely(dev);
4200 if (unlikely(!idev || !net->ipv6.devconf_all->forwarding))4210 if (unlikely(!idev || !net->ipv6.devconf_all->forwarding))
4201 return 0;4211 return BPF_FIB_LKUP_RET_FWD_DISABLED;
4202 4212
4203 if (flags & BPF_FIB_LOOKUP_OUTPUT) {4213 if (flags & BPF_FIB_LOOKUP_OUTPUT) {
4204 fl6.flowi6_iif = 1;4214 fl6.flowi6_iif = 1;
@@ -4225,7 +4235,7 @@ static int bpf_ipv6_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 20 unmodified lines
4225 4235
4226 tb = ipv6_stub->fib6_get_table(net, tbid);4236 tb = ipv6_stub->fib6_get_table(net, tbid);
4227 if (unlikely(!tb))4237 if (unlikely(!tb))
4228 return 0;4238 return BPF_FIB_LKUP_RET_NOT_FWDED;
4229 4239
4230 f6i = ipv6_stub->fib6_table_lookup(net, tb, oif, &fl6, strict);4240 f6i = ipv6_stub->fib6_table_lookup(net, tb, oif, &fl6, strict);
4231 } else {4241 } else {
@@ -4238,11 +4248,23 @@ static int bpf_ipv6_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 6 unmodified lines
4238 }4248 }
4239 4249
4240 if (unlikely(IS_ERR_OR_NULL(f6i) || f6i == net->ipv6.fib6_null_entry))4250 if (unlikely(IS_ERR_OR_NULL(f6i) || f6i == net->ipv6.fib6_null_entry))
4241 return 0;4251 return BPF_FIB_LKUP_RET_NOT_FWDED;
4252
4253 if (unlikely(f6i->fib6_flags & RTF_REJECT)) {
4254 switch (f6i->fib6_type) {
4255 case RTN_BLACKHOLE:
4256 return BPF_FIB_LKUP_RET_BLACKHOLE;
4257 case RTN_UNREACHABLE:
4258 return BPF_FIB_LKUP_RET_UNREACHABLE;
4259 case RTN_PROHIBIT:
4260 return BPF_FIB_LKUP_RET_PROHIBIT;
4261 default:
4262 return BPF_FIB_LKUP_RET_NOT_FWDED;
4263 }
4264 }
4242 4265
4243 if (unlikely(f6i->fib6_flags & RTF_REJECT ||4266 if (f6i->fib6_type != RTN_UNICAST)
4244 f6i->fib6_type != RTN_UNICAST))4267 return BPF_FIB_LKUP_RET_NOT_FWDED;
4245 return 0;
4246 4268
4247 if (f6i->fib6_nsiblings && fl6.flowi6_oif == 0)4269 if (f6i->fib6_nsiblings && fl6.flowi6_oif == 0)
4248 f6i = ipv6_stub->fib6_multipath_select(net, f6i, &fl6,4270 f6i = ipv6_stub->fib6_multipath_select(net, f6i, &fl6,
@@ -4252,11 +4274,11 @@ static int bpf_ipv6_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 3 unmodified lines
4252 if (check_mtu) {4274 if (check_mtu) {
4253 mtu = ipv6_stub->ip6_mtu_from_fib6(f6i, dst, src);4275 mtu = ipv6_stub->ip6_mtu_from_fib6(f6i, dst, src);
4254 if (params->tot_len > mtu)4276 if (params->tot_len > mtu)
4255 return 0;4277 return BPF_FIB_LKUP_RET_FRAG_NEEDED;
4256 }4278 }
4257 4279
4258 if (f6i->fib6_nh.nh_lwtstate)4280 if (f6i->fib6_nh.nh_lwtstate)
4259 return 0;4281 return BPF_FIB_LKUP_RET_UNSUPP_LWT;
4260 4282
4261 if (f6i->fib6_flags & RTF_GATEWAY)4283 if (f6i->fib6_flags & RTF_GATEWAY)
4262 *dst = f6i->fib6_nh.nh_gw;4284 *dst = f6i->fib6_nh.nh_gw;
@@ -4270,10 +4292,10 @@ static int bpf_ipv6_fib_lookup(struct net *net, struct bpf_fib_lookup *params, · 7 unmodified lines
4270 */4292 */
4271 neigh = ___neigh_lookup_noref(ipv6_stub->nd_tbl, neigh_key_eq128,4293 neigh = ___neigh_lookup_noref(ipv6_stub->nd_tbl, neigh_key_eq128,
4272 ndisc_hashfn, dst, dev);4294 ndisc_hashfn, dst, dev);
4273 if (neigh)4295 if (!neigh)
4274 return bpf_fib_set_fwd_params(params, neigh, dev);4296 return BPF_FIB_LKUP_RET_NO_NEIGH;
4275 4297
4276 return 0;4298 return bpf_fib_set_fwd_params(params, neigh, dev);
4277}4299}
4278#endif4300#endif
4279 4301
@@ -4315,7 +4337,7 @@ BPF_CALL_4(bpf_skb_fib_lookup, struct sk_buff *, skb, · 35 unmodified lines
4315 struct bpf_fib_lookup *, params, int, plen, u32, flags)4337 struct bpf_fib_lookup *, params, int, plen, u32, flags)
4316{4338{
4317 struct net *net = dev_net(skb->dev);4339 struct net *net = dev_net(skb->dev);
4318 int index = -EAFNOSUPPORT;4340 int rc = -EAFNOSUPPORT;
4319 4341
4320 if (plen < sizeof(*params))4342 if (plen < sizeof(*params))
4321 return -EINVAL;4343 return -EINVAL;
@@ -4326,25 +4348,25 @@ BPF_CALL_4(bpf_skb_fib_lookup, struct sk_buff *, skb, · 4 unmodified lines
4326 switch (params->family) {4348 switch (params->family) {
4327#if IS_ENABLED(CONFIG_INET)4349#if IS_ENABLED(CONFIG_INET)
4328 case AF_INET:4350 case AF_INET:
4329 index = bpf_ipv4_fib_lookup(net, params, flags, false);4351 rc = bpf_ipv4_fib_lookup(net, params, flags, false);
4330 break;4352 break;
4331#endif4353#endif
4332#if IS_ENABLED(CONFIG_IPV6)4354#if IS_ENABLED(CONFIG_IPV6)
4333 case AF_INET6:4355 case AF_INET6:
4334 index = bpf_ipv6_fib_lookup(net, params, flags, false);4356 rc = bpf_ipv6_fib_lookup(net, params, flags, false);
4335 break;4357 break;
4336#endif4358#endif
4337 }4359 }
4338 4360
4339 if (index > 0) {4361 if (!rc) {
4340 struct net_device *dev;4362 struct net_device *dev;
4341 4363
4342 dev = dev_get_by_index_rcu(net, index);4364 dev = dev_get_by_index_rcu(net, params->ifindex);
4343 if (!is_skb_forwardable(dev, skb))4365 if (!is_skb_forwardable(dev, skb))
4344 index = 0;4366 rc = BPF_FIB_LKUP_RET_FRAG_NEEDED;
4345 }4367 }
4346 4368
4347 return index;4369 return rc;
4348}4370}
4349 4371
4350static const struct bpf_func_proto bpf_skb_fib_lookup_proto = {4372static const struct bpf_func_proto bpf_skb_fib_lookup_proto = {
net/core/skbuff.c+1−2
@@ -5275,8 +5275,7 @@ struct sk_buff *alloc_skb_with_frags(unsigned long header_len, · 5274 unmodified lines
5275 if (npages >= 1 << order) {5275 if (npages >= 1 << order) {
5276 page = alloc_pages((gfp_mask & ~__GFP_DIRECT_RECLAIM) |5276 page = alloc_pages((gfp_mask & ~__GFP_DIRECT_RECLAIM) |
5277 __GFP_COMP |5277 __GFP_COMP |
5278 __GFP_NOWARN |5278 __GFP_NOWARN,
5279 __GFP_NORETRY,
5280 order);5279 order);
5281 if (page)5280 if (page)
5282 goto fill_page;5281 goto fill_page;
net/core/sock.c+5−2
@@ -3247,7 +3247,8 @@ static int req_prot_init(const struct proto *prot) · 3246 unmodified lines
3247 3247
3248 rsk_prot->slab = kmem_cache_create(rsk_prot->slab_name,3248 rsk_prot->slab = kmem_cache_create(rsk_prot->slab_name,
3249 rsk_prot->obj_size, 0,3249 rsk_prot->obj_size, 0,
3250 prot->slab_flags, NULL);3250 SLAB_ACCOUNT | prot->slab_flags,
3251 NULL);
3251 3252
3252 if (!rsk_prot->slab) {3253 if (!rsk_prot->slab) {
3253 pr_crit("%s: Can't create request sock SLAB cache!\n",3254 pr_crit("%s: Can't create request sock SLAB cache!\n",
@@ -3262,7 +3263,8 @@ int proto_register(struct proto *prot, int alloc_slab) · 8 unmodified lines
3262 if (alloc_slab) {3263 if (alloc_slab) {
3263 prot->slab = kmem_cache_create_usercopy(prot->name,3264 prot->slab = kmem_cache_create_usercopy(prot->name,
3264 prot->obj_size, 0,3265 prot->obj_size, 0,
3265 SLAB_HWCACHE_ALIGN | prot->slab_flags,3266 SLAB_HWCACHE_ALIGN | SLAB_ACCOUNT |
3267 prot->slab_flags,
3266 prot->useroffset, prot->usersize,3268 prot->useroffset, prot->usersize,
3267 NULL);3269 NULL);
3268 3270
@@ -3285,6 +3287,7 @@ int proto_register(struct proto *prot, int alloc_slab) · 16 unmodified lines
3285 kmem_cache_create(prot->twsk_prot->twsk_slab_name,3287 kmem_cache_create(prot->twsk_prot->twsk_slab_name,
3286 prot->twsk_prot->twsk_obj_size,3288 prot->twsk_prot->twsk_obj_size,
3287 0,3289 0,
3290 SLAB_ACCOUNT |
3288 prot->slab_flags,3291 prot->slab_flags,
3289 NULL);3292 NULL);
3290 if (prot->twsk_prot->twsk_slab == NULL)3293 if (prot->twsk_prot->twsk_slab == NULL)
net/dccp/dccp.h+2−1
@@ -316,7 +316,8 @@ int dccp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock, · 315 unmodified lines
316 int flags, int *addr_len);316 int flags, int *addr_len);
317void dccp_shutdown(struct sock *sk, int how);317void dccp_shutdown(struct sock *sk, int how);
318int inet_dccp_listen(struct socket *sock, int backlog);318int inet_dccp_listen(struct socket *sock, int backlog);
319__poll_t dccp_poll_mask(struct socket *sock, __poll_t events);319__poll_t dccp_poll(struct file *file, struct socket *sock,
320 poll_table *wait);
320int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);321int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);
321void dccp_req_err(struct sock *sk, u64 seq);322void dccp_req_err(struct sock *sk, u64 seq);
322 323
net/dccp/ipv4.c+1−1
@@ -984,7 +984,7 @@ static const struct proto_ops inet_dccp_ops = { · 983 unmodified lines
984 .accept = inet_accept,984 .accept = inet_accept,
985 .getname = inet_getname,985 .getname = inet_getname,
986 /* FIXME: work on tcp_poll to rename it to inet_csk_poll */986 /* FIXME: work on tcp_poll to rename it to inet_csk_poll */
987 .poll_mask = dccp_poll_mask,987 .poll = dccp_poll,
988 .ioctl = inet_ioctl,988 .ioctl = inet_ioctl,
989 /* FIXME: work on inet_listen to rename it to sock_common_listen */989 /* FIXME: work on inet_listen to rename it to sock_common_listen */
990 .listen = inet_dccp_listen,990 .listen = inet_dccp_listen,
net/dccp/ipv6.c+1−1
@@ -1070,7 +1070,7 @@ static const struct proto_ops inet6_dccp_ops = { · 1069 unmodified lines
1070 .socketpair = sock_no_socketpair,1070 .socketpair = sock_no_socketpair,
1071 .accept = inet_accept,1071 .accept = inet_accept,
1072 .getname = inet6_getname,1072 .getname = inet6_getname,
1073 .poll_mask = dccp_poll_mask,1073 .poll = dccp_poll,
1074 .ioctl = inet6_ioctl,1074 .ioctl = inet6_ioctl,
1075 .listen = inet_dccp_listen,1075 .listen = inet_dccp_listen,
1076 .shutdown = inet_shutdown,1076 .shutdown = inet_shutdown,
net/dccp/proto.c+11−2
@@ -312,11 +312,20 @@ int dccp_disconnect(struct sock *sk, int flags) · 311 unmodified lines
312 312
313EXPORT_SYMBOL_GPL(dccp_disconnect);313EXPORT_SYMBOL_GPL(dccp_disconnect);
314 314
315__poll_t dccp_poll_mask(struct socket *sock, __poll_t events)315/*
316 * Wait for a DCCP event.
317 *
318 * Note that we don't need to lock the socket, as the upper poll layers
319 * take care of normal races (between the test and the event) and we don't
320 * go look at any of the socket buffers directly.
321 */
322__poll_t dccp_poll(struct file *file, struct socket *sock,
323 poll_table *wait)
316{324{
317 __poll_t mask;325 __poll_t mask;
318 struct sock *sk = sock->sk;326 struct sock *sk = sock->sk;
319 327
328 sock_poll_wait(file, sk_sleep(sk), wait);
320 if (sk->sk_state == DCCP_LISTEN)329 if (sk->sk_state == DCCP_LISTEN)
321 return inet_csk_listen_poll(sk);330 return inet_csk_listen_poll(sk);
322 331
@@ -358,7 +367,7 @@ __poll_t dccp_poll_mask(struct socket *sock, __poll_t events) · 35 unmodified lines
358 return mask;367 return mask;
359}368}
360 369
361EXPORT_SYMBOL_GPL(dccp_poll_mask);370EXPORT_SYMBOL_GPL(dccp_poll);
362 371
363int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg)372int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg)
364{373{
net/decnet/af_decnet.c+3−3
@@ -1207,11 +1207,11 @@ static int dn_getname(struct socket *sock, struct sockaddr *uaddr,int peer) · 1206 unmodified lines
1207}1207}
1208 1208
1209 1209
1210static __poll_t dn_poll_mask(struct socket *sock, __poll_t events)1210static __poll_t dn_poll(struct file *file, struct socket *sock, poll_table *wait)
1211{1211{
1212 struct sock *sk = sock->sk;1212 struct sock *sk = sock->sk;
1213 struct dn_scp *scp = DN_SK(sk);1213 struct dn_scp *scp = DN_SK(sk);
1214 __poll_t mask = datagram_poll_mask(sock, events);1214 __poll_t mask = datagram_poll(file, sock, wait);
1215 1215
1216 if (!skb_queue_empty(&scp->other_receive_queue))1216 if (!skb_queue_empty(&scp->other_receive_queue))
1217 mask |= EPOLLRDBAND;1217 mask |= EPOLLRDBAND;
@@ -2331,7 +2331,7 @@ static const struct proto_ops dn_proto_ops = { · 1113 unmodified lines
2331 .socketpair = sock_no_socketpair,2331 .socketpair = sock_no_socketpair,
2332 .accept = dn_accept,2332 .accept = dn_accept,
2333 .getname = dn_getname,2333 .getname = dn_getname,
2334 .poll_mask = dn_poll_mask,2334 .poll = dn_poll,
2335 .ioctl = dn_ioctl,2335 .ioctl = dn_ioctl,
2336 .listen = dn_listen,2336 .listen = dn_listen,
2337 .shutdown = dn_shutdown,2337 .shutdown = dn_shutdown,
net/ieee802154/socket.c+2−2
@@ -423,7 +423,7 @@ static const struct proto_ops ieee802154_raw_ops = { · 422 unmodified lines
423 .socketpair = sock_no_socketpair,423 .socketpair = sock_no_socketpair,
424 .accept = sock_no_accept,424 .accept = sock_no_accept,
425 .getname = sock_no_getname,425 .getname = sock_no_getname,
426 .poll_mask = datagram_poll_mask,426 .poll = datagram_poll,
427 .ioctl = ieee802154_sock_ioctl,427 .ioctl = ieee802154_sock_ioctl,
428 .listen = sock_no_listen,428 .listen = sock_no_listen,
429 .shutdown = sock_no_shutdown,429 .shutdown = sock_no_shutdown,
@@ -969,7 +969,7 @@ static const struct proto_ops ieee802154_dgram_ops = { · 539 unmodified lines
969 .socketpair = sock_no_socketpair,969 .socketpair = sock_no_socketpair,
970 .accept = sock_no_accept,970 .accept = sock_no_accept,
971 .getname = sock_no_getname,971 .getname = sock_no_getname,
972 .poll_mask = datagram_poll_mask,972 .poll = datagram_poll,
973 .ioctl = ieee802154_sock_ioctl,973 .ioctl = ieee802154_sock_ioctl,
974 .listen = sock_no_listen,974 .listen = sock_no_listen,
975 .shutdown = sock_no_shutdown,975 .shutdown = sock_no_shutdown,
net/ipv4/af_inet.c+4−4
@@ -986,7 +986,7 @@ const struct proto_ops inet_stream_ops = { · 985 unmodified lines
986 .socketpair = sock_no_socketpair,986 .socketpair = sock_no_socketpair,
987 .accept = inet_accept,987 .accept = inet_accept,
988 .getname = inet_getname,988 .getname = inet_getname,
989 .poll_mask = tcp_poll_mask,989 .poll = tcp_poll,
990 .ioctl = inet_ioctl,990 .ioctl = inet_ioctl,
991 .listen = inet_listen,991 .listen = inet_listen,
992 .shutdown = inet_shutdown,992 .shutdown = inet_shutdown,
@@ -1021,7 +1021,7 @@ const struct proto_ops inet_dgram_ops = { · 28 unmodified lines
1021 .socketpair = sock_no_socketpair,1021 .socketpair = sock_no_socketpair,
1022 .accept = sock_no_accept,1022 .accept = sock_no_accept,
1023 .getname = inet_getname,1023 .getname = inet_getname,
1024 .poll_mask = udp_poll_mask,1024 .poll = udp_poll,
1025 .ioctl = inet_ioctl,1025 .ioctl = inet_ioctl,
1026 .listen = sock_no_listen,1026 .listen = sock_no_listen,
1027 .shutdown = inet_shutdown,1027 .shutdown = inet_shutdown,
@@ -1042,7 +1042,7 @@ EXPORT_SYMBOL(inet_dgram_ops); · 14 unmodified lines
1042 1042
1043/*1043/*
1044 * For SOCK_RAW sockets; should be the same as inet_dgram_ops but without1044 * For SOCK_RAW sockets; should be the same as inet_dgram_ops but without
1045 * udp_poll_mask1045 * udp_poll
1046 */1046 */
1047static const struct proto_ops inet_sockraw_ops = {1047static const struct proto_ops inet_sockraw_ops = {
1048 .family = PF_INET,1048 .family = PF_INET,
@@ -1053,7 +1053,7 @@ static const struct proto_ops inet_sockraw_ops = { · 4 unmodified lines
1053 .socketpair = sock_no_socketpair,1053 .socketpair = sock_no_socketpair,
1054 .accept = sock_no_accept,1054 .accept = sock_no_accept,
1055 .getname = inet_getname,1055 .getname = inet_getname,
1056 .poll_mask = datagram_poll_mask,1056 .poll = datagram_poll,
1057 .ioctl = inet_ioctl,1057 .ioctl = inet_ioctl,
1058 .listen = sock_no_listen,1058 .listen = sock_no_listen,
1059 .shutdown = inet_shutdown,1059 .shutdown = inet_shutdown,
net/ipv4/fou.c+1−3
@@ -448,9 +448,7 @@ next_proto: · 447 unmodified lines
448out_unlock:448out_unlock:
449 rcu_read_unlock();449 rcu_read_unlock();
450out:450out:
451 NAPI_GRO_CB(skb)->flush |= flush;451 skb_gro_flush_final_remcsum(skb, pp, flush, &grc);
452 skb_gro_remcsum_cleanup(skb, &grc);
453 skb->remcsum_offload = 0;
454 452
455 return pp;453 return pp;
456}454}
net/ipv4/gre_offload.c+1−1
@@ -223,7 +223,7 @@ static struct sk_buff *gre_gro_receive(struct list_head *head, · 222 unmodified lines
223out_unlock:223out_unlock:
224 rcu_read_unlock();224 rcu_read_unlock();
225out:225out:
226 NAPI_GRO_CB(skb)->flush |= flush;226 skb_gro_flush_final(skb, pp, flush);
227 227
228 return pp;228 return pp;
229}229}
net/ipv4/sysctl_net_ipv4.c+13−5
@@ -265,8 +265,9 @@ static int proc_tcp_fastopen_key(struct ctl_table *table, int write, · 264 unmodified lines
265 ipv4.sysctl_tcp_fastopen);265 ipv4.sysctl_tcp_fastopen);
266 struct ctl_table tbl = { .maxlen = (TCP_FASTOPEN_KEY_LENGTH * 2 + 10) };266 struct ctl_table tbl = { .maxlen = (TCP_FASTOPEN_KEY_LENGTH * 2 + 10) };
267 struct tcp_fastopen_context *ctxt;267 struct tcp_fastopen_context *ctxt;
268 int ret;
269 u32 user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */268 u32 user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */
269 __le32 key[4];
270 int ret, i;
270 271
271 tbl.data = kmalloc(tbl.maxlen, GFP_KERNEL);272 tbl.data = kmalloc(tbl.maxlen, GFP_KERNEL);
272 if (!tbl.data)273 if (!tbl.data)
@@ -275,11 +276,14 @@ static int proc_tcp_fastopen_key(struct ctl_table *table, int write, · 2 unmodified lines
275 rcu_read_lock();276 rcu_read_lock();
276 ctxt = rcu_dereference(net->ipv4.tcp_fastopen_ctx);277 ctxt = rcu_dereference(net->ipv4.tcp_fastopen_ctx);
277 if (ctxt)278 if (ctxt)
278 memcpy(user_key, ctxt->key, TCP_FASTOPEN_KEY_LENGTH);279 memcpy(key, ctxt->key, TCP_FASTOPEN_KEY_LENGTH);
279 else280 else
280 memset(user_key, 0, sizeof(user_key));281 memset(key, 0, sizeof(key));
281 rcu_read_unlock();282 rcu_read_unlock();
282 283
284 for (i = 0; i < ARRAY_SIZE(key); i++)
285 user_key[i] = le32_to_cpu(key[i]);
286
283 snprintf(tbl.data, tbl.maxlen, "%08x-%08x-%08x-%08x",287 snprintf(tbl.data, tbl.maxlen, "%08x-%08x-%08x-%08x",
284 user_key[0], user_key[1], user_key[2], user_key[3]);288 user_key[0], user_key[1], user_key[2], user_key[3]);
285 ret = proc_dostring(&tbl, write, buffer, lenp, ppos);289 ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
@@ -290,13 +294,17 @@ static int proc_tcp_fastopen_key(struct ctl_table *table, int write, · 4 unmodified lines
290 ret = -EINVAL;294 ret = -EINVAL;
291 goto bad_key;295 goto bad_key;
292 }296 }
293 tcp_fastopen_reset_cipher(net, NULL, user_key,297
298 for (i = 0; i < ARRAY_SIZE(user_key); i++)
299 key[i] = cpu_to_le32(user_key[i]);
300
301 tcp_fastopen_reset_cipher(net, NULL, key,
294 TCP_FASTOPEN_KEY_LENGTH);302 TCP_FASTOPEN_KEY_LENGTH);
295 }303 }
296 304
297bad_key:305bad_key:
298 pr_debug("proc FO key set 0x%x-%x-%x-%x <- 0x%s: %u\n",306 pr_debug("proc FO key set 0x%x-%x-%x-%x <- 0x%s: %u\n",
299 user_key[0], user_key[1], user_key[2], user_key[3],307 user_key[0], user_key[1], user_key[2], user_key[3],
300 (char *)tbl.data, ret);308 (char *)tbl.data, ret);
301 kfree(tbl.data);309 kfree(tbl.data);
302 return ret;310 return ret;
net/ipv4/tcp.c+17−6
@@ -494,21 +494,32 @@ static inline bool tcp_stream_is_readable(const struct tcp_sock *tp, · 493 unmodified lines
494}494}
495 495
496/*496/*
497 * Socket is not locked. We are protected from async events by poll logic and497 * Wait for a TCP event.
498 * correct handling of state changes made by other threads is impossible in498 *
499 * any case.499 * Note that we don't need to lock the socket, as the upper poll layers
500 * take care of normal races (between the test and the event) and we don't
501 * go look at any of the socket buffers directly.
500 */502 */
501__poll_t tcp_poll_mask(struct socket *sock, __poll_t events)503__poll_t tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
502{504{
505 __poll_t mask;
503 struct sock *sk = sock->sk;506 struct sock *sk = sock->sk;
504 const struct tcp_sock *tp = tcp_sk(sk);507 const struct tcp_sock *tp = tcp_sk(sk);
505 __poll_t mask = 0;
506 int state;508 int state;
507 509
510 sock_poll_wait(file, sk_sleep(sk), wait);
511
508 state = inet_sk_state_load(sk);512 state = inet_sk_state_load(sk);
509 if (state == TCP_LISTEN)513 if (state == TCP_LISTEN)
510 return inet_csk_listen_poll(sk);514 return inet_csk_listen_poll(sk);
511 515
516 /* Socket is not locked. We are protected from async events
517 * by poll logic and correct handling of state changes
518 * made by other threads is impossible in any case.
519 */
520
521 mask = 0;
522
512 /*523 /*
513 * EPOLLHUP is certainly not done right. But poll() doesn't524 * EPOLLHUP is certainly not done right. But poll() doesn't
514 * have a notion of HUP in just one direction, and for a525 * have a notion of HUP in just one direction, and for a
@@ -589,7 +600,7 @@ __poll_t tcp_poll_mask(struct socket *sock, __poll_t events) · 74 unmodified lines
589 600
590 return mask;601 return mask;
591}602}
592EXPORT_SYMBOL(tcp_poll_mask);603EXPORT_SYMBOL(tcp_poll);
593 604
594int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg)605int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg)
595{606{
net/ipv4/tcp_input.c+11−2
@@ -266,7 +266,7 @@ static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb) · 265 unmodified lines
266 * it is probably a retransmit.266 * it is probably a retransmit.
267 */267 */
268 if (tp->ecn_flags & TCP_ECN_SEEN)268 if (tp->ecn_flags & TCP_ECN_SEEN)
269 tcp_enter_quickack_mode(sk, 1);269 tcp_enter_quickack_mode(sk, 2);
270 break;270 break;
271 case INET_ECN_CE:271 case INET_ECN_CE:
272 if (tcp_ca_needs_ecn(sk))272 if (tcp_ca_needs_ecn(sk))
@@ -274,7 +274,7 @@ static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb) · 1 unmodified line
274 274
275 if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) {275 if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) {
276 /* Better not delay acks, sender can have a very low cwnd */276 /* Better not delay acks, sender can have a very low cwnd */
277 tcp_enter_quickack_mode(sk, 1);277 tcp_enter_quickack_mode(sk, 2);
278 tp->ecn_flags |= TCP_ECN_DEMAND_CWR;278 tp->ecn_flags |= TCP_ECN_DEMAND_CWR;
279 }279 }
280 tp->ecn_flags |= TCP_ECN_SEEN;280 tp->ecn_flags |= TCP_ECN_SEEN;
@@ -3185,6 +3185,15 @@ static int tcp_clean_rtx_queue(struct sock *sk, u32 prior_fack, · 2904 unmodified lines
3185 3185
3186 if (tcp_is_reno(tp)) {3186 if (tcp_is_reno(tp)) {
3187 tcp_remove_reno_sacks(sk, pkts_acked);3187 tcp_remove_reno_sacks(sk, pkts_acked);
3188
3189 /* If any of the cumulatively ACKed segments was
3190 * retransmitted, non-SACK case cannot confirm that
3191 * progress was due to original transmission due to
3192 * lack of TCPCB_SACKED_ACKED bits even if some of
3193 * the packets may have been never retransmitted.
3194 */
3195 if (flag & FLAG_RETRANS_DATA_ACKED)
3196 flag &= ~FLAG_ORIG_SACK_ACKED;
3188 } else {3197 } else {
3189 int delta;3198 int delta;
3190 3199
net/ipv4/udp.c+5−5
@@ -2591,7 +2591,7 @@ int compat_udp_getsockopt(struct sock *sk, int level, int optname, · 2590 unmodified lines
2591 * udp_poll - wait for a UDP event.2591 * udp_poll - wait for a UDP event.
2592 * @file - file struct2592 * @file - file struct
2593 * @sock - socket2593 * @sock - socket
2594 * @events - events to wait for2594 * @wait - poll table
2595 *2595 *
2596 * This is same as datagram poll, except for the special case of2596 * This is same as datagram poll, except for the special case of
2597 * blocking sockets. If application is using a blocking fd2597 * blocking sockets. If application is using a blocking fd
@@ -2600,23 +2600,23 @@ int compat_udp_getsockopt(struct sock *sk, int level, int optname, · 2 unmodified lines
2600 * but then block when reading it. Add special case code2600 * but then block when reading it. Add special case code
2601 * to work around these arguably broken applications.2601 * to work around these arguably broken applications.
2602 */2602 */
2603__poll_t udp_poll_mask(struct socket *sock, __poll_t events)2603__poll_t udp_poll(struct file *file, struct socket *sock, poll_table *wait)
2604{2604{
2605 __poll_t mask = datagram_poll_mask(sock, events);2605 __poll_t mask = datagram_poll(file, sock, wait);
2606 struct sock *sk = sock->sk;2606 struct sock *sk = sock->sk;
2607 2607
2608 if (!skb_queue_empty(&udp_sk(sk)->reader_queue))2608 if (!skb_queue_empty(&udp_sk(sk)->reader_queue))
2609 mask |= EPOLLIN | EPOLLRDNORM;2609 mask |= EPOLLIN | EPOLLRDNORM;
2610 2610
2611 /* Check for false positives due to checksum errors */2611 /* Check for false positives due to checksum errors */
2612 if ((mask & EPOLLRDNORM) && !(sock->file->f_flags & O_NONBLOCK) &&2612 if ((mask & EPOLLRDNORM) && !(file->f_flags & O_NONBLOCK) &&
2613 !(sk->sk_shutdown & RCV_SHUTDOWN) && first_packet_length(sk) == -1)2613 !(sk->sk_shutdown & RCV_SHUTDOWN) && first_packet_length(sk) == -1)
2614 mask &= ~(EPOLLIN | EPOLLRDNORM);2614 mask &= ~(EPOLLIN | EPOLLRDNORM);
2615 2615
2616 return mask;2616 return mask;
2617 2617
2618}2618}
2619EXPORT_SYMBOL(udp_poll_mask);2619EXPORT_SYMBOL(udp_poll);
2620 2620
2621int udp_abort(struct sock *sk, int err)2621int udp_abort(struct sock *sk, int err)
2622{2622{
net/ipv4/udp_offload.c+1−1
@@ -395,7 +395,7 @@ unflush: · 394 unmodified lines
395out_unlock:395out_unlock:
396 rcu_read_unlock();396 rcu_read_unlock();
397out:397out:
398 NAPI_GRO_CB(skb)->flush |= flush;398 skb_gro_flush_final(skb, pp, flush);
399 return pp;399 return pp;
400}400}
401EXPORT_SYMBOL(udp_gro_receive);401EXPORT_SYMBOL(udp_gro_receive);
net/ipv6/addrconf.c+6−3
@@ -4528,6 +4528,7 @@ static int modify_prefix_route(struct inet6_ifaddr *ifp, · 4527 unmodified lines
4528 unsigned long expires, u32 flags)4528 unsigned long expires, u32 flags)
4529{4529{
4530 struct fib6_info *f6i;4530 struct fib6_info *f6i;
4531 u32 prio;
4531 4532
4532 f6i = addrconf_get_prefix_route(&ifp->addr,4533 f6i = addrconf_get_prefix_route(&ifp->addr,
4533 ifp->prefix_len,4534 ifp->prefix_len,
@@ -4536,13 +4537,15 @@ static int modify_prefix_route(struct inet6_ifaddr *ifp, · 2 unmodified lines
4536 if (!f6i)4537 if (!f6i)
4537 return -ENOENT;4538 return -ENOENT;
4538 4539
4539 if (f6i->fib6_metric != ifp->rt_priority) {4540 prio = ifp->rt_priority ? : IP6_RT_PRIO_ADDRCONF;
4541 if (f6i->fib6_metric != prio) {
4542 /* delete old one */
4543 ip6_del_rt(dev_net(ifp->idev->dev), f6i);
4544
4540 /* add new one */4545 /* add new one */
4541 addrconf_prefix_route(&ifp->addr, ifp->prefix_len,4546 addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
4542 ifp->rt_priority, ifp->idev->dev,4547 ifp->rt_priority, ifp->idev->dev,
4543 expires, flags, GFP_KERNEL);4548 expires, flags, GFP_KERNEL);
4544 /* delete old one */
4545 ip6_del_rt(dev_net(ifp->idev->dev), f6i);
4546 } else {4549 } else {
4547 if (!expires)4550 if (!expires)
4548 fib6_clean_expires(f6i);4551 fib6_clean_expires(f6i);
net/ipv6/af_inet6.c+2−2
@@ -570,7 +570,7 @@ const struct proto_ops inet6_stream_ops = { · 569 unmodified lines
570 .socketpair = sock_no_socketpair, /* a do nothing */570 .socketpair = sock_no_socketpair, /* a do nothing */
571 .accept = inet_accept, /* ok */571 .accept = inet_accept, /* ok */
572 .getname = inet6_getname,572 .getname = inet6_getname,
573 .poll_mask = tcp_poll_mask, /* ok */573 .poll = tcp_poll, /* ok */
574 .ioctl = inet6_ioctl, /* must change */574 .ioctl = inet6_ioctl, /* must change */
575 .listen = inet_listen, /* ok */575 .listen = inet_listen, /* ok */
576 .shutdown = inet_shutdown, /* ok */576 .shutdown = inet_shutdown, /* ok */
@@ -603,7 +603,7 @@ const struct proto_ops inet6_dgram_ops = { · 26 unmodified lines
603 .socketpair = sock_no_socketpair, /* a do nothing */603 .socketpair = sock_no_socketpair, /* a do nothing */
604 .accept = sock_no_accept, /* a do nothing */604 .accept = sock_no_accept, /* a do nothing */
605 .getname = inet6_getname,605 .getname = inet6_getname,
606 .poll_mask = udp_poll_mask, /* ok */606 .poll = udp_poll, /* ok */
607 .ioctl = inet6_ioctl, /* must change */607 .ioctl = inet6_ioctl, /* must change */
608 .listen = sock_no_listen, /* ok */608 .listen = sock_no_listen, /* ok */
609 .shutdown = inet_shutdown, /* ok */609 .shutdown = inet_shutdown, /* ok */
net/ipv6/netfilter/nf_conntrack_reasm.c+3−3
@@ -107,7 +107,7 @@ static int nf_ct_frag6_sysctl_register(struct net *net) · 106 unmodified lines
107 if (hdr == NULL)107 if (hdr == NULL)
108 goto err_reg;108 goto err_reg;
109 109
110 net->nf_frag.sysctl.frags_hdr = hdr;110 net->nf_frag_frags_hdr = hdr;
111 return 0;111 return 0;
112 112
113err_reg:113err_reg:
@@ -121,8 +121,8 @@ static void __net_exit nf_ct_frags6_sysctl_unregister(struct net *net) · 7 unmodified lines
121{121{
122 struct ctl_table *table;122 struct ctl_table *table;
123 123
124 table = net->nf_frag.sysctl.frags_hdr->ctl_table_arg;124 table = net->nf_frag_frags_hdr->ctl_table_arg;
125 unregister_net_sysctl_table(net->nf_frag.sysctl.frags_hdr);125 unregister_net_sysctl_table(net->nf_frag_frags_hdr);
126 if (!net_eq(net, &init_net))126 if (!net_eq(net, &init_net))
127 kfree(table);127 kfree(table);
128}128}
net/ipv6/raw.c+2−2
@@ -1334,7 +1334,7 @@ void raw6_proc_exit(void) · 1333 unmodified lines
1334}1334}
1335#endif /* CONFIG_PROC_FS */1335#endif /* CONFIG_PROC_FS */
1336 1336
1337/* Same as inet6_dgram_ops, sans udp_poll_mask. */1337/* Same as inet6_dgram_ops, sans udp_poll. */
1338const struct proto_ops inet6_sockraw_ops = {1338const struct proto_ops inet6_sockraw_ops = {
1339 .family = PF_INET6,1339 .family = PF_INET6,
1340 .owner = THIS_MODULE,1340 .owner = THIS_MODULE,
@@ -1344,7 +1344,7 @@ const struct proto_ops inet6_sockraw_ops = { · 3 unmodified lines
1344 .socketpair = sock_no_socketpair, /* a do nothing */1344 .socketpair = sock_no_socketpair, /* a do nothing */
1345 .accept = sock_no_accept, /* a do nothing */1345 .accept = sock_no_accept, /* a do nothing */
1346 .getname = inet6_getname,1346 .getname = inet6_getname,
1347 .poll_mask = datagram_poll_mask, /* ok */1347 .poll = datagram_poll, /* ok */
1348 .ioctl = inet6_ioctl, /* must change */1348 .ioctl = inet6_ioctl, /* must change */
1349 .listen = sock_no_listen, /* ok */1349 .listen = sock_no_listen, /* ok */
1350 .shutdown = inet_shutdown, /* ok */1350 .shutdown = inet_shutdown, /* ok */
net/ipv6/seg6_hmac.c+1−1
@@ -374,7 +374,7 @@ static int seg6_hmac_init_algo(void) · 373 unmodified lines
374 return -ENOMEM;374 return -ENOMEM;
375 375
376 for_each_possible_cpu(cpu) {376 for_each_possible_cpu(cpu) {
377 tfm = crypto_alloc_shash(algo->name, 0, GFP_KERNEL);377 tfm = crypto_alloc_shash(algo->name, 0, 0);
378 if (IS_ERR(tfm))378 if (IS_ERR(tfm))
379 return PTR_ERR(tfm);379 return PTR_ERR(tfm);
380 p_tfm = per_cpu_ptr(algo->tfms, cpu);380 p_tfm = per_cpu_ptr(algo->tfms, cpu);
net/iucv/af_iucv.c+5−2
@@ -1488,11 +1488,14 @@ static inline __poll_t iucv_accept_poll(struct sock *parent) · 1487 unmodified lines
1488 return 0;1488 return 0;
1489}1489}
1490 1490
1491static __poll_t iucv_sock_poll_mask(struct socket *sock, __poll_t events)1491__poll_t iucv_sock_poll(struct file *file, struct socket *sock,
1492 poll_table *wait)
1492{1493{
1493 struct sock *sk = sock->sk;1494 struct sock *sk = sock->sk;
1494 __poll_t mask = 0;1495 __poll_t mask = 0;
1495 1496
1497 sock_poll_wait(file, sk_sleep(sk), wait);
1498
1496 if (sk->sk_state == IUCV_LISTEN)1499 if (sk->sk_state == IUCV_LISTEN)
1497 return iucv_accept_poll(sk);1500 return iucv_accept_poll(sk);
1498 1501
@@ -2385,7 +2388,7 @@ static const struct proto_ops iucv_sock_ops = { · 886 unmodified lines
2385 .getname = iucv_sock_getname,2388 .getname = iucv_sock_getname,
2386 .sendmsg = iucv_sock_sendmsg,2389 .sendmsg = iucv_sock_sendmsg,
2387 .recvmsg = iucv_sock_recvmsg,2390 .recvmsg = iucv_sock_recvmsg,
2388 .poll_mask = iucv_sock_poll_mask,2391 .poll = iucv_sock_poll,
2389 .ioctl = sock_no_ioctl,2392 .ioctl = sock_no_ioctl,
2390 .mmap = sock_no_mmap,2393 .mmap = sock_no_mmap,
2391 .socketpair = sock_no_socketpair,2394 .socketpair = sock_no_socketpair,
net/kcm/kcmsock.c+5−5
@@ -1336,9 +1336,9 @@ static void init_kcm_sock(struct kcm_sock *kcm, struct kcm_mux *mux) · 1335 unmodified lines
1336 struct list_head *head;1336 struct list_head *head;
1337 int index = 0;1337 int index = 0;
1338 1338
1339 /* For SOCK_SEQPACKET sock type, datagram_poll_mask checks the sk_state,1339 /* For SOCK_SEQPACKET sock type, datagram_poll checks the sk_state, so
1340 * so we set sk_state, otherwise epoll_wait always returns right away1340 * we set sk_state, otherwise epoll_wait always returns right away with
1341 * with EPOLLHUP1341 * EPOLLHUP
1342 */1342 */
1343 kcm->sk.sk_state = TCP_ESTABLISHED;1343 kcm->sk.sk_state = TCP_ESTABLISHED;
1344 1344
@@ -1903,7 +1903,7 @@ static const struct proto_ops kcm_dgram_ops = { · 558 unmodified lines
1903 .socketpair = sock_no_socketpair,1903 .socketpair = sock_no_socketpair,
1904 .accept = sock_no_accept,1904 .accept = sock_no_accept,
1905 .getname = sock_no_getname,1905 .getname = sock_no_getname,
1906 .poll_mask = datagram_poll_mask,1906 .poll = datagram_poll,
1907 .ioctl = kcm_ioctl,1907 .ioctl = kcm_ioctl,
1908 .listen = sock_no_listen,1908 .listen = sock_no_listen,
1909 .shutdown = sock_no_shutdown,1909 .shutdown = sock_no_shutdown,
@@ -1924,7 +1924,7 @@ static const struct proto_ops kcm_seqpacket_ops = { · 14 unmodified lines
1924 .socketpair = sock_no_socketpair,1924 .socketpair = sock_no_socketpair,
1925 .accept = sock_no_accept,1925 .accept = sock_no_accept,
1926 .getname = sock_no_getname,1926 .getname = sock_no_getname,
1927 .poll_mask = datagram_poll_mask,1927 .poll = datagram_poll,
1928 .ioctl = kcm_ioctl,1928 .ioctl = kcm_ioctl,
1929 .listen = sock_no_listen,1929 .listen = sock_no_listen,
1930 .shutdown = sock_no_shutdown,1930 .shutdown = sock_no_shutdown,
net/key/af_key.c+1−1
@@ -3751,7 +3751,7 @@ static const struct proto_ops pfkey_ops = { · 3750 unmodified lines
3751 3751
3752 /* Now the operations that really occur. */3752 /* Now the operations that really occur. */
3753 .release = pfkey_release,3753 .release = pfkey_release,
3754 .poll_mask = datagram_poll_mask,3754 .poll = datagram_poll,
3755 .sendmsg = pfkey_sendmsg,3755 .sendmsg = pfkey_sendmsg,
3756 .recvmsg = pfkey_recvmsg,3756 .recvmsg = pfkey_recvmsg,
3757};3757};
net/l2tp/l2tp_ip.c+1−1
@@ -613,7 +613,7 @@ static const struct proto_ops l2tp_ip_ops = { · 612 unmodified lines
613 .socketpair = sock_no_socketpair,613 .socketpair = sock_no_socketpair,
614 .accept = sock_no_accept,614 .accept = sock_no_accept,
615 .getname = l2tp_ip_getname,615 .getname = l2tp_ip_getname,
616 .poll_mask = datagram_poll_mask,616 .poll = datagram_poll,
617 .ioctl = inet_ioctl,617 .ioctl = inet_ioctl,
618 .listen = sock_no_listen,618 .listen = sock_no_listen,
619 .shutdown = inet_shutdown,619 .shutdown = inet_shutdown,
net/l2tp/l2tp_ip6.c+1−1
@@ -754,7 +754,7 @@ static const struct proto_ops l2tp_ip6_ops = { · 753 unmodified lines
754 .socketpair = sock_no_socketpair,754 .socketpair = sock_no_socketpair,
755 .accept = sock_no_accept,755 .accept = sock_no_accept,
756 .getname = l2tp_ip6_getname,756 .getname = l2tp_ip6_getname,
757 .poll_mask = datagram_poll_mask,757 .poll = datagram_poll,
758 .ioctl = inet6_ioctl,758 .ioctl = inet6_ioctl,
759 .listen = sock_no_listen,759 .listen = sock_no_listen,
760 .shutdown = inet_shutdown,760 .shutdown = inet_shutdown,
net/l2tp/l2tp_ppp.c+1−1
@@ -1844,7 +1844,7 @@ static const struct proto_ops pppol2tp_ops = { · 1843 unmodified lines
1844 .socketpair = sock_no_socketpair,1844 .socketpair = sock_no_socketpair,
1845 .accept = sock_no_accept,1845 .accept = sock_no_accept,
1846 .getname = pppol2tp_getname,1846 .getname = pppol2tp_getname,
1847 .poll_mask = datagram_poll_mask,1847 .poll = datagram_poll,
1848 .listen = sock_no_listen,1848 .listen = sock_no_listen,
1849 .shutdown = sock_no_shutdown,1849 .shutdown = sock_no_shutdown,
1850 .setsockopt = pppol2tp_setsockopt,1850 .setsockopt = pppol2tp_setsockopt,
net/llc/af_llc.c+1−1
@@ -1192,7 +1192,7 @@ static const struct proto_ops llc_ui_ops = { · 1191 unmodified lines
1192 .socketpair = sock_no_socketpair,1192 .socketpair = sock_no_socketpair,
1193 .accept = llc_ui_accept,1193 .accept = llc_ui_accept,
1194 .getname = llc_ui_getname,1194 .getname = llc_ui_getname,
1195 .poll_mask = datagram_poll_mask,1195 .poll = datagram_poll,
1196 .ioctl = llc_ui_ioctl,1196 .ioctl = llc_ui_ioctl,
1197 .listen = llc_ui_listen,1197 .listen = llc_ui_listen,
1198 .shutdown = llc_ui_shutdown,1198 .shutdown = llc_ui_shutdown,
net/mac80211/tx.c+2−0
@@ -4850,7 +4850,9 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, · 4849 unmodified lines
4850 skb_reset_network_header(skb);4850 skb_reset_network_header(skb);
4851 skb_reset_mac_header(skb);4851 skb_reset_mac_header(skb);
4852 4852
4853 local_bh_disable();
4853 __ieee80211_subif_start_xmit(skb, skb->dev, flags);4854 __ieee80211_subif_start_xmit(skb, skb->dev, flags);
4855 local_bh_enable();
4854 4856
4855 return 0;4857 return 0;
4856}4858}
net/netfilter/nf_conncount.c+47−5
@@ -47,6 +47,8 @@ struct nf_conncount_tuple { · 46 unmodified lines
47 struct hlist_node node;47 struct hlist_node node;
48 struct nf_conntrack_tuple tuple;48 struct nf_conntrack_tuple tuple;
49 struct nf_conntrack_zone zone;49 struct nf_conntrack_zone zone;
50 int cpu;
51 u32 jiffies32;
50};52};
51 53
52struct nf_conncount_rb {54struct nf_conncount_rb {
@@ -91,11 +93,42 @@ bool nf_conncount_add(struct hlist_head *head, · 38 unmodified lines
91 return false;93 return false;
92 conn->tuple = *tuple;94 conn->tuple = *tuple;
93 conn->zone = *zone;95 conn->zone = *zone;
96 conn->cpu = raw_smp_processor_id();
97 conn->jiffies32 = (u32)jiffies;
94 hlist_add_head(&conn->node, head);98 hlist_add_head(&conn->node, head);
95 return true;99 return true;
96}100}
97EXPORT_SYMBOL_GPL(nf_conncount_add);101EXPORT_SYMBOL_GPL(nf_conncount_add);
98 102
103static const struct nf_conntrack_tuple_hash *
104find_or_evict(struct net *net, struct nf_conncount_tuple *conn)
105{
106 const struct nf_conntrack_tuple_hash *found;
107 unsigned long a, b;
108 int cpu = raw_smp_processor_id();
109 __s32 age;
110
111 found = nf_conntrack_find_get(net, &conn->zone, &conn->tuple);
112 if (found)
113 return found;
114 b = conn->jiffies32;
115 a = (u32)jiffies;
116
117 /* conn might have been added just before by another cpu and
118 * might still be unconfirmed. In this case, nf_conntrack_find()
119 * returns no result. Thus only evict if this cpu added the
120 * stale entry or if the entry is older than two jiffies.
121 */
122 age = a - b;
123 if (conn->cpu == cpu || age >= 2) {
124 hlist_del(&conn->node);
125 kmem_cache_free(conncount_conn_cachep, conn);
126 return ERR_PTR(-ENOENT);
127 }
128
129 return ERR_PTR(-EAGAIN);
130}
131
99unsigned int nf_conncount_lookup(struct net *net, struct hlist_head *head,132unsigned int nf_conncount_lookup(struct net *net, struct hlist_head *head,
100 const struct nf_conntrack_tuple *tuple,133 const struct nf_conntrack_tuple *tuple,
101 const struct nf_conntrack_zone *zone,134 const struct nf_conntrack_zone *zone,
@@ -103,18 +136,27 @@ unsigned int nf_conncount_lookup(struct net *net, struct hlist_head *head, · 1 unmodified line
103{136{
104 const struct nf_conntrack_tuple_hash *found;137 const struct nf_conntrack_tuple_hash *found;
105 struct nf_conncount_tuple *conn;138 struct nf_conncount_tuple *conn;
106 struct hlist_node *n;
107 struct nf_conn *found_ct;139 struct nf_conn *found_ct;
140 struct hlist_node *n;
108 unsigned int length = 0;141 unsigned int length = 0;
109 142
110 *addit = tuple ? true : false;143 *addit = tuple ? true : false;
111 144
112 /* check the saved connections */145 /* check the saved connections */
113 hlist_for_each_entry_safe(conn, n, head, node) {146 hlist_for_each_entry_safe(conn, n, head, node) {
114 found = nf_conntrack_find_get(net, &conn->zone, &conn->tuple);147 found = find_or_evict(net, conn);
115 if (found == NULL) {148 if (IS_ERR(found)) {
116 hlist_del(&conn->node);149 /* Not found, but might be about to be confirmed */
117 kmem_cache_free(conncount_conn_cachep, conn);150 if (PTR_ERR(found) == -EAGAIN) {
151 length++;
152 if (!tuple)
153 continue;
154
155 if (nf_ct_tuple_equal(&conn->tuple, tuple) &&
156 nf_ct_zone_id(&conn->zone, conn->zone.dir) ==
157 nf_ct_zone_id(zone, zone->dir))
158 *addit = false;
159 }
118 continue;160 continue;
119 }161 }
120 162
net/netfilter/nf_conntrack_helper.c+5−0
@@ -465,6 +465,11 @@ void nf_conntrack_helper_unregister(struct nf_conntrack_helper *me) · 464 unmodified lines
465 465
466 nf_ct_expect_iterate_destroy(expect_iter_me, NULL);466 nf_ct_expect_iterate_destroy(expect_iter_me, NULL);
467 nf_ct_iterate_destroy(unhelp, me);467 nf_ct_iterate_destroy(unhelp, me);
468
469 /* Maybe someone has gotten the helper already when unhelp above.
470 * So need to wait it.
471 */
472 synchronize_rcu();
468}473}
469EXPORT_SYMBOL_GPL(nf_conntrack_helper_unregister);474EXPORT_SYMBOL_GPL(nf_conntrack_helper_unregister);
470 475
net/netfilter/nf_log.c+10−3
@@ -424,6 +424,10 @@ static int nf_log_proc_dostring(struct ctl_table *table, int write, · 423 unmodified lines
424 if (write) {424 if (write) {
425 struct ctl_table tmp = *table;425 struct ctl_table tmp = *table;
426 426
427 /* proc_dostring() can append to existing strings, so we need to
428 * initialize it as an empty string.
429 */
430 buf[0] = '\0';
427 tmp.data = buf;431 tmp.data = buf;
428 r = proc_dostring(&tmp, write, buffer, lenp, ppos);432 r = proc_dostring(&tmp, write, buffer, lenp, ppos);
429 if (r)433 if (r)
@@ -442,14 +446,17 @@ static int nf_log_proc_dostring(struct ctl_table *table, int write, · 12 unmodified lines
442 rcu_assign_pointer(net->nf.nf_loggers[tindex], logger);446 rcu_assign_pointer(net->nf.nf_loggers[tindex], logger);
443 mutex_unlock(&nf_log_mutex);447 mutex_unlock(&nf_log_mutex);
444 } else {448 } else {
449 struct ctl_table tmp = *table;
450
451 tmp.data = buf;
445 mutex_lock(&nf_log_mutex);452 mutex_lock(&nf_log_mutex);
446 logger = nft_log_dereference(net->nf.nf_loggers[tindex]);453 logger = nft_log_dereference(net->nf.nf_loggers[tindex]);
447 if (!logger)454 if (!logger)
448 table->data = "NONE";455 strlcpy(buf, "NONE", sizeof(buf));
449 else456 else
450 table->data = logger->name;457 strlcpy(buf, logger->name, sizeof(buf));
451 r = proc_dostring(table, write, buffer, lenp, ppos);
452 mutex_unlock(&nf_log_mutex);458 mutex_unlock(&nf_log_mutex);
459 r = proc_dostring(&tmp, write, buffer, lenp, ppos);
453 }460 }
454 461
455 return r;462 return r;
net/netfilter/nfnetlink_queue.c+3−0
@@ -1243,6 +1243,9 @@ static int nfqnl_recv_unsupp(struct net *net, struct sock *ctnl, · 1242 unmodified lines
1243static const struct nla_policy nfqa_cfg_policy[NFQA_CFG_MAX+1] = {1243static const struct nla_policy nfqa_cfg_policy[NFQA_CFG_MAX+1] = {
1244 [NFQA_CFG_CMD] = { .len = sizeof(struct nfqnl_msg_config_cmd) },1244 [NFQA_CFG_CMD] = { .len = sizeof(struct nfqnl_msg_config_cmd) },
1245 [NFQA_CFG_PARAMS] = { .len = sizeof(struct nfqnl_msg_config_params) },1245 [NFQA_CFG_PARAMS] = { .len = sizeof(struct nfqnl_msg_config_params) },
1246 [NFQA_CFG_QUEUE_MAXLEN] = { .type = NLA_U32 },
1247 [NFQA_CFG_MASK] = { .type = NLA_U32 },
1248 [NFQA_CFG_FLAGS] = { .type = NLA_U32 },
1246};1249};
1247 1250
1248static const struct nf_queue_handler nfqh = {1251static const struct nf_queue_handler nfqh = {
net/netlink/af_netlink.c+1−1
@@ -2658,7 +2658,7 @@ static const struct proto_ops netlink_ops = { · 2657 unmodified lines
2658 .socketpair = sock_no_socketpair,2658 .socketpair = sock_no_socketpair,
2659 .accept = sock_no_accept,2659 .accept = sock_no_accept,
2660 .getname = netlink_getname,2660 .getname = netlink_getname,
2661 .poll_mask = datagram_poll_mask,2661 .poll = datagram_poll,
2662 .ioctl = netlink_ioctl,2662 .ioctl = netlink_ioctl,
2663 .listen = sock_no_listen,2663 .listen = sock_no_listen,
2664 .shutdown = sock_no_shutdown,2664 .shutdown = sock_no_shutdown,
net/netrom/af_netrom.c+1−1
@@ -1355,7 +1355,7 @@ static const struct proto_ops nr_proto_ops = { · 1354 unmodified lines
1355 .socketpair = sock_no_socketpair,1355 .socketpair = sock_no_socketpair,
1356 .accept = nr_accept,1356 .accept = nr_accept,
1357 .getname = nr_getname,1357 .getname = nr_getname,
1358 .poll_mask = datagram_poll_mask,1358 .poll = datagram_poll,
1359 .ioctl = nr_ioctl,1359 .ioctl = nr_ioctl,
1360 .listen = nr_listen,1360 .listen = nr_listen,
1361 .shutdown = sock_no_shutdown,1361 .shutdown = sock_no_shutdown,
net/nfc/llcp_sock.c+6−3
@@ -548,13 +548,16 @@ static inline __poll_t llcp_accept_poll(struct sock *parent) · 547 unmodified lines
548 return 0;548 return 0;
549}549}
550 550
551static __poll_t llcp_sock_poll_mask(struct socket *sock, __poll_t events)551static __poll_t llcp_sock_poll(struct file *file, struct socket *sock,
552 poll_table *wait)
552{553{
553 struct sock *sk = sock->sk;554 struct sock *sk = sock->sk;
554 __poll_t mask = 0;555 __poll_t mask = 0;
555 556
556 pr_debug("%p\n", sk);557 pr_debug("%p\n", sk);
557 558
559 sock_poll_wait(file, sk_sleep(sk), wait);
560
558 if (sk->sk_state == LLCP_LISTEN)561 if (sk->sk_state == LLCP_LISTEN)
559 return llcp_accept_poll(sk);562 return llcp_accept_poll(sk);
560 563
@@ -896,7 +899,7 @@ static const struct proto_ops llcp_sock_ops = { · 335 unmodified lines
896 .socketpair = sock_no_socketpair,899 .socketpair = sock_no_socketpair,
897 .accept = llcp_sock_accept,900 .accept = llcp_sock_accept,
898 .getname = llcp_sock_getname,901 .getname = llcp_sock_getname,
899 .poll_mask = llcp_sock_poll_mask,902 .poll = llcp_sock_poll,
900 .ioctl = sock_no_ioctl,903 .ioctl = sock_no_ioctl,
901 .listen = llcp_sock_listen,904 .listen = llcp_sock_listen,
902 .shutdown = sock_no_shutdown,905 .shutdown = sock_no_shutdown,
@@ -916,7 +919,7 @@ static const struct proto_ops llcp_rawsock_ops = { · 13 unmodified lines
916 .socketpair = sock_no_socketpair,919 .socketpair = sock_no_socketpair,
917 .accept = sock_no_accept,920 .accept = sock_no_accept,
918 .getname = llcp_sock_getname,921 .getname = llcp_sock_getname,
919 .poll_mask = llcp_sock_poll_mask,922 .poll = llcp_sock_poll,
920 .ioctl = sock_no_ioctl,923 .ioctl = sock_no_ioctl,
921 .listen = sock_no_listen,924 .listen = sock_no_listen,
922 .shutdown = sock_no_shutdown,925 .shutdown = sock_no_shutdown,
net/nfc/rawsock.c+2−2
@@ -284,7 +284,7 @@ static const struct proto_ops rawsock_ops = { · 283 unmodified lines
284 .socketpair = sock_no_socketpair,284 .socketpair = sock_no_socketpair,
285 .accept = sock_no_accept,285 .accept = sock_no_accept,
286 .getname = sock_no_getname,286 .getname = sock_no_getname,
287 .poll_mask = datagram_poll_mask,287 .poll = datagram_poll,
288 .ioctl = sock_no_ioctl,288 .ioctl = sock_no_ioctl,
289 .listen = sock_no_listen,289 .listen = sock_no_listen,
290 .shutdown = sock_no_shutdown,290 .shutdown = sock_no_shutdown,
@@ -304,7 +304,7 @@ static const struct proto_ops rawsock_raw_ops = { · 13 unmodified lines
304 .socketpair = sock_no_socketpair,304 .socketpair = sock_no_socketpair,
305 .accept = sock_no_accept,305 .accept = sock_no_accept,
306 .getname = sock_no_getname,306 .getname = sock_no_getname,
307 .poll_mask = datagram_poll_mask,307 .poll = datagram_poll,
308 .ioctl = sock_no_ioctl,308 .ioctl = sock_no_ioctl,
309 .listen = sock_no_listen,309 .listen = sock_no_listen,
310 .shutdown = sock_no_shutdown,310 .shutdown = sock_no_shutdown,
net/packet/af_packet.c+5−4
@@ -4076,11 +4076,12 @@ static int packet_ioctl(struct socket *sock, unsigned int cmd, · 4075 unmodified lines
4076 return 0;4076 return 0;
4077}4077}
4078 4078
4079static __poll_t packet_poll_mask(struct socket *sock, __poll_t events)4079static __poll_t packet_poll(struct file *file, struct socket *sock,
4080 poll_table *wait)
4080{4081{
4081 struct sock *sk = sock->sk;4082 struct sock *sk = sock->sk;
4082 struct packet_sock *po = pkt_sk(sk);4083 struct packet_sock *po = pkt_sk(sk);
4083 __poll_t mask = datagram_poll_mask(sock, events);4084 __poll_t mask = datagram_poll(file, sock, wait);
4084 4085
4085 spin_lock_bh(&sk->sk_receive_queue.lock);4086 spin_lock_bh(&sk->sk_receive_queue.lock);
4086 if (po->rx_ring.pg_vec) {4087 if (po->rx_ring.pg_vec) {
@@ -4422,7 +4423,7 @@ static const struct proto_ops packet_ops_spkt = { · 335 unmodified lines
4422 .socketpair = sock_no_socketpair,4423 .socketpair = sock_no_socketpair,
4423 .accept = sock_no_accept,4424 .accept = sock_no_accept,
4424 .getname = packet_getname_spkt,4425 .getname = packet_getname_spkt,
4425 .poll_mask = datagram_poll_mask,4426 .poll = datagram_poll,
4426 .ioctl = packet_ioctl,4427 .ioctl = packet_ioctl,
4427 .listen = sock_no_listen,4428 .listen = sock_no_listen,
4428 .shutdown = sock_no_shutdown,4429 .shutdown = sock_no_shutdown,
@@ -4443,7 +4444,7 @@ static const struct proto_ops packet_ops = { · 14 unmodified lines
4443 .socketpair = sock_no_socketpair,4444 .socketpair = sock_no_socketpair,
4444 .accept = sock_no_accept,4445 .accept = sock_no_accept,
4445 .getname = packet_getname,4446 .getname = packet_getname,
4446 .poll_mask = packet_poll_mask,4447 .poll = packet_poll,
4447 .ioctl = packet_ioctl,4448 .ioctl = packet_ioctl,
4448 .listen = sock_no_listen,4449 .listen = sock_no_listen,
4449 .shutdown = sock_no_shutdown,4450 .shutdown = sock_no_shutdown,
net/phonet/socket.c+6−3
@@ -340,12 +340,15 @@ static int pn_socket_getname(struct socket *sock, struct sockaddr *addr, · 339 unmodified lines
340 return sizeof(struct sockaddr_pn);340 return sizeof(struct sockaddr_pn);
341}341}
342 342
343static __poll_t pn_socket_poll_mask(struct socket *sock, __poll_t events)343static __poll_t pn_socket_poll(struct file *file, struct socket *sock,
344 poll_table *wait)
344{345{
345 struct sock *sk = sock->sk;346 struct sock *sk = sock->sk;
346 struct pep_sock *pn = pep_sk(sk);347 struct pep_sock *pn = pep_sk(sk);
347 __poll_t mask = 0;348 __poll_t mask = 0;
348 349
350 poll_wait(file, sk_sleep(sk), wait);
351
349 if (sk->sk_state == TCP_CLOSE)352 if (sk->sk_state == TCP_CLOSE)
350 return EPOLLERR;353 return EPOLLERR;
351 if (!skb_queue_empty(&sk->sk_receive_queue))354 if (!skb_queue_empty(&sk->sk_receive_queue))
@@ -445,7 +448,7 @@ const struct proto_ops phonet_dgram_ops = { · 93 unmodified lines
445 .socketpair = sock_no_socketpair,448 .socketpair = sock_no_socketpair,
446 .accept = sock_no_accept,449 .accept = sock_no_accept,
447 .getname = pn_socket_getname,450 .getname = pn_socket_getname,
448 .poll_mask = datagram_poll_mask,451 .poll = datagram_poll,
449 .ioctl = pn_socket_ioctl,452 .ioctl = pn_socket_ioctl,
450 .listen = sock_no_listen,453 .listen = sock_no_listen,
451 .shutdown = sock_no_shutdown,454 .shutdown = sock_no_shutdown,
@@ -470,7 +473,7 @@ const struct proto_ops phonet_stream_ops = { · 18 unmodified lines
470 .socketpair = sock_no_socketpair,473 .socketpair = sock_no_socketpair,
471 .accept = pn_socket_accept,474 .accept = pn_socket_accept,
472 .getname = pn_socket_getname,475 .getname = pn_socket_getname,
473 .poll_mask = pn_socket_poll_mask,476 .poll = pn_socket_poll,
474 .ioctl = pn_socket_ioctl,477 .ioctl = pn_socket_ioctl,
475 .listen = pn_socket_listen,478 .listen = pn_socket_listen,
476 .shutdown = sock_no_shutdown,479 .shutdown = sock_no_shutdown,
net/qrtr/qrtr.c+1−1
@@ -1023,7 +1023,7 @@ static const struct proto_ops qrtr_proto_ops = { · 1022 unmodified lines
1023 .recvmsg = qrtr_recvmsg,1023 .recvmsg = qrtr_recvmsg,
1024 .getname = qrtr_getname,1024 .getname = qrtr_getname,
1025 .ioctl = qrtr_ioctl,1025 .ioctl = qrtr_ioctl,
1026 .poll_mask = datagram_poll_mask,1026 .poll = datagram_poll,
1027 .shutdown = sock_no_shutdown,1027 .shutdown = sock_no_shutdown,
1028 .setsockopt = sock_no_setsockopt,1028 .setsockopt = sock_no_setsockopt,
1029 .getsockopt = sock_no_getsockopt,1029 .getsockopt = sock_no_getsockopt,
net/rds/connection.c+10−1
@@ -659,11 +659,19 @@ static void rds_conn_info(struct socket *sock, unsigned int len, · 658 unmodified lines
659 659
660int rds_conn_init(void)660int rds_conn_init(void)
661{661{
662 int ret;
663
664 ret = rds_loop_net_init(); /* register pernet callback */
665 if (ret)
666 return ret;
667
662 rds_conn_slab = kmem_cache_create("rds_connection",668 rds_conn_slab = kmem_cache_create("rds_connection",
663 sizeof(struct rds_connection),669 sizeof(struct rds_connection),
664 0, 0, NULL);670 0, 0, NULL);
665 if (!rds_conn_slab)671 if (!rds_conn_slab) {
672 rds_loop_net_exit();
666 return -ENOMEM;673 return -ENOMEM;
674 }
667 675
668 rds_info_register_func(RDS_INFO_CONNECTIONS, rds_conn_info);676 rds_info_register_func(RDS_INFO_CONNECTIONS, rds_conn_info);
669 rds_info_register_func(RDS_INFO_SEND_MESSAGES,677 rds_info_register_func(RDS_INFO_SEND_MESSAGES,
@@ -676,6 +684,7 @@ int rds_conn_init(void) · 6 unmodified lines
676 684
677void rds_conn_exit(void)685void rds_conn_exit(void)
678{686{
687 rds_loop_net_exit(); /* unregister pernet callback */
679 rds_loop_exit();688 rds_loop_exit();
680 689
681 WARN_ON(!hlist_empty(rds_conn_hash));690 WARN_ON(!hlist_empty(rds_conn_hash));
net/rds/loop.c+56−0
@@ -33,6 +33,8 @@ · 32 unmodified lines
33#include <linux/kernel.h>33#include <linux/kernel.h>
34#include <linux/slab.h>34#include <linux/slab.h>
35#include <linux/in.h>35#include <linux/in.h>
36#include <net/net_namespace.h>
37#include <net/netns/generic.h>
36 38
37#include "rds_single_path.h"39#include "rds_single_path.h"
38#include "rds.h"40#include "rds.h"
@@ -40,6 +42,17 @@ · 1 unmodified line
40 42
41static DEFINE_SPINLOCK(loop_conns_lock);43static DEFINE_SPINLOCK(loop_conns_lock);
42static LIST_HEAD(loop_conns);44static LIST_HEAD(loop_conns);
45static atomic_t rds_loop_unloading = ATOMIC_INIT(0);
46
47static void rds_loop_set_unloading(void)
48{
49 atomic_set(&rds_loop_unloading, 1);
50}
51
52static bool rds_loop_is_unloading(struct rds_connection *conn)
53{
54 return atomic_read(&rds_loop_unloading) != 0;
55}
43 56
44/*57/*
45 * This 'loopback' transport is a special case for flows that originate58 * This 'loopback' transport is a special case for flows that originate
@@ -165,6 +178,8 @@ void rds_loop_exit(void) · 119 unmodified lines
165 struct rds_loop_connection *lc, *_lc;178 struct rds_loop_connection *lc, *_lc;
166 LIST_HEAD(tmp_list);179 LIST_HEAD(tmp_list);
167 180
181 rds_loop_set_unloading();
182 synchronize_rcu();
168 /* avoid calling conn_destroy with irqs off */183 /* avoid calling conn_destroy with irqs off */
169 spin_lock_irq(&loop_conns_lock);184 spin_lock_irq(&loop_conns_lock);
170 list_splice(&loop_conns, &tmp_list);185 list_splice(&loop_conns, &tmp_list);
@@ -177,6 +192,46 @@ void rds_loop_exit(void) · 6 unmodified lines
177 }192 }
178}193}
179 194
195static void rds_loop_kill_conns(struct net *net)
196{
197 struct rds_loop_connection *lc, *_lc;
198 LIST_HEAD(tmp_list);
199
200 spin_lock_irq(&loop_conns_lock);
201 list_for_each_entry_safe(lc, _lc, &loop_conns, loop_node) {
202 struct net *c_net = read_pnet(&lc->conn->c_net);
203
204 if (net != c_net)
205 continue;
206 list_move_tail(&lc->loop_node, &tmp_list);
207 }
208 spin_unlock_irq(&loop_conns_lock);
209
210 list_for_each_entry_safe(lc, _lc, &tmp_list, loop_node) {
211 WARN_ON(lc->conn->c_passive);
212 rds_conn_destroy(lc->conn);
213 }
214}
215
216static void __net_exit rds_loop_exit_net(struct net *net)
217{
218 rds_loop_kill_conns(net);
219}
220
221static struct pernet_operations rds_loop_net_ops = {
222 .exit = rds_loop_exit_net,
223};
224
225int rds_loop_net_init(void)
226{
227 return register_pernet_device(&rds_loop_net_ops);
228}
229
230void rds_loop_net_exit(void)
231{
232 unregister_pernet_device(&rds_loop_net_ops);
233}
234
180/*235/*
181 * This is missing .xmit_* because loop doesn't go through generic236 * This is missing .xmit_* because loop doesn't go through generic
182 * rds_send_xmit() and doesn't call rds_recv_incoming(). .listen_stop and237 * rds_send_xmit() and doesn't call rds_recv_incoming(). .listen_stop and
@@ -194,4 +249,5 @@ struct rds_transport rds_loop_transport = { · 11 unmodified lines
194 .inc_free = rds_loop_inc_free,249 .inc_free = rds_loop_inc_free,
195 .t_name = "loopback",250 .t_name = "loopback",
196 .t_type = RDS_TRANS_LOOP,251 .t_type = RDS_TRANS_LOOP,
252 .t_unloading = rds_loop_is_unloading,
197};253};
net/rds/loop.h+2−0
@@ -5,6 +5,8 @@ · 4 unmodified lines
5/* loop.c */5/* loop.c */
6extern struct rds_transport rds_loop_transport;6extern struct rds_transport rds_loop_transport;
7 7
8int rds_loop_net_init(void);
9void rds_loop_net_exit(void);
8void rds_loop_exit(void);10void rds_loop_exit(void);
9 11
10#endif12#endif
net/rose/af_rose.c+1−1
@@ -1470,7 +1470,7 @@ static const struct proto_ops rose_proto_ops = { · 1469 unmodified lines
1470 .socketpair = sock_no_socketpair,1470 .socketpair = sock_no_socketpair,
1471 .accept = rose_accept,1471 .accept = rose_accept,
1472 .getname = rose_getname,1472 .getname = rose_getname,
1473 .poll_mask = datagram_poll_mask,1473 .poll = datagram_poll,
1474 .ioctl = rose_ioctl,1474 .ioctl = rose_ioctl,
1475 .listen = rose_listen,1475 .listen = rose_listen,
1476 .shutdown = sock_no_shutdown,1476 .shutdown = sock_no_shutdown,
net/rxrpc/af_rxrpc.c+7−3
@@ -734,11 +734,15 @@ static int rxrpc_getsockopt(struct socket *sock, int level, int optname, · 733 unmodified lines
734/*734/*
735 * permit an RxRPC socket to be polled735 * permit an RxRPC socket to be polled
736 */736 */
737static __poll_t rxrpc_poll_mask(struct socket *sock, __poll_t events)737static __poll_t rxrpc_poll(struct file *file, struct socket *sock,
738 poll_table *wait)
738{739{
739 struct sock *sk = sock->sk;740 struct sock *sk = sock->sk;
740 struct rxrpc_sock *rx = rxrpc_sk(sk);741 struct rxrpc_sock *rx = rxrpc_sk(sk);
741 __poll_t mask = 0;742 __poll_t mask;
743
744 sock_poll_wait(file, sk_sleep(sk), wait);
745 mask = 0;
742 746
743 /* the socket is readable if there are any messages waiting on the Rx747 /* the socket is readable if there are any messages waiting on the Rx
744 * queue */748 * queue */
@@ -945,7 +949,7 @@ static const struct proto_ops rxrpc_rpc_ops = { · 200 unmodified lines
945 .socketpair = sock_no_socketpair,949 .socketpair = sock_no_socketpair,
946 .accept = sock_no_accept,950 .accept = sock_no_accept,
947 .getname = sock_no_getname,951 .getname = sock_no_getname,
948 .poll_mask = rxrpc_poll_mask,952 .poll = rxrpc_poll,
949 .ioctl = sock_no_ioctl,953 .ioctl = sock_no_ioctl,
950 .listen = rxrpc_listen,954 .listen = rxrpc_listen,
951 .shutdown = rxrpc_shutdown,955 .shutdown = rxrpc_shutdown,
net/sctp/ipv6.c+1−1
@@ -1010,7 +1010,7 @@ static const struct proto_ops inet6_seqpacket_ops = { · 1009 unmodified lines
1010 .socketpair = sock_no_socketpair,1010 .socketpair = sock_no_socketpair,
1011 .accept = inet_accept,1011 .accept = inet_accept,
1012 .getname = sctp_getname,1012 .getname = sctp_getname,
1013 .poll_mask = sctp_poll_mask,1013 .poll = sctp_poll,
1014 .ioctl = inet6_ioctl,1014 .ioctl = inet6_ioctl,
1015 .listen = sctp_inet_listen,1015 .listen = sctp_inet_listen,
1016 .shutdown = inet_shutdown,1016 .shutdown = inet_shutdown,
net/sctp/protocol.c+1−1
@@ -1016,7 +1016,7 @@ static const struct proto_ops inet_seqpacket_ops = { · 1015 unmodified lines
1016 .socketpair = sock_no_socketpair,1016 .socketpair = sock_no_socketpair,
1017 .accept = inet_accept,1017 .accept = inet_accept,
1018 .getname = inet_getname, /* Semantics are different. */1018 .getname = inet_getname, /* Semantics are different. */
1019 .poll_mask = sctp_poll_mask,1019 .poll = sctp_poll,
1020 .ioctl = inet_ioctl,1020 .ioctl = inet_ioctl,
1021 .listen = sctp_inet_listen,1021 .listen = sctp_inet_listen,
1022 .shutdown = inet_shutdown, /* Looks harmless. */1022 .shutdown = inet_shutdown, /* Looks harmless. */
net/sctp/socket.c+3−1
@@ -7765,12 +7765,14 @@ out: · 7764 unmodified lines
7765 * here, again, by modeling the current TCP/UDP code. We don't have7765 * here, again, by modeling the current TCP/UDP code. We don't have
7766 * a good way to test with it yet.7766 * a good way to test with it yet.
7767 */7767 */
7768__poll_t sctp_poll_mask(struct socket *sock, __poll_t events)7768__poll_t sctp_poll(struct file *file, struct socket *sock, poll_table *wait)
7769{7769{
7770 struct sock *sk = sock->sk;7770 struct sock *sk = sock->sk;
7771 struct sctp_sock *sp = sctp_sk(sk);7771 struct sctp_sock *sp = sctp_sk(sk);
7772 __poll_t mask;7772 __poll_t mask;
7773 7773
7774 poll_wait(file, sk_sleep(sk), wait);
7775
7774 sock_rps_record_flow(sk);7776 sock_rps_record_flow(sk);
7775 7777
7776 /* A TCP-style listening socket becomes readable when the accept queue7778 /* A TCP-style listening socket becomes readable when the accept queue
net/smc/af_smc.c+67−31
@@ -47,6 +47,7 @@ static DEFINE_MUTEX(smc_create_lgr_pending); /* serialize link group · 46 unmodified lines
47 */47 */
48 48
49static void smc_tcp_listen_work(struct work_struct *);49static void smc_tcp_listen_work(struct work_struct *);
50static void smc_connect_work(struct work_struct *);
50 51
51static void smc_set_keepalive(struct sock *sk, int val)52static void smc_set_keepalive(struct sock *sk, int val)
52{53{
@@ -124,6 +125,12 @@ static int smc_release(struct socket *sock) · 71 unmodified lines
124 goto out;125 goto out;
125 126
126 smc = smc_sk(sk);127 smc = smc_sk(sk);
128
129 /* cleanup for a dangling non-blocking connect */
130 flush_work(&smc->connect_work);
131 kfree(smc->connect_info);
132 smc->connect_info = NULL;
133
127 if (sk->sk_state == SMC_LISTEN)134 if (sk->sk_state == SMC_LISTEN)
128 /* smc_close_non_accepted() is called and acquires135 /* smc_close_non_accepted() is called and acquires
129 * sock lock for child sockets again136 * sock lock for child sockets again
@@ -188,6 +195,7 @@ static struct sock *smc_sock_alloc(struct net *net, struct socket *sock, · 58 unmodified lines
188 sk->sk_protocol = protocol;195 sk->sk_protocol = protocol;
189 smc = smc_sk(sk);196 smc = smc_sk(sk);
190 INIT_WORK(&smc->tcp_listen_work, smc_tcp_listen_work);197 INIT_WORK(&smc->tcp_listen_work, smc_tcp_listen_work);
198 INIT_WORK(&smc->connect_work, smc_connect_work);
191 INIT_DELAYED_WORK(&smc->conn.tx_work, smc_tx_work);199 INIT_DELAYED_WORK(&smc->conn.tx_work, smc_tx_work);
192 INIT_LIST_HEAD(&smc->accept_q);200 INIT_LIST_HEAD(&smc->accept_q);
193 spin_lock_init(&smc->accept_q_lock);201 spin_lock_init(&smc->accept_q_lock);
@@ -707,6 +715,35 @@ static int __smc_connect(struct smc_sock *smc) · 513 unmodified lines
707 return 0;715 return 0;
708}716}
709 717
718static void smc_connect_work(struct work_struct *work)
719{
720 struct smc_sock *smc = container_of(work, struct smc_sock,
721 connect_work);
722 int rc;
723
724 lock_sock(&smc->sk);
725 rc = kernel_connect(smc->clcsock, &smc->connect_info->addr,
726 smc->connect_info->alen, smc->connect_info->flags);
727 if (smc->clcsock->sk->sk_err) {
728 smc->sk.sk_err = smc->clcsock->sk->sk_err;
729 goto out;
730 }
731 if (rc < 0) {
732 smc->sk.sk_err = -rc;
733 goto out;
734 }
735
736 rc = __smc_connect(smc);
737 if (rc < 0)
738 smc->sk.sk_err = -rc;
739
740out:
741 smc->sk.sk_state_change(&smc->sk);
742 kfree(smc->connect_info);
743 smc->connect_info = NULL;
744 release_sock(&smc->sk);
745}
746
710static int smc_connect(struct socket *sock, struct sockaddr *addr,747static int smc_connect(struct socket *sock, struct sockaddr *addr,
711 int alen, int flags)748 int alen, int flags)
712{749{
@@ -736,15 +773,32 @@ static int smc_connect(struct socket *sock, struct sockaddr *addr, · 23 unmodified lines
736 773
737 smc_copy_sock_settings_to_clc(smc);774 smc_copy_sock_settings_to_clc(smc);
738 tcp_sk(smc->clcsock->sk)->syn_smc = 1;775 tcp_sk(smc->clcsock->sk)->syn_smc = 1;
739 rc = kernel_connect(smc->clcsock, addr, alen, flags);776 if (flags & O_NONBLOCK) {
740 if (rc)777 if (smc->connect_info) {
741 goto out;778 rc = -EALREADY;
779 goto out;
780 }
781 smc->connect_info = kzalloc(alen + 2 * sizeof(int), GFP_KERNEL);
782 if (!smc->connect_info) {
783 rc = -ENOMEM;
784 goto out;
785 }
786 smc->connect_info->alen = alen;
787 smc->connect_info->flags = flags ^ O_NONBLOCK;
788 memcpy(&smc->connect_info->addr, addr, alen);
789 schedule_work(&smc->connect_work);
790 rc = -EINPROGRESS;
791 } else {
792 rc = kernel_connect(smc->clcsock, addr, alen, flags);
793 if (rc)
794 goto out;
742 795
743 rc = __smc_connect(smc);796 rc = __smc_connect(smc);
744 if (rc < 0)797 if (rc < 0)
745 goto out;798 goto out;
746 else799 else
747 rc = 0; /* success cases including fallback */800 rc = 0; /* success cases including fallback */
801 }
748 802
749out:803out:
750 release_sock(sk);804 release_sock(sk);
@@ -1455,39 +1509,23 @@ static __poll_t smc_accept_poll(struct sock *parent) · 704 unmodified lines
1455 return mask;1509 return mask;
1456}1510}
1457 1511
1458static __poll_t smc_poll_mask(struct socket *sock, __poll_t events)1512static __poll_t smc_poll(struct file *file, struct socket *sock,
1513 poll_table *wait)
1459{1514{
1460 struct sock *sk = sock->sk;1515 struct sock *sk = sock->sk;
1461 __poll_t mask = 0;1516 __poll_t mask = 0;
1462 struct smc_sock *smc;1517 struct smc_sock *smc;
1463 int rc;
1464 1518
1465 if (!sk)1519 if (!sk)
1466 return EPOLLNVAL;1520 return EPOLLNVAL;
1467 1521
1468 smc = smc_sk(sock->sk);1522 smc = smc_sk(sock->sk);
1469 sock_hold(sk);
1470 lock_sock(sk);
1471 if ((sk->sk_state == SMC_INIT) || smc->use_fallback) {1523 if ((sk->sk_state == SMC_INIT) || smc->use_fallback) {
1472 /* delegate to CLC child sock */1524 /* delegate to CLC child sock */
1473 release_sock(sk);1525 mask = smc->clcsock->ops->poll(file, smc->clcsock, wait);
1474 mask = smc->clcsock->ops->poll_mask(smc->clcsock, events);
1475 lock_sock(sk);
1476 sk->sk_err = smc->clcsock->sk->sk_err;1526 sk->sk_err = smc->clcsock->sk->sk_err;
1477 if (sk->sk_err) {1527 if (sk->sk_err)
1478 mask |= EPOLLERR;1528 mask |= EPOLLERR;
1479 } else {
1480 /* if non-blocking connect finished ... */
1481 if (sk->sk_state == SMC_INIT &&
1482 mask & EPOLLOUT &&
1483 smc->clcsock->sk->sk_state != TCP_CLOSE) {
1484 rc = __smc_connect(smc);
1485 if (rc < 0)
1486 mask |= EPOLLERR;
1487 /* success cases including fallback */
1488 mask |= EPOLLOUT | EPOLLWRNORM;
1489 }
1490 }
1491 } else {1529 } else {
1492 if (sk->sk_err)1530 if (sk->sk_err)
1493 mask |= EPOLLERR;1531 mask |= EPOLLERR;
@@ -1516,8 +1554,6 @@ static __poll_t smc_poll_mask(struct socket *sock, __poll_t events) · 22 unmodified lines
1516 mask |= EPOLLPRI;1554 mask |= EPOLLPRI;
1517 1555
1518 }1556 }
1519 release_sock(sk);
1520 sock_put(sk);
1521 1557
1522 return mask;1558 return mask;
1523}1559}
@@ -1801,7 +1837,7 @@ static const struct proto_ops smc_sock_ops = { · 277 unmodified lines
1801 .socketpair = sock_no_socketpair,1837 .socketpair = sock_no_socketpair,
1802 .accept = smc_accept,1838 .accept = smc_accept,
1803 .getname = smc_getname,1839 .getname = smc_getname,
1804 .poll_mask = smc_poll_mask,1840 .poll = smc_poll,
1805 .ioctl = smc_ioctl,1841 .ioctl = smc_ioctl,
1806 .listen = smc_listen,1842 .listen = smc_listen,
1807 .shutdown = smc_shutdown,1843 .shutdown = smc_shutdown,
net/smc/smc.h+8−0
@@ -190,11 +190,19 @@ struct smc_connection { · 189 unmodified lines
190 u64 peer_token; /* SMC-D token of peer */190 u64 peer_token; /* SMC-D token of peer */
191};191};
192 192
193struct smc_connect_info {
194 int flags;
195 int alen;
196 struct sockaddr addr;
197};
198
193struct smc_sock { /* smc sock container */199struct smc_sock { /* smc sock container */
194 struct sock sk;200 struct sock sk;
195 struct socket *clcsock; /* internal tcp socket */201 struct socket *clcsock; /* internal tcp socket */
196 struct smc_connection conn; /* smc connection */202 struct smc_connection conn; /* smc connection */
197 struct smc_sock *listen_smc; /* listen parent */203 struct smc_sock *listen_smc; /* listen parent */
204 struct smc_connect_info *connect_info; /* connect address & flags */
205 struct work_struct connect_work; /* handle non-blocking connect*/
198 struct work_struct tcp_listen_work;/* handle tcp socket accepts */206 struct work_struct tcp_listen_work;/* handle tcp socket accepts */
199 struct work_struct smc_listen_work;/* prepare new accept socket */207 struct work_struct smc_listen_work;/* prepare new accept socket */
200 struct list_head accept_q; /* sockets to be accepted */208 struct list_head accept_q; /* sockets to be accepted */
net/socket.c+7−43
@@ -117,10 +117,8 @@ static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from); · 116 unmodified lines
117static int sock_mmap(struct file *file, struct vm_area_struct *vma);117static int sock_mmap(struct file *file, struct vm_area_struct *vma);
118 118
119static int sock_close(struct inode *inode, struct file *file);119static int sock_close(struct inode *inode, struct file *file);
120static struct wait_queue_head *sock_get_poll_head(struct file *file,120static __poll_t sock_poll(struct file *file,
121 __poll_t events);121 struct poll_table_struct *wait);
122static __poll_t sock_poll_mask(struct file *file, __poll_t);
123static __poll_t sock_poll(struct file *file, struct poll_table_struct *wait);
124static long sock_ioctl(struct file *file, unsigned int cmd, unsigned long arg);122static long sock_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
125#ifdef CONFIG_COMPAT123#ifdef CONFIG_COMPAT
126static long compat_sock_ioctl(struct file *file,124static long compat_sock_ioctl(struct file *file,
@@ -143,8 +141,6 @@ static const struct file_operations socket_file_ops = { · 16 unmodified lines
143 .llseek = no_llseek,141 .llseek = no_llseek,
144 .read_iter = sock_read_iter,142 .read_iter = sock_read_iter,
145 .write_iter = sock_write_iter,143 .write_iter = sock_write_iter,
146 .get_poll_head = sock_get_poll_head,
147 .poll_mask = sock_poll_mask,
148 .poll = sock_poll,144 .poll = sock_poll,
149 .unlocked_ioctl = sock_ioctl,145 .unlocked_ioctl = sock_ioctl,
150#ifdef CONFIG_COMPAT146#ifdef CONFIG_COMPAT
@@ -1130,48 +1126,16 @@ out_release: · 979 unmodified lines
1130}1126}
1131EXPORT_SYMBOL(sock_create_lite);1127EXPORT_SYMBOL(sock_create_lite);
1132 1128
1133static struct wait_queue_head *sock_get_poll_head(struct file *file,
1134 __poll_t events)
1135{
1136 struct socket *sock = file->private_data;
1137
1138 if (!sock->ops->poll_mask)
1139 return NULL;
1140 sock_poll_busy_loop(sock, events);
1141 return sk_sleep(sock->sk);
1142}
1143
1144static __poll_t sock_poll_mask(struct file *file, __poll_t events)
1145{
1146 struct socket *sock = file->private_data;
1147
1148 /*
1149 * We need to be sure we are in sync with the socket flags modification.
1150 *
1151 * This memory barrier is paired in the wq_has_sleeper.
1152 */
1153 smp_mb();
1154
1155 /* this socket can poll_ll so tell the system call */
1156 return sock->ops->poll_mask(sock, events) |
1157 (sk_can_busy_loop(sock->sk) ? POLL_BUSY_LOOP : 0);
1158}
1159
1160/* No kernel lock held - perfect */1129/* No kernel lock held - perfect */
1161static __poll_t sock_poll(struct file *file, poll_table *wait)1130static __poll_t sock_poll(struct file *file, poll_table *wait)
1162{1131{
1163 struct socket *sock = file->private_data;1132 struct socket *sock = file->private_data;
1164 __poll_t events = poll_requested_events(wait), mask = 0;1133 __poll_t events = poll_requested_events(wait);
1165
1166 if (sock->ops->poll) {
1167 sock_poll_busy_loop(sock, events);
1168 mask = sock->ops->poll(file, sock, wait);
1169 } else if (sock->ops->poll_mask) {
1170 sock_poll_wait(file, sock_get_poll_head(file, events), wait);
1171 mask = sock->ops->poll_mask(sock, events);
1172 }
1173 1134
1174 return mask | sock_poll_busy_flag(sock);1135 sock_poll_busy_loop(sock, events);
1136 if (!sock->ops->poll)
1137 return 0;
1138 return sock->ops->poll(file, sock, wait) | sock_poll_busy_flag(sock);
1175}1139}
1176 1140
1177static int sock_mmap(struct file *file, struct vm_area_struct *vma)1141static int sock_mmap(struct file *file, struct vm_area_struct *vma)
net/strparser/strparser.c+1−16
@@ -35,7 +35,6 @@ struct _strp_msg { · 34 unmodified lines
35 */35 */
36 struct strp_msg strp;36 struct strp_msg strp;
37 int accum_len;37 int accum_len;
38 int early_eaten;
39};38};
40 39
41static inline struct _strp_msg *_strp_msg(struct sk_buff *skb)40static inline struct _strp_msg *_strp_msg(struct sk_buff *skb)
@@ -115,20 +114,6 @@ static int __strp_recv(read_descriptor_t *desc, struct sk_buff *orig_skb, · 73 unmodified lines
115 head = strp->skb_head;114 head = strp->skb_head;
116 if (head) {115 if (head) {
117 /* Message already in progress */116 /* Message already in progress */
118
119 stm = _strp_msg(head);
120 if (unlikely(stm->early_eaten)) {
121 /* Already some number of bytes on the receive sock
122 * data saved in skb_head, just indicate they
123 * are consumed.
124 */
125 eaten = orig_len <= stm->early_eaten ?
126 orig_len : stm->early_eaten;
127 stm->early_eaten -= eaten;
128
129 return eaten;
130 }
131
132 if (unlikely(orig_offset)) {117 if (unlikely(orig_offset)) {
133 /* Getting data with a non-zero offset when a message is118 /* Getting data with a non-zero offset when a message is
134 * in progress is not expected. If it does happen, we119 * in progress is not expected. If it does happen, we
@@ -301,9 +286,9 @@ static int __strp_recv(read_descriptor_t *desc, struct sk_buff *orig_skb, · 166 unmodified lines
301 }286 }
302 287
303 stm->accum_len += cand_len;288 stm->accum_len += cand_len;
289 eaten += cand_len;
304 strp->need_bytes = stm->strp.full_len -290 strp->need_bytes = stm->strp.full_len -
305 stm->accum_len;291 stm->accum_len;
306 stm->early_eaten = cand_len;
307 STRP_STATS_ADD(strp->stats.bytes, cand_len);292 STRP_STATS_ADD(strp->stats.bytes, cand_len);
308 desc->count = 0; /* Stop reading socket */293 desc->count = 0; /* Stop reading socket */
309 break;294 break;
net/tipc/socket.c+9−5
@@ -692,9 +692,10 @@ static int tipc_getname(struct socket *sock, struct sockaddr *uaddr, · 691 unmodified lines
692}692}
693 693
694/**694/**
695 * tipc_poll - read pollmask695 * tipc_poll - read and possibly block on pollmask
696 * @file: file structure associated with the socket696 * @file: file structure associated with the socket
697 * @sock: socket for which to calculate the poll bits697 * @sock: socket for which to calculate the poll bits
698 * @wait: ???
698 *699 *
699 * Returns pollmask value700 * Returns pollmask value
700 *701 *
@@ -708,12 +709,15 @@ static int tipc_getname(struct socket *sock, struct sockaddr *uaddr, · 7 unmodified lines
708 * imply that the operation will succeed, merely that it should be performed709 * imply that the operation will succeed, merely that it should be performed
709 * and will not block.710 * and will not block.
710 */711 */
711static __poll_t tipc_poll_mask(struct socket *sock, __poll_t events)712static __poll_t tipc_poll(struct file *file, struct socket *sock,
713 poll_table *wait)
712{714{
713 struct sock *sk = sock->sk;715 struct sock *sk = sock->sk;
714 struct tipc_sock *tsk = tipc_sk(sk);716 struct tipc_sock *tsk = tipc_sk(sk);
715 __poll_t revents = 0;717 __poll_t revents = 0;
716 718
719 sock_poll_wait(file, sk_sleep(sk), wait);
720
717 if (sk->sk_shutdown & RCV_SHUTDOWN)721 if (sk->sk_shutdown & RCV_SHUTDOWN)
718 revents |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;722 revents |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
719 if (sk->sk_shutdown == SHUTDOWN_MASK)723 if (sk->sk_shutdown == SHUTDOWN_MASK)
@@ -3033,7 +3037,7 @@ static const struct proto_ops msg_ops = { · 2313 unmodified lines
3033 .socketpair = tipc_socketpair,3037 .socketpair = tipc_socketpair,
3034 .accept = sock_no_accept,3038 .accept = sock_no_accept,
3035 .getname = tipc_getname,3039 .getname = tipc_getname,
3036 .poll_mask = tipc_poll_mask,3040 .poll = tipc_poll,
3037 .ioctl = tipc_ioctl,3041 .ioctl = tipc_ioctl,
3038 .listen = sock_no_listen,3042 .listen = sock_no_listen,
3039 .shutdown = tipc_shutdown,3043 .shutdown = tipc_shutdown,
@@ -3054,7 +3058,7 @@ static const struct proto_ops packet_ops = { · 14 unmodified lines
3054 .socketpair = tipc_socketpair,3058 .socketpair = tipc_socketpair,
3055 .accept = tipc_accept,3059 .accept = tipc_accept,
3056 .getname = tipc_getname,3060 .getname = tipc_getname,
3057 .poll_mask = tipc_poll_mask,3061 .poll = tipc_poll,
3058 .ioctl = tipc_ioctl,3062 .ioctl = tipc_ioctl,
3059 .listen = tipc_listen,3063 .listen = tipc_listen,
3060 .shutdown = tipc_shutdown,3064 .shutdown = tipc_shutdown,
@@ -3075,7 +3079,7 @@ static const struct proto_ops stream_ops = { · 14 unmodified lines
3075 .socketpair = tipc_socketpair,3079 .socketpair = tipc_socketpair,
3076 .accept = tipc_accept,3080 .accept = tipc_accept,
3077 .getname = tipc_getname,3081 .getname = tipc_getname,
3078 .poll_mask = tipc_poll_mask,3082 .poll = tipc_poll,
3079 .ioctl = tipc_ioctl,3083 .ioctl = tipc_ioctl,
3080 .listen = tipc_listen,3084 .listen = tipc_listen,
3081 .shutdown = tipc_shutdown,3085 .shutdown = tipc_shutdown,
net/tls/tls_main.c+1−1
@@ -712,7 +712,7 @@ static int __init tls_register(void) · 711 unmodified lines
712 build_protos(tls_prots[TLSV4], &tcp_prot);712 build_protos(tls_prots[TLSV4], &tcp_prot);
713 713
714 tls_sw_proto_ops = inet_stream_ops;714 tls_sw_proto_ops = inet_stream_ops;
715 tls_sw_proto_ops.poll_mask = tls_sw_poll_mask;715 tls_sw_proto_ops.poll = tls_sw_poll;
716 tls_sw_proto_ops.splice_read = tls_sw_splice_read;716 tls_sw_proto_ops.splice_read = tls_sw_splice_read;
717 717
718#ifdef CONFIG_TLS_DEVICE718#ifdef CONFIG_TLS_DEVICE
net/tls/tls_sw.c+10−9
@@ -919,22 +919,23 @@ splice_read_end: · 918 unmodified lines
919 return copied ? : err;919 return copied ? : err;
920}920}
921 921
922__poll_t tls_sw_poll_mask(struct socket *sock, __poll_t events)922unsigned int tls_sw_poll(struct file *file, struct socket *sock,
923 struct poll_table_struct *wait)
923{924{
925 unsigned int ret;
924 struct sock *sk = sock->sk;926 struct sock *sk = sock->sk;
925 struct tls_context *tls_ctx = tls_get_ctx(sk);927 struct tls_context *tls_ctx = tls_get_ctx(sk);
926 struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx);928 struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx);
927 __poll_t mask;
928 929
929 /* Grab EPOLLOUT and EPOLLHUP from the underlying socket */930 /* Grab POLLOUT and POLLHUP from the underlying socket */
930 mask = ctx->sk_poll_mask(sock, events);931 ret = ctx->sk_poll(file, sock, wait);
931 932
932 /* Clear EPOLLIN bits, and set based on recv_pkt */933 /* Clear POLLIN bits, and set based on recv_pkt */
933 mask &= ~(EPOLLIN | EPOLLRDNORM);934 ret &= ~(POLLIN | POLLRDNORM);
934 if (ctx->recv_pkt)935 if (ctx->recv_pkt)
935 mask |= EPOLLIN | EPOLLRDNORM;936 ret |= POLLIN | POLLRDNORM;
936 937
937 return mask;938 return ret;
938}939}
939 940
940static int tls_read_size(struct strparser *strp, struct sk_buff *skb)941static int tls_read_size(struct strparser *strp, struct sk_buff *skb)
@@ -1194,7 +1195,7 @@ int tls_set_sw_offload(struct sock *sk, struct tls_context *ctx, int tx) · 253 unmodified lines
1194 sk->sk_data_ready = tls_data_ready;1195 sk->sk_data_ready = tls_data_ready;
1195 write_unlock_bh(&sk->sk_callback_lock);1196 write_unlock_bh(&sk->sk_callback_lock);
1196 1197
1197 sw_ctx_rx->sk_poll_mask = sk->sk_socket->ops->poll_mask;1198 sw_ctx_rx->sk_poll = sk->sk_socket->ops->poll;
1198 1199
1199 strp_check_rcv(&sw_ctx_rx->strp);1200 strp_check_rcv(&sw_ctx_rx->strp);
1200 }1201 }
net/unix/af_unix.c+19−11
@@ -638,8 +638,9 @@ static int unix_stream_connect(struct socket *, struct sockaddr *, · 637 unmodified lines
638static int unix_socketpair(struct socket *, struct socket *);638static int unix_socketpair(struct socket *, struct socket *);
639static int unix_accept(struct socket *, struct socket *, int, bool);639static int unix_accept(struct socket *, struct socket *, int, bool);
640static int unix_getname(struct socket *, struct sockaddr *, int);640static int unix_getname(struct socket *, struct sockaddr *, int);
641static __poll_t unix_poll_mask(struct socket *, __poll_t);641static __poll_t unix_poll(struct file *, struct socket *, poll_table *);
642static __poll_t unix_dgram_poll_mask(struct socket *, __poll_t);642static __poll_t unix_dgram_poll(struct file *, struct socket *,
643 poll_table *);
643static int unix_ioctl(struct socket *, unsigned int, unsigned long);644static int unix_ioctl(struct socket *, unsigned int, unsigned long);
644static int unix_shutdown(struct socket *, int);645static int unix_shutdown(struct socket *, int);
645static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t);646static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t);
@@ -680,7 +681,7 @@ static const struct proto_ops unix_stream_ops = { · 34 unmodified lines
680 .socketpair = unix_socketpair,681 .socketpair = unix_socketpair,
681 .accept = unix_accept,682 .accept = unix_accept,
682 .getname = unix_getname,683 .getname = unix_getname,
683 .poll_mask = unix_poll_mask,684 .poll = unix_poll,
684 .ioctl = unix_ioctl,685 .ioctl = unix_ioctl,
685 .listen = unix_listen,686 .listen = unix_listen,
686 .shutdown = unix_shutdown,687 .shutdown = unix_shutdown,
@@ -703,7 +704,7 @@ static const struct proto_ops unix_dgram_ops = { · 16 unmodified lines
703 .socketpair = unix_socketpair,704 .socketpair = unix_socketpair,
704 .accept = sock_no_accept,705 .accept = sock_no_accept,
705 .getname = unix_getname,706 .getname = unix_getname,
706 .poll_mask = unix_dgram_poll_mask,707 .poll = unix_dgram_poll,
707 .ioctl = unix_ioctl,708 .ioctl = unix_ioctl,
708 .listen = sock_no_listen,709 .listen = sock_no_listen,
709 .shutdown = unix_shutdown,710 .shutdown = unix_shutdown,
@@ -725,7 +726,7 @@ static const struct proto_ops unix_seqpacket_ops = { · 15 unmodified lines
725 .socketpair = unix_socketpair,726 .socketpair = unix_socketpair,
726 .accept = unix_accept,727 .accept = unix_accept,
727 .getname = unix_getname,728 .getname = unix_getname,
728 .poll_mask = unix_dgram_poll_mask,729 .poll = unix_dgram_poll,
729 .ioctl = unix_ioctl,730 .ioctl = unix_ioctl,
730 .listen = unix_listen,731 .listen = unix_listen,
731 .shutdown = unix_shutdown,732 .shutdown = unix_shutdown,
@@ -2629,10 +2630,13 @@ static int unix_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) · 1897 unmodified lines
2629 return err;2630 return err;
2630}2631}
2631 2632
2632static __poll_t unix_poll_mask(struct socket *sock, __poll_t events)2633static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wait)
2633{2634{
2634 struct sock *sk = sock->sk;2635 struct sock *sk = sock->sk;
2635 __poll_t mask = 0;2636 __poll_t mask;
2637
2638 sock_poll_wait(file, sk_sleep(sk), wait);
2639 mask = 0;
2636 2640
2637 /* exceptional events? */2641 /* exceptional events? */
2638 if (sk->sk_err)2642 if (sk->sk_err)
@@ -2661,11 +2665,15 @@ static __poll_t unix_poll_mask(struct socket *sock, __poll_t events) · 22 unmodified lines
2661 return mask;2665 return mask;
2662}2666}
2663 2667
2664static __poll_t unix_dgram_poll_mask(struct socket *sock, __poll_t events)2668static __poll_t unix_dgram_poll(struct file *file, struct socket *sock,
2669 poll_table *wait)
2665{2670{
2666 struct sock *sk = sock->sk, *other;2671 struct sock *sk = sock->sk, *other;
2667 int writable;2672 unsigned int writable;
2668 __poll_t mask = 0;2673 __poll_t mask;
2674
2675 sock_poll_wait(file, sk_sleep(sk), wait);
2676 mask = 0;
2669 2677
2670 /* exceptional events? */2678 /* exceptional events? */
2671 if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))2679 if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
@@ -2691,7 +2699,7 @@ static __poll_t unix_dgram_poll_mask(struct socket *sock, __poll_t events) · 19 unmodified lines
2691 }2699 }
2692 2700
2693 /* No write status requested, avoid expensive OUT tests. */2701 /* No write status requested, avoid expensive OUT tests. */
2694 if (!(events & (EPOLLWRBAND|EPOLLWRNORM|EPOLLOUT)))2702 if (!(poll_requested_events(wait) & (EPOLLWRBAND|EPOLLWRNORM|EPOLLOUT)))
2695 return mask;2703 return mask;
2696 2704
2697 writable = unix_writable(sk);2705 writable = unix_writable(sk);
net/vmw_vsock/af_vsock.c+13−6
@@ -850,11 +850,18 @@ static int vsock_shutdown(struct socket *sock, int mode) · 849 unmodified lines
850 return err;850 return err;
851}851}
852 852
853static __poll_t vsock_poll_mask(struct socket *sock, __poll_t events)853static __poll_t vsock_poll(struct file *file, struct socket *sock,
854 poll_table *wait)
854{855{
855 struct sock *sk = sock->sk;856 struct sock *sk;
856 struct vsock_sock *vsk = vsock_sk(sk);857 __poll_t mask;
857 __poll_t mask = 0;858 struct vsock_sock *vsk;
859
860 sk = sock->sk;
861 vsk = vsock_sk(sk);
862
863 poll_wait(file, sk_sleep(sk), wait);
864 mask = 0;
858 865
859 if (sk->sk_err)866 if (sk->sk_err)
860 /* Signify that there has been an error on this socket. */867 /* Signify that there has been an error on this socket. */
@@ -1084,7 +1091,7 @@ static const struct proto_ops vsock_dgram_ops = { · 223 unmodified lines
1084 .socketpair = sock_no_socketpair,1091 .socketpair = sock_no_socketpair,
1085 .accept = sock_no_accept,1092 .accept = sock_no_accept,
1086 .getname = vsock_getname,1093 .getname = vsock_getname,
1087 .poll_mask = vsock_poll_mask,1094 .poll = vsock_poll,
1088 .ioctl = sock_no_ioctl,1095 .ioctl = sock_no_ioctl,
1089 .listen = sock_no_listen,1096 .listen = sock_no_listen,
1090 .shutdown = vsock_shutdown,1097 .shutdown = vsock_shutdown,
@@ -1842,7 +1849,7 @@ static const struct proto_ops vsock_stream_ops = { · 751 unmodified lines
1842 .socketpair = sock_no_socketpair,1849 .socketpair = sock_no_socketpair,
1843 .accept = vsock_accept,1850 .accept = vsock_accept,
1844 .getname = vsock_getname,1851 .getname = vsock_getname,
1845 .poll_mask = vsock_poll_mask,1852 .poll = vsock_poll,
1846 .ioctl = sock_no_ioctl,1853 .ioctl = sock_no_ioctl,
1847 .listen = vsock_listen,1854 .listen = vsock_listen,
1848 .shutdown = vsock_shutdown,1855 .shutdown = vsock_shutdown,
net/wireless/nl80211.c+14−21
@@ -6329,7 +6329,7 @@ do { \ · 6328 unmodified lines
6329 nl80211_check_s32);6329 nl80211_check_s32);
6330 /*6330 /*
6331 * Check HT operation mode based on6331 * Check HT operation mode based on
6332 * IEEE 802.11 2012 8.4.2.59 HT Operation element.6332 * IEEE 802.11-2016 9.4.2.57 HT Operation element.
6333 */6333 */
6334 if (tb[NL80211_MESHCONF_HT_OPMODE]) {6334 if (tb[NL80211_MESHCONF_HT_OPMODE]) {
6335 ht_opmode = nla_get_u16(tb[NL80211_MESHCONF_HT_OPMODE]);6335 ht_opmode = nla_get_u16(tb[NL80211_MESHCONF_HT_OPMODE]);
@@ -6339,22 +6339,9 @@ do { \ · 3 unmodified lines
6339 IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT))6339 IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT))
6340 return -EINVAL;6340 return -EINVAL;
6341 6341
6342 if ((ht_opmode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT) &&6342 /* NON_HT_STA bit is reserved, but some programs set it */
6343 (ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT))6343 ht_opmode &= ~IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT;
6344 return -EINVAL;
6345 6344
6346 switch (ht_opmode & IEEE80211_HT_OP_MODE_PROTECTION) {
6347 case IEEE80211_HT_OP_MODE_PROTECTION_NONE:
6348 case IEEE80211_HT_OP_MODE_PROTECTION_20MHZ:
6349 if (ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT)
6350 return -EINVAL;
6351 break;
6352 case IEEE80211_HT_OP_MODE_PROTECTION_NONMEMBER:
6353 case IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED:
6354 if (!(ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT))
6355 return -EINVAL;
6356 break;
6357 }
6358 cfg->ht_opmode = ht_opmode;6345 cfg->ht_opmode = ht_opmode;
6359 mask |= (1 << (NL80211_MESHCONF_HT_OPMODE - 1));6346 mask |= (1 << (NL80211_MESHCONF_HT_OPMODE - 1));
6360 }6347 }
@@ -11068,9 +11055,12 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info) · 4707 unmodified lines
11068 rem) {11055 rem) {
11069 u8 *mask_pat;11056 u8 *mask_pat;
11070 11057
11071 nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,11058 err = nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,
11072 nl80211_packet_pattern_policy,11059 nl80211_packet_pattern_policy,
11073 info->extack);11060 info->extack);
11061 if (err)
11062 goto error;
11063
11074 err = -EINVAL;11064 err = -EINVAL;
11075 if (!pat_tb[NL80211_PKTPAT_MASK] ||11065 if (!pat_tb[NL80211_PKTPAT_MASK] ||
11076 !pat_tb[NL80211_PKTPAT_PATTERN])11066 !pat_tb[NL80211_PKTPAT_PATTERN])
@@ -11319,8 +11309,11 @@ static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev, · 242 unmodified lines
11319 rem) {11309 rem) {
11320 u8 *mask_pat;11310 u8 *mask_pat;
11321 11311
11322 nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,11312 err = nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,
11323 nl80211_packet_pattern_policy, NULL);11313 nl80211_packet_pattern_policy, NULL);
11314 if (err)
11315 return err;
11316
11324 if (!pat_tb[NL80211_PKTPAT_MASK] ||11317 if (!pat_tb[NL80211_PKTPAT_MASK] ||
11325 !pat_tb[NL80211_PKTPAT_PATTERN])11318 !pat_tb[NL80211_PKTPAT_PATTERN])
11326 return -EINVAL;11319 return -EINVAL;
net/x25/af_x25.c+1−1
@@ -1750,7 +1750,7 @@ static const struct proto_ops x25_proto_ops = { · 1749 unmodified lines
1750 .socketpair = sock_no_socketpair,1750 .socketpair = sock_no_socketpair,
1751 .accept = x25_accept,1751 .accept = x25_accept,
1752 .getname = x25_getname,1752 .getname = x25_getname,
1753 .poll_mask = datagram_poll_mask,1753 .poll = datagram_poll,
1754 .ioctl = x25_ioctl,1754 .ioctl = x25_ioctl,
1755#ifdef CONFIG_COMPAT1755#ifdef CONFIG_COMPAT
1756 .compat_ioctl = compat_x25_ioctl,1756 .compat_ioctl = compat_x25_ioctl,
net/xdp/xsk.c+4−3
@@ -303,9 +303,10 @@ static int xsk_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len) · 302 unmodified lines
303 return (xs->zc) ? xsk_zc_xmit(sk) : xsk_generic_xmit(sk, m, total_len);303 return (xs->zc) ? xsk_zc_xmit(sk) : xsk_generic_xmit(sk, m, total_len);
304}304}
305 305
306static __poll_t xsk_poll_mask(struct socket *sock, __poll_t events)306static unsigned int xsk_poll(struct file *file, struct socket *sock,
307 struct poll_table_struct *wait)
307{308{
308 __poll_t mask = datagram_poll_mask(sock, events);309 unsigned int mask = datagram_poll(file, sock, wait);
309 struct sock *sk = sock->sk;310 struct sock *sk = sock->sk;
310 struct xdp_sock *xs = xdp_sk(sk);311 struct xdp_sock *xs = xdp_sk(sk);
311 312
@@ -696,7 +697,7 @@ static const struct proto_ops xsk_proto_ops = { · 384 unmodified lines
696 .socketpair = sock_no_socketpair,697 .socketpair = sock_no_socketpair,
697 .accept = sock_no_accept,698 .accept = sock_no_accept,
698 .getname = sock_no_getname,699 .getname = sock_no_getname,
699 .poll_mask = xsk_poll_mask,700 .poll = xsk_poll,
700 .ioctl = sock_no_ioctl,701 .ioctl = sock_no_ioctl,
701 .listen = sock_no_listen,702 .listen = sock_no_listen,
702 .shutdown = sock_no_shutdown,703 .shutdown = sock_no_shutdown,
samples/bpf/xdp_fwd_kern.c+4−4
@@ -48,9 +48,9 @@ static __always_inline int xdp_fwd_flags(struct xdp_md *ctx, u32 flags) · 47 unmodified lines
48 struct ethhdr *eth = data;48 struct ethhdr *eth = data;
49 struct ipv6hdr *ip6h;49 struct ipv6hdr *ip6h;
50 struct iphdr *iph;50 struct iphdr *iph;
51 int out_index;
52 u16 h_proto;51 u16 h_proto;
53 u64 nh_off;52 u64 nh_off;
53 int rc;
54 54
55 nh_off = sizeof(*eth);55 nh_off = sizeof(*eth);
56 if (data + nh_off > data_end)56 if (data + nh_off > data_end)
@@ -101,7 +101,7 @@ static __always_inline int xdp_fwd_flags(struct xdp_md *ctx, u32 flags) · 44 unmodified lines
101 101
102 fib_params.ifindex = ctx->ingress_ifindex;102 fib_params.ifindex = ctx->ingress_ifindex;
103 103
104 out_index = bpf_fib_lookup(ctx, &fib_params, sizeof(fib_params), flags);104 rc = bpf_fib_lookup(ctx, &fib_params, sizeof(fib_params), flags);
105 105
106 /* verify egress index has xdp support106 /* verify egress index has xdp support
107 * TO-DO bpf_map_lookup_elem(&tx_port, &key) fails with107 * TO-DO bpf_map_lookup_elem(&tx_port, &key) fails with
@@ -109,7 +109,7 @@ static __always_inline int xdp_fwd_flags(struct xdp_md *ctx, u32 flags) · 1 unmodified line
109 * NOTE: without verification that egress index supports XDP109 * NOTE: without verification that egress index supports XDP
110 * forwarding packets are dropped.110 * forwarding packets are dropped.
111 */111 */
112 if (out_index > 0) {112 if (rc == 0) {
113 if (h_proto == htons(ETH_P_IP))113 if (h_proto == htons(ETH_P_IP))
114 ip_decrease_ttl(iph);114 ip_decrease_ttl(iph);
115 else if (h_proto == htons(ETH_P_IPV6))115 else if (h_proto == htons(ETH_P_IPV6))
@@ -117,7 +117,7 @@ static __always_inline int xdp_fwd_flags(struct xdp_md *ctx, u32 flags) · 1 unmodified line
117 117
118 memcpy(eth->h_dest, fib_params.dmac, ETH_ALEN);118 memcpy(eth->h_dest, fib_params.dmac, ETH_ALEN);
119 memcpy(eth->h_source, fib_params.smac, ETH_ALEN);119 memcpy(eth->h_source, fib_params.smac, ETH_ALEN);
120 return bpf_redirect_map(&tx_port, out_index, 0);120 return bpf_redirect_map(&tx_port, fib_params.ifindex, 0);
121 }121 }
122 122
123 return XDP_PASS;123 return XDP_PASS;
scripts/cc-can-link.sh+1−1
@@ -1,7 +1,7 @@
1#!/bin/sh1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.02# SPDX-License-Identifier: GPL-2.0
3 3
4cat << "END" | $@ -x c - -o /dev/null >/dev/null 2>&1 && echo "y"4cat << "END" | $@ -x c - -o /dev/null >/dev/null 2>&1
5#include <stdio.h>5#include <stdio.h>
6int main(void)6int main(void)
7{7{
scripts/checkpatch.pl+0−6
@@ -2606,12 +2606,6 @@ sub process { · 2605 unmodified lines
2606 "A patch subject line should describe the change not the tool that found it\n" . $herecurr);2606 "A patch subject line should describe the change not the tool that found it\n" . $herecurr);
2607 }2607 }
2608 2608
2609# Check for old stable address
2610 if ($line =~ /^\s*cc:\s*.*<?\bstable\@kernel\.org\b>?.*$/i) {
2611 ERROR("STABLE_ADDRESS",
2612 "The 'stable' address should be 'stable\@vger.kernel.org'\n" . $herecurr);
2613 }
2614
2615# Check for unwanted Gerrit info2609# Check for unwanted Gerrit info
2616 if ($in_commit_log && $line =~ /^\s*change-id:/i) {2610 if ($in_commit_log && $line =~ /^\s*change-id:/i) {
2617 ERROR("GERRIT_CHANGE_ID",2611 ERROR("GERRIT_CHANGE_ID",
scripts/gcc-x86_64-has-stack-protector.sh+1−1
@@ -1,4 +1,4 @@
1#!/bin/sh1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.02# SPDX-License-Identifier: GPL-2.0
3 3
4echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -O0 -mcmodel=kernel -fno-PIE -fstack-protector - -o - 2> /dev/null | grep -q "%gs"4echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -m64 -O0 -mcmodel=kernel -fno-PIE -fstack-protector - -o - 2> /dev/null | grep -q "%gs"
scripts/kconfig/expr.h+3−0
@@ -171,6 +171,9 @@ struct symbol { · 170 unmodified lines
171 * config BAZ171 * config BAZ
172 * int "BAZ Value"172 * int "BAZ Value"
173 * range 1..255173 * range 1..255
174 *
175 * Please, also check zconf.y:print_symbol() when modifying the
176 * list of property types!
174 */177 */
175enum prop_type {178enum prop_type {
176 P_UNKNOWN,179 P_UNKNOWN,
scripts/kconfig/preprocess.c+1−1
@@ -156,7 +156,7 @@ static char *do_shell(int argc, char *argv[]) · 155 unmodified lines
156 nread--;156 nread--;
157 157
158 /* remove trailing new lines */158 /* remove trailing new lines */
159 while (buf[nread - 1] == '\n')159 while (nread > 0 && buf[nread - 1] == '\n')
160 nread--;160 nread--;
161 161
162 buf[nread] = 0;162 buf[nread] = 0;
scripts/kconfig/zconf.y+6−2
@@ -31,7 +31,7 @@ struct symbol *symbol_hash[SYMBOL_HASHSIZE]; · 30 unmodified lines
31static struct menu *current_menu, *current_entry;31static struct menu *current_menu, *current_entry;
32 32
33%}33%}
34%expect 3234%expect 31
35 35
36%union36%union
37{37{
@@ -337,7 +337,7 @@ choice_block: · 299 unmodified lines
337 337
338/* if entry */338/* if entry */
339 339
340if_entry: T_IF expr nl340if_entry: T_IF expr T_EOL
341{341{
342 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());342 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
343 menu_add_entry(NULL);343 menu_add_entry(NULL);
@@ -717,6 +717,10 @@ static void print_symbol(FILE *out, struct menu *menu) · 373 unmodified lines
717 print_quoted_string(out, prop->text);717 print_quoted_string(out, prop->text);
718 fputc('\n', out);718 fputc('\n', out);
719 break;719 break;
720 case P_SYMBOL:
721 fputs( " symbol ", out);
722 fprintf(out, "%s\n", prop->sym->name);
723 break;
720 default:724 default:
721 fprintf(out, " unknown prop %d!\n", prop->type);725 fprintf(out, " unknown prop %d!\n", prop->type);
722 break;726 break;
security/keys/dh.c+4−2
@@ -142,6 +142,8 @@ static void kdf_dealloc(struct kdf_sdesc *sdesc) · 141 unmodified lines
142 * The src pointer is defined as Z || other info where Z is the shared secret142 * The src pointer is defined as Z || other info where Z is the shared secret
143 * from DH and other info is an arbitrary string (see SP800-56A section143 * from DH and other info is an arbitrary string (see SP800-56A section
144 * 5.8.1.2).144 * 5.8.1.2).
145 *
146 * 'dlen' must be a multiple of the digest size.
145 */147 */
146static int kdf_ctr(struct kdf_sdesc *sdesc, const u8 *src, unsigned int slen,148static int kdf_ctr(struct kdf_sdesc *sdesc, const u8 *src, unsigned int slen,
147 u8 *dst, unsigned int dlen, unsigned int zlen)149 u8 *dst, unsigned int dlen, unsigned int zlen)
@@ -205,8 +207,8 @@ static int keyctl_dh_compute_kdf(struct kdf_sdesc *sdesc, · 57 unmodified lines
205{207{
206 uint8_t *outbuf = NULL;208 uint8_t *outbuf = NULL;
207 int ret;209 int ret;
208 size_t outbuf_len = round_up(buflen,210 size_t outbuf_len = roundup(buflen,
209 crypto_shash_digestsize(sdesc->shash.tfm));211 crypto_shash_digestsize(sdesc->shash.tfm));
210 212
211 outbuf = kmalloc(outbuf_len, GFP_KERNEL);213 outbuf = kmalloc(outbuf_len, GFP_KERNEL);
212 if (!outbuf) {214 if (!outbuf) {
security/selinux/selinuxfs.c+33−45
@@ -441,22 +441,16 @@ static int sel_release_policy(struct inode *inode, struct file *filp) · 440 unmodified lines
441static ssize_t sel_read_policy(struct file *filp, char __user *buf,441static ssize_t sel_read_policy(struct file *filp, char __user *buf,
442 size_t count, loff_t *ppos)442 size_t count, loff_t *ppos)
443{443{
444 struct selinux_fs_info *fsi = file_inode(filp)->i_sb->s_fs_info;
445 struct policy_load_memory *plm = filp->private_data;444 struct policy_load_memory *plm = filp->private_data;
446 int ret;445 int ret;
447 446
448 mutex_lock(&fsi->mutex);
449
450 ret = avc_has_perm(&selinux_state,447 ret = avc_has_perm(&selinux_state,
451 current_sid(), SECINITSID_SECURITY,448 current_sid(), SECINITSID_SECURITY,
452 SECCLASS_SECURITY, SECURITY__READ_POLICY, NULL);449 SECCLASS_SECURITY, SECURITY__READ_POLICY, NULL);
453 if (ret)450 if (ret)
454 goto out;451 return ret;
455 452
456 ret = simple_read_from_buffer(buf, count, ppos, plm->data, plm->len);453 return simple_read_from_buffer(buf, count, ppos, plm->data, plm->len);
457out:
458 mutex_unlock(&fsi->mutex);
459 return ret;
460}454}
461 455
462static vm_fault_t sel_mmap_policy_fault(struct vm_fault *vmf)456static vm_fault_t sel_mmap_policy_fault(struct vm_fault *vmf)
@@ -1188,25 +1182,29 @@ static ssize_t sel_read_bool(struct file *filep, char __user *buf, · 725 unmodified lines
1188 ret = -EINVAL;1182 ret = -EINVAL;
1189 if (index >= fsi->bool_num || strcmp(name,1183 if (index >= fsi->bool_num || strcmp(name,
1190 fsi->bool_pending_names[index]))1184 fsi->bool_pending_names[index]))
1191 goto out;1185 goto out_unlock;
1192 1186
1193 ret = -ENOMEM;1187 ret = -ENOMEM;
1194 page = (char *)get_zeroed_page(GFP_KERNEL);1188 page = (char *)get_zeroed_page(GFP_KERNEL);
1195 if (!page)1189 if (!page)
1196 goto out;1190 goto out_unlock;
1197 1191
1198 cur_enforcing = security_get_bool_value(fsi->state, index);1192 cur_enforcing = security_get_bool_value(fsi->state, index);
1199 if (cur_enforcing < 0) {1193 if (cur_enforcing < 0) {
1200 ret = cur_enforcing;1194 ret = cur_enforcing;
1201 goto out;1195 goto out_unlock;
1202 }1196 }
1203 length = scnprintf(page, PAGE_SIZE, "%d %d", cur_enforcing,1197 length = scnprintf(page, PAGE_SIZE, "%d %d", cur_enforcing,
1204 fsi->bool_pending_values[index]);1198 fsi->bool_pending_values[index]);
1205 ret = simple_read_from_buffer(buf, count, ppos, page, length);
1206out:
1207 mutex_unlock(&fsi->mutex);1199 mutex_unlock(&fsi->mutex);
1200 ret = simple_read_from_buffer(buf, count, ppos, page, length);
1201out_free:
1208 free_page((unsigned long)page);1202 free_page((unsigned long)page);
1209 return ret;1203 return ret;
1204
1205out_unlock:
1206 mutex_unlock(&fsi->mutex);
1207 goto out_free;
1210}1208}
1211 1209
1212static ssize_t sel_write_bool(struct file *filep, const char __user *buf,1210static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
@@ -1219,6 +1217,17 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf, · 6 unmodified lines
1219 unsigned index = file_inode(filep)->i_ino & SEL_INO_MASK;1217 unsigned index = file_inode(filep)->i_ino & SEL_INO_MASK;
1220 const char *name = filep->f_path.dentry->d_name.name;1218 const char *name = filep->f_path.dentry->d_name.name;
1221 1219
1220 if (count >= PAGE_SIZE)
1221 return -ENOMEM;
1222
1223 /* No partial writes. */
1224 if (*ppos != 0)
1225 return -EINVAL;
1226
1227 page = memdup_user_nul(buf, count);
1228 if (IS_ERR(page))
1229 return PTR_ERR(page);
1230
1222 mutex_lock(&fsi->mutex);1231 mutex_lock(&fsi->mutex);
1223 1232
1224 length = avc_has_perm(&selinux_state,1233 length = avc_has_perm(&selinux_state,
@@ -1233,22 +1242,6 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf, · 8 unmodified lines
1233 fsi->bool_pending_names[index]))1242 fsi->bool_pending_names[index]))
1234 goto out;1243 goto out;
1235 1244
1236 length = -ENOMEM;
1237 if (count >= PAGE_SIZE)
1238 goto out;
1239
1240 /* No partial writes. */
1241 length = -EINVAL;
1242 if (*ppos != 0)
1243 goto out;
1244
1245 page = memdup_user_nul(buf, count);
1246 if (IS_ERR(page)) {
1247 length = PTR_ERR(page);
1248 page = NULL;
1249 goto out;
1250 }
1251
1252 length = -EINVAL;1245 length = -EINVAL;
1253 if (sscanf(page, "%d", &new_value) != 1)1246 if (sscanf(page, "%d", &new_value) != 1)
1254 goto out;1247 goto out;
@@ -1280,6 +1273,17 @@ static ssize_t sel_commit_bools_write(struct file *filep, · 25 unmodified lines
1280 ssize_t length;1273 ssize_t length;
1281 int new_value;1274 int new_value;
1282 1275
1276 if (count >= PAGE_SIZE)
1277 return -ENOMEM;
1278
1279 /* No partial writes. */
1280 if (*ppos != 0)
1281 return -EINVAL;
1282
1283 page = memdup_user_nul(buf, count);
1284 if (IS_ERR(page))
1285 return PTR_ERR(page);
1286
1283 mutex_lock(&fsi->mutex);1287 mutex_lock(&fsi->mutex);
1284 1288
1285 length = avc_has_perm(&selinux_state,1289 length = avc_has_perm(&selinux_state,
@@ -1289,22 +1293,6 @@ static ssize_t sel_commit_bools_write(struct file *filep, · 3 unmodified lines
1289 if (length)1293 if (length)
1290 goto out;1294 goto out;
1291 1295
1292 length = -ENOMEM;
1293 if (count >= PAGE_SIZE)
1294 goto out;
1295
1296 /* No partial writes. */
1297 length = -EINVAL;
1298 if (*ppos != 0)
1299 goto out;
1300
1301 page = memdup_user_nul(buf, count);
1302 if (IS_ERR(page)) {
1303 length = PTR_ERR(page);
1304 page = NULL;
1305 goto out;
1306 }
1307
1308 length = -EINVAL;1296 length = -EINVAL;
1309 if (sscanf(page, "%d", &new_value) != 1)1297 if (sscanf(page, "%d", &new_value) != 1)
1310 goto out;1298 goto out;
security/smack/smack_lsm.c+1−0
@@ -2296,6 +2296,7 @@ static void smack_task_to_inode(struct task_struct *p, struct inode *inode) · 2295 unmodified lines
2296 struct smack_known *skp = smk_of_task_struct(p);2296 struct smack_known *skp = smk_of_task_struct(p);
2297 2297
2298 isp->smk_inode = skp;2298 isp->smk_inode = skp;
2299 isp->smk_flags |= SMK_INODE_INSTANT;
2299}2300}
2300 2301
2301/*2302/*
sound/core/seq/seq_clientmgr.c+2−1
@@ -2004,7 +2004,8 @@ static int snd_seq_ioctl_query_next_client(struct snd_seq_client *client, · 2003 unmodified lines
2004 struct snd_seq_client *cptr = NULL;2004 struct snd_seq_client *cptr = NULL;
2005 2005
2006 /* search for next client */2006 /* search for next client */
2007 info->client++;2007 if (info->client < INT_MAX)
2008 info->client++;
2008 if (info->client < 0)2009 if (info->client < 0)
2009 info->client = 0;2010 info->client = 0;
2010 for (; info->client < SNDRV_SEQ_MAX_CLIENTS; info->client++) {2011 for (; info->client < SNDRV_SEQ_MAX_CLIENTS; info->client++) {
sound/core/timer.c+1−1
@@ -1520,7 +1520,7 @@ static int snd_timer_user_next_device(struct snd_timer_id __user *_tid) · 1519 unmodified lines
1520 } else {1520 } else {
1521 if (id.subdevice < 0)1521 if (id.subdevice < 0)
1522 id.subdevice = 0;1522 id.subdevice = 0;
1523 else1523 else if (id.subdevice < INT_MAX)
1524 id.subdevice++;1524 id.subdevice++;
1525 }1525 }
1526 }1526 }
sound/pci/hda/hda_codec.c+3−2
@@ -2899,8 +2899,9 @@ static int hda_codec_runtime_suspend(struct device *dev) · 2898 unmodified lines
2899 list_for_each_entry(pcm, &codec->pcm_list_head, list)2899 list_for_each_entry(pcm, &codec->pcm_list_head, list)
2900 snd_pcm_suspend_all(pcm->pcm);2900 snd_pcm_suspend_all(pcm->pcm);
2901 state = hda_call_codec_suspend(codec);2901 state = hda_call_codec_suspend(codec);
2902 if (codec_has_clkstop(codec) && codec_has_epss(codec) &&2902 if (codec->link_down_at_suspend ||
2903 (state & AC_PWRST_CLK_STOP_OK))2903 (codec_has_clkstop(codec) && codec_has_epss(codec) &&
2904 (state & AC_PWRST_CLK_STOP_OK)))
2904 snd_hdac_codec_link_down(&codec->core);2905 snd_hdac_codec_link_down(&codec->core);
2905 snd_hdac_link_power(&codec->core, false);2906 snd_hdac_link_power(&codec->core, false);
2906 return 0;2907 return 0;
sound/pci/hda/hda_codec.h+1−0
@@ -258,6 +258,7 @@ struct hda_codec { · 257 unmodified lines
258 unsigned int power_save_node:1; /* advanced PM for each widget */258 unsigned int power_save_node:1; /* advanced PM for each widget */
259 unsigned int auto_runtime_pm:1; /* enable automatic codec runtime pm */259 unsigned int auto_runtime_pm:1; /* enable automatic codec runtime pm */
260 unsigned int force_pin_prefix:1; /* Add location prefix */260 unsigned int force_pin_prefix:1; /* Add location prefix */
261 unsigned int link_down_at_suspend:1; /* link down at runtime suspend */
261#ifdef CONFIG_PM262#ifdef CONFIG_PM
262 unsigned long power_on_acct;263 unsigned long power_on_acct;
263 unsigned long power_off_acct;264 unsigned long power_off_acct;
sound/pci/hda/patch_ca0132.c+23−41
@@ -991,6 +991,7 @@ struct ca0132_spec { · 990 unmodified lines
991enum {991enum {
992 QUIRK_NONE,992 QUIRK_NONE,
993 QUIRK_ALIENWARE,993 QUIRK_ALIENWARE,
994 QUIRK_ALIENWARE_M17XR4,
994 QUIRK_SBZ,995 QUIRK_SBZ,
995 QUIRK_R3DI,996 QUIRK_R3DI,
996};997};
@@ -1040,6 +1041,7 @@ static const struct hda_pintbl r3di_pincfgs[] = { · 43 unmodified lines
1040};1041};
1041 1042
1042static const struct snd_pci_quirk ca0132_quirks[] = {1043static const struct snd_pci_quirk ca0132_quirks[] = {
1044 SND_PCI_QUIRK(0x1028, 0x057b, "Alienware M17x R4", QUIRK_ALIENWARE_M17XR4),
1043 SND_PCI_QUIRK(0x1028, 0x0685, "Alienware 15 2015", QUIRK_ALIENWARE),1045 SND_PCI_QUIRK(0x1028, 0x0685, "Alienware 15 2015", QUIRK_ALIENWARE),
1044 SND_PCI_QUIRK(0x1028, 0x0688, "Alienware 17 2015", QUIRK_ALIENWARE),1046 SND_PCI_QUIRK(0x1028, 0x0688, "Alienware 17 2015", QUIRK_ALIENWARE),
1045 SND_PCI_QUIRK(0x1028, 0x0708, "Alienware 15 R2 2016", QUIRK_ALIENWARE),1047 SND_PCI_QUIRK(0x1028, 0x0708, "Alienware 15 R2 2016", QUIRK_ALIENWARE),
@@ -5663,7 +5665,7 @@ static const char * const ca0132_alt_slave_pfxs[] = { · 4617 unmodified lines
5663 * I think this has to do with the pin for rear surround being 0x11,5665 * I think this has to do with the pin for rear surround being 0x11,
5664 * and the center/lfe being 0x10. Usually the pin order is the opposite.5666 * and the center/lfe being 0x10. Usually the pin order is the opposite.
5665 */5667 */
5666const struct snd_pcm_chmap_elem ca0132_alt_chmaps[] = {5668static const struct snd_pcm_chmap_elem ca0132_alt_chmaps[] = {
5667 { .channels = 2,5669 { .channels = 2,
5668 .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },5670 .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
5669 { .channels = 4,5671 { .channels = 4,
@@ -5966,7 +5968,7 @@ static int ca0132_build_pcms(struct hda_codec *codec) · 296 unmodified lines
5966 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0];5968 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0];
5967 5969
5968 /* With the DSP enabled, desktops don't use this ADC. */5970 /* With the DSP enabled, desktops don't use this ADC. */
5969 if (spec->use_alt_functions) {5971 if (!spec->use_alt_functions) {
5970 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2");5972 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2");
5971 if (!info)5973 if (!info)
5972 return -ENOMEM;5974 return -ENOMEM;
@@ -6130,7 +6132,10 @@ static void ca0132_init_dmic(struct hda_codec *codec) · 157 unmodified lines
6130 * Bit 6: set to select Data2, clear for Data16132 * Bit 6: set to select Data2, clear for Data1
6131 * Bit 7: set to enable DMic, clear for AMic6133 * Bit 7: set to enable DMic, clear for AMic
6132 */6134 */
6133 val = 0x23;6135 if (spec->quirk == QUIRK_ALIENWARE_M17XR4)
6136 val = 0x33;
6137 else
6138 val = 0x23;
6134 /* keep a copy of dmic ctl val for enable/disable dmic purpuse */6139 /* keep a copy of dmic ctl val for enable/disable dmic purpuse */
6135 spec->dmic_ctl = val;6140 spec->dmic_ctl = val;
6136 snd_hda_codec_write(codec, spec->input_pins[0], 0,6141 snd_hda_codec_write(codec, spec->input_pins[0], 0,
@@ -7223,7 +7228,7 @@ static int ca0132_init(struct hda_codec *codec) · 1086 unmodified lines
7223 7228
7224 snd_hda_sequence_write(codec, spec->base_init_verbs);7229 snd_hda_sequence_write(codec, spec->base_init_verbs);
7225 7230
7226 if (spec->quirk != QUIRK_NONE)7231 if (spec->use_alt_functions)
7227 ca0132_alt_init(codec);7232 ca0132_alt_init(codec);
7228 7233
7229 ca0132_download_dsp(codec);7234 ca0132_download_dsp(codec);
@@ -7237,8 +7242,9 @@ static int ca0132_init(struct hda_codec *codec) · 7 unmodified lines
7237 case QUIRK_R3DI:7242 case QUIRK_R3DI:
7238 r3di_setup_defaults(codec);7243 r3di_setup_defaults(codec);
7239 break;7244 break;
7240 case QUIRK_NONE:7245 case QUIRK_SBZ:
7241 case QUIRK_ALIENWARE:7246 break;
7247 default:
7242 ca0132_setup_defaults(codec);7248 ca0132_setup_defaults(codec);
7243 ca0132_init_analog_mic2(codec);7249 ca0132_init_analog_mic2(codec);
7244 ca0132_init_dmic(codec);7250 ca0132_init_dmic(codec);
@@ -7343,7 +7349,6 @@ static const struct hda_codec_ops ca0132_patch_ops = { · 98 unmodified lines
7343static void ca0132_config(struct hda_codec *codec)7349static void ca0132_config(struct hda_codec *codec)
7344{7350{
7345 struct ca0132_spec *spec = codec->spec;7351 struct ca0132_spec *spec = codec->spec;
7346 struct auto_pin_cfg *cfg = &spec->autocfg;
7347 7352
7348 spec->dacs[0] = 0x2;7353 spec->dacs[0] = 0x2;
7349 spec->dacs[1] = 0x3;7354 spec->dacs[1] = 0x3;
@@ -7405,12 +7410,7 @@ static void ca0132_config(struct hda_codec *codec) · 55 unmodified lines
7405 /* SPDIF I/O */7410 /* SPDIF I/O */
7406 spec->dig_out = 0x05;7411 spec->dig_out = 0x05;
7407 spec->multiout.dig_out_nid = spec->dig_out;7412 spec->multiout.dig_out_nid = spec->dig_out;
7408 cfg->dig_out_pins[0] = 0x0c;
7409 cfg->dig_outs = 1;
7410 cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF;
7411 spec->dig_in = 0x09;7413 spec->dig_in = 0x09;
7412 cfg->dig_in_pin = 0x0e;
7413 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
7414 break;7414 break;
7415 case QUIRK_R3DI:7415 case QUIRK_R3DI:
7416 codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__);7416 codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__);
@@ -7438,9 +7438,6 @@ static void ca0132_config(struct hda_codec *codec) · 21 unmodified lines
7438 /* SPDIF I/O */7438 /* SPDIF I/O */
7439 spec->dig_out = 0x05;7439 spec->dig_out = 0x05;
7440 spec->multiout.dig_out_nid = spec->dig_out;7440 spec->multiout.dig_out_nid = spec->dig_out;
7441 cfg->dig_out_pins[0] = 0x0c;
7442 cfg->dig_outs = 1;
7443 cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF;
7444 break;7441 break;
7445 default:7442 default:
7446 spec->num_outputs = 2;7443 spec->num_outputs = 2;
@@ -7463,12 +7460,7 @@ static void ca0132_config(struct hda_codec *codec) · 16 unmodified lines
7463 /* SPDIF I/O */7460 /* SPDIF I/O */
7464 spec->dig_out = 0x05;7461 spec->dig_out = 0x05;
7465 spec->multiout.dig_out_nid = spec->dig_out;7462 spec->multiout.dig_out_nid = spec->dig_out;
7466 cfg->dig_out_pins[0] = 0x0c;
7467 cfg->dig_outs = 1;
7468 cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF;
7469 spec->dig_in = 0x09;7463 spec->dig_in = 0x09;
7470 cfg->dig_in_pin = 0x0e;
7471 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
7472 break;7464 break;
7473 }7465 }
7474}7466}
@@ -7476,7 +7468,7 @@ static void ca0132_config(struct hda_codec *codec) · 1 unmodified line
7476static int ca0132_prepare_verbs(struct hda_codec *codec)7468static int ca0132_prepare_verbs(struct hda_codec *codec)
7477{7469{
7478/* Verbs + terminator (an empty element) */7470/* Verbs + terminator (an empty element) */
7479#define NUM_SPEC_VERBS 47471#define NUM_SPEC_VERBS 2
7480 struct ca0132_spec *spec = codec->spec;7472 struct ca0132_spec *spec = codec->spec;
7481 7473
7482 spec->chip_init_verbs = ca0132_init_verbs0;7474 spec->chip_init_verbs = ca0132_init_verbs0;
@@ -7488,34 +7480,24 @@ static int ca0132_prepare_verbs(struct hda_codec *codec) · 5 unmodified lines
7488 if (!spec->spec_init_verbs)7480 if (!spec->spec_init_verbs)
7489 return -ENOMEM;7481 return -ENOMEM;
7490 7482
7491 /* HP jack autodetection */
7492 spec->spec_init_verbs[0].nid = spec->unsol_tag_hp;
7493 spec->spec_init_verbs[0].param = AC_VERB_SET_UNSOLICITED_ENABLE;
7494 spec->spec_init_verbs[0].verb = AC_USRSP_EN | spec->unsol_tag_hp;
7495
7496 /* MIC1 jack autodetection */
7497 spec->spec_init_verbs[1].nid = spec->unsol_tag_amic1;
7498 spec->spec_init_verbs[1].param = AC_VERB_SET_UNSOLICITED_ENABLE;
7499 spec->spec_init_verbs[1].verb = AC_USRSP_EN | spec->unsol_tag_amic1;
7500
7501 /* config EAPD */7483 /* config EAPD */
7502 spec->spec_init_verbs[2].nid = 0x0b;7484 spec->spec_init_verbs[0].nid = 0x0b;
7503 spec->spec_init_verbs[2].param = 0x78D;7485 spec->spec_init_verbs[0].param = 0x78D;
7504 spec->spec_init_verbs[2].verb = 0x00;7486 spec->spec_init_verbs[0].verb = 0x00;
7505 7487
7506 /* Previously commented configuration */7488 /* Previously commented configuration */
7507 /*7489 /*
7508 spec->spec_init_verbs[3].nid = 0x0b;7490 spec->spec_init_verbs[2].nid = 0x0b;
7509 spec->spec_init_verbs[3].param = AC_VERB_SET_EAPD_BTLENABLE;7491 spec->spec_init_verbs[2].param = AC_VERB_SET_EAPD_BTLENABLE;
7492 spec->spec_init_verbs[2].verb = 0x02;
7493
7494 spec->spec_init_verbs[3].nid = 0x10;
7495 spec->spec_init_verbs[3].param = 0x78D;
7510 spec->spec_init_verbs[3].verb = 0x02;7496 spec->spec_init_verbs[3].verb = 0x02;
7511 7497
7512 spec->spec_init_verbs[4].nid = 0x10;7498 spec->spec_init_verbs[4].nid = 0x10;
7513 spec->spec_init_verbs[4].param = 0x78D;7499 spec->spec_init_verbs[4].param = AC_VERB_SET_EAPD_BTLENABLE;
7514 spec->spec_init_verbs[4].verb = 0x02;7500 spec->spec_init_verbs[4].verb = 0x02;
7515
7516 spec->spec_init_verbs[5].nid = 0x10;
7517 spec->spec_init_verbs[5].param = AC_VERB_SET_EAPD_BTLENABLE;
7518 spec->spec_init_verbs[5].verb = 0x02;
7519 */7501 */
7520 7502
7521 /* Terminator: spec->spec_init_verbs[NUM_SPEC_VERBS-1] */7503 /* Terminator: spec->spec_init_verbs[NUM_SPEC_VERBS-1] */
sound/pci/hda/patch_hdmi.c+5−0
@@ -3741,6 +3741,11 @@ static int patch_atihdmi(struct hda_codec *codec) · 3740 unmodified lines
3741 3741
3742 spec->chmap.channels_max = max(spec->chmap.channels_max, 8u);3742 spec->chmap.channels_max = max(spec->chmap.channels_max, 8u);
3743 3743
3744 /* AMD GPUs have neither EPSS nor CLKSTOP bits, hence preventing
3745 * the link-down as is. Tell the core to allow it.
3746 */
3747 codec->link_down_at_suspend = 1;
3748
3744 return 0;3749 return 0;
3745}3750}
3746 3751
sound/pci/hda/patch_realtek.c+17−3
@@ -2545,6 +2545,7 @@ static const struct snd_pci_quirk alc262_fixup_tbl[] = { · 2544 unmodified lines
2545 SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu Lifebook S7110", ALC262_FIXUP_FSC_S7110),2545 SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu Lifebook S7110", ALC262_FIXUP_FSC_S7110),
2546 SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FIXUP_BENQ),2546 SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FIXUP_BENQ),
2547 SND_PCI_QUIRK(0x10f1, 0x2915, "Tyan Thunder n6650W", ALC262_FIXUP_TYAN),2547 SND_PCI_QUIRK(0x10f1, 0x2915, "Tyan Thunder n6650W", ALC262_FIXUP_TYAN),
2548 SND_PCI_QUIRK(0x1734, 0x1141, "FSC ESPRIMO U9210", ALC262_FIXUP_FSC_H270),
2548 SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", ALC262_FIXUP_FSC_H270),2549 SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", ALC262_FIXUP_FSC_H270),
2549 SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000", ALC262_FIXUP_LENOVO_3000),2550 SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000", ALC262_FIXUP_LENOVO_3000),
2550 SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_FIXUP_BENQ),2551 SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_FIXUP_BENQ),
@@ -4995,7 +4996,6 @@ static void alc_fixup_tpt440_dock(struct hda_codec *codec, · 2444 unmodified lines
4995 struct alc_spec *spec = codec->spec;4996 struct alc_spec *spec = codec->spec;
4996 4997
4997 if (action == HDA_FIXUP_ACT_PRE_PROBE) {4998 if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4998 spec->shutup = alc_no_shutup; /* reduce click noise */
4999 spec->reboot_notify = alc_d3_at_reboot; /* reduce noise */4999 spec->reboot_notify = alc_d3_at_reboot; /* reduce noise */
5000 spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;5000 spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
5001 codec->power_save_node = 0; /* avoid click noises */5001 codec->power_save_node = 0; /* avoid click noises */
@@ -5394,6 +5394,13 @@ static void alc274_fixup_bind_dacs(struct hda_codec *codec, · 392 unmodified lines
5394/* for hda_fixup_thinkpad_acpi() */5394/* for hda_fixup_thinkpad_acpi() */
5395#include "thinkpad_helper.c"5395#include "thinkpad_helper.c"
5396 5396
5397static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,
5398 const struct hda_fixup *fix, int action)
5399{
5400 alc_fixup_no_shutup(codec, fix, action); /* reduce click noise */
5401 hda_fixup_thinkpad_acpi(codec, fix, action);
5402}
5403
5397/* for dell wmi mic mute led */5404/* for dell wmi mic mute led */
5398#include "dell_wmi_helper.c"5405#include "dell_wmi_helper.c"
5399 5406
@@ -5946,7 +5953,7 @@ static const struct hda_fixup alc269_fixups[] = { · 546 unmodified lines
5946 },5953 },
5947 [ALC269_FIXUP_THINKPAD_ACPI] = {5954 [ALC269_FIXUP_THINKPAD_ACPI] = {
5948 .type = HDA_FIXUP_FUNC,5955 .type = HDA_FIXUP_FUNC,
5949 .v.func = hda_fixup_thinkpad_acpi,5956 .v.func = alc_fixup_thinkpad_acpi,
5950 .chained = true,5957 .chained = true,
5951 .chain_id = ALC269_FIXUP_SKU_IGNORE,5958 .chain_id = ALC269_FIXUP_SKU_IGNORE,
5952 },5959 },
@@ -6603,8 +6610,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 650 unmodified lines
6603 SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),6610 SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
6604 SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),6611 SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
6605 SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),6612 SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6613 SND_PCI_QUIRK(0x17aa, 0x312a, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6606 SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),6614 SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6607 SND_PCI_QUIRK(0x17aa, 0x3138, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),6615 SND_PCI_QUIRK(0x17aa, 0x3136, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6608 SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),6616 SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6609 SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),6617 SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
6610 SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),6618 SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
@@ -6782,6 +6790,12 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { · 171 unmodified lines
6782 {0x14, 0x90170110},6790 {0x14, 0x90170110},
6783 {0x19, 0x02a11030},6791 {0x19, 0x02a11030},
6784 {0x21, 0x02211020}),6792 {0x21, 0x02211020}),
6793 SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
6794 {0x14, 0x90170110},
6795 {0x19, 0x02a11030},
6796 {0x1a, 0x02a11040},
6797 {0x1b, 0x01014020},
6798 {0x21, 0x0221101f}),
6785 SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,6799 SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
6786 {0x12, 0x90a60140},6800 {0x12, 0x90a60140},
6787 {0x14, 0x90170110},6801 {0x14, 0x90170110},
sound/pci/lx6464es/lx6464es.c+1−0
@@ -1018,6 +1018,7 @@ static int snd_lx6464es_create(struct snd_card *card, · 1017 unmodified lines
1018 chip->port_dsp_bar = pci_ioremap_bar(pci, 2);1018 chip->port_dsp_bar = pci_ioremap_bar(pci, 2);
1019 if (!chip->port_dsp_bar) {1019 if (!chip->port_dsp_bar) {
1020 dev_err(card->dev, "cannot remap PCI memory region\n");1020 dev_err(card->dev, "cannot remap PCI memory region\n");
1021 err = -ENOMEM;
1021 goto remap_pci_failed;1022 goto remap_pci_failed;
1022 }1023 }
1023 1024
tools/arch/arm/include/uapi/asm/kvm.h+1−0
@@ -91,6 +91,7 @@ struct kvm_regs { · 90 unmodified lines
91#define KVM_VGIC_V3_ADDR_TYPE_DIST 291#define KVM_VGIC_V3_ADDR_TYPE_DIST 2
92#define KVM_VGIC_V3_ADDR_TYPE_REDIST 392#define KVM_VGIC_V3_ADDR_TYPE_REDIST 3
93#define KVM_VGIC_ITS_ADDR_TYPE 493#define KVM_VGIC_ITS_ADDR_TYPE 4
94#define KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION 5
94 95
95#define KVM_VGIC_V3_DIST_SIZE SZ_64K96#define KVM_VGIC_V3_DIST_SIZE SZ_64K
96#define KVM_VGIC_V3_REDIST_SIZE (2 * SZ_64K)97#define KVM_VGIC_V3_REDIST_SIZE (2 * SZ_64K)
tools/arch/arm64/include/uapi/asm/kvm.h+1−0
@@ -91,6 +91,7 @@ struct kvm_regs { · 90 unmodified lines
91#define KVM_VGIC_V3_ADDR_TYPE_DIST 291#define KVM_VGIC_V3_ADDR_TYPE_DIST 2
92#define KVM_VGIC_V3_ADDR_TYPE_REDIST 392#define KVM_VGIC_V3_ADDR_TYPE_REDIST 3
93#define KVM_VGIC_ITS_ADDR_TYPE 493#define KVM_VGIC_ITS_ADDR_TYPE 4
94#define KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION 5
94 95
95#define KVM_VGIC_V3_DIST_SIZE SZ_64K96#define KVM_VGIC_V3_DIST_SIZE SZ_64K
96#define KVM_VGIC_V3_REDIST_SIZE (2 * SZ_64K)97#define KVM_VGIC_V3_REDIST_SIZE (2 * SZ_64K)
tools/arch/powerpc/include/uapi/asm/kvm.h+1−0
@@ -633,6 +633,7 @@ struct kvm_ppc_cpu_char { · 632 unmodified lines
633#define KVM_REG_PPC_PSSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd)633#define KVM_REG_PPC_PSSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd)
634 634
635#define KVM_REG_PPC_DEC_EXPIRY (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbe)635#define KVM_REG_PPC_DEC_EXPIRY (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbe)
636#define KVM_REG_PPC_ONLINE (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xbf)
636 637
637/* Transactional Memory checkpointed state:638/* Transactional Memory checkpointed state:
638 * This is all GPRs, all VSX regs and a subset of SPRs639 * This is all GPRs, all VSX regs and a subset of SPRs
tools/arch/powerpc/include/uapi/asm/unistd.h+1−0
@@ -398,5 +398,6 @@ · 397 unmodified lines
398#define __NR_pkey_alloc 384398#define __NR_pkey_alloc 384
399#define __NR_pkey_free 385399#define __NR_pkey_free 385
400#define __NR_pkey_mprotect 386400#define __NR_pkey_mprotect 386
401#define __NR_rseq 387
401 402
402#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */403#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
tools/arch/x86/include/asm/cpufeatures.h+2−0
@@ -282,7 +282,9 @@ · 281 unmodified lines
282#define X86_FEATURE_AMD_IBPB (13*32+12) /* "" Indirect Branch Prediction Barrier */282#define X86_FEATURE_AMD_IBPB (13*32+12) /* "" Indirect Branch Prediction Barrier */
283#define X86_FEATURE_AMD_IBRS (13*32+14) /* "" Indirect Branch Restricted Speculation */283#define X86_FEATURE_AMD_IBRS (13*32+14) /* "" Indirect Branch Restricted Speculation */
284#define X86_FEATURE_AMD_STIBP (13*32+15) /* "" Single Thread Indirect Branch Predictors */284#define X86_FEATURE_AMD_STIBP (13*32+15) /* "" Single Thread Indirect Branch Predictors */
285#define X86_FEATURE_AMD_SSBD (13*32+24) /* "" Speculative Store Bypass Disable */
285#define X86_FEATURE_VIRT_SSBD (13*32+25) /* Virtualized Speculative Store Bypass Disable */286#define X86_FEATURE_VIRT_SSBD (13*32+25) /* Virtualized Speculative Store Bypass Disable */
287#define X86_FEATURE_AMD_SSB_NO (13*32+26) /* "" Speculative Store Bypass is fixed in hardware. */
286 288
287/* Thermal and Power Management Leaf, CPUID level 0x00000006 (EAX), word 14 */289/* Thermal and Power Management Leaf, CPUID level 0x00000006 (EAX), word 14 */
288#define X86_FEATURE_DTHERM (14*32+ 0) /* Digital Thermal Sensor */290#define X86_FEATURE_DTHERM (14*32+ 0) /* Digital Thermal Sensor */
tools/bpf/bpftool/prog.c+8−4
@@ -694,15 +694,19 @@ static int do_load(int argc, char **argv) · 693 unmodified lines
694 return -1;694 return -1;
695 }695 }
696 696
697 if (do_pin_fd(prog_fd, argv[1])) {697 if (do_pin_fd(prog_fd, argv[1]))
698 p_err("failed to pin program");698 goto err_close_obj;
699 return -1;
700 }
701 699
702 if (json_output)700 if (json_output)
703 jsonw_null(json_wtr);701 jsonw_null(json_wtr);
704 702
703 bpf_object__close(obj);
704
705 return 0;705 return 0;
706
707err_close_obj:
708 bpf_object__close(obj);
709 return -1;
706}710}
707 711
708static int do_help(int argc, char **argv)712static int do_help(int argc, char **argv)
tools/include/uapi/drm/drm.h+7−0
@@ -680,6 +680,13 @@ struct drm_get_cap { · 679 unmodified lines
680 */680 */
681#define DRM_CLIENT_CAP_ATOMIC 3681#define DRM_CLIENT_CAP_ATOMIC 3
682 682
683/**
684 * DRM_CLIENT_CAP_ASPECT_RATIO
685 *
686 * If set to 1, the DRM core will provide aspect ratio information in modes.
687 */
688#define DRM_CLIENT_CAP_ASPECT_RATIO 4
689
683/** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */690/** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
684struct drm_set_client_cap {691struct drm_set_client_cap {
685 __u64 capability;692 __u64 capability;
tools/include/uapi/linux/bpf.h+1−1
@@ -2630,7 +2630,7 @@ struct bpf_fib_lookup { · 2629 unmodified lines
2630 union {2630 union {
2631 /* inputs to lookup */2631 /* inputs to lookup */
2632 __u8 tos; /* AF_INET */2632 __u8 tos; /* AF_INET */
2633 __be32 flowlabel; /* AF_INET6 */2633 __be32 flowinfo; /* AF_INET6, flow_label + priority */
2634 2634
2635 /* output: metric of fib result (IPv4/IPv6 only) */2635 /* output: metric of fib result (IPv4/IPv6 only) */
2636 __u32 rt_metric;2636 __u32 rt_metric;
tools/include/uapi/linux/if_link.h+2−0
@@ -333,6 +333,7 @@ enum { · 332 unmodified lines
333 IFLA_BRPORT_BCAST_FLOOD,333 IFLA_BRPORT_BCAST_FLOOD,
334 IFLA_BRPORT_GROUP_FWD_MASK,334 IFLA_BRPORT_GROUP_FWD_MASK,
335 IFLA_BRPORT_NEIGH_SUPPRESS,335 IFLA_BRPORT_NEIGH_SUPPRESS,
336 IFLA_BRPORT_ISOLATED,
336 __IFLA_BRPORT_MAX337 __IFLA_BRPORT_MAX
337};338};
338#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)339#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
@@ -516,6 +517,7 @@ enum { · 177 unmodified lines
516 IFLA_VXLAN_COLLECT_METADATA,517 IFLA_VXLAN_COLLECT_METADATA,
517 IFLA_VXLAN_LABEL,518 IFLA_VXLAN_LABEL,
518 IFLA_VXLAN_GPE,519 IFLA_VXLAN_GPE,
520 IFLA_VXLAN_TTL_INHERIT,
519 __IFLA_VXLAN_MAX521 __IFLA_VXLAN_MAX
520};522};
521#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)523#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
tools/include/uapi/linux/kvm.h+1−0
@@ -948,6 +948,7 @@ struct kvm_ppc_resize_hpt { · 947 unmodified lines
948#define KVM_CAP_S390_BPB 152948#define KVM_CAP_S390_BPB 152
949#define KVM_CAP_GET_MSR_FEATURES 153949#define KVM_CAP_GET_MSR_FEATURES 153
950#define KVM_CAP_HYPERV_EVENTFD 154950#define KVM_CAP_HYPERV_EVENTFD 154
951#define KVM_CAP_HYPERV_TLBFLUSH 155
951 952
952#ifdef KVM_CAP_IRQ_ROUTING953#ifdef KVM_CAP_IRQ_ROUTING
953 954
tools/perf/arch/powerpc/util/skip-callchain-idx.c+1−1
@@ -243,7 +243,7 @@ int arch_skip_callchain_idx(struct thread *thread, struct ip_callchain *chain) · 242 unmodified lines
243 u64 ip;243 u64 ip;
244 u64 skip_slot = -1;244 u64 skip_slot = -1;
245 245
246 if (chain->nr < 3)246 if (!chain || chain->nr < 3)
247 return skip_slot;247 return skip_slot;
248 248
249 ip = chain->ips[2];249 ip = chain->ips[2];
tools/perf/arch/x86/entry/syscalls/syscall_64.tbl+2−0
@@ -341,6 +341,8 @@ · 340 unmodified lines
341330 common pkey_alloc __x64_sys_pkey_alloc341330 common pkey_alloc __x64_sys_pkey_alloc
342331 common pkey_free __x64_sys_pkey_free342331 common pkey_free __x64_sys_pkey_free
343332 common statx __x64_sys_statx343332 common statx __x64_sys_statx
344333 common io_pgetevents __x64_sys_io_pgetevents
345334 common rseq __x64_sys_rseq
344 346
345#347#
346# x32-specific system call numbers start at 512 to avoid cache impact348# x32-specific system call numbers start at 512 to avoid cache impact
tools/perf/bench/numa.c+3−2
@@ -1098,7 +1098,7 @@ static void *worker_thread(void *__tdata) · 1097 unmodified lines
1098 u8 *global_data;1098 u8 *global_data;
1099 u8 *process_data;1099 u8 *process_data;
1100 u8 *thread_data;1100 u8 *thread_data;
1101 u64 bytes_done;1101 u64 bytes_done, secs;
1102 long work_done;1102 long work_done;
1103 u32 l;1103 u32 l;
1104 struct rusage rusage;1104 struct rusage rusage;
@@ -1254,7 +1254,8 @@ static void *worker_thread(void *__tdata) · 149 unmodified lines
1254 timersub(&stop, &start0, &diff);1254 timersub(&stop, &start0, &diff);
1255 td->runtime_ns = diff.tv_sec * NSEC_PER_SEC;1255 td->runtime_ns = diff.tv_sec * NSEC_PER_SEC;
1256 td->runtime_ns += diff.tv_usec * NSEC_PER_USEC;1256 td->runtime_ns += diff.tv_usec * NSEC_PER_USEC;
1257 td->speed_gbs = bytes_done / (td->runtime_ns / NSEC_PER_SEC) / 1e9;1257 secs = td->runtime_ns / NSEC_PER_SEC;
1258 td->speed_gbs = secs ? bytes_done / secs / 1e9 : 0;
1258 1259
1259 getrusage(RUSAGE_THREAD, &rusage);1260 getrusage(RUSAGE_THREAD, &rusage);
1260 td->system_time_ns = rusage.ru_stime.tv_sec * NSEC_PER_SEC;1261 td->system_time_ns = rusage.ru_stime.tv_sec * NSEC_PER_SEC;
tools/perf/builtin-annotate.c+10−1
@@ -283,6 +283,15 @@ out_put: · 282 unmodified lines
283 return ret;283 return ret;
284}284}
285 285
286static int process_feature_event(struct perf_tool *tool,
287 union perf_event *event,
288 struct perf_session *session)
289{
290 if (event->feat.feat_id < HEADER_LAST_FEATURE)
291 return perf_event__process_feature(tool, event, session);
292 return 0;
293}
294
286static int hist_entry__tty_annotate(struct hist_entry *he,295static int hist_entry__tty_annotate(struct hist_entry *he,
287 struct perf_evsel *evsel,296 struct perf_evsel *evsel,
288 struct perf_annotate *ann)297 struct perf_annotate *ann)
@@ -471,7 +480,7 @@ int cmd_annotate(int argc, const char **argv) · 182 unmodified lines
471 .attr = perf_event__process_attr,480 .attr = perf_event__process_attr,
472 .build_id = perf_event__process_build_id,481 .build_id = perf_event__process_build_id,
473 .tracing_data = perf_event__process_tracing_data,482 .tracing_data = perf_event__process_tracing_data,
474 .feature = perf_event__process_feature,483 .feature = process_feature_event,
475 .ordered_events = true,484 .ordered_events = true,
476 .ordering_requires_timestamps = true,485 .ordering_requires_timestamps = true,
477 },486 },
tools/perf/builtin-report.c+2−1
@@ -217,7 +217,8 @@ static int process_feature_event(struct perf_tool *tool, · 216 unmodified lines
217 }217 }
218 218
219 /*219 /*
220 * All features are received, we can force the220 * (feat_id = HEADER_LAST_FEATURE) is the end marker which
221 * means all features are received, now we can force the
221 * group if needed.222 * group if needed.
222 */223 */
223 setup_forced_leader(rep, session->evlist);224 setup_forced_leader(rep, session->evlist);
tools/perf/builtin-script.c+27−3
@@ -1834,6 +1834,7 @@ static int process_attr(struct perf_tool *tool, union perf_event *event, · 1833 unmodified lines
1834 struct perf_evlist *evlist;1834 struct perf_evlist *evlist;
1835 struct perf_evsel *evsel, *pos;1835 struct perf_evsel *evsel, *pos;
1836 int err;1836 int err;
1837 static struct perf_evsel_script *es;
1837 1838
1838 err = perf_event__process_attr(tool, event, pevlist);1839 err = perf_event__process_attr(tool, event, pevlist);
1839 if (err)1840 if (err)
@@ -1842,6 +1843,19 @@ static int process_attr(struct perf_tool *tool, union perf_event *event, · 2 unmodified lines
1842 evlist = *pevlist;1843 evlist = *pevlist;
1843 evsel = perf_evlist__last(*pevlist);1844 evsel = perf_evlist__last(*pevlist);
1844 1845
1846 if (!evsel->priv) {
1847 if (scr->per_event_dump) {
1848 evsel->priv = perf_evsel_script__new(evsel,
1849 scr->session->data);
1850 } else {
1851 es = zalloc(sizeof(*es));
1852 if (!es)
1853 return -ENOMEM;
1854 es->fp = stdout;
1855 evsel->priv = es;
1856 }
1857 }
1858
1845 if (evsel->attr.type >= PERF_TYPE_MAX &&1859 if (evsel->attr.type >= PERF_TYPE_MAX &&
1846 evsel->attr.type != PERF_TYPE_SYNTH)1860 evsel->attr.type != PERF_TYPE_SYNTH)
1847 return 0;1861 return 0;
@@ -3030,6 +3044,15 @@ int process_cpu_map_event(struct perf_tool *tool __maybe_unused, · 1182 unmodified lines
3030 return set_maps(script);3044 return set_maps(script);
3031}3045}
3032 3046
3047static int process_feature_event(struct perf_tool *tool,
3048 union perf_event *event,
3049 struct perf_session *session)
3050{
3051 if (event->feat.feat_id < HEADER_LAST_FEATURE)
3052 return perf_event__process_feature(tool, event, session);
3053 return 0;
3054}
3055
3033#ifdef HAVE_AUXTRACE_SUPPORT3056#ifdef HAVE_AUXTRACE_SUPPORT
3034static int perf_script__process_auxtrace_info(struct perf_tool *tool,3057static int perf_script__process_auxtrace_info(struct perf_tool *tool,
3035 union perf_event *event,3058 union perf_event *event,
@@ -3074,7 +3097,7 @@ int cmd_script(int argc, const char **argv) · 38 unmodified lines
3074 .attr = process_attr,3097 .attr = process_attr,
3075 .event_update = perf_event__process_event_update,3098 .event_update = perf_event__process_event_update,
3076 .tracing_data = perf_event__process_tracing_data,3099 .tracing_data = perf_event__process_tracing_data,
3077 .feature = perf_event__process_feature,3100 .feature = process_feature_event,
3078 .build_id = perf_event__process_build_id,3101 .build_id = perf_event__process_build_id,
3079 .id_index = perf_event__process_id_index,3102 .id_index = perf_event__process_id_index,
3080 .auxtrace_info = perf_script__process_auxtrace_info,3103 .auxtrace_info = perf_script__process_auxtrace_info,
@@ -3125,8 +3148,9 @@ int cmd_script(int argc, const char **argv) · 44 unmodified lines
3125 "+field to add and -field to remove."3148 "+field to add and -field to remove."
3126 "Valid types: hw,sw,trace,raw,synth. "3149 "Valid types: hw,sw,trace,raw,synth. "
3127 "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"3150 "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"
3128 "addr,symoff,period,iregs,uregs,brstack,brstacksym,flags,"3151 "addr,symoff,srcline,period,iregs,uregs,brstack,"
3129 "bpf-output,callindent,insn,insnlen,brstackinsn,synth,phys_addr",3152 "brstacksym,flags,bpf-output,brstackinsn,brstackoff,"
3153 "callindent,insn,insnlen,synth,phys_addr,metric,misc",
3130 parse_output_fields),3154 parse_output_fields),
3131 OPT_BOOLEAN('a', "all-cpus", &system_wide,3155 OPT_BOOLEAN('a', "all-cpus", &system_wide,
3132 "system-wide collection from all CPUs"),3156 "system-wide collection from all CPUs"),
tools/perf/tests/parse-events.c+20−5
@@ -1309,6 +1309,11 @@ static int test__checkevent_config_cache(struct perf_evlist *evlist) · 1308 unmodified lines
1309 return 0;1309 return 0;
1310}1310}
1311 1311
1312static bool test__intel_pt_valid(void)
1313{
1314 return !!perf_pmu__find("intel_pt");
1315}
1316
1312static int test__intel_pt(struct perf_evlist *evlist)1317static int test__intel_pt(struct perf_evlist *evlist)
1313{1318{
1314 struct perf_evsel *evsel = perf_evlist__first(evlist);1319 struct perf_evsel *evsel = perf_evlist__first(evlist);
@@ -1375,6 +1380,7 @@ struct evlist_test { · 60 unmodified lines
1375 const char *name;1380 const char *name;
1376 __u32 type;1381 __u32 type;
1377 const int id;1382 const int id;
1383 bool (*valid)(void);
1378 int (*check)(struct perf_evlist *evlist);1384 int (*check)(struct perf_evlist *evlist);
1379};1385};
1380 1386
@@ -1648,6 +1654,7 @@ static struct evlist_test test__events[] = { · 267 unmodified lines
1648 },1654 },
1649 {1655 {
1650 .name = "intel_pt//u",1656 .name = "intel_pt//u",
1657 .valid = test__intel_pt_valid,
1651 .check = test__intel_pt,1658 .check = test__intel_pt,
1652 .id = 52,1659 .id = 52,
1653 },1660 },
@@ -1686,17 +1693,24 @@ static struct terms_test test__terms[] = { · 32 unmodified lines
1686 1693
1687static int test_event(struct evlist_test *e)1694static int test_event(struct evlist_test *e)
1688{1695{
1696 struct parse_events_error err = { .idx = 0, };
1689 struct perf_evlist *evlist;1697 struct perf_evlist *evlist;
1690 int ret;1698 int ret;
1691 1699
1700 if (e->valid && !e->valid()) {
1701 pr_debug("... SKIP");
1702 return 0;
1703 }
1704
1692 evlist = perf_evlist__new();1705 evlist = perf_evlist__new();
1693 if (evlist == NULL)1706 if (evlist == NULL)
1694 return -ENOMEM;1707 return -ENOMEM;
1695 1708
1696 ret = parse_events(evlist, e->name, NULL);1709 ret = parse_events(evlist, e->name, &err);
1697 if (ret) {1710 if (ret) {
1698 pr_debug("failed to parse event '%s', err %d\n",1711 pr_debug("failed to parse event '%s', err %d, str '%s'\n",
1699 e->name, ret);1712 e->name, ret, err.str);
1713 parse_events_print_error(&err, e->name);
1700 } else {1714 } else {
1701 ret = e->check(evlist);1715 ret = e->check(evlist);
1702 }1716 }
@@ -1714,10 +1728,11 @@ static int test_events(struct evlist_test *events, unsigned cnt) · 11 unmodified lines
1714 for (i = 0; i < cnt; i++) {1728 for (i = 0; i < cnt; i++) {
1715 struct evlist_test *e = &events[i];1729 struct evlist_test *e = &events[i];
1716 1730
1717 pr_debug("running test %d '%s'\n", e->id, e->name);1731 pr_debug("running test %d '%s'", e->id, e->name);
1718 ret1 = test_event(e);1732 ret1 = test_event(e);
1719 if (ret1)1733 if (ret1)
1720 ret2 = ret1;1734 ret2 = ret1;
1735 pr_debug("\n");
1721 }1736 }
1722 1737
1723 return ret2;1738 return ret2;
@@ -1799,7 +1814,7 @@ static int test_pmu_events(void) · 75 unmodified lines
1799 }1814 }
1800 1815
1801 while (!ret && (ent = readdir(dir))) {1816 while (!ret && (ent = readdir(dir))) {
1802 struct evlist_test e;1817 struct evlist_test e = { .id = 0, };
1803 char name[2 * NAME_MAX + 1 + 12 + 3];1818 char name[2 * NAME_MAX + 1 + 12 + 3];
1804 1819
1805 /* Names containing . are special and cannot be used directly */1820 /* Names containing . are special and cannot be used directly */
tools/perf/tests/topology.c+1−0
@@ -45,6 +45,7 @@ static int session_write_header(char *path) · 44 unmodified lines
45 45
46 perf_header__set_feat(&session->header, HEADER_CPU_TOPOLOGY);46 perf_header__set_feat(&session->header, HEADER_CPU_TOPOLOGY);
47 perf_header__set_feat(&session->header, HEADER_NRCPUS);47 perf_header__set_feat(&session->header, HEADER_NRCPUS);
48 perf_header__set_feat(&session->header, HEADER_ARCH);
48 49
49 session->header.data_size += DATA_SIZE;50 session->header.data_size += DATA_SIZE;
50 51
tools/perf/util/c++/clang.cpp+9−2
@@ -146,8 +146,15 @@ getBPFObjectFromModule(llvm::Module *Module) · 145 unmodified lines
146 raw_svector_ostream ostream(*Buffer);146 raw_svector_ostream ostream(*Buffer);
147 147
148 legacy::PassManager PM;148 legacy::PassManager PM;
149 if (TargetMachine->addPassesToEmitFile(PM, ostream,149 bool NotAdded;
150 TargetMachine::CGFT_ObjectFile)) {150#if CLANG_VERSION_MAJOR < 7
151 NotAdded = TargetMachine->addPassesToEmitFile(PM, ostream,
152 TargetMachine::CGFT_ObjectFile);
153#else
154 NotAdded = TargetMachine->addPassesToEmitFile(PM, ostream, nullptr,
155 TargetMachine::CGFT_ObjectFile);
156#endif
157 if (NotAdded) {
151 llvm::errs() << "TargetMachine can't emit a file of this type\n";158 llvm::errs() << "TargetMachine can't emit a file of this type\n";
152 return std::unique_ptr<llvm::SmallVectorImpl<char>>(nullptr);;159 return std::unique_ptr<llvm::SmallVectorImpl<char>>(nullptr);;
153 }160 }
tools/perf/util/header.c+10−2
@@ -2129,6 +2129,7 @@ static int process_cpu_topology(struct feat_fd *ff, void *data __maybe_unused) · 2128 unmodified lines
2129 int cpu_nr = ff->ph->env.nr_cpus_avail;2129 int cpu_nr = ff->ph->env.nr_cpus_avail;
2130 u64 size = 0;2130 u64 size = 0;
2131 struct perf_header *ph = ff->ph;2131 struct perf_header *ph = ff->ph;
2132 bool do_core_id_test = true;
2132 2133
2133 ph->env.cpu = calloc(cpu_nr, sizeof(*ph->env.cpu));2134 ph->env.cpu = calloc(cpu_nr, sizeof(*ph->env.cpu));
2134 if (!ph->env.cpu)2135 if (!ph->env.cpu)
@@ -2183,6 +2184,13 @@ static int process_cpu_topology(struct feat_fd *ff, void *data __maybe_unused) · 48 unmodified lines
2183 return 0;2184 return 0;
2184 }2185 }
2185 2186
2187 /* On s390 the socket_id number is not related to the numbers of cpus.
2188 * The socket_id number might be higher than the numbers of cpus.
2189 * This depends on the configuration.
2190 */
2191 if (ph->env.arch && !strncmp(ph->env.arch, "s390", 4))
2192 do_core_id_test = false;
2193
2186 for (i = 0; i < (u32)cpu_nr; i++) {2194 for (i = 0; i < (u32)cpu_nr; i++) {
2187 if (do_read_u32(ff, &nr))2195 if (do_read_u32(ff, &nr))
2188 goto free_cpu;2196 goto free_cpu;
@@ -2192,7 +2200,7 @@ static int process_cpu_topology(struct feat_fd *ff, void *data __maybe_unused) · 3 unmodified lines
2192 if (do_read_u32(ff, &nr))2200 if (do_read_u32(ff, &nr))
2193 goto free_cpu;2201 goto free_cpu;
2194 2202
2195 if (nr != (u32)-1 && nr > (u32)cpu_nr) {2203 if (do_core_id_test && nr != (u32)-1 && nr > (u32)cpu_nr) {
2196 pr_debug("socket_id number is too big."2204 pr_debug("socket_id number is too big."
2197 "You may need to upgrade the perf tool.\n");2205 "You may need to upgrade the perf tool.\n");
2198 goto free_cpu;2206 goto free_cpu;
@@ -3456,7 +3464,7 @@ int perf_event__process_feature(struct perf_tool *tool, · 1257 unmodified lines
3456 pr_warning("invalid record type %d in pipe-mode\n", type);3464 pr_warning("invalid record type %d in pipe-mode\n", type);
3457 return 0;3465 return 0;
3458 }3466 }
3459 if (feat == HEADER_RESERVED || feat > HEADER_LAST_FEATURE) {3467 if (feat == HEADER_RESERVED || feat >= HEADER_LAST_FEATURE) {
3460 pr_warning("invalid record type %d in pipe-mode\n", type);3468 pr_warning("invalid record type %d in pipe-mode\n", type);
3461 return -1;3469 return -1;
3462 }3470 }
tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c+1−1
@@ -366,7 +366,7 @@ static int intel_pt_get_cyc(unsigned int byte, const unsigned char *buf, · 365 unmodified lines
366 if (len < offs)366 if (len < offs)
367 return INTEL_PT_NEED_MORE_BYTES;367 return INTEL_PT_NEED_MORE_BYTES;
368 byte = buf[offs++];368 byte = buf[offs++];
369 payload |= (byte >> 1) << shift;369 payload |= ((uint64_t)byte >> 1) << shift;
370 }370 }
371 371
372 packet->type = INTEL_PT_CYC;372 packet->type = INTEL_PT_CYC;
tools/perf/util/pmu.c+97−2
@@ -234,6 +234,74 @@ static int perf_pmu__parse_snapshot(struct perf_pmu_alias *alias, · 233 unmodified lines
234 return 0;234 return 0;
235}235}
236 236
237static void perf_pmu_assign_str(char *name, const char *field, char **old_str,
238 char **new_str)
239{
240 if (!*old_str)
241 goto set_new;
242
243 if (*new_str) { /* Have new string, check with old */
244 if (strcasecmp(*old_str, *new_str))
245 pr_debug("alias %s differs in field '%s'\n",
246 name, field);
247 zfree(old_str);
248 } else /* Nothing new --> keep old string */
249 return;
250set_new:
251 *old_str = *new_str;
252 *new_str = NULL;
253}
254
255static void perf_pmu_update_alias(struct perf_pmu_alias *old,
256 struct perf_pmu_alias *newalias)
257{
258 perf_pmu_assign_str(old->name, "desc", &old->desc, &newalias->desc);
259 perf_pmu_assign_str(old->name, "long_desc", &old->long_desc,
260 &newalias->long_desc);
261 perf_pmu_assign_str(old->name, "topic", &old->topic, &newalias->topic);
262 perf_pmu_assign_str(old->name, "metric_expr", &old->metric_expr,
263 &newalias->metric_expr);
264 perf_pmu_assign_str(old->name, "metric_name", &old->metric_name,
265 &newalias->metric_name);
266 perf_pmu_assign_str(old->name, "value", &old->str, &newalias->str);
267 old->scale = newalias->scale;
268 old->per_pkg = newalias->per_pkg;
269 old->snapshot = newalias->snapshot;
270 memcpy(old->unit, newalias->unit, sizeof(old->unit));
271}
272
273/* Delete an alias entry. */
274static void perf_pmu_free_alias(struct perf_pmu_alias *newalias)
275{
276 zfree(&newalias->name);
277 zfree(&newalias->desc);
278 zfree(&newalias->long_desc);
279 zfree(&newalias->topic);
280 zfree(&newalias->str);
281 zfree(&newalias->metric_expr);
282 zfree(&newalias->metric_name);
283 parse_events_terms__purge(&newalias->terms);
284 free(newalias);
285}
286
287/* Merge an alias, search in alias list. If this name is already
288 * present merge both of them to combine all information.
289 */
290static bool perf_pmu_merge_alias(struct perf_pmu_alias *newalias,
291 struct list_head *alist)
292{
293 struct perf_pmu_alias *a;
294
295 list_for_each_entry(a, alist, list) {
296 if (!strcasecmp(newalias->name, a->name)) {
297 perf_pmu_update_alias(a, newalias);
298 perf_pmu_free_alias(newalias);
299 return true;
300 }
301 }
302 return false;
303}
304
237static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,305static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
238 char *desc, char *val,306 char *desc, char *val,
239 char *long_desc, char *topic,307 char *long_desc, char *topic,
@@ -241,9 +309,11 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name, · 1 unmodified line
241 char *metric_expr,309 char *metric_expr,
242 char *metric_name)310 char *metric_name)
243{311{
312 struct parse_events_term *term;
244 struct perf_pmu_alias *alias;313 struct perf_pmu_alias *alias;
245 int ret;314 int ret;
246 int num;315 int num;
316 char newval[256];
247 317
248 alias = malloc(sizeof(*alias));318 alias = malloc(sizeof(*alias));
249 if (!alias)319 if (!alias)
@@ -262,6 +332,27 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name, · 12 unmodified lines
262 return ret;332 return ret;
263 }333 }
264 334
335 /* Scan event and remove leading zeroes, spaces, newlines, some
336 * platforms have terms specified as
337 * event=0x0091 (read from files ../<PMU>/events/<FILE>
338 * and terms specified as event=0x91 (read from JSON files).
339 *
340 * Rebuild string to make alias->str member comparable.
341 */
342 memset(newval, 0, sizeof(newval));
343 ret = 0;
344 list_for_each_entry(term, &alias->terms, list) {
345 if (ret)
346 ret += scnprintf(newval + ret, sizeof(newval) - ret,
347 ",");
348 if (term->type_val == PARSE_EVENTS__TERM_TYPE_NUM)
349 ret += scnprintf(newval + ret, sizeof(newval) - ret,
350 "%s=%#x", term->config, term->val.num);
351 else if (term->type_val == PARSE_EVENTS__TERM_TYPE_STR)
352 ret += scnprintf(newval + ret, sizeof(newval) - ret,
353 "%s=%s", term->config, term->val.str);
354 }
355
265 alias->name = strdup(name);356 alias->name = strdup(name);
266 if (dir) {357 if (dir) {
267 /*358 /*
@@ -285,9 +376,10 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name, · 17 unmodified lines
285 snprintf(alias->unit, sizeof(alias->unit), "%s", unit);376 snprintf(alias->unit, sizeof(alias->unit), "%s", unit);
286 }377 }
287 alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && num == 1;378 alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && num == 1;
288 alias->str = strdup(val);379 alias->str = strdup(newval);
289 380
290 list_add_tail(&alias->list, list);381 if (!perf_pmu_merge_alias(alias, list))
382 list_add_tail(&alias->list, list);
291 383
292 return 0;384 return 0;
293}385}
@@ -303,6 +395,9 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI · 9 unmodified lines
303 395
304 buf[ret] = 0;396 buf[ret] = 0;
305 397
398 /* Remove trailing newline from sysfs file */
399 rtrim(buf);
400
306 return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL, NULL, NULL,401 return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL, NULL, NULL,
307 NULL, NULL, NULL);402 NULL, NULL, NULL);
308}403}
tools/testing/selftests/bpf/config+1−0
@@ -6,6 +6,7 @@ CONFIG_TEST_BPF=m · 5 unmodified lines
6CONFIG_CGROUP_BPF=y6CONFIG_CGROUP_BPF=y
7CONFIG_NETDEVSIM=m7CONFIG_NETDEVSIM=m
8CONFIG_NET_CLS_ACT=y8CONFIG_NET_CLS_ACT=y
9CONFIG_NET_SCHED=y
9CONFIG_NET_SCH_INGRESS=y10CONFIG_NET_SCH_INGRESS=y
10CONFIG_NET_IPIP=y11CONFIG_NET_IPIP=y
11CONFIG_IPV6=y12CONFIG_IPV6=y
tools/testing/selftests/bpf/test_kmod.sh+9−0
@@ -1,6 +1,15 @@
1#!/bin/sh1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.02# SPDX-License-Identifier: GPL-2.0
3 3
4# Kselftest framework requirement - SKIP code is 4.
5ksft_skip=4
6
7msg="skip all tests:"
8if [ "$(id -u)" != "0" ]; then
9 echo $msg please run this as root >&2
10 exit $ksft_skip
11fi
12
4SRC_TREE=../../../../13SRC_TREE=../../../../
5 14
6test_run()15test_run()
tools/testing/selftests/bpf/test_lirc_mode2.sh+9−0
@@ -1,6 +1,15 @@
1#!/bin/bash1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.02# SPDX-License-Identifier: GPL-2.0
3 3
4# Kselftest framework requirement - SKIP code is 4.
5ksft_skip=4
6
7msg="skip all tests:"
8if [ $UID != 0 ]; then
9 echo $msg please run this as root >&2
10 exit $ksft_skip
11fi
12
4GREEN='\033[0;92m'13GREEN='\033[0;92m'
5RED='\033[0;31m'14RED='\033[0;31m'
6NC='\033[0m' # No Color15NC='\033[0m' # No Color
tools/testing/selftests/bpf/test_lwt_seg6local.sh+9−0
@@ -21,6 +21,15 @@ · 20 unmodified lines
21# An UDP datagram is sent from fb00::1 to fb00::6. The test succeeds if this21# An UDP datagram is sent from fb00::1 to fb00::6. The test succeeds if this
22# datagram can be read on NS6 when binding to fb00::6.22# datagram can be read on NS6 when binding to fb00::6.
23 23
24# Kselftest framework requirement - SKIP code is 4.
25ksft_skip=4
26
27msg="skip all tests:"
28if [ $UID != 0 ]; then
29 echo $msg please run this as root >&2
30 exit $ksft_skip
31fi
32
24TMP_FILE="/tmp/selftest_lwt_seg6local.txt"33TMP_FILE="/tmp/selftest_lwt_seg6local.txt"
25 34
26cleanup()35cleanup()
tools/testing/selftests/bpf/test_sockmap.c+0−6
@@ -1413,18 +1413,12 @@ out: · 1412 unmodified lines
1413 1413
1414int main(int argc, char **argv)1414int main(int argc, char **argv)
1415{1415{
1416 struct rlimit r = {10 * 1024 * 1024, RLIM_INFINITY};
1417 int iov_count = 1, length = 1024, rate = 1;1416 int iov_count = 1, length = 1024, rate = 1;
1418 struct sockmap_options options = {0};1417 struct sockmap_options options = {0};
1419 int opt, longindex, err, cg_fd = 0;1418 int opt, longindex, err, cg_fd = 0;
1420 char *bpf_file = BPF_SOCKMAP_FILENAME;1419 char *bpf_file = BPF_SOCKMAP_FILENAME;
1421 int test = PING_PONG;1420 int test = PING_PONG;
1422 1421
1423 if (setrlimit(RLIMIT_MEMLOCK, &r)) {
1424 perror("setrlimit(RLIMIT_MEMLOCK)");
1425 return 1;
1426 }
1427
1428 if (argc < 2)1422 if (argc < 2)
1429 return test_suite();1423 return test_suite();
1430 1424
tools/testing/selftests/net/fib_tests.sh+0−0

File mode changed from 100644 to 100755.

tools/testing/selftests/x86/sigreturn.c+36−23
@@ -610,21 +610,41 @@ static int test_valid_sigreturn(int cs_bits, bool use_16bit_ss, int force_ss) · 609 unmodified lines
610 */610 */
611 for (int i = 0; i < NGREG; i++) {611 for (int i = 0; i < NGREG; i++) {
612 greg_t req = requested_regs[i], res = resulting_regs[i];612 greg_t req = requested_regs[i], res = resulting_regs[i];
613
613 if (i == REG_TRAPNO || i == REG_IP)614 if (i == REG_TRAPNO || i == REG_IP)
614 continue; /* don't care */615 continue; /* don't care */
615 if (i == REG_SP) {
616 printf("\tSP: %llx -> %llx\n", (unsigned long long)req,
617 (unsigned long long)res);
618 616
617 if (i == REG_SP) {
619 /*618 /*
620 * In many circumstances, the high 32 bits of rsp619 * If we were using a 16-bit stack segment, then
621 * are zeroed. For example, we could be a real620 * the kernel is a bit stuck: IRET only restores
622 * 32-bit program, or we could hit any of a number621 * the low 16 bits of ESP/RSP if SS is 16-bit.
623 * of poorly-documented IRET or segmented ESP622 * The kernel uses a hack to restore bits 31:16,
624 * oddities. If this happens, it's okay.623 * but that hack doesn't help with bits 63:32.
624 * On Intel CPUs, bits 63:32 end up zeroed, and, on
625 * AMD CPUs, they leak the high bits of the kernel
626 * espfix64 stack pointer. There's very little that
627 * the kernel can do about it.
628 *
629 * Similarly, if we are returning to a 32-bit context,
630 * the CPU will often lose the high 32 bits of RSP.
625 */631 */
626 if (res == (req & 0xFFFFFFFF))632
627 continue; /* OK; not expected to work */633 if (res == req)
634 continue;
635
636 if (cs_bits != 64 && ((res ^ req) & 0xFFFFFFFF) == 0) {
637 printf("[NOTE]\tSP: %llx -> %llx\n",
638 (unsigned long long)req,
639 (unsigned long long)res);
640 continue;
641 }
642
643 printf("[FAIL]\tSP mismatch: requested 0x%llx; got 0x%llx\n",
644 (unsigned long long)requested_regs[i],
645 (unsigned long long)resulting_regs[i]);
646 nerrs++;
647 continue;
628 }648 }
629 649
630 bool ignore_reg = false;650 bool ignore_reg = false;
@@ -654,25 +674,18 @@ static int test_valid_sigreturn(int cs_bits, bool use_16bit_ss, int force_ss) · 23 unmodified lines
654#endif674#endif
655 675
656 /* Sanity check on the kernel */676 /* Sanity check on the kernel */
657 if (i == REG_CX && requested_regs[i] != resulting_regs[i]) {677 if (i == REG_CX && req != res) {
658 printf("[FAIL]\tCX (saved SP) mismatch: requested 0x%llx; got 0x%llx\n",678 printf("[FAIL]\tCX (saved SP) mismatch: requested 0x%llx; got 0x%llx\n",
659 (unsigned long long)requested_regs[i],679 (unsigned long long)req,
660 (unsigned long long)resulting_regs[i]);680 (unsigned long long)res);
661 nerrs++;681 nerrs++;
662 continue;682 continue;
663 }683 }
664 684
665 if (requested_regs[i] != resulting_regs[i] && !ignore_reg) {685 if (req != res && !ignore_reg) {
666 /*
667 * SP is particularly interesting here. The
668 * usual cause of failures is that we hit the
669 * nasty IRET case of returning to a 16-bit SS,
670 * in which case bits 16:31 of the *kernel*
671 * stack pointer persist in ESP.
672 */
673 printf("[FAIL]\tReg %d mismatch: requested 0x%llx; got 0x%llx\n",686 printf("[FAIL]\tReg %d mismatch: requested 0x%llx; got 0x%llx\n",
674 i, (unsigned long long)requested_regs[i],687 i, (unsigned long long)req,
675 (unsigned long long)resulting_regs[i]);688 (unsigned long long)res);
676 nerrs++;689 nerrs++;
677 }690 }
678 }691 }
tools/virtio/linux/scatterlist.h+0−18
@@ -36,7 +36,6 @@ static inline void sg_assign_page(struct scatterlist *sg, struct page *page) · 35 unmodified lines
36 */36 */
37 BUG_ON((unsigned long) page & 0x03);37 BUG_ON((unsigned long) page & 0x03);
38#ifdef CONFIG_DEBUG_SG38#ifdef CONFIG_DEBUG_SG
39 BUG_ON(sg->sg_magic != SG_MAGIC);
40 BUG_ON(sg_is_chain(sg));39 BUG_ON(sg_is_chain(sg));
41#endif40#endif
42 sg->page_link = page_link | (unsigned long) page;41 sg->page_link = page_link | (unsigned long) page;
@@ -67,7 +66,6 @@ static inline void sg_set_page(struct scatterlist *sg, struct page *page, · 24 unmodified lines
67static inline struct page *sg_page(struct scatterlist *sg)66static inline struct page *sg_page(struct scatterlist *sg)
68{67{
69#ifdef CONFIG_DEBUG_SG68#ifdef CONFIG_DEBUG_SG
70 BUG_ON(sg->sg_magic != SG_MAGIC);
71 BUG_ON(sg_is_chain(sg));69 BUG_ON(sg_is_chain(sg));
72#endif70#endif
73 return (struct page *)((sg)->page_link & ~0x3);71 return (struct page *)((sg)->page_link & ~0x3);
@@ -116,9 +114,6 @@ static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents, · 42 unmodified lines
116 **/114 **/
117static inline void sg_mark_end(struct scatterlist *sg)115static inline void sg_mark_end(struct scatterlist *sg)
118{116{
119#ifdef CONFIG_DEBUG_SG
120 BUG_ON(sg->sg_magic != SG_MAGIC);
121#endif
122 /*117 /*
123 * Set termination bit, clear potential chain bit118 * Set termination bit, clear potential chain bit
124 */119 */
@@ -136,17 +131,11 @@ static inline void sg_mark_end(struct scatterlist *sg) · 11 unmodified lines
136 **/131 **/
137static inline void sg_unmark_end(struct scatterlist *sg)132static inline void sg_unmark_end(struct scatterlist *sg)
138{133{
139#ifdef CONFIG_DEBUG_SG
140 BUG_ON(sg->sg_magic != SG_MAGIC);
141#endif
142 sg->page_link &= ~0x02;134 sg->page_link &= ~0x02;
143}135}
144 136
145static inline struct scatterlist *sg_next(struct scatterlist *sg)137static inline struct scatterlist *sg_next(struct scatterlist *sg)
146{138{
147#ifdef CONFIG_DEBUG_SG
148 BUG_ON(sg->sg_magic != SG_MAGIC);
149#endif
150 if (sg_is_last(sg))139 if (sg_is_last(sg))
151 return NULL;140 return NULL;
152 141
@@ -160,13 +149,6 @@ static inline struct scatterlist *sg_next(struct scatterlist *sg) · 7 unmodified lines
160static inline void sg_init_table(struct scatterlist *sgl, unsigned int nents)149static inline void sg_init_table(struct scatterlist *sgl, unsigned int nents)
161{150{
162 memset(sgl, 0, sizeof(*sgl) * nents);151 memset(sgl, 0, sizeof(*sgl) * nents);
163#ifdef CONFIG_DEBUG_SG
164 {
165 unsigned int i;
166 for (i = 0; i < nents; i++)
167 sgl[i].sg_magic = SG_MAGIC;
168 }
169#endif
170 sg_mark_end(&sgl[nents - 1]);152 sg_mark_end(&sgl[nents - 1]);
171}153}
172 154

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

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

Repository code

Go to file
t